From d81c9273fb833f8b0f576014b27e1e395070b545 Mon Sep 17 00:00:00 2001 From: Ganesan Chandran Date: Fri, 19 Jul 2024 12:37:52 +0530 Subject: [PATCH] feat: new features added (#14) --- .eslintrc.json | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 28 + .github/dependabot.yaml | 11 + .vscode/tasks.json | 8 + CHANGELOG.md | 42 +- icons/code.svg | 17 +- icons/dots.svg | 6 +- icons/plus.svg | 6 + package-lock.json | 10877 ++++++++++------ package.json | 83 +- src/extension.ts | 48 +- .../AttachVariable/attachVariable.tsx | 6 +- .../components/Collection/RunAll/runAll.tsx | 19 +- .../Settings/CollectionSettings.tsx | 8 + .../components/Collection/style.css | 7 + .../components/Common/CodeGenerator/style.css | 4 +- .../components/Common/Consts/sysVariables.ts | 100 + .../Common/Editor/EditorProvider.tsx | 13 +- .../components/Common/Editor/index.tsx | 2 + .../components/Common/Editor/style.css | 4 +- .../components/Common/Table/types.ts | 39 +- .../Common/TextEditor/TextEditor.tsx | 53 +- .../Common/TypesGenerator/consts.ts | 14 + .../Common/TypesGenerator/index.tsx | 92 + .../components/Common/Viewer/JSONViewer.tsx | 6 +- .../components/Common/Viewer/XMLViewer.tsx | 12 +- .../components/Common/icons.tsx | 21 + .../components/MainUI/index.tsx | 94 +- .../components/MainUI/redux/actions.ts | 11 +- .../components/MainUI/redux/reducer.ts | 8 +- .../components/MainUI/redux/types.ts | 10 +- .../OptionsPanel/OptionTab/index.tsx | 9 +- .../OptionsPanel/Options/Auth/OAuth/index.tsx | 314 + .../OptionsPanel/Options/Auth/OAuth/style.css | 56 + .../OptionsPanel/Options/Auth/aws/style.css | 2 +- .../OptionsPanel/Options/Auth/consts.ts | 17 +- .../OptionsPanel/Options/Auth/index.tsx | 9 +- .../OptionsPanel/Options/Auth/style.css | 7 +- .../Options/Body/Binary/index.tsx | 48 +- .../Options/Body/FormData/index.tsx | 30 +- .../OptionsPanel/Options/Body/Raw/Raw.tsx | 26 +- .../Options/Body/UrlEncoded/index.tsx | 31 +- .../OptionsPanel/Options/Body/style.css | 8 +- .../OptionsPanel/Options/PostFetch/index.tsx | 28 + .../OptionsPanel/Options/PreFetch/consts.ts | 39 + .../OptionsPanel/Options/PreFetch/index.tsx | 43 + .../Options/PreFetch/preRequest.tsx | 265 + .../OptionsPanel/Options/PreFetch/style.css | 87 + .../Options/QueryParams/index.tsx | 2 +- .../RequestUI/OptionsPanel/consts.ts | 7 +- .../RequestUI/OptionsPanel/index.tsx | 25 +- .../components/RequestUI/redux/actions.ts | 101 +- .../components/RequestUI/redux/colReducer.ts | 19 +- .../components/RequestUI/redux/reducer.ts | 160 +- .../components/RequestUI/redux/types.ts | 142 +- .../OptionsPanel/OptionTab/index.tsx | 69 +- .../OptionsPanel/OptionTab/style.css | 38 +- .../OptionsPanel/Options/Response/index.tsx | 25 +- .../OptionsPanel/Options/Response/style.css | 14 +- .../ResponseUI/ResponsePanel/index.tsx | 7 +- .../components/SideBar/Collection/index.tsx | 113 +- .../components/SideBar/Collection/style.css | 96 +- .../components/SideBar/History/index.tsx | 33 +- .../components/SideBar/Variables/index.tsx | 1 - .../components/SideBar/index.tsx | 50 +- .../components/SideBar/style.css | 73 +- .../components/TestUI/TestPanel/consts.ts | 10 + .../components/TestUI/TestPanel/helper.ts | 65 +- .../components/TestUI/TestResult/index.tsx | 61 +- .../components/TestUI/TestResult/style.css | 40 +- .../components/Variables/index.tsx | 7 +- .../components/Variables/style.css | 6 +- src/utils/PreFetchRunner.ts | 122 + src/utils/PubSub.ts | 76 + src/utils/configuration.ts | 245 +- src/utils/curlToRequest.ts | 24 +- src/utils/db/collectionDBUtil.ts | 178 +- src/utils/db/mainDBUtil.ts | 236 +- src/utils/db/varDBUtil.ts | 97 +- src/utils/fetchUtil.ts | 120 +- src/utils/helper.ts | 77 +- .../importers/fetchClientImporter_1_0.ts | 94 + src/utils/importers/postmanImporter_2_1.ts | 457 + src/utils/importers/postman_2_1.types.ts | 602 + src/utils/logger/requestLog.ts | 66 + src/utils/logger/vsCodeLogger.ts | 73 + src/utils/ui/addToCollectionUIProvider.tsx | 104 +- src/utils/ui/cookieUIProvider.tsx | 2 +- src/utils/ui/curlUIProvider.tsx | 18 +- src/utils/ui/mainUIProvider.tsx | 523 +- src/utils/ui/sideBarUIProvider.tsx | 70 +- src/utils/ui/variableUIProvider.tsx | 1 + .../fetchClientCollectionValidator.ts | 1307 ++ .../fetchClientVariableValidator.ts | 131 + src/utils/vscodeConfig.ts | 49 +- tsconfig.json | 1 + webpack.config.js | 2 +- 97 files changed, 13857 insertions(+), 4652 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/dependabot.yaml create mode 100644 icons/plus.svg create mode 100644 src/fetch-client-ui/components/Common/Consts/sysVariables.ts create mode 100644 src/fetch-client-ui/components/Common/TypesGenerator/consts.ts create mode 100644 src/fetch-client-ui/components/Common/TypesGenerator/index.tsx create mode 100644 src/fetch-client-ui/components/Common/icons.tsx create mode 100644 src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/OAuth/index.tsx create mode 100644 src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/OAuth/style.css create mode 100644 src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PostFetch/index.tsx create mode 100644 src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/consts.ts create mode 100644 src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/index.tsx create mode 100644 src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/preRequest.tsx create mode 100644 src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/style.css create mode 100644 src/utils/PreFetchRunner.ts create mode 100644 src/utils/PubSub.ts create mode 100644 src/utils/importers/fetchClientImporter_1_0.ts create mode 100644 src/utils/importers/postmanImporter_2_1.ts create mode 100644 src/utils/importers/postman_2_1.types.ts create mode 100644 src/utils/logger/requestLog.ts create mode 100644 src/utils/logger/vsCodeLogger.ts create mode 100644 src/utils/validators/fetchClientCollectionValidator.ts create mode 100644 src/utils/validators/fetchClientVariableValidator.ts diff --git a/.eslintrc.json b/.eslintrc.json index b75d9ba..5351a58 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -14,7 +14,7 @@ "curly": "warn", "eqeqeq": "warn", "no-throw-literal": "warn", - "semi": "off" + "semi": "warn" }, "ignorePatterns": [ "out", diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..69d59ca --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,28 @@ +# Pull Request + +### Description +Please include a summary of the changes and context. List any dependencies that are required for this change. + +**Does this PR introduce a breaking change?** (What changes might users need to make in their application due to this PR?) + +### Types of Changes + +- [ ] Documentation +- [ ] Development + - [ ] Bug Fix + - [ ] New Feature(s) + - [ ] Package Upgrade + - [ ] Others +- [ ] Version control +- [ ] Testing +- [ ] Release + +### Checklist +- [ ] My code follows the style guidelines of this project +- [ ] Commit message follows our guidelines ([Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/)) +- [ ] I have ran the lint locally before submission +- [ ] I have performed a self-review of my code +- [ ] I have made corresponding changes to the documentation + + +**Linked Issue** : [#Issue_Number](Issue_Link) \ No newline at end of file diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000..745df70 --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + + - package-ecosystem: npm + directory: "/" + schedule: + interval: "weekly" diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 2acd96d..2950196 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -38,6 +38,14 @@ "npm: watch-tests" ], "problemMatcher": [] + }, + { + "type": "npm", + "script": "compile", + "group": "build", + "problemMatcher": [], + "label": "npm: compile", + "detail": "webpack --mode development --progress --watch" } ] } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index db6fd00..c52744d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,20 +2,46 @@ All notable changes to the "Fetch Client" extension will be documented in this file. +## v1.4.0 - October, 2022 +### 🎉 New Features +- Import Postman collection (Postman Collection v2.1). +- OAuth2 added for request authorization. +- Pre-requests and conditions are added for Request execution. +- Tests and Variables are moved to PostFetch section. +- Types genreation added for JSON response. +- Added auto refresh in the request tabs when variables are modified. +- Added log for request and response in the output window. +- Added "View Log" button in the sidebar panel to open the log output window. +- Display the variables value when hovering over them. +- Import .env file in the Variable section. +- System variables are added to generate random dynamic data. +- The item in side bar will be focused when changing the request tab. +- Added show more option for larger response in the test case output. +- Added isJson(), regex, notContains options in the test. +- Added support for nested variables. +- "New Request" shortcut icon added in the Collection/Folder. +- Word wrap option added for response section. + +### 🐛 Bug Fixes +- import from Curl ([#5](https://github.com/Ganesan-Chandran/vscode-fetch-client/issues/5)). + +### Requirements +- Minimum required version of VSCode is v1.66.0 + ## v1.3.0 - September, 2022 -### New Features +### 🎉 New Features - Added the settings in the "Run All" Collection. - Support for multiple iterations in "Run All" Collection. - Can add delay between requests and iterations. - Run the requests in sequential or parallel mode for multiple iterations. -### Bug Fixes +### 🐛 Bug Fixes - import from Curl ([#5](https://github.com/Ganesan-Chandran/vscode-fetch-client/issues/5)). - Not able to Duplicate the item in the folder. ## v1.2.0 - July, 2022 -### New Features +### 🎉 New Features - Support nested folder to the Collection. - Run curl request (Under collection in the side bar). - Import curl request (Under collection in the side bar) ([#5](https://github.com/Ganesan-Chandran/vscode-fetch-client/issues/5)). @@ -25,12 +51,12 @@ All notable changes to the "Fetch Client" extension will be documented in this f - File option added in Form in the request body. - Full screen mode is added for resonse section. -### Bug Fixes +### 🐛 Bug Fixes - Bearer Token as a variable does not work due to max length restriction ([#4](https://github.com/Ganesan-Chandran/vscode-fetch-client/issues/4)). ## v1.1.0 - June, 2022 -### New Features +### 🎉 New Features - Folder added to the Collection. - Set environment variable from json response, headers and cookies. - Support AWS Signature auth type. @@ -43,7 +69,7 @@ All notable changes to the "Fetch Client" extension will be documented in this f - Right click for context menu in Sidebar (History, Collection and Variable). - Menu items added (Manage Cookies, View Error Log and Extension Settings) -### Bug Fixes +### 🐛 Bug Fixes \- @@ -51,7 +77,7 @@ All notable changes to the "Fetch Client" extension will be documented in this f - Minimum required version of VSCode is v1.65.0 ## v1.0.0 - May, 2022 -### New Features +### 🎉 New Features - UI Customization and support VSCode Themes. - Test Rest API request with GET, POST, PUT, PATCH, DELETE, HEAD and OPTIONS methods. - Various authentications which are Basic Auth, Bearer Token and API Key. @@ -65,6 +91,6 @@ All notable changes to the "Fetch Client" extension will be documented in this f - Export/Import the Fecth Client's collections and environment variables. - Add documentation/feedback for each request. -### Bug Fixes +### 🐛 Bug Fixes \- \ No newline at end of file diff --git a/icons/code.svg b/icons/code.svg index f931713..da07c5c 100644 --- a/icons/code.svg +++ b/icons/code.svg @@ -1 +1,16 @@ -box-code \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/icons/dots.svg b/icons/dots.svg index aa5681d..da4d30c 100644 --- a/icons/dots.svg +++ b/icons/dots.svg @@ -1,3 +1,5 @@ - - + + + + \ No newline at end of file diff --git a/icons/plus.svg b/icons/plus.svg new file mode 100644 index 0000000..3cb1a31 --- /dev/null +++ b/icons/plus.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/package-lock.json b/package-lock.json index 1eabd99..43a6aa3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "fetch-client", - "version": "1.1.0", + "version": "1.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -8,28 +8,15 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" } }, - "@apideck/better-ajv-errors": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.3.tgz", - "integrity": "sha512-9o+HO2MbJhJHjDYZaDxJmSDckvDpiuItEsrIShV0DXeCshXWRHhqYyU/PKHMkuClOmFnZhRd6wzv4vpDu/dRKg==", - "dev": true, - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, "@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, "requires": { "@babel/highlight": "^7.16.7" } @@ -37,14 +24,12 @@ "@babel/compat-data": { "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", - "dev": true + "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==" }, "@babel/core": { "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", - "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", @@ -66,14 +51,12 @@ "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -106,7 +89,6 @@ "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", - "dev": true, "requires": { "@babel/types": "^7.17.10", "@jridgewell/gen-mapping": "^0.1.0", @@ -136,7 +118,6 @@ "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", - "dev": true, "requires": { "@babel/compat-data": "^7.17.10", "@babel/helper-validator-option": "^7.16.7", @@ -147,8 +128,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -205,7 +185,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, "requires": { "@babel/types": "^7.16.7" } @@ -223,7 +202,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "dev": true, "requires": { "@babel/template": "^7.16.7", "@babel/types": "^7.17.0" @@ -233,7 +211,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, "requires": { "@babel/types": "^7.16.7" } @@ -251,7 +228,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, "requires": { "@babel/types": "^7.16.7" } @@ -260,7 +236,6 @@ "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", @@ -284,8 +259,7 @@ "@babel/helper-plugin-utils": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, "@babel/helper-remap-async-to-generator": { "version": "7.16.8", @@ -315,7 +289,6 @@ "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "dev": true, "requires": { "@babel/types": "^7.17.0" } @@ -333,22 +306,24 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, "requires": { "@babel/types": "^7.16.7" } }, + "@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==" + }, "@babel/helper-validator-identifier": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/helper-validator-option": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" }, "@babel/helper-wrap-function": { "version": "7.16.8", @@ -366,7 +341,6 @@ "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", - "dev": true, "requires": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.9", @@ -377,7 +351,6 @@ "version": "7.16.10", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -388,7 +361,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -397,7 +369,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -408,7 +379,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -416,20 +386,17 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -439,8 +406,7 @@ "@babel/parser": { "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", - "dev": true + "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.16.7", @@ -638,7 +604,6 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -647,7 +612,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -656,7 +620,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } @@ -710,7 +673,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -719,7 +681,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -728,7 +689,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" } @@ -737,7 +697,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -746,7 +705,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -755,7 +713,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -764,7 +721,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -773,7 +729,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -782,7 +737,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -800,7 +754,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -809,7 +762,6 @@ "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" } @@ -1379,7 +1331,6 @@ "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, "requires": { "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", @@ -1390,7 +1341,6 @@ "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", - "dev": true, "requires": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.10", @@ -1407,8 +1357,7 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" } } }, @@ -1416,7 +1365,6 @@ "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" @@ -1425,8 +1373,7 @@ "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" }, "@csstools/normalize.css": { "version": "12.0.0", @@ -1537,65 +1484,71 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true + }, "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", + "espree": "^9.6.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } } }, + "@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, "requires": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -1608,7 +1561,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -1616,14 +1568,12 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -1633,7 +1583,6 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1643,7 +1592,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "requires": { "p-locate": "^4.1.0" } @@ -1652,7 +1600,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -1661,7 +1608,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "requires": { "p-limit": "^2.2.0" } @@ -1669,166 +1615,365 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" } } }, "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } } } }, "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "requires": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "jest-mock": "^29.7.0" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1836,112 +1981,134 @@ } } }, - "@jest/schemas": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", - "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.23.3" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, + "@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" } }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, + "@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-get-type": "^29.6.3" + }, + "dependencies": { + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + } } }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, + "@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } } } }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "dependencies": { - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "requires": { - "@types/yargs-parser": "*" + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" } }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1949,287 +2116,1070 @@ } } }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.6.tgz", - "integrity": "sha512-IIWxofIYt/AbMwoeBgj+O2aAXLrlCQVg+A4a2zfpXFNHgP8o8rvi3v+oe5t787Lj+KXlKOh8BAiUp9bhuELXhg==", - "dev": true, + "@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.8.1", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "dev": true - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==" + }, + "@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "requires": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "requires": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "requires": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "requires": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "requires": { + "@babel/types": "^7.24.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" + }, + "@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==" + }, + "@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "requires": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==" + }, + "@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + } + }, + "@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "requires": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + } + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "requires": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + } + }, + "caniuse-lite": { + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "electron-to-chromium": { + "version": "1.4.818", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.818.tgz", + "integrity": "sha512-eGvIk2V0dGImV9gWLq8fDfTTsCAeMDwZqEPMr+jMInxZdnp9Us8UpovYpRCf9NQ7VOFgrN2doNSgvISbsbNpxA==" + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "requires": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "dependencies": { + "@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + } + } + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } } }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "@jest/schemas": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", + "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" + "@sinclair/typebox": "^0.23.3" } }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, + "@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "dependencies": { + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + } } }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, + "@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } } } }, - "@rushstack/eslint-patch": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz", - "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==", - "dev": true - }, - "@sinclair/typebox": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", - "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, + "@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "requires": { - "type-detect": "4.0.8" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + } } }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "dev": true + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "dev": true + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "dev": true + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "dev": true + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "dev": true + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dev": true, + "@mark.probst/unicode-properties": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mark.probst/unicode-properties/-/unicode-properties-1.1.0.tgz", + "integrity": "sha512-7AQsO0hMmpqDledV7AhBuSYqYPFsKP9PaltMecX9nlnsyFxqtsqUg9/pvB2L/jxvskrDrNkdKYz2KTbQznCtng==", "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + "brfs": "^1.4.0", + "unicode-trie": "^0.3.0" } }, - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "@babel/types": "^7.12.6" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "@svgr/plugin-jsx": { + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.6.tgz", + "integrity": "sha512-IIWxofIYt/AbMwoeBgj+O2aAXLrlCQVg+A4a2zfpXFNHgP8o8rvi3v+oe5t787Lj+KXlKOh8BAiUp9bhuELXhg==", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.8.1", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + } + } + }, + "@rushstack/eslint-patch": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz", + "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==", + "dev": true + }, + "@sinclair/typebox": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", + "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "dev": true + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "dev": true + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "dev": true + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "dev": true + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "dev": true + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "dev": true + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "dev": true + }, + "@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dev": true, + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + } + }, + "@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dev": true, + "requires": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dev": true, + "requires": { + "@babel/types": "^7.12.6" + } + }, + "@svgr/plugin-jsx": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", @@ -2364,7 +3314,6 @@ "version": "7.1.19", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", @@ -2377,7 +3326,6 @@ "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, "requires": { "@babel/types": "^7.0.0" } @@ -2386,7 +3334,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -2396,7 +3343,6 @@ "version": "7.17.1", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dev": true, "requires": { "@babel/types": "^7.3.0" } @@ -2512,7 +3458,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, "requires": { "@types/node": "*" } @@ -2559,14 +3504,12 @@ "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -2575,15 +3518,14 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/jest": { - "version": "27.4.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.1.tgz", - "integrity": "sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==", + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", "dev": true, "requires": { "jest-matcher-utils": "^27.0.0", @@ -2643,16 +3585,15 @@ "dev": true }, "@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true }, "@types/node": { "version": "16.11.26", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", - "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==", - "dev": true + "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -2661,9 +3602,9 @@ "dev": true }, "@types/prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, "@types/prop-types": { @@ -2770,8 +3711,7 @@ "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "@types/testing-library__jest-dom": { "version": "5.14.3", @@ -2813,7 +3753,6 @@ "version": "17.0.10", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, "requires": { "@types/yargs-parser": "*" } @@ -2821,8 +3760,7 @@ "@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@typescript-eslint/eslint-plugin": { "version": "5.15.0", @@ -2991,6 +3929,12 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "@vscode/test-electron": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.3.tgz", @@ -3285,14 +4229,14 @@ } }, "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, @@ -3303,6 +4247,26 @@ "dev": true, "requires": { "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } } }, "ansi-colors": { @@ -3315,7 +4279,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "requires": { "type-fest": "^0.21.3" }, @@ -3323,8 +4286,7 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, @@ -3337,14 +4299,12 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -3353,7 +4313,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3662,30 +4621,12 @@ "schema-utils": "^2.6.5" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -3712,7 +4653,6 @@ "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", @@ -3798,7 +4738,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -3851,8 +4790,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base16": { "version": "1.0.0", @@ -3991,7 +4929,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4001,13 +4938,28 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } }, - "browser-process-hrtime": { - "version": "1.0.0", + "brfs": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + } + }, + "browser-or-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", + "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" + }, + "browser-process-hrtime": { + "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true @@ -4022,7 +4974,6 @@ "version": "4.20.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", - "dev": true, "requires": { "caniuse-lite": "^1.0.30001317", "electron-to-chromium": "^1.4.84", @@ -4035,7 +4986,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, "requires": { "node-int64": "^0.4.0" } @@ -4050,11 +5000,15 @@ "ieee754": "^1.2.1" } }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "buffer-indexof-polyfill": { "version": "1.0.2", @@ -4093,8 +5047,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camel-case": { "version": "4.1.2", @@ -4117,8 +5070,7 @@ "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "camelcase-css": { "version": "2.0.1", @@ -4141,8 +5093,7 @@ "caniuse-lite": { "version": "1.0.30001319", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz", - "integrity": "sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw==", - "dev": true + "integrity": "sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw==" }, "case-sensitive-paths-webpack-plugin": { "version": "2.4.0", @@ -4172,8 +5123,7 @@ "char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" }, "charcodes": { "version": "0.2.0", @@ -4212,14 +5162,12 @@ "ci-info": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz", - "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==", - "dev": true + "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==" }, "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==" }, "clean-css": { "version": "5.3.0", @@ -4255,8 +5203,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" }, "coa": { "version": "2.0.2", @@ -4324,14 +5271,17 @@ "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + }, + "collection-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", + "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==" }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -4339,8 +5289,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colord": { "version": "2.9.2", @@ -4430,8 +5379,18 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } }, "confusing-browser-globals": { "version": "1.0.11", @@ -4472,7 +5431,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -4553,8 +5511,7 @@ "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cosmiconfig": { "version": "7.0.1", @@ -4569,6 +5526,70 @@ "yaml": "^1.10.0" } }, + "create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "requires": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + } + } + }, "cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -4591,7 +5612,6 @@ "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", @@ -4669,6 +5689,18 @@ "source-map": "^0.6.1" }, "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -4678,6 +5710,12 @@ "fast-deep-equal": "^3.1.3" } }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -4880,7 +5918,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -4892,9 +5929,9 @@ "dev": true }, "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, "decode-uri-component": { @@ -4904,22 +5941,19 @@ "dev": true }, "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==" }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "default-gateway": { "version": "6.0.3", @@ -4971,8 +6005,7 @@ "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" }, "detect-node": { "version": "2.1.0", @@ -5236,7 +6269,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, "requires": { "readable-stream": "^2.0.2" } @@ -5259,8 +6291,7 @@ "electron-to-chromium": { "version": "1.4.88", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.88.tgz", - "integrity": "sha512-oA7mzccefkvTNi9u7DXmT0LqvhnOiN2BhSrKerta7HeUC1cLoIwtbf2wL+Ah2ozh5KQd3/1njrGrwDBXx6d14Q==", - "dev": true + "integrity": "sha512-oA7mzccefkvTNi9u7DXmT0LqvhnOiN2BhSrKerta7HeUC1cLoIwtbf2wL+Ah2ozh5KQd3/1njrGrwDBXx6d14Q==" }, "emitter-component": { "version": "1.1.1", @@ -5269,16 +6300,14 @@ "dev": true }, "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==" }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", @@ -5292,6 +6321,24 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "enhanced-resolve": { "version": "5.9.2", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", @@ -5318,7 +6365,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -5389,8 +6435,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -5401,19 +6446,17 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { @@ -5422,103 +6465,55 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } } } }, "eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5536,15 +6531,21 @@ "dev": true }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -5559,12 +6560,6 @@ "requires": { "is-glob": "^4.0.3" } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true } } }, @@ -5902,26 +6897,39 @@ } }, "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "dependencies": { + "acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + } } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -5955,8 +6963,7 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "estree-walker": { "version": "1.0.1", @@ -5967,8 +6974,7 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -6007,7 +7013,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -6023,19 +7028,122 @@ "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" }, "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "requires": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + } } }, "express": { @@ -6106,9 +7214,30 @@ } } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "requires": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, @@ -6128,14 +7257,12 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fast-xml-parser": { "version": "4.0.7", @@ -6174,7 +7301,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, "requires": { "bser": "2.1.1" } @@ -6278,7 +7404,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -6343,19 +7468,20 @@ "dev": true }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "requires": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "flux": { @@ -6400,18 +7526,6 @@ "tapable": "^1.0.0" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -6453,12 +7567,6 @@ "universalify": "^2.0.0" } }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -6551,14 +7659,12 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true }, "fstream": { @@ -6587,8 +7693,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { "version": "1.1.5", @@ -6617,14 +7722,12 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { "version": "1.1.1", @@ -6646,14 +7749,12 @@ "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "get-symbol-description": { "version": "1.0.0", @@ -6669,7 +7770,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6726,9 +7826,9 @@ } }, "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -6751,7 +7851,12 @@ "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "growl": { @@ -6789,26 +7894,6 @@ "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } } }, "harmony-reflect": { @@ -6821,7 +7906,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -6852,8 +7936,7 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { "version": "1.0.0", @@ -6936,8 +8019,7 @@ "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, "html-minifier-terser": { "version": "6.1.0", @@ -7189,8 +8271,7 @@ "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "iconv-lite": { "version": "0.4.24", @@ -7260,7 +8341,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -7269,8 +8349,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { "version": "4.0.0", @@ -7282,7 +8361,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -7291,8 +8369,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", @@ -7336,8 +8413,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-bigint": { "version": "1.0.4", @@ -7377,7 +8453,6 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -7406,14 +8481,12 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, "is-generator-function": { "version": "1.0.10", @@ -7448,8 +8521,7 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.7", @@ -7466,6 +8538,12 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -7521,8 +8599,7 @@ "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { "version": "1.0.7", @@ -7567,6 +8644,11 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -7588,14 +8670,12 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -7603,17 +8683,40 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, "istanbul-lib-coverage": { "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 + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" }, "istanbul-lib-instrument": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dev": true, "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -7625,27 +8728,39 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "requires": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" + }, + "dependencies": { + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "requires": { + "semver": "^7.5.3" + } + }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + } } }, "istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -7653,10 +8768,9 @@ } }, "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "dev": true, + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -7687,164 +8801,619 @@ } }, "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "requires": { - "@jest/core": "^27.5.1", + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^27.5.1" + "jest-cli": "^29.7.0" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } } }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" } } }, "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "requires": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } } } }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "requires": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "stack-utils": "^2.0.3" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } - } - } - }, - "jest-diff": { + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + } + } + }, + "jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "requires": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "requires": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "jest-diff": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", @@ -7869,36 +9438,99 @@ } }, "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" } } }, @@ -7915,108 +9547,52 @@ "jest-mock": "^27.5.1", "jest-util": "^27.5.1", "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" }, "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" } - } - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8026,130 +9602,243 @@ "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } } } }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, + "jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } } } }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { + "jest-get-type": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", "dev": true }, - "jest-resolve": { + "jest-haste-map": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, "requires": { "@jest/types": "^27.5.1", - "chalk": "^4.0.0", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" } }, - "jest-runner": { + "jest-jasmine2": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", "dev": true, "requires": { - "@jest/console": "^27.5.1", "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", + "pretty-format": "^27.5.1", "throat": "^6.0.1" }, "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8159,47 +9848,117 @@ "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } - } - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@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.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" } }, "strip-bom": { @@ -8210,70 +9969,65 @@ } } }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, + "jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@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.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@sinclair/typebox": "^0.27.8" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" } } }, - "jest-util": { + "jest-matcher-utils": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" }, "dependencies": { "chalk": { @@ -8288,88 +10042,105 @@ } } }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, + "jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } - } - } - }, - "jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "@jest/console": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", - "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", - "dev": true, + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "requires": { - "@jest/types": "^28.1.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", - "slash": "^3.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, - "@jest/test-result": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", - "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", - "dev": true, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + } + } + }, + "jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "requires": { - "@jest/console": "^28.1.0", - "@jest/types": "^28.1.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@sinclair/typebox": "^0.27.8" } }, "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", - "dev": true, + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "requires": { - "@jest/schemas": "^28.0.2", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -8377,60 +10148,252 @@ "chalk": "^4.0.0" } }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true - }, - "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", - "dev": true, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", - "@types/stack-utils": "^2.0.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + } + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + }, + "jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true + }, + "jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "requires": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "dependencies": { + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + } + } + }, + "jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "requires": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pirates": "^4.0.4", "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -8438,51 +10401,46 @@ "picomatch": "^2.2.3" } }, - "jest-watcher": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", - "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", - "dev": true, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "requires": { - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.0", - "string-length": "^4.0.1" + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "dependencies": { - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "requires": { - "ansi-regex": "^5.0.1" + "has-flag": "^4.0.0" } } } }, "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", - "dev": true, + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -8490,391 +10448,569 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" }, - "string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dev": true, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "requires": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "dev": true - } + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "requires": { - "ansi-regex": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - } + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" } } } }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "requires": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } - } - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + }, + "jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "requires": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + } + } + }, + "jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, "requires": { "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "graceful-fs": "^4.2.9" + } + }, + "jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "requires": { - "has-flag": "^4.0.0" + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" + }, + "jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + }, + "jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + } + }, + "jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "requires": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + } + } + }, + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" } } } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } } } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonpointer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", - "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", - "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "object.assign": "^4.1.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=", - "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", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "dev": true, "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" }, "dependencies": { "chalk": { @@ -8889,2254 +11025,3481 @@ } } }, - "lokijs": { - "version": "1.5.12", - "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.12.tgz", - "integrity": "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", "dev": true, "requires": { - "tslib": "^2.0.3" + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" }, "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - } - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", - "dev": true - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", - "dev": true, - "requires": { - "fs-monkey": "1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", - "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "@jest/console": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", + "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.3" + "@jest/types": "^28.1.0", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.0", + "jest-util": "^28.1.0", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } } }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "@jest/test-result": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", + "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", "dev": true, "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "@jest/console": "^28.1.0", + "@jest/types": "^28.1.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-1.1.0.tgz", - "integrity": "sha1-LISJPtZ24NmPsY+5piEv0bK5qBk=", - "dev": true - }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + }, + "@jest/types": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", + "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", "dev": true, "requires": { - "ms": "2.1.2" + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true + }, + "jest-message-util": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", + "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true } } }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "jest-util": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", + "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "@jest/types": "^28.1.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "jest-watcher": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", + "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@jest/test-result": "^28.1.0", + "@jest/types": "^28.1.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.0", + "string-length": "^4.0.1" + }, + "dependencies": { + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "pretty-format": { + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", + "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", "dev": true, "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } } }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", "dev": true + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, + "string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "requires": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "dev": true + } + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + } + } } } }, - "monaco-editor": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.33.0.tgz", - "integrity": "sha512-VcRWPSLIUEgQJQIE0pVT8FcGBIgFoxz7jtqctE+IiCxWugD0DwgyQBcZBhdSrdMC84eumoqMZsGl2GTreOzwqw==", - "dev": true - }, - "monaco-editor-webpack-plugin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.0.1.tgz", - "integrity": "sha512-M8qIqizltrPlIbrb73cZdTWfU9sIsUVFvAZkL3KGjAHmVWEJ0hZKa/uad14JuOckc0GwnCaoGHvMoYtJjVyCzw==", - "dev": true, + "jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "requires": { - "loader-utils": "^2.0.2" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "dependencies": { + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "requires": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "requires": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + } } }, - "mrmime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", - "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.4.tgz", - "integrity": "sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==", + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - } + "argparse": "^2.0.1" } }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { - "whatwg-url": "^5.0.0" + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" }, "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "webidl-conversions": { + "form-data": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" } } } }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { - "path-key": "^3.0.0" + "minimist": "^1.2.5" } }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "jsx-ast-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz", + "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "object.assign": "^4.1.2" + } }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", "dev": true }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "language-subtag-registry": "~0.3.2" } }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "object.fromentries": { + "lilconfig": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, - "object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "p-locate": "^5.0.0" } }, - "object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=", + "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", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "es-abstract": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz", - "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.1", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } } } }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "lokijs": { + "version": "1.5.12", + "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.12.tgz", + "integrity": "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==", "dev": true }, - "once": { + "loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "wrappy": "1" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "requires": { - "mimic-fn": "^2.1.0" - } + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "yallist": "^4.0.0" } }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", "dev": true }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "sourcemap-codec": "^1.4.8" } }, - "p-limit": { + "make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "requires": { - "p-limit": "^3.0.2" + "tmpl": "1.0.5" } }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memfs": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "dev": true, "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" + "fs-monkey": "1.0.3" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "source-map": "^0.5.6" }, "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" } } }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "requires": { - "callsites": "^3.0.0" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "mime-db": "1.52.0" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "mini-css-extract-plugin": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", + "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", "dev": true, "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "schema-utils": "^4.0.0" }, "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } } } }, - "path-browserify": { + "minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "~2.3" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pinkie": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz", - "integrity": "sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q=", - "dev": true - }, - "pinkie-promise": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", - "integrity": "sha1-0dpn9UglY7t89X8oauKCLs+/NnA=", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "pinkie": "^1.0.0" + "minimist": "^1.2.5" } }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "mkdirp-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-1.1.0.tgz", + "integrity": "sha1-LISJPtZ24NmPsY+5piEv0bK5qBk=", "dev": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "requires": { - "find-up": "^4.0.0" + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "p-try": "^2.0.0" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "brace-expansion": "^1.1.7" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "has-flag": "^4.0.0" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } }, - "postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", - "dev": true, - "requires": { - "nanoid": "^3.3.3", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - } - } + "moment-mini": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", + "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==" }, - "postcss-attribute-case-insensitive": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", - "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", + "monaco-editor": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.33.0.tgz", + "integrity": "sha512-VcRWPSLIUEgQJQIE0pVT8FcGBIgFoxz7jtqctE+IiCxWugD0DwgyQBcZBhdSrdMC84eumoqMZsGl2GTreOzwqw==", + "dev": true + }, + "monaco-editor-webpack-plugin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.0.1.tgz", + "integrity": "sha512-M8qIqizltrPlIbrb73cZdTWfU9sIsUVFvAZkL3KGjAHmVWEJ0hZKa/uad14JuOckc0GwnCaoGHvMoYtJjVyCzw==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.2" + "loader-utils": "^2.0.2" } }, - "postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "dev": true - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } + "mrmime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", + "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", + "dev": true }, - "postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "postcss-color-functional-notation": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", - "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", + "multicast-dns": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.4.tgz", + "integrity": "sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" } }, - "postcss-color-hex-alpha": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz", - "integrity": "sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true }, - "postcss-color-rebeccapurple": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", - "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, - "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, - "postcss-convert-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz", - "integrity": "sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==", + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } } }, - "postcss-custom-media": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", - "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, - "postcss-custom-properties": { - "version": "12.1.7", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.7.tgz", - "integrity": "sha512-N/hYP5gSoFhaqxi2DPCmvto/ZcRDVjE3T1LiAMzc/bg53hvhcHOLpXOHb526LzBBp5ZlAUhkuot/bfpmpgStJg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, - "postcss-custom-selectors": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", - "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", - "dev": true, + "node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "requires": { - "postcss-selector-parser": "^6.0.4" + "path-key": "^3.0.0" } }, - "postcss-dir-pseudo-class": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", - "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9" + "boolbase": "~1.0.0" } }, - "postcss-discard-comments": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", - "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", + "nwsapi": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", + "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==", "dev": true }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "postcss-double-position-gradients": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", - "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, - "postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "dev": true - }, - "postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.9" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true - }, - "postcss-gap-properties": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", - "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", - "dev": true + "object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "dependencies": { + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz", + "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.1", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + } + } }, - "postcss-image-set-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", - "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { - "camelcase-css": "^2.0.1" + "ee-first": "1.1.1" } }, - "postcss-lab-function": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", - "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", - "dev": true, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" + "wrappy": "1" } }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "mimic-fn": "^2.1.0" } }, - "postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, - "postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true - }, - "postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, - "postcss-merge-longhand": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz", - "integrity": "sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==", + "optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "dependencies": { + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true + } } }, - "postcss-merge-rules": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz", - "integrity": "sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==", - "dev": true, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "yocto-queue": "^0.1.0" } }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "p-limit": "^3.0.2" } }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "@types/retry": "0.12.0", + "retry": "^0.13.1" } }, - "postcss-minify-params": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz", - "integrity": "sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "requires": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, - "postcss-minify-selectors": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz", - "integrity": "sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==", + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.5" + "callsites": "^3.0.0" } }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.4" + "no-case": "^3.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } } }, - "postcss-modules-values": { + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, - "postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.6" - } + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "postcss-nesting": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.5.tgz", - "integrity": "sha512-+NyBBE/wUcJ+NJgVd2FyKIZ414lul6ExqkOt1qXXw7oRzpQ0iT68cVpx+QfHh42QUMHXNoVLlN9InFY9XXK8ng==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "1.0.0", - "postcss-selector-parser": "^6.0.10" - } + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, - "postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dev": true, - "requires": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - } + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, - "postcss-normalize-positions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", - "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "through": "~2.3" } }, - "postcss-normalize-repeat-style": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", - "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, - "postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - } + "pinkie": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz", + "integrity": "sha1-Wkfyi6EBXQIBvae/DzWOR77Ix+Q=", + "dev": true }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "pinkie-promise": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", + "integrity": "sha1-0dpn9UglY7t89X8oauKCLs+/NnA=", "dev": true, "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" + "pinkie": "^1.0.0" } }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" }, - "postcss-opacity-percentage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", - "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", - "dev": true - }, - "postcss-ordered-values": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz", - "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==", - "dev": true, - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-overflow-shorthand": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", - "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", - "dev": true - }, - "postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true - }, - "postcss-place": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", - "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", - "dev": true, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "requires": { - "postcss-value-parser": "^4.2.0" + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + } } }, - "postcss-preset-env": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.5.0.tgz", - "integrity": "sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==", + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, "requires": { - "@csstools/postcss-color-function": "^1.1.0", - "@csstools/postcss-font-format-keywords": "^1.0.0", - "@csstools/postcss-hwb-function": "^1.0.0", - "@csstools/postcss-ic-unit": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^2.0.2", - "@csstools/postcss-normalize-display-values": "^1.0.0", - "@csstools/postcss-oklab-function": "^1.1.0", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.0", - "@csstools/postcss-unset-value": "^1.0.0", - "autoprefixer": "^10.4.6", - "browserslist": "^4.20.3", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^6.6.1", - "postcss-attribute-case-insensitive": "^5.0.0", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.2", - "postcss-color-hex-alpha": "^8.0.3", - "postcss-color-rebeccapurple": "^7.0.2", - "postcss-custom-media": "^8.0.0", - "postcss-custom-properties": "^12.1.7", - "postcss-custom-selectors": "^6.0.0", - "postcss-dir-pseudo-class": "^6.0.4", - "postcss-double-position-gradients": "^3.1.1", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.3", - "postcss-image-set-function": "^4.0.6", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.0", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.4", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.3", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.4", - "postcss-pseudo-class-any-link": "^7.1.2", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^5.0.0", - "postcss-value-parser": "^4.2.0" + "find-up": "^3.0.0" }, "dependencies": { - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "locate-path": "^3.0.0" } }, - "caniuse-lite": { - "version": "1.0.30001340", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001340.tgz", - "integrity": "sha512-jUNz+a9blQTQVu4uFcn17uAD8IDizPzQkIKh3LCJfg9BkyIqExYYdyc/ZSlWUSKb8iYiXxKsxbv4zYSvkqjrxw==", - "dev": true + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } }, - "electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", - "dev": true + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } }, - "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } }, - "postcss-pseudo-class-any-link": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.3.tgz", - "integrity": "sha512-I9Yp1VV2r8xFwg/JrnAlPCcKmutv6f6Ig6/CHFPqGJiDgYXM9C+0kgLfK4KOXbKNw+63QYl4agRUB0Wi9ftUIg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" }, - "postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "postcss": { + "version": "8.4.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", + "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", "dev": true, "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" + "nanoid": "^3.3.3", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + } } }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "postcss-attribute-case-insensitive": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", + "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", "dev": true, "requires": { - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.0.2" } }, - "postcss-replace-overflow-wrap": { + "postcss-browser-comments": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", "dev": true }, - "postcss-selector-not": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", - "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "requires": { - "balanced-match": "^1.0.0" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" } }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "dev": true, "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "postcss-value-parser": "^4.2.0" } }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "dependencies": { - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - } - } + "postcss-color-functional-notation": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.2.tgz", + "integrity": "sha512-DXVtwUhIk4f49KK5EGuEdgx4Gnyj6+t2jBSEmxvpIK9QI40tWrpS2Pua8Q7iIZWBrki2QOaeUdEaLPPa91K0RQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" } }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "postcss-color-hex-alpha": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.3.tgz", + "integrity": "sha512-fESawWJCrBV035DcbKRPAVmy21LpoyiXdPTuHUfWJ14ZRjY7Y7PA6P4g8z6LQGYhU1WAxkTxjIjurXzoe68Glw==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.5" + "postcss-value-parser": "^4.2.0" } }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "postcss-color-rebeccapurple": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", + "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", "dev": true, "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "postcss-value-parser": "^4.2.0" } }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", "dev": true, "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "postcss-convert-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz", + "integrity": "sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==", "dev": true, "requires": { - "asap": "~2.0.6" + "postcss-value-parser": "^4.2.0" } }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "postcss-custom-media": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", + "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", + "dev": true + }, + "postcss-custom-properties": { + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.7.tgz", + "integrity": "sha512-N/hYP5gSoFhaqxi2DPCmvto/ZcRDVjE3T1LiAMzc/bg53hvhcHOLpXOHb526LzBBp5ZlAUhkuot/bfpmpgStJg==", "dev": true, "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "postcss-value-parser": "^4.2.0" } }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "postcss-custom-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", + "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", + "dev": true, "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } + "postcss-selector-parser": "^6.0.4" } }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "postcss-dir-pseudo-class": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", "dev": true, "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - } + "postcss-selector-parser": "^6.0.9" } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "postcss-discard-comments": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", + "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", "dev": true }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true }, - "pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=", - "dev": true + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "postcss-double-position-gradients": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", + "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", "dev": true }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", "dev": true, "requires": { - "performance-now": "^2.1.0" + "postcss-selector-parser": "^6.0.9" } }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "postcss-selector-parser": "^6.0.9" } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", "dev": true }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "postcss-gap-properties": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", + "dev": true + }, + "postcss-image-set-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", "dev": true, "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - } + "postcss-value-parser": "^4.2.0" } }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } + "postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true }, - "react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", "dev": true, "requires": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" + "camelcase-css": "^2.0.1" } }, - "react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "postcss-lab-function": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", "dev": true, "requires": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" } }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", - "dev": true - } - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" } }, - "react-error-boundary": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", - "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", + "postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, "requires": { - "@babel/runtime": "^7.12.5" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" } }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", + "postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", "dev": true }, - "react-icons": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz", - "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==" - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "dev": true }, - "react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "postcss-merge-longhand": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz", + "integrity": "sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==", "dev": true, "requires": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" } }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "postcss-merge-rules": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz", + "integrity": "sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz", + "integrity": "sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz", + "integrity": "sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true }, - "react-redux": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz", - "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==", + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, "requires": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", - "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } }, - "react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-nesting": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.5.tgz", + "integrity": "sha512-+NyBBE/wUcJ+NJgVd2FyKIZ414lul6ExqkOt1qXXw7oRzpQ0iT68cVpx+QfHh42QUMHXNoVLlN9InFY9XXK8ng==", + "dev": true, + "requires": { + "@csstools/selector-specificity": "1.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dev": true, + "requires": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "dev": true }, - "react-scripts": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", - "integrity": "sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg==", + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, "requires": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.0", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "fsevents": "^2.3.2", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.0", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", + "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", + "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", + "dev": true + }, + "postcss-ordered-values": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz", + "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==", + "dev": true, + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-overflow-shorthand": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", + "dev": true + }, + "postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true + }, + "postcss-place": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-preset-env": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.5.0.tgz", + "integrity": "sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==", + "dev": true, + "requires": { + "@csstools/postcss-color-function": "^1.1.0", + "@csstools/postcss-font-format-keywords": "^1.0.0", + "@csstools/postcss-hwb-function": "^1.0.0", + "@csstools/postcss-ic-unit": "^1.0.0", + "@csstools/postcss-is-pseudo-class": "^2.0.2", + "@csstools/postcss-normalize-display-values": "^1.0.0", + "@csstools/postcss-oklab-function": "^1.1.0", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.0", + "@csstools/postcss-unset-value": "^1.0.0", + "autoprefixer": "^10.4.6", + "browserslist": "^4.20.3", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^6.6.1", + "postcss-attribute-case-insensitive": "^5.0.0", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.2", + "postcss-color-hex-alpha": "^8.0.3", + "postcss-color-rebeccapurple": "^7.0.2", + "postcss-custom-media": "^8.0.0", + "postcss-custom-properties": "^12.1.7", + "postcss-custom-selectors": "^6.0.0", + "postcss-dir-pseudo-class": "^6.0.4", + "postcss-double-position-gradients": "^3.1.1", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.3", + "postcss-image-set-function": "^4.0.6", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.0", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.4", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.3", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.4", + "postcss-pseudo-class-any-link": "^7.1.2", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "dependencies": { + "browserslist": { + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", + "escalade": "^3.1.1", + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001340", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001340.tgz", + "integrity": "sha512-jUNz+a9blQTQVu4uFcn17uAD8IDizPzQkIKh3LCJfg9BkyIqExYYdyc/ZSlWUSKb8iYiXxKsxbv4zYSvkqjrxw==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.137", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", + "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", + "dev": true + }, + "node-releases": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "dev": true + } + } + }, + "postcss-pseudo-class-any-link": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.3.tgz", + "integrity": "sha512-I9Yp1VV2r8xFwg/JrnAlPCcKmutv6f6Ig6/CHFPqGJiDgYXM9C+0kgLfK4KOXbKNw+63QYl4agRUB0Wi9ftUIg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-reduce-initial": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true + }, + "postcss-selector-not": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", + "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "dependencies": { + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + } + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "requires": { + "asap": "~2.0.6" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=", + "dev": true + }, + "pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "quicktype-core": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-6.1.0.tgz", + "integrity": "sha512-r5+sRrUBX5RSdNNG2zpYD706Lxsq/0Tvh7te52csKrKKcAGGcSd1mx4sWWjhnBc54I0ZkrLHk/urIWwCDihgMg==", + "requires": { + "@mark.probst/unicode-properties": "~1.1.0", + "browser-or-node": "^1.2.1", + "collection-utils": "^1.0.1", + "is-url": "^1.2.4", + "isomorphic-fetch": "^2.2.1", + "js-base64": "^2.4.3", + "pako": "^1.0.6", + "pluralize": "^7.0.0", + "readable-stream": "2.3.0", + "urijs": "^1.19.1", + "wordwrap": "^1.0.0", + "yaml": "^1.5.0" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==" + }, + "readable-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.0.tgz", + "integrity": "sha512-c7KMXGd4b48nN3OJ1U9qOsn6pXNzf6kLd3kdZCkg2sxAcoiufInqF0XckwEnlrcwuaYwonlNK8GQUIOC/WC7sg==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.0", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + } + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, + "requires": { + "performance-now": "^2.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dev": true, + "requires": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + } + }, + "react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "dev": true, + "requires": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "dev": true + } + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-error-boundary": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz", + "integrity": "sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5" + } + }, + "react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "dev": true, + "requires": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + } + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "dev": true + }, + "react-redux": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz", + "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==", + "requires": { + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + } + }, + "react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true + }, + "react-scripts": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.0.tgz", + "integrity": "sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg==", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.0", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "fsevents": "^2.3.2", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.0", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "dependencies": { + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true + }, + "expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + } + }, + "jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "dependencies": { + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + } + } + } + }, + "jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + } + }, + "jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + } + }, + "jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "requires": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "requires": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*" + } + }, + "jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + } + }, + "jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + } + }, + "jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "requires": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@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.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + } + }, + "jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + } } }, "react-simple-wysiwyg": { @@ -11170,7 +14533,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11412,8 +14774,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { "version": "2.0.2", @@ -11431,7 +14792,6 @@ "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, "requires": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -11442,7 +14802,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, "requires": { "resolve-from": "^5.0.0" }, @@ -11450,8 +14809,7 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" } } }, @@ -11574,14 +14932,12 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sanitize.css": { "version": "13.0.0", @@ -11634,29 +14990,11 @@ "ajv-keywords": "^3.5.2" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true } } }, @@ -11840,11 +15178,15 @@ "kind-of": "^6.0.2" } }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -11852,8 +15194,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { "version": "1.7.3", @@ -11875,8 +15216,7 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sirv": { "version": "1.0.19", @@ -11892,14 +15232,12 @@ "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "sockjs": { "version": "0.3.24", @@ -11921,8 +15259,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { "version": "1.0.2", @@ -12036,8 +15373,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "stable": { "version": "0.1.8", @@ -12049,7 +15385,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, "requires": { "escape-string-regexp": "^2.0.0" }, @@ -12057,8 +15392,7 @@ "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" } } }, @@ -12068,6 +15402,151 @@ "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==", "dev": true }, + "static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "requires": { + "escodegen": "^1.11.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "static-module": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", + "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "requires": { + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "~1.9.0", + "falafel": "^2.1.0", + "has": "^1.0.1", + "magic-string": "^0.22.4", + "merge-source-map": "1.0.4", + "object-inspect": "~1.4.0", + "quote-stream": "~1.0.2", + "readable-stream": "~2.3.3", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.0", + "through2": "~2.0.3" + }, + "dependencies": { + "escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==" + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "requires": { + "vlq": "^0.2.2" + } + }, + "object-inspect": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", + "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==" + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -12119,7 +15598,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -12135,7 +15613,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12182,7 +15659,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -12202,7 +15678,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -12222,8 +15697,7 @@ "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-indent": { "version": "3.0.0", @@ -12237,8 +15711,7 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "strnum": { "version": "1.0.5", @@ -12266,15 +15739,14 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } }, "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "requires": { "has-flag": "^4.0.0", @@ -12284,8 +15756,7 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "svg-parser": { "version": "2.0.4", @@ -12516,7 +15987,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -12530,9 +16000,9 @@ "dev": true }, "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", "dev": true }, "through": { @@ -12541,29 +16011,40 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, + "tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -12581,20 +16062,21 @@ "dev": true }, "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "dependencies": { "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true } } @@ -12700,8 +16182,7 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "type-fest": { "version": "0.20.2", @@ -12719,6 +16200,11 @@ "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -12780,6 +16266,22 @@ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, + "unicode-trie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", + "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + } + } + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -12831,6 +16333,27 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, + "update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "requires": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "dependencies": { + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, + "picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + } + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -12840,6 +16363,11 @@ "punycode": "^2.1.0" } }, + "urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" + }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -12869,6 +16397,16 @@ "schema-utils": "^3.0.0" } }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "use-composed-ref": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", @@ -12907,8 +16445,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.1", @@ -12939,28 +16476,20 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "requires": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^2.0.0" }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" } } }, @@ -12970,6 +16499,11 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -12992,7 +16526,6 @@ "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.12" } @@ -13136,6 +16669,18 @@ "schema-utils": "^4.0.0" }, "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -13145,6 +16690,12 @@ "fast-deep-equal": "^3.1.3" } }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -13195,6 +16746,18 @@ "ws": "^8.4.2" }, "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -13204,6 +16767,12 @@ "fast-deep-equal": "^3.1.3" } }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -13291,8 +16860,7 @@ "whatwg-fetch": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" }, "whatwg-mimetype": { "version": "2.3.0", @@ -13315,7 +16883,6 @@ "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" } @@ -13356,8 +16923,12 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, "workbox-background-sync": { "version": "6.5.3", @@ -13423,6 +16994,29 @@ "workbox-window": "6.5.3" }, "dependencies": { + "@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "requires": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + } + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -13435,6 +17029,12 @@ "universalify": "^2.0.0" } }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -13631,7 +17231,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13641,8 +17240,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", @@ -13677,14 +17275,12 @@ "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", @@ -13695,8 +17291,30 @@ "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } }, "yargs-parser": { "version": "21.0.1", @@ -13718,8 +17336,7 @@ "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/package.json b/package.json index 171c628..3c63860 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "name": "Ganesan Chandran " }, "engines": { - "vscode": "^1.65.0" + "vscode": "^1.75.0" }, "icon": "icons/fetch-client.png", "repository": { @@ -120,7 +120,9 @@ "Vertical Split", "Horizontal Split" ], - "description": "Select the layout of Fetch Client" + "scope": "resource", + "order": 1, + "markdownDescription": "Select the layout of Fetch Client" }, "fetch-client.horizontalLayout": { "type": "string", @@ -129,12 +131,15 @@ "Split Style", "Accordion Style" ], - "description": "Select the style of horizontal split" + "scope": "resource", + "order": 2, + "markdownDescription": "Select the style of horizontal split" }, "fetch-client.SSLCheck": { "type": "boolean", "default": true, - "description": "Enable Strict SSL Check for API Request" + "order": 3, + "markdownDescription": "Enable `Strict SSL Check` for API Request" }, "fetch-client.historyLimit": { "type": "string", @@ -146,20 +151,16 @@ "75", "100" ], - "description": "Select the number of items to be displayed in the history" + "scope": "resource", + "order": 4, + "markdownDescription": "Select the number of items to be displayed in the history" }, "fetch-client.timeOut": { - "type": "string", - "default": "5 min", - "enum": [ - "30 sec", - "1 min", - "2 min", - "5 min", - "10 min", - "no timeout" - ], - "description": "Select the request timeout" + "type": "number", + "default": 120000, + "scope": "resource", + "order": 5, + "markdownDescription": "Select the request timeout (`in milliseconds`). 0 means no timeout" }, "fetch-client.defaultProtocol": { "type": "string", @@ -168,7 +169,37 @@ "http", "https" ], - "description": "Select which protocol to add with url (if url has no protocol)." + "scope": "resource", + "order": 6, + "markdownDescription": "Select which protocol to be added with url (if url has no protocol)." + }, + "fetch-client.headersCaseSensitive": { + "type": "boolean", + "default": true, + "scope": "resource", + "order": 7, + "markdownDescription": "By Default headers will send `same as in request`. If it is disabled, header will send in `lowercase`." + }, + "fetch-client.separateRequestTab": { + "type": "boolean", + "default": false, + "scope": "resource", + "order": 8, + "markdownDescription": "By Default request will be open in `same tab`. If it is enabled, request will be open in `separate tab`." + }, + "fetch-client.log": { + "type": "boolean", + "default": false, + "scope": "resource", + "order": 9, + "markdownDescription": "By Default `request details` will be logged. If it is enabled, both `request and response` details will be logged." + }, + "fetch-client.runMainRequest": { + "type": "boolean", + "default": true, + "scope": "resource", + "order": 10, + "markdownDescription": "By Default `main request will run` even if pre-request(s)/pre-condition(s) are getting failed. If it is disabled, `main request won't run` if any pre-request/pre-condition are failed." } } } @@ -182,7 +213,7 @@ }, { "command": "fetch-client.openErrorLog", - "when": "view == fetch-client.sideBar", + "when": "false", "group": "group2@1" }, { @@ -215,7 +246,9 @@ "compile-tests": "tsc -p ./", "watch-tests": "tsc -watch -p ./", "pretest": "npm run compile-tests && npm run compile && npm run lint", - "lint": "eslint src --ext .ts,.tsx", + "lint-check": "eslint src --ext .ts,.tsx", + "lint-fix": "eslint src --ext .ts,.tsx --fix", + "pre-commit": "npm run eclint-check && npm run md-lint && npm run md-spellcheck", "test": "node ./out/test/runTest.js" }, "devDependencies": { @@ -226,10 +259,10 @@ "@types/draft-js": "^0.11.9", "@types/glob": "^7.2.0", "@types/httpsnippet": "^1.23.1", - "@types/jest": "^27.4.1", + "@types/jest": "^27.5.2", "@types/lokijs": "^1.5.7", "@types/markdown-it": "^12.2.3", - "@types/mocha": "^9.0.0", + "@types/mocha": "^9.1.1", "@types/node": "^16.11.26", "@types/react": "^17.0.40", "@types/react-dom": "^17.0.13", @@ -243,13 +276,13 @@ "buffer": "^6.0.3", "cross-env": "^7.0.3", "draft-js": "^0.11.7", - "eslint": "^8.6.0", + "eslint": "^8.57.0", "fast-xml-parser": "^4.0.7", "glob": "^7.2.0", "httpsnippet": "^2.0.0", "lokijs": "^1.5.12", "mini-css-extract-plugin": "^2.6.0", - "mocha": "^9.1.3", + "mocha": "^9.2.2", "monaco-editor": "^0.33.0", "monaco-editor-webpack-plugin": "^7.0.1", "path-browserify": "^1.0.1", @@ -279,9 +312,11 @@ "aws4": "^1.11.0", "axios": "^0.26.1", "form-data": "^4.0.0", + "jest": "^29.7.0", + "moment-mini": "^2.29.4", + "quicktype-core": "^6.1.0", "react": "^17.0.2", "react-dom": "^17.0.2", - "react-icons": "^4.3.1", "react-redux": "^7.2.6", "uuid": "^8.3.2", "yargs-parser": "^21.0.1" diff --git a/src/extension.ts b/src/extension.ts index 158018e..a787848 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,24 +1,30 @@ -import * as vscode from 'vscode'; -import { CreateCollectionDB, CreateCookieDB, CreateHistoryDB, CreateMainDB, CreateVariableDB } from './utils/db/dbUtil'; -import fs from "fs"; -import { collectionDBPath, cookieDBPath, historyDBPath, mainDBPath, variableDBPath } from './utils/db/consts'; import { AddToColUI } from './utils/ui/addToCollectionUIProvider'; -import { MainUIProvider } from './utils/ui/mainUIProvider'; -import { SideBarProvider } from './utils/ui/sideBarUIProvider'; -import { logPath } from './utils/logger/consts'; -import { createLogFile } from './utils/logger/logger'; -import { VariableUI } from './utils/ui/variableUIProvider'; -import { LocalStorageService } from './utils/LocalStorageService'; +import { collectionDBPath, cookieDBPath, historyDBPath, mainDBPath, variableDBPath } from './utils/db/consts'; import { CookieUI } from './utils/ui/cookieUIProvider'; -import { ErrorLogUI } from './utils/ui/errorLogUIProvider'; +import { CreateCollectionDB, CreateCookieDB, CreateHistoryDB, CreateMainDB, CreateVariableDB } from './utils/db/dbUtil'; +import { createLogFile } from './utils/logger/logger'; import { CurlProviderUI } from './utils/ui/curlUIProvider'; +import { ErrorLogUI } from './utils/ui/errorLogUIProvider'; +import { IPubSubMessage, PubSub } from './utils/PubSub'; +import { LocalStorageService } from './utils/LocalStorageService'; +import { logPath } from './utils/logger/consts'; +import { SideBarProvider } from './utils/ui/sideBarUIProvider'; +import { VariableUI } from './utils/ui/variableUIProvider'; +import { WebAppPanel } from './utils/ui/mainUIProvider'; +import * as vscode from 'vscode'; +import fs from "fs"; +import { VSCodeLogger } from './utils/logger/vsCodeLogger'; +import { pubSubTypes } from './utils/configuration'; +export var pubSub: PubSub; +export var vsCodeLogger: VSCodeLogger; export var sideBarProvider: SideBarProvider; var storageManager: LocalStorageService; var extPath = ""; +var extensionUri: vscode.Uri; -export function OpenExistingItem(id?: string, name?: string, colId?: string, folderId?: string, varId?: string, type?: string) { - vscode.commands.executeCommand("fetch-client.newRequest", id, (name && name.length > 15 ? name.substring(0, 15) + "..." : name), colId, varId, type, folderId); +export function OpenExistingItem(id?: string, name?: string, colId?: string, folderId?: string, varId?: string, type?: string, newTab?: boolean) { + WebAppPanel.createOrShow(extensionUri, id, (name && name.length > 15 ? name.substring(0, 15) + "..." : name), colId, varId, type, folderId, newTab); } export function OpenAddToColUI(id: string) { @@ -56,6 +62,10 @@ export function OpenColSettings(colId: string, folderId: string, name: string, t export function activate(context: vscode.ExtensionContext) { extPath = context.globalStorageUri.fsPath; + extensionUri = context.extensionUri; + + pubSub = new PubSub(); + vsCodeLogger = new VSCodeLogger(); if (!fs.existsSync(extPath)) { fs.mkdirSync(extPath); @@ -87,9 +97,15 @@ export function activate(context: vscode.ExtensionContext) { storageManager = new LocalStorageService(context.workspaceState); + vscode.window.onDidChangeActiveColorTheme((e: vscode.ColorTheme) => { + if (pubSub) { + pubSub.publish({ messageType: pubSubTypes.themeChanged }); + } + }); + sideBarProvider = new SideBarProvider(context.extensionUri); context.subscriptions.push(vscode.window.registerWebviewViewProvider(SideBarProvider.viewType, sideBarProvider)); - context.subscriptions.push(MainUIProvider(context.extensionUri, sideBarProvider)); + context.subscriptions.push(vscode.commands.registerCommand('fetch-client.newRequest', () => { WebAppPanel.createOrShow(context.extensionUri); })); context.subscriptions.push(AddToColUI(context.extensionUri)); context.subscriptions.push(VariableUI(context.extensionUri)); context.subscriptions.push(CookieUI(context.extensionUri)); @@ -108,4 +124,6 @@ export function getStorageManager(): LocalStorageService { return storageManager; } -export function deactivate() { } +export function deactivate() { + pubSub.clear(); +} diff --git a/src/fetch-client-ui/components/Collection/AttachVariable/attachVariable.tsx b/src/fetch-client-ui/components/Collection/AttachVariable/attachVariable.tsx index 69fdb89..17da1a9 100644 --- a/src/fetch-client-ui/components/Collection/AttachVariable/attachVariable.tsx +++ b/src/fetch-client-ui/components/Collection/AttachVariable/attachVariable.tsx @@ -105,13 +105,13 @@ const AttachVariable = () => { - {errors["varId"] &&
+
-
{errors["varId"]}
+ {errors["varId"] &&
{errors["varId"]}
} - } +
diff --git a/src/fetch-client-ui/components/Collection/RunAll/runAll.tsx b/src/fetch-client-ui/components/Collection/RunAll/runAll.tsx index 7683b04..583a1a5 100644 --- a/src/fetch-client-ui/components/Collection/RunAll/runAll.tsx +++ b/src/fetch-client-ui/components/Collection/RunAll/runAll.tsx @@ -1,16 +1,15 @@ -import React, { useEffect, useRef, useState } from "react"; -import { requestTypes, responseTypes } from "../../../../utils/configuration"; -import vscode from "../../Common/vscodeAPI"; -import { IRequestModel } from "../../RequestUI/redux/types"; -import { IReponseModel } from "../../ResponseUI/redux/types"; -import { getMethodClassName } from "../../SideBar/util"; +import { executeTests, setVariable } from "../../TestUI/TestPanel/helper"; +import { exportCSV, exportJson } from "./helper"; import { FormatBytes, GetResponseTime } from "../../ResponseUI/OptionsPanel/OptionTab/util"; +import { getMethodClassName } from "../../SideBar/util"; +import { IReponseModel } from "../../ResponseUI/redux/types"; +import { IRequestModel } from "../../RequestUI/redux/types"; import { IVariable } from "../../SideBar/redux/types"; -import { formatDate } from "../../../../utils/helper"; -import { executeTests, setVariable } from "../../TestUI/TestPanel/helper"; -import "../style.css"; +import { requestTypes, responseTypes } from "../../../../utils/configuration"; import { RunAllSettings } from "./runAllSettings"; -import { exportCSV, exportJson } from "./helper"; +import React, { useEffect, useRef, useState } from "react"; +import vscode from "../../Common/vscodeAPI"; +import "../style.css"; const RunAll = () => { diff --git a/src/fetch-client-ui/components/Collection/Settings/CollectionSettings.tsx b/src/fetch-client-ui/components/Collection/Settings/CollectionSettings.tsx index 6552719..71e08b8 100644 --- a/src/fetch-client-ui/components/Collection/Settings/CollectionSettings.tsx +++ b/src/fetch-client-ui/components/Collection/Settings/CollectionSettings.tsx @@ -6,6 +6,7 @@ import vscode from "../../Common/vscodeAPI"; import { AuthPanel } from "../../RequestUI/OptionsPanel/Options/Auth"; import { allAuthTypes, basicAuthTypes } from "../../RequestUI/OptionsPanel/Options/Auth/consts"; import { Actions } from "../../RequestUI/redux"; +import { IResponse } from "../../ResponseUI/redux/types"; import { InitialSettings } from "../../SideBar/redux/reducer"; import { ISettings, IVariable } from "../../SideBar/redux/types"; import { SettingsType } from "../consts"; @@ -48,6 +49,13 @@ const CollectionSettings = () => { setDone(true); } else if (event.data && event.data.type === responseTypes.getVariableItemResponse) { setVariableItem(event.data.data[0] as IVariable); + } if (event.data && event.data.type === responseTypes.tokenResponse) { + let tokenResponse: IResponse = event.data.response as IResponse; + if (!tokenResponse.isError && tokenResponse.status === 200) { + const responseData = JSON.parse(tokenResponse.responseData); + let tokenName = auth.oauth.tokenName ? auth.oauth.tokenName : "access_token"; + dispatch(Actions.SetOAuthTokenAction(responseData[tokenName] ? responseData[tokenName] : "")); + } } }); diff --git a/src/fetch-client-ui/components/Collection/style.css b/src/fetch-client-ui/components/Collection/style.css index 1f2febf..d05c74d 100644 --- a/src/fetch-client-ui/components/Collection/style.css +++ b/src/fetch-client-ui/components/Collection/style.css @@ -452,6 +452,13 @@ height : 30px; } +.submit-button:disabled, +.submit-button[disabled] { + background-color: #ccc; + color : #666; + cursor : not-allowed; +} + .order-btn-panel { display: flex; } diff --git a/src/fetch-client-ui/components/Common/CodeGenerator/style.css b/src/fetch-client-ui/components/Common/CodeGenerator/style.css index eceabca..823a8d3 100644 --- a/src/fetch-client-ui/components/Common/CodeGenerator/style.css +++ b/src/fetch-client-ui/components/Common/CodeGenerator/style.css @@ -22,8 +22,8 @@ .code-snippet-lang-select, .code-snippet-opt-select { - height: 30px; - width: 150px; + height: 25px; + width: 110px; outline: none; border-radius: 3px; background-color: var(--background-color); diff --git a/src/fetch-client-ui/components/Common/Consts/sysVariables.ts b/src/fetch-client-ui/components/Common/Consts/sysVariables.ts new file mode 100644 index 0000000..f8a1067 --- /dev/null +++ b/src/fetch-client-ui/components/Common/Consts/sysVariables.ts @@ -0,0 +1,100 @@ +import moment from 'moment-mini'; +import { v4 as uuidv4 } from 'uuid'; + +export const SysVariables = [ + "{{#num}}", + "{{#num, min, max}}", + "{{#str}}", + "{{#strspl}}", + "{{#strnum}}", + "{{#char}}", + "{{#rdate}}", + "{{#date}}", + "{{#dateISO}}", + "{{#date, 'format'}}", + "{{#email}}", + "{{#guid}}", + "{{#bool}}" +]; + +export function checkSysVariable(variable: string): string { + if ((variable.startsWith("{{#num,") || variable.startsWith("{{#date,")) && variable.endsWith("}}")) { + return variable.replace("{{", "").replace("}}", "").replace("#", "").trim(); + } + if (SysVariables.findIndex(t => t === variable) !== -1) { + return variable.replace("{{", "").replace("}}", "").replace("#", "").trim(); + } + + return null; +} + + +export function getSysVariableWithValue(data: string) { + try { + switch (data) { + case "num": + return getRandomIntFromInterval(1, 999999); + case "str": + return getRandomString(getRandomIntFromInterval(1, 15), "str"); + case "strnum": + return getRandomString(getRandomIntFromInterval(1, 15), "strnum"); + case "strspl": + return getRandomString(getRandomIntFromInterval(1, 15), "strspl"); + case "char": + return getRandomString(1, "str"); + case "date": + return new Date().toDateString(); + case "rdate": + return getRandomDate(new Date(1900, 1, 1), new Date(2100, 1, 1)); + case "dateISO": + return new Date().toISOString(); + case "guid": + return uuidv4(); + case "bool": + return [true, false].at(getRandomIntFromInterval(0, 1)); + case "email": + return getRandomEMail(); + default: + if (data.startsWith("num,")) { + let range = data.split(","); + let min = parseInt(range[1]); + let max = parseInt(range[2]); + if (!isNaN(min) && !isNaN(max)) { + return getRandomIntFromInterval(min, max); + } + } else if (data.startsWith("date,")) { + let range = data.split(","); + let format = range[1].trim(); + return moment().format(format); + } + } + } + catch { + return null; + } +} + +function getRandomEMail() { + let name = getRandomString(getRandomIntFromInterval(1, 15), "str"); + let domain = ["yahoo", "gmail", "hotmail", "outlook"].at(getRandomIntFromInterval(0, 3)); + return name + "@" + domain + ".com"; +} + + +function getRandomDate(start: Date, end: Date) { + return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())); +} + +function getRandomString(len: number, type: string) { + var text = ""; + var charset = type === "str" ? "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" : type === "strnum" ? "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" : "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()_+-={}[]:\"\'<>?,./|\\'"; + for (var i = 0; i < len; i++) { + text += charset.charAt(Math.floor(Math.random() * charset.length)); + } + + return text; +} + +function getRandomIntFromInterval(min: number, max: number) { + return Math.floor(Math.random() * (max - min + 1) + min); +} \ No newline at end of file diff --git a/src/fetch-client-ui/components/Common/Editor/EditorProvider.tsx b/src/fetch-client-ui/components/Common/Editor/EditorProvider.tsx index fcfc631..4d6e880 100644 --- a/src/fetch-client-ui/components/Common/Editor/EditorProvider.tsx +++ b/src/fetch-client-ui/components/Common/Editor/EditorProvider.tsx @@ -37,7 +37,8 @@ const EditorProvider = (props: EditorProps) => { scrollbar: { verticalScrollbarSize: 10, horizontalScrollbarSize: 10 - } + }, + wordWrap: "off" }); window.addEventListener("resize", () => { @@ -70,6 +71,16 @@ const EditorProvider = (props: EditorProps) => { } }, [props.language, props.format, props.value]); + useEffect(() => { + if (monacoEditor) { + if (props.wordWrap) { + monacoEditor.updateOptions({ wordWrap: "on" }); + } else { + monacoEditor.updateOptions({ wordWrap: "off" }); + } + } + }, [props.wordWrap]); + useEffect(() => { if (monacoEditor) { if (props.readOnly) { diff --git a/src/fetch-client-ui/components/Common/Editor/index.tsx b/src/fetch-client-ui/components/Common/Editor/index.tsx index 709a0bf..8829167 100644 --- a/src/fetch-client-ui/components/Common/Editor/index.tsx +++ b/src/fetch-client-ui/components/Common/Editor/index.tsx @@ -12,6 +12,7 @@ export interface EditorProps { onContentChange?: any; className?: string; theme?: number; + wordWrap?:boolean; } const EditorProvider = React.lazy(() => import('./EditorProvider')); @@ -31,6 +32,7 @@ export const MonacoEditor = (props: EditorProps) => { onContentChange={props.onContentChange} className={props.className} theme={theme} + wordWrap={props.wordWrap} /> ); diff --git a/src/fetch-client-ui/components/Common/Editor/style.css b/src/fetch-client-ui/components/Common/Editor/style.css index 6a58e48..6d2ae7d 100644 --- a/src/fetch-client-ui/components/Common/Editor/style.css +++ b/src/fetch-client-ui/components/Common/Editor/style.css @@ -15,10 +15,10 @@ border-radius: 5px; color: var(--button-text-color); cursor: pointer; - font-size: medium; + font-size: 14px; opacity: 0; outline: none; - padding: 0.4rem 0.5rem; + padding: 0.2rem; position: absolute; right: 1rem; top: 0.8rem; diff --git a/src/fetch-client-ui/components/Common/Table/types.ts b/src/fetch-client-ui/components/Common/Table/types.ts index 0e886b8..83031f8 100644 --- a/src/fetch-client-ui/components/Common/Table/types.ts +++ b/src/fetch-client-ui/components/Common/Table/types.ts @@ -11,44 +11,47 @@ export type TableType = "reqHeaders" | "queryParams" | "resHeaders" | "formData" export const dataTypes = ["Text", "File"]; export const HerdersValues = [ - "application/json", - "application/xml", - "application/ld+json", + "application/atom+xml", "application/hal+json", "application/javascript", + "application/json", + "application/ld+json", + "application/vnd.api+json", "application/octet-stream", "application/x-www-form-urlencoded", + "application/xml", + "image/bmp", + "image/gif", + "image/jpeg", + "image/png", + "image/svg", + "image/webp", "multipart/form-data", - "text/html", "text/csv", + "text/html", "text/plain", "text/xml", - "image/png", - "image/jpeg", - "image/gif", - "image/webp", - "image/bmp", - "image/svg", ]; export const HeadersKeys = [ - "Accept", "Accept-Charset", "Accept-Encoding", "Accept-Language", - "Content-Type", - "Connection", - "Content-Encoding", - "Content-Length", - "Access-Control-Allow-Origin", + "Accept", "Access-Control-Allow-Credentials", "Access-Control-Allow-Headers", "Access-Control-Allow-Methods", + "Access-Control-Allow-Origin", "Access-Control-Expose-Headers", "Access-Control-Max-Age", "Access-Control-Request-Headers", "Access-Control-Request-Method", + "Authorization", "Cache-Control", + "Connection", + "Content-Encoding", + "Content-Length", + "Content-Type", "Cookie", "Date", "DNT", @@ -56,8 +59,8 @@ export const HeadersKeys = [ "Forwarded", "Host", "If-Match", - "If-None-Match", "If-Modified-Since", + "If-None-Match", "If-Unmodified-Since", "Location", "Max-Forwards", @@ -68,7 +71,7 @@ export const HeadersKeys = [ "Referer", "Set-Cookie", "Strict-Transport-Security", - "User-Agent", "Upgrade-Insecure-Requests", + "User-Agent", "X-Authorization" ]; \ No newline at end of file diff --git a/src/fetch-client-ui/components/Common/TextEditor/TextEditor.tsx b/src/fetch-client-ui/components/Common/TextEditor/TextEditor.tsx index 509ebf9..4e8bba5 100644 --- a/src/fetch-client-ui/components/Common/TextEditor/TextEditor.tsx +++ b/src/fetch-client-ui/components/Common/TextEditor/TextEditor.tsx @@ -1,8 +1,10 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import { Editor, EditorState, CompositeDecorator, Modifier, DraftHandleValue, ContentState, getDefaultKeyBinding, KeyBindingUtil } from "draft-js"; import { useSelector } from "react-redux"; import { IRootState } from "../../../reducer/combineReducer"; +import { checkSysVariable, SysVariables } from "../Consts/sysVariables"; import "./style.css"; +import { replaceDataWithVariable } from "../../../../utils/helper"; export interface TextEditorProps { varWords: string[]; @@ -26,10 +28,22 @@ export const TextEditor = (props: TextEditorProps) => { const [curValue, setCurValue] = useState(""); const [changeHandle, setChangeHandle] = useState(false); + const refVarData = useRef({}); + const setVarData = (value: {}) => { + refVarData.current = value; + }; + const editor = React.useRef(null); - const matchedDecorated = ({ children }) => { - return {children}; + const matchedDecorated = (props: any) => { + if (!checkSysVariable(props.decoratedText)) { + let title = replaceDataWithVariable(props.decoratedText, refVarData.current); + if (title) { + return {props.children}; + } + } + + return {props.children}; }; const unmatchedDecorated = ({ children }) => { @@ -39,14 +53,22 @@ export const TextEditor = (props: TextEditorProps) => { function findWithRegex(words: string[], contentBlock: any, callback: any) { const text = contentBlock.getText(); - var regexEx = /{{[\w]+}}/; + let regexEx = /{{[A-Za-z0-9\s!@#$%^&*()_+=-`~\\\]\[|';:\/.,?><]+}}/; + let sysVarRegex = /(({{#)((num|str|char|rdate|date|dateISO|email|guid|bool)|(num,[ ]?[0-9]+,[ ]?[0-9]+)|(date,( )*[a-zA-Z $&+,:;=?@#|'<>.^*()%!-\/]*))(}}))/; const matches = [...text.matchAll(new RegExp(regexEx, 'gm'))].map(a => { return { index: a.index, word: a[0] }; }); + const sysVarMatches = [...text.matchAll(new RegExp(sysVarRegex, 'gm'))].map(a => { return { index: a.index, word: a[0] }; }); - matches.forEach(match => { + [...matches].forEach(match => { let word = match.word.replace("{{", "").replace("}}", "").trim(); if (words.includes(word)) { callback(match.index, match.index + match.word.length); } + }); + + [...sysVarMatches].forEach(match => { + if (SysVariables.includes(match.word) || match.word.includes("{{#num,") || match.word.includes("{{#date,")) { + callback(match.index, match.index + match.word.length); + } } ); } @@ -54,16 +76,25 @@ export const TextEditor = (props: TextEditorProps) => { function findWithRegexUnMatched(words: string[], contentBlock: any, callback: any) { const text = contentBlock.getText(); - var regexEx = /{{[\w]+}}/; + let regexEx = /{{[A-Za-z0-9\s!@#$%^&*()_+=-`~\\\]\[|';:\/.,?><]+}}/; + let sysVarRegex = /(({{#)((num|str|char|rdate|date|dateISO|email|guid|bool)|(num,[ ]?[0-9]+,[ ]?[0-9]+)|(date,( )*[a-zA-Z $&+,:;=?@#|'<>.^*()%!-\/]*))(}}))/; const matches = [...text.matchAll(new RegExp(regexEx, 'gm'))].map(a => { return { index: a.index, word: a[0] }; }); + const sysVarMatches = [...text.matchAll(new RegExp(sysVarRegex, 'gm'))].map(a => { return { index: a.index, word: a[0] }; }); - matches.forEach(match => { + [...matches].forEach(match => { let word = match.word.replace("{{", "").replace("}}", "").trim(); if (!words.includes(word)) { callback(match.index, match.index + match.word.length); } } ); + + [...sysVarMatches].forEach(match => { + if (!SysVariables.includes(match.word) && !match.word.includes("{{#num,") && !match.word.includes("{{#date,")) { + callback(match.index, match.index + match.word.length); + } + } + ); } function matchedHandleStrategy(contentBlock: any, callback: any) { @@ -123,7 +154,15 @@ export const TextEditor = (props: TextEditorProps) => { useEffect(() => { if (selectedVariable.data.length > 0) { + let varData = {}; + setEditorState(EditorState.set(editorState, { decorator: createDecorator() })); + + selectedVariable.data.forEach(item => { + varData[item.key] = item.value; + }); + + setVarData(varData); } }, [selectedVariable]); diff --git a/src/fetch-client-ui/components/Common/TypesGenerator/consts.ts b/src/fetch-client-ui/components/Common/TypesGenerator/consts.ts new file mode 100644 index 0000000..b1e6975 --- /dev/null +++ b/src/fetch-client-ui/components/Common/TypesGenerator/consts.ts @@ -0,0 +1,14 @@ +export const codeTypesLangunages = [ + { name: "C#", value: "cs", editorLang: "csharp" }, + { name: "C++", value: "cpp", editorLang: "cpp" }, + { name: "Dart", value: "dart", editorLang: "dart" }, + { name: "Go", value: "go", editorLang: "go" }, + { name: "Java", value: "java" , editorLang: "java"}, + { name: "JavaScript", value: "js" , editorLang: "javascript"}, + { name: "JSON Schema", value: "schema", editorLang: "json" }, + { name: "Kotlin", value: "kotlin" , editorLang: "kotlin"}, + { name: "Python", value: "python", editorLang: "python" }, + { name: "Ruby", value: "ruby", editorLang: "ruby" }, + { name: "Swift", value: "swift" , editorLang: "swift"}, + { name: "TypeScript", value: "ts" , editorLang: "typescript"}, +]; \ No newline at end of file diff --git a/src/fetch-client-ui/components/Common/TypesGenerator/index.tsx b/src/fetch-client-ui/components/Common/TypesGenerator/index.tsx new file mode 100644 index 0000000..34b04e5 --- /dev/null +++ b/src/fetch-client-ui/components/Common/TypesGenerator/index.tsx @@ -0,0 +1,92 @@ +import React, { useEffect, useState } from "react"; +import { quicktype, InputData, jsonInputForTargetLanguage } from "quicktype-core"; +import { MonacoEditor } from "../Editor"; +import { codeTypesLangunages } from "./consts"; +import { IRootState } from "../../../reducer/combineReducer"; +import { useSelector } from "react-redux"; + +const TypesGenerator = () => { + const responseData = useSelector((state: IRootState) => state.responseData.response.responseData); + + const [language, setLang] = useState("cs"); + const [editorLanguage, setEditorLang] = useState("csharp"); + const [codeTypes, setCodeTypes] = useState(""); + + async function quicktypeJSON(targetLanguage: string, typeName: string, jsonString: string) { + const jsonInput = jsonInputForTargetLanguage(targetLanguage); + + await jsonInput.addSource({ + name: typeName, + samples: [jsonString], + }); + + const inputData = new InputData(); + inputData.addInput(jsonInput); + let rendererOptions = { package: "generated_types", namespace: "Generated_Types" }; + if (targetLanguage === "cs") { + rendererOptions["features"] = "just-types"; + } else if (targetLanguage === "kotlin") { + rendererOptions["framework"] = "just-types"; + } else { + rendererOptions["just-types"] = "true"; + } + + return await quicktype({ + inputData, + lang: targetLanguage, + rendererOptions: rendererOptions, + }); + } + + useEffect(() => { + quicktypeJSON(language, "Root", responseData).then((i) => { + setCodeTypes(i.lines.join("\n")); + }); + }, []); + + function onSelectedLanguage(e: React.ChangeEvent) { + setLang(e.target.value); + let editorLang = codeTypesLangunages.filter(i => i.value === e.target.value)[0].editorLang; + setEditorLang(editorLang); + quicktypeJSON(e.target.value, "Root", responseData).then((i) => { + setCodeTypes(i.lines.join("\n")); + }); + } + + return ( +
+
+ {codeTypes && <>
+
+ + +
+
+
+ +
+ + } +
+ ); +}; + +export default TypesGenerator; \ No newline at end of file diff --git a/src/fetch-client-ui/components/Common/Viewer/JSONViewer.tsx b/src/fetch-client-ui/components/Common/Viewer/JSONViewer.tsx index d36d5df..d4e20c7 100644 --- a/src/fetch-client-ui/components/Common/Viewer/JSONViewer.tsx +++ b/src/fetch-client-ui/components/Common/Viewer/JSONViewer.tsx @@ -1,10 +1,14 @@ import React, { useEffect, useState } from 'react'; import ReactJson from 'react-json-view'; +import { useSelector } from 'react-redux'; +import { IRootState } from '../../../reducer/combineReducer'; import "./style.css"; import { ViewerProps } from './types'; export const JSONViewer = (props: ViewerProps) => { + const { theme } = useSelector((state: IRootState) => state.uiData); + const [jsonData, setJsonData] = useState({}); const [isValid, setValid] = useState(false); @@ -23,7 +27,7 @@ export const JSONViewer = (props: ViewerProps) => { isValid ? diff --git a/src/fetch-client-ui/components/Common/Viewer/XMLViewer.tsx b/src/fetch-client-ui/components/Common/Viewer/XMLViewer.tsx index c7e7696..fdb3467 100644 --- a/src/fetch-client-ui/components/Common/Viewer/XMLViewer.tsx +++ b/src/fetch-client-ui/components/Common/Viewer/XMLViewer.tsx @@ -1,16 +1,20 @@ +import { IRootState } from '../../../reducer/combineReducer'; +import { useSelector } from 'react-redux'; +import { ViewerProps } from './types'; +import { XMLParser, XMLValidator } from 'fast-xml-parser'; import React, { useEffect, useState } from 'react'; import ReactJson from 'react-json-view'; import "./style.css"; -import { ViewerProps } from './types'; -import { XMLParser, XMLValidator } from 'fast-xml-parser'; export const XMLViewer = (props: ViewerProps) => { + const { theme } = useSelector((state: IRootState) => state.uiData); + const [jsonData, setJsonData] = useState({}); const [isValid, setValid] = useState(false); useEffect(() => { - if (XMLValidator.validate(props.data)) { + if (XMLValidator.validate(props.data) === true) { const options = { ignoreAttributes: false, attributeNamePrefix: "@", @@ -32,7 +36,7 @@ export const XMLViewer = (props: ViewerProps) => { isValid ? diff --git a/src/fetch-client-ui/components/Common/icons.tsx b/src/fetch-client-ui/components/Common/icons.tsx new file mode 100644 index 0000000..8f9b17a --- /dev/null +++ b/src/fetch-client-ui/components/Common/icons.tsx @@ -0,0 +1,21 @@ +import React from "react"; + +export function getPlusIconSVG(toolTip: string, className: string, onContextMenu: React.MouseEventHandler, onClick: React.MouseEventHandler) { + return ( + + {toolTip} + + {toolTip} + + + ); +} + +export function getColFolDotMenu(id: string, toolTip: string, className: string, onContextMenu: React.MouseEventHandler, onClick: React.MouseEventHandler) { + return ( + {toolTip} + + + + ); +} diff --git a/src/fetch-client-ui/components/MainUI/index.tsx b/src/fetch-client-ui/components/MainUI/index.tsx index a58c492..f04b703 100644 --- a/src/fetch-client-ui/components/MainUI/index.tsx +++ b/src/fetch-client-ui/components/MainUI/index.tsx @@ -1,23 +1,23 @@ -import React, { useRef } from "react"; -import { useEffect, useState } from 'react'; -import { useDispatch, useSelector } from 'react-redux'; -import Split from 'react-split'; -import { v4 as uuidv4 } from 'uuid'; -import { requestTypes, responseTypes } from "../../../utils/configuration"; -import { formatDate } from "../../../utils/helper"; -import { IRootState } from '../../reducer/combineReducer'; -import vscode from "../Common/vscodeAPI"; +import { Actions } from "../RequestUI/redux"; import { CookiesActions } from "../Cookies/redux"; +import { formatDate } from "../../../utils/helper"; import { ICookie } from "../Cookies/redux/types"; +import { ICollection, IRequestModel } from "../RequestUI/redux/types"; +import { IRootState } from '../../reducer/combineReducer'; +import { ISettings, IVariable } from "../SideBar/redux/types"; import { OptionsPanel } from "../RequestUI/OptionsPanel"; -import { Actions } from "../RequestUI/redux"; -import { IRequestModel } from "../RequestUI/redux/types"; +import { ReponsePanel } from "../ResponseUI/ResponsePanel"; import { RequestPanel } from "../RequestUI/RequestPanel"; +import { pubSubTypes, requestTypes, responseTypes } from "../../../utils/configuration"; import { ResponseActions } from "../ResponseUI/redux"; -import { ReponsePanel } from "../ResponseUI/ResponsePanel"; -import { ISettings, IVariable } from "../SideBar/redux/types"; -import { VariableActions } from "../Variables/redux"; import { UIActions } from './redux'; +import { useDispatch, useSelector } from 'react-redux'; +import { useEffect, useState } from 'react'; +import { v4 as uuidv4 } from 'uuid'; +import { VariableActions } from "../Variables/redux"; +import React, { useRef } from "react"; +import Split from 'react-split'; +import vscode from "../Common/vscodeAPI"; import "./style.css"; const MainUI = () => { @@ -28,7 +28,7 @@ const MainUI = () => { const { loading, response } = useSelector((state: IRootState) => state.responseData); const requestData = useSelector((state: IRootState) => state.requestData); const { variables } = useSelector((state: IRootState) => state.variableData); - const { parentSettings } = useSelector((state: IRootState) => state.reqColData); + const { parentSettings, collectionList } = useSelector((state: IRootState) => state.reqColData); const refReq = useRef(requestData); const setReq = (data: IRequestModel) => { @@ -99,11 +99,11 @@ const MainUI = () => { setHoriLayout(hariLayoutConfig); dispatch(UIActions.SetLayoutAction(layoutConfig === "Horizontal Split" ? true : false, event.data.theme)); } else if (event.data && event.data.type === responseTypes.openExistingItemResponse) { - const reqData = event.data.item[0] as IRequestModel; - dispatch(Actions.SetRequestAction(reqData)); + const reqData = event.data.item[0] as IRequestModel; + dispatch(Actions.SetRequestAction(reqData)); if (reqData.body.bodyType === "binary" && reqData.body.binary.fileName) { vscode.postMessage({ type: requestTypes.readFileRequest, path: reqData.body.binary.fileName }); - } + } if (reqData.auth.authType === "inherit") { vscode.postMessage({ type: requestTypes.getParentSettingsRequest, data: { colId: colId, folderId: folderId } }); } @@ -127,8 +127,27 @@ const MainUI = () => { setVisible(true); } else if (event.data && event.data.type === responseTypes.getAllCookiesResponse) { dispatch(CookiesActions.SetAllCookiesAction(event.data.cookies as ICookie[])); - } else if (event.data && event.data.type === responseTypes.getParentSettingsResponse) { + } else if (event.data && event.data.type === responseTypes.getParentSettingsResponse) { dispatch(Actions.SetReqParentSettingsAction(event.data.settings as ISettings)); + } else if (event.data && event.data.type === pubSubTypes.updateVariables) { + vscode.postMessage({ type: requestTypes.getAllVariableRequest }); + } else if (event.data && event.data.type === pubSubTypes.removeCurrentVariable) { + setVarId(""); + } else if (event.data && event.data.type === pubSubTypes.addCurrentVariable) { + setVarId(event.data.data.varId); + } else if (event.data && event.data.type === pubSubTypes.themeChanged) { + vscode.postMessage({ type: requestTypes.themeRequest }); + } else if (event.data && event.data.type === responseTypes.themeResponse) { + dispatch(UIActions.SetThemeAction(event.data.theme)); + } else if (event.data && event.data.type === responseTypes.getAllCollectionNameResponse) { + let col: ICollection[] = event.data.collectionNames?.map((item: { value: any; name: any; }) => { + return { + id: item.value, + name: item.name + }; + }); + col.unshift({ id: "", name: "select" }); + dispatch(Actions.SetCollectionListAction(col)); } }); @@ -147,6 +166,10 @@ const MainUI = () => { vscode.postMessage({ type: requestTypes.getAllVariableRequest }); } + if (collectionList.length === 0) { + setTimeout(vscode.postMessage({ type: requestTypes.getAllCollectionNameRequest, data: "addtocol" }), 1000); + } + dispatch(Actions.SetReqColDetailsAction(colId !== "undefined" ? colId : "", folderId !== "undefined" ? folderId : "")); if (varId !== "undefined") { @@ -185,18 +208,33 @@ const MainUI = () => { useEffect(() => { if (variables && variables.length > 0) { if (varId) { - let vars = variables.filter(item => item.id === varId); - if (vars && vars.length > 0) { - dispatch(VariableActions.SetReqVariableAction(vars[0] as IVariable)); - } + updateVaribleData(varId); } else { - let globalVar = variables.filter(item => item.name.toUpperCase().trim() === "GLOBAL" && item.isActive === true); - if (globalVar && globalVar.length > 0) { - dispatch(VariableActions.SetReqVariableAction(globalVar[0] as IVariable)); - } + setRequiredGlobalVariable(); } } - }, [variables]); + }, [variables, varId]); + + function updateVaribleData(varId: string) { + let index = variables.findIndex(item => item.id === varId); + if (index !== -1) { + setRequiredVariable(index); + } else { + setRequiredGlobalVariable(); + } + } + + function setRequiredVariable(index: number) { + dispatch(VariableActions.SetReqVariableAction(variables[index] as IVariable)); + } + + function setRequiredGlobalVariable() { + let index = variables.findIndex(item => item.name.toUpperCase().trim() === "GLOBAL" && item.isActive === true); + if (index !== -1) { + setRequiredVariable(index); + setVarId(variables[index].id); + } + } useEffect(() => { if (parentSettings && parentSettings.auth.authType === "apikey") { diff --git a/src/fetch-client-ui/components/MainUI/redux/actions.ts b/src/fetch-client-ui/components/MainUI/redux/actions.ts index 2d43723..a4ad717 100644 --- a/src/fetch-client-ui/components/MainUI/redux/actions.ts +++ b/src/fetch-client-ui/components/MainUI/redux/actions.ts @@ -1,4 +1,4 @@ -import { FETCH_CLIENT_SET_ACC_OPEN, FETCH_CLIENT_SET_RUN_ITEM, FETCH_CLIENT_SET_UI_HORIZONTAL, UIActionTypes } from "./types"; +import { FETCH_CLIENT_SET_ACC_OPEN, FETCH_CLIENT_SET_RUN_ITEM, FETCH_CLIENT_SET_UI_HORIZONTAL, FETCH_CLIENT_SET_UI_THEME, UIActionTypes } from "./types"; export const SetOpenAction = (value: boolean[]): UIActionTypes => { return { @@ -20,6 +20,15 @@ export const SetLayoutAction = (value: boolean, value1: number): UIActionTypes = }; }; +export const SetThemeAction = (value: number): UIActionTypes => { + return { + type: FETCH_CLIENT_SET_UI_THEME, + payload: { + theme: value + } + }; +}; + export const SetRunItemAction = (value: boolean): UIActionTypes => { return { type: FETCH_CLIENT_SET_RUN_ITEM, diff --git a/src/fetch-client-ui/components/MainUI/redux/reducer.ts b/src/fetch-client-ui/components/MainUI/redux/reducer.ts index 0bfcb98..fc6d157 100644 --- a/src/fetch-client-ui/components/MainUI/redux/reducer.ts +++ b/src/fetch-client-ui/components/MainUI/redux/reducer.ts @@ -1,4 +1,4 @@ -import { FETCH_CLIENT_SET_ACC_OPEN, FETCH_CLIENT_SET_RUN_ITEM, FETCH_CLIENT_SET_UI_HORIZONTAL, IUIModel, UIActionTypes } from "./types"; +import { FETCH_CLIENT_SET_ACC_OPEN, FETCH_CLIENT_SET_RUN_ITEM, FETCH_CLIENT_SET_UI_HORIZONTAL, FETCH_CLIENT_SET_UI_THEME, IUIModel, UIActionTypes } from "./types"; export const InitialState: IUIModel = { open: [true, false], @@ -31,6 +31,12 @@ export const UIReducer: (state?: IUIModel, runItem: action.payload.runItem }; } + case FETCH_CLIENT_SET_UI_THEME: { + return { + ...state, + theme: action.payload.theme + }; + } default: { return state; } diff --git a/src/fetch-client-ui/components/MainUI/redux/types.ts b/src/fetch-client-ui/components/MainUI/redux/types.ts index 42b0c45..a2f1c77 100644 --- a/src/fetch-client-ui/components/MainUI/redux/types.ts +++ b/src/fetch-client-ui/components/MainUI/redux/types.ts @@ -7,6 +7,7 @@ export interface IUIModel { export const FETCH_CLIENT_SET_ACC_OPEN: "FETCH_CLIENT_SET_ACC_OPEN" = "FETCH_CLIENT_SET_ACC_OPEN"; export const FETCH_CLIENT_SET_UI_HORIZONTAL: "FETCH_CLIENT_SET_UI_HORIZONTAL" = "FETCH_CLIENT_SET_UI_HORIZONTAL"; +export const FETCH_CLIENT_SET_UI_THEME: "FETCH_CLIENT_SET_UI_THEME" = "FETCH_CLIENT_SET_UI_THEME"; export const FETCH_CLIENT_SET_RUN_ITEM: "FETCH_CLIENT_SET_RUN_ITEM" = "FETCH_CLIENT_SET_RUN_ITEM"; export interface ISetOpen { @@ -24,6 +25,13 @@ export interface ISetLayout { }; } +export interface ISetTheme { + type: typeof FETCH_CLIENT_SET_UI_THEME; + payload: { + theme: number; + }; +} + export interface ISetRunItem { type: typeof FETCH_CLIENT_SET_RUN_ITEM; payload: { @@ -31,4 +39,4 @@ export interface ISetRunItem { }; } -export type UIActionTypes = | ISetOpen | ISetLayout | ISetRunItem; \ No newline at end of file +export type UIActionTypes = | ISetOpen | ISetLayout | ISetRunItem | ISetTheme; \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/OptionTab/index.tsx b/src/fetch-client-ui/components/RequestUI/OptionsPanel/OptionTab/index.tsx index 9a0ae29..b638a9c 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/OptionTab/index.tsx +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/OptionTab/index.tsx @@ -1,14 +1,11 @@ import React from 'react'; import { useSelector } from "react-redux"; import { IRootState } from "../../../../reducer/combineReducer"; -import { requestOptions } from "../consts"; import { ReactComponent as MenuLogo } from '../../../../../../icons/settings.svg'; -import { requestTypes } from '../../../../../utils/configuration'; -import vscode from '../../../Common/vscodeAPI'; export const OptionsTab = (props: any) => { - const { selectedTab, setSelectedTab } = props; + const { selectedTab, setSelectedTab, options, settings } = props; const { headers } = useSelector((state: IRootState) => state.requestData); @@ -19,7 +16,7 @@ export const OptionsTab = (props: any) => { return (
{ - requestOptions.map((option) => ( + options.map((option) => (
))} -
{ setSelectedTab("settings"); }} />
+ {settings &&
{ setSelectedTab("settings"); }} />
}
); }; \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/OAuth/index.tsx b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/OAuth/index.tsx new file mode 100644 index 0000000..036dac2 --- /dev/null +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/OAuth/index.tsx @@ -0,0 +1,314 @@ +import { Actions } from "../../../../redux"; +import { ClientAuth, GrantType, IAuth, IRequestModel } from "../../../../redux/types"; +import { clientAuthOpt, grantTypeOpt } from "../consts"; +import { formatDate } from "../../../../../../../utils/helper"; +import { InitialBody, InitialPreFetch, InitialRequestHeaders, InitialSetVar, InitialTest } from "../../../../redux/reducer"; +import { IResponse } from "../../../../../ResponseUI/redux/types"; +import { IRootState } from "../../../../../../reducer/combineReducer"; +import { ITableData } from "../../../../../Common/Table/types"; +import { IVariable } from "../../../../../SideBar/redux/types"; +import { requestTypes, responseTypes } from "../../../../../../../utils/configuration"; +import { TextEditor } from "../../../../../Common/TextEditor/TextEditor"; +import { useDispatch, useSelector } from "react-redux"; +import { v4 as uuidv4 } from 'uuid'; +import React, { useEffect } from "react"; +import vscode from "../../../../../Common/vscodeAPI"; +import "./style.css"; + +export interface IOAuthProps { + inherit: boolean; + settingAuth?: IAuth; + envVar: any; + selectedVariable: IVariable; +} + +export const OAuth = (props: IOAuthProps) => { + + const dispatch = useDispatch(); + + const auth = props.settingAuth ? props.settingAuth : useSelector((state: IRootState) => state.requestData.auth); + const { selectedVariable } = useSelector((state: IRootState) => state.variableData); + const { parentSettings } = useSelector((state: IRootState) => state.reqColData); + + const onSetGrantype = (value: GrantType) => { + let localAuth = { ...auth }; + localAuth.oauth.grantType = value; + dispatch(Actions.SetRequestAuthAction(localAuth)); + }; + + const onSetClientAuth = (value: ClientAuth) => { + let localAuth = { ...auth }; + localAuth.oauth.clientAuth = value; + dispatch(Actions.SetRequestAuthAction(localAuth)); + }; + + const onSetValue = (type: string, value: string) => { + let localAuth = { ...auth }; + if (type === "tokenUrl") { + localAuth.oauth.tokenUrl = value; + } else if (type === "clientId") { + localAuth.oauth.clientId = value; + } else if (type === "clientSecret") { + localAuth.oauth.clientSecret = value; + } else if (type === "username") { + localAuth.oauth.username = value; + } else if (type === "password") { + localAuth.oauth.password = value; + } else if (type === "scope") { + localAuth.oauth.scope = value; + } else if (type === "tokenPrefix") { + localAuth.tokenPrefix = value; + } else if (type === "tokenName") { + localAuth.oauth.tokenName = value; + } else if (type === "audience") { + localAuth.oauth.advancedOpt.audience = value; + } else if (type === "resource") { + localAuth.oauth.advancedOpt.resource = value; + } + + dispatch(Actions.SetRequestAuthAction(localAuth)); + }; + + function onNewtokenClick() { + let reqData: IRequestModel = { + id: uuidv4(), + url: auth.oauth.tokenUrl, + name: "tokenGen", + createdTime: formatDate(), + method: "post", + params: [{ isChecked: false, key: "", value: "" }], + auth: { + authType: "noauth", + userName: "", + password: "", + addTo: "queryparams", + showPwd: false, + tokenPrefix: "Bearer", + }, + headers: JSON.parse(JSON.stringify(InitialRequestHeaders)), + body: JSON.parse(JSON.stringify(InitialBody)), + tests: JSON.parse(JSON.stringify(InitialTest)), + setvar: JSON.parse(JSON.stringify(InitialSetVar)), + notes: "", + preFetch: JSON.parse(JSON.stringify(InitialPreFetch)), + }; + let localAuth = { ...auth }; + let urlencoded: ITableData[] = []; + + urlencoded.push({ isChecked: true, key: "grant_type", value: auth.oauth.grantType === GrantType.Client_Crd ? "client_credentials" : "password" }); + urlencoded.push({ isChecked: true, key: "scope", value: auth.oauth.scope }); + + if (auth.oauth.clientAuth === ClientAuth.Body) { + urlencoded.push({ isChecked: true, key: "client_id", value: auth.oauth.clientId }); + urlencoded.push({ isChecked: true, key: "client_secret", value: auth.oauth.clientSecret }); + } else { + let encodedString = Buffer.from(auth.oauth.clientId + ":" + auth.oauth.clientSecret).toString('base64'); + reqData.headers.push({ isChecked: true, key: "Authorization", value: "Basic " + encodedString }); + } + + if (auth.oauth.grantType === GrantType.PWD_Crd) { + urlencoded.push({ isChecked: true, key: "username", value: auth.oauth.username }); + urlencoded.push({ isChecked: true, key: "password", value: auth.oauth.password }); + } + + if (auth.oauth.grantType === GrantType.Client_Crd && auth.oauth.advancedOpt?.resource) { + urlencoded.push({ isChecked: true, key: "resource", value: auth.oauth.advancedOpt.resource }); + } + + if (auth.oauth.advancedOpt?.audience) { + urlencoded.push({ isChecked: true, key: "audience", value: auth.oauth.advancedOpt?.audience }); + } + + reqData.body.bodyType = "formurlencoded"; + reqData.body.urlencoded = urlencoded; + + localAuth.password = ""; + dispatch(Actions.SetRequestAuthAction(localAuth)); + vscode.postMessage({ type: requestTypes.tokenRequest, data: { reqData: reqData, variableData: selectedVariable?.data, settings: parentSettings } }); + } + + useEffect(() => { + window.addEventListener("message", (event) => { + if (event.data && event.data.type === responseTypes.tokenResponse) { + let tokenResponse: IResponse = event.data.response as IResponse; + if (!tokenResponse.isError && tokenResponse.status === 200) { + const responseData = JSON.parse(tokenResponse.responseData); + let tokenName = auth.oauth.tokenName ? auth.oauth.tokenName : "access_token"; + dispatch(Actions.SetOAuthTokenAction(responseData[tokenName] ? responseData[tokenName] : "")); + } + } + }); + }, []); + + return ( +
+
+ Access Token + { + props.envVar && props.selectedVariable.id && + } + +
+
+ + { + props.envVar && props.selectedVariable.id && onSetValue("tokenPrefix", value)} + value={auth.tokenPrefix} + focus={false} + /> + } +
+ +
+ + +
+
+ + { + props.envVar && props.selectedVariable.id && onSetValue("tokenUrl", value)} + value={auth.oauth.tokenUrl} + focus={false} + /> + } +
+
+ + { + props.envVar && props.selectedVariable.id && onSetValue("clientId", value)} + value={auth.oauth.clientId} + focus={false} + /> + } +
+
+ + { + props.envVar && props.selectedVariable.id && onSetValue("clientSecret", value)} + value={auth.oauth.clientSecret} + focus={false} + /> + } +
+ {auth.oauth.grantType === GrantType.PWD_Crd && <> +
+ + { + props.envVar && props.selectedVariable.id && onSetValue("username", value)} + value={auth.oauth.username} + focus={false} + /> + } +
+
+ + { + props.envVar && props.selectedVariable.id && onSetValue("password", value)} + value={auth.oauth.password} + focus={false} + /> + } +
+ + } +
+ + { + props.envVar && props.selectedVariable.id && onSetValue("scope", value)} + value={auth.oauth.scope} + focus={false} + /> + } +
+
+ + +
+ + {auth.oauth.grantType === GrantType.Client_Crd &&
+ + { + props.envVar && props.selectedVariable.id && onSetValue("resource", value)} + value={auth.oauth.advancedOpt?.resource} + placeholder="Resource (Optional)" + focus={false} + /> + } +
} +
+ + { + props.envVar && props.selectedVariable.id && onSetValue("audience", value)} + value={auth.oauth.advancedOpt?.audience} + placeholder="Audience (Optional)" + focus={false} + /> + } +
+
+ + { + props.envVar && props.selectedVariable.id && onSetValue("tokenName", value)} + value={auth.oauth.tokenName} + placeholder="Token Name (Optional)" + focus={false} + /> + } +
+
+ +
+
+ ); +}; \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/OAuth/style.css b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/OAuth/style.css new file mode 100644 index 0000000..ce999ce --- /dev/null +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/OAuth/style.css @@ -0,0 +1,56 @@ +.oauth-section-header { + height : 25px; + display : inline-block; + padding : 20px 15px 10px 0; + font-size : 16px; + font-weight: 300; +} + +.oauth-label { + display: block; + float : left; + width : 150px; + padding: 5px 0 0; +} + +.oauth-text-panel { + display: flex; + padding : 10px 10px 10px 0; + max-width: 100%; +} + +.oauth-text-panel .outer-container { + width: calc(100% - 155px); +} + +.oauth-text-panel .DraftEditor-editorContainer { + width : 100%; + height : 30px; + outline : none; + padding : 5px; + border-radius: 3px; + background : var(--background-color); + border : 0.25px solid var(--border-color); + color : var(--text-color); +} + +.oauth-text-panel .public-DraftEditorPlaceholder-inner { + padding-top: 5px; +} + +.oauth-select { + width: 170px !important; +} + +.oauth-btn-panel { + margin-top: 15px; + text-align: center; +} + +.oauth-token-btn { + width: 120px !important; +} + +.oauth-info-label { + cursor: pointer; +} \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/aws/style.css b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/aws/style.css index 70c6200..571b0d6 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/aws/style.css +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/aws/style.css @@ -7,7 +7,7 @@ .aws-auth-text-panel { padding: 10px 10px 10px 0; - max-width: 70%; + max-width: 100%; } .aws-auth-text-panel .DraftEditor-editorContainer { diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/consts.ts b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/consts.ts index 9cdb040..71412a8 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/consts.ts +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/consts.ts @@ -1,15 +1,27 @@ +import { ClientAuth, GrantType } from "../../../redux/types"; + export const apiKeyAddTo = [ { name: "Query Params", value: "queryparams" }, { name: "Header", value: "header" } ]; +export const grantTypeOpt = [ + { name: "Password Credentials", value: GrantType.PWD_Crd }, + { name: "Client Credentials", value: GrantType.Client_Crd } +]; + +export const clientAuthOpt = [ + { name: "As Auth Header", value: ClientAuth.Header }, + { name: "As Request Body", value: ClientAuth.Body } +]; export const basicAuthTypes = [ { name: "No Auth", value: "noauth" }, { name: "API Key", value: "apikey" }, { name: "Bearer Token", value: "bearertoken" }, { name: "Basic Auth", value: "basic" }, - { name: "AWS Signature", value: "aws" } + { name: "AWS Signature", value: "aws" }, + { name: "OAuth 2.0", value: "oauth2" } ]; export const allAuthTypes = [ @@ -22,5 +34,6 @@ export const authCollection = { "apikey": "API Key", "bearertoken": "Bearer Token", "basic": "Basic Auth", - "aws": "AWS Signature" + "aws": "AWS Signature", + "oauth2": "OAuth 2.0" }; \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/index.tsx b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/index.tsx index 42ff919..41384b3 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/index.tsx +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/index.tsx @@ -9,7 +9,8 @@ import { Actions } from "../../../redux"; import { InitialAuth } from '../../../redux/reducer'; import { isAvailable } from '../helper'; import { AwsAuth } from './aws'; -import { apiKeyAddTo, allAuthTypes, authCollection } from "./consts"; +import { apiKeyAddTo, authCollection } from "./consts"; +import { OAuth } from './OAuth'; import "./style.css"; export interface IAuthProps { @@ -397,14 +398,14 @@ export const AuthPanel = (props: IAuthProps) => { {authCollection[parentSettings.auth.authType]}
- {authValuePanel(parentSettings.auth.authType)} + {authValuePanel(parentSettings.auth.authType, true)}
); }; - const authValuePanel = (type: string) => { + const authValuePanel = (type: string, isInherit: boolean = false) => { switch (type) { case "bearertoken": return bearerToken(); @@ -414,6 +415,8 @@ export const AuthPanel = (props: IAuthProps) => { return apiKeyAuth(); case "aws": return ; + case "oauth2": + return ; case "inherit": return props.settingsMode ? <> : inheritAuth(); default: diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/style.css b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/style.css index 0776d1d..765825a 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/style.css +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Auth/style.css @@ -29,7 +29,7 @@ } .auth-token-text-panel { - max-width: 70%; + max-width: 100%; flex-grow: 1; } @@ -114,7 +114,7 @@ label { .basic-auth-text-panel { padding : 10px 10px 10px 0; - max-width: 70%; + max-width: 100%; } .apikey-add-select { @@ -195,4 +195,7 @@ label { .inherit-auth-summary-panel { pointer-events: none; + background-color: var(--list-hover-background-color); + padding-left: 10px; + padding-bottom: 10px; } \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Body/Binary/index.tsx b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Body/Binary/index.tsx index c6b7c27..8b8ee79 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Body/Binary/index.tsx +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Body/Binary/index.tsx @@ -68,11 +68,13 @@ export const Binary = () => { }; function onChanged(evt: React.ChangeEvent) { - if (evt.target.value === "application/octet-stream") { - updateContentType("application/octet-stream"); - } else if (evt.target.value === contentType) { - updateContentType(contentType); - } + if(evt.target.id !== "manual"){ + if (evt.target.value === "application/octet-stream") { + updateContentType("application/octet-stream"); + } else if (evt.target.value === contentType) { + updateContentType(contentType); + } + } dispatch(Actions.SetRequestBodyAction({ ...body, binary: { @@ -85,26 +87,22 @@ export const Binary = () => { function updateContentType(contentTypeValue: string) { let localHeaders = [...headers]; - let isAvailable = false; - for (let index = 0; index < localHeaders.length; index++) { - if (localHeaders[index].key.trim().toLowerCase() === "content-type") { - if (localHeaders[index].value.trim().toLowerCase() === contentTypeValue) { - localHeaders[index].isChecked = true; - isAvailable = true; - break; - } else { - localHeaders[index].isChecked = false; - } - } - } - - if (!isAvailable) { - localHeaders.splice(localHeaders.length - 1, 0, { - isChecked: true, - key: "Content-Type", - value: contentTypeValue, - isFixed: false - }); + let index = headers.findIndex(item => item.isChecked && item.key.trim().toLocaleLowerCase() === "content-type"); + if (index === -1) { + index = headers.findIndex(item => item.key.trim().toLocaleLowerCase() === "content-type"); + if (index === -1) { + localHeaders.splice(localHeaders.length - 1, 0, { + isChecked: true, + key: "Content-Type", + value: contentTypeValue, + isFixed: false + }); + } else { + localHeaders[index].isChecked = true; + localHeaders[index].value = contentTypeValue; + } + } else { + localHeaders[index].value = contentTypeValue; } dispatch(Actions.SetRequestHeadersAction(localHeaders)); diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Body/FormData/index.tsx b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Body/FormData/index.tsx index 746ae4a..ce0d137 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Body/FormData/index.tsx +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/Body/FormData/index.tsx @@ -11,7 +11,7 @@ export const FormDataBody = () => { const dispatch = useDispatch(); - const { body, headers } = useSelector((state: IRootState) => state.requestData); + const { body } = useSelector((state: IRootState) => state.requestData); const { selectedVariable } = useSelector((state: IRootState) => state.variableData); useEffect(() => { @@ -107,34 +107,6 @@ export const FormDataBody = () => { } } - useEffect(() => { - if (body.bodyType === "formdata" && body.formdata?.length > 1) { - let localHeaders = [...headers]; - let contentTypeHeaderIndex = headers.findIndex(item => item.isChecked && item.key.trim().toLocaleLowerCase() === "content-type"); - if (contentTypeHeaderIndex !== -1 && localHeaders[contentTypeHeaderIndex].value.includes("multipart/form-data")) { - return; - } - contentTypeHeaderIndex = headers.findIndex(item => item.key.trim().toLocaleLowerCase() === "content-type"); - if (contentTypeHeaderIndex !== -1) { - localHeaders[contentTypeHeaderIndex] = { - isChecked: true, - key: "Content-Type", - value: "multipart/form-data", - isFixed: false - }; - } else { - localHeaders.splice(localHeaders.length - 1, 0, { - isChecked: true, - key: "Content-Type", - value: "multipart/form-data", - isFixed: false - }); - } - dispatch(Actions.SetRequestHeadersAction(localHeaders)); - } - }, [body.formdata]); - - return ( { dispatch(Actions.SetRequestRawAction(value)); }; - useEffect(() => { - if (requestData.body.bodyType === "raw" && requestData.body.raw.lang) { - let localHeaders = [...requestData.headers]; - let contentTypeHeaderIndex = requestData.headers.findIndex(item => item.isChecked && item.key.trim().toLocaleLowerCase() === "content-type"); - if (contentTypeHeaderIndex !== -1) { - localHeaders[contentTypeHeaderIndex] = { - isChecked: true, - key: "Content-Type", - value: FileTypes[requestData.body.raw.lang], - isFixed: false - }; - } else { - localHeaders.splice(localHeaders.length - 1, 0, { - isChecked: true, - key: "Content-Type", - value: FileTypes[requestData.body.raw.lang], - isFixed: false - }); - } - dispatch(Actions.SetRequestHeadersAction(localHeaders)); - } - }, [requestData.body.raw.lang]); - return (
{ const dispatch = useDispatch(); - const { body, headers } = useSelector((state: IRootState) => state.requestData); + const { body } = useSelector((state: IRootState) => state.requestData); const { selectedVariable } = useSelector((state: IRootState) => state.variableData); const onSelectChange = (index: number) => { @@ -80,33 +80,6 @@ export const UrlEncoded = () => { } } - useEffect(() => { - if (body.bodyType === "formurlencoded" && body.urlencoded?.length > 1) { - let localHeaders = [...headers]; - let contentTypeHeaderIndex = headers.findIndex(item => item.isChecked && item.key.trim().toLocaleLowerCase() === "content-type"); - if (contentTypeHeaderIndex !== -1 && localHeaders[contentTypeHeaderIndex].key === "application/x-www-form-urlencoded") { - return; - } - if (contentTypeHeaderIndex !== -1) { - localHeaders[contentTypeHeaderIndex] = { - isChecked: true, - key: "Content-Type", - value: "application/x-www-form-urlencoded", - isFixed: false - }; - } else { - localHeaders.splice(localHeaders.length - 1, 0, { - isChecked: true, - key: "Content-Type", - value: "application/x-www-form-urlencoded", - isFixed: false - }); - } - dispatch(Actions.SetRequestHeadersAction(localHeaders)); - } - }, [body.urlencoded]); - - return (
{ + + const [selectedTab, setSelectedTab] = useState("tests"); + + const renderOptionsUI = (tab: string) => { + switch (tab) { + case 'setvar': + return ; + default: + return ; + } + }; + + return ( +
+ +
+ {renderOptionsUI(selectedTab)} +
+
+ ); +}; \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/consts.ts b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/consts.ts new file mode 100644 index 0000000..73a0733 --- /dev/null +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/consts.ts @@ -0,0 +1,39 @@ +export const preConditions = [ + { name: "parameter", value: "", }, + { name: "No Condition", value: "noCondition", }, + { name: "ResponseCode", value: "Response Code", }, + { name: "ResponseBody", value: "Response Body", }, + { name: "Variable", value: "Variable", } +]; + +export const preConditionActions = { + "Response Code": { + "action": [ + { name: "select", value: "", }, + { name: "equal", value: "equal" }, + { name: "notEqual", value: "notEqual" }, + { name: "<", value: "<" }, + { name: "<=", value: "<=" }, + { name: ">", value: ">" }, + { name: ">=", value: ">=" }, + { name: "regex", value: "regex" }, + ] + }, + "Response Body": { + "action": [ + { name: "select", value: "", }, + { name: "isJSON", value: "isJSON" }, + { name: "equal", value: "equal" }, + { name: "notEqual", value: "notEqual" }, + { name: "contains", value: "contains" }, + { name: "regex", value: "regex" }, + ] + }, + "Variable": { + "action": [ + { name: "select", value: "", }, + { name: "empty", value: "empty" }, + { name: "notEmpty", value: "notEmpty" }, + ] + } +}; \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/index.tsx b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/index.tsx new file mode 100644 index 0000000..618fd65 --- /dev/null +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/index.tsx @@ -0,0 +1,43 @@ +import { Actions } from "../../../redux"; +import { IRunRequest } from "../../../redux/types"; +import { InitialTest } from "../../../redux/reducer"; +import { IRootState } from "../../../../../reducer/combineReducer"; +import { PreRequest } from "./preRequest"; +import { useDispatch, useSelector } from "react-redux"; +import React from "react"; +import "./style.css"; + +export const PreFetch = () => { + + const dispatch = useDispatch(); + const { preFetch } = useSelector((state: IRootState) => state.requestData); + + function onAddReqClick() { + let newPreReq: IRunRequest = { + reqId: "", + parentId: "", + colId: "", + order: preFetch && preFetch?.requests ? preFetch.requests.length + 1 : 1, + condition: JSON.parse(JSON.stringify(InitialTest)) + }; + dispatch(Actions.SetAddPreRequestAction(newPreReq)); + }; + + + const makeRequests = (reqs: IRunRequest[]) => { + return ( + reqs?.map((item: IRunRequest, index: number) => { + return
; + }) + ); + }; + + return ( +
+
* Max 5 request
+ { + makeRequests(preFetch?.requests) + } +
+ ); +}; \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/preRequest.tsx b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/preRequest.tsx new file mode 100644 index 0000000..7198630 --- /dev/null +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/preRequest.tsx @@ -0,0 +1,265 @@ +import { Actions } from "../../../redux"; +import { IColRequest, IRequestList, IRunRequest, ITest } from "../../../redux/types"; +import { IRootState } from "../../../../../reducer/combineReducer"; +import { preConditionActions, preConditions } from "./consts"; +import { ReactComponent as BinLogo } from '../../../../../../../icons/bin.svg'; +import { requestTypes, responseTypes } from "../../../../../../utils/configuration"; +import { TextEditor } from "../../../../Common/TextEditor/TextEditor"; +import { useDispatch, useSelector } from "react-redux"; +import React, { useEffect, useState } from "react"; +import vscode from "../../../../Common/vscodeAPI"; +import "./style.css"; + +export interface IPreRequestProps { + request: IRunRequest, + reqIndex: number +} + +export const PreRequest = (props: IPreRequestProps) => { + + const dispatch = useDispatch(); + const { selectedVariable } = useSelector((state: IRootState) => state.variableData); + const { collectionList, colRequestList } = useSelector((state: IRootState) => state.reqColData); + + const [selectedRequestList, setSelectedRequestList] = useState([]); + + useEffect(() => { + window.addEventListener("message", (event) => { + if (event.data && event.data.type === responseTypes.getCollectionsByIdWithPathResponse && props.request.colId === event.data.colId) { + let reqList: IRequestList[] = []; + for (const [key, value] of Object.entries(event.data.paths)) { + reqList.push({ + id: key, + name: value as string + }); + } + let col: IColRequest = { + id: event.data.colId, + reqs: reqList + }; + + dispatch(Actions.SetColRequestListAction(col)); + setSelectedRequestList(col.reqs); + + let reqId = col.reqs.length > 0 ? (props.request.reqId ? props.request.reqId : col.reqs[0].id) : ""; + let parentId = col.reqs.length > 0 ? col.reqs.find(i => i.id === reqId)?.name.split(";")[1] : ""; + dispatch(Actions.SetSelectedReqAction(reqId, props.reqIndex, parentId)); + } + }); + + if (props.request.colId && colRequestList.findIndex(i => i.id === props.request.colId) === -1) { + vscode.postMessage({ type: requestTypes.getCollectionsByIdWithPathRequest, data: props.request.colId }); + } + }, []); + + useEffect(() => { + if (props.request.colId && colRequestList.length > 0) { + setSelectedRequestList(colRequestList.find(i => i.id === props.request.colId)?.reqs); + } + }, [colRequestList]); + + const onSelectCollection = (colId: string, index: number) => { + dispatch(Actions.SetSelectedColAction(colId, index)); + + if (colRequestList.findIndex(i => i.id === colId) === -1) { + vscode.postMessage({ type: requestTypes.getCollectionsByIdWithPathRequest, data: colId }); + } else { + let reqs = colRequestList.find(i => i.id === colId)?.reqs; + setSelectedRequestList(reqs); + dispatch(Actions.SetSelectedReqAction(reqs.length > 0 ? reqs[0].id : "", index, reqs.length > 0 ? reqs[0].name.split(";")[1] : "")); + } + }; + + const onSelectRequest = (value: string, selectedIndex: number, reqIndex: number) => { + dispatch(Actions.SetSelectedReqAction(value, reqIndex, selectedRequestList[selectedIndex].name.split(";")[1])); + }; + + const onSelectItem = (value: string, reqIndex: number, condIndex: number, type: string) => { + let localTable = addValue(value, condIndex, type); + dispatch(Actions.SetPreConditionAction(localTable, reqIndex, condIndex)); + }; + + const onSelect = (event: React.ChangeEvent | React.ChangeEvent, reqIndex: number, condIndex: number, type: string) => { + onSelectItem(event.target.value, reqIndex, condIndex, type); + }; + + const addValue = (value: string, condIndex: number, selectType: string): ITest => { + let localValue = { ...props.request }; + let condition = localValue.condition[condIndex]; + localValue.condition[condIndex] = { + parameter: selectType === "parameter" ? value : condition.parameter, + action: selectType === "action" ? value : condition.action, + expectedValue: selectType === "expectedValue" ? value : condition.expectedValue, + customParameter: selectType === "customParameter" ? value : condition.customParameter + }; + + return localValue.condition[condIndex]; + }; + + function onDelete(reqIndex: number, condIndex: number) { + dispatch(Actions.SetDeletePreConditionAction(reqIndex, condIndex)); + } + + function onDeleteReqClick(index: number) { + dispatch(Actions.SetDeletePreRequestAction(index)); + } + + function getParameterList(row: ITest, reqIndex: number, conIndex: number) { + return ( + + ); + } + + function getActionList(row: ITest, reqIndex: number, conIndex: number) { + let parameter = preConditionActions[row.parameter]; + let actionList: any; + + if (parameter) { + actionList = row.parameter ? (row.parameter === "noCondition" ? [] : parameter["action"]) : [{ name: "action", value: "" }]; + } + else { + actionList = [{ name: "action", value: "", }]; + } + + return ( + + ); + } + + const makeCondition = (conditions: ITest[], reqIndex: number) => { + + return ( +
+ Condition {reqIndex} + { + conditions.map((item: ITest, conIndex: number) => { + return ( +
+
+ {getParameterList(item, reqIndex, conIndex)} +
+
+ {getActionList(item, reqIndex, conIndex)} +
+
+ item.key)} + placeholder="condition" + onChange={(val) => onSelectItem(val, reqIndex, conIndex, "expectedValue")} + value={item.expectedValue} + focus={false} + disabled={item.parameter === "noCondition"} + /> +
+
+ {conIndex !== conditions.length - 1 ? + onDelete(reqIndex, conIndex)} /> + : + <> + } +
+
+ ); + }) + } +
+ ); + }; + + const makeRequest = (req: IRunRequest, reqIndex: number) => { + return ( + <> + { + reqIndex > 0 && makeCondition(req.condition, reqIndex) + } +
+ Pre-request {reqIndex + 1} +
+
+ onDeleteReqClick(reqIndex)} /> +
+
+ + +
+
+ + +
+
+
+ + ); + }; + + return ( +
+ {makeRequest(props.request, props.reqIndex)} +
+ ); +}; \ No newline at end of file diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/style.css b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/style.css new file mode 100644 index 0000000..d72d90d --- /dev/null +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/PreFetch/style.css @@ -0,0 +1,87 @@ +.preReq-container{ + display: grid; + padding: 10px 0 5px 0; +} +.preReq-panel { + padding: 3px 0px 2px 0; +} + +.preReq-delete-panel { + float: right; +} + +.preReq-condition-panel { + display: flex; + padding: 3px 0 7px 0; +} + +.preReq-select { + padding: 2px 4px 4px 4px !important; + border : 1px solid !important; +} + +.preReq-condition-param-panel { + width : 30%; + margin-right: 10px; +} + +.preReq-condition-param-panel .public-DraftEditorPlaceholder-inner { + padding: 2px 4px 4px 4px; +} + +.preReq-condition-param-panel .DraftEditor-editorContainer { + padding : 2px 4px 4px 4px; + border : var(--border-size) solid var(--border-color); + border-radius: 2px; +} + +.preReq-condition-delete-panel { + display : flex; + align-items: center; +} + +.preReq-condition-delete-btn { + transform: scale(0.80); +} + +.preReq-col-select { + height : 30px; + outline : none; + border-radius : 3px; + background-color: var(--background-color); + color : var(--text-color); + width : 170px !important; +} + +.preReq-col-select option { + background-color: var(--background-color); + color : var(--text-color); +} + +.preReq-col-select:focus, +.preReq-col-select:hover { + outline: none; +} + +.preReq-col-select:invalid { + color: var(--input-unchecked); +} + +.preReq-col-select option[value=""][disabled] { + display: none; +} + +.preReq-field-panel { + margin-top: 3px +} + +.preReq-text-panel { + display: flex; + padding : 5px 5px 5px 0; + max-width: 100%; +} + +.max-req { + float: left; + color: red; +} diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/QueryParams/index.tsx b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/QueryParams/index.tsx index dabb7ba..fcd87f8 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/QueryParams/index.tsx +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/Options/QueryParams/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import React from 'react'; import { ITableData } from "../../../../Common/Table/types"; import { Table } from "../../../../Common/Table/Table"; import { useDispatch, useSelector } from "react-redux"; diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/consts.ts b/src/fetch-client-ui/components/RequestUI/OptionsPanel/consts.ts index b8ab4b5..f968fb3 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/consts.ts +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/consts.ts @@ -3,6 +3,11 @@ export const requestOptions = [ { name: "Authorization", value: "authorization" }, { name: "Headers", value: "headers" }, { name: "Body", value: "body" }, + { name: "PreFetch", value: "preFetch" }, + { name: "PostFetch", value: "postFetch" } +]; + +export const postFetchOptions = [ { name: "Tests", value: "tests" }, - { name: "Set Var", value: "setvar" } + { name: "Variable", value: "setvar" } ]; diff --git a/src/fetch-client-ui/components/RequestUI/OptionsPanel/index.tsx b/src/fetch-client-ui/components/RequestUI/OptionsPanel/index.tsx index 94d31a0..d8b672e 100644 --- a/src/fetch-client-ui/components/RequestUI/OptionsPanel/index.tsx +++ b/src/fetch-client-ui/components/RequestUI/OptionsPanel/index.tsx @@ -1,16 +1,17 @@ -import React from "react"; -import { useState } from "react"; -import { useSelector } from "react-redux"; -import { IRootState } from "../../../reducer/combineReducer"; -import { TestPanel } from "../../TestUI/TestPanel"; -import ResToVariables from "../../Variables/resToVar"; -import { AuthPanel } from "./Options/Auth"; import { allAuthTypes, basicAuthTypes } from "./Options/Auth/consts"; +import { AuthPanel } from "./Options/Auth"; import { Body } from "./Options/Body"; import { HeadersPanel } from "./Options/Headers"; +import { IRootState } from "../../../reducer/combineReducer"; +import { OptionsTab } from "./OptionTab"; +import { PostFetch } from "./Options/PostFetch"; +import { PreFetch } from "./Options/PreFetch"; import { QueryParams } from "./Options/QueryParams"; +import { requestOptions } from "./consts"; import { Settings } from "./Options/Settings"; -import { OptionsTab } from "./OptionTab"; +import { useSelector } from "react-redux"; +import { useState } from "react"; +import React from "react"; import "./style.css"; export const OptionsPanel = () => { @@ -33,17 +34,17 @@ export const OptionsPanel = () => { return ; case 'settings': return ; - case 'setvar': - return ; + case 'preFetch': + return ; default: - return ; + return ; } }; return (
- +
{renderOptionsUI(selectedTab)}
diff --git a/src/fetch-client-ui/components/RequestUI/redux/actions.ts b/src/fetch-client-ui/components/RequestUI/redux/actions.ts index df991f8..9a3ee19 100644 --- a/src/fetch-client-ui/components/RequestUI/redux/actions.ts +++ b/src/fetch-client-ui/components/RequestUI/redux/actions.ts @@ -1,10 +1,12 @@ import { ITableData } from "../../Common/Table/types"; import { ISettings } from "../../SideBar/redux/types"; import { - FETCH_CLIENT_SET_NOTES, - FETCH_CLIENT_SET_REQ, - FETCH_CLIENT_SET_REQ_AUTH, FETCH_CLIENT_SET_REQ_BINARY_DATA, FETCH_CLIENT_SET_REQ_BODY, FETCH_CLIENT_SET_REQ_COL_DETAILS, FETCH_CLIENT_SET_REQ_FORM_DATA_BODY, FETCH_CLIENT_SET_REQ_HEADERS, FETCH_CLIENT_SET_REQ_METHOD, - FETCH_CLIENT_SET_REQ_PARAMS, FETCH_CLIENT_SET_REQ_PARENT_SETTINGS, FETCH_CLIENT_SET_REQ_RAW, FETCH_CLIENT_SET_REQ_RAW_LANG, FETCH_CLIENT_SET_REQ_RESET_BODY, FETCH_CLIENT_SET_REQ_URL, FETCH_CLIENT_SET_SET_VAR, FETCH_CLIENT_SET_TEST, IAuth, IBodyData, IRequestModel, ISetVar, ITest, MethodType, RequestActionTypes + FETCH_CLIENT_SET_ADD_PREREQUEST, FETCH_CLIENT_SET_COLLECTION_LIST, FETCH_CLIENT_SET_COL_ID, FETCH_CLIENT_SET_COL_REQUEST_LIST, FETCH_CLIENT_SET_DELETE_PRECONDITION, FETCH_CLIENT_SET_DELETE_PREREQUEST, + FETCH_CLIENT_SET_NOTES, FETCH_CLIENT_SET_OAUTH_TOKEN, FETCH_CLIENT_SET_PRECONDITION, FETCH_CLIENT_SET_REQ, FETCH_CLIENT_SET_REQ_AUTH, + FETCH_CLIENT_SET_REQ_BINARY_DATA, FETCH_CLIENT_SET_REQ_BODY, FETCH_CLIENT_SET_REQ_COL_DETAILS, FETCH_CLIENT_SET_REQ_FORM_DATA_BODY, + FETCH_CLIENT_SET_REQ_HEADERS, FETCH_CLIENT_SET_REQ_ID, FETCH_CLIENT_SET_REQ_METHOD, FETCH_CLIENT_SET_REQ_PARAMS, FETCH_CLIENT_SET_REQ_PARENT_SETTINGS, + FETCH_CLIENT_SET_REQ_RAW, FETCH_CLIENT_SET_REQ_RAW_LANG, FETCH_CLIENT_SET_REQ_RESET_BODY, FETCH_CLIENT_SET_REQ_URL, FETCH_CLIENT_SET_SET_VAR, + FETCH_CLIENT_SET_TEST, IAuth, IBodyData, ICollection, IColRequest, IRequestModel, IRunRequest, ISetVar, ITest, MethodType, RequestActionTypes } from "./types"; export const SetRequestAction = (value: IRequestModel): RequestActionTypes => { @@ -161,4 +163,93 @@ export const SetReqParentSettingsAction = (value: ISettings): RequestActionTypes parentSettings: value } }; -}; \ No newline at end of file +}; + +export const SetOAuthTokenAction = (value: string): RequestActionTypes => { + return { + type: FETCH_CLIENT_SET_OAUTH_TOKEN, + payload: { + token: value + } + }; +}; + +export const SetPreConditionAction = (value: ITest, reqIndex: number, condIndex: number): RequestActionTypes => { + return { + type: FETCH_CLIENT_SET_PRECONDITION, + payload: { + condition: value, + reqIndex: reqIndex, + condIndex: condIndex + } + }; +}; + +export const SetAddPreRequestAction = (value: IRunRequest): RequestActionTypes => { + return { + type: FETCH_CLIENT_SET_ADD_PREREQUEST, + payload: { + request: value + } + }; +}; + + +export const SetDeletePreRequestAction = (index: number): RequestActionTypes => { + return { + type: FETCH_CLIENT_SET_DELETE_PREREQUEST, + payload: { + index: index + } + }; +}; + +export const SetDeletePreConditionAction = (index: number, index1: number): RequestActionTypes => { + return { + type: FETCH_CLIENT_SET_DELETE_PRECONDITION, + payload: { + reqIndex: index, + condIndex: index1 + } + }; +}; + +export const SetCollectionListAction = (value: ICollection[]): RequestActionTypes => { + return { + type: FETCH_CLIENT_SET_COLLECTION_LIST, + payload: { + colList: value + } + }; +}; + +export const SetColRequestListAction = (value: IColRequest): RequestActionTypes => { + return { + type: FETCH_CLIENT_SET_COL_REQUEST_LIST, + payload: { + colReqList: value + } + }; +}; + + +export const SetSelectedColAction = (value: string, value2: number): RequestActionTypes => { + return { + type: FETCH_CLIENT_SET_COL_ID, + payload: { + colId: value, + index: value2 + } + }; +}; + +export const SetSelectedReqAction = (reqId: string, reqIndex: number, parentId: string): RequestActionTypes => { + return { + type: FETCH_CLIENT_SET_REQ_ID, + payload: { + reqId: reqId, + index: reqIndex, + parentId: parentId + } + }; +}; diff --git a/src/fetch-client-ui/components/RequestUI/redux/colReducer.ts b/src/fetch-client-ui/components/RequestUI/redux/colReducer.ts index 36eeed2..6796c4e 100644 --- a/src/fetch-client-ui/components/RequestUI/redux/colReducer.ts +++ b/src/fetch-client-ui/components/RequestUI/redux/colReducer.ts @@ -1,10 +1,11 @@ -import { InitialSettings } from "../../SideBar/redux/reducer"; -import { FETCH_CLIENT_SET_REQ_COL_DETAILS, FETCH_CLIENT_SET_REQ_PARENT_SETTINGS, IReqColModel, RequestActionTypes } from "./types"; +import { FETCH_CLIENT_SET_COLLECTION_LIST, FETCH_CLIENT_SET_COL_REQUEST_LIST, FETCH_CLIENT_SET_REQ_COL_DETAILS, FETCH_CLIENT_SET_REQ_PARENT_SETTINGS, IReqColModel, RequestActionTypes } from "./types"; export const InitialState: IReqColModel = { colId: "", folderId: "", - parentSettings: null + parentSettings: null, + collectionList: [], + colRequestList: [] }; export const ReqColReducer: (state?: IReqColModel, @@ -25,6 +26,18 @@ export const ReqColReducer: (state?: IReqColModel, parentSettings: action.payload.parentSettings }; } + case FETCH_CLIENT_SET_COLLECTION_LIST: { + return { + ...state, + collectionList: action.payload.colList + }; + } + case FETCH_CLIENT_SET_COL_REQUEST_LIST: { + return { + ...state, + colRequestList: [...state.colRequestList, action.payload.colReqList] + }; + } default: { return state; } diff --git a/src/fetch-client-ui/components/RequestUI/redux/reducer.ts b/src/fetch-client-ui/components/RequestUI/redux/reducer.ts index 2d83fe0..383a336 100644 --- a/src/fetch-client-ui/components/RequestUI/redux/reducer.ts +++ b/src/fetch-client-ui/components/RequestUI/redux/reducer.ts @@ -2,11 +2,13 @@ import { v4 as uuidv4 } from 'uuid'; import { ITableData } from "../../Common/Table/types"; import { requestBodyRaw } from '../OptionsPanel/Options/Body/consts'; import { - FETCH_CLIENT_SET_NOTES, - FETCH_CLIENT_SET_REQ, - FETCH_CLIENT_SET_REQ_AUTH, FETCH_CLIENT_SET_REQ_BINARY_DATA, FETCH_CLIENT_SET_REQ_BODY, FETCH_CLIENT_SET_REQ_FORM_DATA_BODY, FETCH_CLIENT_SET_REQ_HEADERS, FETCH_CLIENT_SET_REQ_METHOD, - FETCH_CLIENT_SET_REQ_PARAMS, FETCH_CLIENT_SET_REQ_RAW, FETCH_CLIENT_SET_REQ_RAW_LANG, FETCH_CLIENT_SET_REQ_RESET_BODY, FETCH_CLIENT_SET_REQ_URL, - FETCH_CLIENT_SET_SET_VAR, FETCH_CLIENT_SET_TEST, IAuth, IAwsAuth, IBinaryFileData, IBodyData, IRequestModel, ISetVar, ITest, RequestActionTypes + ClientAuth, + FETCH_CLIENT_SET_ADD_PREREQUEST, FETCH_CLIENT_SET_COL_ID, FETCH_CLIENT_SET_DELETE_PRECONDITION, FETCH_CLIENT_SET_DELETE_PREREQUEST, + FETCH_CLIENT_SET_NOTES, FETCH_CLIENT_SET_OAUTH_TOKEN, FETCH_CLIENT_SET_PRECONDITION, FETCH_CLIENT_SET_REQ, + FETCH_CLIENT_SET_REQ_AUTH, FETCH_CLIENT_SET_REQ_BINARY_DATA, FETCH_CLIENT_SET_REQ_BODY, FETCH_CLIENT_SET_REQ_FORM_DATA_BODY, FETCH_CLIENT_SET_REQ_HEADERS, + FETCH_CLIENT_SET_REQ_ID, FETCH_CLIENT_SET_REQ_METHOD, FETCH_CLIENT_SET_REQ_PARAMS, FETCH_CLIENT_SET_REQ_RAW, FETCH_CLIENT_SET_REQ_RAW_LANG, + FETCH_CLIENT_SET_REQ_RESET_BODY, FETCH_CLIENT_SET_REQ_URL, FETCH_CLIENT_SET_SET_VAR, FETCH_CLIENT_SET_TEST, + GrantType, IAuth, IAwsAuth, IBinaryFileData, IBodyData, IOAuth, IPreFetch, IRequestModel, IRunRequest, ISetVar, ITest, RequestActionTypes } from "./types"; export const InitialRequestHeaders: ITableData[] = [ @@ -56,14 +58,31 @@ export const InitialAwsAuth: IAwsAuth = { sessionToken: "", }; +export const InitialOAuth: IOAuth = { + clientAuth: ClientAuth.Body, + clientId: "", + clientSecret: "", + grantType: GrantType.Client_Crd, + password: "", + scope: "", + tokenName: "access_token", + tokenUrl: "", + username: "", + advancedOpt: { + audience: "", + resource: "" + } +}; + export const InitialAuth: IAuth = { authType: "noauth", userName: "", password: "", addTo: "queryparams", showPwd: false, - tokenPrefix: "", - aws: InitialAwsAuth + tokenPrefix: "Bearer", + aws: InitialAwsAuth, + oauth: InitialOAuth }; export const InitialBinaryData: IBinaryFileData = { @@ -81,18 +100,22 @@ export const InitialBody: IBodyData = { graphql: { query: "", variables: "" }, }; -export const IntialTest: ITest[] = [{ +export const InitialTest: ITest[] = [{ parameter: "", action: "", expectedValue: "" }]; -export const IntialSetVar: ISetVar[] = [{ +export const InitialSetVar: ISetVar[] = [{ parameter: "", key: "", variableName: "" }]; +export const InitialPreFetch: IPreFetch = { + requests: [] +}; + export const InitialState: IRequestModel = { id: uuidv4(), url: "", @@ -103,9 +126,10 @@ export const InitialState: IRequestModel = { auth: InitialAuth, headers: InitialRequestHeaders, body: InitialBody, - tests: IntialTest, - setvar: IntialSetVar, - notes: "" + tests: InitialTest, + setvar: InitialSetVar, + notes: "", + preFetch: InitialPreFetch }; export const RequestReducer: (state?: IRequestModel, @@ -170,8 +194,9 @@ export const RequestReducer: (state?: IRequestModel, headers: action.payload.req.headers, body: action.payload.req.body, tests: action.payload.req.tests, - setvar: action.payload.req.setvar ? action.payload.req.setvar : IntialSetVar, + setvar: action.payload.req.setvar ? action.payload.req.setvar : JSON.parse(JSON.stringify(InitialSetVar)), notes: action.payload.req.notes, + preFetch: action.payload.req.preFetch ?? InitialPreFetch }; } case FETCH_CLIENT_SET_TEST: { @@ -237,12 +262,119 @@ export const RequestReducer: (state?: IRequestModel, setvar: action.payload.data }; } + case FETCH_CLIENT_SET_OAUTH_TOKEN: { + return { + ...state, + auth: { + ...state.auth, + password: action.payload.token, + } + }; + } + case FETCH_CLIENT_SET_PRECONDITION: { + return { + ...state, + preFetch: { + ...state.preFetch, + requests: updateCondition(state.preFetch?.requests, action.payload.condition, action.payload.reqIndex, action.payload.condIndex) + } + }; + } + case FETCH_CLIENT_SET_ADD_PREREQUEST: { + return { + ...state, + preFetch: { + ...state.preFetch, + requests: [...state.preFetch?.requests, action.payload.request] + } + }; + } + case FETCH_CLIENT_SET_DELETE_PREREQUEST: { + return { + ...state, + preFetch: { + ...state.preFetch, + requests: deleteRequest(state.preFetch?.requests, action.payload.index) + } + }; + } + case FETCH_CLIENT_SET_DELETE_PRECONDITION: { + return { + ...state, + preFetch: { + ...state.preFetch, + requests: deleteCondition(state.preFetch?.requests, action.payload.reqIndex, action.payload.condIndex) + } + }; + } + case FETCH_CLIENT_SET_COL_ID: { + return { + ...state, + preFetch: { + ...state.preFetch, + requests: updateSelectedCol(state.preFetch?.requests, action.payload.index, action.payload.colId, "", "col") + } + }; + } + case FETCH_CLIENT_SET_REQ_ID: { + return { + ...state, + preFetch: { + ...state.preFetch, + requests: updateSelectedCol(state.preFetch?.requests, action.payload.index, action.payload.reqId, action.payload.parentId, "req") + } + }; + } default: { return state; } } }; +function updateSelectedCol(requests: IRunRequest[], reqIndex: number, id: string, parentId: string, type: string): IRunRequest[] { + let localRequests = [...requests]; + + if (type === "col") { + localRequests[reqIndex].colId = id; + localRequests[reqIndex].reqId = ""; + localRequests[reqIndex].parentId = parentId; + } else { + localRequests[reqIndex].reqId = id; + localRequests[reqIndex].parentId = parentId; + } + + return localRequests; +} + +function updateCondition(requests: IRunRequest[], condition: ITest, reqIndex: number, condIndex: number): IRunRequest[] { + let localRequests = [...requests]; + localRequests[reqIndex].condition[condIndex] = condition; + + if (condIndex === requests[reqIndex].condition.length - 1 && requests[reqIndex].condition[condIndex].action) { + let newCondition: ITest = { + parameter: "", + action: "", + expectedValue: "", + customParameter: "" + }; + localRequests[reqIndex].condition.push(newCondition); + } + + return localRequests; +} + +function deleteCondition(requests: IRunRequest[], reqIndex: number, condIndex: number): IRunRequest[] { + let localRequests = [...requests]; + localRequests[reqIndex].condition.splice(condIndex, 1); + return localRequests; +} + +function deleteRequest(requests: IRunRequest[], reqIndex: number): IRunRequest[] { + let localRequests = [...requests]; + localRequests.splice(reqIndex, 1); + return localRequests; +} + function updateURL(url: string, params: ITableData[]): string { let searchParams = new URLSearchParams(); @@ -318,4 +450,4 @@ function setFormDataBody(body: IBodyData, path: string, index: number): IBodyDat } } return localbody; -} \ No newline at end of file +} diff --git a/src/fetch-client-ui/components/RequestUI/redux/types.ts b/src/fetch-client-ui/components/RequestUI/redux/types.ts index a1cced1..913a05e 100644 --- a/src/fetch-client-ui/components/RequestUI/redux/types.ts +++ b/src/fetch-client-ui/components/RequestUI/redux/types.ts @@ -11,6 +11,34 @@ export interface IAwsAuth { sessionToken: string; } +export interface IAdvancedOAuth { + audience: string; + resource: string; +} + +export interface IOAuth { + clientAuth: ClientAuth; + clientId: string; + clientSecret: string; + grantType: GrantType; + password?: string; + scope: string; + tokenName: string; + tokenUrl: string; + username?: string; + advancedOpt: IAdvancedOAuth; +} + +export enum GrantType { + PWD_Crd = "password_credentials", + Client_Crd = "client_credentials" +} + +export enum ClientAuth { + Header = "header", + Body = "body" +} + export interface IAuth { authType: string; userName: string; @@ -19,6 +47,7 @@ export interface IAuth { showPwd: boolean; tokenPrefix: string; aws?: IAwsAuth; + oauth?: IOAuth; } export interface IBinaryFileData { @@ -53,6 +82,18 @@ export interface ITest { customParameter?: string; } +export interface IRunRequest { + reqId: string; + parentId: string; + colId: string; + order: number; + condition: ITest[]; +} + +export interface IPreFetch { + requests: IRunRequest[] +} + export interface IRequestModel { id: string; url: string; @@ -66,6 +107,7 @@ export interface IRequestModel { tests: ITest[]; setvar: ISetVar[]; notes: string; + preFetch: IPreFetch; } export interface ISetVar { @@ -74,10 +116,27 @@ export interface ISetVar { variableName: string; } +export interface ICollection { + id: string; + name: string; +} + +export interface IRequestList { + id: string; + name: string; +} + +export interface IColRequest { + id: string; + reqs: IRequestList[]; +} + export interface IReqColModel { colId: string; folderId: string; parentSettings: ISettings; + collectionList: ICollection[]; + colRequestList: IColRequest[] } export const FETCH_CLIENT_SET_REQ_URL: "FETCH_CLIENT_SET_REQ_URL" = "FETCH_CLIENT_SET_REQ_URL"; @@ -97,6 +156,15 @@ export const FETCH_CLIENT_SET_NOTES: "FETCH_CLIENT_SET_NOTES" = "FETCH_CLIENT_SE export const FETCH_CLIENT_SET_SET_VAR: "FETCH_CLIENT_SET_SET_VAR" = "FETCH_CLIENT_SET_SET_VAR"; export const FETCH_CLIENT_SET_REQ_COL_DETAILS: "FETCH_CLIENT_SET_REQ_COL_DETAILS" = "FETCH_CLIENT_SET_REQ_COL_DETAILS"; export const FETCH_CLIENT_SET_REQ_PARENT_SETTINGS: "FETCH_CLIENT_SET_REQ_PARENT_SETTINGS" = "FETCH_CLIENT_SET_REQ_PARENT_SETTINGS"; +export const FETCH_CLIENT_SET_OAUTH_TOKEN: "FETCH_CLIENT_SET_OAUTH_TOKEN" = "FETCH_CLIENT_SET_OAUTH_TOKEN"; +export const FETCH_CLIENT_SET_PRECONDITION: "FETCH_CLIENT_SET_PRECONDITION" = "FETCH_CLIENT_SET_PRECONDITION"; +export const FETCH_CLIENT_SET_ADD_PREREQUEST: "FETCH_CLIENT_SET_ADD_PREREQUEST" = "FETCH_CLIENT_SET_ADD_PREREQUEST"; +export const FETCH_CLIENT_SET_DELETE_PREREQUEST: "FETCH_CLIENT_SET_DELETE_PREREQUEST" = "FETCH_CLIENT_SET_DELETE_PREREQUEST"; +export const FETCH_CLIENT_SET_DELETE_PRECONDITION: "FETCH_CLIENT_SET_DELETE_PRECONDITION" = "FETCH_CLIENT_SET_DELETE_PRECONDITION"; +export const FETCH_CLIENT_SET_COLLECTION_LIST: "FETCH_CLIENT_SET_COLLECTION_LIST" = "FETCH_CLIENT_SET_COLLECTION_LIST"; +export const FETCH_CLIENT_SET_COL_REQUEST_LIST: "FETCH_CLIENT_SET_COL_REQUEST_LIST" = "FETCH_CLIENT_SET_COL_REQUEST_LIST"; +export const FETCH_CLIENT_SET_COL_ID: "FETCH_CLIENT_SET_COL_ID" = "FETCH_CLIENT_SET_COL_ID"; +export const FETCH_CLIENT_SET_REQ_ID: "FETCH_CLIENT_SET_REQ_ID" = "FETCH_CLIENT_SET_REQ_ID"; export interface ISetTest { type: typeof FETCH_CLIENT_SET_TEST; @@ -219,4 +287,76 @@ export interface ISetReqParentSettings { } } -export type RequestActionTypes = | ISetURL | ISetMethod | ISetParams | ISetAuth | ISetHeaders | ISetBody | ISetRequest | ISetTest | ISetRawLang | ISetResetBody | ISetRawValue | ISetBinaryData | ISetNotes | ISetAddVar | ISetReqColDetails | ISetReqParentSettings | ISetFormDataBody; \ No newline at end of file +export interface ISetOAuthToken { + type: typeof FETCH_CLIENT_SET_OAUTH_TOKEN; + payload: { + token: string; + } +} + +export interface ISetPreCondition { + type: typeof FETCH_CLIENT_SET_PRECONDITION; + payload: { + condition: ITest; + reqIndex: number; + condIndex: number; + } +} + +export interface ISetAddPreRequest { + type: typeof FETCH_CLIENT_SET_ADD_PREREQUEST; + payload: { + request: IRunRequest; + } +} + +export interface ISetDeletePreRequest { + type: typeof FETCH_CLIENT_SET_DELETE_PREREQUEST; + payload: { + index: number; + } +} + +export interface ISetDeletePreCondition { + type: typeof FETCH_CLIENT_SET_DELETE_PRECONDITION; + payload: { + reqIndex: number; + condIndex: number; + } +} + +export interface ISetCollectionList { + type: typeof FETCH_CLIENT_SET_COLLECTION_LIST; + payload: { + colList: ICollection[]; + } +} + +export interface ISetColRequestList { + type: typeof FETCH_CLIENT_SET_COL_REQUEST_LIST; + payload: { + colReqList: IColRequest; + } +} + +export interface ISetSelectedCol { + type: typeof FETCH_CLIENT_SET_COL_ID; + payload: { + colId: string; + index: number; + } +} + +export interface ISetSelectedRequest { + type: typeof FETCH_CLIENT_SET_REQ_ID; + payload: { + reqId: string; + index: number; + parentId:string; + } +} + +export type RequestActionTypes = | ISetURL | ISetMethod | ISetParams | ISetAuth | ISetHeaders | ISetBody | ISetRequest | ISetTest | + ISetRawLang | ISetResetBody | ISetRawValue | ISetBinaryData | ISetNotes | ISetAddVar | ISetReqColDetails | ISetReqParentSettings | ISetFormDataBody | + ISetOAuthToken | ISetPreCondition | ISetAddPreRequest | ISetDeletePreRequest | ISetDeletePreCondition | ISetCollectionList | ISetColRequestList | + ISetSelectedCol | ISetSelectedRequest; \ No newline at end of file diff --git a/src/fetch-client-ui/components/ResponseUI/OptionsPanel/OptionTab/index.tsx b/src/fetch-client-ui/components/ResponseUI/OptionsPanel/OptionTab/index.tsx index f232a65..dba78ac 100644 --- a/src/fetch-client-ui/components/ResponseUI/OptionsPanel/OptionTab/index.tsx +++ b/src/fetch-client-ui/components/ResponseUI/OptionsPanel/OptionTab/index.tsx @@ -2,12 +2,12 @@ import React, { useEffect, useRef, useState } from 'react'; import { useSelector } from "react-redux"; import { IRootState } from "../../../../reducer/combineReducer"; import { curlResponseOptions, responseOptions } from "../../ResponsePanel/consts"; -import { ReactComponent as MenuLogo } from '../../../../../../icons/menu.svg'; import { ReactComponent as CodeLogo } from '../../../../../../icons/code.svg'; import "./style.css"; import { FormatBytes, GetResponseTime } from "./util"; import vscode from '../../../Common/vscodeAPI'; import { requestTypes } from '../../../../../utils/configuration'; +import { getColFolDotMenu } from '../../../Common/icons'; export const ResponseOptionsTab = (props: any) => { @@ -17,8 +17,10 @@ export const ResponseOptionsTab = (props: any) => { const { url } = useSelector((state: IRootState) => state.requestData); const [menuShow, setMenuShow] = useState(false); + const [codeMenuShow, setCodeMenuShow] = useState(false); const wrapperRef = useRef(null); + const codeWrapperRef = useRef(null); function getClassName(status: number): string { if (response.isError) { @@ -55,13 +57,25 @@ export const ResponseOptionsTab = (props: any) => { if (wrapperRef.current && !wrapperRef.current.contains(evt.target)) { setMenuShow(false); } + + if (codeWrapperRef.current && !codeWrapperRef.current.contains(evt.target)) { + setCodeMenuShow(false); + } } function setShowMenu(evt: any) { evt.preventDefault(); setMenuShow(!menuShow); + setCodeMenuShow(false); + } + + function setCodeShowMenu(evt: any) { + evt.preventDefault(); + setMenuShow(false); + setCodeMenuShow(!codeMenuShow); } + function onSaveResponse(evt: any) { evt.preventDefault(); vscode.postMessage({ type: requestTypes.saveResponseRequest, data: response.responseData, fileType: response.responseType?.format }); @@ -78,11 +92,35 @@ export const ResponseOptionsTab = (props: any) => { return url ? (selectedTab === "codesnippet" ? "code-snippet-icon code-snippet-icon-clicked" : "code-snippet-icon") : "code-snippet-icon-disabled"; }; - function onSelectTab() { - if (url) { - setSelectedTab("codesnippet"); + function onSelectTab(opt: string) { + setSelectedTab(opt); + setCodeMenuShow(false); + } + + function isDisabled(opt: string) { + if (opt === "codesnippet" && url) { + return false; + } + + if (opt === "codetype" && url ) { //&& !response.isError && isJson(response.responseData)) { + return false; + } + + return true; + } + + function isJson(response: any) { + try { + if (response) { + JSON.parse(response); + return true; + } + return false; + } catch { + return false; } } + function getResponseOptions(): { name: string; value: string; }[] { return props.isCurl ? curlResponseOptions : responseOptions; } @@ -147,14 +185,23 @@ export const ResponseOptionsTab = (props: any) => { <> }
- -
- setShowMenu(e)} /> - {menuShow && (
- - {!props.isCurl && } +
+
+ + {codeMenuShow && (
+ + +
+ )} +
+
+ {getColFolDotMenu("res-menu", "Menu", "hamburger-menu", (e) => { e.stopPropagation(); e.preventDefault(); }, (e) => setShowMenu(e))} + {menuShow && (
+ + {!props.isCurl && } +
+ )}
- )}
diff --git a/src/fetch-client-ui/components/ResponseUI/OptionsPanel/OptionTab/style.css b/src/fetch-client-ui/components/ResponseUI/OptionsPanel/OptionTab/style.css index dfc9c7e..0f851fb 100644 --- a/src/fetch-client-ui/components/ResponseUI/OptionsPanel/OptionTab/style.css +++ b/src/fetch-client-ui/components/ResponseUI/OptionsPanel/OptionTab/style.css @@ -1,30 +1,34 @@ .response-params-panel { - float: right; - margin-left: auto; - display: flex; - width: auto; + float : right; + margin-left : auto; + display : flex; + width : auto; justify-content: space-around; } .response-params { - color: #4bb543; - padding: 0 10px; + color : #4bb543; + padding : 0 10px; font-weight: bolder; } .response-params-panel-vertical { - display: flex; - margin: 5px; + display : flex; + margin : 5px; padding-bottom: 20px; } .menu-panel { margin-left: auto !important; + padding-top: 4px; } .code-snippet-icon, .code-snippet-icon-disabled { - cursor: pointer; + cursor : pointer; + transform : scale(1.2); + margin-right: 5px; + } .code-snippet-icon path { @@ -32,9 +36,9 @@ } .res-menu { - margin-left: 10px; - cursor: pointer; - width: 16px; + margin-left : 10px; + cursor : pointer; + width : 16px; margin-bottom: 3px; } @@ -50,9 +54,9 @@ .save-to-file-button[disabled], .save-to-file-button:disabled:hover, .save-to-file-button[disabled]:hover { - color: #666; - cursor: not-allowed; - background-color: lightgrey; + color : #666; + cursor : not-allowed; + background-color: lightgrey; } .save-to-file-button:hover { @@ -69,4 +73,8 @@ .res-drop-down-menu { width: 175px !important; +} + +.res-code-drop-down-menu { + width: 125px !important; } \ No newline at end of file diff --git a/src/fetch-client-ui/components/ResponseUI/OptionsPanel/Options/Response/index.tsx b/src/fetch-client-ui/components/ResponseUI/OptionsPanel/Options/Response/index.tsx index 975f329..cfee019 100644 --- a/src/fetch-client-ui/components/ResponseUI/OptionsPanel/Options/Response/index.tsx +++ b/src/fetch-client-ui/components/ResponseUI/OptionsPanel/Options/Response/index.tsx @@ -18,20 +18,22 @@ import "./style.css"; export const ResponseSection = (props: any) => { const { response, loading } = useSelector((state: IRootState) => state.responseData); - const { theme, horizontalLayout } = useSelector((state: IRootState) => state.uiData); + const { horizontalLayout } = useSelector((state: IRootState) => state.uiData); const [viewType, setType] = useState("raw"); const [fullScreenMode, setFullScreenMode] = useState(false); + const [wordWrap, setWordWrap] = useState(false); - const editor = useMemo(() => { + const editor = useMemo(() => { return ; - }, [response.responseData]); + }, [response.responseData, wordWrap]); function onDownloadFile() { @@ -128,11 +130,19 @@ export const ResponseSection = (props: any) => { } function getPreviewHeaderSection() { - return (
+ return (
{isPreViewVisible() &&
+
} + {menuSection()} +
); + } + + function menuSection() { + return (
+
); } @@ -172,9 +182,9 @@ export const ResponseSection = (props: any) => { {editor}
- {response.responseType?.format === "json" && } + {response.responseType?.format === "json" && } {response.responseType?.format === "html" && } - {response.responseType?.format === "xml" && } + {response.responseType?.format === "xml" && }
{ fullScreenMode ? @@ -204,7 +214,8 @@ export const ResponseSection = (props: any) => { getMaxSizeResponseSection() : <> - {isPreViewVisible() && getPreviewHeaderSection()} + {getPreviewHeaderSection()} + {getResponseSection()} : diff --git a/src/fetch-client-ui/components/ResponseUI/OptionsPanel/Options/Response/style.css b/src/fetch-client-ui/components/ResponseUI/OptionsPanel/Options/Response/style.css index 9b63eb9..6d9f6d0 100644 --- a/src/fetch-client-ui/components/ResponseUI/OptionsPanel/Options/Response/style.css +++ b/src/fetch-client-ui/components/ResponseUI/OptionsPanel/Options/Response/style.css @@ -88,7 +88,7 @@ .res-not-support-download { margin-top: 10px; - width : auto; + width : auto !important; } .cancel-button-panel { @@ -127,7 +127,8 @@ color: var(--button-hover-color); } -.toggle { +.toggle, +.word-wrap-button { box-sizing : border-box; font-size : 0; display : flex; @@ -224,4 +225,13 @@ .fullscreen-btn-invisible { visibility: hidden; +} + +.word-wrap-button { + margin-left: auto; + order : 2; +} + +.res-prev-header { + display: flex; } \ No newline at end of file diff --git a/src/fetch-client-ui/components/ResponseUI/ResponsePanel/index.tsx b/src/fetch-client-ui/components/ResponseUI/ResponsePanel/index.tsx index 767c9ac..5351f6c 100644 --- a/src/fetch-client-ui/components/ResponseUI/ResponsePanel/index.tsx +++ b/src/fetch-client-ui/components/ResponseUI/ResponsePanel/index.tsx @@ -2,6 +2,7 @@ import React, { useEffect } from 'react'; import { useState } from "react"; import { useSelector } from 'react-redux'; import { IRootState } from '../../../reducer/combineReducer'; +import TypesGenerator from '../..//Common/TypesGenerator'; import { NotesEditor } from '../../Common/NotesEditor'; import { TestResult } from '../../TestUI/TestResult'; import { ResponseCookies } from "../OptionsPanel/Options/Cookies"; @@ -24,7 +25,7 @@ export const ReponsePanel = (props: ResponsePanelProps) => { const CodeSnippetGenerator = React.lazy(() => import('../../Common/CodeGenerator')); - const renderOptionsUI = (tab: string) => { + const renderOptionsUI = (tab: string) => { switch (tab) { case 'headers': return ; @@ -34,6 +35,8 @@ export const ReponsePanel = (props: ResponsePanelProps) => { return ; case 'codesnippet': return loading...
}>; + case 'codetype': + return loading...
}>; case 'notes': return ; default: @@ -53,7 +56,7 @@ export const ReponsePanel = (props: ResponsePanelProps) => {
- +
{renderOptionsUI(selectedTab)}
diff --git a/src/fetch-client-ui/components/SideBar/Collection/index.tsx b/src/fetch-client-ui/components/SideBar/Collection/index.tsx index f4807ba..83a6e45 100644 --- a/src/fetch-client-ui/components/SideBar/Collection/index.tsx +++ b/src/fetch-client-ui/components/SideBar/Collection/index.tsx @@ -13,15 +13,22 @@ import { InitialState } from "../../RequestUI/redux/reducer"; import "./style.css"; import { SettingsType } from "../../Collection/consts"; import { InitialSettings } from "../redux/reducer"; +import { getColFolDotMenu, getPlusIconSVG } from "../../Common/icons"; export interface ICollectionProps { filterCondition: string; isLoading: boolean; + selectedItem: { + colId: string; + foldId: string; + itemId: string; + } } export const CollectionBar = (props: ICollectionProps) => { const { collections, variable } = useSelector((state: IRootState) => state.sideBarData); + const { theme } = useSelector((state: IRootState) => state.uiData); const [selectedItem, setSelectedItem] = useState(""); @@ -64,6 +71,15 @@ export const CollectionBar = (props: ICollectionProps) => { } }); + document.addEventListener("keydown", function (e) { + e.preventDefault(); + e.stopPropagation(); + if (e.key === 'Escape' && (refIndex.current || refHeadIndex.current)) { + setCurrentIndex(""); + setCurrentHeadIndex(""); + } + }); + return () => { document.removeEventListener("mousedown", handleClickOutside, false); }; @@ -229,17 +245,21 @@ export const CollectionBar = (props: ICollectionProps) => { function onClickHistory(evt: React.MouseEvent, colId: string, folderId: string, itemId: string, name: string, variableId: string) { evt.preventDefault(); evt.stopPropagation(); - setSelectedItem(itemId); - vscode.postMessage({ type: requestTypes.openHistoryItemRequest, data: { colId: colId, folderId: folderId, id: itemId, name: name, varId: variableId } }); + openItem(colId, folderId, itemId, name, variableId, evt.ctrlKey ? true : false); } - function hasData(history: IHistory): boolean { - return history && (history.name?.toLowerCase().includes(props.filterCondition) - || history.url?.toLowerCase().includes(props.filterCondition) - || history.method?.toLowerCase().includes(props.filterCondition) - || history.createdTime?.toLowerCase().includes(props.filterCondition)); + function onClickNewTab(evt: React.MouseEvent, colId: string, folderId: string, itemId: string, name: string, variableId: string) { + evt.preventDefault(); + evt.stopPropagation(); + openItem(colId, folderId, itemId, name, variableId, true); + setCurrentIndex(""); + setCurrentHeadIndex(""); } + function openItem(colId: string, folderId: string, itemId: string, name: string, variableId: string, isNewTab: boolean) { + setSelectedItem(itemId); + vscode.postMessage({ type: requestTypes.openHistoryItemRequest, data: { colId: colId, folderId: folderId, id: itemId, name: name, varId: variableId, isNewTab: isNewTab } }); + } function findData(source: any, dest: any) { let folders = source.data.filter((item: any) => item.data !== undefined); @@ -317,7 +337,7 @@ export const CollectionBar = (props: ICollectionProps) => { setCurrentHeadIndex(""); } - function addNewRequest(evt: React.MouseEvent, colId: string, folderId: string) { + function addNewRequest(evt: React.MouseEvent | React.MouseEvent, colId: string, folderId: string) { evt.preventDefault(); evt.stopPropagation(); let newReq: IRequestModel = InitialState; @@ -369,17 +389,55 @@ export const CollectionBar = (props: ICollectionProps) => { return paddingStyle as React.CSSProperties; } + useEffect(() => { + setSelectedItem(props.selectedItem.itemId); + if (props.selectedItem.foldId) { + let ele = document.getElementById("folder-" + props.selectedItem.foldId); + if (ele) { + ele.setAttribute("open", "true"); + } + } + + if (props.selectedItem.colId) { + let ele = document.getElementById("collections-" + props.selectedItem.colId); + if (ele) { + ele.setAttribute("open", "true"); + } + } + + if (props.selectedItem.itemId) { + let itemElement = document.getElementById("col-activity-item-" + props.selectedItem.itemId); + let srollPanel = document.querySelector(".activity-items-panel"); + if (itemElement && srollPanel) { + srollPanel.scroll(0, itemElement.offsetTop - 130); + } + } + }, [props.selectedItem]); + + function getThemeColor() { + if (theme === 1) { + return "light-theme-boder"; + } + + return "dark-theme-boder"; + } + function getFolderItems(cols: ICollections, item: IFolder, variableId: string, level: number) { return ( -
+
onColRightClick(e, item.id)}> - {item.name} -
moreHeadMenuWrapperRef.current[item.id] = el}> - openMoreMenu(e, item.id)} /> +
{item.name}
+
moreHeadMenuWrapperRef.current[item.id] = el}> + {getPlusIconSVG("New Request", "add-req-button", (e) => { e.stopPropagation(); e.preventDefault(); }, (e) => addNewRequest(e, cols.id, item.id))} + {getColFolDotMenu("three-dots-" + item.id, "Folder Menu", "col-fol-icon", (e) => { e.stopPropagation(); e.preventDefault(); }, (e) => openMoreMenu(e, item.id))}
- - +
{ e.stopPropagation(); e.preventDefault(); }} onContextMenu={(e) => { e.stopPropagation(); e.preventDefault(); }}> New +
+ + +
+
@@ -406,7 +464,7 @@ export const CollectionBar = (props: ICollectionProps) => { { item.data && item.data.length > 0 && item.data.map((listItem) => { if (!isFolder(listItem)) { - return (
onItemRightClick(e, listItem.id, true)} onClick={(e) => onClickHistory(e, cols.id, item.id, listItem.id, listItem.name, variableId)}> + return (
onItemRightClick(e, listItem.id, true)} onClick={(e) => onClickHistory(e, cols.id, item.id, listItem.id, listItem.name, variableId)}>
@@ -415,7 +473,7 @@ export const CollectionBar = (props: ICollectionProps) => {
moreMenuWrapperRef.current[listItem.id] = el}> - openMoreMenu(e, listItem.id, true)} /> + { e.stopPropagation(); e.preventDefault(); }} onClick={(e) => openMoreMenu(e, listItem.id, true)} />
@@ -439,15 +497,20 @@ export const CollectionBar = (props: ICollectionProps) => { function getCollectionItems(item: ICollections, index: number) { return ( -
+
onColRightClick(e, item.id)} > - {item.name} -
moreHeadMenuWrapperRef.current[item.id] = el}> - openMoreMenu(e, item.id)} /> +
{item.name}
+
moreHeadMenuWrapperRef.current[item.id] = el}> + {getPlusIconSVG("New Request", "add-req-button", (e) => { e.stopPropagation(); e.preventDefault(); }, (e) => addNewRequest(e, item.id, ""))} + {getColFolDotMenu("three-dots-" + item.id, "collection Menu", "col-fol-icon", (e) => { e.stopPropagation(); e.preventDefault(); }, (e) => openMoreMenu(e, item.id))}
- - +
{ e.stopPropagation(); e.preventDefault(); }} onContextMenu={(e) => { e.stopPropagation(); e.preventDefault(); }}> New +
+ + +
+
{index !== 0 &&
} @@ -479,7 +542,7 @@ export const CollectionBar = (props: ICollectionProps) => { item.data && item.data.length > 0 && item.data.map((listItem) => { if (!isFolder(listItem)) { return ( -
onItemRightClick(e, listItem.id, true)} onClick={(e) => onClickHistory(e, item.id, "", listItem.id, listItem.name, item.variableId)}> +
onItemRightClick(e, listItem.id, true)} onClick={(e) => onClickHistory(e, item.id, "", listItem.id, listItem.name, item.variableId)}>
@@ -488,9 +551,11 @@ export const CollectionBar = (props: ICollectionProps) => {
moreMenuWrapperRef.current[listItem.id] = el}> - openMoreMenu(e, listItem.id, true)} /> + { e.stopPropagation(); e.preventDefault(); }} onClick={(e) => openMoreMenu(e, listItem.id, true)} />
+ +
diff --git a/src/fetch-client-ui/components/SideBar/Collection/style.css b/src/fetch-client-ui/components/SideBar/Collection/style.css index 92ba376..e204346 100644 --- a/src/fetch-client-ui/components/SideBar/Collection/style.css +++ b/src/fetch-client-ui/components/SideBar/Collection/style.css @@ -35,22 +35,31 @@ details[open] summary { display: block; } +.collection-items { + padding-right: 0 !important; + min-width : 220px; +} + +.folder-items { + padding-right: 0 !important; +} + .divider { border-top: 0.3pt solid var(--border-color); - margin : 1px 14px 1px 14px; + margin : 1px 12px 1px 12px; opacity : .6; } details.folder-details-items>summary { list-style : none; - padding-left : var(--pl); + padding-left : var(--pl); background-color: transparent !important; } details.folder-details-items>summary:before { - content : "🗀"; - padding-left : var(--b-pl); - color : var(--text-color); + content : "🗀"; + padding-left: var(--b-pl); + color : var(--text-color); } details[open].folder-details-items>summary:before { @@ -60,4 +69,81 @@ details[open].folder-details-items>summary:before { details.folder-details-items>summary:hover { background-color: var(--list-hover-background-color) !important; +} + +.add-req-button { + color : currentColor; + fill : currentColor; + transform : scale(0.70); + color : currentColor; + margin-right: 5px; + padding : 0 3px 0 3px; + filter : contrast(0.50); +} + +.add-req-button:hover { + background-color: var(--list-hover-background-color) !important; + border-radius : 3px; + filter : none; +} + +.col-fol-title { + width : 70%; + display: inline-flex; +} + +.col-fol-icon-panel { + margin-left: 2px; + text-align : right; +} + +.col-fol-icon { + transform: scale(0.75); + padding : 0 3px 0 3px; +} + +.col-fol-icon:hover { + background-color: var(--list-hover-background-color); + border-radius : 3px; +} + +details, +details:hover, +details:focus, +details :focus-visible, +details:focus-within, +summary, +summary:hover, +summary:focus, +summary :focus-visible, +summary:focus-within { + outline: none; +} + +.sub-menu { + display: none; +} + +.parent-menu:hover .sub-menu { + display: block; + left : -88px; + width : 90px !important; + top : 0; +} + +.parent-menu { + padding : 5px 10px; + text-decoration : none; + cursor : pointer; + background-color: var(--background-color); + color : var(--text-color); + outline : none; + border : 3px solid transparent; + border-radius : 0; + text-align : left; +} + +.parent-menu:hover { + background-color: var(--button-hover-color); + color : var(--button-text-color); } \ No newline at end of file diff --git a/src/fetch-client-ui/components/SideBar/History/index.tsx b/src/fetch-client-ui/components/SideBar/History/index.tsx index ef31cd7..9c25642 100644 --- a/src/fetch-client-ui/components/SideBar/History/index.tsx +++ b/src/fetch-client-ui/components/SideBar/History/index.tsx @@ -11,10 +11,14 @@ import "./style.css"; export interface IHistoryProps { filterCondition: string; isLoading: boolean; + selectedItem: { + itemId: string; + } } export const HistoryBar = (props: IHistoryProps) => { + const { theme } = useSelector((state: IRootState) => state.uiData); const { history } = useSelector((state: IRootState) => state.sideBarData); const [ddPosition, setPosition] = useState(""); @@ -23,6 +27,10 @@ export const HistoryBar = (props: IHistoryProps) => { const [currentIndex, _setCurrentIndex] = useState(-1); + useEffect(() => { + setSelectedItem(props.selectedItem.itemId); + }, [props.selectedItem]); + const refIndex = useRef(currentIndex); const setCurrentIndex = (data: number) => { refIndex.current = data; @@ -91,8 +99,19 @@ export const HistoryBar = (props: IHistoryProps) => { function onClickHistory(evt: React.MouseEvent, id: string, name: string) { evt.preventDefault(); evt.stopPropagation(); + openItem(id, name, evt.ctrlKey ? true : false); + } + + function onClickNewTab(evt: React.MouseEvent, id: string, name: string) { + evt.preventDefault(); + evt.stopPropagation(); + openItem(id, name, true); + setCurrentIndex(-1); + } + + function openItem(id: string, name: string, isNewTab: boolean) { setSelectedItem(id); - vscode.postMessage({ type: requestTypes.openHistoryItemRequest, data: { id: id, name: name } }); + vscode.postMessage({ type: requestTypes.openHistoryItemRequest, data: { id: id, name: name, isNewTab: isNewTab } }); } function onItemRightClick(e: any, index: number) { @@ -122,9 +141,17 @@ export const HistoryBar = (props: IHistoryProps) => { } } + function getThemeColor() { + if (theme === 1) { + return "light-theme-boder"; + } + + return "dark-theme-boder"; + } + function getHistoryItems(history: IHistory, index: number) { return ( -
onItemRightClick(e, index)} onClick={(e) => onClickHistory(e, history.id, history.name)}> +
onItemRightClick(e, index)} onClick={(e) => onClickHistory(e, history.id, history.name)}>
@@ -135,6 +162,8 @@ export const HistoryBar = (props: IHistoryProps) => { openMoreMenu(e, index)} />
+ +
diff --git a/src/fetch-client-ui/components/SideBar/Variables/index.tsx b/src/fetch-client-ui/components/SideBar/Variables/index.tsx index a0a95ec..676befa 100644 --- a/src/fetch-client-ui/components/SideBar/Variables/index.tsx +++ b/src/fetch-client-ui/components/SideBar/Variables/index.tsx @@ -7,7 +7,6 @@ import { IVariable } from "../redux/types"; import vscode from "../../Common/vscodeAPI"; import { requestTypes } from "../../../../utils/configuration"; import "./style.css"; -import { formatDate } from "../../../../utils/helper"; export interface IVariableProps { filterCondition: string; diff --git a/src/fetch-client-ui/components/SideBar/index.tsx b/src/fetch-client-ui/components/SideBar/index.tsx index f094d74..6624f86 100644 --- a/src/fetch-client-ui/components/SideBar/index.tsx +++ b/src/fetch-client-ui/components/SideBar/index.tsx @@ -1,14 +1,15 @@ -import React, { useEffect, useRef, useState } from "react"; -import { ReactComponent as MenuLogo } from '../../../../icons/menu.svg'; -import { useDispatch } from "react-redux"; -import { requestTypes, responseTypes } from "../../../utils/configuration"; -import vscode from "../Common/vscodeAPI"; import { CollectionBar } from "./Collection"; +import { getColFolDotMenu } from "../Common/icons"; import { HistoryBar } from "./History"; -import { SideBarActions } from "./redux"; import { ICollections, IHistory, IVariable } from "./redux/types"; -import "./style.css"; +import { pubSubTypes, requestTypes, responseTypes } from "../../../utils/configuration"; +import { SideBarActions } from "./redux"; +import { UIActions } from "../MainUI/redux"; +import { useDispatch } from "react-redux"; import { VariableSection } from "./Variables"; +import React, { useEffect, useRef, useState } from "react"; +import vscode from "../Common/vscodeAPI"; +import "./style.css"; const SideBar = () => { @@ -21,6 +22,8 @@ const SideBar = () => { const [isHisLoading, setHisLoading] = useState(true); const [isColLoading, setColLoading] = useState(true); const [isVarLoading, setVarLoading] = useState(true); + const [isViewLogOpen, setViewLogOpen] = useState(false); + const [selectedItem, setSelectedItem] = useState({ colId: "", foldId: "", itemId: "", }); const wrapperRef = useRef(null); @@ -118,7 +121,7 @@ const SideBar = () => { dispatch(SideBarActions.SetRenameVariableAction(event.data.params.id, event.data.params.name)); } else if (event.data && event.data.type === responseTypes.deleteVariableResponse) { dispatch(SideBarActions.SetDeleteVariablection(event.data.id)); - vscode.postMessage({ type: requestTypes.getAllCollectionsRequest }); + vscode.postMessage({ type: requestTypes.removeVariableFromColRequest, data: { varId: event.data.id } }); } else if (event.data && event.data.type === responseTypes.appendToVariableResponse) { dispatch(SideBarActions.SetNewVariableAction(event.data.collection as IVariable)); } else if (event.data && event.data.type === responseTypes.attachVariableResponse) { @@ -132,9 +135,20 @@ const SideBar = () => { vscode.postMessage({ type: requestTypes.openHistoryItemRequest, data: { colId: event.data.id, folderId: event.data.folderId, id: event.data.item.id, name: event.data.item.name, varId: event.data.variableId } }); } else if (event.data && event.data.type === responseTypes.createNewFolderResponse) { dispatch(SideBarActions.SetFolderToCollectionAction(event.data.folder, event.data.colId, event.data.folderId)); + } else if (event.data && event.data.type === requestTypes.selectItemRequest) { + setSelectedItem({ + colId: event.data.colId, + foldId: event.data.folId, + itemId: event.data.id + }); + } else if (event.data && event.data.type === responseTypes.themeResponse) { + dispatch(UIActions.SetThemeAction(event.data.theme)); + } else if (event.data && event.data.type === pubSubTypes.themeChanged) { + vscode.postMessage({ type: requestTypes.themeRequest }); } }); + vscode.postMessage({ type: requestTypes.themeRequest }); vscode.postMessage({ type: requestTypes.getAllHistoryRequest }); setTimeout(() => { @@ -176,6 +190,11 @@ const SideBar = () => { setFilterCondition(e.target.value); } + function onViewLogClick(e: any) { + setViewLogOpen(!isViewLogOpen); + vscode.postMessage({ type: requestTypes.viewLogRequest }); + } + function getBody() { return (
@@ -186,7 +205,7 @@ const SideBar = () => { placeholder={selectedTab === "History" ? "filter history" : selectedTab === "Collection" ? "filter collection" : "filter variable"} onChange={onFilterChange} />
- setShowMenu(e)} /> + {getColFolDotMenu("hamburger-menu", "Menu", "hamburger-menu", (e) => { e.stopPropagation(); e.preventDefault(); }, (e) => setShowMenu(e))} {menuShow && (
{selectedTab === "History" ? getHistoryMenuItems() : selectedTab === "Collection" ? getCollectionsMenuItems() : getVariableMenuItems()}
)} @@ -196,14 +215,23 @@ const SideBar = () => { { selectedTab === "History" ? - + : selectedTab === "Collection" ? - + : }
+
); } diff --git a/src/fetch-client-ui/components/SideBar/style.css b/src/fetch-client-ui/components/SideBar/style.css index 41e36d8..41aa88a 100644 --- a/src/fetch-client-ui/components/SideBar/style.css +++ b/src/fetch-client-ui/components/SideBar/style.css @@ -14,11 +14,11 @@ .sidebar-panel-tabs { display : flex; justify-content: space-around; - border-bottom : 1px solid #555; + border-bottom : 1px solid var(--vscode-sideBarSectionHeader-border); } .sidebar-panel { - height : calc(100vh - 130px); + height : calc(100vh - 131px); width : 100%; display: block; padding: 0; @@ -30,22 +30,28 @@ } .activity-items-panel { - height : calc(100% - 2px); + height : calc(100% - 30px); overflow-y: auto; overflow-x: hidden; cursor : pointer; } -.activity-items, -.folder-activity-items { - padding : 0 5px 5px; +.activity-items { + padding: 0 5px 5px; + cursor : pointer; +} + +.dark-theme-boder { border-bottom: 0.25px solid #343434; - cursor : pointer; } +.light-theme-boder { + border-bottom: 0.25px solid #cbcbcb; +} + + .folder-activity-items { padding-left: var(--fpl) !important; - /* 15px !important; */ } .activity-items:hover, @@ -199,10 +205,20 @@ } .more-icon { - float : right; - padding-right: 5px; - font-size : large; - display : none; + float : right; + display : none; + /* padding-top: 2px; */ +} + +.plus-icon { + height : 14px; + width : 14px; + fill : currentColor; + stroke : currentColor; + stroke : currentcolor; + stroke-linecap : round; + stroke-linejoin: round; + stroke-width : 1.5; } .activity-items:hover .more-icon { @@ -220,10 +236,9 @@ .dropdown-more { position : absolute; - width : 150px; + width : 140px; box-shadow : 10px 8px 16px 0px rgba(0, 0, 0, 0.4); z-index : 1; - /* border-radius: 5px; */ color : var(--text-color); background-color: var(--background-color); border : 1px solid var(--border-color); @@ -271,5 +286,33 @@ } .selected-item { - border-left: 3px solid var(--button-background-color); + border-left : 3px solid var(--button-background-color); + background-color: var(--list-hover-background-color); +} + +.bottom-menu-panel { + padding : 5px; + height : 20px; + background-color: var(--vscode-dropdown-border); +} + +.view-log { + align-items : center; + flex-direction : row; + cursor : pointer; + display : flex; + justify-content: center; + color : var(--text-color); +} + +.log-span { + font-size: 13px; +} + +.view-log:hover { + color: var(--vscode-textLink-activeForeground); +} + +.log-icon { + transform: scale(0.3); } \ No newline at end of file diff --git a/src/fetch-client-ui/components/TestUI/TestPanel/consts.ts b/src/fetch-client-ui/components/TestUI/TestPanel/consts.ts index f855857..8b935c7 100644 --- a/src/fetch-client-ui/components/TestUI/TestPanel/consts.ts +++ b/src/fetch-client-ui/components/TestUI/TestPanel/consts.ts @@ -5,6 +5,7 @@ export const ActionsParametersMapping = { { name: "equal", value: "equal" }, { name: "notEqual", value: "notEqual" }, { name: "contains", value: "contains" }, + { name: "regex", value: "regex" }, ] }, "Content-Length": { @@ -12,6 +13,7 @@ export const ActionsParametersMapping = { { name: "select", value: "", }, { name: "equal", value: "equal" }, { name: "notEqual", value: "notEqual" }, + { name: "regex", value: "regex" }, ] }, "Content-Encoding": { @@ -19,6 +21,7 @@ export const ActionsParametersMapping = { { name: "select", value: "", }, { name: "equal", value: "equal" }, { name: "notEqual", value: "notEqual" }, + { name: "regex", value: "regex" }, ] }, "Header": { @@ -28,6 +31,7 @@ export const ActionsParametersMapping = { { name: "notEqual", value: "notEqual" }, { name: "contains", value: "contains" }, { name: "type", value: "type" }, + { name: "regex", value: "regex" }, ] }, "Response Code": { @@ -39,14 +43,17 @@ export const ActionsParametersMapping = { { name: "<=", value: "<=" }, { name: ">", value: ">" }, { name: ">=", value: ">=" }, + { name: "regex", value: "regex" }, ] }, "Response Body": { "action": [ { name: "select", value: "", }, + { name: "isJSON", value: "isJSON" }, { name: "equal", value: "equal" }, { name: "notEqual", value: "notEqual" }, { name: "contains", value: "contains" }, + { name: "regex", value: "regex" }, ] }, "Response Time": { @@ -70,8 +77,10 @@ export const ActionsParametersMapping = { { name: ">", value: ">" }, { name: ">=", value: ">=" }, { name: "contains", value: "contains" }, + { name: "notContains", value: "notContains" }, { name: "length", value: "length" }, { name: "type", value: "type" }, + { name: "regex", value: "regex" }, ] }, }; @@ -85,6 +94,7 @@ export const ParametersModelMapping = { "Content-Encoding": "headers.Content-Encoding", "Header": "headers.[specific]", "JSON": "responseData.[specific]", + "Variable": "variable" }; export const TestCaseParameters = [ diff --git a/src/fetch-client-ui/components/TestUI/TestPanel/helper.ts b/src/fetch-client-ui/components/TestUI/TestPanel/helper.ts index 705bf24..6330d05 100644 --- a/src/fetch-client-ui/components/TestUI/TestPanel/helper.ts +++ b/src/fetch-client-ui/components/TestUI/TestPanel/helper.ts @@ -91,7 +91,7 @@ export function executeTests(testData: ITest[], responseValue: IReponseModel, va let varData = {}; let tests: ITest[]; - if (variableData.length > 0) { + if (variableData?.length > 0) { variableData.forEach(item => { varData[item.key] = item.value; }); @@ -107,6 +107,18 @@ export function executeTests(testData: ITest[], responseValue: IReponseModel, va continue; } + if (tests[i].parameter === "noCondition") { + let testResult: ITestResult = { + test: tests[i].parameter, + actualValue: "", + result: true + }; + + testResults.push(testResult); + + continue; + } + let mapping = ParametersModelMapping[tests[i].parameter]; if (mapping === "") { continue; @@ -126,6 +138,9 @@ export function executeTests(testData: ITest[], responseValue: IReponseModel, va responseData = ""; } actualValue = findValueInResponse(responseData, mapping.replace("responseData.", "")); + } else if (mapping.includes("variable")) { + let item = variableData?.find(t => t.key === tests[i].expectedValue.replace("{{", "").replace("}}", "").trim()); + actualValue = item?.value; } else { actualValue = findHeader(responseValue.headers, mapping.replace("headers.", "")); } @@ -158,10 +173,15 @@ function getLinkedWord(action: string) { if (action === "type" || action === "length") { return action + " is "; } + if (action === "contains") { return "contains "; } + if (action === "regex") { + return " match with regex "; + } + return action + " to "; } @@ -172,7 +192,9 @@ function executeTestCase(action: string, actualValue: string | number | undefine case "notEqual": return actualValue != expectedValue; case "contains": - return (actualValue.toString()).includes(expectedValue.toString()); + return (actualValue?.toString()).includes(expectedValue?.toString()); + case "notContains": + return !((actualValue?.toString()).includes(expectedValue?.toString())); case "<": return actualValue < expectedValue; case "<=": @@ -184,12 +206,34 @@ function executeTestCase(action: string, actualValue: string | number | undefine case "length": return actualValue == expectedValue; case "type": - return actualValue == (expectedValue.toString().trim().toLocaleLowerCase() === "undefined" ? undefined : expectedValue); + return actualValue == (expectedValue?.toString().trim().toLocaleLowerCase() === "undefined" ? undefined : expectedValue); + case "isJSON": + return isJson(actualValue) === (expectedValue ? expectedValue : "true"); + case "regex": + return checkRegexMatch(expectedValue?.toString(), actualValue); + case "empty": + return actualValue === "" || actualValue === null || actualValue === undefined; + case "notEmpty": + return actualValue !== "" && actualValue !== null && actualValue !== undefined; } return false; } +function checkRegexMatch(regex: string, value: string | number | undefined | null): boolean { + if (!regex) { + return false; + } + + try { + value = value ? value.toString() : ""; + let re = new RegExp(regex, "gm"); + return re.test(value); + } catch { + return false; + } + +} function findHeader(headers: ITableData[], headerValue: string): string { try { @@ -231,9 +275,20 @@ function findValueInResponse(responseValue: any, path: string) { export function replaceTestWithVariable(tests: ITest[], varData: any): ITest[] { tests.forEach(test => { - test.customParameter = replaceDataWithVariable(test.customParameter, varData); - test.expectedValue = replaceDataWithVariable(test.expectedValue, varData); + if (test.parameter !== "Variable") { + test.customParameter = replaceDataWithVariable(test.customParameter, varData); + test.expectedValue = replaceDataWithVariable(test.expectedValue, varData); + } }); return tests; +} + +export function isJson(str: any): string { + try { + JSON.parse(str); + } catch (e) { + return "false"; + } + return "true"; } \ No newline at end of file diff --git a/src/fetch-client-ui/components/TestUI/TestResult/index.tsx b/src/fetch-client-ui/components/TestUI/TestResult/index.tsx index 931e6a7..de3e8f9 100644 --- a/src/fetch-client-ui/components/TestUI/TestResult/index.tsx +++ b/src/fetch-client-ui/components/TestUI/TestResult/index.tsx @@ -21,7 +21,7 @@ export const TestResult = () => {
- {row.actualValue} + {row.actualValue?.length > 50 ? showMoreContent(row.actualValue) : row.actualValue}
@@ -31,6 +31,32 @@ export const TestResult = () => { ); }; + function showMoreContent(value: string) { + return ( + <> +
+ {value} +
+ + + ); + } + + function onShowMoreClick(e: React.MouseEvent) { + e.preventDefault(); + e.stopPropagation(); + + if (e.currentTarget.innerText === "Show More") { + e.currentTarget.previousElementSibling.classList.remove("short-content"); + e.currentTarget.innerHTML = "Show Less"; + } else { + e.currentTarget.previousElementSibling.classList.add("short-content"); + e.currentTarget.innerHTML = "Show More"; + } + } + const makeTable = (data: ITestResult[]) => { return ( data.map((item: ITestResult, index: number) => { @@ -44,18 +70,27 @@ export const TestResult = () => { { testResults.length > 0 && response.status !== 0 ? - - - - - - - - - - {makeTable(testResults)} - -
TestActual ValueResult
+ <> + + Total : {testResults.length} + Passed : {testResults.filter(i => i.result === true).length} + Failed : {testResults.filter(i => i.result === false).length} + +
+ + + + + + + + + + {makeTable(testResults)} + +
TestActual ValueResult
+
+ : <>
diff --git a/src/fetch-client-ui/components/TestUI/TestResult/style.css b/src/fetch-client-ui/components/TestUI/TestResult/style.css index 2470f4c..6b646b6 100644 --- a/src/fetch-client-ui/components/TestUI/TestResult/style.css +++ b/src/fetch-client-ui/components/TestUI/TestResult/style.css @@ -25,7 +25,7 @@ tr { } tbody>tr:hover { - background-color: var(--input-hover); + background-color: var(--list-hover-background-color); } .test-result-table-input { @@ -77,4 +77,42 @@ tbody>tr:hover { .fail { background-color: rgb(240, 22, 22); color : var(--button-text-color); +} + +.short-content { + height : 50px; + overflow : hidden; + text-overflow: ellipsis; + margin-bottom: 10px; +} + +.show-more-btn { + background : transparent; + border : 0; + color : var(--button-background-color); + text-align : center; + float : right; + margin-bottom: 2px; + cursor : pointer; +} + +.show-more-btn:hover { + color: var(--button-hover-color); +} + +.test-result-title { + font-size: 14px; + display : block; + margin : 5px 10px 5px 0; + padding : 5px 10px 5px 0; +} + +.test-result-title-panel { + display : flex; + font-weight: 400; +} + +.test-result-panel { + padding-right : 5px; + padding-bottom: 5px; } \ No newline at end of file diff --git a/src/fetch-client-ui/components/Variables/index.tsx b/src/fetch-client-ui/components/Variables/index.tsx index 238590a..f3c8a10 100644 --- a/src/fetch-client-ui/components/Variables/index.tsx +++ b/src/fetch-client-ui/components/Variables/index.tsx @@ -38,11 +38,13 @@ const Variables = (props: IVariableProps) => { } setVariableItem({ ...variableItem, data: localTable }); + setDone(false); } function onRowUpdate(event: React.ChangeEvent, index: number, isKey: boolean = true) { let localTable = addValue(event.target.value, index, isKey); setVariableItem({ ...variableItem, data: localTable }); + setDone(false); } const addValue = (value: string, index: number, isKey: boolean): ITableData[] => { @@ -62,6 +64,7 @@ const Variables = (props: IVariableProps) => { let localTable = [...variableItem.data]; localTable.splice(index, 1); setVariableItem({ ...variableItem, data: localTable }); + setDone(false); } useEffect(() => { @@ -122,10 +125,6 @@ const Variables = (props: IVariableProps) => { return true; } - if (isDone) { - return true; - } - return false; } diff --git a/src/fetch-client-ui/components/Variables/style.css b/src/fetch-client-ui/components/Variables/style.css index 872337b..8e85015 100644 --- a/src/fetch-client-ui/components/Variables/style.css +++ b/src/fetch-client-ui/components/Variables/style.css @@ -1,6 +1,5 @@ .variable-panel { padding: 25px 50px; - width : 75%; margin : 0 auto; height : 91%; } @@ -13,7 +12,6 @@ .var-btn-panel { margin-top: 20px; - width : 55%; } .variable-panel-name { @@ -23,7 +21,9 @@ } .variable-text-label { - width: 55px; + width : 55px; + display : flex; + align-items: center; } .variable-text { diff --git a/src/utils/PreFetchRunner.ts b/src/utils/PreFetchRunner.ts new file mode 100644 index 0000000..e1f7578 --- /dev/null +++ b/src/utils/PreFetchRunner.ts @@ -0,0 +1,122 @@ +import { apiFetch, FetchConfig } from "./fetchUtil"; +import { executeTests, setVariable } from "../fetch-client-ui/components/TestUI/TestPanel/helper"; +import { GetParentSettingsSync, GetVariableByColId } from "./db/collectionDBUtil"; +import { GetRequestItem } from "./db/mainDBUtil"; +import { GetVariableByIdSync, UpdateVariable } from "./db/varDBUtil"; +import { InitialResponse } from "../fetch-client-ui/components/ResponseUI/redux/reducer"; +import { IPreFetch, IRequestModel } from "../fetch-client-ui/components/RequestUI/redux/types"; +import { IReponseModel } from "../fetch-client-ui/components/ResponseUI/redux/types"; +import { ISettings, IVariable } from "../fetch-client-ui/components/SideBar/redux/types"; + + +export class PreFetchRunner { + private readonly fetchConfig: FetchConfig; + private executingRequests: string[] = []; + private allow: boolean = true; + private response: IReponseModel = { + response: JSON.parse(JSON.stringify(InitialResponse)), + headers: [], + cookies: [], + loading: false, + testResults: [] + }; + public message: string = ""; + + + constructor(fetchConfig: FetchConfig, reqId: string) { + this.executingRequests.push(reqId); + this.fetchConfig = fetchConfig; + } + + RunPreRequests = async (preFetch: IPreFetch, fetchIndex: number, reqIndex: number, parentName: string) => { + let request: IRequestModel; + let parentSettings: ISettings; + let updateVariable: IVariable; + + if (!this.allow) { + return; + } + + let item = this.executingRequests.find(i => i === preFetch.requests[reqIndex].reqId); + + if (item) { + this.allow = false; + this.message = `Circular Dependency in Request ${parentName}`; + return; + } else { + this.executingRequests.push(preFetch.requests[reqIndex].reqId); + } + + for (let i = 0; i < preFetch.requests.length && this.allow; i++) { + reqIndex = i; + if (i > 0 && request?.id) { + let condition = preFetch.requests[i].condition; + for (let j = 0; j < condition.length; j++) { + if (!condition[j].parameter || !condition[j].action) { + break; + } + let testResult = executeTests(condition, this.response, updateVariable?.data); + if (testResult.findIndex(i => i.result === false) !== -1) { + this.allow = false; + this.message = `'Condition ${reqIndex}' failed in 'Pre-Request ${reqIndex}' in the Request '${parentName}'`; + return; + } + } + } + + let reqId = preFetch.requests[i].reqId; + let parentId = preFetch.requests[i].parentId; + let colId = preFetch.requests[i].colId; + + if (!reqId) { + return; + } + + let varId = await GetVariableByColId(colId); + let variable = await GetVariableByIdSync(varId); + + if (parentId === colId) { + parentSettings = await GetParentSettingsSync(colId, ""); + } else { + parentSettings = await GetParentSettingsSync(colId, parentId); + } + + request = await GetRequestItem(reqId); + + if (request && this.allow) { + if (request.preFetch?.requests?.length > 0) { + await this.RunPreRequests(request.preFetch, fetchIndex + 1, 0, request.name); + if (!this.allow) { + return; + } + let index = this.executingRequests.findIndex(i => i === reqId); + if (index !== -1) { + this.executingRequests.splice(index); + } + let res = await apiFetch(request, variable.data, parentSettings, this.fetchConfig); + this.response.response = res.response; + this.response.headers = res.headers; + this.response.cookies = res.cookies; + updateVariable = this.updateVariable(request, variable); + } else { + let res = await apiFetch(request, variable.data, parentSettings, this.fetchConfig); + this.response.response = res.response; + this.response.headers = res.headers; + this.response.cookies = res.cookies; + updateVariable = this.updateVariable(request, variable); + } + } + } + }; + + updateVariable = (request: IRequestModel, variable: IVariable): IVariable => { + if (this.response.response.status !== 0 && this.response.response.status <= 399 && request.setvar.length - 1 > 0 && variable?.id) { + let variableResult = setVariable(variable, request.setvar, this.response); + UpdateVariable(variableResult, null); + return variableResult; + } else { + return variable; + } + }; +} + diff --git a/src/utils/PubSub.ts b/src/utils/PubSub.ts new file mode 100644 index 0000000..187ea7d --- /dev/null +++ b/src/utils/PubSub.ts @@ -0,0 +1,76 @@ +export interface IPubSubMessage { + messageType: string; + message?: any; +} + +export interface Subscription { + unsubscribe(): void; +} + +export type Consumer = (value: T) => any; + +export interface Publisher { + subscribe(consumer: Consumer): Subscription; +} + +const EMPTY_SUBSCRIPTION: Subscription = { + unsubscribe: () => undefined, +}; + +export class PubSub implements Publisher { + private consumers: Map>; + + constructor() { + this.consumers = new Map>(); + } + + /** A number of subscribed consumers. */ + get size(): number { + return this.consumers.size; + } + + /** Subscribes a consumer of values. */ + subscribe(consumer: Consumer): Subscription { + if (!consumer) { + return EMPTY_SUBSCRIPTION; + } + const consumerKey = Object.create(null); + this.consumers.set(consumerKey, consumer); + return new EmitterSubscription(this.consumers, consumerKey); + } + + /** Publish a value to subscribed consumers. */ + publish(value: T) { + if (this.consumers.size === 0) { + return; + } + this.consumers.forEach((consumer) => { + consumer(value); + }); + } + + /** Removes all subscribed consumers. */ + clear() { + this.consumers.clear(); + this.consumers = new Map>(); + } +} + +class EmitterSubscription implements Subscription { + private consumers: Map> | undefined; + private consumerKey: object | undefined; + + constructor(consumers: Map>, consumerKey: object) { + this.consumers = consumers; + this.consumerKey = consumerKey; + } + + unsubscribe(): void { + if (this.consumers && this.consumerKey) { + this.consumers.delete(this.consumerKey); + } + + this.consumers = undefined; + this.consumerKey = undefined; + } +} \ No newline at end of file diff --git a/src/utils/configuration.ts b/src/utils/configuration.ts index c55f873..8fbfc98 100644 --- a/src/utils/configuration.ts +++ b/src/utils/configuration.ts @@ -1,148 +1,165 @@ export const requestTypes = { - newRequest: "newRequest", - cancelRequest: "cancelRequest", + activeVariableRequest: "activeVariableRequest", + addToCollectionsRequest: "addToCollectionsRequest", apiRequest: "apiRequest", - multipleApiRequest: "multipleApiRequest", + attachVariableRequest: "attachVariableRequest", + cancelRequest: "cancelRequest", + clearRequest: "clearRequest", configRequest: "configRequest", - layoutConfigRequest: "layoutConfigRequest", - getHistoryItemRequest: "getHistoryItemRequest", - getAllHistoryRequest: "getAllHistoryRequest", + convertCurlToJsonRequest: "convertCurlToJsonRequest", + copyItemRequest: "copyItemRequest", + copyToCollectionsRequest: "copyToCollectionsRequest", + createNewFolderRequest: "createNewFolderRequest", + createNewRequest: "createNewRequest", + deleteAllCookieRequest: "deleteAllCookieRequest", deleteAllHistoryRequest: "deleteAllHistoryRequest", - deleteHistoryRequest: "deleteHistoryRequest", - renameHistoryRequest: "renameHistoryRequest", - openHistoryItemRequest: "openHistoryItemRequest", - openExistingItemRequest: "openExistingItemRequest", - getAllCollectionNameRequest: "getAllCollectionNameRequest", - getAllCollectionsRequest: "getAllCollectionsRequest", - getCollectionsByIdRequest: "getCollectionsByIdRequest", - addToCollectionsRequest: "addToCollectionsRequest", - renameCollectionRequest: "renameCollectionRequest", - deleteCollectionRequest: "deleteCollectionRequest", - renameCollectionItemRequest: "renameCollectionItemRequest", deleteCollectionItemRequest: "deleteCollectionItemRequest", - duplicateCollectionsRequest: "duplicateCollectionsRequest", - saveResponseRequest: "saveResponseRequest", - saveTestResponseRequest: "saveTestResponseRequest", + deleteCollectionRequest: "deleteCollectionRequest", + deleteCookieByIdRequest: "deleteCookieByIdRequest", + deleteHistoryRequest: "deleteHistoryRequest", + deleteVariableRequest: "deleteVariableRequest", downloadFileTypeRequest: "downloadFileTypeRequest", downloadLargeFileRequest: "downloadLargeFileRequest", - selectFileRequest: "selectFileRequest", - formDataFileRequest: "formDataFileRequest", - readFileRequest: "readFileRequest", + duplicateCollectionsRequest: "duplicateCollectionsRequest", + duplicateVariableRequest: "duplicateVariableRequest", exportRequest: "exportRequest", - clearRequest: "clearRequest", - importRequest: "importRequest", - copyToCollectionsRequest: "copyToCollectionsRequest", - openVariableItemRequest: "openVariableItemRequest", - getAllVariableRequest: "getAllVariableRequest", - getVariableItemRequest: "getVariableItemRequest", - deleteVariableRequest: "deleteVariableRequest", - renameVariableRequest: "renameVariableRequest", + exportRunTestCSVRequest: "exportRunTestCSVRequest", + exportRunTestJsonRequest: "exportRunTestJsonRequest", exportVariableRequest: "exportVariableRequest", - activeVariableRequest: "activeVariableRequest", - saveVariableRequest: "saveVariableRequest", - updateVariableRequest: "updateVariableRequest", - newVariableRequest: "newVariableRequest", - attachVariableRequest: "attachVariableRequest", - removeVariableRequest: "removeVariableRequest", + formDataFileRequest: "formDataFileRequest", + getAllCollectionNameRequest: "getAllCollectionNameRequest", + getAllCollectionsRequest: "getAllCollectionsRequest", + getAllCookiesRequest: "getAllCookiesRequest", + getAllHistoryRequest: "getAllHistoryRequest", + getAllVariableRequest: "getAllVariableRequest", getAttchedColIdsRequest: "getAttchedColIdsRequest", - importVariableRequest: "importVariableRequest", - duplicateVariableRequest: "duplicateVariableRequest", - runAllUIOpenRequest: "runAllUIOpenRequest", - runAllRequest: "runAllRequest", - openRunRequest: "openRunRequest", + getCollectionsByIdRequest: "getCollectionsByIdRequest", + getCollectionsByIdWithPathRequest: "getCollectionsByIdWithPathRequest", + getColSettingsRequest: "getColSettingsRequest", + getCookiesByIdRequest: "getCookiesByIdRequest", + getErrorLogRequest: "getErrorLogRequest", + getHistoryItemRequest: "getHistoryItemRequest", + getParentSettingsRequest: "getParentSettingsRequest", getRunItemDataRequest: "getRunItemDataRequest", - exportRunTestJsonRequest: "exportRunTestJsonRequest", - exportRunTestCSVRequest: "exportRunTestCSVRequest", - createNewRequest: "createNewRequest", - saveRequest: "saveRequest", - createNewFolderRequest: "createNewFolderRequest", + getVariableItemRequest: "getVariableItemRequest", + importCurlRequest: "importCurlRequest", + importRequest: "importRequest", + importVariableRequest: "importVariableRequest", + layoutConfigRequest: "layoutConfigRequest", + multipleApiRequest: "multipleApiRequest", newCollectionRequest: "newCollectionRequest", - openSetToVariableUIRequest: "openSetToVariableUIRequest", - setToVariableRequest: "setToVariableRequest", - saveCookieRequest: "saveCookieRequest", - getAllCookiesRequest: "getAllCookiesRequest", - getCookiesByIdRequest: "getCookiesByIdRequest", - deleteCookieByIdRequest: "deleteCookieByIdRequest", - deleteAllCookieRequest: "deleteAllCookieRequest", - openManageCookiesRequest: "openManageCookiesRequest", + newRequest: "newRequest", + newVariableRequest: "newVariableRequest", openColSettingsRequest: "openColSettingsRequest", - getColSettingsRequest: "getColSettingsRequest", - getParentSettingsRequest: "getParentSettingsRequest", - saveColSettingsRequest: "saveColSettingsRequest", - copyItemRequest: "copyItemRequest", + openExistingItemRequest: "openExistingItemRequest", + openHistoryItemRequest: "openHistoryItemRequest", + openManageCookiesRequest: "openManageCookiesRequest", + openRunRequest: "openRunRequest", + openSetToVariableUIRequest: "openSetToVariableUIRequest", + openVariableItemRequest: "openVariableItemRequest", pasteItemRequest: "pasteItemRequest", - getErrorLogRequest: "getErrorLogRequest", - convertCurlToJsonRequest: "convertCurlToJsonRequest", + readFileRequest: "readFileRequest", + removeVariableFromColRequest: "removeVariableFromColRequest", + removeVariableRequest: "removeVariableRequest", + renameCollectionItemRequest: "renameCollectionItemRequest", + renameCollectionRequest: "renameCollectionRequest", + renameHistoryRequest: "renameHistoryRequest", + renameVariableRequest: "renameVariableRequest", + runAllRequest: "runAllRequest", + runAllUIOpenRequest: "runAllUIOpenRequest", runCurlRequest: "runCurlRequest", - importCurlRequest: "importCurlRequest" + saveColSettingsRequest: "saveColSettingsRequest", + saveCookieRequest: "saveCookieRequest", + saveRequest: "saveRequest", + saveResponseRequest: "saveResponseRequest", + saveTestResponseRequest: "saveTestResponseRequest", + saveVariableRequest: "saveVariableRequest", + selectFileRequest: "selectFileRequest", + selectItemRequest: "selectItemRequest", + setToVariableRequest: "setToVariableRequest", + themeRequest: "themeRequest", + tokenRequest: "tokenRequest", + updateVariableRequest: "updateVariableRequest", + viewLogRequest: "viewLogRequest", }; export const responseTypes = { + activeVariableResponse: "activeVariableResponse", + addToCollectionsResponse: "addToCollectionsResponse", apiResponse: "apiResponse", - multipleApiResponse: "multipleApiResponse", + appendToCollectionsResponse: "appendToCollectionsResponse", + appendToVariableResponse: "appendToVariableResponse", + attachVariableResponse: "attachVariableResponse", cancelResponse: "cancelResponse", + clearResponse: "clearResponse", configResponse: "configResponse", - layoutConfigResponse: "layoutConfigResponse", - getHistoryItemResponse: "getHistoryItemResponse", - getAllHistoryResponse: "getAllHistoryResponse", + convertCurlToJsonResponse: "convertCurlToJsonResponse", + copyItemResponse: "copyItemResponse", + copyToCollectionsResponse: "copyToCollectionsResponse", + createNewFolderResponse: "createNewFolderResponse", + createNewResponse: "createNewResponse", + curlErrorResponse: "curlErrorResponse", + deleteAllCookieResponse: "deleteAllCookieResponse", deleteAllHistoryResponse: "deleteAllHistoryResponse", + deleteCollectionItemResponse: "deleteCollectionItemResponse", + deleteCollectionResponse: "deleteCollectionResponse", + deleteCookieByIdResponse: "deleteCookieByIdResponse", deleteHistoryResponse: "deleteHistoryResponse", - renameHistoryResponse: "renameHistoryResponse", - openHistoryItemResponse: "openHistoryItemResponse", - openExistingItemResponse: "openExistingItemResponse", - newHistoryResponse: "newHistoryResponse", + deleteVariableResponse: "deleteVariableResponse", + duplicateCollectionsResponse: "duplicateCollectionsResponse", + duplicateVariableResponse: "duplicateVariableResponse", + exportVariableResponse: "exportVariableResponse", + formDataFileResponse: "formDataFileResponse", getAllCollectionNameResponse: "getAllCollectionNameResponse", getAllCollectionNamesResponse: "getAllCollectionNamesResponse", getAllCollectionsResponse: "getAllCollectionsResponse", - getCollectionsByIdResponse: "getCollectionsByIdResponse", - addToCollectionsResponse: "addToCollectionsResponse", - appendToCollectionsResponse: "appendToCollectionsResponse", - duplicateCollectionsResponse: "duplicateCollectionsResponse", - renameCollectionResponse: "renameCollectionResponse", - deleteCollectionResponse: "deleteCollectionResponse", - renameCollectionItemResponse: "renameCollectionItemResponse", - deleteCollectionItemResponse: "deleteCollectionItemResponse", - selectFileResponse: "selectFileResponse", - readFileResponse: "readFileResponse", - clearResponse: "clearResponse", - importResponse: "importResponse", - copyToCollectionsResponse: "copyToCollectionsResponse", + getAllCookiesResponse: "getAllCookiesResponse", + getAllHistoryResponse: "getAllHistoryResponse", getAllVariableResponse: "getAllVariableResponse", - getVariableItemResponse: "getVariableItemResponse", - deleteVariableResponse: "deleteVariableResponse", - renameVariableResponse: "renameVariableResponse", - exportVariableResponse: "exportVariableResponse", - activeVariableResponse: "activeVariableResponse", - saveVariableResponse: "saveVariableResponse", - appendToVariableResponse: "appendToVariableResponse", - updateVariableResponse: "updateVariableResponse", - attachVariableResponse: "attachVariableResponse", - removeVariableResponse: "removeVariableResponse", getAttchedColIdsResponse: "getAttchedColIdsResponse", - importVariableResponse: "importVariableResponse", - duplicateVariableResponse: "duplicateVariableResponse", - runAllResponse: "runAllResponse", - getRunItemDataResponse: "getRunItemDataResponse", - createNewResponse: "createNewResponse", - saveResponse: "saveResponse", - createNewFolderResponse: "createNewFolderResponse", - setToVariableResponse: "setToVariableResponse", - saveCookieResponse: "saveCookieResponse", - getAllCookiesResponse: "getAllCookiesResponse", - getCookiesByIdResponse: "getCookiesByIdResponse", - deleteCookieByIdResponse: "deleteCookieByIdResponse", - deleteAllCookieResponse: "deleteAllCookieResponse", - openColSettingsResponse: "openColSettingsResponse", + getCollectionsByIdResponse: "getCollectionsByIdResponse", + getCollectionsByIdWithPathResponse: "getCollectionsByIdWithPathResponse", getColSettingsResponse: "getColSettingsResponse", + getCookiesByIdResponse: "getCookiesByIdResponse", + getErrorLogResponse: "getErrorLogResponse", + getHistoryItemResponse: "getHistoryItemResponse", getParentSettingsResponse: "getParentSettingsResponse", - saveColSettingsResponse: "saveColSettingsResponse", - copyItemResponse: "copyItemResponse", + getRunItemDataResponse: "getRunItemDataResponse", + getVariableItemResponse: "getVariableItemResponse", + importResponse: "importResponse", + importVariableResponse: "importVariableResponse", + layoutConfigResponse: "layoutConfigResponse", + multipleApiResponse: "multipleApiResponse", + newHistoryResponse: "newHistoryResponse", + openColSettingsResponse: "openColSettingsResponse", + openExistingItemResponse: "openExistingItemResponse", + openHistoryItemResponse: "openHistoryItemResponse", pasteItemResponse: "pasteItemResponse", - getErrorLogResponse: "getErrorLogResponse", - formDataFileResponse: "formDataFileResponse", - convertCurlToJsonResponse: "convertCurlToJsonResponse", + readFileResponse: "readFileResponse", + removeVariableResponse: "removeVariableResponse", + removeVariableFromColResponse: "removeVariableFromColResponse", + renameCollectionItemResponse: "renameCollectionItemResponse", + renameCollectionResponse: "renameCollectionResponse", + renameHistoryResponse: "renameHistoryResponse", + renameVariableResponse: "renameVariableResponse", + runAllResponse: "runAllResponse", runCurlResponse: "runCurlResponse", - curlErrorResponse: "curlErrorResponse" + saveColSettingsResponse: "saveColSettingsResponse", + saveCookieResponse: "saveCookieResponse", + saveResponse: "saveResponse", + saveVariableResponse: "saveVariableResponse", + selectFileResponse: "selectFileResponse", + setToVariableResponse: "setToVariableResponse", + tokenResponse: "tokenResponse", + themeResponse: "themeResponse", + updateVariableResponse: "updateVariableResponse" +}; + +export const pubSubTypes = { + addCurrentVariable: "addCurrentVariable", + updateVariables: "updateVariables", + removeCurrentVariable: "removeCurrentVariable", + themeChanged: "themeChanged" }; export function getNonce() { @@ -152,4 +169,4 @@ export function getNonce() { text += possible.charAt(Math.floor(Math.random() * possible.length)); } return text; -} \ No newline at end of file +} diff --git a/src/utils/curlToRequest.ts b/src/utils/curlToRequest.ts index 85d5b02..efff6dc 100644 --- a/src/utils/curlToRequest.ts +++ b/src/utils/curlToRequest.ts @@ -4,7 +4,7 @@ import { XMLValidator } from "fast-xml-parser"; import { IRequestModel } from "../fetch-client-ui/components/RequestUI/redux/types"; import { MIMETypes } from "./helper"; import { ITableData } from "../fetch-client-ui/components/Common/Table/types"; -import { InitialAuth, InitialBody, IntialSetVar, IntialTest } from "../fetch-client-ui/components/RequestUI/redux/reducer"; +import { InitialAuth, InitialBody, InitialPreFetch, InitialSetVar, InitialTest } from "../fetch-client-ui/components/RequestUI/redux/reducer"; import { writeLog } from "./logger/logger"; export const ConvertCurlToRequest = (curlRequest: string): IRequestModel | null => { @@ -34,10 +34,11 @@ export const ConvertCurlToRequest = (curlRequest: string): IRequestModel | null params: [], auth: InitialAuth, headers: [], - body: InitialBody, - tests: IntialTest, - setvar: IntialSetVar, - notes: "" + body: JSON.parse(JSON.stringify(InitialBody)), + tests: JSON.parse(JSON.stringify(InitialTest)), + setvar: JSON.parse(JSON.stringify(InitialSetVar)), + notes: "", + preFetch: JSON.parse(JSON.stringify(InitialPreFetch)) }; const isJson = (str: string) => { @@ -106,7 +107,7 @@ export const ConvertCurlToRequest = (curlRequest: string): IRequestModel | null } } else if (contentTypeHeader?.includes("application/xml") || contentTypeHeader?.includes("text/xml")) { request.body.bodyType = "raw"; - if (XMLValidator.validate(data)) { + if (XMLValidator.validate(data) === true) { request.body.raw.data = data; request.body.raw.lang = "xml"; } @@ -189,6 +190,12 @@ export const ConvertCurlToRequest = (curlRequest: string): IRequestModel | null return params; }; + const setRequestMethod = (): void => { + if (request.method === "get" || request.method === "options" || request.method === "head") { + request.method = "post"; + } + }; + for (const argv in argvs) { switch (argv) { case "_": @@ -250,16 +257,19 @@ export const ConvertCurlToRequest = (curlRequest: string): IRequestModel | null case "data-raw": case "data-ascii": parseData(argvs[argv]); + setRequestMethod(); break; case "data-urlencode": request.body.urlencoded = parseDataUrlEncode(argvs[argv]); request.body.bodyType = "formurlencoded"; + setRequestMethod(); break; case "data-binary": request.body.binary = argvs[argv]; request.body.bodyType = "binary"; + setRequestMethod(); break; case "compressed": { @@ -268,7 +278,7 @@ export const ConvertCurlToRequest = (curlRequest: string): IRequestModel | null request.headers.push({ isChecked: true, key: "Accept-Encoding", - value: argvs[argv] ? (typeof argvs[argv] === "boolean" ? "gzip, deflate" : argvs[argv]) : "gzip, deflate" + value: argvs[argv] ? (typeof argvs[argv] === "boolean" ? "gzip, deflate" : argvs[argv]) : "gzip, deflate" }); } } diff --git a/src/utils/db/collectionDBUtil.ts b/src/utils/db/collectionDBUtil.ts index 7d8556e..e426d72 100644 --- a/src/utils/db/collectionDBUtil.ts +++ b/src/utils/db/collectionDBUtil.ts @@ -3,16 +3,16 @@ import loki, { LokiFsAdapter } from 'lokijs'; import { v4 as uuidv4 } from 'uuid'; import { ICollections, ISettings, IFolder, IHistory } from "../../fetch-client-ui/components/SideBar/redux/types"; import { collectionDBPath, mainDBPath } from "./consts"; -import { responseTypes } from '../configuration'; +import { pubSubTypes, responseTypes } from '../configuration'; import { CopyExitingItems, DeleteExitingItems, GetColsRequests, RenameRequestItem } from './mainDBUtil'; import { IRequestModel } from '../../fetch-client-ui/components/RequestUI/redux/types'; import { writeLog } from '../logger/logger'; import { formatDate } from '../helper'; -import { getGlobalPath } from '../../extension'; +import { getGlobalPath, pubSub } from '../../extension'; import { isFolder } from '../../fetch-client-ui/components/SideBar/util'; import { SettingsType } from '../../fetch-client-ui/components/Collection/consts'; import { InitialSettings } from '../../fetch-client-ui/components/SideBar/redux/reducer'; -import { apiFetch } from '../fetchUtil'; +import { apiFetch, FetchConfig } from '../fetchUtil'; function getDB(): loki { const idbAdapter = new LokiFsAdapter(); @@ -107,7 +107,7 @@ function duplicateFolderItems(sourceFolder: IFolder, destFolder: IFolder, oldIds createdTime: formatDate(), type: "folder", data: [], - settings: (item as IFolder).settings ? (item as IFolder).settings : InitialSettings + settings: (item as IFolder).settings ? (item as IFolder).settings : JSON.parse(JSON.stringify(InitialSettings)) }; destFolder.data.push(folder); duplicateFolderItems(item as IFolder, destFolder.data[destFolder.data.length - 1] as IFolder, oldIds, ids); @@ -151,7 +151,7 @@ export function CreateNewCollection(name: string, sideBarView: vscode.WebviewVie name: name, data: [], variableId: "", - settings: InitialSettings + settings: JSON.parse(JSON.stringify(InitialSettings)) }; const userCollections = colDB.getCollection('userCollections'); userCollections.insert(item); @@ -269,7 +269,7 @@ export function DuplicateItem(coldId: string, folderId: string, historyId: strin createdTime: formatDate(), type: "folder", data: [], - settings: item.settings ? item.settings : InitialSettings + settings: item.settings ? item.settings : JSON.parse(JSON.stringify(InitialSettings)) }; const { folder, oIds, nIds } = duplicateFolderItems(item, destFolder, [], {}); @@ -376,7 +376,7 @@ export function CopyToCollection(sourceId: string, destID: string, destName: str name: destName, createdTime: formatDate(), variableId: "", - settings: sourceColItem[0].settings ? sourceColItem[0].settings : InitialSettings, + settings: sourceColItem[0].settings ? sourceColItem[0].settings : JSON.parse(JSON.stringify(InitialSettings)), data: (sourceColItem[0] as ICollections).data.length > 0 ? (sourceColItem[0] as ICollections).data.map(item => { if (isFolder(item)) { let destFolder: IFolder = { @@ -385,7 +385,7 @@ export function CopyToCollection(sourceId: string, destID: string, destName: str createdTime: formatDate(), type: "folder", data: [], - settings: (item as IFolder).settings ? (item as IFolder).settings : InitialSettings + settings: (item as IFolder).settings ? (item as IFolder).settings : JSON.parse(JSON.stringify(InitialSettings)) }; const { folder, oIds, nIds } = duplicateFolderItems(item as IFolder, destFolder, [], {}); oldIds = [...oldIds, ...oIds]; @@ -422,7 +422,7 @@ export function CopyToCollection(sourceId: string, destID: string, destName: str createdTime: formatDate(), type: "folder", data: [], - settings: (item as IFolder).settings ? (item as IFolder).settings : InitialSettings + settings: (item as IFolder).settings ? (item as IFolder).settings : JSON.parse(JSON.stringify(InitialSettings)) }; const { folder, oIds, nIds } = duplicateFolderItems(item as IFolder, destFolder, [], {}); oldIds = [...oldIds, ...oIds]; @@ -475,23 +475,25 @@ export function GetAllCollectionName(webview: vscode.Webview, from: string) { db.loadDatabase({}, function () { const userCollections = db.getCollection('userCollections').data; - let collections = []; - let folders = []; - userCollections.forEach(col => { - col.data.forEach(item => { - if (item.data) { - folders.push({ colId: col.id, value: item.id, name: item.name, disabled: false }); - } + + if (userCollections && userCollections.length > 0) { + let collections = []; + let folders = []; + userCollections.forEach(col => { + col.data.forEach(item => { + if (item.data) { + folders.push({ colId: col.id, value: item.id, name: item.name, disabled: false }); + } + }); + collections.push({ value: col.id, name: col.name, disabled: false }); }); - collections.push({ value: col.id, name: col.name, disabled: false }); - }); - if (from === "addtocol") { - webview.postMessage({ type: responseTypes.getAllCollectionNameResponse, collectionNames: collections, folderNames: folders }); - } else { - webview.postMessage({ type: responseTypes.getAllCollectionNamesResponse, collectionNames: collections, folderNames: folders }); + if (from === "addtocol") { + webview.postMessage({ type: responseTypes.getAllCollectionNameResponse, collectionNames: collections, folderNames: folders }); + } else { + webview.postMessage({ type: responseTypes.getAllCollectionNamesResponse, collectionNames: collections, folderNames: folders }); + } } - }); } catch (err) { @@ -669,6 +671,29 @@ export function AttachVariable(colId: string, varId: string, webview: vscode.Web if (sideBarView) { sideBarView.webview.postMessage({ type: responseTypes.attachVariableResponse, params: { id: colId, varId: varId } }); } + + if (pubSub.size > 0) { + pubSub.publish({ messageType: varId === "" ? pubSubTypes.removeCurrentVariable : pubSubTypes.addCurrentVariable, message: varId }); + } + }); + + } catch (err) { + writeLog("error::AttachVariable(): " + err); + } +} + +export function RemoveVariableByVariableId(varId: string, sideBarView: vscode.WebviewView) { + try { + const db = getDB(); + + db.loadDatabase({}, function () { + db.getCollection('userCollections').findAndUpdate({ 'variableId': varId }, item => { item.variableId = ""; }); + db.saveDatabase(); + + if (sideBarView) { + const userCollections = db.getCollection('userCollections').data; + sideBarView.webview.postMessage({ type: responseTypes.getAllCollectionsResponse, collections: userCollections }); + } }); } catch (err) { @@ -717,10 +742,10 @@ export function GetAllCollectionsById(colId: string, folderId: string, type: str let paths: any; let results = db.getCollection('userCollections').by('id', colId); if (type === "col") { - ({ paths, ids } = getPath(results, "", {}, [])); + ({ paths, ids } = getPath(results, "", {}, [], "source")); } else { let item = findItem(results, folderId); - ({ paths, ids } = getPath(item, "", {}, [])); + ({ paths, ids } = getPath(item, "", {}, [], "source")); } ids = ids.reverse(); GetColsRequests(ids, paths, webview); @@ -731,20 +756,37 @@ export function GetAllCollectionsById(colId: string, folderId: string, type: str } } -function getPath(source: any, path: string, paths: {}, ids: string[]) { +export function GetAllCollectionsByIdWithPath(colId: string, webview: vscode.Webview) { + try { + const db = getDB(); + + db.loadDatabase({}, function () { + let results = db.getCollection('userCollections').by('id', colId); + const { paths } = getPath(results, "", {}, [], "request"); + if (webview) { + webview.postMessage({ type: responseTypes.getCollectionsByIdWithPathResponse, colId: colId, paths: paths }); + } + }); + + } catch (err) { + writeLog("error::GetAllCollectionsByIdWithPath(): " + err); + } +} + +function getPath(source: any, path: string, paths: {}, ids: string[], type: string) { let folders = source.data.filter(item => item.data !== undefined); if (folders.length === 0) { source.data.forEach(item => { - paths[item.id] = path ? path + " > " + source.name + ";" + source.id : source.name + ";" + source.id; + paths[item.id] = path ? path + " > " + source.name + (type === "source" ? ";" + source.id : " > " + item.name + ";" + source.id) : source.name + (type === "source" ? ";" + source.id : " > " + item.name + ";" + source.id); ids.unshift(item.id); }); return { paths, ids }; } else { source.data.filter(i => i.data === undefined).forEach(item => { - paths[item.id] = path ? path + " > " + source.name + ";" + source.id : source.name + ";" + source.id; + paths[item.id] = path ? path + " > " + source.name + (type === "source" ? ";" + source.id : " > " + item.name + ";" + source.id) : source.name + (type === "source" ? ";" + source.id : " > " + item.name + ";" + source.id); ids.unshift(item.id); }); } @@ -752,13 +794,30 @@ function getPath(source: any, path: string, paths: {}, ids: string[]) { path = path ? path + " > " + source.name : source.name; for (let i = 0; i < folders.length; i++) { - const result = getPath(folders[i], path, paths, ids); + const result = getPath(folders[i], path, paths, ids, type); if (i === folders.length - 1) { return result; } } } +export function GetVariableByColId(colId: string) { + try { + return new Promise((resolve, _reject) => { + const db = getDB(); + + db.loadDatabase({}, function (err: any) { + if (err) { + resolve(null); + } + const colItem = db.getCollection('userCollections').by("id", colId); + resolve(colItem ? colItem.variableId : ""); + }); + }); + } catch (err) { + writeLog("error::GetVariableByColId(): " + err); + } +} export function NewFolderToCollection(item: IFolder, colId: string, folderId: string, sideBarView: vscode.WebviewView) { try { @@ -817,10 +876,10 @@ export function GetCollectionSettings(webview: vscode.Webview, colId: string, fo if (folderId) { let folderItem = findItem(colItem, folderId); if (folderItem) { - settings = folderItem.settings ? folderItem.settings : InitialSettings; + settings = folderItem.settings ? folderItem.settings : JSON.parse(JSON.stringify(InitialSettings)); } } else { - settings = colItem.settings ? colItem.settings : InitialSettings; + settings = colItem.settings ? colItem.settings : JSON.parse(JSON.stringify(InitialSettings)); } if (webview) { @@ -847,10 +906,10 @@ export function GetParentSettings(colId: string, folderId: string, webview: vsco if (folderId) { settings = findParentSettings(colItem, folderId, null); if (!settings) { - settings = InitialSettings; + settings = JSON.parse(JSON.stringify(InitialSettings)); } } else { - settings = colItem.settings ? colItem.settings : InitialSettings;; + settings = colItem.settings ? colItem.settings : JSON.parse(JSON.stringify(InitialSettings));; } if (webview) { @@ -864,8 +923,43 @@ export function GetParentSettings(colId: string, folderId: string, webview: vsco } } +export function GetParentSettingsSync(colId: string, folderId: string) { + try { + return new Promise((resolve, _reject) => { + const db = getDB(); + + db.loadDatabase({}, function (err: any) { + + if (err) { + resolve(null); + } + + + let settings: any; + const colItem = db.getCollection('userCollections').by("id", colId); + + if (colItem) { + if (folderId) { + settings = findParentSettings(colItem, folderId, null); + if (!settings) { + settings = JSON.parse(JSON.stringify(InitialSettings)); + } + } else { + settings = colItem.settings ? colItem.settings : JSON.parse(JSON.stringify(InitialSettings));; + } + } + + resolve(settings ? settings as ISettings : null); + }); + }); + } + catch (err) { + writeLog("error::GetParentSettingsSync(): " + err); + } +} + -export function ExecuteRequest(reqData: any, timeOut: number, webview: vscode.Webview) { +export function ExecuteRequest(reqData: any, fetchConfig: FetchConfig, webview: vscode.Webview) { try { const db = getDB(); @@ -878,13 +972,13 @@ export function ExecuteRequest(reqData: any, timeOut: number, webview: vscode.We if (reqData.data.folderId) { settings = findParentSettings(colItem, reqData.data.folderId, null); if (!settings) { - settings = InitialSettings; + settings = JSON.parse(JSON.stringify(InitialSettings)); } } else { - settings = colItem.settings ? colItem.settings : InitialSettings;; + settings = colItem.settings ? colItem.settings : JSON.parse(JSON.stringify(InitialSettings));; } - apiFetch(reqData.data.reqData, timeOut, null, reqData.data.variableData, settings).then((data) => { + apiFetch(reqData.data.reqData, reqData.data.variableData, settings, fetchConfig).then((data) => { webview.postMessage(data); }); } @@ -895,7 +989,7 @@ export function ExecuteRequest(reqData: any, timeOut: number, webview: vscode.We } } -export function ExecuteMultipleRequest(reqData: any, timeOut: number, webview: vscode.Webview) { +export function ExecuteMultipleRequest(reqData: any, fetchConfig: FetchConfig, webview: vscode.Webview) { try { const db = getDB(); @@ -917,16 +1011,16 @@ export function ExecuteMultipleRequest(reqData: any, timeOut: number, webview: v if (id) { settings = findParentSettings(colItem, id, null); if (!settings) { - settings = InitialSettings; + settings = JSON.parse(JSON.stringify(InitialSettings)); } } else { - settings = colItem.settings ? colItem.settings : InitialSettings;; + settings = colItem.settings ? colItem.settings : JSON.parse(JSON.stringify(InitialSettings));; } - requests.push(apiFetch(item, timeOut, null, reqData.data.variableData, settings)); + requests.push(apiFetch(item, reqData.data.variableData, settings, fetchConfig)); } } else { - requests.push(apiFetch(item, timeOut, null, reqData.data.variableData, null)); + requests.push(apiFetch(item, reqData.data.variableData, null, fetchConfig)); } }); diff --git a/src/utils/db/mainDBUtil.ts b/src/utils/db/mainDBUtil.ts index 25bfa5a..372e2f8 100644 --- a/src/utils/db/mainDBUtil.ts +++ b/src/utils/db/mainDBUtil.ts @@ -1,17 +1,20 @@ import * as vscode from 'vscode'; -import loki, { LokiFsAdapter } from 'lokijs'; -import { v4 as uuidv4 } from 'uuid'; +import { collectionDBPath, mainDBPath, variableDBPath } from "./consts"; +import { FetchClientDataProxy } from '../validators/fetchClientCollectionValidator'; +import { fetchClientImporter } from '../importers/fetchClientImporter_1_0'; +import { formatDate } from '../helper'; +import { getGlobalPath } from '../../extension'; +import { ICollections, IFolder, IHistory } from '../../fetch-client-ui/components/SideBar/redux/types'; +import { InitialSettings } from '../../fetch-client-ui/components/SideBar/redux/reducer'; import { IRequestModel } from '../../fetch-client-ui/components/RequestUI/redux/types'; -import { collectionDBPath, mainDBPath } from "./consts"; +import { isFolder } from '../../fetch-client-ui/components/SideBar/util'; +import { isJson } from '../../fetch-client-ui/components/TestUI/TestPanel/helper'; +import { postmanImporter } from '../importers/postmanImporter_2_1'; +import { PostmanSchema_2_1, POSTMAN_SCHEMA_V2_1 } from '../importers/postman_2_1.types'; import { responseTypes } from '../configuration'; import { writeLog } from '../logger/logger'; import fs from "fs"; -import { ICollections, IFolder, IHistory } from '../../fetch-client-ui/components/SideBar/redux/types'; -import { formatDate } from '../helper'; -import { FetchClientDataProxy } from '../ImportDataValidator'; -import { getGlobalPath } from '../../extension'; -import { isFolder } from '../../fetch-client-ui/components/SideBar/util'; -import { InitialSettings } from '../../fetch-client-ui/components/SideBar/redux/reducer'; +import loki, { LokiFsAdapter } from 'lokijs'; function getDB(): loki { const idbAdapter = new LokiFsAdapter(); @@ -25,6 +28,12 @@ function getCollectionDB(): loki { return db; } +function getVariableDB(): loki { + const idbAdapter = new LokiFsAdapter(); + const db = new loki(getGlobalPath() + "\\" + variableDBPath, { adapter: idbAdapter }); + return db; +} + export function SaveRequest(reqData: IRequestModel) { try { const db = getDB(); @@ -56,6 +65,7 @@ export function UpdateRequest(reqData: IRequestModel) { req.tests = reqData.tests; req.setvar = reqData.setvar; req.notes = reqData.notes; + req.preFetch = reqData.preFetch; apiRequests.update(req); db.saveDatabase(); }); @@ -66,13 +76,36 @@ export function UpdateRequest(reqData: IRequestModel) { } } -export function GetExitingItem(webview: vscode.Webview, id: string) { +export function GetRequestItem(reqId: string) { + try { + return new Promise((resolve, _reject) => { + const db = getDB(); + db.loadDatabase({}, function (err: any) { + if (err) { + resolve(null); + } + const results = db.getCollection('apiRequests').chain().find({ 'id': reqId }).data(); + resolve(results && results.length > 0 ? results[0] as IRequestModel : null); + }); + }); + } catch (err) { + writeLog("error::GetRequestItem(): " + err); + } +} + +export function GetExitingItem(webview: vscode.Webview, id: string, callback: any = null) { try { const db = getDB(); db.loadDatabase({}, function () { const results = db.getCollection('apiRequests').chain().find({ 'id': id }).data(); - webview.postMessage({ type: responseTypes.openExistingItemResponse, item: results }); + if (webview) { + webview.postMessage({ type: responseTypes.openExistingItemResponse, item: results }); + } + + if (callback) { + callback(results); + } }); } catch (err) { @@ -196,7 +229,8 @@ export function Export(path: string, colId: string, hisId: string, folderId: str type: "collections", createdTime: cols[0].createdTime, exportedDate: formatDate(), - data: [] + data: [], + settings: cols[0].settings ? cols[0].settings : JSON.parse(JSON.stringify(InitialSettings)) }; if (hisId) { @@ -227,10 +261,10 @@ export function Export(path: string, colId: string, hisId: string, folderId: str fs.writeFile(path, JSON.stringify(exportData), (error) => { if (error) { - vscode.window.showErrorMessage("Could not save to '" + path + "'. Error Message : " + error.message); + vscode.window.showErrorMessage("Could not save to '" + path + "'. Error Message : " + error.message, { modal: true }); writeLog("error::ExportItem()::FileWrite()" + error.message); } else { - vscode.window.showInformationMessage("Successfully saved to '" + path + "'."); + vscode.window.showInformationMessage("Successfully saved to '" + path + "'.", { modal: true }); } }); }); @@ -258,128 +292,130 @@ export function RenameRequestItem(id: string, name: string) { } } -function ValidateData(data: string): boolean { +enum ImportType { + FetchClient_1_0 = "FetchClient_1_0", + Postman_2_1 = "Postman_2_1", +} + +function ValidateData(data: string): ImportType | null { try { - if (!data || data.length === 0) { - vscode.window.showErrorMessage("Could not import the collection - Empty Data."); + if (!data || data.length === 0 || !isJson(data)) { + vscode.window.showErrorMessage("Could not import the collection - Empty Data.", { modal: true }); writeLog("error::Import::ValidateData() " + "Error Message : Could not import the collection - Empty Data."); - return false; + return null; } - FetchClientDataProxy.Parse(data); - - return true; + try { + FetchClientDataProxy.Parse(data); + return ImportType.FetchClient_1_0; + } catch (err) { + let postmanData = JSON.parse(data) as PostmanSchema_2_1; + if (postmanData.info?._postman_id && postmanData.info?.schema === POSTMAN_SCHEMA_V2_1) { + return ImportType.Postman_2_1; + } + return null; + } } catch (err) { - vscode.window.showErrorMessage("Could not import the collection - Invalid Data."); + vscode.window.showErrorMessage("Could not import the collection - Invalid Data.", { modal: true }); writeLog("error::Import::ValidateData() " + "Error Message : Could not import the collection - " + err); - return false; + return null; } } -function ImportFolder(source: any, importData: any, reqData: any): any { - for (let i = 0; i < source.data.length; i++) { - if (isFolder(source.data[i])) { - let folder: IFolder = { - id: uuidv4(), - name: source.data[i].name, - createdTime: formatDate(), - type: "folder", - data: [], - settings: source.data[i].settings ? source.data[i].settings : InitialSettings - }; - let result = ImportFolder(source.data[i], folder, reqData); - importData.data.push(result.importData); - } else { - source.data[i].id = uuidv4(); - source.data[i].createdTime = formatDate(); - let his: IHistory = { - id: source.data[i].id, - method: source.data[i].method, - name: source.data[i].name, - url: source.data[i].url, - createdTime: source.data[i].createdTime - }; - reqData.push(source.data[i]); - importData.data.push(his); - } - } - - return { importData, reqData }; +function insertCollections(colDB: loki, webviewView: vscode.WebviewView, fcCollection: ICollections) { + colDB.loadDatabase({}, function () { + const userCollections = colDB.getCollection('userCollections'); + userCollections.insert(fcCollection); + colDB.saveDatabase(); + webviewView.webview.postMessage({ type: responseTypes.importResponse, data: fcCollection }); + }); } export function Import(webviewView: vscode.WebviewView, path: string) { try { - const db = getDB(); - const colDB = getCollectionDB(); - const data = fs.readFileSync(path, "utf8"); + var type = ValidateData(data); + switch (type) { + case ImportType.FetchClient_1_0: + ImportFC(webviewView, data); + break; + case ImportType.Postman_2_1: + ImportPostman(webviewView, data); + break; + default: + vscode.window.showErrorMessage("Could not import the collection - Invalid data.", { modal: true }); + } + + } catch (err) { + vscode.window.showErrorMessage("Could not import the collection - Invalid data.", { modal: true }); + writeLog("error::Import(): - Error Message : " + err); + } +} - if (!ValidateData(data)) { +function ImportPostman(webviewView: vscode.WebviewView, data: string) { + try { + const convertedData = postmanImporter(data); + if (!convertedData || !convertedData.fcCollection || !convertedData.fcRequests) { return; } - const parsedData = JSON.parse(data); + const db = getDB(); + const colDB = getCollectionDB(); + const varDB = getVariableDB(); - let importedData = parsedData.data; - let reqData = []; - - let colData: ICollections = { - id: uuidv4(), - name: parsedData.name, - createdTime: formatDate(), - variableId: "", - data: [], - settings: parsedData.settings ? parsedData.settings : InitialSettings - }; - - importedData.forEach(item => { - item.id = uuidv4(); - item.createdTime = formatDate(); - if (isFolder(item)) { - let importData: any; - let folder: IFolder = { - id: uuidv4(), - name: item.name, - createdTime: formatDate(), - type: "folder", - data: [], - settings: item.settings ? item.settings : InitialSettings - }; - ({ importData, reqData } = ImportFolder(item, folder, reqData)); - colData.data.push(importData); + db.loadDatabase({}, function () { + const apiRequests = db.getCollection('apiRequests'); + apiRequests.insert(convertedData.fcRequests); + db.saveDatabase(); + + if (convertedData.fcVariable) { + varDB.loadDatabase({}, function () { + const userVariables = varDB.getCollection('userVariables'); + userVariables.insert(convertedData.fcVariable); + varDB.saveDatabase(); + webviewView.webview.postMessage({ type: responseTypes.importVariableResponse, vars: convertedData.fcVariable }); + insertCollections(colDB, webviewView, convertedData.fcCollection); + }); } else { - item.id = uuidv4(); - item.createdTime = formatDate(); - reqData.push(item); - let his: IHistory = { - id: item.id, - method: item.method, - name: item.name, - url: item.url, - createdTime: formatDate() - }; - colData.data.push(his); + insertCollections(colDB, webviewView, convertedData.fcCollection); } }); + } catch (err) { + vscode.window.showErrorMessage("Could not import the collection - Invalid data.", { modal: true }); + writeLog("error::ImportPostman(): - Error Message : " + err); + } +} + +function ImportFC(webviewView: vscode.WebviewView, data: string) { + try { + const parsedData = JSON.parse(data); + + const convertedData = fetchClientImporter(parsedData); + if (!convertedData || !convertedData.fcCollection || !convertedData.fcRequests) { + return; + } + + const db = getDB(); + const colDB = getCollectionDB(); db.loadDatabase({}, function () { const apiRequests = db.getCollection('apiRequests'); - apiRequests.insert(reqData); + apiRequests.insert(convertedData.fcRequests); db.saveDatabase(); colDB.loadDatabase({}, function () { const userCollections = colDB.getCollection('userCollections'); - userCollections.insert(colData); + userCollections.insert(convertedData.fcCollection); colDB.saveDatabase(); - webviewView.webview.postMessage({ type: responseTypes.importResponse, data: colData }); + webviewView.webview.postMessage({ type: responseTypes.importResponse, data: convertedData.fcCollection }); }); }); } catch (err) { - vscode.window.showErrorMessage("Could not import the collection - Invalid data."); - writeLog("error::Import(): - Error Mesaage : " + err); + vscode.window.showErrorMessage("Could not import the collection - Invalid data.", { modal: true }); + writeLog("error::ImportFC(): - Error Message : " + err); } } diff --git a/src/utils/db/varDBUtil.ts b/src/utils/db/varDBUtil.ts index 68345ca..c474c7d 100644 --- a/src/utils/db/varDBUtil.ts +++ b/src/utils/db/varDBUtil.ts @@ -4,10 +4,10 @@ import fs from "fs"; import { v4 as uuidv4 } from 'uuid'; import { IVariable } from "../../fetch-client-ui/components/SideBar/redux/types"; import { variableDBPath } from "./consts"; -import { responseTypes } from '../configuration'; +import { pubSubTypes, responseTypes } from '../configuration'; import { writeLog } from '../logger/logger'; -import { getGlobalPath } from '../../extension'; -import { FetchClientVariableProxy } from '../ImportVariableValidator'; +import { getGlobalPath, pubSub } from '../../extension'; +import { FetchClientVariableProxy } from '../validators/fetchClientVariableValidator'; import { formatDate } from '../helper'; import { RemoveVariable } from './collectionDBUtil'; @@ -34,6 +34,11 @@ export function SaveVariable(item: IVariable, webview: vscode.Webview, sideBarVi if (sideBarView) { sideBarView.webview.postMessage({ type: responseTypes.appendToVariableResponse, collection: item }); } + + if (pubSub.size > 0) { + pubSub.publish({ messageType: pubSubTypes.updateVariables }); + } + }); } catch (err) { @@ -84,6 +89,10 @@ export function UpdateVariable(item: IVariable, webview: vscode.Webview) { if (webview) { webview.postMessage({ type: responseTypes.updateVariableResponse }); } + + if (pubSub.size > 0) { + pubSub.publish({ messageType: pubSubTypes.updateVariables }); + } }); } catch (err) { @@ -119,6 +128,24 @@ export function GetVariableById(id: string, isGlobal: boolean, webview: vscode.W } } +export function GetVariableByIdSync(id: string) { + try { + return new Promise((resolve, _reject) => { + const db = getDB(); + + db.loadDatabase({}, function (err: any) { + if (err) { + resolve(null); + } + let userVariables = db.getCollection('userVariables').find(id ? { 'id': id } : { 'name': 'Global' }); + resolve(userVariables && userVariables.length > 0 ? userVariables[0] as IVariable : null); + }); + }); + } catch (err) { + writeLog("error::GetVariableByIdSync(): " + err); + } +} + export function DeleteVariable(webviewView: vscode.WebviewView, id: string) { try { const db = getDB(); @@ -128,6 +155,9 @@ export function DeleteVariable(webviewView: vscode.WebviewView, id: string) { db.saveDatabase(); RemoveVariable(id); webviewView.webview.postMessage({ type: responseTypes.deleteVariableResponse, id: id }); + if (pubSub.size > 0) { + pubSub.publish({ messageType: pubSubTypes.updateVariables }); + } }); } catch (err) { @@ -143,6 +173,9 @@ export function RenameVariable(webviewView: vscode.WebviewView, id: string, name db.getCollection('userVariables').findAndUpdate({ 'id': id }, item => { item.name = name; }); db.saveDatabase(); webviewView.webview.postMessage({ type: responseTypes.renameVariableResponse, params: { id: id, name: name } }); + if (pubSub.size > 0) { + pubSub.publish({ messageType: pubSubTypes.updateVariables }); + } }); } catch (err) { @@ -181,10 +214,10 @@ export function ExportVariable(path: string, vars: IVariable) { fs.writeFile(path, JSON.stringify(exportData), (error) => { if (error) { - vscode.window.showErrorMessage("Could not save to '" + path + "'. Error Message : " + error.message); + vscode.window.showErrorMessage("Could not save to '" + path + "'. Error Message : " + error.message, { modal: true }); writeLog("error::ExportVariable()::FileWrite()" + error.message); } else { - vscode.window.showInformationMessage("Successfully saved to '" + path + "'."); + vscode.window.showInformationMessage("Successfully saved to '" + path + "'.", { modal: true }); } }); } catch (err) { @@ -195,7 +228,7 @@ export function ExportVariable(path: string, vars: IVariable) { function ValidateData(data: string): boolean { try { if (!data || data.length === 0) { - vscode.window.showErrorMessage("Could not import the variable - Empty Data."); + vscode.window.showErrorMessage("Could not import the variable - Empty Data.", { modal: true }); writeLog("error::ImportVariable::ValidateData() " + "Error Message : Could not import the variable - Empty Data."); return false; } @@ -205,16 +238,14 @@ function ValidateData(data: string): boolean { return true; } catch (err) { - vscode.window.showErrorMessage("Could not import the variable - Invalid Data."); + vscode.window.showErrorMessage("Could not import the variable - Invalid Data.", { modal: true }); writeLog("error::ImportVariable::ValidateData() " + "Error Message : Could not import the variable - " + err); return false; } } -export function ImportVariable(webviewView: vscode.WebviewView, path: string) { +export function ImportVariableFromJsonFile(webviewView: vscode.WebviewView, path: string) { try { - const db = getDB(); - const data = fs.readFileSync(path, "utf8"); if (!ValidateData(data)) { @@ -228,6 +259,50 @@ export function ImportVariable(webviewView: vscode.WebviewView, path: string) { reqData.id = uuidv4(); reqData.createdTime = formatDate(); + ImportVariable(webviewView, reqData); + + } catch (err) { + vscode.window.showErrorMessage("Could not import the variable - Invalid data.", { modal: true }); + writeLog("error::ImportVariableFromJsonFile(): - Error Mesaage : " + err); + } +} + +export function ImportVariableFromEnvFile(webviewView: vscode.WebviewView, path: string) { + try { + const data = fs.readFileSync(path, "utf8").toString().split("\n"); + let fileName = path.split('\\').pop().split('/').pop().split('.')[0]?.trim(); + + let reqData: IVariable = { + id: uuidv4(), + name: fileName ? fileName : ".env", + createdTime: formatDate(), + isActive: true, + data: [] + }; + + for (let l in data) { + let line = data[l].trim(); + if (line.indexOf("=") > -1) { + reqData.data.push({ + isChecked: true, + key: line.substring(0, line.indexOf("=")).trim(), + value: line.substring(line.indexOf("=") + 1).trim() + }); + } + } + + ImportVariable(webviewView, reqData); + + } catch (err) { + vscode.window.showErrorMessage("Could not import the variable - Invalid data.", { modal: true }); + writeLog("error::ImportVariableFromEnvFile(): - Error Mesaage : " + err); + } +} + +export function ImportVariable(webviewView: vscode.WebviewView, reqData: IVariable) { + try { + const db = getDB(); + db.loadDatabase({}, function () { const userVariables = db.getCollection('userVariables'); userVariables.insert(reqData); @@ -236,7 +311,7 @@ export function ImportVariable(webviewView: vscode.WebviewView, path: string) { }); } catch (err) { - vscode.window.showErrorMessage("Could not import the variable - Invalid data."); + vscode.window.showErrorMessage("Could not import the variable - Invalid data.", { modal: true }); writeLog("error::ImportVariable(): - Error Mesaage : " + err); } } \ No newline at end of file diff --git a/src/utils/fetchUtil.ts b/src/utils/fetchUtil.ts index 67874eb..4929eb9 100644 --- a/src/utils/fetchUtil.ts +++ b/src/utils/fetchUtil.ts @@ -1,53 +1,73 @@ -import axios, { CancelTokenSource } from "axios"; -import * as https from "https"; -import fs from "fs"; -import { sign, Request as awsRequest } from 'aws4'; -import FormData from 'form-data'; -import { ITableData } from "../fetch-client-ui/components/Common/Table/types"; +import { getErrorResponse, getFileType, getRandomNumber, isFileType, replaceAuthSettingsInRequest, replaceValueWithVariable } from "./helper"; +import { getProtocolConfiguration, getSSLConfiguration } from "./vscodeConfig"; import { IRequestModel } from "../fetch-client-ui/components/RequestUI/redux/types"; +import { ISettings } from "../fetch-client-ui/components/SideBar/redux/types"; +import { ITableData } from "../fetch-client-ui/components/Common/Table/types"; +import { logDetails } from "./logger/requestLog"; import { responseTypes } from "./configuration"; -import { getProtocolConfiguration, getSSLConfiguration } from "./vscodeConfig"; -import { getErrorResponse, getFileType, getRandomNumber, isFileType, replaceAuthSettingsInRequest, replaceValueWithVariable } from "./helper"; +import { sign, Request as awsRequest } from 'aws4'; import { writeLog } from "./logger/logger"; -import { ISettings } from "../fetch-client-ui/components/SideBar/redux/types"; +import * as https from "https"; +import axios, { CancelTokenSource } from "axios"; +import FormData from 'form-data'; +import fs from "fs"; + +export interface FetchConfig { + timeOut: number, + headersCase: boolean, + runMainRequest?: boolean, + source?: CancelTokenSource +} + +export const updateAuthSettings = (requestData: IRequestModel, settings?: ISettings): IRequestModel => { + if (settings && requestData.auth.authType === "inherit") { + let copyData = JSON.parse(JSON.stringify(requestData)); + return replaceAuthSettingsInRequest(copyData, settings); + } + return requestData; +}; -export const apiFetch = async (requestData: IRequestModel, timeOut: number, source?: CancelTokenSource, variableData?: ITableData[], settings?: ISettings) => { +export const updateVariables = (requestData: IRequestModel, variableData?: ITableData[]): IRequestModel => { + let varData = {}; + if (variableData?.length > 0) { + variableData.forEach(item => { + varData[item.key] = item.value; + }); + let copy = JSON.parse(JSON.stringify(requestData)); + return replaceValueWithVariable(copy, varData); + } + + return requestData; +}; + +export const apiFetch = async ( + requestData: IRequestModel, + variableData: ITableData[], + settings: ISettings, + fetchConfig: FetchConfig, + resType: string = responseTypes.apiResponse +) => { const reqHeaders = {}; let startTime: number, fetchDuration: number; let reqData: any = ""; let apiResponse: any; - let varData = {}; - let request: IRequestModel; - - try { - if (settings && requestData.auth.authType === "inherit") { - let copyData = JSON.parse(JSON.stringify(requestData)); - request = replaceAuthSettingsInRequest(copyData, settings); - } + let request = updateAuthSettings(requestData, settings); + request = updateVariables(request, variableData); - if (variableData?.length > 0) { - variableData.forEach(item => { - varData[item.key] = item.value; - }); - if (request) { - request = replaceValueWithVariable(request, varData); - } else { - let copy = JSON.parse(JSON.stringify(requestData)); - request = replaceValueWithVariable(copy, varData); - } - } else { - request = request ? request : requestData; + try { + if (request.auth.authType === "bearertoken") { + reqHeaders[fetchConfig.headersCase ? "Authorization" : "authorization"] = `${request.auth.tokenPrefix} ${request.auth.password}`; } - if (request.auth.authType === "bearertoken") { - reqHeaders["Authorization"] = `${request.auth.tokenPrefix} ${request.auth.password}`; + if (request.auth.authType === "oauth2") { + reqHeaders[fetchConfig.headersCase ? "Authorization" : "authorization"] = `${request.auth.tokenPrefix} ${request.auth.password}`; } request.headers.forEach(({ isChecked, key, value }) => { if (isChecked && key) { - reqHeaders[key] = value; + reqHeaders[fetchConfig.headersCase ? key : key.toLocaleLowerCase()] = value; } }); @@ -90,12 +110,12 @@ export const apiFetch = async (requestData: IRequestModel, timeOut: number, sour if (request.body.bodyType === "formdata") { let header = reqData.getHeaders(); - reqHeaders["Content-Type"] = header["content-type"] ? header["content-type"] : getContentType(request.body.bodyType, ""); + reqHeaders[fetchConfig.headersCase ? "Content-Type" : "content-type"] = header["content-type"] ? header["content-type"] : getContentType(request.body.bodyType, ""); } else { if (request.body.bodyType !== "none" && !reqHeaders["Content-Type"] && !reqHeaders["content-type"]) { - reqHeaders["Content-Type"] = getContentType(request.body.bodyType, request.body.bodyType === "raw" ? request.body.raw.lang : ""); + reqHeaders[fetchConfig.headersCase ? "Content-Type" : "content-type"] = getContentType(request.body.bodyType, request.body.bodyType === "raw" ? request.body.raw.lang : ""); } - } + } https.globalAgent.options.rejectUnauthorized = getSSLConfiguration(); @@ -113,6 +133,7 @@ export const apiFetch = async (requestData: IRequestModel, timeOut: number, sour let requestconfig: any; let url = validateURL(request.url) ? request.url : getProtocolConfiguration() + "://" + request.url; + request.url = url; if (request.auth.authType === "aws") { const baseRequest: awsRequest = { @@ -158,7 +179,7 @@ export const apiFetch = async (requestData: IRequestModel, timeOut: number, sour data: reqData, validateStatus: () => true, transformResponse: [function (data) { return data; }], - timeout: timeOut, + timeout: fetchConfig.timeOut, responseType: 'arraybuffer', maxContentLength: Infinity, maxBodyLength: Infinity, @@ -173,15 +194,15 @@ export const apiFetch = async (requestData: IRequestModel, timeOut: number, sour data: reqData, validateStatus: () => true, transformResponse: [function (data) { return data; }], - timeout: timeOut, + timeout: fetchConfig.timeOut, responseType: 'arraybuffer', maxContentLength: Infinity, maxBodyLength: Infinity, }; } - if (source) { - requestconfig.cancelToken = source.token; + if (fetchConfig.source) { + requestconfig.cancelToken = fetchConfig.source.token; } const resp = await axios(requestconfig); @@ -234,8 +255,12 @@ export const apiFetch = async (requestData: IRequestModel, timeOut: number, sour } } + setTimeout(() => { + logDetails(request, reqHeaders, reqData, resp.status, respHeaders, isFile ? "View Response is not supported for 'file' type in the log window." : responseData); + }, 1000); + return apiResponse = { - type: responseTypes.apiResponse, + type: resType, response: { responseData: isFile ? resp.data : responseData, status: resp.status, @@ -257,6 +282,10 @@ export const apiFetch = async (requestData: IRequestModel, timeOut: number, sour apiResponse = getErrorResponse(); + setTimeout(() => { + logDetails(request, reqHeaders, reqData, apiResponse.response.status, apiResponse.headers, err.message); + }, 1000); + if (axios.isCancel(err)) { apiResponse.response.responseData = err.message; } else { @@ -313,12 +342,3 @@ function getPath(urlString: string) { const url = new URL(urlString); return url.pathname; } - -function arrayBufferToString(buffer: Uint8Array): string { - var binary = ''; - var len = buffer.byteLength; - for (var i = 0; i < len; i++) { - binary += String.fromCharCode(buffer[i]); - } - return binary; -} diff --git a/src/utils/helper.ts b/src/utils/helper.ts index 8d300fa..80a311b 100644 --- a/src/utils/helper.ts +++ b/src/utils/helper.ts @@ -1,3 +1,4 @@ +import { checkSysVariable, getSysVariableWithValue, SysVariables } from "../fetch-client-ui/components/Common/Consts/sysVariables"; import { ITableData } from "../fetch-client-ui/components/Common/Table/types"; import { IRequestModel } from "../fetch-client-ui/components/RequestUI/redux/types"; import { ISettings } from "../fetch-client-ui/components/SideBar/redux/types"; @@ -144,18 +145,36 @@ export function formatDate(value?: string) { let t = value ? new Date(value) : new Date(); let date = ("0" + t.getDate()).slice(-2); - let timeFormat = ("0" + t.getHours()).slice(-2) + ":" + ("0" + t.getMinutes()).slice(-2) + ":" + ("0" + t.getSeconds()).slice(-2); //t.toTimeString().replace(/([\d]+:[\d]{4})(:[\d]{4})(.*)/, "$1$3"); + let timeFormat = ("0" + t.getHours()).slice(-2) + ":" + ("0" + t.getMinutes()).slice(-2) + ":" + ("0" + t.getSeconds()).slice(-2); + + return date + "-" + months[t.getMonth()] + "-" + t.getFullYear() + " " + timeFormat; +} + +export function formatDateWithMs(value?: string) { + let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + + let t = value ? new Date(value) : new Date(); + let date = ("0" + t.getDate()).slice(-2); + let timeFormat = ("0" + t.getHours()).slice(-2) + ":" + ("0" + t.getMinutes()).slice(-2) + ":" + ("0" + t.getSeconds()).slice(-2) + ":" + ("0" + t.getMilliseconds()).slice(-4); return date + "-" + months[t.getMonth()] + "-" + t.getFullYear() + " " + timeFormat; } export function replaceValueWithVariable(request: IRequestModel, varData: any): IRequestModel { request.url = replaceDataWithVariable(request.url, varData); - request.params = replaceTableDataWithVariable(request.params, varData); - request.headers = replaceTableDataWithVariable(request.headers, varData); + if (request.params.filter(item => item.isChecked).length > 0) { + request.params = replaceTableDataWithVariable(request.params, varData); + } + + if (request.headers.filter(item => item.isChecked).length > 0) { + request.headers = replaceTableDataWithVariable(request.headers, varData); + } + request.auth.userName = replaceDataWithVariable(request.auth.userName, varData); request.auth.password = replaceDataWithVariable(request.auth.password, varData); request.auth.tokenPrefix = replaceDataWithVariable(request.auth.tokenPrefix, varData); + if (request.auth.aws) { request.auth.aws.accessKey = replaceDataWithVariable(request.auth.aws.accessKey, varData); request.auth.aws.secretAccessKey = replaceDataWithVariable(request.auth.aws.secretAccessKey, varData); @@ -163,8 +182,23 @@ export function replaceValueWithVariable(request: IRequestModel, varData: any): request.auth.aws.region = replaceDataWithVariable(request.auth.aws.region, varData); request.auth.aws.sessionToken = replaceDataWithVariable(request.auth.aws.sessionToken, varData); } - request.body.formdata = replaceTableDataWithVariable(request.body.formdata, varData); - request.body.urlencoded = replaceTableDataWithVariable(request.body.urlencoded, varData); + + if (request.body.bodyType === "formurlencoded" && request.body.urlencoded.filter(item => item.isChecked).length > 0) { + request.body.urlencoded = replaceTableDataWithVariable(request.body.urlencoded, varData); + } + + if (request.body.bodyType === "formdata" && request.body.formdata.filter(item => item.isChecked).length > 0) { + request.body.formdata = replaceTableDataWithVariable(request.body.formdata, varData); + } + + if (request.body.bodyType === "raw") { + request.body.raw.data = replaceDataWithVariable(request.body.raw.data, varData); + } + + if (request.body.bodyType === "graphql") { + request.body.graphql.query = replaceDataWithVariable(request.body.graphql.query, varData); + request.body.graphql.variables = replaceDataWithVariable(request.body.graphql.variables, varData); + } return request; } @@ -193,14 +227,14 @@ function replaceTableDataWithVariable(data: ITableData[], varData: any) { if (re.test(item.key)) { let ptn = item.key.match(/({{([^}}]+)}})/gm); ptn?.forEach(p => { - item.key = item.key.replace(p, varData[p.replace("{{", "").replace("}}", "")]); + item.key = updateVariable(p, item.key, varData); }); } if (re.test(item.value)) { let ptn = item.value.match(/({{([^}}]+)}})/gm); ptn?.forEach(p => { - item.value = item.value.replace(p, varData[p.replace("{{", "").replace("}}", "")]); + item.value = updateVariable(p, item.value, varData); }); } }); @@ -209,17 +243,40 @@ function replaceTableDataWithVariable(data: ITableData[], varData: any) { } export function replaceDataWithVariable(data: string, varData: any) { - const re = new RegExp("({{([^}}]+)}})"); - if (re.test(data)) { + if (checkVariableMatch(data)) { let ptn = data.match(/({{([^}}]+)}})/gm); ptn?.forEach(item => { - data = data.replace(item, varData[item.replace("{{", "").replace("}}", "")]); + data = updateVariable(item, data, varData); }); } return data; } +function updateVariable(item: string, data: string, varData: any) { + if (item.includes("{{#") && item.includes("}}")) { + let variable = checkSysVariable(item); + if (variable) { + let value = getSysVariableWithValue(variable); + data = data.replace(item, value?.toString()); + } + } else { + let replacedValue = varData[item.replace("{{", "").replace("}}", "")]; + if (replacedValue && checkVariableMatch(replacedValue)) { + data = data.replace(item, replaceDataWithVariable(replacedValue, varData)); + } else { + data = data.replace(item, varData[item.replace("{{", "").replace("}}", "")]); + } + } + + return data; +} + +function checkVariableMatch(data: string): boolean { + const re = new RegExp("({{([^}}]+)}})"); + return re.test(data); +} + export function getRandomNumber(digit: number) { return Math.random().toFixed(digit).split('.')[1]; } diff --git a/src/utils/importers/fetchClientImporter_1_0.ts b/src/utils/importers/fetchClientImporter_1_0.ts new file mode 100644 index 0000000..a9f82e0 --- /dev/null +++ b/src/utils/importers/fetchClientImporter_1_0.ts @@ -0,0 +1,94 @@ +import { formatDate } from "../helper"; +import { ICollections, IFolder, IHistory } from "../../fetch-client-ui/components/SideBar/redux/types"; +import { InitialSettings } from "../../fetch-client-ui/components/SideBar/redux/reducer"; +import { IRequestModel } from "../../fetch-client-ui/components/RequestUI/redux/types"; +import { isFolder } from "../../fetch-client-ui/components/SideBar/util"; +import { v4 as uuidv4 } from "uuid"; +import { writeLog } from "../logger/logger"; + +export const fetchClientImporter = (parsedData: any): { fcCollection: ICollections, fcRequests: IRequestModel[] } | null => { + try { + let reqData = []; + + let colData: ICollections = { + id: uuidv4(), + name: parsedData.name, + createdTime: formatDate(), + variableId: "", + data: [], + settings: parsedData.settings ? parsedData.settings : JSON.parse(JSON.stringify(InitialSettings)) + }; + + let importedData = parsedData.data; + + importedData.forEach(item => { + item.id = uuidv4(); + item.createdTime = formatDate(); + if (isFolder(item)) { + let importData: any; + let folder: IFolder = { + id: uuidv4(), + name: item.name, + createdTime: formatDate(), + type: "folder", + data: [], + settings: item.settings ? item.settings : JSON.parse(JSON.stringify(InitialSettings)) + }; + ({ importData, reqData } = ImportFolder(item, folder, reqData)); + colData.data.push(importData); + } else { + item.id = uuidv4(); + item.createdTime = formatDate(); + reqData.push(item); + let his: IHistory = { + id: item.id, + method: item.method, + name: item.name, + url: item.url, + createdTime: formatDate() + }; + colData.data.push(his); + } + }); + + return { + fcCollection: colData, + fcRequests: reqData + }; + + } catch (err) { + writeLog("error::fetchClientImporter(): - Error Message : " + err); + return null; + } +}; + +function ImportFolder(source: any, importData: any, reqData: any): any { + for (let i = 0; i < source.data.length; i++) { + if (isFolder(source.data[i])) { + let folder: IFolder = { + id: uuidv4(), + name: source.data[i].name, + createdTime: formatDate(), + type: "folder", + data: [], + settings: source.data[i].settings ? source.data[i].settings : JSON.parse(JSON.stringify(InitialSettings)) + }; + let result = ImportFolder(source.data[i], folder, reqData); + importData.data.push(result.importData); + } else { + source.data[i].id = uuidv4(); + source.data[i].createdTime = formatDate(); + let his: IHistory = { + id: source.data[i].id, + method: source.data[i].method, + name: source.data[i].name, + url: source.data[i].url, + createdTime: source.data[i].createdTime + }; + reqData.push(source.data[i]); + importData.data.push(his); + } + } + + return { importData, reqData }; +} diff --git a/src/utils/importers/postmanImporter_2_1.ts b/src/utils/importers/postmanImporter_2_1.ts new file mode 100644 index 0000000..705c3eb --- /dev/null +++ b/src/utils/importers/postmanImporter_2_1.ts @@ -0,0 +1,457 @@ +import { ICollections, IFolder, IHistory, ISettings, IVariable } from "../../fetch-client-ui/components/SideBar/redux/types"; +import { Auth, Header, Items, PostmanSchema_2_1, RequestObject, URLObject, Variable, Body, POSTMAN_SCHEMA_V2_1 } from "./postman_2_1.types"; +import { v4 as uuidv4 } from "uuid"; +import { formatDate } from "../helper"; +import { InitialSettings } from "../../fetch-client-ui/components/SideBar/redux/reducer"; +import { ClientAuth, GrantType, IAuth, IBodyData, IRequestModel, MethodType } from "../../fetch-client-ui/components/RequestUI/redux/types"; +import { InitialAuth, InitialBody, InitialPreFetch, InitialSetVar, InitialTest } from "../../fetch-client-ui/components/RequestUI/redux/reducer"; +import { ITableData } from "../../fetch-client-ui/components/Common/Table/types"; +import { isJson } from "../../fetch-client-ui/components/TestUI/TestPanel/helper"; +import { XMLValidator } from "fast-xml-parser"; +import { writeLog } from "../logger/logger"; + +export class PostmanImport { + private collection: PostmanSchema_2_1; + + constructor(collection: PostmanSchema_2_1) { + this.collection = collection; + } + + importVariable = (variables: Variable[], name: string): IVariable => { + if (variables?.length === 0) { + return null; + } + + let varData: ITableData[] = []; + for (let i = 0; i < variables.length; i++) { + const key = variables[i].key; + if (key === undefined) { + continue; + } + varData.push({ + isChecked: variables[i].disabled === true ? false : true, + key: key, + value: variables[i].value + }); + } + return { + id: uuidv4(), + name: name, + createdTime: formatDate(), + isActive: true, + data: varData + }; + }; + + getUrl = (url?: URLObject | string) => { + if (!url) { + return ""; + } + + if (typeof url === "object" && url.raw) { + return url.raw; + } + + if (typeof url === "string") { + return url; + } + return ""; + }; + + getParams = (url?: URLObject | string): ITableData[] => { + let fcParams: ITableData[] = []; + + if (url && typeof url === "object" && url.query) { + url.query.forEach(item => { + fcParams.push({ + key: item.key, + value: item.value, + isChecked: item.disabled === true ? false : true + }); + }); + } + return [...fcParams, { + isChecked: false, + key: "", + value: "" + }]; + }; + + getHeders = (headers: Header[] | string): ITableData[] => { + let fcHeaders: ITableData[] = []; + if (headers && typeof headers !== "string") { + (headers as Header[]).forEach(item => { + fcHeaders.push({ + key: item.key, + value: item.value, + isChecked: item.disabled === true ? false : true + }); + }); + } + + return [...fcHeaders, { + isChecked: false, + key: "", + value: "" + }]; + }; + + getAuthDetails = (auth?: Auth | null): IAuth => { + + let fcAuth: IAuth = JSON.parse(JSON.stringify(InitialAuth)); + + if (!auth) { + fcAuth.authType = "inherit"; + return fcAuth; + } + + switch (auth.type) { + case "awsv4": + if (!auth.awsv4) { + return fcAuth; + } + + fcAuth.aws.accessKey = this.findValueByKey(auth.awsv4, "accessKey"); + fcAuth.aws.secretAccessKey = this.findValueByKey(auth.awsv4, "secretKey"); + fcAuth.aws.service = this.findValueByKey(auth.awsv4, "service"); + fcAuth.aws.sessionToken = this.findValueByKey(auth.awsv4, "sessionToken"); + fcAuth.aws.region = this.findValueByKey(auth.awsv4, "region"); + fcAuth.authType = "aws"; + + return fcAuth; + + + case "basic": + if (!auth.basic) { + return fcAuth; + } + + fcAuth.userName = this.findValueByKey(auth.basic, "username"); + fcAuth.password = this.findValueByKey(auth.basic, "password"); + fcAuth.authType = "basic"; + + return fcAuth; + + case "apikey": + if (!auth.apikey) { + return fcAuth; + } + + fcAuth.userName = this.findValueByKey(auth.apikey, "key"); + fcAuth.password = this.findValueByKey(auth.apikey, "value"); + let addToSection = this.findValueByKey(auth.apikey, "in"); + fcAuth.addTo = addToSection === "query" ? "queryparams" : "header"; + fcAuth.authType = "apikey"; + + return fcAuth; + + case "bearer": + if (!auth.bearer) { + return fcAuth; + } + + fcAuth.password = this.findValueByKey(auth.bearer, "token"); + fcAuth.tokenPrefix = "Bearer"; + fcAuth.authType = "bearertoken"; + + return fcAuth; + + case "oauth2": + if (!auth.oauth2) { + return fcAuth; + } + + let grantType = this.findValueByKey(auth.oauth2, "grant_type"); + + if (grantType !== "client_credentials" && grantType !== "password_credentials") { + return fcAuth; + } + + let clientAuth = this.findValueByKey(auth.oauth2, "client_authentication"); + fcAuth.oauth.clientAuth = clientAuth === "body" ? ClientAuth.Body : ClientAuth.Header; + fcAuth.oauth.clientId = this.findValueByKey(auth.oauth2, "clientId"); + fcAuth.oauth.clientSecret = this.findValueByKey(auth.oauth2, "clientSecret"); + fcAuth.oauth.grantType = grantType === "client_credentials" ? GrantType.Client_Crd : GrantType.PWD_Crd; + fcAuth.oauth.password = this.findValueByKey(auth.oauth2, "password"); + fcAuth.oauth.username = this.findValueByKey(auth.oauth2, "username"); + fcAuth.oauth.scope = this.findValueByKey(auth.oauth2, "scope"); + fcAuth.oauth.tokenUrl = this.findValueByKey(auth.oauth2, "accessTokenUrl"); + + let resource = this.findObjectByKey(auth.oauth2, "resource"); + let key = resource ? Object.keys(resource)[0] : ""; + fcAuth.oauth.advancedOpt.resource = resource && key ? resource[key] : ""; + let audience = this.findObjectByKey(auth.oauth2, "audience"); + key = audience ? Object.keys(audience)[0] : ""; + fcAuth.oauth.advancedOpt.audience = audience && key ? audience[key] : ""; + + fcAuth.authType = "oauth2"; + + return fcAuth; + + default: + return fcAuth; + } + }; + + getSrc = (src: any[] | null | string): string => { + if (!src) { + return ""; + } + + if (typeof src === "string") { + return src.length > 1 ? src.substring(1) : src; + } + + if (typeof src === "object") { + return src.length > 0 ? src[0].length > 1 ? src[0].substring(1) : src[0] : ""; + } + }; + + getBody = (body: Body): IBodyData => { + + let fcBody = JSON.parse(JSON.stringify(InitialBody)); + + if (!body) { + return fcBody; + } + + switch (body.mode) { + case 'formdata': + fcBody.bodyType = "formdata"; + fcBody.formdata.shift(); + body.formdata?.forEach(item => { + fcBody.formdata.push({ + isChecked: item.disabled === true ? false : true, + key: item.key, + value: item.type === "file" ? this.getSrc(item.src) : item.value, + type: item.type === "file" ? "File" : "Text" + }); + }); + + fcBody.formdata.push({ + isChecked: false, + key: "", + value: "", + type: "Text" + }); + + return fcBody; + + case 'urlencoded': + fcBody.bodyType = "formurlencoded"; + fcBody.urlencoded.shift(); + body.urlencoded?.forEach(item => { + fcBody.urlencoded.push({ + isChecked: item.disabled === true ? false : true, + key: item.key, + value: item.value + }); + }); + + fcBody.urlencoded.push({ + isChecked: false, + key: "", + value: "" + }); + + return fcBody; + + case 'graphql': + fcBody.bodyType = "graphql"; + fcBody.graphql.query = JSON.stringify(body.graphql.query); + fcBody.graphql.variables = JSON.stringify(body.graphql.variables); + return fcBody; + + case 'raw': + fcBody.bodyType = "raw"; + fcBody.raw.data = body.raw; + fcBody.raw.lang = this.getRawBodyType(body.raw.replace(/(?:\\[rn]|[\r\n]+)+/g, "")); + return fcBody; + + case 'file': + fcBody.bodyType = "binary"; + fcBody.binary.data = body.file.content; + fcBody.binary.fileName = body.file.src.substring(1); + fcBody.binary.contentTypeOption = "manual"; + return fcBody; + + default: + return fcBody; + } + }; + + getRawBodyType = (data: string): string => { + if (isJson(data) === "true") { + return "json"; + } + if (XMLValidator.validate(data) === true) { + return "xml"; + } + if (this.isHTML(data)) { + return "html"; + } + return "text"; + }; + + isHTML = (str: string) => !(str || '') + // replace html tag with content + .replace(/<([^>]+?)([^>]*?)>(.*?)<\/\1>/ig, '') + // remove remaining self closing tags + .replace(/(<([^>]+)>)/ig, '') + // remove extra space at start and end + .trim(); + + findValueByKey = (array?: T[], key?: string,) => { + if (!array) { + return ""; + } + + const obj = array.find(o => o.key === key); + + if (obj && typeof obj.value === "string") { + return obj.value || ""; + } + + return ""; + }; + + findObjectByKey = (array?: T[], key?: string,) => { + if (!array) { + return ""; + } + + const obj = array.find(o => o.key === key); + + if (obj && typeof obj.value === "object") { + return obj.value || undefined; + } + + return {}; + }; + + getHistoryItem = (i: Items, req: IRequestModel[]): IHistory => { + let history: IHistory = { + id: uuidv4(), + name: i.name, + method: (i.request as RequestObject).method, + url: this.getUrl((i.request as RequestObject).url), + createdTime: formatDate() + }; + + let reqObject = i.request as RequestObject; + + if (reqObject) { + let request: IRequestModel = { + id: history.id, + url: history.url, + name: history.name, + createdTime: history.createdTime, + method: history.method as MethodType, + params: this.getParams(reqObject.url), + auth: this.getAuthDetails(reqObject.auth), + headers: this.getHeders(reqObject.header), + body: this.getBody(reqObject.body), + tests: JSON.parse(JSON.stringify(InitialTest)), + setvar: JSON.parse(JSON.stringify(InitialSetVar)), + notes: "", + preFetch: JSON.parse(JSON.stringify(InitialPreFetch)) + }; + + req.push(request); + } + + return history; + }; + + getFolderItem = (items: Items[], requests: IRequestModel[]) => { + return items.map((i: Items) => { + if (Object.prototype.hasOwnProperty.call(i, "request")) { + return this.getHistoryItem(i, requests); + + } else { + let folder: IFolder = { + id: uuidv4(), + name: i.name, + type: "folder", + createdTime: formatDate(), + data: i.item.reduce((accumulator: (IHistory | IFolder)[], item: Items) => { + if (Object.prototype.hasOwnProperty.call(item, "request")) { + return [...accumulator, this.getHistoryItem(item, requests)]; + } + + const requestGroup = this.importFolderItem(item, requests); + return [...accumulator, requestGroup]; + }, []), + settings: JSON.parse(JSON.stringify(InitialSettings)) + }; + return folder; + } + }); + }; + + importFolderItem = (item: Items, requests: IRequestModel[]): IFolder => { + return { + id: uuidv4(), + name: item.name, + type: "folder", + createdTime: formatDate(), + data: this.getFolderItem(item.item, requests), + settings: this.importSettings(item.auth) + }; + }; + + importSettings = (auth: Auth | undefined | null) : ISettings => { + let settings: ISettings = { + auth: this.getAuthDetails(auth) + }; + + return settings; + }; + + importCollection = (): { fcCollection: ICollections, fcRequests: IRequestModel[], fcVariable: IVariable } => { + const variable = this.importVariable(this.collection.variable || [], this.collection.info.name); + + let requests: IRequestModel[] = []; + + let collection: ICollections = { + id: uuidv4(), + name: this.collection.info.name, + createdTime: formatDate(), + variableId: variable ? variable.id : "", + data: [], + settings: this.importSettings(this.collection.auth) + }; + + let data = this.collection.item.reduce((accumulator: (IHistory | IFolder)[], item: Items) => { + if (Object.prototype.hasOwnProperty.call(item, "request")) { + return [...accumulator, this.getHistoryItem(item, requests)]; + } + + const requestGroup = this.importFolderItem(item, requests); + return [...accumulator, requestGroup]; + }, []); + + collection.data = data; + + return { + fcCollection: collection, + fcRequests: requests, + fcVariable: variable + }; + }; +}; + + +export const postmanImporter = (rawData: string): { fcCollection: ICollections, fcRequests: IRequestModel[], fcVariable: IVariable } | null => { + try { + const collection = JSON.parse(rawData) as PostmanSchema_2_1; + if (collection.info.schema === POSTMAN_SCHEMA_V2_1) { + return new PostmanImport(collection).importCollection(); + } + } catch (err) { + writeLog("error::postmanImporter(): - Error Message : " + err); + return null; + } + + return null; +}; \ No newline at end of file diff --git a/src/utils/importers/postman_2_1.types.ts b/src/utils/importers/postman_2_1.types.ts new file mode 100644 index 0000000..5ef40b2 --- /dev/null +++ b/src/utils/importers/postman_2_1.types.ts @@ -0,0 +1,602 @@ +// generated from https://schema.getpostman.com/json/collection/v2.1.0/collection.json +/* eslint-disable */ +export const POSTMAN_SCHEMA_V2_1 = "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"; + +/** + * This file was automatically generated by https://app.quicktype.io/ +**/ + +export interface PostmanSchema_2_1 { + auth?: null | Auth; + event?: Event[]; + info: Information; + /** + * Items are the basic unit for a Postman collection. You can think of them as corresponding + * to a single API endpoint. Each Item has one request and may have multiple API responses + * associated with it. + */ + item: Items[]; + protocolProfileBehavior?: { [key: string]: any }; + variable?: Variable[]; +} + +/** + * Represents authentication helpers provided by Postman + */ +export interface Auth { + /** + * The attributes for API Key Authentication. + */ + apikey?: ApikeyElement[]; + /** + * The attributes for [AWS + * Auth](http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html). + */ + awsv4?: ApikeyElement[]; + /** + * The attributes for [Basic + * Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication). + */ + basic?: ApikeyElement[]; + /** + * The helper attributes for [Bearer Token + * Authentication](https://tools.ietf.org/html/rfc6750) + */ + bearer?: ApikeyElement[]; + /** + * The attributes for [Digest + * Authentication](https://en.wikipedia.org/wiki/Digest_access_authentication). + */ + digest?: ApikeyElement[]; + /** + * The attributes for [Akamai EdgeGrid + * Authentication](https://developer.akamai.com/legacy/introduction/Client_Auth.html). + */ + edgegrid?: ApikeyElement[]; + /** + * The attributes for [Hawk Authentication](https://github.com/hueniverse/hawk) + */ + hawk?: ApikeyElement[]; + noauth?: any; + /** + * The attributes for [NTLM + * Authentication](https://msdn.microsoft.com/en-us/library/cc237488.aspx) + */ + ntlm?: ApikeyElement[]; + /** + * The attributes for [OAuth2](https://oauth.net/1/) + */ + oauth1?: ApikeyElement[]; + /** + * Helper attributes for [OAuth2](https://oauth.net/2/) + */ + oauth2?: ApikeyElement[]; + type: AuthType; +} + +/** + * Represents an attribute for any authorization method provided by Postman. For example + * `username` and `password` are set as auth attributes for Basic Authentication method. + */ +export interface ApikeyElement { + key: string; + type?: string; + value?: any; +} + +export enum AuthType { + Apikey = "apikey", + Awsv4 = "awsv4", + Basic = "basic", + Bearer = "bearer", + Digest = "digest", + Edgegrid = "edgegrid", + Hawk = "hawk", + NTLM = "ntlm", + Noauth = "noauth", + Oauth1 = "oauth1", + Oauth2 = "oauth2", +} + +/** + * Postman allows you to configure scripts to run when specific events occur. These scripts + * are stored here, and can be referenced in the collection by their ID. + * + * Defines a script associated with an associated event name + */ +export interface Event { + /** + * Indicates whether the event is disabled. If absent, the event is assumed to be enabled. + */ + disabled?: boolean; + /** + * A unique identifier for the enclosing event. + */ + id?: string; + /** + * Can be set to `test` or `prerequest` for test scripts or pre-request scripts respectively. + */ + listen: string; + script?: Script; +} + +/** + * A script is a snippet of Javascript code that can be used to to perform setup or teardown + * operations on a particular response. + */ +export interface Script { + exec?: string[] | string; + /** + * A unique, user defined identifier that can be used to refer to this script from requests. + */ + id?: string; + /** + * Script name + */ + name?: string; + src?: URLObject | string; + /** + * Type of the script. E.g: 'text/javascript' + */ + type?: string; +} + +export interface URLObject { + /** + * Contains the URL fragment (if any). Usually this is not transmitted over the network, but + * it could be useful to store this in some cases. + */ + hash?: string; + /** + * The host for the URL, E.g: api.yourdomain.com. Can be stored as a string or as an array + * of strings. + */ + host?: string[] | string; + path?: Array | string; + /** + * The port number present in this URL. An empty value implies 80/443 depending on whether + * the protocol field contains http/https. + */ + port?: string; + /** + * The protocol associated with the request, E.g: 'http' + */ + protocol?: string; + /** + * An array of QueryParams, which is basically the query string part of the URL, parsed into + * separate variables + */ + query?: QueryParam[]; + /** + * The string representation of the request URL, including the protocol, host, path, hash, + * query parameter(s) and path variable(s). + */ + raw?: string; + /** + * Postman supports path variables with the syntax `/path/:variableName/to/somewhere`. These + * variables are stored in this field. + */ + variable?: Variable[]; +} + +export interface PathObject { + type?: string; + value?: string; +} + +export interface QueryParam { + description?: null | Description | string; + /** + * If set to true, the current query parameter will not be sent with the request. + */ + disabled?: boolean; + key?: null | string; + value?: null | string; +} + +export interface Description { + /** + * The content of the description goes here, as a raw string. + */ + content?: string; + /** + * Holds the mime type of the raw description content. E.g: 'text/markdown' or 'text/html'. + * The type is used to correctly render the description when generating documentation, or in + * the Postman app. + */ + type?: string; + /** + * Description can have versions associated with it, which should be put in this property. + */ + version?: any; +} + +/** + * Collection variables allow you to define a set of variables, that are a *part of the + * collection*, as opposed to environments, which are separate entities. + * *Note: Collection variables must not contain any sensitive information.* + * + * Using variables in your Postman requests eliminates the need to duplicate requests, which + * can save a lot of time. Variables can be defined, and referenced to from any part of a + * request. + */ +export interface Variable { + description?: null | Description | string; + disabled?: boolean; + /** + * A variable ID is a unique user-defined value that identifies the variable within a + * collection. In traditional terms, this would be a variable name. + */ + id?: string; + /** + * A variable key is a human friendly value that identifies the variable within a + * collection. In traditional terms, this would be a variable name. + */ + key?: string; + /** + * Variable name + */ + name?: string; + /** + * When set to true, indicates that this variable has been set by Postman + */ + system?: boolean; + /** + * A variable may have multiple types. This field specifies the type of the variable. + */ + type?: VariableType; + /** + * The value that a variable holds in this collection. Ultimately, the variables will be + * replaced by this value, when say running a set of requests from a collection + */ + value?: any; +} + +/** + * A variable may have multiple types. This field specifies the type of the variable. + */ +export enum VariableType { + Any = "any", + Boolean = "boolean", + Number = "number", + String = "string", +} + +/** + * Detailed description of the info block + */ +export interface Information { + /** + * Every collection is identified by the unique value of this field. The value of this field + * is usually easiest to generate using a UID generator function. If you already have a + * collection, it is recommended that you maintain the same id since changing the id usually + * implies that is a different collection than it was originally. + * *Note: This field exists for compatibility reasons with Collection Format V1.* + */ + _postman_id?: string; + description?: null | Description | string; + /** + * A collection's friendly name is defined by this field. You would want to set this field + * to a value that would allow you to easily identify this collection among a bunch of other + * collections, as such outlining its usage or content. + */ + name: string; + /** + * This should ideally hold a link to the Postman schema that is used to validate this + * collection. E.g: https://schema.getpostman.com/collection/v1 + */ + schema: string; + version?: CollectionVersionObject | string; +} + +export interface CollectionVersionObject { + /** + * A human friendly identifier to make sense of the version numbers. E.g: 'beta-3' + */ + identifier?: string; + /** + * Increment this number if you make changes to the collection that changes its behaviour. + * E.g: Removing or adding new test scripts. (partly or completely). + */ + major: number; + meta?: any; + /** + * You should increment this number if you make changes that will not break anything that + * uses the collection. E.g: removing a folder. + */ + minor: number; + /** + * Ideally, minor changes to a collection should result in the increment of this number. + */ + patch: number; +} + +/** + * Items are entities which contain an actual HTTP request, and sample responses attached to + * it. + * + * One of the primary goals of Postman is to organize the development of APIs. To this end, + * it is necessary to be able to group requests together. This can be achived using + * 'Folders'. A folder just is an ordered set of requests. + */ +export interface Items { + description?: null | Description | string; + event?: Event[]; + /** + * A unique ID that is used to identify collections internally + */ + id?: string; + /** + * A human readable identifier for the current item. + * + * A folder's friendly name is defined by this field. You would want to set this field to a + * value that would allow you to easily identify this folder. + */ + name?: string; + protocolProfileBehavior?: { [key: string]: any }; + request?: RequestObject | string; + response?: Array; + variable?: Variable[]; + auth?: null | Auth; + /** + * Items are entities which contain an actual HTTP request, and sample responses attached to + * it. Folders may contain many items. + */ + item?: Items[]; +} + +export interface RequestObject { + auth?: null | Auth; + body?: null | Body; + certificate?: Certificate; + description?: null | Description | string; + header?: Header[] | string; + method?: string; + proxy?: ProxyConfig; + url?: URLObject | string; +} + +/** + * This field contains the data usually contained in the request body. + */ +export interface Body { + /** + * When set to true, prevents request body from being sent. + */ + disabled?: boolean; + file?: File; + formdata?: FormParameter[]; + graphql?: { [key: string]: any }; + /** + * Postman stores the type of data associated with this request in this field. + */ + mode?: Mode; + /** + * Additional configurations and options set for various body modes. + */ + options?: { [key: string]: any }; + raw?: string; + urlencoded?: URLEncodedParameter[]; +} + +export interface File { + content?: string; + src?: null | string; +} + +export interface FormParameter { + /** + * Override Content-Type header of this form data entity. + */ + contentType?: string; + description?: null | Description | string; + /** + * When set to true, prevents this form data entity from being sent. + */ + disabled?: boolean; + key: string; + type?: FormParameterType; + value?: string; + src?: any[] | null | string; +} + +export enum FormParameterType { + File = "file", + Text = "text", +} + +/** + * Postman stores the type of data associated with this request in this field. + */ +export enum Mode { + File = "file", + Formdata = "formdata", + Graphql = "graphql", + Raw = "raw", + Urlencoded = "urlencoded", +} + +export interface URLEncodedParameter { + description?: null | Description | string; + disabled?: boolean; + key: string; + value?: string; +} + +/** + * A representation of an ssl certificate + */ +export interface Certificate { + /** + * An object containing path to file certificate, on the file system + */ + cert?: CERT; + /** + * An object containing path to file containing private key, on the file system + */ + key?: Key; + /** + * A list of Url match pattern strings, to identify Urls this certificate can be used for. + */ + matches?: string[]; + /** + * A name for the certificate for user reference + */ + name?: string; + /** + * The passphrase for the certificate + */ + passphrase?: string; +} + +/** + * An object containing path to file certificate, on the file system + */ +export interface CERT { + /** + * The path to file containing key for certificate, on the file system + */ + src?: any; +} + +/** + * An object containing path to file containing private key, on the file system + */ +export interface Key { + /** + * The path to file containing key for certificate, on the file system + */ + src?: any; +} + +/** + * A representation for a list of headers + * + * Represents a single HTTP Header + */ +export interface Header { + description?: null | Description | string; + /** + * If set to true, the current header will not be sent with requests. + */ + disabled?: boolean; + /** + * This holds the LHS of the HTTP Header, e.g ``Content-Type`` or ``X-Custom-Header`` + */ + key: string; + /** + * The value (or the RHS) of the Header is stored in this field. + */ + value: string; +} + +/** + * Using the Proxy, you can configure your custom proxy into the postman for particular url + * match + */ +export interface ProxyConfig { + /** + * When set to true, ignores this proxy configuration entity + */ + disabled?: boolean; + /** + * The proxy server host + */ + host?: string; + /** + * The Url match for which the proxy config is defined + */ + match?: string; + /** + * The proxy server port + */ + port?: number; + /** + * The tunneling details for the proxy config + */ + tunnel?: boolean; +} + +export interface ResponseObject { + /** + * The raw text of the response. + */ + body?: null | string; + /** + * The numerical response code, example: 200, 201, 404, etc. + */ + code?: number; + cookie?: Cookie[]; + header?: Array
| null | string; + /** + * A unique, user defined identifier that can be used to refer to this response from + * requests. + */ + id?: string; + originalRequest?: RequestObject | string; + /** + * The time taken by the request to complete. If a number, the unit is milliseconds. If the + * response is manually created, this can be set to `null`. + */ + responseTime?: number | null | string; + /** + * The response status, e.g: '200 OK' + */ + status?: string; + /** + * Set of timing information related to request and response in milliseconds + */ + timings?: { [key: string]: any } | null; +} + +/** + * A Cookie, that follows the [Google Chrome + * format](https://developer.chrome.com/extensions/cookies) + */ +export interface Cookie { + /** + * The domain for which this cookie is valid. + */ + domain: string; + /** + * When the cookie expires. + */ + expires?: number | string; + /** + * Custom attributes for a cookie go here, such as the [Priority + * Field](https://code.google.com/p/chromium/issues/detail?id=232693) + */ + extensions?: any[]; + /** + * True if the cookie is a host-only cookie. (i.e. a request's URL domain must exactly match + * the domain of the cookie). + */ + hostOnly?: boolean; + /** + * Indicates if this cookie is HTTP Only. (if True, the cookie is inaccessible to + * client-side scripts) + */ + httpOnly?: boolean; + maxAge?: string; + /** + * This is the name of the Cookie. + */ + name?: string; + /** + * The path associated with the Cookie. + */ + path: string; + /** + * Indicates if the 'secure' flag is set on the Cookie, meaning that it is transmitted over + * secure connections only. (typically HTTPS) + */ + secure?: boolean; + /** + * True if the cookie is a session cookie. + */ + session?: boolean; + /** + * The value of the Cookie. + */ + value?: string; +} diff --git a/src/utils/logger/requestLog.ts b/src/utils/logger/requestLog.ts new file mode 100644 index 0000000..60247a8 --- /dev/null +++ b/src/utils/logger/requestLog.ts @@ -0,0 +1,66 @@ +import { vsCodeLogger } from "../../extension"; +import { ITableData } from "../../fetch-client-ui/components/Common/Table/types"; +import { IRequestModel } from "../../fetch-client-ui/components/RequestUI/redux/types"; +import { formatDateWithMs } from "../helper"; +import { getLogOption } from "../vscodeConfig"; +import { writeLog } from "./logger"; + +export function logDetails(request: IRequestModel, reqHeaders: {}, requestBody: any, responseStatus: number, responseHeaders: ITableData[], responseData: any) { + logRequestDeatils(request, reqHeaders, requestBody); + if (getLogOption()) { + logResponseDeatils(responseStatus, responseHeaders, responseData); + } +} + +function logRequestDeatils(request: IRequestModel, reqHeaders: {}, requestBody: any) { + try { + let reqLog = `\n\n-----------------------------------------------------------------------------`; + reqLog = reqLog + `\n▶ ${request.method.toUpperCase()} ${request.url}\n`; + reqLog = reqLog + `-----------------------------------------------------------------------------\n`; + reqLog = reqLog + `𝘙𝘦𝘲𝘶𝘦𝘴𝘵 𝘋𝘦𝘵𝘢𝘪𝘭𝘴: \n Url: ${request.url}\n Method: ${request.method.toUpperCase()}\n`; + reqLog = reqLog + ` Time: ${formatDateWithMs()}\n`; + if (request.headers.filter(i => i.isChecked)?.length > 0) { + reqLog = reqLog + ` Request Headers:`; + for (var prop in reqHeaders) { + reqLog = reqLog + `\n ${prop}: "${reqHeaders[prop]}"`; + } + } + + if (requestBody) { + reqLog = reqLog + `\n Request Body:\n`; + if (request.body.bodyType === "binary") { + reqLog = reqLog + ` src: ${request.body.binary.fileName}\n`; + } else if (request.body.bodyType === "formurlencoded") { + reqLog = reqLog + ` ${decodeURIComponent(requestBody.toString().replace(/\+/g, ' '))}`; + } else if (request.body.bodyType === "formdata") { + reqLog = reqLog + ` ${requestBody.getBuffer()}`; + } else { + reqLog = reqLog + ` ${requestBody}`; + } + } + + vsCodeLogger.log("INFO", reqLog); + + } catch (err) { + writeLog("error::logRequestDeatils(): " + err); + } +} + +function logResponseDeatils(status: number, headers: ITableData[], responseData: any) { + try { + let resLog = `\n𝘙𝘦𝘴𝘱𝘰𝘯𝘴𝘦 𝘋𝘦𝘵𝘢𝘪𝘭𝘴: \n Status: ${status} ${status <= 399 ? "✅" : "❌"}\n`; + if (headers.length > 0) { + resLog = resLog + ` Response Headers:\n`; + headers.forEach(({ key, value }) => { + resLog = resLog + ` ${key}: "${value}"\n`; + }); + } + + resLog = resLog + ` Response Body:\n`; + resLog = resLog + ` ${responseData}`; + + vsCodeLogger.log("INFO", resLog); + } catch (err) { + writeLog("error::logResponseDeatils(): " + err); + } +} \ No newline at end of file diff --git a/src/utils/logger/vsCodeLogger.ts b/src/utils/logger/vsCodeLogger.ts new file mode 100644 index 0000000..da0fb6f --- /dev/null +++ b/src/utils/logger/vsCodeLogger.ts @@ -0,0 +1,73 @@ +import * as vscode from 'vscode'; + +export class VSCodeLogger { + + private _logChannel: vscode.OutputChannel; + private _isOpen = false; + + constructor() { + this._logChannel = vscode.window.createOutputChannel("Fetch Client"); + } + + public showLog() { + if (this._logChannel) { + this._isOpen ? this._logChannel.hide() : this._logChannel.show(); + this._isOpen = !this._isOpen; + } + } + + public log(category: string, ...o: any) { + switch (category.toLowerCase()) { + case 'info': + o.map((args: any) => { + this._logChannel.appendLine('' + this.mapObject(args)); + }); + return; + + case 'warn': + o.map((args: any) => { + this._logChannel.appendLine('' + this.mapObject(args)); + }); + return; + + case 'error': + let err: string = ''; + o.map((args: any) => { + err += this.mapObject(args); + }); + this._logChannel.appendLine(err); + vscode.window.showErrorMessage(err, { modal: true }); + return; + + default: + this._logChannel.appendLine(this.mapObject(category)); + o.map((args: any) => { + this._logChannel.appendLine('' + this.mapObject(args)); + }); + return; + } + } + + private mapObject(obj: any) { + switch (typeof obj) { + case 'undefined': + return 'undefined'; + + case 'string': + return obj; + + case 'number': + return obj.toString; + + case 'object': + let ret: string = ''; + for (const [key, value] of Object.entries(obj)) { + ret += (`${key}: ${value}\n`); + } + return ret; + + default: + return obj; + } + } +}; diff --git a/src/utils/ui/addToCollectionUIProvider.tsx b/src/utils/ui/addToCollectionUIProvider.tsx index 90f047a..33bca89 100644 --- a/src/utils/ui/addToCollectionUIProvider.tsx +++ b/src/utils/ui/addToCollectionUIProvider.tsx @@ -1,12 +1,12 @@ import * as vscode from 'vscode'; import fs from "fs"; import { getStorageManager, OpenExistingItem, sideBarProvider } from '../../extension'; -import { getNonce, requestTypes } from '../configuration'; +import { getNonce, requestTypes, responseTypes } from '../configuration'; import { AddToCollection, AttachVariable, CopyToCollection, ExecuteMultipleRequest, ExecuteRequest, GetAllCollectionName, GetAllCollectionsById, GetCollectionSettings, GetParentSettings, SaveCollectionSettings } from '../db/collectionDBUtil'; import { GetHistoryById } from '../db/historyDBUtil'; import { GetAllVariable, GetVariableById, UpdateVariable } from '../db/varDBUtil'; -import { apiFetch } from '../fetchUtil'; -import { getTimeOut } from '../vscodeConfig'; +import { apiFetch, FetchConfig } from '../fetchUtil'; +import { getHeadersConfiguration, getTimeOutConfiguration } from '../vscodeConfig'; import { writeLog } from '../logger/logger'; export const AddToColUI = (extensionUri: any) => { @@ -45,78 +45,84 @@ export const AddToColUI = (extensionUri: any) => { `; + let fetchConfig: FetchConfig = { + timeOut: getTimeOutConfiguration(), + headersCase: getHeadersConfiguration(), + source: null + }; - - colPanel.webview.onDidReceiveMessage((reqData: any) => { - if (reqData.type === requestTypes.getAllCollectionNameRequest) { - GetAllCollectionName(colPanel.webview, reqData.data); - } else if (reqData.type === requestTypes.getHistoryItemRequest) { - GetHistoryById(reqData.data, colPanel.webview); - } else if (reqData.type === requestTypes.addToCollectionsRequest) { - AddToCollection(reqData.data.col, reqData.data.hasFolder, reqData.data.isNewFolder, colPanel.webview, sideBarProvider.view); - } else if (reqData.type === requestTypes.copyToCollectionsRequest) { - CopyToCollection(reqData.data.sourceId, reqData.data.distId, reqData.data.name, colPanel.webview, sideBarProvider.view); - } else if (reqData.type === requestTypes.getAllVariableRequest) { + colPanel.webview.onDidReceiveMessage((message: any) => { + if (message.type === requestTypes.getAllCollectionNameRequest) { + GetAllCollectionName(colPanel.webview, message.data); + } else if (message.type === requestTypes.getHistoryItemRequest) { + GetHistoryById(message.data, colPanel.webview); + } else if (message.type === requestTypes.addToCollectionsRequest) { + AddToCollection(message.data.col, message.data.hasFolder, message.data.isNewFolder, colPanel.webview, sideBarProvider.view); + } else if (message.type === requestTypes.copyToCollectionsRequest) { + CopyToCollection(message.data.sourceId, message.data.distId, message.data.name, colPanel.webview, sideBarProvider.view); + } else if (message.type === requestTypes.getAllVariableRequest) { GetAllVariable(colPanel.webview); - } else if (reqData.type === requestTypes.attachVariableRequest) { - AttachVariable(reqData.data.colId, reqData.data.varId, colPanel.webview, sideBarProvider.view); - } else if (reqData.type === requestTypes.getCollectionsByIdRequest) { - GetAllCollectionsById(reqData.data.colId, reqData.data.folderId, reqData.data.type, colPanel.webview); - } else if (reqData.type === requestTypes.apiRequest) { - const timeOut = getTimeOut(); - if (reqData.data.reqData.auth.authType === "inherit") { - ExecuteRequest(reqData, timeOut, colPanel.webview); + } else if (message.type === requestTypes.attachVariableRequest) { + AttachVariable(message.data.colId, message.data.varId, colPanel.webview, sideBarProvider.view); + } else if (message.type === requestTypes.getCollectionsByIdRequest) { + GetAllCollectionsById(message.data.colId, message.data.folderId, message.data.type, colPanel.webview); + } else if (message.type === requestTypes.apiRequest) { + if (message.data.message.auth.authType === "inherit") { + ExecuteRequest(message, fetchConfig, colPanel.webview); } else { - apiFetch(reqData.data.reqData, timeOut, null, reqData.data.variableData, null).then((data) => { + apiFetch(message.data.reqData, message.data.variableData, null, fetchConfig).then((data) => { colPanel.webview.postMessage(data); }); } - } else if (reqData.type === requestTypes.multipleApiRequest) { - const timeOut = getTimeOut(); - ExecuteMultipleRequest(reqData, timeOut, colPanel.webview); - } else if (reqData.type === requestTypes.getAllVariableRequest) { + } else if (message.type === requestTypes.multipleApiRequest) { + ExecuteMultipleRequest(message, fetchConfig, colPanel.webview); + } else if (message.type === requestTypes.getAllVariableRequest) { GetAllVariable(colPanel.webview); - } else if (reqData.type === requestTypes.openRunRequest) { - getStorageManager().setValue("run-request", reqData.data.reqData); - getStorageManager().setValue("run-response", reqData.data.resData); - OpenExistingItem(reqData.data.reqData.id, reqData.data.reqData.name, reqData.data.colId, reqData.data.folderId, reqData.data.varId, "runopen"); - } else if (reqData.type === requestTypes.exportRunTestJsonRequest) { - vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-collection-report-" + reqData.name + ".json"), filters: { 'Json Files': ['json'] } }).then((uri: vscode.Uri | undefined) => { + } else if (message.type === requestTypes.openRunRequest) { + getStorageManager().setValue("run-request", message.data.reqData); + getStorageManager().setValue("run-response", message.data.resData); + OpenExistingItem(message.data.message.id, message.data.message.name, message.data.colId, message.data.folderId, message.data.varId, "runopen"); + } else if (message.type === requestTypes.exportRunTestJsonRequest) { + vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-collection-report-" + message.name + ".json"), filters: { 'Json Files': ['json'] } }).then((uri: vscode.Uri | undefined) => { if (uri) { const value = uri.fsPath; - fs.writeFile(value, JSON.stringify(reqData.data), (error) => { + fs.writeFile(value, JSON.stringify(message.data), (error) => { if (error) { - vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message); + vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message, { modal: true }); writeLog("error::ExportVariable()::FileWrite()" + error.message); } else { - vscode.window.showInformationMessage("Successfully saved to '" + value + "'."); + vscode.window.showInformationMessage("Successfully saved to '" + value + "'.", { modal: true }); } }); } }); - } else if (reqData.type === requestTypes.exportRunTestCSVRequest) { - vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-collection-report-" + reqData.name + ".csv"), filters: { 'CSV': ['csv'] } }).then((uri: vscode.Uri | undefined) => { + } else if (message.type === requestTypes.exportRunTestCSVRequest) { + vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-collection-report-" + message.name + ".csv"), filters: { 'CSV': ['csv'] } }).then((uri: vscode.Uri | undefined) => { if (uri) { const value = uri.fsPath; - fs.writeFile(value, reqData.data.toString(), (error) => { + fs.writeFile(value, message.data.toString(), (error) => { if (error) { - vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message); + vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message, { modal: true }); writeLog("error::ExportVariable()::FileWrite()" + error.message); } else { - vscode.window.showInformationMessage("Successfully saved to '" + value + "'."); + vscode.window.showInformationMessage("Successfully saved to '" + value + "'.", { modal: true }); } }); } }); - } else if (reqData.type === requestTypes.saveColSettingsRequest) { - SaveCollectionSettings(colPanel.webview, reqData.data.colId, reqData.data.folderId, reqData.data.settings); - } else if (reqData.type === requestTypes.getColSettingsRequest) { - GetCollectionSettings(colPanel.webview, reqData.data.colId, reqData.data.folderId); - } else if (reqData.type === requestTypes.updateVariableRequest) { - UpdateVariable(reqData.data, null); - } else if (reqData.type === requestTypes.getVariableItemRequest) { - GetVariableById(reqData.data.id, reqData.data.isGlobal, colPanel.webview); + } else if (message.type === requestTypes.saveColSettingsRequest) { + SaveCollectionSettings(colPanel.webview, message.data.colId, message.data.folderId, message.data.settings); + } else if (message.type === requestTypes.getColSettingsRequest) { + GetCollectionSettings(colPanel.webview, message.data.colId, message.data.folderId); + } else if (message.type === requestTypes.updateVariableRequest) { + UpdateVariable(message.data, null); + } else if (message.type === requestTypes.getVariableItemRequest) { + GetVariableById(message.data.id, message.data.isGlobal, colPanel.webview); + } else if (message.type === requestTypes.tokenRequest) { + apiFetch(message.data.reqData, message.data.variableData, message.data.settings, fetchConfig, responseTypes.tokenResponse).then((data) => { + colPanel.webview.postMessage(data); + }); } }); }); diff --git a/src/utils/ui/cookieUIProvider.tsx b/src/utils/ui/cookieUIProvider.tsx index 166afd5..3a8f41a 100644 --- a/src/utils/ui/cookieUIProvider.tsx +++ b/src/utils/ui/cookieUIProvider.tsx @@ -62,6 +62,6 @@ export const CookieUI = (extensionUri: any) => { }; async function showConfirmationBox(text: string) { - const res = await vscode.window.showWarningMessage(text, "Yes", "No"); + const res = await vscode.window.showWarningMessage(text, { modal: true }, "Yes", "No"); return res; } \ No newline at end of file diff --git a/src/utils/ui/curlUIProvider.tsx b/src/utils/ui/curlUIProvider.tsx index cb40ef2..f6e63d8 100644 --- a/src/utils/ui/curlUIProvider.tsx +++ b/src/utils/ui/curlUIProvider.tsx @@ -3,9 +3,9 @@ import { OpenExistingItem, sideBarProvider } from '../../extension'; import { getNonce, requestTypes, responseTypes } from '../configuration'; import { ConvertCurlToRequest } from '../curlToRequest'; import { AddToCollection, GetAllCollectionName } from '../db/collectionDBUtil'; -import { apiFetch } from '../fetchUtil'; +import { apiFetch, FetchConfig } from '../fetchUtil'; import { getErrorResponse } from '../helper'; -import { getTimeOut } from '../vscodeConfig'; +import { getHeadersConfiguration, getTimeOutConfiguration } from '../vscodeConfig'; export const CurlProviderUI = (extensionUri: any) => { const disposable = vscode.commands.registerCommand('fetch-client.curlRequest', () => { @@ -43,9 +43,14 @@ export const CurlProviderUI = (extensionUri: any) => { `; + let fetchConfig: FetchConfig = { + timeOut: getTimeOutConfiguration(), + headersCase: getHeadersConfiguration(), + source: null + }; + curlPanel.webview.onDidReceiveMessage((reqData: any) => { if (reqData.type === requestTypes.runCurlRequest) { - const timeOut = getTimeOut(); let req = ConvertCurlToRequest(reqData.data); if (!req || !req.url) { let apiResponse = getErrorResponse(); @@ -53,7 +58,7 @@ export const CurlProviderUI = (extensionUri: any) => { curlPanel.webview.postMessage({ type: responseTypes.runCurlResponse, request: null, response: apiResponse }); return; } - apiFetch(req, timeOut, null, null, null).then((data) => { + apiFetch(req, null, null, fetchConfig).then((data) => { curlPanel.webview.postMessage({ type: responseTypes.runCurlResponse, request: req, response: data }); }); } else if (reqData.type === requestTypes.convertCurlToJsonRequest) { @@ -84,8 +89,3 @@ export const CurlProviderUI = (extensionUri: any) => { return disposable; }; - -async function showConfirmationBox(text: string) { - const res = await vscode.window.showWarningMessage(text, "Yes", "No"); - return res; -} \ No newline at end of file diff --git a/src/utils/ui/mainUIProvider.tsx b/src/utils/ui/mainUIProvider.tsx index e7b4df1..0fab8a7 100644 --- a/src/utils/ui/mainUIProvider.tsx +++ b/src/utils/ui/mainUIProvider.tsx @@ -1,212 +1,363 @@ -import * as vscode from 'vscode'; +import { apiFetch, FetchConfig } from "../fetchUtil"; +import { formatDate, getErrorResponse } from "../helper"; +import { getLayoutConfiguration, getConfiguration, getHeadersConfiguration, getTimeOutConfiguration, getRequestTabOption, getVSCodeTheme, getRunMainRequestOption } from "../vscodeConfig"; +import { getNonce, pubSubTypes, requestTypes, responseTypes } from "../configuration"; +import { GetVariableById, GetAllVariable, UpdateVariable } from "../db/varDBUtil"; +import { IHistory } from "../../fetch-client-ui/components/SideBar/redux/types"; +import { IRequestModel } from "../../fetch-client-ui/components/RequestUI/redux/types"; +import { SaveCookie, GetAllCookies } from "../db/cookieDBUtil"; +import { SaveHistory, UpdateHistory } from "../db/historyDBUtil"; +import { SaveRequest, UpdateRequest, GetExitingItem } from "../db/mainDBUtil"; +import { sideBarProvider, getStorageManager, OpenVariableUI, OpenCookieUI, pubSub, vsCodeLogger } from "../../extension"; +import { IPubSubMessage, Subscription } from "../PubSub"; +import { UpdateCollection, GetParentSettings, GetAllCollectionsByIdWithPath, GetAllCollectionName } from "../db/collectionDBUtil"; +import { writeLog } from "../logger/logger"; +import * as vscode from "vscode"; +import axios from "axios"; import fs from "fs"; -import { IRequestModel } from '../../fetch-client-ui/components/RequestUI/redux/types'; -import { IHistory } from '../../fetch-client-ui/components/SideBar/redux/types'; -import { getNonce, requestTypes, responseTypes } from '../configuration'; -import { SaveHistory, UpdateHistory } from '../db/historyDBUtil'; -import { GetExitingItem, SaveRequest, UpdateRequest } from '../db/mainDBUtil'; -import { apiFetch } from '../fetchUtil'; -import { getConfiguration, getLayoutConfiguration, getTimeOutConfiguration } from '../vscodeConfig'; -import { SideBarProvider } from './sideBarUIProvider'; -import axios, { CancelTokenSource } from 'axios'; -import { writeLog } from '../logger/logger'; -import { GetAllVariable, GetVariableById, UpdateVariable } from '../db/varDBUtil'; -import { getTimeOut } from '../vscodeConfig'; -import { getStorageManager, OpenCookieUI, OpenVariableUI } from '../../extension'; -import { formatDate } from '../helper'; -import { GetParentSettings, UpdateCollection } from '../db/collectionDBUtil'; -import { GetAllCookies, SaveCookie } from '../db/cookieDBUtil'; - -export const MainUIProvider = (extensionUri: any, sideBarProvider: SideBarProvider) => { - const disposable = vscode.commands.registerCommand('fetch-client.newRequest', (id?: string, name?: string, colId?: string, varId?: string, type?: string, folderId?: string,) => { - const uiPanel = vscode.window.createWebviewPanel( +import { PreFetchRunner } from "../PreFetchRunner"; + +export class WebAppPanel { + + public static currentPanel: WebAppPanel | undefined; + private readonly _panel: vscode.WebviewPanel; + private readonly _extensionUri: vscode.Uri; + private _disposables: vscode.Disposable[] = []; + + private _scriptionId: Subscription; + + public static createOrShow(extensionUri: vscode.Uri, id?: string, name?: string, colId?: string, varId?: string, type?: string, folderId?: string, newTab?: boolean) { + const column = vscode.window.activeTextEditor + ? vscode.window.activeTextEditor.viewColumn : undefined; + + let tabOption = getRequestTabOption(); + + if (!tabOption && !newTab && WebAppPanel.currentPanel) { + WebAppPanel.currentPanel._update(id, colId, varId, type, folderId); + WebAppPanel.currentPanel._panel.reveal(column); + WebAppPanel.currentPanel._panel.title = name ? name : "New Request"; + return; + } + + const panel = vscode.window.createWebviewPanel( "fetch-client", name ? name : "New Request", vscode.ViewColumn.One, { enableScripts: true, retainContextWhenHidden: true } ); - const scriptUri = uiPanel.webview.asWebviewUri( - vscode.Uri.joinPath(extensionUri, "dist/fetch-client-ui.js") - ); + const iconUri = vscode.Uri.joinPath(extensionUri, "icons/fetch-client.png"); + panel.iconPath = iconUri; - const styleUri = uiPanel.webview.asWebviewUri(vscode.Uri.joinPath(extensionUri, "/dist/main.css")); + WebAppPanel.currentPanel = new WebAppPanel(panel, extensionUri, id, colId, varId, type, folderId); + } - const nonce = getNonce(); + public static kill() { + WebAppPanel.currentPanel?.dispose(); + WebAppPanel.currentPanel = undefined; + } - const iconUri = vscode.Uri.joinPath(extensionUri, "icons/fetch-client.png"); - uiPanel.iconPath = iconUri; - - uiPanel.webview.html = ` - - - - - - ${id}:${colId}:${varId}:${type}:${folderId} - - - -
- - - `; - - const timeOut = getTimeOut(); - let source: CancelTokenSource; - - uiPanel.webview.onDidReceiveMessage((message: any) => { - if (message.type === requestTypes.apiRequest) { - const CancelToken = axios.CancelToken; - source = CancelToken.source(); - - apiFetch(message.data.reqData, timeOut, source, message.data.variableData, message.data.settings).then((data) => { - uiPanel.webview.postMessage(data); - - let item: IHistory = { - id: message.data.reqData.id, - method: message.data.reqData.method, - name: message.data.reqData.name ? message.data.reqData.name : message.data.reqData.url, - url: message.data.reqData.url, - createdTime: message.data.reqData.createdTime ? message.data.reqData.createdTime : formatDate() - }; - - let reqData = message.data.reqData as IRequestModel; - if (reqData.body.bodyType === "binary") { - reqData.body.binary.data = ""; - } + public static getCurrentWebView() { + if (WebAppPanel.currentPanel) { return WebAppPanel.currentPanel._panel.webview; } - if (message.data.isNew) { - SaveRequest(reqData); - SaveHistory(item, sideBarProvider.view); - } else { - UpdateRequest(reqData); - UpdateHistory(item); - } - }); - } else if (message.type === requestTypes.cancelRequest) { - if (source) { - source.cancel("The request has been cancelled by the user."); - } - } else if (message.type === requestTypes.layoutConfigRequest) { - uiPanel.webview.postMessage(getLayoutConfiguration()); - } else if (message.type === requestTypes.configRequest) { - uiPanel.webview.postMessage(getConfiguration()); - } else if (message.type === requestTypes.openExistingItemRequest) { - GetExitingItem(uiPanel.webview, message.data); - } else if (message.type === requestTypes.saveResponseRequest) { - vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-response." + message.fileType) }).then((uri: vscode.Uri | undefined) => { - if (uri) { - const value = uri.fsPath; - fs.writeFile(value, message.data, (error) => { - if (error) { - vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message); - writeLog("error::saveResponseRequest()::FileWrite()" + error.message); - } else { - vscode.window.showInformationMessage("Successfully saved to '" + value + "'."); + return null; + } + + private constructor( + panel: vscode.WebviewPanel, + extensionUri: vscode.Uri, + id?: string, + colId?: string, + varId?: string, + type?: string, + folderId?: string + ) { + this._panel = panel; + this._extensionUri = extensionUri; + + this._update(id, colId, varId, type, folderId); + + this._pushMessages = this._pushMessages.bind(this); + + this._scriptionId = pubSub.subscribe(this._pushMessages); + + this._panel.onDidDispose(() => { + this._scriptionId.unsubscribe(); + this.dispose(); + }, null, this._disposables); + + this._panel.onDidChangeViewState(function (event) { + if (event.webviewPanel.active) { + sideBarProvider.view.webview.postMessage({ type: requestTypes.selectItemRequest, colId: colId, folId: folderId, id: id }); + } + }, null, this._disposables); + + let fetchConfig: FetchConfig = { + timeOut: getTimeOutConfiguration(), + headersCase: getHeadersConfiguration(), + runMainRequest: getRunMainRequestOption() + }; + + // Handle messages from the webview + this._panel.webview.onDidReceiveMessage( + message => { + try { + if (message.type === requestTypes.apiRequest) { + const CancelToken = axios.CancelToken; + fetchConfig.source = CancelToken.source(); + + let request = message.data.reqData as IRequestModel; + let preFetch = request.preFetch; + + if (preFetch?.requests?.length > 0 && preFetch?.requests[0].reqId) { + let preFetchRunner = new PreFetchRunner(fetchConfig, request.id); + preFetchRunner.RunPreRequests(preFetch, 0, 0, request.name).then(() => { + if (preFetchRunner.message) { + if (fetchConfig.runMainRequest === true) { + setTimeout(() => { + vsCodeLogger.log("INFO", "\n\n" + preFetchRunner.message + "\n"); + }, 1000); + this._executeAPIRequest(message, fetchConfig); + } else { + fetchConfig.source = null; + let errorResponse = getErrorResponse(); + errorResponse.response.responseData = preFetchRunner.message; + this._panel.webview.postMessage(errorResponse); + return; + } + } else { + this._executeAPIRequest(message, fetchConfig); + } + }); + } else { + this._executeAPIRequest(message, fetchConfig); + } + } else if (message.type === requestTypes.cancelRequest) { + if (fetchConfig.source) { + fetchConfig.source.cancel("The request has been cancelled by the user."); + } + } else if (message.type === requestTypes.layoutConfigRequest) { + this._panel.webview.postMessage(getLayoutConfiguration()); + } else if (message.type === requestTypes.configRequest) { + this._panel.webview.postMessage(getConfiguration()); + } else if (message.type === requestTypes.openExistingItemRequest) { + GetExitingItem(this._panel.webview, message.data); + } else if (message.type === requestTypes.saveResponseRequest) { + vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-response." + message.fileType) }).then((uri: vscode.Uri | undefined) => { + if (uri) { + const value = uri.fsPath; + fs.writeFile(value, message.data, (error) => { + if (error) { + vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message, { modal: true }); + writeLog("error::saveResponseRequest()::FileWrite()" + error.message); + } else { + vscode.window.showInformationMessage("Successfully saved to '" + value + "'.", { modal: true }); + } + }); } }); - } - }); - } else if (message.type === requestTypes.saveTestResponseRequest) { - vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-tests.json") }).then((uri: vscode.Uri | undefined) => { - if (uri) { - const value = uri.fsPath; - fs.writeFile(value, message.data, (error) => { - if (error) { - vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message); - writeLog("error::saveTestResponseRequest()::FileWrite()" + error.message); - } else { - vscode.window.showInformationMessage("Successfully saved to '" + value + "'."); + } else if (message.type === requestTypes.saveTestResponseRequest) { + vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-tests.json") }).then((uri: vscode.Uri | undefined) => { + if (uri) { + const value = uri.fsPath; + fs.writeFile(value, message.data, (error) => { + if (error) { + vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message, { modal: true }); + writeLog("error::saveTestResponseRequest()::FileWrite()" + error.message); + } else { + vscode.window.showInformationMessage("Successfully saved to '" + value + "'.", { modal: true }); + } + }); } }); - } - }); - } else if (message.type === requestTypes.downloadFileTypeRequest) { - vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-file." + message.fileType) }).then((uri: vscode.Uri | undefined) => { - if (uri) { - const value = uri.fsPath; - fs.writeFile(value, new Uint8Array(message.resData.data), (error) => { - if (error) { - vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message); - writeLog("error::downloadFileTypeRequest()::FileWrite()" + error.message); - } else { - vscode.window.showInformationMessage("Successfully saved to '" + value + "'."); + } else if (message.type === requestTypes.downloadFileTypeRequest) { + vscode.window.showSaveDialog({ defaultUri: vscode.Uri.file("fetch-client-file." + message.fileType) }).then((uri: vscode.Uri | undefined) => { + if (uri) { + const value = uri.fsPath; + fs.writeFile(value, new Uint8Array(message.resData.data), (error) => { + if (error) { + vscode.window.showErrorMessage("Could not save to '" + value + "'. Error Message : " + error.message), { modal: true }; + writeLog("error::downloadFileTypeRequest()::FileWrite()" + error.message); + } else { + vscode.window.showInformationMessage("Successfully saved to '" + value + "'.", { modal: true }); + } + }); } }); + } else if (message.type === requestTypes.selectFileRequest) { + vscode.window.showOpenDialog().then((uri: vscode.Uri[] | undefined) => { + if (uri && uri.length > 0) { + const value = uri[0].fsPath; + const data = fs.readFileSync(value, "utf8"); + this._panel.webview.postMessage({ type: responseTypes.selectFileResponse, path: value, fileData: data }); + } + }); + } else if (message.type === requestTypes.readFileRequest) { + if (!fs.existsSync(message.path)) { + this._panel.webview.postMessage({ type: responseTypes.readFileResponse, fileData: "" }); + } else { + const data = fs.readFileSync(message.path, "utf8"); + this._panel.webview.postMessage({ type: responseTypes.readFileResponse, fileData: data }); + } + } else if (message.type === requestTypes.getVariableItemRequest) { + GetVariableById(message.data.id, message.data.isGlobal, this._panel.webview); + } else if (message.type === requestTypes.getAllVariableRequest) { + GetAllVariable(this._panel.webview); + } else if (message.type === requestTypes.getRunItemDataRequest) { + this._panel.webview.postMessage({ type: responseTypes.getRunItemDataResponse, reqData: getStorageManager().getValue("run-request"), resData: getStorageManager().getValue("run-response") }); + getStorageManager().setValue("run-request", ""); + getStorageManager().setValue("run-response", ""); + } else if (message.type === requestTypes.saveRequest) { + let item: IHistory = { + id: message.data.reqData.id, + method: message.data.reqData.method, + name: message.data.reqData.name ? message.data.reqData.name : message.data.reqData.url, + url: message.data.reqData.url, + createdTime: message.data.reqData.createdTime ? message.data.reqData.createdTime : formatDate() + }; + + let reqData = message.data.reqData as IRequestModel; + if (reqData.body.bodyType === "binary") { + reqData.body.binary.data = ""; + } + if (message.data.isNew) { + SaveRequest(reqData); + SaveHistory(item, sideBarProvider.view); + } else { + UpdateRequest(reqData); + UpdateHistory(item); + if (message.data.colId) { + UpdateCollection(message.data.colId, item); + } + } + this._panel.webview.postMessage({ type: responseTypes.saveResponse }); } - }); - } else if (message.type === requestTypes.selectFileRequest) { - vscode.window.showOpenDialog().then((uri: vscode.Uri[] | undefined) => { - if (uri && uri.length > 0) { - const value = uri[0].fsPath; - const data = fs.readFileSync(value, "utf8"); - uiPanel.webview.postMessage({ type: responseTypes.selectFileResponse, path: value, fileData: data }); + else if (message.type === requestTypes.openVariableItemRequest) { + OpenVariableUI(message.data); + } else if (message.type === requestTypes.updateVariableRequest) { + UpdateVariable(message.data, null); + } else if (message.type === requestTypes.saveCookieRequest) { + SaveCookie(message.data, null); + } else if (message.type === requestTypes.getAllCookiesRequest) { + GetAllCookies(this._panel.webview); + } else if (message.type === requestTypes.openManageCookiesRequest) { + OpenCookieUI(message.data); + } else if (message.type === requestTypes.getParentSettingsRequest) { + GetParentSettings(message.data.colId, message.data.folderId, this._panel.webview); + } else if (message.type === requestTypes.formDataFileRequest) { + vscode.window.showOpenDialog().then((uri: vscode.Uri[] | undefined) => { + if (uri && uri.length > 0) { + const value = uri[0].fsPath; + this._panel.webview.postMessage({ type: responseTypes.formDataFileResponse, path: value, index: message.index }); + } + }); + } else if (message.type === requestTypes.tokenRequest) { + apiFetch(message.data.reqData, message.data.variableData, message.data.settings, fetchConfig, responseTypes.tokenResponse).then((data) => { + this._panel.webview.postMessage(data); + }); + } else if (message.type === requestTypes.themeRequest) { + this._panel.webview.postMessage(getVSCodeTheme()); + } else if (message.type === requestTypes.getCollectionsByIdWithPathRequest) { + GetAllCollectionsByIdWithPath(message.data, this._panel.webview); + } else if (message.type === requestTypes.getAllCollectionNameRequest) { + GetAllCollectionName(this._panel.webview, message.data); } - }); - } else if (message.type === requestTypes.readFileRequest) { - if (!fs.existsSync(message.path)) { - uiPanel.webview.postMessage({ type: responseTypes.readFileResponse, fileData: "" }); - } else { - const data = fs.readFileSync(message.path, "utf8"); - uiPanel.webview.postMessage({ type: responseTypes.readFileResponse, fileData: data }); } - } else if (message.type === requestTypes.getVariableItemRequest) { - GetVariableById(message.data.id, message.data.isGlobal, uiPanel.webview); - } else if (message.type === requestTypes.getAllVariableRequest) { - GetAllVariable(uiPanel.webview); - } else if (message.type === requestTypes.getRunItemDataRequest) { - uiPanel.webview.postMessage({ type: responseTypes.getRunItemDataResponse, reqData: getStorageManager().getValue("run-request"), resData: getStorageManager().getValue("run-response") }); - getStorageManager().setValue("run-request", ""); - getStorageManager().setValue("run-response", ""); - } else if (message.type === requestTypes.saveRequest) { - let item: IHistory = { - id: message.data.reqData.id, - method: message.data.reqData.method, - name: message.data.reqData.name ? message.data.reqData.name : message.data.reqData.url, - url: message.data.reqData.url, - createdTime: message.data.reqData.createdTime ? message.data.reqData.createdTime : formatDate() - }; - - let reqData = message.data.reqData as IRequestModel; - if (reqData.body.bodyType === "binary") { - reqData.body.binary.data = ""; + catch (error) { + vscode.window.showErrorMessage("Couldn't fetch the api", { modal: true }); + writeLog("error::onDidReceiveMessage()" + error.message); } - if (message.data.isNew) { - SaveRequest(reqData); - SaveHistory(item, sideBarProvider.view); - } else { - UpdateRequest(reqData); - UpdateHistory(item); - if (message.data.colId) { - UpdateCollection(message.data.colId, item); - } - } - uiPanel.webview.postMessage({ type: responseTypes.saveResponse }); + }, + null, + this._disposables + ); + } + + public dispose() { + WebAppPanel.currentPanel = undefined; + + // Clean up our resources + this._panel.dispose(); + + while (this._disposables.length) { + const x = this._disposables.pop(); + if (x) { + x.dispose(); } - else if (message.type === requestTypes.openVariableItemRequest) { - OpenVariableUI(message.data); - } else if (message.type === requestTypes.updateVariableRequest) { - UpdateVariable(message.data, null); - } else if (message.type === requestTypes.saveCookieRequest) { - SaveCookie(message.data, null); - } else if (message.type === requestTypes.getAllCookiesRequest) { - GetAllCookies(uiPanel.webview); - } else if (message.type === requestTypes.openManageCookiesRequest) { - OpenCookieUI(message.data); - } else if (message.type === requestTypes.getParentSettingsRequest) { - GetParentSettings(message.data.colId, message.data.folderId, uiPanel.webview); - } else if (message.type === requestTypes.formDataFileRequest) { - vscode.window.showOpenDialog().then((uri: vscode.Uri[] | undefined) => { - if (uri && uri.length > 0) { - const value = uri[0].fsPath; - uiPanel.webview.postMessage({ type: responseTypes.formDataFileResponse, path: value, index: message.index }); - } - }); + } + } + + private async _update(id?: string, colId?: string, varId?: string, type?: string, folderId?: string) { + const webview = this._panel.webview; + this._panel.webview.html = this._getHtmlForWebview(webview, id, colId, varId, type, folderId); + } + + private _pushMessages(message: IPubSubMessage) { + if (message.messageType === pubSubTypes.updateVariables) { + this._panel.webview.postMessage({ type: message.messageType }); + } else if (message.messageType === pubSubTypes.removeCurrentVariable) { + this._panel.webview.postMessage({ type: message.messageType }); + } else if (message.messageType === pubSubTypes.addCurrentVariable) { + this._panel.webview.postMessage({ type: message.messageType, data: { varId: message.message } }); + } else if (message.messageType === pubSubTypes.themeChanged) { + this._panel.webview.postMessage({ type: message.messageType }); + } + } + + private _executeAPIRequest(message: any, fetchConfig: FetchConfig) { + apiFetch(message.data.reqData, message.data.variableData, message.data.settings, fetchConfig).then((data) => { + fetchConfig.source = null; + this._panel.webview.postMessage(data); + + let item: IHistory = { + id: message.data.reqData.id, + method: message.data.reqData.method, + name: message.data.reqData.name ? message.data.reqData.name : message.data.reqData.url, + url: message.data.reqData.url, + createdTime: message.data.reqData.createdTime ? message.data.reqData.createdTime : formatDate() + }; + + let reqData = message.data.reqData as IRequestModel; + if (reqData.body.bodyType === "binary") { + reqData.body.binary.data = ""; + } + + if (message.data.isNew) { + SaveRequest(reqData); + SaveHistory(item, sideBarProvider.view); + } else { + UpdateRequest(reqData); + UpdateHistory(item); } }); - }); + } + + private _getHtmlForWebview(webview: vscode.Webview, id?: string, colId?: string, varId?: string, type?: string, folderId?: string) { + + const scriptUri = webview.asWebviewUri( + vscode.Uri.joinPath(this._extensionUri, "dist/fetch-client-ui.js") + ); + + const styleUri = webview.asWebviewUri(vscode.Uri.joinPath(this._extensionUri, "/dist/main.css")); + + const nonce = getNonce(); - return disposable; + return ` + + + + + + + ${id}:${colId}:${varId}:${type}:${folderId} + + + +
+ + + + `; + } +} -}; diff --git a/src/utils/ui/sideBarUIProvider.tsx b/src/utils/ui/sideBarUIProvider.tsx index 75badd8..3322eda 100644 --- a/src/utils/ui/sideBarUIProvider.tsx +++ b/src/utils/ui/sideBarUIProvider.tsx @@ -1,12 +1,25 @@ -import * as vscode from 'vscode'; -import { getStorageManager, OpenAddToColUI, OpenAttachVariableUI, OpenColSettings, OpenCopyToColUI, OpenCurlUI, OpenExistingItem, OpenRunAllUI, OpenVariableUI } from '../../extension'; -import { ICollections, IFolder, IHistory, IVariable } from '../../fetch-client-ui/components/SideBar/redux/types'; -import { getNonce, requestTypes, responseTypes } from '../../utils/configuration'; -import { AddToCollection, AttachVariable, CreateNewCollection, DeleteAllCollectionItems, DeleteCollection, DeleteCollectionItem, DuplicateItem, GetAllCollections, NewFolderToCollection, NewRequestToCollection, RenameCollection, RenameCollectionItem } from '../../utils/db/collectionDBUtil'; +import { + AddToCollection, AttachVariable, CreateNewCollection, + DeleteAllCollectionItems, DeleteCollection, DeleteCollectionItem, + DuplicateItem, GetAllCollections, NewFolderToCollection, NewRequestToCollection, + RemoveVariableByVariableId, RenameCollection, RenameCollectionItem +} from '../../utils/db/collectionDBUtil'; +import { + ChangeVariableStatus, DeleteVariable, DuplicateVariable, ExportVariable, + GetAllVariable, ImportVariableFromJsonFile, ImportVariableFromEnvFile, RenameVariable +} from '../db/varDBUtil'; import { DeleteAllHistory, DeleteHistory, GetAllHistory, RenameHistory } from '../../utils/db/historyDBUtil'; import { Export, Import, SaveRequest } from '../db/mainDBUtil'; -import { ChangeVariableStatus, DeleteVariable, DuplicateVariable, ExportVariable, GetAllVariable, ImportVariable, RenameVariable, SaveVariable } from '../db/varDBUtil'; import { formatDate } from '../helper'; +import { getNonce, pubSubTypes, requestTypes, responseTypes } from '../../utils/configuration'; +import { + getStorageManager, OpenAddToColUI, OpenAttachVariableUI, OpenColSettings, OpenCopyToColUI, + OpenCurlUI, OpenExistingItem, OpenRunAllUI, OpenVariableUI, pubSub, vsCodeLogger +} from '../../extension'; +import { getVSCodeTheme } from '../vscodeConfig'; +import { ICollections, IFolder, IHistory } from '../../fetch-client-ui/components/SideBar/redux/types'; +import { IPubSubMessage, Subscription } from '../PubSub'; +import * as vscode from 'vscode'; export class SideBarProvider implements vscode.WebviewViewProvider { @@ -14,11 +27,16 @@ export class SideBarProvider implements vscode.WebviewViewProvider { public view?: vscode.WebviewView; + private _scriptionId: Subscription; + constructor( private readonly _extensionUri: vscode.Uri, - ) { } + ) { + this._pushMessages = this._pushMessages.bind(this); + this._scriptionId = pubSub.subscribe(this._pushMessages); + } - public resolveWebviewView(webviewView: vscode.WebviewView, context: vscode.WebviewViewResolveContext, _token: vscode.CancellationToken,) { + public resolveWebviewView(webviewView: vscode.WebviewView, _context: vscode.WebviewViewResolveContext, _token: vscode.CancellationToken,) { this.view = webviewView; webviewView.webview.options = { @@ -28,6 +46,10 @@ export class SideBarProvider implements vscode.WebviewViewProvider { webviewView.webview.html = this.getHtmlForWebview(webviewView.webview); + webviewView.onDidDispose(() => { + this._scriptionId.unsubscribe(); + }); + webviewView.webview.onDidReceiveMessage(reqData => { switch (reqData.type) { case requestTypes.getAllHistoryRequest: @@ -55,7 +77,7 @@ export class SideBarProvider implements vscode.WebviewViewProvider { }); break; case requestTypes.openHistoryItemRequest: - OpenExistingItem(reqData.data.id, reqData.data.name, reqData.data.colId, reqData.data.folderId, reqData.data.varId); + OpenExistingItem(reqData.data.id, reqData.data.name, reqData.data.colId, reqData.data.folderId, reqData.data.varId, undefined, reqData.data.isNewTab); break; case requestTypes.addToCollectionsRequest: OpenAddToColUI(reqData.data); @@ -168,10 +190,15 @@ export class SideBarProvider implements vscode.WebviewViewProvider { }); break; case requestTypes.importVariableRequest: - vscode.window.showOpenDialog({ filters: { 'Json Files': ['json'] } }).then((uri: vscode.Uri[] | undefined) => { + vscode.window.showOpenDialog({ filters: { 'Files': ['json', 'env'] } }).then((uri: vscode.Uri[] | undefined) => { if (uri && uri.length > 0) { const value = uri[0].fsPath; - ImportVariable(webviewView, value); + let ext = value.split('.').pop(); + if (ext.toLowerCase() === "json") { + ImportVariableFromJsonFile(webviewView, value); + } else { + ImportVariableFromEnvFile(webviewView, value); + } } }); break; @@ -237,10 +264,29 @@ export class SideBarProvider implements vscode.WebviewViewProvider { case requestTypes.importCurlRequest: OpenCurlUI(); break; + case requestTypes.removeVariableFromColRequest: + if (reqData.data.varId) { + RemoveVariableByVariableId(reqData.data.varId, webviewView); + } + break; + case requestTypes.viewLogRequest: + if (vsCodeLogger) { + vsCodeLogger.showLog(); + } + break; + case requestTypes.themeRequest: + webviewView.webview.postMessage(getVSCodeTheme()); + break; } }); } + private _pushMessages(message: IPubSubMessage) { + if (message.messageType === pubSubTypes.themeChanged) { + this.view.webview.postMessage({ type: message.messageType }); + } + } + private async showInputBox() { const res = await vscode.window.showInputBox({ value: "", prompt: "Enter new name", placeHolder: "Enter new name", ignoreFocusOut: false, @@ -253,7 +299,7 @@ export class SideBarProvider implements vscode.WebviewViewProvider { } private async showConfirmationBox(text: string) { - const res = await vscode.window.showWarningMessage(text, "Yes", "No"); + const res = await vscode.window.showWarningMessage(text, { modal: true }, "Yes", "No"); return res; } diff --git a/src/utils/ui/variableUIProvider.tsx b/src/utils/ui/variableUIProvider.tsx index ca6ccb6..720c4fc 100644 --- a/src/utils/ui/variableUIProvider.tsx +++ b/src/utils/ui/variableUIProvider.tsx @@ -3,6 +3,7 @@ import { sideBarProvider } from '../../extension'; import { getNonce, requestTypes } from '../configuration'; import { GetCollectionsByVariable } from '../db/collectionDBUtil'; import { GetAllVariable, GetVariableById, SaveVariable, UpdateVariable } from '../db/varDBUtil'; +import { WebAppPanel } from './mainUIProvider'; export const VariableUI = (extensionUri: any) => { const disposable = vscode.commands.registerCommand('fetch-client.newVar', (id?: string) => { diff --git a/src/utils/validators/fetchClientCollectionValidator.ts b/src/utils/validators/fetchClientCollectionValidator.ts new file mode 100644 index 0000000..cf4b61f --- /dev/null +++ b/src/utils/validators/fetchClientCollectionValidator.ts @@ -0,0 +1,1307 @@ +// Stores the currently-being-typechecked object for error messages. +let obj: any = null; +export class FetchClientDataProxy { + public readonly app: string; + public readonly id: string; + public readonly name: string; + public readonly version: string; + public readonly type: string; + public readonly createdTime: string; + public readonly exportedDate: string; + public readonly data: DataEntityProxy[] | null; + public readonly settings: SettingsProxy | null; + public static Parse(d: string): FetchClientDataProxy { + return FetchClientDataProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): FetchClientDataProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.app, false, field + ".app"); + checkStringValue(d.app, field + ".app", "Fetch Client"); + checkString(d.id, false, field + ".id"); + checkString(d.name, false, field + ".name"); + checkString(d.version, false, field + ".version"); + checkString(d.type, false, field + ".type"); + checkStringValue(d.type, field + ".type", "collections"); + checkString(d.createdTime, false, field + ".createdTime"); + checkString(d.exportedDate, false, field + ".exportedDate"); + checkArray(d.data, field + ".data"); + if (d.data) { + for (let i = 0; i < d.data.length; i++) { + d.data[i] = DataEntityProxy.Create(d.data[i], field + ".data" + "[" + i + "]"); + } + } + if (d.data === undefined) { + d.data = null; + } + if (d.settings) { + d.settings = SettingsProxy.Create(d.settings, field + ".settings"); + } + return new FetchClientDataProxy(d); + } + private constructor(d: any) { + this.app = d.app; + this.id = d.id; + this.name = d.name; + this.version = d.version; + this.type = d.type; + this.createdTime = d.createdTime; + this.exportedDate = d.exportedDate; + this.data = d.data; + this.settings = d.settings; + } +} + +export class DataEntityProxy { + public readonly id: string; + public readonly name: string; + public readonly type: string | null; + public readonly createdTime: string; + public readonly data: DataEntity1Proxy[] | null; + public readonly settings: Settings1Proxy | null; + public readonly url: string | null; + public readonly method: string | null; + public readonly params: TableDataEntity[] | null; + public readonly auth: AuthProxy | null; + public readonly headers: HeadersEntityProxy[] | null; + public readonly body: BodyProxy | null; + public readonly tests: TestsEntityProxy[] | null; + public readonly setvar: SetvarEntityProxy[] | null; + public readonly notes: string | null; + public readonly preFetch: PreFetchProxy | null; + public static Parse(d: string): DataEntityProxy { + return DataEntityProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): DataEntityProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.id, false, field + ".id"); + checkString(d.name, false, field + ".name"); + checkString(d.type, true, field + ".type"); + if (d.type === undefined) { + d.type = null; + } + checkString(d.createdTime, false, field + ".createdTime"); + checkArray(d.data, field + ".data"); + if (d.data) { + for (let i = 0; i < d.data.length; i++) { + d.data[i] = DataEntity1Proxy.Create(d.data[i], field + ".data" + "[" + i + "]"); + } + } + if (d.data === undefined) { + d.data = null; + } + d.settings = Settings1Proxy.Create(d.settings, field + ".settings"); + if (d.settings === undefined) { + d.settings = null; + } + checkString(d.url, true, field + ".url"); + if (d.url === undefined) { + d.url = null; + } + checkString(d.method, true, field + ".method"); + if (d.method === undefined) { + d.method = null; + } + checkArray(d.params, field + ".params"); + if (d.params) { + for (let i = 0; i < d.params.length; i++) { + d.params[i] = TableDataEntity.Create(d.params[i], field + ".params" + "[" + i + "]"); + } + } + if (d.params === undefined) { + d.params = null; + } + d.auth = AuthProxy.Create(d.auth, field + ".auth"); + if (d.auth === undefined) { + d.auth = null; + } + checkArray(d.headers, field + ".headers"); + if (d.headers) { + for (let i = 0; i < d.headers.length; i++) { + d.headers[i] = HeadersEntityProxy.Create(d.headers[i], field + ".headers" + "[" + i + "]"); + } + } + if (d.headers === undefined) { + d.headers = null; + } + d.body = BodyProxy.Create(d.body, field + ".body"); + if (d.body === undefined) { + d.body = null; + } + checkArray(d.tests, field + ".tests"); + if (d.tests) { + for (let i = 0; i < d.tests.length; i++) { + d.tests[i] = TestsEntityProxy.Create(d.tests[i], field + ".tests" + "[" + i + "]"); + } + } + if (d.tests === undefined) { + d.tests = null; + } + checkArray(d.setvar, field + ".setvar"); + if (d.setvar) { + for (let i = 0; i < d.setvar.length; i++) { + d.setvar[i] = SetvarEntityProxy.Create(d.setvar[i], field + ".setvar" + "[" + i + "]"); + } + } + if (d.setvar === undefined) { + d.setvar = null; + } + checkString(d.notes, true, field + ".notes"); + if (d.notes === undefined) { + d.notes = null; + } + d.preFetch = PreFetchProxy.Create(d.preFetch, field + ".preFetch"); + if (d.preFetch === undefined) { + d.preFetch = null; + } + return new DataEntityProxy(d); + } + private constructor(d: any) { + this.id = d.id; + this.name = d.name; + this.type = d.type; + this.createdTime = d.createdTime; + this.data = d.data; + this.settings = d.settings; + this.url = d.url; + this.method = d.method; + this.params = d.params; + this.auth = d.auth; + this.headers = d.headers; + this.body = d.body; + this.tests = d.tests; + this.setvar = d.setvar; + this.notes = d.notes; + this.preFetch = d.preFetch; + } +} + +export class DataEntity1Proxy { + public readonly id: string; + public readonly name: string; + public readonly type: string | null; + public readonly createdTime: string; + public readonly data: DataEntity2Proxy[] | null; + public readonly settings: Settings2Proxy | null; + public readonly url: string | null; + public readonly method: string | null; + public readonly params: TableDataEntity[] | null; + public readonly auth: Auth1Proxy | null; + public readonly headers: TableDataEntity[] | null; + public readonly body: Body1Proxy | null; + public readonly tests: TestsEntityProxy[] | null; + public readonly setvar: SetvarEntityProxy[] | null; + public readonly notes: string | null; + public static Parse(d: string): DataEntity1Proxy { + return DataEntity1Proxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): DataEntity1Proxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.id, false, field + ".id"); + checkString(d.name, false, field + ".name"); + checkString(d.type, true, field + ".type"); + if (d.type === undefined) { + d.type = null; + } + checkString(d.createdTime, false, field + ".createdTime"); + checkArray(d.data, field + ".data"); + if (d.data) { + for (let i = 0; i < d.data.length; i++) { + d.data[i] = DataEntity2Proxy.Create(d.data[i], field + ".data" + "[" + i + "]"); + } + } + if (d.data === undefined) { + d.data = null; + } + d.settings = Settings2Proxy.Create(d.settings, field + ".settings"); + if (d.settings === undefined) { + d.settings = null; + } + checkString(d.url, true, field + ".url"); + if (d.url === undefined) { + d.url = null; + } + checkString(d.method, true, field + ".method"); + if (d.method === undefined) { + d.method = null; + } + checkArray(d.params, field + ".params"); + if (d.params) { + for (let i = 0; i < d.params.length; i++) { + d.params[i] = TableDataEntity.Create(d.params[i], field + ".params" + "[" + i + "]"); + } + } + if (d.params === undefined) { + d.params = null; + } + d.auth = Auth1Proxy.Create(d.auth, field + ".auth"); + if (d.auth === undefined) { + d.auth = null; + } + checkArray(d.headers, field + ".headers"); + if (d.headers) { + for (let i = 0; i < d.headers.length; i++) { + d.headers[i] = TableDataEntity.Create(d.headers[i], field + ".headers" + "[" + i + "]"); + } + } + if (d.headers === undefined) { + d.headers = null; + } + d.body = Body1Proxy.Create(d.body, field + ".body"); + if (d.body === undefined) { + d.body = null; + } + checkArray(d.tests, field + ".tests"); + if (d.tests) { + for (let i = 0; i < d.tests.length; i++) { + d.tests[i] = TestsEntityProxy.Create(d.tests[i], field + ".tests" + "[" + i + "]"); + } + } + if (d.tests === undefined) { + d.tests = null; + } + checkArray(d.setvar, field + ".setvar"); + if (d.setvar) { + for (let i = 0; i < d.setvar.length; i++) { + d.setvar[i] = SetvarEntityProxy.Create(d.setvar[i], field + ".setvar" + "[" + i + "]"); + } + } + if (d.setvar === undefined) { + d.setvar = null; + } + checkString(d.notes, true, field + ".notes"); + if (d.notes === undefined) { + d.notes = null; + } + return new DataEntity1Proxy(d); + } + private constructor(d: any) { + this.id = d.id; + this.name = d.name; + this.type = d.type; + this.createdTime = d.createdTime; + this.data = d.data; + this.settings = d.settings; + this.url = d.url; + this.method = d.method; + this.params = d.params; + this.auth = d.auth; + this.headers = d.headers; + this.body = d.body; + this.tests = d.tests; + this.setvar = d.setvar; + this.notes = d.notes; + } +} + +export class DataEntity2Proxy { + public readonly id: string; + public readonly url: string; + public readonly name: string; + public readonly createdTime: string; + public readonly method: string; + public readonly params: TableDataEntity[] | null; + public readonly auth: Auth2Proxy; + public readonly headers: TableDataEntity[] | null; + public readonly body: Body2Proxy; + public readonly tests: TestsEntityProxy[] | null; + public readonly setvar: SetvarEntityProxy[] | null; + public readonly notes: string; + public static Parse(d: string): DataEntity2Proxy { + return DataEntity2Proxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): DataEntity2Proxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.id, false, field + ".id"); + checkString(d.url, false, field + ".url"); + checkString(d.name, false, field + ".name"); + checkString(d.createdTime, false, field + ".createdTime"); + checkString(d.method, false, field + ".method"); + checkArray(d.params, field + ".params"); + if (d.params) { + for (let i = 0; i < d.params.length; i++) { + d.params[i] = TableDataEntity.Create(d.params[i], field + ".params" + "[" + i + "]"); + } + } + if (d.params === undefined) { + d.params = null; + } + d.auth = Auth2Proxy.Create(d.auth, field + ".auth"); + checkArray(d.headers, field + ".headers"); + if (d.headers) { + for (let i = 0; i < d.headers.length; i++) { + d.headers[i] = TableDataEntity.Create(d.headers[i], field + ".headers" + "[" + i + "]"); + } + } + if (d.headers === undefined) { + d.headers = null; + } + d.body = Body2Proxy.Create(d.body, field + ".body"); + checkArray(d.tests, field + ".tests"); + if (d.tests) { + for (let i = 0; i < d.tests.length; i++) { + d.tests[i] = TestsEntityProxy.Create(d.tests[i], field + ".tests" + "[" + i + "]"); + } + } + if (d.tests === undefined) { + d.tests = null; + } + checkArray(d.setvar, field + ".setvar"); + if (d.setvar) { + for (let i = 0; i < d.setvar.length; i++) { + d.setvar[i] = SetvarEntityProxy.Create(d.setvar[i], field + ".setvar" + "[" + i + "]"); + } + } + if (d.setvar === undefined) { + d.setvar = null; + } + checkString(d.notes, false, field + ".notes"); + return new DataEntity2Proxy(d); + } + private constructor(d: any) { + this.id = d.id; + this.url = d.url; + this.name = d.name; + this.createdTime = d.createdTime; + this.method = d.method; + this.params = d.params; + this.auth = d.auth; + this.headers = d.headers; + this.body = d.body; + this.tests = d.tests; + this.setvar = d.setvar; + this.notes = d.notes; + } +} + +export class TableDataEntity { + public readonly isChecked: boolean; + public readonly key: string; + public readonly value: string; + public static Parse(d: string): TableDataEntity { + return TableDataEntity.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): TableDataEntity { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkBoolean(d.isChecked, false, field + ".isChecked"); + checkString(d.key, false, field + ".key"); + checkString(d.value, false, field + ".value"); + return new TableDataEntity(d); + } + private constructor(d: any) { + this.isChecked = d.isChecked; + this.key = d.key; + this.value = d.value; + } +} + +export class Auth2Proxy { + public readonly authType: string; + public readonly userName: string; + public readonly password: string; + public readonly addTo: string; + public readonly showPwd: boolean; + public readonly tokenPrefix: string; + public readonly aws: AwsProxy; + public readonly oauth: OauthProxy; + public static Parse(d: string): Auth2Proxy { + return Auth2Proxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): Auth2Proxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.authType, false, field + ".authType"); + checkString(d.userName, false, field + ".userName"); + checkString(d.password, false, field + ".password"); + checkString(d.addTo, false, field + ".addTo"); + checkBoolean(d.showPwd, false, field + ".showPwd"); + checkString(d.tokenPrefix, false, field + ".tokenPrefix"); + d.aws = AwsProxy.Create(d.aws, field + ".aws"); + d.oauth = OauthProxy.Create(d.oauth, field + ".oauth"); + return new Auth2Proxy(d); + } + private constructor(d: any) { + this.authType = d.authType; + this.userName = d.userName; + this.password = d.password; + this.addTo = d.addTo; + this.showPwd = d.showPwd; + this.tokenPrefix = d.tokenPrefix; + this.aws = d.aws; + this.oauth = d.oauth; + } +} + +export class AwsProxy { + public readonly service: string; + public readonly region: string; + public readonly accessKey: string; + public readonly secretAccessKey: string; + public readonly sessionToken: string; + public static Parse(d: string): AwsProxy { + return AwsProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): AwsProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + return null; + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.service, false, field + ".service"); + checkString(d.region, false, field + ".region"); + checkString(d.accessKey, false, field + ".accessKey"); + checkString(d.secretAccessKey, false, field + ".secretAccessKey"); + checkString(d.sessionToken, false, field + ".sessionToken"); + return new AwsProxy(d); + } + private constructor(d: any) { + this.service = d.service; + this.region = d.region; + this.accessKey = d.accessKey; + this.secretAccessKey = d.secretAccessKey; + this.sessionToken = d.sessionToken; + } +} + +export class OauthProxy { + public readonly clientAuth: string; + public readonly clientId: string; + public readonly clientSecret: string; + public readonly grantType: string; + public readonly password: string; + public readonly scope: string; + public readonly tokenName: string; + public readonly tokenUrl: string; + public readonly username: string; + public readonly advancedOpt: AdvancedOptProxy; + public static Parse(d: string): OauthProxy { + return OauthProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): OauthProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + return null; + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.clientAuth, false, field + ".clientAuth"); + checkString(d.clientId, false, field + ".clientId"); + checkString(d.clientSecret, false, field + ".clientSecret"); + checkString(d.grantType, false, field + ".grantType"); + checkString(d.password, false, field + ".password"); + checkString(d.scope, false, field + ".scope"); + checkString(d.tokenName, false, field + ".tokenName"); + checkString(d.tokenUrl, false, field + ".tokenUrl"); + checkString(d.username, false, field + ".username"); + d.advancedOpt = AdvancedOptProxy.Create(d.advancedOpt, field + ".advancedOpt"); + return new OauthProxy(d); + } + private constructor(d: any) { + this.clientAuth = d.clientAuth; + this.clientId = d.clientId; + this.clientSecret = d.clientSecret; + this.grantType = d.grantType; + this.password = d.password; + this.scope = d.scope; + this.tokenName = d.tokenName; + this.tokenUrl = d.tokenUrl; + this.username = d.username; + this.advancedOpt = d.advancedOpt; + } +} + +export class AdvancedOptProxy { + public readonly audience: string; + public readonly resource: string; + public static Parse(d: string): AdvancedOptProxy { + return AdvancedOptProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): AdvancedOptProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.audience, false, field + ".audience"); + checkString(d.resource, false, field + ".resource"); + return new AdvancedOptProxy(d); + } + private constructor(d: any) { + this.audience = d.audience; + this.resource = d.resource; + } +} + +export class Body2Proxy { + public readonly bodyType: string; + public readonly formdata: TableDataEntity[] | null; + public readonly urlencoded: TableDataEntity[] | null; + public readonly raw: RawProxy; + public readonly binary: BinaryProxy; + public readonly graphql: GraphqlProxy; + public static Parse(d: string): Body2Proxy { + return Body2Proxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): Body2Proxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.bodyType, false, field + ".bodyType"); + checkArray(d.formdata, field + ".formdata"); + if (d.formdata) { + for (let i = 0; i < d.formdata.length; i++) { + d.formdata[i] = TableDataEntity.Create(d.formdata[i], field + ".formdata" + "[" + i + "]"); + } + } + if (d.formdata === undefined) { + d.formdata = null; + } + checkArray(d.urlencoded, field + ".urlencoded"); + if (d.urlencoded) { + for (let i = 0; i < d.urlencoded.length; i++) { + d.urlencoded[i] = TableDataEntity.Create(d.urlencoded[i], field + ".urlencoded" + "[" + i + "]"); + } + } + if (d.urlencoded === undefined) { + d.urlencoded = null; + } + d.raw = RawProxy.Create(d.raw, field + ".raw"); + d.binary = BinaryProxy.Create(d.binary, field + ".binary"); + d.graphql = GraphqlProxy.Create(d.graphql, field + ".graphql"); + return new Body2Proxy(d); + } + private constructor(d: any) { + this.bodyType = d.bodyType; + this.formdata = d.formdata; + this.urlencoded = d.urlencoded; + this.raw = d.raw; + this.binary = d.binary; + this.graphql = d.graphql; + } +} + +export class RawProxy { + public readonly data: string; + public readonly lang: string; + public static Parse(d: string): RawProxy { + return RawProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): RawProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.data, false, field + ".data"); + checkString(d.lang, false, field + ".lang"); + return new RawProxy(d); + } + private constructor(d: any) { + this.data = d.data; + this.lang = d.lang; + } +} + +export class BinaryProxy { + public readonly fileName: string; + public readonly data: DataProxy; + public readonly contentTypeOption: string; + public static Parse(d: string): BinaryProxy { + return BinaryProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): BinaryProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.fileName, false, field + ".fileName"); + d.data = DataProxy.Create(d.data, field + ".data"); + checkString(d.contentTypeOption, false, field + ".contentTypeOption"); + return new BinaryProxy(d); + } + private constructor(d: any) { + this.fileName = d.fileName; + this.data = d.data; + this.contentTypeOption = d.contentTypeOption; + } +} + +export class DataProxy { + public static Parse(d: string): DataProxy { + return DataProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): DataProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + return new DataProxy(d); + } + private constructor(d: any) { + } +} + +export class GraphqlProxy { + public readonly query: string; + public readonly variables: string; + public static Parse(d: string): GraphqlProxy { + return GraphqlProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): GraphqlProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.query, false, field + ".query"); + checkString(d.variables, false, field + ".variables"); + return new GraphqlProxy(d); + } + private constructor(d: any) { + this.query = d.query; + this.variables = d.variables; + } +} + +export class TestsEntityProxy { + public readonly parameter: string; + public readonly action: string; + public readonly expectedValue: string; + public static Parse(d: string): TestsEntityProxy { + return TestsEntityProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): TestsEntityProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.parameter, false, field + ".parameter"); + checkString(d.action, false, field + ".action"); + checkString(d.expectedValue, false, field + ".expectedValue"); + return new TestsEntityProxy(d); + } + private constructor(d: any) { + this.parameter = d.parameter; + this.action = d.action; + this.expectedValue = d.expectedValue; + } +} + +export class SetvarEntityProxy { + public readonly parameter: string; + public readonly key: string; + public readonly variableName: string; + public static Parse(d: string): SetvarEntityProxy { + return SetvarEntityProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): SetvarEntityProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.parameter, false, field + ".parameter"); + checkString(d.key, false, field + ".key"); + checkString(d.variableName, false, field + ".variableName"); + return new SetvarEntityProxy(d); + } + private constructor(d: any) { + this.parameter = d.parameter; + this.key = d.key; + this.variableName = d.variableName; + } +} + +export class Settings2Proxy { + public readonly auth: Auth2Proxy; + public static Parse(d: string): Settings2Proxy | null { + return Settings2Proxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): Settings2Proxy | null { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + return null; + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, true); + } else if (Array.isArray(d)) { + throwIsArray(field, d, true); + } + d.auth = Auth2Proxy.Create(d.auth, field + ".auth"); + return new Settings2Proxy(d); + } + private constructor(d: any) { + this.auth = d.auth; + } +} + +export class Auth1Proxy { + public readonly authType: string; + public readonly userName: string; + public readonly password: string; + public readonly addTo: string; + public readonly showPwd: boolean; + public readonly tokenPrefix: string; + public readonly aws: AwsProxy; + public readonly oauth: OauthProxy; + public static Parse(d: string): Auth1Proxy | null { + return Auth1Proxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): Auth1Proxy | null { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + return null; + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, true); + } else if (Array.isArray(d)) { + throwIsArray(field, d, true); + } + checkString(d.authType, false, field + ".authType"); + checkString(d.userName, false, field + ".userName"); + checkString(d.password, false, field + ".password"); + checkString(d.addTo, false, field + ".addTo"); + checkBoolean(d.showPwd, false, field + ".showPwd"); + checkString(d.tokenPrefix, false, field + ".tokenPrefix"); + d.aws = AwsProxy.Create(d.aws, field + ".aws"); + d.oauth = OauthProxy.Create(d.oauth, field + ".oauth"); + return new Auth1Proxy(d); + } + private constructor(d: any) { + this.authType = d.authType; + this.userName = d.userName; + this.password = d.password; + this.addTo = d.addTo; + this.showPwd = d.showPwd; + this.tokenPrefix = d.tokenPrefix; + this.aws = d.aws; + this.oauth = d.oauth; + } +} + +export class Body1Proxy { + public readonly bodyType: string; + public readonly formdata: TableDataEntity[] | null; + public readonly urlencoded: TableDataEntity[] | null; + public readonly raw: RawProxy; + public readonly binary: BinaryProxy; + public readonly graphql: GraphqlProxy; + public static Parse(d: string): Body1Proxy | null { + return Body1Proxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): Body1Proxy | null { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + return null; + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, true); + } else if (Array.isArray(d)) { + throwIsArray(field, d, true); + } + checkString(d.bodyType, false, field + ".bodyType"); + checkArray(d.formdata, field + ".formdata"); + if (d.formdata) { + for (let i = 0; i < d.formdata.length; i++) { + d.formdata[i] = TableDataEntity.Create(d.formdata[i], field + ".formdata" + "[" + i + "]"); + } + } + if (d.formdata === undefined) { + d.formdata = null; + } + checkArray(d.urlencoded, field + ".urlencoded"); + if (d.urlencoded) { + for (let i = 0; i < d.urlencoded.length; i++) { + d.urlencoded[i] = TableDataEntity.Create(d.urlencoded[i], field + ".urlencoded" + "[" + i + "]"); + } + } + if (d.urlencoded === undefined) { + d.urlencoded = null; + } + d.raw = RawProxy.Create(d.raw, field + ".raw"); + d.binary = BinaryProxy.Create(d.binary, field + ".binary"); + d.graphql = GraphqlProxy.Create(d.graphql, field + ".graphql"); + return new Body1Proxy(d); + } + private constructor(d: any) { + this.bodyType = d.bodyType; + this.formdata = d.formdata; + this.urlencoded = d.urlencoded; + this.raw = d.raw; + this.binary = d.binary; + this.graphql = d.graphql; + } +} + +export class Settings1Proxy { + public readonly auth: Auth2Proxy; + public static Parse(d: string): Settings1Proxy | null { + return Settings1Proxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): Settings1Proxy | null { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + return null; + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, true); + } else if (Array.isArray(d)) { + throwIsArray(field, d, true); + } + d.auth = Auth2Proxy.Create(d.auth, field + ".auth"); + return new Settings1Proxy(d); + } + private constructor(d: any) { + this.auth = d.auth; + } +} + +export class AuthProxy { + public readonly authType: string; + public readonly userName: string; + public readonly password: string; + public readonly addTo: string; + public readonly showPwd: boolean; + public readonly tokenPrefix: string; + public readonly aws: AwsProxy | null; + public readonly oauth: OauthProxy | null; + public static Parse(d: string): AuthProxy | null { + return AuthProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): AuthProxy | null { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + return null; + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, true); + } else if (Array.isArray(d)) { + throwIsArray(field, d, true); + } + checkString(d.authType, false, field + ".authType"); + checkString(d.userName, false, field + ".userName"); + checkString(d.password, false, field + ".password"); + checkString(d.addTo, false, field + ".addTo"); + checkBoolean(d.showPwd, false, field + ".showPwd"); + checkString(d.tokenPrefix, false, field + ".tokenPrefix"); + d.aws = AwsProxy.Create(d.aws, field + ".aws"); + d.oauth = OauthProxy.Create(d.oauth, field + ".oauth"); + return new AuthProxy(d); + } + private constructor(d: any) { + this.authType = d.authType; + this.userName = d.userName; + this.password = d.password; + this.addTo = d.addTo; + this.showPwd = d.showPwd; + this.tokenPrefix = d.tokenPrefix; + this.aws = d.aws; + this.oauth = d.oauth; + } +} + +export class HeadersEntityProxy { + public readonly isChecked: boolean; + public readonly isFixed: boolean | null; + public readonly key: string; + public readonly value: string; + public static Parse(d: string): HeadersEntityProxy { + return HeadersEntityProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): HeadersEntityProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkBoolean(d.isChecked, false, field + ".isChecked"); + checkBoolean(d.isFixed, true, field + ".isFixed"); + if (d.isFixed === undefined) { + d.isFixed = null; + } + checkString(d.key, false, field + ".key"); + checkString(d.value, false, field + ".value"); + return new HeadersEntityProxy(d); + } + private constructor(d: any) { + this.isChecked = d.isChecked; + this.isFixed = d.isFixed; + this.key = d.key; + this.value = d.value; + } +} + +export class BodyProxy { + public readonly bodyType: string; + public readonly formdata: TableDataEntity[] | null; + public readonly urlencoded: TableDataEntity[] | null; + public readonly raw: RawProxy; + public readonly binary: BinaryProxy; + public readonly graphql: GraphqlProxy; + public static Parse(d: string): BodyProxy | null { + return BodyProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): BodyProxy | null { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + return null; + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, true); + } else if (Array.isArray(d)) { + throwIsArray(field, d, true); + } + checkString(d.bodyType, false, field + ".bodyType"); + checkArray(d.formdata, field + ".formdata"); + if (d.formdata) { + for (let i = 0; i < d.formdata.length; i++) { + d.formdata[i] = TableDataEntity.Create(d.formdata[i], field + ".formdata" + "[" + i + "]"); + } + } + if (d.formdata === undefined) { + d.formdata = null; + } + checkArray(d.urlencoded, field + ".urlencoded"); + if (d.urlencoded) { + for (let i = 0; i < d.urlencoded.length; i++) { + d.urlencoded[i] = TableDataEntity.Create(d.urlencoded[i], field + ".urlencoded" + "[" + i + "]"); + } + } + if (d.urlencoded === undefined) { + d.urlencoded = null; + } + d.raw = RawProxy.Create(d.raw, field + ".raw"); + d.binary = BinaryProxy.Create(d.binary, field + ".binary"); + d.graphql = GraphqlProxy.Create(d.graphql, field + ".graphql"); + return new BodyProxy(d); + } + private constructor(d: any) { + this.bodyType = d.bodyType; + this.formdata = d.formdata; + this.urlencoded = d.urlencoded; + this.raw = d.raw; + this.binary = d.binary; + this.graphql = d.graphql; + } +} + +export class PreFetchProxy { + public readonly requests: RequestsEntityProxy[] | null; + public static Parse(d: string): PreFetchProxy | null { + return PreFetchProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): PreFetchProxy | null { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + return null; + } else if (typeof(d) !== 'object') { + throwNotObject(field, d, true); + } else if (Array.isArray(d)) { + throwIsArray(field, d, true); + } + checkArray(d.requests, field + ".requests"); + if (d.requests) { + for (let i = 0; i < d.requests.length; i++) { + d.requests[i] = RequestsEntityProxy.Create(d.requests[i], field + ".requests" + "[" + i + "]"); + } + } + if (d.requests === undefined) { + d.requests = null; + } + return new PreFetchProxy(d); + } + private constructor(d: any) { + this.requests = d.requests; + } +} + +export class RequestsEntityProxy { + public readonly reqId: string; + public readonly parentId: string; + public readonly colId: string; + public readonly order: number; + public readonly condition: ConditionEntityProxy[] | null; + public static Parse(d: string): RequestsEntityProxy { + return RequestsEntityProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): RequestsEntityProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof(d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.reqId, false, field + ".reqId"); + checkString(d.parentId, false, field + ".parentId"); + checkString(d.colId, false, field + ".colId"); + checkNumber(d.order, false, field + ".order"); + checkArray(d.condition, field + ".condition"); + if (d.condition) { + for (let i = 0; i < d.condition.length; i++) { + d.condition[i] = ConditionEntityProxy.Create(d.condition[i], field + ".condition" + "[" + i + "]"); + } + } + if (d.condition === undefined) { + d.condition = null; + } + return new RequestsEntityProxy(d); + } + private constructor(d: any) { + this.reqId = d.reqId; + this.parentId = d.parentId; + this.colId = d.colId; + this.order = d.order; + this.condition = d.condition; + } +} + +export class ConditionEntityProxy { + public readonly parameter: string; + public readonly action: string; + public readonly expectedValue: string; + public readonly customParameter: string | null; + public static Parse(d: string): ConditionEntityProxy { + return ConditionEntityProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): ConditionEntityProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof(d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.parameter, false, field + ".parameter"); + checkString(d.action, false, field + ".action"); + checkString(d.expectedValue, false, field + ".expectedValue"); + checkString(d.customParameter, true, field + ".customParameter"); + if (d.customParameter === undefined) { + d.customParameter = null; + } + return new ConditionEntityProxy(d); + } + private constructor(d: any) { + this.parameter = d.parameter; + this.action = d.action; + this.expectedValue = d.expectedValue; + this.customParameter = d.customParameter; + } +} + +export class SettingsProxy { + public readonly auth: Auth2Proxy; + public static Parse(d: string): SettingsProxy { + return SettingsProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): SettingsProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof (d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + d.auth = Auth2Proxy.Create(d.auth, field + ".auth"); + return new SettingsProxy(d); + } + private constructor(d: any) { + this.auth = d.auth; + } +} + +function throwNull2NonNull(field: string, d: any): never { + return errorHelper(field, d, "non-nullable object", false); +} +function throwNotObject(field: string, d: any, nullable: boolean): never { + return errorHelper(field, d, "object", nullable); +} +function throwIsArray(field: string, d: any, nullable: boolean): never { + return errorHelper(field, d, "object", nullable); +} +function checkArray(d: any, field: string): void { + if (!Array.isArray(d) && d !== null && d !== undefined) { + errorHelper(field, d, "array", true); + } +} +function checkNumber(d: any, nullable: boolean, field: string): void { + if (typeof(d) !== 'number' && (!nullable || (nullable && d !== null && d !== undefined))) { + errorHelper(field, d, "number", nullable); + } +} +function checkBoolean(d: any, nullable: boolean, field: string): void { + if (typeof (d) !== 'boolean' && (!nullable || (nullable && d !== null && d !== undefined))) { + errorHelper(field, d, "boolean", nullable); + } +} +function checkString(d: any, nullable: boolean, field: string): void { + if (typeof (d) !== 'string' && (!nullable || (nullable && d !== null && d !== undefined))) { + errorHelper(field, d, "string", nullable); + } +} +function errorHelper(field: string, d: any, type: string, nullable: boolean): never { + if (nullable) { + type += ", null, or undefined"; + } + throw new TypeError("Expected '" + type + "' at '" + field + "' but found: " + JSON.stringify(d) + "\nFull object:\n" + JSON.stringify(obj)); +} +function checkStringValue(d: any, field: string, value: string): void { + if (d !== value) { + errorHelper(field, d, value, false); + } +} diff --git a/src/utils/validators/fetchClientVariableValidator.ts b/src/utils/validators/fetchClientVariableValidator.ts new file mode 100644 index 0000000..bb96886 --- /dev/null +++ b/src/utils/validators/fetchClientVariableValidator.ts @@ -0,0 +1,131 @@ +let obj: any = null; +export class FetchClientVariableProxy { + public readonly app: string; + public readonly id: string; + public readonly name: string; + public readonly version: string; + public readonly type: string; + public readonly createdTime: string; + public readonly exportedDate: string; + public readonly isActive: boolean; + public readonly data: DataEntityProxy[] | null; + public static Parse(d: string): FetchClientVariableProxy { + return FetchClientVariableProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): FetchClientVariableProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof(d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkString(d.app, false, field + ".app"); + checkStringValue(d.app, field + ".app", "Fetch Client"); + checkString(d.id, false, field + ".id"); + checkString(d.name, false, field + ".name"); + checkString(d.version, false, field + ".version"); + checkString(d.type, false, field + ".type"); + checkStringValue(d.type, field + ".type", "variables"); + checkString(d.createdTime, false, field + ".createdTime"); + checkString(d.exportedDate, false, field + ".exportedDate"); + checkBoolean(d.isActive, false, field + ".isActive"); + checkArray(d.data, field + ".data"); + if (d.data) { + for (let i = 0; i < d.data.length; i++) { + d.data[i] = DataEntityProxy.Create(d.data[i], field + ".data" + "[" + i + "]"); + } + } + if (d.data === undefined) { + d.data = null; + } + return new FetchClientVariableProxy(d); + } + private constructor(d: any) { + this.app = d.app; + this.id = d.id; + this.name = d.name; + this.version = d.version; + this.type = d.type; + this.createdTime = d.createdTime; + this.exportedDate = d.exportedDate; + this.isActive = d.isActive; + this.data = d.data; + } +} + +export class DataEntityProxy { + public readonly isChecked: boolean; + public readonly key: string; + public readonly value: string; + public static Parse(d: string): DataEntityProxy { + return DataEntityProxy.Create(JSON.parse(d)); + } + public static Create(d: any, field: string = 'root'): DataEntityProxy { + if (!field) { + obj = d; + field = "root"; + } + if (d === null || d === undefined) { + throwNull2NonNull(field, d); + } else if (typeof(d) !== 'object') { + throwNotObject(field, d, false); + } else if (Array.isArray(d)) { + throwIsArray(field, d, false); + } + checkBoolean(d.isChecked, false, field + ".isChecked"); + checkString(d.key, false, field + ".key"); + checkStringOrNumber(d.value, false, field + ".value"); + return new DataEntityProxy(d); + } + private constructor(d: any) { + this.isChecked = d.isChecked; + this.key = d.key; + this.value = d.value; + } +} + +function throwNull2NonNull(field: string, d: any): never { + return errorHelper(field, d, "non-nullable object", false); +} +function throwNotObject(field: string, d: any, nullable: boolean): never { + return errorHelper(field, d, "object", nullable); +} +function throwIsArray(field: string, d: any, nullable: boolean): never { + return errorHelper(field, d, "object", nullable); +} +function checkArray(d: any, field: string): void { + if (!Array.isArray(d) && d !== null && d !== undefined) { + errorHelper(field, d, "array", true); + } +} +function checkBoolean(d: any, nullable: boolean, field: string): void { + if (typeof(d) !== 'boolean' && (!nullable || (nullable && d !== null && d !== undefined))) { + errorHelper(field, d, "boolean", nullable); + } +} +function checkString(d: any, nullable: boolean, field: string): void { + if (typeof(d) !== 'string' && (!nullable || (nullable && d !== null && d !== undefined))) { + errorHelper(field, d, "string", nullable); + } +} +function checkStringOrNumber(d: any, nullable: boolean, field: string): void { + if ((typeof(d) !== 'string' && typeof(d) !== 'number') && (!nullable || (nullable && d !== null && d !== undefined))) { + errorHelper(field, d, "stringORnumber", nullable); + } +} +function errorHelper(field: string, d: any, type: string, nullable: boolean): never { + if (nullable) { + type += ", null, or undefined"; + } + throw new TypeError("Expected '" + type + "' at '" + field + "' but found:\n" + JSON.stringify(d) + "\n\nFull object:\n" + JSON.stringify(obj)); +} +function checkStringValue(d: any, field: string, value: string): void { + if (d !== value) { + errorHelper(field, d, value, false); + } +} \ No newline at end of file diff --git a/src/utils/vscodeConfig.ts b/src/utils/vscodeConfig.ts index 2ddfa94..99db015 100644 --- a/src/utils/vscodeConfig.ts +++ b/src/utils/vscodeConfig.ts @@ -17,6 +17,11 @@ export function getConfiguration(): any { return { type: responseTypes.configResponse, configData: JSON.stringify(config), theme: theme }; } +export function getVSCodeTheme(): any { + const theme = vscode.window.activeColorTheme.kind; + return { type: responseTypes.themeResponse, theme: theme }; +} + export function getSSLConfiguration(): boolean { let config = getFetchClientConfiguration(); let sslCheck = config.get("SSLCheck", true); @@ -29,32 +34,38 @@ export function getHistoryLimitConfiguration(): string { return limit; } -export function getTimeOutConfiguration(): string { +export function getTimeOutConfiguration(): number { let config = getFetchClientConfiguration(); - let limit = config.get("timeOut", "5 min"); + let limit = config.get("timeOut", 120000); return limit; } +export function getHeadersConfiguration(): boolean { + let config = getFetchClientConfiguration(); + let headerCase = config.get("headersCaseSensitive", true); + return headerCase; +} + export function getProtocolConfiguration(): string { let config = getFetchClientConfiguration(); let limit = config.get("defaultProtocol", "http"); return limit; } -export function getTimeOut(): number { - const configTimout = getTimeOutConfiguration(); - switch (configTimout) { - case "30 sec": - return 30000; - case "1 min": - return 60000; - case "2 min": - return 120000; - case "5 min": - return 300000; - case "10 min": - return 600000; - case "no timeout": - return 0; - } -} \ No newline at end of file +export function getRequestTabOption(): boolean { + let config = getFetchClientConfiguration(); + let option = config.get("separateRequestTab", false); + return option; +} + +export function getLogOption(): boolean { + let config = getFetchClientConfiguration(); + let option = config.get("log", false); + return option; +} + +export function getRunMainRequestOption(): boolean { + let config = getFetchClientConfiguration(); + let option = config.get("runMainRequest", true); + return option; +} diff --git a/tsconfig.json b/tsconfig.json index ed26d65..ffcdc39 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,6 +12,7 @@ "sourceMap": true, "rootDir": ".", "resolveJsonModule": true, + "skipLibCheck": true, "strict": false /* enable all strict type-checking options */ /* Additional Checks */ // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ diff --git a/webpack.config.js b/webpack.config.js index 3574cca..02689cb 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -125,7 +125,7 @@ function fetchClientUIConfig(webpackEnv) { new MiniCssExtractPlugin(), new MonacoWebpackPlugin({ languages: [ - 'cpp', 'csharp', 'go', 'java', 'javascript', 'json', 'html', 'xml', 'php', 'python', 'shell', 'graphql', 'restructuredtext' + 'cpp', 'csharp', 'dart', 'go', 'java', 'javascript', 'json', 'kotlin', 'ruby' , 'typescript', 'html', 'xml', 'php', 'python', 'shell', 'swift', 'graphql', 'restructuredtext' ] }), new webpack.ProvidePlugin({