├── .gitignore ├── .npmignore ├── LICENSE ├── README.MD ├── esbuild.js ├── package-lock.json ├── package.json ├── src ├── index.ts ├── models │ ├── har.ts │ ├── index.ts │ └── record-request.ts ├── recorder.ts ├── use-network-record-mocks.ts └── utils │ ├── file-utils.ts │ ├── index.ts │ └── requests-utils.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | esbuild.js 3 | tsconfig.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Guilherme 'Kousen' Luersen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # playwright-request-mocker 2 | 3 | *Automatically generate and use network request mocks inside Playwright!* 4 | 5 | ### Features :mag_right: 6 | 7 | Mocking your API requests takes too much precious development time, this library strives to make it effortless by: 8 | - Allowing you to declare just once the hook use, it finds the mock file; 9 | - If the mock file does not exist yet, it will open a Playwright's chromium tab, and record all your XHR requests and responses; 10 | - It'll automatically intercept all registered HTTP requests defined in the mock file for any future runs. 11 | 12 | 13 | ### Install :construction_worker: 14 | 1. Install the package: 15 | - ``npm install playwright-request-mocker -D`` 16 | - or ``yarn add playwright-request-mocker -D``; 17 | 2. Be sure to have ``@playwright/test`` also installed. 18 | 19 | ### Using :electric_plug: 20 | 1. Add to a ``.spec`` file, inside a ``beforeEach`` or ``test`` method, the hook call ``useNetworkRecordMocks`` passing the test context page, identifier of the mock (only necessary if each test scenario has a different mock), and a route to be used by the recording tab if there is no mock file yet; 21 | 22 | - e.g. 23 | ``` ts 24 | import { useNetworkRecordMocks } from 'playwright-request-mocker'; // if using .mjs / .ts 25 | // const { useNetworkRecordMocks } = require('playwright-request-mocker'); //if using .js 26 | 27 | test.describe('Your test', () => { 28 | // If your network requests/responses are the same for every test scenario, define it here. 29 | test.beforeEach(async ({ page }) => { 30 | await useNetworkRecordMocks(page, { 31 | recordRoute: `${process.env.APP_URL}/page-you-are-testing`, 32 | }); 33 | 34 | await page.goto(`${process.env.APP_URL}/page-you-are-testing`); 35 | }); 36 | 37 | // else use it here if each test scenario expects different results. 38 | test('scenario1', async ({ page }) => { 39 | // It'll generate a new file if it does not exist (".spec.scenario1.mocks.json") 40 | // then it'll read it and mock all defined network requests. 41 | await useNetworkRecordMocks(page, { 42 | identifier: 'scenario1', 43 | recordRoute: `${process.env.APP_URL}/page-you-are-testing` 44 | }); 45 | 46 | await page.goto(`${process.env.APP_URL}/page-you-are-testing`); 47 | 48 | //... your steps and asserts. 49 | }); 50 | }); 51 | ``` 52 | 53 | 1. Run in debug mode; 54 | - PWDEBUG=console forces Playwright to run headed, disables the timeouts and shows the console helper. 55 | 56 | ``` 57 | // Linux/macOS 58 | PWDEBUG=console npm run playwright test 59 | 60 | // Windows on cmd.exe 61 | set PWDEBUG=console 62 | npm run playwright test 63 | 64 | // Windows on PowerShell 65 | $env:PWDEBUG="console" 66 | npm run playwright test 67 | ``` 68 | 69 | - If the mock file does not exist yet, it'll open a new tab and will be recording all the XHR requests as you navigate. When you think you recorded everything you needed, press the resume button in the ``playwright/test`` UI. 70 | - After it, or if the mock file ever exists, it will use the results to run your test scenario. 71 | 72 | 73 | ### How it works :question: 74 | 75 | - useNetworkRecordMocks checks if there is a file ``[invoker-file-name].mocks.json`` (or ``[invoker-file-name].[identifier].mocks.json``), if it doesn't exists, it'll open a chromiun tab using chrome's [recordHAR](https://en.wikipedia.org/wiki/HAR_(file_format)) option. When the Playwright debug mode is unpaused, it'll process such file removing every request other than XHR ones; 76 | - useNetworkRecordMocks will parse the existing file, and mock every request declared on it. 77 | 78 | ### Different use cases :footprints: 79 | 80 | - **For a given test scenario, I need to change the mocked value**: there are 3 ways to achieve this, 1 being creating a new specific mock file at each scenario (by calling useNetworkRecordMocks inside each test with a identifier), and others being overriding the route response, like the following: 81 | 82 | Overriding approach: for when the ``useNetworkRecordMocks`` call is inside the test scenario: 83 | ``` ts 84 | import { useNetworkRecordMocks, mockRouteResponse } from 'playwright-request-mocker'; 85 | 86 | // [...] 87 | 88 | test('my different scenario', async ({ 89 | page, 90 | }) => { 91 | const errorMessage = 'error message I expect'; 92 | 93 | await useNetworkRecordMocks(page, { 94 | recordRoute: `${process.env.APP_URL}/page-you-are-testing`, 95 | overrideResponses: { 96 | "/ENDPOINT_TO_CHANGE": { errors: [{ message: errorMessage }] } 97 | } 98 | }); 99 | 100 | await page.goto(`${process.env.APP_URL}/page-you-are-testing`); 101 | 102 | await Promise.all([ 103 | page.waitForRequest('**/ENDPOINT_TO_CHANGE'), 104 | fillForm(page), 105 | ]); 106 | 107 | await page.waitForSelector(`text=${errorMessage}`); 108 | const visible = await page.isVisible(`text=${errorMessage}`); 109 | expect(visible).toBeTruthy(); 110 | }); 111 | ``` 112 | Unrouting approach: for when the ``useNetworkRecordMocks`` call is inside a ``beforeEach``: 113 | ``` ts 114 | 115 | test.describe('Test', () => { 116 | test.beforeEach(async ({ page }) => { 117 | await useNetworkRecordMocks(page, { 118 | recordRoute: `${process.env.APP_URL}/page-you-are-testing`, 119 | }); 120 | 121 | await page.goto(`${process.env.APP_URL}/page-you-are-testing`); 122 | }); 123 | 124 | test('my different scenario', async ({ 125 | page 126 | }) => { 127 | const errorMessage = 'error message I expect'; 128 | 129 | page.unroute('**/ENDPOINT_TO_CHANGE'); 130 | mockRouteResponse( 131 | page, 132 | '**/ENDPOINT_TO_CHANGE', 133 | { errors: [{ message: errorMessage }] }, 134 | 400, 135 | ); 136 | 137 | await Promise.all([ 138 | page.waitForRequest('**/ENDPOINT_TO_CHANGE'), 139 | fillForm(page), 140 | ]); 141 | 142 | await page.waitForSelector(`text=${errorMessage}`); 143 | const visible = await page.isVisible(`text=${errorMessage}`); 144 | expect(visible).toBeTruthy(); 145 | }); 146 | } 147 | ``` 148 | 149 | - **I want to assert the payload sent against what was expected**: ``useNetworkRecordMocks`` returns every mocked request payload, you can use it to assert the values: 150 | 151 | ``` ts 152 | test('my different scenario', async ({ 153 | page, 154 | }) => { 155 | 156 | const requests = await useNetworkRecordMocks( 157 | page, 158 | { 159 | recordRoute: `${process.env.APP_URL}/test-route`, 160 | } 161 | ); 162 | 163 | const [req] = await Promise.all([ 164 | page.waitForRequest('**/ENDPOINT_TO_TEST'), 165 | fillForm(page), 166 | ]); 167 | 168 | const expectedPayload = requests.find(r => r.url.includes('ENDPOINT_TO_TEST'))?.requestData; 169 | 170 | expect(expectedPayload).toStrictEqual(req.postDataJSON()); 171 | 172 | }); 173 | 174 | ``` 175 | 176 | - **I already have a HAR recorded file that I want to use**: as long as it follows the same name structure as the file that is using it, the lib will prioritize it over recording a new one to generate the new mocks.json file: 177 | ``` 178 | /tests 179 | |- my-test.spec.js 180 | |- my-test.spec.har 181 | |- my-test.spec.identifier.har 182 | 183 | ``` 184 | 185 | ---- 186 | 187 | 188 | Feel free to contribute, report bugs, or [contact me](https://github.com/kousenlsn). 189 | -------------------------------------------------------------------------------- /esbuild.js: -------------------------------------------------------------------------------- 1 | var esbuild = require('esbuild'); 2 | var globby = require('globby'); 3 | 4 | async function _findEntryPoints() { 5 | const files = await globby([ 6 | 'src/**/*.ts', 7 | 'src/**/*.tsx', 8 | ]); 9 | 10 | return files; 11 | } 12 | 13 | function main() { 14 | _findEntryPoints().then((result) => { 15 | esbuild 16 | .build({ 17 | entryPoints: result, 18 | bundle: false, 19 | outdir: 'dist', 20 | format: 'cjs', 21 | sourcemap: 'external', 22 | platform: 'node', 23 | }) 24 | .catch(() => process.exit(1)); 25 | }); 26 | } 27 | 28 | main(); 29 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "playwright-request-mocker", 3 | "version": "0.1.6", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "version": "0.1.6", 9 | "license": "MIT", 10 | "devDependencies": { 11 | "@playwright/test": "^1.12.3", 12 | "esbuild": "^0.12.17", 13 | "globby": "^11.0.4", 14 | "rimraf": "^3.0.2", 15 | "typescript": "4.2.2" 16 | }, 17 | "peerDependencies": { 18 | "@playwright/test": "^1.12.3" 19 | } 20 | }, 21 | "node_modules/@babel/code-frame": { 22 | "version": "7.14.5", 23 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", 24 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", 25 | "dev": true, 26 | "dependencies": { 27 | "@babel/highlight": "^7.14.5" 28 | }, 29 | "engines": { 30 | "node": ">=6.9.0" 31 | } 32 | }, 33 | "node_modules/@babel/compat-data": { 34 | "version": "7.14.9", 35 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", 36 | "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==", 37 | "dev": true, 38 | "engines": { 39 | "node": ">=6.9.0" 40 | } 41 | }, 42 | "node_modules/@babel/core": { 43 | "version": "7.14.8", 44 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz", 45 | "integrity": "sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==", 46 | "dev": true, 47 | "dependencies": { 48 | "@babel/code-frame": "^7.14.5", 49 | "@babel/generator": "^7.14.8", 50 | "@babel/helper-compilation-targets": "^7.14.5", 51 | "@babel/helper-module-transforms": "^7.14.8", 52 | "@babel/helpers": "^7.14.8", 53 | "@babel/parser": "^7.14.8", 54 | "@babel/template": "^7.14.5", 55 | "@babel/traverse": "^7.14.8", 56 | "@babel/types": "^7.14.8", 57 | "convert-source-map": "^1.7.0", 58 | "debug": "^4.1.0", 59 | "gensync": "^1.0.0-beta.2", 60 | "json5": "^2.1.2", 61 | "semver": "^6.3.0", 62 | "source-map": "^0.5.0" 63 | }, 64 | "engines": { 65 | "node": ">=6.9.0" 66 | }, 67 | "funding": { 68 | "type": "opencollective", 69 | "url": "https://opencollective.com/babel" 70 | } 71 | }, 72 | "node_modules/@babel/generator": { 73 | "version": "7.14.9", 74 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.9.tgz", 75 | "integrity": "sha512-4yoHbhDYzFa0GLfCzLp5GxH7vPPMAHdZjyE7M/OajM9037zhx0rf+iNsJwp4PT0MSFpwjG7BsHEbPkBQpZ6cYA==", 76 | "dev": true, 77 | "dependencies": { 78 | "@babel/types": "^7.14.9", 79 | "jsesc": "^2.5.1", 80 | "source-map": "^0.5.0" 81 | }, 82 | "engines": { 83 | "node": ">=6.9.0" 84 | } 85 | }, 86 | "node_modules/@babel/helper-annotate-as-pure": { 87 | "version": "7.14.5", 88 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", 89 | "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", 90 | "dev": true, 91 | "dependencies": { 92 | "@babel/types": "^7.14.5" 93 | }, 94 | "engines": { 95 | "node": ">=6.9.0" 96 | } 97 | }, 98 | "node_modules/@babel/helper-compilation-targets": { 99 | "version": "7.14.5", 100 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", 101 | "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", 102 | "dev": true, 103 | "dependencies": { 104 | "@babel/compat-data": "^7.14.5", 105 | "@babel/helper-validator-option": "^7.14.5", 106 | "browserslist": "^4.16.6", 107 | "semver": "^6.3.0" 108 | }, 109 | "engines": { 110 | "node": ">=6.9.0" 111 | }, 112 | "peerDependencies": { 113 | "@babel/core": "^7.0.0" 114 | } 115 | }, 116 | "node_modules/@babel/helper-create-class-features-plugin": { 117 | "version": "7.14.8", 118 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", 119 | "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", 120 | "dev": true, 121 | "dependencies": { 122 | "@babel/helper-annotate-as-pure": "^7.14.5", 123 | "@babel/helper-function-name": "^7.14.5", 124 | "@babel/helper-member-expression-to-functions": "^7.14.7", 125 | "@babel/helper-optimise-call-expression": "^7.14.5", 126 | "@babel/helper-replace-supers": "^7.14.5", 127 | "@babel/helper-split-export-declaration": "^7.14.5" 128 | }, 129 | "engines": { 130 | "node": ">=6.9.0" 131 | }, 132 | "peerDependencies": { 133 | "@babel/core": "^7.0.0" 134 | } 135 | }, 136 | "node_modules/@babel/helper-function-name": { 137 | "version": "7.14.5", 138 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", 139 | "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", 140 | "dev": true, 141 | "dependencies": { 142 | "@babel/helper-get-function-arity": "^7.14.5", 143 | "@babel/template": "^7.14.5", 144 | "@babel/types": "^7.14.5" 145 | }, 146 | "engines": { 147 | "node": ">=6.9.0" 148 | } 149 | }, 150 | "node_modules/@babel/helper-get-function-arity": { 151 | "version": "7.14.5", 152 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", 153 | "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", 154 | "dev": true, 155 | "dependencies": { 156 | "@babel/types": "^7.14.5" 157 | }, 158 | "engines": { 159 | "node": ">=6.9.0" 160 | } 161 | }, 162 | "node_modules/@babel/helper-hoist-variables": { 163 | "version": "7.14.5", 164 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", 165 | "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", 166 | "dev": true, 167 | "dependencies": { 168 | "@babel/types": "^7.14.5" 169 | }, 170 | "engines": { 171 | "node": ">=6.9.0" 172 | } 173 | }, 174 | "node_modules/@babel/helper-member-expression-to-functions": { 175 | "version": "7.14.7", 176 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", 177 | "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", 178 | "dev": true, 179 | "dependencies": { 180 | "@babel/types": "^7.14.5" 181 | }, 182 | "engines": { 183 | "node": ">=6.9.0" 184 | } 185 | }, 186 | "node_modules/@babel/helper-module-imports": { 187 | "version": "7.14.5", 188 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", 189 | "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", 190 | "dev": true, 191 | "dependencies": { 192 | "@babel/types": "^7.14.5" 193 | }, 194 | "engines": { 195 | "node": ">=6.9.0" 196 | } 197 | }, 198 | "node_modules/@babel/helper-module-transforms": { 199 | "version": "7.14.8", 200 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", 201 | "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", 202 | "dev": true, 203 | "dependencies": { 204 | "@babel/helper-module-imports": "^7.14.5", 205 | "@babel/helper-replace-supers": "^7.14.5", 206 | "@babel/helper-simple-access": "^7.14.8", 207 | "@babel/helper-split-export-declaration": "^7.14.5", 208 | "@babel/helper-validator-identifier": "^7.14.8", 209 | "@babel/template": "^7.14.5", 210 | "@babel/traverse": "^7.14.8", 211 | "@babel/types": "^7.14.8" 212 | }, 213 | "engines": { 214 | "node": ">=6.9.0" 215 | } 216 | }, 217 | "node_modules/@babel/helper-optimise-call-expression": { 218 | "version": "7.14.5", 219 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", 220 | "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", 221 | "dev": true, 222 | "dependencies": { 223 | "@babel/types": "^7.14.5" 224 | }, 225 | "engines": { 226 | "node": ">=6.9.0" 227 | } 228 | }, 229 | "node_modules/@babel/helper-plugin-utils": { 230 | "version": "7.14.5", 231 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", 232 | "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", 233 | "dev": true, 234 | "engines": { 235 | "node": ">=6.9.0" 236 | } 237 | }, 238 | "node_modules/@babel/helper-replace-supers": { 239 | "version": "7.14.5", 240 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", 241 | "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", 242 | "dev": true, 243 | "dependencies": { 244 | "@babel/helper-member-expression-to-functions": "^7.14.5", 245 | "@babel/helper-optimise-call-expression": "^7.14.5", 246 | "@babel/traverse": "^7.14.5", 247 | "@babel/types": "^7.14.5" 248 | }, 249 | "engines": { 250 | "node": ">=6.9.0" 251 | } 252 | }, 253 | "node_modules/@babel/helper-simple-access": { 254 | "version": "7.14.8", 255 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", 256 | "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", 257 | "dev": true, 258 | "dependencies": { 259 | "@babel/types": "^7.14.8" 260 | }, 261 | "engines": { 262 | "node": ">=6.9.0" 263 | } 264 | }, 265 | "node_modules/@babel/helper-skip-transparent-expression-wrappers": { 266 | "version": "7.14.5", 267 | "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", 268 | "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", 269 | "dev": true, 270 | "dependencies": { 271 | "@babel/types": "^7.14.5" 272 | }, 273 | "engines": { 274 | "node": ">=6.9.0" 275 | } 276 | }, 277 | "node_modules/@babel/helper-split-export-declaration": { 278 | "version": "7.14.5", 279 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", 280 | "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", 281 | "dev": true, 282 | "dependencies": { 283 | "@babel/types": "^7.14.5" 284 | }, 285 | "engines": { 286 | "node": ">=6.9.0" 287 | } 288 | }, 289 | "node_modules/@babel/helper-validator-identifier": { 290 | "version": "7.14.9", 291 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", 292 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", 293 | "dev": true, 294 | "engines": { 295 | "node": ">=6.9.0" 296 | } 297 | }, 298 | "node_modules/@babel/helper-validator-option": { 299 | "version": "7.14.5", 300 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", 301 | "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", 302 | "dev": true, 303 | "engines": { 304 | "node": ">=6.9.0" 305 | } 306 | }, 307 | "node_modules/@babel/helpers": { 308 | "version": "7.14.8", 309 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz", 310 | "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==", 311 | "dev": true, 312 | "dependencies": { 313 | "@babel/template": "^7.14.5", 314 | "@babel/traverse": "^7.14.8", 315 | "@babel/types": "^7.14.8" 316 | }, 317 | "engines": { 318 | "node": ">=6.9.0" 319 | } 320 | }, 321 | "node_modules/@babel/highlight": { 322 | "version": "7.14.5", 323 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 324 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 325 | "dev": true, 326 | "dependencies": { 327 | "@babel/helper-validator-identifier": "^7.14.5", 328 | "chalk": "^2.0.0", 329 | "js-tokens": "^4.0.0" 330 | }, 331 | "engines": { 332 | "node": ">=6.9.0" 333 | } 334 | }, 335 | "node_modules/@babel/parser": { 336 | "version": "7.14.9", 337 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.9.tgz", 338 | "integrity": "sha512-RdUTOseXJ8POjjOeEBEvNMIZU/nm4yu2rufRkcibzkkg7DmQvXU8v3M4Xk9G7uuI86CDGkKcuDWgioqZm+mScQ==", 339 | "dev": true, 340 | "bin": { 341 | "parser": "bin/babel-parser.js" 342 | }, 343 | "engines": { 344 | "node": ">=6.0.0" 345 | } 346 | }, 347 | "node_modules/@babel/plugin-proposal-class-properties": { 348 | "version": "7.14.5", 349 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", 350 | "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", 351 | "dev": true, 352 | "dependencies": { 353 | "@babel/helper-create-class-features-plugin": "^7.14.5", 354 | "@babel/helper-plugin-utils": "^7.14.5" 355 | }, 356 | "engines": { 357 | "node": ">=6.9.0" 358 | }, 359 | "peerDependencies": { 360 | "@babel/core": "^7.0.0-0" 361 | } 362 | }, 363 | "node_modules/@babel/plugin-proposal-dynamic-import": { 364 | "version": "7.14.5", 365 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", 366 | "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", 367 | "dev": true, 368 | "dependencies": { 369 | "@babel/helper-plugin-utils": "^7.14.5", 370 | "@babel/plugin-syntax-dynamic-import": "^7.8.3" 371 | }, 372 | "engines": { 373 | "node": ">=6.9.0" 374 | }, 375 | "peerDependencies": { 376 | "@babel/core": "^7.0.0-0" 377 | } 378 | }, 379 | "node_modules/@babel/plugin-proposal-export-namespace-from": { 380 | "version": "7.14.5", 381 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", 382 | "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", 383 | "dev": true, 384 | "dependencies": { 385 | "@babel/helper-plugin-utils": "^7.14.5", 386 | "@babel/plugin-syntax-export-namespace-from": "^7.8.3" 387 | }, 388 | "engines": { 389 | "node": ">=6.9.0" 390 | }, 391 | "peerDependencies": { 392 | "@babel/core": "^7.0.0-0" 393 | } 394 | }, 395 | "node_modules/@babel/plugin-proposal-logical-assignment-operators": { 396 | "version": "7.14.5", 397 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", 398 | "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", 399 | "dev": true, 400 | "dependencies": { 401 | "@babel/helper-plugin-utils": "^7.14.5", 402 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" 403 | }, 404 | "engines": { 405 | "node": ">=6.9.0" 406 | }, 407 | "peerDependencies": { 408 | "@babel/core": "^7.0.0-0" 409 | } 410 | }, 411 | "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { 412 | "version": "7.14.5", 413 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", 414 | "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", 415 | "dev": true, 416 | "dependencies": { 417 | "@babel/helper-plugin-utils": "^7.14.5", 418 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" 419 | }, 420 | "engines": { 421 | "node": ">=6.9.0" 422 | }, 423 | "peerDependencies": { 424 | "@babel/core": "^7.0.0-0" 425 | } 426 | }, 427 | "node_modules/@babel/plugin-proposal-numeric-separator": { 428 | "version": "7.14.5", 429 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", 430 | "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", 431 | "dev": true, 432 | "dependencies": { 433 | "@babel/helper-plugin-utils": "^7.14.5", 434 | "@babel/plugin-syntax-numeric-separator": "^7.10.4" 435 | }, 436 | "engines": { 437 | "node": ">=6.9.0" 438 | }, 439 | "peerDependencies": { 440 | "@babel/core": "^7.0.0-0" 441 | } 442 | }, 443 | "node_modules/@babel/plugin-proposal-optional-chaining": { 444 | "version": "7.14.5", 445 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", 446 | "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", 447 | "dev": true, 448 | "dependencies": { 449 | "@babel/helper-plugin-utils": "^7.14.5", 450 | "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", 451 | "@babel/plugin-syntax-optional-chaining": "^7.8.3" 452 | }, 453 | "engines": { 454 | "node": ">=6.9.0" 455 | }, 456 | "peerDependencies": { 457 | "@babel/core": "^7.0.0-0" 458 | } 459 | }, 460 | "node_modules/@babel/plugin-proposal-private-methods": { 461 | "version": "7.14.5", 462 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", 463 | "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", 464 | "dev": true, 465 | "dependencies": { 466 | "@babel/helper-create-class-features-plugin": "^7.14.5", 467 | "@babel/helper-plugin-utils": "^7.14.5" 468 | }, 469 | "engines": { 470 | "node": ">=6.9.0" 471 | }, 472 | "peerDependencies": { 473 | "@babel/core": "^7.0.0-0" 474 | } 475 | }, 476 | "node_modules/@babel/plugin-proposal-private-property-in-object": { 477 | "version": "7.14.5", 478 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", 479 | "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", 480 | "dev": true, 481 | "dependencies": { 482 | "@babel/helper-annotate-as-pure": "^7.14.5", 483 | "@babel/helper-create-class-features-plugin": "^7.14.5", 484 | "@babel/helper-plugin-utils": "^7.14.5", 485 | "@babel/plugin-syntax-private-property-in-object": "^7.14.5" 486 | }, 487 | "engines": { 488 | "node": ">=6.9.0" 489 | }, 490 | "peerDependencies": { 491 | "@babel/core": "^7.0.0-0" 492 | } 493 | }, 494 | "node_modules/@babel/plugin-syntax-async-generators": { 495 | "version": "7.8.4", 496 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 497 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 498 | "dev": true, 499 | "dependencies": { 500 | "@babel/helper-plugin-utils": "^7.8.0" 501 | }, 502 | "peerDependencies": { 503 | "@babel/core": "^7.0.0-0" 504 | } 505 | }, 506 | "node_modules/@babel/plugin-syntax-dynamic-import": { 507 | "version": "7.8.3", 508 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 509 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 510 | "dev": true, 511 | "dependencies": { 512 | "@babel/helper-plugin-utils": "^7.8.0" 513 | }, 514 | "peerDependencies": { 515 | "@babel/core": "^7.0.0-0" 516 | } 517 | }, 518 | "node_modules/@babel/plugin-syntax-export-namespace-from": { 519 | "version": "7.8.3", 520 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", 521 | "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", 522 | "dev": true, 523 | "dependencies": { 524 | "@babel/helper-plugin-utils": "^7.8.3" 525 | }, 526 | "peerDependencies": { 527 | "@babel/core": "^7.0.0-0" 528 | } 529 | }, 530 | "node_modules/@babel/plugin-syntax-json-strings": { 531 | "version": "7.8.3", 532 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 533 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 534 | "dev": true, 535 | "dependencies": { 536 | "@babel/helper-plugin-utils": "^7.8.0" 537 | }, 538 | "peerDependencies": { 539 | "@babel/core": "^7.0.0-0" 540 | } 541 | }, 542 | "node_modules/@babel/plugin-syntax-logical-assignment-operators": { 543 | "version": "7.10.4", 544 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", 545 | "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", 546 | "dev": true, 547 | "dependencies": { 548 | "@babel/helper-plugin-utils": "^7.10.4" 549 | }, 550 | "peerDependencies": { 551 | "@babel/core": "^7.0.0-0" 552 | } 553 | }, 554 | "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { 555 | "version": "7.8.3", 556 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 557 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 558 | "dev": true, 559 | "dependencies": { 560 | "@babel/helper-plugin-utils": "^7.8.0" 561 | }, 562 | "peerDependencies": { 563 | "@babel/core": "^7.0.0-0" 564 | } 565 | }, 566 | "node_modules/@babel/plugin-syntax-numeric-separator": { 567 | "version": "7.10.4", 568 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", 569 | "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", 570 | "dev": true, 571 | "dependencies": { 572 | "@babel/helper-plugin-utils": "^7.10.4" 573 | }, 574 | "peerDependencies": { 575 | "@babel/core": "^7.0.0-0" 576 | } 577 | }, 578 | "node_modules/@babel/plugin-syntax-object-rest-spread": { 579 | "version": "7.8.3", 580 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 581 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 582 | "dev": true, 583 | "dependencies": { 584 | "@babel/helper-plugin-utils": "^7.8.0" 585 | }, 586 | "peerDependencies": { 587 | "@babel/core": "^7.0.0-0" 588 | } 589 | }, 590 | "node_modules/@babel/plugin-syntax-optional-catch-binding": { 591 | "version": "7.8.3", 592 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 593 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 594 | "dev": true, 595 | "dependencies": { 596 | "@babel/helper-plugin-utils": "^7.8.0" 597 | }, 598 | "peerDependencies": { 599 | "@babel/core": "^7.0.0-0" 600 | } 601 | }, 602 | "node_modules/@babel/plugin-syntax-optional-chaining": { 603 | "version": "7.8.3", 604 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 605 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 606 | "dev": true, 607 | "dependencies": { 608 | "@babel/helper-plugin-utils": "^7.8.0" 609 | }, 610 | "peerDependencies": { 611 | "@babel/core": "^7.0.0-0" 612 | } 613 | }, 614 | "node_modules/@babel/plugin-syntax-private-property-in-object": { 615 | "version": "7.14.5", 616 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", 617 | "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", 618 | "dev": true, 619 | "dependencies": { 620 | "@babel/helper-plugin-utils": "^7.14.5" 621 | }, 622 | "engines": { 623 | "node": ">=6.9.0" 624 | }, 625 | "peerDependencies": { 626 | "@babel/core": "^7.0.0-0" 627 | } 628 | }, 629 | "node_modules/@babel/plugin-syntax-typescript": { 630 | "version": "7.14.5", 631 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", 632 | "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", 633 | "dev": true, 634 | "dependencies": { 635 | "@babel/helper-plugin-utils": "^7.14.5" 636 | }, 637 | "engines": { 638 | "node": ">=6.9.0" 639 | }, 640 | "peerDependencies": { 641 | "@babel/core": "^7.0.0-0" 642 | } 643 | }, 644 | "node_modules/@babel/plugin-transform-modules-commonjs": { 645 | "version": "7.14.5", 646 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", 647 | "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", 648 | "dev": true, 649 | "dependencies": { 650 | "@babel/helper-module-transforms": "^7.14.5", 651 | "@babel/helper-plugin-utils": "^7.14.5", 652 | "@babel/helper-simple-access": "^7.14.5", 653 | "babel-plugin-dynamic-import-node": "^2.3.3" 654 | }, 655 | "engines": { 656 | "node": ">=6.9.0" 657 | }, 658 | "peerDependencies": { 659 | "@babel/core": "^7.0.0-0" 660 | } 661 | }, 662 | "node_modules/@babel/plugin-transform-typescript": { 663 | "version": "7.14.6", 664 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", 665 | "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", 666 | "dev": true, 667 | "dependencies": { 668 | "@babel/helper-create-class-features-plugin": "^7.14.6", 669 | "@babel/helper-plugin-utils": "^7.14.5", 670 | "@babel/plugin-syntax-typescript": "^7.14.5" 671 | }, 672 | "engines": { 673 | "node": ">=6.9.0" 674 | }, 675 | "peerDependencies": { 676 | "@babel/core": "^7.0.0-0" 677 | } 678 | }, 679 | "node_modules/@babel/preset-typescript": { 680 | "version": "7.14.5", 681 | "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", 682 | "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", 683 | "dev": true, 684 | "dependencies": { 685 | "@babel/helper-plugin-utils": "^7.14.5", 686 | "@babel/helper-validator-option": "^7.14.5", 687 | "@babel/plugin-transform-typescript": "^7.14.5" 688 | }, 689 | "engines": { 690 | "node": ">=6.9.0" 691 | }, 692 | "peerDependencies": { 693 | "@babel/core": "^7.0.0-0" 694 | } 695 | }, 696 | "node_modules/@babel/template": { 697 | "version": "7.14.5", 698 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", 699 | "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", 700 | "dev": true, 701 | "dependencies": { 702 | "@babel/code-frame": "^7.14.5", 703 | "@babel/parser": "^7.14.5", 704 | "@babel/types": "^7.14.5" 705 | }, 706 | "engines": { 707 | "node": ">=6.9.0" 708 | } 709 | }, 710 | "node_modules/@babel/traverse": { 711 | "version": "7.14.9", 712 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.9.tgz", 713 | "integrity": "sha512-bldh6dtB49L8q9bUyB7bC20UKgU+EFDwKJylwl234Kv+ySZeMD31Xeht6URyueQ6LrRRpF2tmkfcZooZR9/e8g==", 714 | "dev": true, 715 | "dependencies": { 716 | "@babel/code-frame": "^7.14.5", 717 | "@babel/generator": "^7.14.9", 718 | "@babel/helper-function-name": "^7.14.5", 719 | "@babel/helper-hoist-variables": "^7.14.5", 720 | "@babel/helper-split-export-declaration": "^7.14.5", 721 | "@babel/parser": "^7.14.9", 722 | "@babel/types": "^7.14.9", 723 | "debug": "^4.1.0", 724 | "globals": "^11.1.0" 725 | }, 726 | "engines": { 727 | "node": ">=6.9.0" 728 | } 729 | }, 730 | "node_modules/@babel/types": { 731 | "version": "7.14.9", 732 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.9.tgz", 733 | "integrity": "sha512-u0bLTnv3DFHeaQLYzb7oRJ1JHr1sv/SYDM7JSqHFFLwXG1wTZRughxFI5NCP8qBEo1rVVsn7Yg2Lvw49nne/Ow==", 734 | "dev": true, 735 | "dependencies": { 736 | "@babel/helper-validator-identifier": "^7.14.9", 737 | "to-fast-properties": "^2.0.0" 738 | }, 739 | "engines": { 740 | "node": ">=6.9.0" 741 | } 742 | }, 743 | "node_modules/@jest/types": { 744 | "version": "26.6.2", 745 | "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", 746 | "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", 747 | "dev": true, 748 | "dependencies": { 749 | "@types/istanbul-lib-coverage": "^2.0.0", 750 | "@types/istanbul-reports": "^3.0.0", 751 | "@types/node": "*", 752 | "@types/yargs": "^15.0.0", 753 | "chalk": "^4.0.0" 754 | }, 755 | "engines": { 756 | "node": ">= 10.14.2" 757 | } 758 | }, 759 | "node_modules/@jest/types/node_modules/ansi-styles": { 760 | "version": "4.3.0", 761 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 762 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 763 | "dev": true, 764 | "dependencies": { 765 | "color-convert": "^2.0.1" 766 | }, 767 | "engines": { 768 | "node": ">=8" 769 | }, 770 | "funding": { 771 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 772 | } 773 | }, 774 | "node_modules/@jest/types/node_modules/chalk": { 775 | "version": "4.1.2", 776 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 777 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 778 | "dev": true, 779 | "dependencies": { 780 | "ansi-styles": "^4.1.0", 781 | "supports-color": "^7.1.0" 782 | }, 783 | "engines": { 784 | "node": ">=10" 785 | }, 786 | "funding": { 787 | "url": "https://github.com/chalk/chalk?sponsor=1" 788 | } 789 | }, 790 | "node_modules/@jest/types/node_modules/color-convert": { 791 | "version": "2.0.1", 792 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 793 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 794 | "dev": true, 795 | "dependencies": { 796 | "color-name": "~1.1.4" 797 | }, 798 | "engines": { 799 | "node": ">=7.0.0" 800 | } 801 | }, 802 | "node_modules/@jest/types/node_modules/color-name": { 803 | "version": "1.1.4", 804 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 805 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 806 | "dev": true 807 | }, 808 | "node_modules/@jest/types/node_modules/has-flag": { 809 | "version": "4.0.0", 810 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 811 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 812 | "dev": true, 813 | "engines": { 814 | "node": ">=8" 815 | } 816 | }, 817 | "node_modules/@jest/types/node_modules/supports-color": { 818 | "version": "7.2.0", 819 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 820 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 821 | "dev": true, 822 | "dependencies": { 823 | "has-flag": "^4.0.0" 824 | }, 825 | "engines": { 826 | "node": ">=8" 827 | } 828 | }, 829 | "node_modules/@nodelib/fs.scandir": { 830 | "version": "2.1.5", 831 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 832 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 833 | "dev": true, 834 | "dependencies": { 835 | "@nodelib/fs.stat": "2.0.5", 836 | "run-parallel": "^1.1.9" 837 | }, 838 | "engines": { 839 | "node": ">= 8" 840 | } 841 | }, 842 | "node_modules/@nodelib/fs.stat": { 843 | "version": "2.0.5", 844 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 845 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 846 | "dev": true, 847 | "engines": { 848 | "node": ">= 8" 849 | } 850 | }, 851 | "node_modules/@nodelib/fs.walk": { 852 | "version": "1.2.8", 853 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 854 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 855 | "dev": true, 856 | "dependencies": { 857 | "@nodelib/fs.scandir": "2.1.5", 858 | "fastq": "^1.6.0" 859 | }, 860 | "engines": { 861 | "node": ">= 8" 862 | } 863 | }, 864 | "node_modules/@playwright/test": { 865 | "version": "1.13.1", 866 | "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.13.1.tgz", 867 | "integrity": "sha512-i8se6FK65hdbTzGMWnvPEaFoCh7DQ0XLKmaf2rWnh+ufhn4Ad/1jhdK8c6s4Mo87veTfd6N60fKCAWjyhbHyCg==", 868 | "dev": true, 869 | "hasInstallScript": true, 870 | "dependencies": { 871 | "@babel/code-frame": "^7.12.13", 872 | "@babel/core": "^7.14.0", 873 | "@babel/plugin-proposal-class-properties": "^7.13.0", 874 | "@babel/plugin-proposal-dynamic-import": "^7.13.8", 875 | "@babel/plugin-proposal-export-namespace-from": "^7.12.13", 876 | "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", 877 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", 878 | "@babel/plugin-proposal-numeric-separator": "^7.12.13", 879 | "@babel/plugin-proposal-optional-chaining": "^7.13.12", 880 | "@babel/plugin-proposal-private-methods": "^7.13.0", 881 | "@babel/plugin-proposal-private-property-in-object": "^7.14.0", 882 | "@babel/plugin-syntax-async-generators": "^7.8.4", 883 | "@babel/plugin-syntax-json-strings": "^7.8.3", 884 | "@babel/plugin-syntax-object-rest-spread": "^7.8.3", 885 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", 886 | "@babel/plugin-transform-modules-commonjs": "^7.14.0", 887 | "@babel/preset-typescript": "^7.13.0", 888 | "colors": "^1.4.0", 889 | "commander": "^6.1.0", 890 | "debug": "^4.1.1", 891 | "expect": "^26.4.2", 892 | "extract-zip": "^2.0.1", 893 | "https-proxy-agent": "^5.0.0", 894 | "jpeg-js": "^0.4.2", 895 | "mime": "^2.4.6", 896 | "minimatch": "^3.0.3", 897 | "ms": "^2.1.2", 898 | "pirates": "^4.0.1", 899 | "pixelmatch": "^5.2.1", 900 | "pngjs": "^5.0.0", 901 | "progress": "^2.0.3", 902 | "proper-lockfile": "^4.1.1", 903 | "proxy-from-env": "^1.1.0", 904 | "rimraf": "^3.0.2", 905 | "source-map-support": "^0.4.18", 906 | "stack-utils": "^2.0.3", 907 | "ws": "^7.4.6", 908 | "yazl": "^2.5.1" 909 | }, 910 | "bin": { 911 | "playwright": "lib/cli/cli.js" 912 | }, 913 | "engines": { 914 | "node": ">=12" 915 | } 916 | }, 917 | "node_modules/@types/istanbul-lib-coverage": { 918 | "version": "2.0.3", 919 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", 920 | "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", 921 | "dev": true 922 | }, 923 | "node_modules/@types/istanbul-lib-report": { 924 | "version": "3.0.0", 925 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", 926 | "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", 927 | "dev": true, 928 | "dependencies": { 929 | "@types/istanbul-lib-coverage": "*" 930 | } 931 | }, 932 | "node_modules/@types/istanbul-reports": { 933 | "version": "3.0.1", 934 | "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", 935 | "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", 936 | "dev": true, 937 | "dependencies": { 938 | "@types/istanbul-lib-report": "*" 939 | } 940 | }, 941 | "node_modules/@types/node": { 942 | "version": "16.4.10", 943 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.10.tgz", 944 | "integrity": "sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ==", 945 | "dev": true 946 | }, 947 | "node_modules/@types/stack-utils": { 948 | "version": "2.0.1", 949 | "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", 950 | "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", 951 | "dev": true 952 | }, 953 | "node_modules/@types/yargs": { 954 | "version": "15.0.14", 955 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", 956 | "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", 957 | "dev": true, 958 | "dependencies": { 959 | "@types/yargs-parser": "*" 960 | } 961 | }, 962 | "node_modules/@types/yargs-parser": { 963 | "version": "20.2.1", 964 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", 965 | "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", 966 | "dev": true 967 | }, 968 | "node_modules/@types/yauzl": { 969 | "version": "2.9.2", 970 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", 971 | "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", 972 | "dev": true, 973 | "optional": true, 974 | "dependencies": { 975 | "@types/node": "*" 976 | } 977 | }, 978 | "node_modules/agent-base": { 979 | "version": "6.0.2", 980 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 981 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 982 | "dev": true, 983 | "dependencies": { 984 | "debug": "4" 985 | }, 986 | "engines": { 987 | "node": ">= 6.0.0" 988 | } 989 | }, 990 | "node_modules/ansi-regex": { 991 | "version": "5.0.0", 992 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 993 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 994 | "dev": true, 995 | "engines": { 996 | "node": ">=8" 997 | } 998 | }, 999 | "node_modules/ansi-styles": { 1000 | "version": "3.2.1", 1001 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1002 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1003 | "dev": true, 1004 | "dependencies": { 1005 | "color-convert": "^1.9.0" 1006 | }, 1007 | "engines": { 1008 | "node": ">=4" 1009 | } 1010 | }, 1011 | "node_modules/array-union": { 1012 | "version": "2.1.0", 1013 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 1014 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 1015 | "dev": true, 1016 | "engines": { 1017 | "node": ">=8" 1018 | } 1019 | }, 1020 | "node_modules/babel-plugin-dynamic-import-node": { 1021 | "version": "2.3.3", 1022 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", 1023 | "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", 1024 | "dev": true, 1025 | "dependencies": { 1026 | "object.assign": "^4.1.0" 1027 | } 1028 | }, 1029 | "node_modules/balanced-match": { 1030 | "version": "1.0.2", 1031 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1032 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1033 | "dev": true 1034 | }, 1035 | "node_modules/brace-expansion": { 1036 | "version": "1.1.11", 1037 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1038 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1039 | "dev": true, 1040 | "dependencies": { 1041 | "balanced-match": "^1.0.0", 1042 | "concat-map": "0.0.1" 1043 | } 1044 | }, 1045 | "node_modules/braces": { 1046 | "version": "3.0.2", 1047 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1048 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1049 | "dev": true, 1050 | "dependencies": { 1051 | "fill-range": "^7.0.1" 1052 | }, 1053 | "engines": { 1054 | "node": ">=8" 1055 | } 1056 | }, 1057 | "node_modules/browserslist": { 1058 | "version": "4.16.7", 1059 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", 1060 | "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", 1061 | "dev": true, 1062 | "dependencies": { 1063 | "caniuse-lite": "^1.0.30001248", 1064 | "colorette": "^1.2.2", 1065 | "electron-to-chromium": "^1.3.793", 1066 | "escalade": "^3.1.1", 1067 | "node-releases": "^1.1.73" 1068 | }, 1069 | "bin": { 1070 | "browserslist": "cli.js" 1071 | }, 1072 | "engines": { 1073 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1074 | }, 1075 | "funding": { 1076 | "type": "opencollective", 1077 | "url": "https://opencollective.com/browserslist" 1078 | } 1079 | }, 1080 | "node_modules/buffer-crc32": { 1081 | "version": "0.2.13", 1082 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1083 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 1084 | "dev": true, 1085 | "engines": { 1086 | "node": "*" 1087 | } 1088 | }, 1089 | "node_modules/call-bind": { 1090 | "version": "1.0.2", 1091 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1092 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1093 | "dev": true, 1094 | "dependencies": { 1095 | "function-bind": "^1.1.1", 1096 | "get-intrinsic": "^1.0.2" 1097 | }, 1098 | "funding": { 1099 | "url": "https://github.com/sponsors/ljharb" 1100 | } 1101 | }, 1102 | "node_modules/caniuse-lite": { 1103 | "version": "1.0.30001248", 1104 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", 1105 | "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", 1106 | "dev": true, 1107 | "funding": { 1108 | "type": "opencollective", 1109 | "url": "https://opencollective.com/browserslist" 1110 | } 1111 | }, 1112 | "node_modules/chalk": { 1113 | "version": "2.4.2", 1114 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1115 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1116 | "dev": true, 1117 | "dependencies": { 1118 | "ansi-styles": "^3.2.1", 1119 | "escape-string-regexp": "^1.0.5", 1120 | "supports-color": "^5.3.0" 1121 | }, 1122 | "engines": { 1123 | "node": ">=4" 1124 | } 1125 | }, 1126 | "node_modules/color-convert": { 1127 | "version": "1.9.3", 1128 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1129 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1130 | "dev": true, 1131 | "dependencies": { 1132 | "color-name": "1.1.3" 1133 | } 1134 | }, 1135 | "node_modules/color-name": { 1136 | "version": "1.1.3", 1137 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1138 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1139 | "dev": true 1140 | }, 1141 | "node_modules/colorette": { 1142 | "version": "1.2.2", 1143 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 1144 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", 1145 | "dev": true 1146 | }, 1147 | "node_modules/colors": { 1148 | "version": "1.4.0", 1149 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 1150 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", 1151 | "dev": true, 1152 | "engines": { 1153 | "node": ">=0.1.90" 1154 | } 1155 | }, 1156 | "node_modules/commander": { 1157 | "version": "6.2.1", 1158 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 1159 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", 1160 | "dev": true, 1161 | "engines": { 1162 | "node": ">= 6" 1163 | } 1164 | }, 1165 | "node_modules/concat-map": { 1166 | "version": "0.0.1", 1167 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1168 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1169 | "dev": true 1170 | }, 1171 | "node_modules/convert-source-map": { 1172 | "version": "1.8.0", 1173 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 1174 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 1175 | "dev": true, 1176 | "dependencies": { 1177 | "safe-buffer": "~5.1.1" 1178 | } 1179 | }, 1180 | "node_modules/debug": { 1181 | "version": "4.3.2", 1182 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 1183 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 1184 | "dev": true, 1185 | "dependencies": { 1186 | "ms": "2.1.2" 1187 | }, 1188 | "engines": { 1189 | "node": ">=6.0" 1190 | }, 1191 | "peerDependenciesMeta": { 1192 | "supports-color": { 1193 | "optional": true 1194 | } 1195 | } 1196 | }, 1197 | "node_modules/debug/node_modules/ms": { 1198 | "version": "2.1.2", 1199 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1200 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1201 | "dev": true 1202 | }, 1203 | "node_modules/define-properties": { 1204 | "version": "1.1.3", 1205 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1206 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1207 | "dev": true, 1208 | "dependencies": { 1209 | "object-keys": "^1.0.12" 1210 | }, 1211 | "engines": { 1212 | "node": ">= 0.4" 1213 | } 1214 | }, 1215 | "node_modules/diff-sequences": { 1216 | "version": "26.6.2", 1217 | "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", 1218 | "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", 1219 | "dev": true, 1220 | "engines": { 1221 | "node": ">= 10.14.2" 1222 | } 1223 | }, 1224 | "node_modules/dir-glob": { 1225 | "version": "3.0.1", 1226 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1227 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1228 | "dev": true, 1229 | "dependencies": { 1230 | "path-type": "^4.0.0" 1231 | }, 1232 | "engines": { 1233 | "node": ">=8" 1234 | } 1235 | }, 1236 | "node_modules/electron-to-chromium": { 1237 | "version": "1.3.793", 1238 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz", 1239 | "integrity": "sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==", 1240 | "dev": true 1241 | }, 1242 | "node_modules/end-of-stream": { 1243 | "version": "1.4.4", 1244 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1245 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1246 | "dev": true, 1247 | "dependencies": { 1248 | "once": "^1.4.0" 1249 | } 1250 | }, 1251 | "node_modules/esbuild": { 1252 | "version": "0.12.17", 1253 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.17.tgz", 1254 | "integrity": "sha512-GshKJyVYUnlSXIZj/NheC2O0Kblh42CS7P1wJyTbbIHevTG4jYMS9NNw8EOd8dDWD0dzydYHS01MpZoUcQXB4g==", 1255 | "dev": true, 1256 | "hasInstallScript": true, 1257 | "bin": { 1258 | "esbuild": "bin/esbuild" 1259 | } 1260 | }, 1261 | "node_modules/escalade": { 1262 | "version": "3.1.1", 1263 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1264 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1265 | "dev": true, 1266 | "engines": { 1267 | "node": ">=6" 1268 | } 1269 | }, 1270 | "node_modules/escape-string-regexp": { 1271 | "version": "1.0.5", 1272 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1273 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1274 | "dev": true, 1275 | "engines": { 1276 | "node": ">=0.8.0" 1277 | } 1278 | }, 1279 | "node_modules/expect": { 1280 | "version": "26.6.2", 1281 | "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", 1282 | "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", 1283 | "dev": true, 1284 | "dependencies": { 1285 | "@jest/types": "^26.6.2", 1286 | "ansi-styles": "^4.0.0", 1287 | "jest-get-type": "^26.3.0", 1288 | "jest-matcher-utils": "^26.6.2", 1289 | "jest-message-util": "^26.6.2", 1290 | "jest-regex-util": "^26.0.0" 1291 | }, 1292 | "engines": { 1293 | "node": ">= 10.14.2" 1294 | } 1295 | }, 1296 | "node_modules/expect/node_modules/ansi-styles": { 1297 | "version": "4.3.0", 1298 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1299 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1300 | "dev": true, 1301 | "dependencies": { 1302 | "color-convert": "^2.0.1" 1303 | }, 1304 | "engines": { 1305 | "node": ">=8" 1306 | }, 1307 | "funding": { 1308 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1309 | } 1310 | }, 1311 | "node_modules/expect/node_modules/color-convert": { 1312 | "version": "2.0.1", 1313 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1314 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1315 | "dev": true, 1316 | "dependencies": { 1317 | "color-name": "~1.1.4" 1318 | }, 1319 | "engines": { 1320 | "node": ">=7.0.0" 1321 | } 1322 | }, 1323 | "node_modules/expect/node_modules/color-name": { 1324 | "version": "1.1.4", 1325 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1326 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1327 | "dev": true 1328 | }, 1329 | "node_modules/extract-zip": { 1330 | "version": "2.0.1", 1331 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 1332 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 1333 | "dev": true, 1334 | "dependencies": { 1335 | "debug": "^4.1.1", 1336 | "get-stream": "^5.1.0", 1337 | "yauzl": "^2.10.0" 1338 | }, 1339 | "bin": { 1340 | "extract-zip": "cli.js" 1341 | }, 1342 | "engines": { 1343 | "node": ">= 10.17.0" 1344 | }, 1345 | "optionalDependencies": { 1346 | "@types/yauzl": "^2.9.1" 1347 | } 1348 | }, 1349 | "node_modules/fast-glob": { 1350 | "version": "3.2.7", 1351 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", 1352 | "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", 1353 | "dev": true, 1354 | "dependencies": { 1355 | "@nodelib/fs.stat": "^2.0.2", 1356 | "@nodelib/fs.walk": "^1.2.3", 1357 | "glob-parent": "^5.1.2", 1358 | "merge2": "^1.3.0", 1359 | "micromatch": "^4.0.4" 1360 | }, 1361 | "engines": { 1362 | "node": ">=8" 1363 | } 1364 | }, 1365 | "node_modules/fastq": { 1366 | "version": "1.11.1", 1367 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", 1368 | "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", 1369 | "dev": true, 1370 | "dependencies": { 1371 | "reusify": "^1.0.4" 1372 | } 1373 | }, 1374 | "node_modules/fd-slicer": { 1375 | "version": "1.1.0", 1376 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 1377 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 1378 | "dev": true, 1379 | "dependencies": { 1380 | "pend": "~1.2.0" 1381 | } 1382 | }, 1383 | "node_modules/fill-range": { 1384 | "version": "7.0.1", 1385 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1386 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1387 | "dev": true, 1388 | "dependencies": { 1389 | "to-regex-range": "^5.0.1" 1390 | }, 1391 | "engines": { 1392 | "node": ">=8" 1393 | } 1394 | }, 1395 | "node_modules/fs.realpath": { 1396 | "version": "1.0.0", 1397 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1398 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1399 | "dev": true 1400 | }, 1401 | "node_modules/function-bind": { 1402 | "version": "1.1.1", 1403 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1404 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1405 | "dev": true 1406 | }, 1407 | "node_modules/gensync": { 1408 | "version": "1.0.0-beta.2", 1409 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1410 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1411 | "dev": true, 1412 | "engines": { 1413 | "node": ">=6.9.0" 1414 | } 1415 | }, 1416 | "node_modules/get-intrinsic": { 1417 | "version": "1.1.1", 1418 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1419 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1420 | "dev": true, 1421 | "dependencies": { 1422 | "function-bind": "^1.1.1", 1423 | "has": "^1.0.3", 1424 | "has-symbols": "^1.0.1" 1425 | }, 1426 | "funding": { 1427 | "url": "https://github.com/sponsors/ljharb" 1428 | } 1429 | }, 1430 | "node_modules/get-stream": { 1431 | "version": "5.2.0", 1432 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1433 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1434 | "dev": true, 1435 | "dependencies": { 1436 | "pump": "^3.0.0" 1437 | }, 1438 | "engines": { 1439 | "node": ">=8" 1440 | }, 1441 | "funding": { 1442 | "url": "https://github.com/sponsors/sindresorhus" 1443 | } 1444 | }, 1445 | "node_modules/glob": { 1446 | "version": "7.1.7", 1447 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 1448 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 1449 | "dev": true, 1450 | "dependencies": { 1451 | "fs.realpath": "^1.0.0", 1452 | "inflight": "^1.0.4", 1453 | "inherits": "2", 1454 | "minimatch": "^3.0.4", 1455 | "once": "^1.3.0", 1456 | "path-is-absolute": "^1.0.0" 1457 | }, 1458 | "engines": { 1459 | "node": "*" 1460 | }, 1461 | "funding": { 1462 | "url": "https://github.com/sponsors/isaacs" 1463 | } 1464 | }, 1465 | "node_modules/glob-parent": { 1466 | "version": "5.1.2", 1467 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1468 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1469 | "dev": true, 1470 | "dependencies": { 1471 | "is-glob": "^4.0.1" 1472 | }, 1473 | "engines": { 1474 | "node": ">= 6" 1475 | } 1476 | }, 1477 | "node_modules/globals": { 1478 | "version": "11.12.0", 1479 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1480 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1481 | "dev": true, 1482 | "engines": { 1483 | "node": ">=4" 1484 | } 1485 | }, 1486 | "node_modules/globby": { 1487 | "version": "11.0.4", 1488 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", 1489 | "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", 1490 | "dev": true, 1491 | "dependencies": { 1492 | "array-union": "^2.1.0", 1493 | "dir-glob": "^3.0.1", 1494 | "fast-glob": "^3.1.1", 1495 | "ignore": "^5.1.4", 1496 | "merge2": "^1.3.0", 1497 | "slash": "^3.0.0" 1498 | }, 1499 | "engines": { 1500 | "node": ">=10" 1501 | }, 1502 | "funding": { 1503 | "url": "https://github.com/sponsors/sindresorhus" 1504 | } 1505 | }, 1506 | "node_modules/graceful-fs": { 1507 | "version": "4.2.6", 1508 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 1509 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 1510 | "dev": true 1511 | }, 1512 | "node_modules/has": { 1513 | "version": "1.0.3", 1514 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1515 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1516 | "dev": true, 1517 | "dependencies": { 1518 | "function-bind": "^1.1.1" 1519 | }, 1520 | "engines": { 1521 | "node": ">= 0.4.0" 1522 | } 1523 | }, 1524 | "node_modules/has-flag": { 1525 | "version": "3.0.0", 1526 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1527 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1528 | "dev": true, 1529 | "engines": { 1530 | "node": ">=4" 1531 | } 1532 | }, 1533 | "node_modules/has-symbols": { 1534 | "version": "1.0.2", 1535 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 1536 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 1537 | "dev": true, 1538 | "engines": { 1539 | "node": ">= 0.4" 1540 | }, 1541 | "funding": { 1542 | "url": "https://github.com/sponsors/ljharb" 1543 | } 1544 | }, 1545 | "node_modules/https-proxy-agent": { 1546 | "version": "5.0.0", 1547 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 1548 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 1549 | "dev": true, 1550 | "dependencies": { 1551 | "agent-base": "6", 1552 | "debug": "4" 1553 | }, 1554 | "engines": { 1555 | "node": ">= 6" 1556 | } 1557 | }, 1558 | "node_modules/ignore": { 1559 | "version": "5.1.8", 1560 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 1561 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 1562 | "dev": true, 1563 | "engines": { 1564 | "node": ">= 4" 1565 | } 1566 | }, 1567 | "node_modules/inflight": { 1568 | "version": "1.0.6", 1569 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1570 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1571 | "dev": true, 1572 | "dependencies": { 1573 | "once": "^1.3.0", 1574 | "wrappy": "1" 1575 | } 1576 | }, 1577 | "node_modules/inherits": { 1578 | "version": "2.0.4", 1579 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1580 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1581 | "dev": true 1582 | }, 1583 | "node_modules/is-extglob": { 1584 | "version": "2.1.1", 1585 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1586 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1587 | "dev": true, 1588 | "engines": { 1589 | "node": ">=0.10.0" 1590 | } 1591 | }, 1592 | "node_modules/is-glob": { 1593 | "version": "4.0.1", 1594 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1595 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1596 | "dev": true, 1597 | "dependencies": { 1598 | "is-extglob": "^2.1.1" 1599 | }, 1600 | "engines": { 1601 | "node": ">=0.10.0" 1602 | } 1603 | }, 1604 | "node_modules/is-number": { 1605 | "version": "7.0.0", 1606 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1607 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1608 | "dev": true, 1609 | "engines": { 1610 | "node": ">=0.12.0" 1611 | } 1612 | }, 1613 | "node_modules/jest-diff": { 1614 | "version": "26.6.2", 1615 | "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", 1616 | "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", 1617 | "dev": true, 1618 | "dependencies": { 1619 | "chalk": "^4.0.0", 1620 | "diff-sequences": "^26.6.2", 1621 | "jest-get-type": "^26.3.0", 1622 | "pretty-format": "^26.6.2" 1623 | }, 1624 | "engines": { 1625 | "node": ">= 10.14.2" 1626 | } 1627 | }, 1628 | "node_modules/jest-diff/node_modules/ansi-styles": { 1629 | "version": "4.3.0", 1630 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1631 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1632 | "dev": true, 1633 | "dependencies": { 1634 | "color-convert": "^2.0.1" 1635 | }, 1636 | "engines": { 1637 | "node": ">=8" 1638 | }, 1639 | "funding": { 1640 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1641 | } 1642 | }, 1643 | "node_modules/jest-diff/node_modules/chalk": { 1644 | "version": "4.1.2", 1645 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1646 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1647 | "dev": true, 1648 | "dependencies": { 1649 | "ansi-styles": "^4.1.0", 1650 | "supports-color": "^7.1.0" 1651 | }, 1652 | "engines": { 1653 | "node": ">=10" 1654 | }, 1655 | "funding": { 1656 | "url": "https://github.com/chalk/chalk?sponsor=1" 1657 | } 1658 | }, 1659 | "node_modules/jest-diff/node_modules/color-convert": { 1660 | "version": "2.0.1", 1661 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1662 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1663 | "dev": true, 1664 | "dependencies": { 1665 | "color-name": "~1.1.4" 1666 | }, 1667 | "engines": { 1668 | "node": ">=7.0.0" 1669 | } 1670 | }, 1671 | "node_modules/jest-diff/node_modules/color-name": { 1672 | "version": "1.1.4", 1673 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1674 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1675 | "dev": true 1676 | }, 1677 | "node_modules/jest-diff/node_modules/has-flag": { 1678 | "version": "4.0.0", 1679 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1680 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1681 | "dev": true, 1682 | "engines": { 1683 | "node": ">=8" 1684 | } 1685 | }, 1686 | "node_modules/jest-diff/node_modules/supports-color": { 1687 | "version": "7.2.0", 1688 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1689 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1690 | "dev": true, 1691 | "dependencies": { 1692 | "has-flag": "^4.0.0" 1693 | }, 1694 | "engines": { 1695 | "node": ">=8" 1696 | } 1697 | }, 1698 | "node_modules/jest-get-type": { 1699 | "version": "26.3.0", 1700 | "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", 1701 | "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", 1702 | "dev": true, 1703 | "engines": { 1704 | "node": ">= 10.14.2" 1705 | } 1706 | }, 1707 | "node_modules/jest-matcher-utils": { 1708 | "version": "26.6.2", 1709 | "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", 1710 | "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", 1711 | "dev": true, 1712 | "dependencies": { 1713 | "chalk": "^4.0.0", 1714 | "jest-diff": "^26.6.2", 1715 | "jest-get-type": "^26.3.0", 1716 | "pretty-format": "^26.6.2" 1717 | }, 1718 | "engines": { 1719 | "node": ">= 10.14.2" 1720 | } 1721 | }, 1722 | "node_modules/jest-matcher-utils/node_modules/ansi-styles": { 1723 | "version": "4.3.0", 1724 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1725 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1726 | "dev": true, 1727 | "dependencies": { 1728 | "color-convert": "^2.0.1" 1729 | }, 1730 | "engines": { 1731 | "node": ">=8" 1732 | }, 1733 | "funding": { 1734 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1735 | } 1736 | }, 1737 | "node_modules/jest-matcher-utils/node_modules/chalk": { 1738 | "version": "4.1.2", 1739 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1740 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1741 | "dev": true, 1742 | "dependencies": { 1743 | "ansi-styles": "^4.1.0", 1744 | "supports-color": "^7.1.0" 1745 | }, 1746 | "engines": { 1747 | "node": ">=10" 1748 | }, 1749 | "funding": { 1750 | "url": "https://github.com/chalk/chalk?sponsor=1" 1751 | } 1752 | }, 1753 | "node_modules/jest-matcher-utils/node_modules/color-convert": { 1754 | "version": "2.0.1", 1755 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1756 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1757 | "dev": true, 1758 | "dependencies": { 1759 | "color-name": "~1.1.4" 1760 | }, 1761 | "engines": { 1762 | "node": ">=7.0.0" 1763 | } 1764 | }, 1765 | "node_modules/jest-matcher-utils/node_modules/color-name": { 1766 | "version": "1.1.4", 1767 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1768 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1769 | "dev": true 1770 | }, 1771 | "node_modules/jest-matcher-utils/node_modules/has-flag": { 1772 | "version": "4.0.0", 1773 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1774 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1775 | "dev": true, 1776 | "engines": { 1777 | "node": ">=8" 1778 | } 1779 | }, 1780 | "node_modules/jest-matcher-utils/node_modules/supports-color": { 1781 | "version": "7.2.0", 1782 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1783 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1784 | "dev": true, 1785 | "dependencies": { 1786 | "has-flag": "^4.0.0" 1787 | }, 1788 | "engines": { 1789 | "node": ">=8" 1790 | } 1791 | }, 1792 | "node_modules/jest-message-util": { 1793 | "version": "26.6.2", 1794 | "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", 1795 | "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", 1796 | "dev": true, 1797 | "dependencies": { 1798 | "@babel/code-frame": "^7.0.0", 1799 | "@jest/types": "^26.6.2", 1800 | "@types/stack-utils": "^2.0.0", 1801 | "chalk": "^4.0.0", 1802 | "graceful-fs": "^4.2.4", 1803 | "micromatch": "^4.0.2", 1804 | "pretty-format": "^26.6.2", 1805 | "slash": "^3.0.0", 1806 | "stack-utils": "^2.0.2" 1807 | }, 1808 | "engines": { 1809 | "node": ">= 10.14.2" 1810 | } 1811 | }, 1812 | "node_modules/jest-message-util/node_modules/ansi-styles": { 1813 | "version": "4.3.0", 1814 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1815 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1816 | "dev": true, 1817 | "dependencies": { 1818 | "color-convert": "^2.0.1" 1819 | }, 1820 | "engines": { 1821 | "node": ">=8" 1822 | }, 1823 | "funding": { 1824 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1825 | } 1826 | }, 1827 | "node_modules/jest-message-util/node_modules/chalk": { 1828 | "version": "4.1.2", 1829 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1830 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1831 | "dev": true, 1832 | "dependencies": { 1833 | "ansi-styles": "^4.1.0", 1834 | "supports-color": "^7.1.0" 1835 | }, 1836 | "engines": { 1837 | "node": ">=10" 1838 | }, 1839 | "funding": { 1840 | "url": "https://github.com/chalk/chalk?sponsor=1" 1841 | } 1842 | }, 1843 | "node_modules/jest-message-util/node_modules/color-convert": { 1844 | "version": "2.0.1", 1845 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1846 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1847 | "dev": true, 1848 | "dependencies": { 1849 | "color-name": "~1.1.4" 1850 | }, 1851 | "engines": { 1852 | "node": ">=7.0.0" 1853 | } 1854 | }, 1855 | "node_modules/jest-message-util/node_modules/color-name": { 1856 | "version": "1.1.4", 1857 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1858 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1859 | "dev": true 1860 | }, 1861 | "node_modules/jest-message-util/node_modules/has-flag": { 1862 | "version": "4.0.0", 1863 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1864 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1865 | "dev": true, 1866 | "engines": { 1867 | "node": ">=8" 1868 | } 1869 | }, 1870 | "node_modules/jest-message-util/node_modules/supports-color": { 1871 | "version": "7.2.0", 1872 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1873 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1874 | "dev": true, 1875 | "dependencies": { 1876 | "has-flag": "^4.0.0" 1877 | }, 1878 | "engines": { 1879 | "node": ">=8" 1880 | } 1881 | }, 1882 | "node_modules/jest-regex-util": { 1883 | "version": "26.0.0", 1884 | "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", 1885 | "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", 1886 | "dev": true, 1887 | "engines": { 1888 | "node": ">= 10.14.2" 1889 | } 1890 | }, 1891 | "node_modules/jpeg-js": { 1892 | "version": "0.4.3", 1893 | "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", 1894 | "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==", 1895 | "dev": true 1896 | }, 1897 | "node_modules/js-tokens": { 1898 | "version": "4.0.0", 1899 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1900 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1901 | "dev": true 1902 | }, 1903 | "node_modules/jsesc": { 1904 | "version": "2.5.2", 1905 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1906 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1907 | "dev": true, 1908 | "bin": { 1909 | "jsesc": "bin/jsesc" 1910 | }, 1911 | "engines": { 1912 | "node": ">=4" 1913 | } 1914 | }, 1915 | "node_modules/json5": { 1916 | "version": "2.2.0", 1917 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", 1918 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", 1919 | "dev": true, 1920 | "dependencies": { 1921 | "minimist": "^1.2.5" 1922 | }, 1923 | "bin": { 1924 | "json5": "lib/cli.js" 1925 | }, 1926 | "engines": { 1927 | "node": ">=6" 1928 | } 1929 | }, 1930 | "node_modules/merge2": { 1931 | "version": "1.4.1", 1932 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1933 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1934 | "dev": true, 1935 | "engines": { 1936 | "node": ">= 8" 1937 | } 1938 | }, 1939 | "node_modules/micromatch": { 1940 | "version": "4.0.4", 1941 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 1942 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 1943 | "dev": true, 1944 | "dependencies": { 1945 | "braces": "^3.0.1", 1946 | "picomatch": "^2.2.3" 1947 | }, 1948 | "engines": { 1949 | "node": ">=8.6" 1950 | } 1951 | }, 1952 | "node_modules/mime": { 1953 | "version": "2.5.2", 1954 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", 1955 | "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", 1956 | "dev": true, 1957 | "bin": { 1958 | "mime": "cli.js" 1959 | }, 1960 | "engines": { 1961 | "node": ">=4.0.0" 1962 | } 1963 | }, 1964 | "node_modules/minimatch": { 1965 | "version": "3.0.4", 1966 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1967 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1968 | "dev": true, 1969 | "dependencies": { 1970 | "brace-expansion": "^1.1.7" 1971 | }, 1972 | "engines": { 1973 | "node": "*" 1974 | } 1975 | }, 1976 | "node_modules/minimist": { 1977 | "version": "1.2.5", 1978 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1979 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1980 | "dev": true 1981 | }, 1982 | "node_modules/ms": { 1983 | "version": "2.1.3", 1984 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1985 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1986 | "dev": true 1987 | }, 1988 | "node_modules/node-modules-regexp": { 1989 | "version": "1.0.0", 1990 | "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", 1991 | "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", 1992 | "dev": true, 1993 | "engines": { 1994 | "node": ">=0.10.0" 1995 | } 1996 | }, 1997 | "node_modules/node-releases": { 1998 | "version": "1.1.73", 1999 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", 2000 | "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", 2001 | "dev": true 2002 | }, 2003 | "node_modules/object-keys": { 2004 | "version": "1.1.1", 2005 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2006 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2007 | "dev": true, 2008 | "engines": { 2009 | "node": ">= 0.4" 2010 | } 2011 | }, 2012 | "node_modules/object.assign": { 2013 | "version": "4.1.2", 2014 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 2015 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 2016 | "dev": true, 2017 | "dependencies": { 2018 | "call-bind": "^1.0.0", 2019 | "define-properties": "^1.1.3", 2020 | "has-symbols": "^1.0.1", 2021 | "object-keys": "^1.1.1" 2022 | }, 2023 | "engines": { 2024 | "node": ">= 0.4" 2025 | }, 2026 | "funding": { 2027 | "url": "https://github.com/sponsors/ljharb" 2028 | } 2029 | }, 2030 | "node_modules/once": { 2031 | "version": "1.4.0", 2032 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2033 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2034 | "dev": true, 2035 | "dependencies": { 2036 | "wrappy": "1" 2037 | } 2038 | }, 2039 | "node_modules/path-is-absolute": { 2040 | "version": "1.0.1", 2041 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2042 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2043 | "dev": true, 2044 | "engines": { 2045 | "node": ">=0.10.0" 2046 | } 2047 | }, 2048 | "node_modules/path-type": { 2049 | "version": "4.0.0", 2050 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2051 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2052 | "dev": true, 2053 | "engines": { 2054 | "node": ">=8" 2055 | } 2056 | }, 2057 | "node_modules/pend": { 2058 | "version": "1.2.0", 2059 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 2060 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 2061 | "dev": true 2062 | }, 2063 | "node_modules/picomatch": { 2064 | "version": "2.3.0", 2065 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 2066 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 2067 | "dev": true, 2068 | "engines": { 2069 | "node": ">=8.6" 2070 | }, 2071 | "funding": { 2072 | "url": "https://github.com/sponsors/jonschlinkert" 2073 | } 2074 | }, 2075 | "node_modules/pirates": { 2076 | "version": "4.0.1", 2077 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", 2078 | "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", 2079 | "dev": true, 2080 | "dependencies": { 2081 | "node-modules-regexp": "^1.0.0" 2082 | }, 2083 | "engines": { 2084 | "node": ">= 6" 2085 | } 2086 | }, 2087 | "node_modules/pixelmatch": { 2088 | "version": "5.2.1", 2089 | "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.2.1.tgz", 2090 | "integrity": "sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==", 2091 | "dev": true, 2092 | "dependencies": { 2093 | "pngjs": "^4.0.1" 2094 | }, 2095 | "bin": { 2096 | "pixelmatch": "bin/pixelmatch" 2097 | } 2098 | }, 2099 | "node_modules/pixelmatch/node_modules/pngjs": { 2100 | "version": "4.0.1", 2101 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", 2102 | "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", 2103 | "dev": true, 2104 | "engines": { 2105 | "node": ">=8.0.0" 2106 | } 2107 | }, 2108 | "node_modules/pngjs": { 2109 | "version": "5.0.0", 2110 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", 2111 | "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", 2112 | "dev": true, 2113 | "engines": { 2114 | "node": ">=10.13.0" 2115 | } 2116 | }, 2117 | "node_modules/pretty-format": { 2118 | "version": "26.6.2", 2119 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", 2120 | "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", 2121 | "dev": true, 2122 | "dependencies": { 2123 | "@jest/types": "^26.6.2", 2124 | "ansi-regex": "^5.0.0", 2125 | "ansi-styles": "^4.0.0", 2126 | "react-is": "^17.0.1" 2127 | }, 2128 | "engines": { 2129 | "node": ">= 10" 2130 | } 2131 | }, 2132 | "node_modules/pretty-format/node_modules/ansi-styles": { 2133 | "version": "4.3.0", 2134 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2135 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2136 | "dev": true, 2137 | "dependencies": { 2138 | "color-convert": "^2.0.1" 2139 | }, 2140 | "engines": { 2141 | "node": ">=8" 2142 | }, 2143 | "funding": { 2144 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2145 | } 2146 | }, 2147 | "node_modules/pretty-format/node_modules/color-convert": { 2148 | "version": "2.0.1", 2149 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2150 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2151 | "dev": true, 2152 | "dependencies": { 2153 | "color-name": "~1.1.4" 2154 | }, 2155 | "engines": { 2156 | "node": ">=7.0.0" 2157 | } 2158 | }, 2159 | "node_modules/pretty-format/node_modules/color-name": { 2160 | "version": "1.1.4", 2161 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2162 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2163 | "dev": true 2164 | }, 2165 | "node_modules/progress": { 2166 | "version": "2.0.3", 2167 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2168 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2169 | "dev": true, 2170 | "engines": { 2171 | "node": ">=0.4.0" 2172 | } 2173 | }, 2174 | "node_modules/proper-lockfile": { 2175 | "version": "4.1.2", 2176 | "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", 2177 | "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", 2178 | "dev": true, 2179 | "dependencies": { 2180 | "graceful-fs": "^4.2.4", 2181 | "retry": "^0.12.0", 2182 | "signal-exit": "^3.0.2" 2183 | } 2184 | }, 2185 | "node_modules/proxy-from-env": { 2186 | "version": "1.1.0", 2187 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 2188 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 2189 | "dev": true 2190 | }, 2191 | "node_modules/pump": { 2192 | "version": "3.0.0", 2193 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2194 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2195 | "dev": true, 2196 | "dependencies": { 2197 | "end-of-stream": "^1.1.0", 2198 | "once": "^1.3.1" 2199 | } 2200 | }, 2201 | "node_modules/queue-microtask": { 2202 | "version": "1.2.3", 2203 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2204 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2205 | "dev": true, 2206 | "funding": [ 2207 | { 2208 | "type": "github", 2209 | "url": "https://github.com/sponsors/feross" 2210 | }, 2211 | { 2212 | "type": "patreon", 2213 | "url": "https://www.patreon.com/feross" 2214 | }, 2215 | { 2216 | "type": "consulting", 2217 | "url": "https://feross.org/support" 2218 | } 2219 | ] 2220 | }, 2221 | "node_modules/react-is": { 2222 | "version": "17.0.2", 2223 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 2224 | "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 2225 | "dev": true 2226 | }, 2227 | "node_modules/retry": { 2228 | "version": "0.12.0", 2229 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 2230 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", 2231 | "dev": true, 2232 | "engines": { 2233 | "node": ">= 4" 2234 | } 2235 | }, 2236 | "node_modules/reusify": { 2237 | "version": "1.0.4", 2238 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2239 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2240 | "dev": true, 2241 | "engines": { 2242 | "iojs": ">=1.0.0", 2243 | "node": ">=0.10.0" 2244 | } 2245 | }, 2246 | "node_modules/rimraf": { 2247 | "version": "3.0.2", 2248 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2249 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2250 | "dev": true, 2251 | "dependencies": { 2252 | "glob": "^7.1.3" 2253 | }, 2254 | "bin": { 2255 | "rimraf": "bin.js" 2256 | }, 2257 | "funding": { 2258 | "url": "https://github.com/sponsors/isaacs" 2259 | } 2260 | }, 2261 | "node_modules/run-parallel": { 2262 | "version": "1.2.0", 2263 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2264 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2265 | "dev": true, 2266 | "funding": [ 2267 | { 2268 | "type": "github", 2269 | "url": "https://github.com/sponsors/feross" 2270 | }, 2271 | { 2272 | "type": "patreon", 2273 | "url": "https://www.patreon.com/feross" 2274 | }, 2275 | { 2276 | "type": "consulting", 2277 | "url": "https://feross.org/support" 2278 | } 2279 | ], 2280 | "dependencies": { 2281 | "queue-microtask": "^1.2.2" 2282 | } 2283 | }, 2284 | "node_modules/safe-buffer": { 2285 | "version": "5.1.2", 2286 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2287 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2288 | "dev": true 2289 | }, 2290 | "node_modules/semver": { 2291 | "version": "6.3.0", 2292 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2293 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2294 | "dev": true, 2295 | "bin": { 2296 | "semver": "bin/semver.js" 2297 | } 2298 | }, 2299 | "node_modules/signal-exit": { 2300 | "version": "3.0.3", 2301 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 2302 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 2303 | "dev": true 2304 | }, 2305 | "node_modules/slash": { 2306 | "version": "3.0.0", 2307 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2308 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2309 | "dev": true, 2310 | "engines": { 2311 | "node": ">=8" 2312 | } 2313 | }, 2314 | "node_modules/source-map": { 2315 | "version": "0.5.7", 2316 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2317 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2318 | "dev": true, 2319 | "engines": { 2320 | "node": ">=0.10.0" 2321 | } 2322 | }, 2323 | "node_modules/source-map-support": { 2324 | "version": "0.4.18", 2325 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 2326 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 2327 | "dev": true, 2328 | "dependencies": { 2329 | "source-map": "^0.5.6" 2330 | } 2331 | }, 2332 | "node_modules/stack-utils": { 2333 | "version": "2.0.3", 2334 | "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", 2335 | "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", 2336 | "dev": true, 2337 | "dependencies": { 2338 | "escape-string-regexp": "^2.0.0" 2339 | }, 2340 | "engines": { 2341 | "node": ">=10" 2342 | } 2343 | }, 2344 | "node_modules/stack-utils/node_modules/escape-string-regexp": { 2345 | "version": "2.0.0", 2346 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 2347 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 2348 | "dev": true, 2349 | "engines": { 2350 | "node": ">=8" 2351 | } 2352 | }, 2353 | "node_modules/supports-color": { 2354 | "version": "5.5.0", 2355 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2356 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2357 | "dev": true, 2358 | "dependencies": { 2359 | "has-flag": "^3.0.0" 2360 | }, 2361 | "engines": { 2362 | "node": ">=4" 2363 | } 2364 | }, 2365 | "node_modules/to-fast-properties": { 2366 | "version": "2.0.0", 2367 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2368 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 2369 | "dev": true, 2370 | "engines": { 2371 | "node": ">=4" 2372 | } 2373 | }, 2374 | "node_modules/to-regex-range": { 2375 | "version": "5.0.1", 2376 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2377 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2378 | "dev": true, 2379 | "dependencies": { 2380 | "is-number": "^7.0.0" 2381 | }, 2382 | "engines": { 2383 | "node": ">=8.0" 2384 | } 2385 | }, 2386 | "node_modules/typescript": { 2387 | "version": "4.2.2", 2388 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.2.tgz", 2389 | "integrity": "sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ==", 2390 | "dev": true, 2391 | "bin": { 2392 | "tsc": "bin/tsc", 2393 | "tsserver": "bin/tsserver" 2394 | }, 2395 | "engines": { 2396 | "node": ">=4.2.0" 2397 | } 2398 | }, 2399 | "node_modules/wrappy": { 2400 | "version": "1.0.2", 2401 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2402 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2403 | "dev": true 2404 | }, 2405 | "node_modules/ws": { 2406 | "version": "7.5.3", 2407 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", 2408 | "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", 2409 | "dev": true, 2410 | "engines": { 2411 | "node": ">=8.3.0" 2412 | }, 2413 | "peerDependencies": { 2414 | "bufferutil": "^4.0.1", 2415 | "utf-8-validate": "^5.0.2" 2416 | }, 2417 | "peerDependenciesMeta": { 2418 | "bufferutil": { 2419 | "optional": true 2420 | }, 2421 | "utf-8-validate": { 2422 | "optional": true 2423 | } 2424 | } 2425 | }, 2426 | "node_modules/yauzl": { 2427 | "version": "2.10.0", 2428 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2429 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 2430 | "dev": true, 2431 | "dependencies": { 2432 | "buffer-crc32": "~0.2.3", 2433 | "fd-slicer": "~1.1.0" 2434 | } 2435 | }, 2436 | "node_modules/yazl": { 2437 | "version": "2.5.1", 2438 | "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", 2439 | "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", 2440 | "dev": true, 2441 | "dependencies": { 2442 | "buffer-crc32": "~0.2.3" 2443 | } 2444 | } 2445 | }, 2446 | "dependencies": { 2447 | "@babel/code-frame": { 2448 | "version": "7.14.5", 2449 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", 2450 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", 2451 | "dev": true, 2452 | "requires": { 2453 | "@babel/highlight": "^7.14.5" 2454 | } 2455 | }, 2456 | "@babel/compat-data": { 2457 | "version": "7.14.9", 2458 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.9.tgz", 2459 | "integrity": "sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==", 2460 | "dev": true 2461 | }, 2462 | "@babel/core": { 2463 | "version": "7.14.8", 2464 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz", 2465 | "integrity": "sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==", 2466 | "dev": true, 2467 | "requires": { 2468 | "@babel/code-frame": "^7.14.5", 2469 | "@babel/generator": "^7.14.8", 2470 | "@babel/helper-compilation-targets": "^7.14.5", 2471 | "@babel/helper-module-transforms": "^7.14.8", 2472 | "@babel/helpers": "^7.14.8", 2473 | "@babel/parser": "^7.14.8", 2474 | "@babel/template": "^7.14.5", 2475 | "@babel/traverse": "^7.14.8", 2476 | "@babel/types": "^7.14.8", 2477 | "convert-source-map": "^1.7.0", 2478 | "debug": "^4.1.0", 2479 | "gensync": "^1.0.0-beta.2", 2480 | "json5": "^2.1.2", 2481 | "semver": "^6.3.0", 2482 | "source-map": "^0.5.0" 2483 | } 2484 | }, 2485 | "@babel/generator": { 2486 | "version": "7.14.9", 2487 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.9.tgz", 2488 | "integrity": "sha512-4yoHbhDYzFa0GLfCzLp5GxH7vPPMAHdZjyE7M/OajM9037zhx0rf+iNsJwp4PT0MSFpwjG7BsHEbPkBQpZ6cYA==", 2489 | "dev": true, 2490 | "requires": { 2491 | "@babel/types": "^7.14.9", 2492 | "jsesc": "^2.5.1", 2493 | "source-map": "^0.5.0" 2494 | } 2495 | }, 2496 | "@babel/helper-annotate-as-pure": { 2497 | "version": "7.14.5", 2498 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", 2499 | "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", 2500 | "dev": true, 2501 | "requires": { 2502 | "@babel/types": "^7.14.5" 2503 | } 2504 | }, 2505 | "@babel/helper-compilation-targets": { 2506 | "version": "7.14.5", 2507 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", 2508 | "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", 2509 | "dev": true, 2510 | "requires": { 2511 | "@babel/compat-data": "^7.14.5", 2512 | "@babel/helper-validator-option": "^7.14.5", 2513 | "browserslist": "^4.16.6", 2514 | "semver": "^6.3.0" 2515 | } 2516 | }, 2517 | "@babel/helper-create-class-features-plugin": { 2518 | "version": "7.14.8", 2519 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz", 2520 | "integrity": "sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==", 2521 | "dev": true, 2522 | "requires": { 2523 | "@babel/helper-annotate-as-pure": "^7.14.5", 2524 | "@babel/helper-function-name": "^7.14.5", 2525 | "@babel/helper-member-expression-to-functions": "^7.14.7", 2526 | "@babel/helper-optimise-call-expression": "^7.14.5", 2527 | "@babel/helper-replace-supers": "^7.14.5", 2528 | "@babel/helper-split-export-declaration": "^7.14.5" 2529 | } 2530 | }, 2531 | "@babel/helper-function-name": { 2532 | "version": "7.14.5", 2533 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", 2534 | "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", 2535 | "dev": true, 2536 | "requires": { 2537 | "@babel/helper-get-function-arity": "^7.14.5", 2538 | "@babel/template": "^7.14.5", 2539 | "@babel/types": "^7.14.5" 2540 | } 2541 | }, 2542 | "@babel/helper-get-function-arity": { 2543 | "version": "7.14.5", 2544 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", 2545 | "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", 2546 | "dev": true, 2547 | "requires": { 2548 | "@babel/types": "^7.14.5" 2549 | } 2550 | }, 2551 | "@babel/helper-hoist-variables": { 2552 | "version": "7.14.5", 2553 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", 2554 | "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", 2555 | "dev": true, 2556 | "requires": { 2557 | "@babel/types": "^7.14.5" 2558 | } 2559 | }, 2560 | "@babel/helper-member-expression-to-functions": { 2561 | "version": "7.14.7", 2562 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", 2563 | "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", 2564 | "dev": true, 2565 | "requires": { 2566 | "@babel/types": "^7.14.5" 2567 | } 2568 | }, 2569 | "@babel/helper-module-imports": { 2570 | "version": "7.14.5", 2571 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", 2572 | "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", 2573 | "dev": true, 2574 | "requires": { 2575 | "@babel/types": "^7.14.5" 2576 | } 2577 | }, 2578 | "@babel/helper-module-transforms": { 2579 | "version": "7.14.8", 2580 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz", 2581 | "integrity": "sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==", 2582 | "dev": true, 2583 | "requires": { 2584 | "@babel/helper-module-imports": "^7.14.5", 2585 | "@babel/helper-replace-supers": "^7.14.5", 2586 | "@babel/helper-simple-access": "^7.14.8", 2587 | "@babel/helper-split-export-declaration": "^7.14.5", 2588 | "@babel/helper-validator-identifier": "^7.14.8", 2589 | "@babel/template": "^7.14.5", 2590 | "@babel/traverse": "^7.14.8", 2591 | "@babel/types": "^7.14.8" 2592 | } 2593 | }, 2594 | "@babel/helper-optimise-call-expression": { 2595 | "version": "7.14.5", 2596 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", 2597 | "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", 2598 | "dev": true, 2599 | "requires": { 2600 | "@babel/types": "^7.14.5" 2601 | } 2602 | }, 2603 | "@babel/helper-plugin-utils": { 2604 | "version": "7.14.5", 2605 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", 2606 | "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", 2607 | "dev": true 2608 | }, 2609 | "@babel/helper-replace-supers": { 2610 | "version": "7.14.5", 2611 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", 2612 | "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", 2613 | "dev": true, 2614 | "requires": { 2615 | "@babel/helper-member-expression-to-functions": "^7.14.5", 2616 | "@babel/helper-optimise-call-expression": "^7.14.5", 2617 | "@babel/traverse": "^7.14.5", 2618 | "@babel/types": "^7.14.5" 2619 | } 2620 | }, 2621 | "@babel/helper-simple-access": { 2622 | "version": "7.14.8", 2623 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", 2624 | "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", 2625 | "dev": true, 2626 | "requires": { 2627 | "@babel/types": "^7.14.8" 2628 | } 2629 | }, 2630 | "@babel/helper-skip-transparent-expression-wrappers": { 2631 | "version": "7.14.5", 2632 | "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", 2633 | "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", 2634 | "dev": true, 2635 | "requires": { 2636 | "@babel/types": "^7.14.5" 2637 | } 2638 | }, 2639 | "@babel/helper-split-export-declaration": { 2640 | "version": "7.14.5", 2641 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", 2642 | "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", 2643 | "dev": true, 2644 | "requires": { 2645 | "@babel/types": "^7.14.5" 2646 | } 2647 | }, 2648 | "@babel/helper-validator-identifier": { 2649 | "version": "7.14.9", 2650 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", 2651 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", 2652 | "dev": true 2653 | }, 2654 | "@babel/helper-validator-option": { 2655 | "version": "7.14.5", 2656 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", 2657 | "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", 2658 | "dev": true 2659 | }, 2660 | "@babel/helpers": { 2661 | "version": "7.14.8", 2662 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz", 2663 | "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==", 2664 | "dev": true, 2665 | "requires": { 2666 | "@babel/template": "^7.14.5", 2667 | "@babel/traverse": "^7.14.8", 2668 | "@babel/types": "^7.14.8" 2669 | } 2670 | }, 2671 | "@babel/highlight": { 2672 | "version": "7.14.5", 2673 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 2674 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 2675 | "dev": true, 2676 | "requires": { 2677 | "@babel/helper-validator-identifier": "^7.14.5", 2678 | "chalk": "^2.0.0", 2679 | "js-tokens": "^4.0.0" 2680 | } 2681 | }, 2682 | "@babel/parser": { 2683 | "version": "7.14.9", 2684 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.9.tgz", 2685 | "integrity": "sha512-RdUTOseXJ8POjjOeEBEvNMIZU/nm4yu2rufRkcibzkkg7DmQvXU8v3M4Xk9G7uuI86CDGkKcuDWgioqZm+mScQ==", 2686 | "dev": true 2687 | }, 2688 | "@babel/plugin-proposal-class-properties": { 2689 | "version": "7.14.5", 2690 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", 2691 | "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", 2692 | "dev": true, 2693 | "requires": { 2694 | "@babel/helper-create-class-features-plugin": "^7.14.5", 2695 | "@babel/helper-plugin-utils": "^7.14.5" 2696 | } 2697 | }, 2698 | "@babel/plugin-proposal-dynamic-import": { 2699 | "version": "7.14.5", 2700 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", 2701 | "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", 2702 | "dev": true, 2703 | "requires": { 2704 | "@babel/helper-plugin-utils": "^7.14.5", 2705 | "@babel/plugin-syntax-dynamic-import": "^7.8.3" 2706 | } 2707 | }, 2708 | "@babel/plugin-proposal-export-namespace-from": { 2709 | "version": "7.14.5", 2710 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", 2711 | "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", 2712 | "dev": true, 2713 | "requires": { 2714 | "@babel/helper-plugin-utils": "^7.14.5", 2715 | "@babel/plugin-syntax-export-namespace-from": "^7.8.3" 2716 | } 2717 | }, 2718 | "@babel/plugin-proposal-logical-assignment-operators": { 2719 | "version": "7.14.5", 2720 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", 2721 | "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", 2722 | "dev": true, 2723 | "requires": { 2724 | "@babel/helper-plugin-utils": "^7.14.5", 2725 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" 2726 | } 2727 | }, 2728 | "@babel/plugin-proposal-nullish-coalescing-operator": { 2729 | "version": "7.14.5", 2730 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", 2731 | "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", 2732 | "dev": true, 2733 | "requires": { 2734 | "@babel/helper-plugin-utils": "^7.14.5", 2735 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" 2736 | } 2737 | }, 2738 | "@babel/plugin-proposal-numeric-separator": { 2739 | "version": "7.14.5", 2740 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", 2741 | "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", 2742 | "dev": true, 2743 | "requires": { 2744 | "@babel/helper-plugin-utils": "^7.14.5", 2745 | "@babel/plugin-syntax-numeric-separator": "^7.10.4" 2746 | } 2747 | }, 2748 | "@babel/plugin-proposal-optional-chaining": { 2749 | "version": "7.14.5", 2750 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", 2751 | "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", 2752 | "dev": true, 2753 | "requires": { 2754 | "@babel/helper-plugin-utils": "^7.14.5", 2755 | "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", 2756 | "@babel/plugin-syntax-optional-chaining": "^7.8.3" 2757 | } 2758 | }, 2759 | "@babel/plugin-proposal-private-methods": { 2760 | "version": "7.14.5", 2761 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", 2762 | "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", 2763 | "dev": true, 2764 | "requires": { 2765 | "@babel/helper-create-class-features-plugin": "^7.14.5", 2766 | "@babel/helper-plugin-utils": "^7.14.5" 2767 | } 2768 | }, 2769 | "@babel/plugin-proposal-private-property-in-object": { 2770 | "version": "7.14.5", 2771 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", 2772 | "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", 2773 | "dev": true, 2774 | "requires": { 2775 | "@babel/helper-annotate-as-pure": "^7.14.5", 2776 | "@babel/helper-create-class-features-plugin": "^7.14.5", 2777 | "@babel/helper-plugin-utils": "^7.14.5", 2778 | "@babel/plugin-syntax-private-property-in-object": "^7.14.5" 2779 | } 2780 | }, 2781 | "@babel/plugin-syntax-async-generators": { 2782 | "version": "7.8.4", 2783 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 2784 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 2785 | "dev": true, 2786 | "requires": { 2787 | "@babel/helper-plugin-utils": "^7.8.0" 2788 | } 2789 | }, 2790 | "@babel/plugin-syntax-dynamic-import": { 2791 | "version": "7.8.3", 2792 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 2793 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 2794 | "dev": true, 2795 | "requires": { 2796 | "@babel/helper-plugin-utils": "^7.8.0" 2797 | } 2798 | }, 2799 | "@babel/plugin-syntax-export-namespace-from": { 2800 | "version": "7.8.3", 2801 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", 2802 | "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", 2803 | "dev": true, 2804 | "requires": { 2805 | "@babel/helper-plugin-utils": "^7.8.3" 2806 | } 2807 | }, 2808 | "@babel/plugin-syntax-json-strings": { 2809 | "version": "7.8.3", 2810 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 2811 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 2812 | "dev": true, 2813 | "requires": { 2814 | "@babel/helper-plugin-utils": "^7.8.0" 2815 | } 2816 | }, 2817 | "@babel/plugin-syntax-logical-assignment-operators": { 2818 | "version": "7.10.4", 2819 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", 2820 | "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", 2821 | "dev": true, 2822 | "requires": { 2823 | "@babel/helper-plugin-utils": "^7.10.4" 2824 | } 2825 | }, 2826 | "@babel/plugin-syntax-nullish-coalescing-operator": { 2827 | "version": "7.8.3", 2828 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 2829 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 2830 | "dev": true, 2831 | "requires": { 2832 | "@babel/helper-plugin-utils": "^7.8.0" 2833 | } 2834 | }, 2835 | "@babel/plugin-syntax-numeric-separator": { 2836 | "version": "7.10.4", 2837 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", 2838 | "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", 2839 | "dev": true, 2840 | "requires": { 2841 | "@babel/helper-plugin-utils": "^7.10.4" 2842 | } 2843 | }, 2844 | "@babel/plugin-syntax-object-rest-spread": { 2845 | "version": "7.8.3", 2846 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 2847 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 2848 | "dev": true, 2849 | "requires": { 2850 | "@babel/helper-plugin-utils": "^7.8.0" 2851 | } 2852 | }, 2853 | "@babel/plugin-syntax-optional-catch-binding": { 2854 | "version": "7.8.3", 2855 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 2856 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 2857 | "dev": true, 2858 | "requires": { 2859 | "@babel/helper-plugin-utils": "^7.8.0" 2860 | } 2861 | }, 2862 | "@babel/plugin-syntax-optional-chaining": { 2863 | "version": "7.8.3", 2864 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 2865 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 2866 | "dev": true, 2867 | "requires": { 2868 | "@babel/helper-plugin-utils": "^7.8.0" 2869 | } 2870 | }, 2871 | "@babel/plugin-syntax-private-property-in-object": { 2872 | "version": "7.14.5", 2873 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", 2874 | "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", 2875 | "dev": true, 2876 | "requires": { 2877 | "@babel/helper-plugin-utils": "^7.14.5" 2878 | } 2879 | }, 2880 | "@babel/plugin-syntax-typescript": { 2881 | "version": "7.14.5", 2882 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", 2883 | "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", 2884 | "dev": true, 2885 | "requires": { 2886 | "@babel/helper-plugin-utils": "^7.14.5" 2887 | } 2888 | }, 2889 | "@babel/plugin-transform-modules-commonjs": { 2890 | "version": "7.14.5", 2891 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", 2892 | "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", 2893 | "dev": true, 2894 | "requires": { 2895 | "@babel/helper-module-transforms": "^7.14.5", 2896 | "@babel/helper-plugin-utils": "^7.14.5", 2897 | "@babel/helper-simple-access": "^7.14.5", 2898 | "babel-plugin-dynamic-import-node": "^2.3.3" 2899 | } 2900 | }, 2901 | "@babel/plugin-transform-typescript": { 2902 | "version": "7.14.6", 2903 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", 2904 | "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", 2905 | "dev": true, 2906 | "requires": { 2907 | "@babel/helper-create-class-features-plugin": "^7.14.6", 2908 | "@babel/helper-plugin-utils": "^7.14.5", 2909 | "@babel/plugin-syntax-typescript": "^7.14.5" 2910 | } 2911 | }, 2912 | "@babel/preset-typescript": { 2913 | "version": "7.14.5", 2914 | "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", 2915 | "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", 2916 | "dev": true, 2917 | "requires": { 2918 | "@babel/helper-plugin-utils": "^7.14.5", 2919 | "@babel/helper-validator-option": "^7.14.5", 2920 | "@babel/plugin-transform-typescript": "^7.14.5" 2921 | } 2922 | }, 2923 | "@babel/template": { 2924 | "version": "7.14.5", 2925 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", 2926 | "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", 2927 | "dev": true, 2928 | "requires": { 2929 | "@babel/code-frame": "^7.14.5", 2930 | "@babel/parser": "^7.14.5", 2931 | "@babel/types": "^7.14.5" 2932 | } 2933 | }, 2934 | "@babel/traverse": { 2935 | "version": "7.14.9", 2936 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.9.tgz", 2937 | "integrity": "sha512-bldh6dtB49L8q9bUyB7bC20UKgU+EFDwKJylwl234Kv+ySZeMD31Xeht6URyueQ6LrRRpF2tmkfcZooZR9/e8g==", 2938 | "dev": true, 2939 | "requires": { 2940 | "@babel/code-frame": "^7.14.5", 2941 | "@babel/generator": "^7.14.9", 2942 | "@babel/helper-function-name": "^7.14.5", 2943 | "@babel/helper-hoist-variables": "^7.14.5", 2944 | "@babel/helper-split-export-declaration": "^7.14.5", 2945 | "@babel/parser": "^7.14.9", 2946 | "@babel/types": "^7.14.9", 2947 | "debug": "^4.1.0", 2948 | "globals": "^11.1.0" 2949 | } 2950 | }, 2951 | "@babel/types": { 2952 | "version": "7.14.9", 2953 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.9.tgz", 2954 | "integrity": "sha512-u0bLTnv3DFHeaQLYzb7oRJ1JHr1sv/SYDM7JSqHFFLwXG1wTZRughxFI5NCP8qBEo1rVVsn7Yg2Lvw49nne/Ow==", 2955 | "dev": true, 2956 | "requires": { 2957 | "@babel/helper-validator-identifier": "^7.14.9", 2958 | "to-fast-properties": "^2.0.0" 2959 | } 2960 | }, 2961 | "@jest/types": { 2962 | "version": "26.6.2", 2963 | "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", 2964 | "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", 2965 | "dev": true, 2966 | "requires": { 2967 | "@types/istanbul-lib-coverage": "^2.0.0", 2968 | "@types/istanbul-reports": "^3.0.0", 2969 | "@types/node": "*", 2970 | "@types/yargs": "^15.0.0", 2971 | "chalk": "^4.0.0" 2972 | }, 2973 | "dependencies": { 2974 | "ansi-styles": { 2975 | "version": "4.3.0", 2976 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2977 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2978 | "dev": true, 2979 | "requires": { 2980 | "color-convert": "^2.0.1" 2981 | } 2982 | }, 2983 | "chalk": { 2984 | "version": "4.1.2", 2985 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2986 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2987 | "dev": true, 2988 | "requires": { 2989 | "ansi-styles": "^4.1.0", 2990 | "supports-color": "^7.1.0" 2991 | } 2992 | }, 2993 | "color-convert": { 2994 | "version": "2.0.1", 2995 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2996 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2997 | "dev": true, 2998 | "requires": { 2999 | "color-name": "~1.1.4" 3000 | } 3001 | }, 3002 | "color-name": { 3003 | "version": "1.1.4", 3004 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 3005 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 3006 | "dev": true 3007 | }, 3008 | "has-flag": { 3009 | "version": "4.0.0", 3010 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3011 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3012 | "dev": true 3013 | }, 3014 | "supports-color": { 3015 | "version": "7.2.0", 3016 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3017 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3018 | "dev": true, 3019 | "requires": { 3020 | "has-flag": "^4.0.0" 3021 | } 3022 | } 3023 | } 3024 | }, 3025 | "@nodelib/fs.scandir": { 3026 | "version": "2.1.5", 3027 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 3028 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 3029 | "dev": true, 3030 | "requires": { 3031 | "@nodelib/fs.stat": "2.0.5", 3032 | "run-parallel": "^1.1.9" 3033 | } 3034 | }, 3035 | "@nodelib/fs.stat": { 3036 | "version": "2.0.5", 3037 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 3038 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 3039 | "dev": true 3040 | }, 3041 | "@nodelib/fs.walk": { 3042 | "version": "1.2.8", 3043 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 3044 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 3045 | "dev": true, 3046 | "requires": { 3047 | "@nodelib/fs.scandir": "2.1.5", 3048 | "fastq": "^1.6.0" 3049 | } 3050 | }, 3051 | "@playwright/test": { 3052 | "version": "1.13.1", 3053 | "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.13.1.tgz", 3054 | "integrity": "sha512-i8se6FK65hdbTzGMWnvPEaFoCh7DQ0XLKmaf2rWnh+ufhn4Ad/1jhdK8c6s4Mo87veTfd6N60fKCAWjyhbHyCg==", 3055 | "dev": true, 3056 | "requires": { 3057 | "@babel/code-frame": "^7.12.13", 3058 | "@babel/core": "^7.14.0", 3059 | "@babel/plugin-proposal-class-properties": "^7.13.0", 3060 | "@babel/plugin-proposal-dynamic-import": "^7.13.8", 3061 | "@babel/plugin-proposal-export-namespace-from": "^7.12.13", 3062 | "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", 3063 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", 3064 | "@babel/plugin-proposal-numeric-separator": "^7.12.13", 3065 | "@babel/plugin-proposal-optional-chaining": "^7.13.12", 3066 | "@babel/plugin-proposal-private-methods": "^7.13.0", 3067 | "@babel/plugin-proposal-private-property-in-object": "^7.14.0", 3068 | "@babel/plugin-syntax-async-generators": "^7.8.4", 3069 | "@babel/plugin-syntax-json-strings": "^7.8.3", 3070 | "@babel/plugin-syntax-object-rest-spread": "^7.8.3", 3071 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", 3072 | "@babel/plugin-transform-modules-commonjs": "^7.14.0", 3073 | "@babel/preset-typescript": "^7.13.0", 3074 | "colors": "^1.4.0", 3075 | "commander": "^6.1.0", 3076 | "debug": "^4.1.1", 3077 | "expect": "^26.4.2", 3078 | "extract-zip": "^2.0.1", 3079 | "https-proxy-agent": "^5.0.0", 3080 | "jpeg-js": "^0.4.2", 3081 | "mime": "^2.4.6", 3082 | "minimatch": "^3.0.3", 3083 | "ms": "^2.1.2", 3084 | "pirates": "^4.0.1", 3085 | "pixelmatch": "^5.2.1", 3086 | "pngjs": "^5.0.0", 3087 | "progress": "^2.0.3", 3088 | "proper-lockfile": "^4.1.1", 3089 | "proxy-from-env": "^1.1.0", 3090 | "rimraf": "^3.0.2", 3091 | "source-map-support": "^0.4.18", 3092 | "stack-utils": "^2.0.3", 3093 | "ws": "^7.4.6", 3094 | "yazl": "^2.5.1" 3095 | } 3096 | }, 3097 | "@types/istanbul-lib-coverage": { 3098 | "version": "2.0.3", 3099 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", 3100 | "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", 3101 | "dev": true 3102 | }, 3103 | "@types/istanbul-lib-report": { 3104 | "version": "3.0.0", 3105 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", 3106 | "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", 3107 | "dev": true, 3108 | "requires": { 3109 | "@types/istanbul-lib-coverage": "*" 3110 | } 3111 | }, 3112 | "@types/istanbul-reports": { 3113 | "version": "3.0.1", 3114 | "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", 3115 | "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", 3116 | "dev": true, 3117 | "requires": { 3118 | "@types/istanbul-lib-report": "*" 3119 | } 3120 | }, 3121 | "@types/node": { 3122 | "version": "16.4.10", 3123 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.10.tgz", 3124 | "integrity": "sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ==", 3125 | "dev": true 3126 | }, 3127 | "@types/stack-utils": { 3128 | "version": "2.0.1", 3129 | "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", 3130 | "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", 3131 | "dev": true 3132 | }, 3133 | "@types/yargs": { 3134 | "version": "15.0.14", 3135 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", 3136 | "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", 3137 | "dev": true, 3138 | "requires": { 3139 | "@types/yargs-parser": "*" 3140 | } 3141 | }, 3142 | "@types/yargs-parser": { 3143 | "version": "20.2.1", 3144 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", 3145 | "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", 3146 | "dev": true 3147 | }, 3148 | "@types/yauzl": { 3149 | "version": "2.9.2", 3150 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", 3151 | "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", 3152 | "dev": true, 3153 | "optional": true, 3154 | "requires": { 3155 | "@types/node": "*" 3156 | } 3157 | }, 3158 | "agent-base": { 3159 | "version": "6.0.2", 3160 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 3161 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 3162 | "dev": true, 3163 | "requires": { 3164 | "debug": "4" 3165 | } 3166 | }, 3167 | "ansi-regex": { 3168 | "version": "5.0.0", 3169 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 3170 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 3171 | "dev": true 3172 | }, 3173 | "ansi-styles": { 3174 | "version": "3.2.1", 3175 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 3176 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 3177 | "dev": true, 3178 | "requires": { 3179 | "color-convert": "^1.9.0" 3180 | } 3181 | }, 3182 | "array-union": { 3183 | "version": "2.1.0", 3184 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 3185 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 3186 | "dev": true 3187 | }, 3188 | "babel-plugin-dynamic-import-node": { 3189 | "version": "2.3.3", 3190 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", 3191 | "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", 3192 | "dev": true, 3193 | "requires": { 3194 | "object.assign": "^4.1.0" 3195 | } 3196 | }, 3197 | "balanced-match": { 3198 | "version": "1.0.2", 3199 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 3200 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 3201 | "dev": true 3202 | }, 3203 | "brace-expansion": { 3204 | "version": "1.1.11", 3205 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 3206 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 3207 | "dev": true, 3208 | "requires": { 3209 | "balanced-match": "^1.0.0", 3210 | "concat-map": "0.0.1" 3211 | } 3212 | }, 3213 | "braces": { 3214 | "version": "3.0.2", 3215 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 3216 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 3217 | "dev": true, 3218 | "requires": { 3219 | "fill-range": "^7.0.1" 3220 | } 3221 | }, 3222 | "browserslist": { 3223 | "version": "4.16.7", 3224 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", 3225 | "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", 3226 | "dev": true, 3227 | "requires": { 3228 | "caniuse-lite": "^1.0.30001248", 3229 | "colorette": "^1.2.2", 3230 | "electron-to-chromium": "^1.3.793", 3231 | "escalade": "^3.1.1", 3232 | "node-releases": "^1.1.73" 3233 | } 3234 | }, 3235 | "buffer-crc32": { 3236 | "version": "0.2.13", 3237 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 3238 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 3239 | "dev": true 3240 | }, 3241 | "call-bind": { 3242 | "version": "1.0.2", 3243 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 3244 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 3245 | "dev": true, 3246 | "requires": { 3247 | "function-bind": "^1.1.1", 3248 | "get-intrinsic": "^1.0.2" 3249 | } 3250 | }, 3251 | "caniuse-lite": { 3252 | "version": "1.0.30001248", 3253 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz", 3254 | "integrity": "sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==", 3255 | "dev": true 3256 | }, 3257 | "chalk": { 3258 | "version": "2.4.2", 3259 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 3260 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 3261 | "dev": true, 3262 | "requires": { 3263 | "ansi-styles": "^3.2.1", 3264 | "escape-string-regexp": "^1.0.5", 3265 | "supports-color": "^5.3.0" 3266 | } 3267 | }, 3268 | "color-convert": { 3269 | "version": "1.9.3", 3270 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 3271 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 3272 | "dev": true, 3273 | "requires": { 3274 | "color-name": "1.1.3" 3275 | } 3276 | }, 3277 | "color-name": { 3278 | "version": "1.1.3", 3279 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 3280 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 3281 | "dev": true 3282 | }, 3283 | "colorette": { 3284 | "version": "1.2.2", 3285 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 3286 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", 3287 | "dev": true 3288 | }, 3289 | "colors": { 3290 | "version": "1.4.0", 3291 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 3292 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", 3293 | "dev": true 3294 | }, 3295 | "commander": { 3296 | "version": "6.2.1", 3297 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 3298 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", 3299 | "dev": true 3300 | }, 3301 | "concat-map": { 3302 | "version": "0.0.1", 3303 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 3304 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 3305 | "dev": true 3306 | }, 3307 | "convert-source-map": { 3308 | "version": "1.8.0", 3309 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 3310 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 3311 | "dev": true, 3312 | "requires": { 3313 | "safe-buffer": "~5.1.1" 3314 | } 3315 | }, 3316 | "debug": { 3317 | "version": "4.3.2", 3318 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", 3319 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", 3320 | "dev": true, 3321 | "requires": { 3322 | "ms": "2.1.2" 3323 | }, 3324 | "dependencies": { 3325 | "ms": { 3326 | "version": "2.1.2", 3327 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3328 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 3329 | "dev": true 3330 | } 3331 | } 3332 | }, 3333 | "define-properties": { 3334 | "version": "1.1.3", 3335 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 3336 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 3337 | "dev": true, 3338 | "requires": { 3339 | "object-keys": "^1.0.12" 3340 | } 3341 | }, 3342 | "diff-sequences": { 3343 | "version": "26.6.2", 3344 | "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", 3345 | "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", 3346 | "dev": true 3347 | }, 3348 | "dir-glob": { 3349 | "version": "3.0.1", 3350 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 3351 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 3352 | "dev": true, 3353 | "requires": { 3354 | "path-type": "^4.0.0" 3355 | } 3356 | }, 3357 | "electron-to-chromium": { 3358 | "version": "1.3.793", 3359 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.793.tgz", 3360 | "integrity": "sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==", 3361 | "dev": true 3362 | }, 3363 | "end-of-stream": { 3364 | "version": "1.4.4", 3365 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 3366 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 3367 | "dev": true, 3368 | "requires": { 3369 | "once": "^1.4.0" 3370 | } 3371 | }, 3372 | "esbuild": { 3373 | "version": "0.12.17", 3374 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.17.tgz", 3375 | "integrity": "sha512-GshKJyVYUnlSXIZj/NheC2O0Kblh42CS7P1wJyTbbIHevTG4jYMS9NNw8EOd8dDWD0dzydYHS01MpZoUcQXB4g==", 3376 | "dev": true 3377 | }, 3378 | "escalade": { 3379 | "version": "3.1.1", 3380 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 3381 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 3382 | "dev": true 3383 | }, 3384 | "escape-string-regexp": { 3385 | "version": "1.0.5", 3386 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 3387 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 3388 | "dev": true 3389 | }, 3390 | "expect": { 3391 | "version": "26.6.2", 3392 | "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", 3393 | "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", 3394 | "dev": true, 3395 | "requires": { 3396 | "@jest/types": "^26.6.2", 3397 | "ansi-styles": "^4.0.0", 3398 | "jest-get-type": "^26.3.0", 3399 | "jest-matcher-utils": "^26.6.2", 3400 | "jest-message-util": "^26.6.2", 3401 | "jest-regex-util": "^26.0.0" 3402 | }, 3403 | "dependencies": { 3404 | "ansi-styles": { 3405 | "version": "4.3.0", 3406 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 3407 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 3408 | "dev": true, 3409 | "requires": { 3410 | "color-convert": "^2.0.1" 3411 | } 3412 | }, 3413 | "color-convert": { 3414 | "version": "2.0.1", 3415 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 3416 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 3417 | "dev": true, 3418 | "requires": { 3419 | "color-name": "~1.1.4" 3420 | } 3421 | }, 3422 | "color-name": { 3423 | "version": "1.1.4", 3424 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 3425 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 3426 | "dev": true 3427 | } 3428 | } 3429 | }, 3430 | "extract-zip": { 3431 | "version": "2.0.1", 3432 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 3433 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 3434 | "dev": true, 3435 | "requires": { 3436 | "@types/yauzl": "^2.9.1", 3437 | "debug": "^4.1.1", 3438 | "get-stream": "^5.1.0", 3439 | "yauzl": "^2.10.0" 3440 | } 3441 | }, 3442 | "fast-glob": { 3443 | "version": "3.2.7", 3444 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", 3445 | "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", 3446 | "dev": true, 3447 | "requires": { 3448 | "@nodelib/fs.stat": "^2.0.2", 3449 | "@nodelib/fs.walk": "^1.2.3", 3450 | "glob-parent": "^5.1.2", 3451 | "merge2": "^1.3.0", 3452 | "micromatch": "^4.0.4" 3453 | } 3454 | }, 3455 | "fastq": { 3456 | "version": "1.11.1", 3457 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", 3458 | "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", 3459 | "dev": true, 3460 | "requires": { 3461 | "reusify": "^1.0.4" 3462 | } 3463 | }, 3464 | "fd-slicer": { 3465 | "version": "1.1.0", 3466 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 3467 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 3468 | "dev": true, 3469 | "requires": { 3470 | "pend": "~1.2.0" 3471 | } 3472 | }, 3473 | "fill-range": { 3474 | "version": "7.0.1", 3475 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 3476 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 3477 | "dev": true, 3478 | "requires": { 3479 | "to-regex-range": "^5.0.1" 3480 | } 3481 | }, 3482 | "fs.realpath": { 3483 | "version": "1.0.0", 3484 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 3485 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 3486 | "dev": true 3487 | }, 3488 | "function-bind": { 3489 | "version": "1.1.1", 3490 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 3491 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 3492 | "dev": true 3493 | }, 3494 | "gensync": { 3495 | "version": "1.0.0-beta.2", 3496 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 3497 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 3498 | "dev": true 3499 | }, 3500 | "get-intrinsic": { 3501 | "version": "1.1.1", 3502 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 3503 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 3504 | "dev": true, 3505 | "requires": { 3506 | "function-bind": "^1.1.1", 3507 | "has": "^1.0.3", 3508 | "has-symbols": "^1.0.1" 3509 | } 3510 | }, 3511 | "get-stream": { 3512 | "version": "5.2.0", 3513 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 3514 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 3515 | "dev": true, 3516 | "requires": { 3517 | "pump": "^3.0.0" 3518 | } 3519 | }, 3520 | "glob": { 3521 | "version": "7.1.7", 3522 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 3523 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 3524 | "dev": true, 3525 | "requires": { 3526 | "fs.realpath": "^1.0.0", 3527 | "inflight": "^1.0.4", 3528 | "inherits": "2", 3529 | "minimatch": "^3.0.4", 3530 | "once": "^1.3.0", 3531 | "path-is-absolute": "^1.0.0" 3532 | } 3533 | }, 3534 | "glob-parent": { 3535 | "version": "5.1.2", 3536 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 3537 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 3538 | "dev": true, 3539 | "requires": { 3540 | "is-glob": "^4.0.1" 3541 | } 3542 | }, 3543 | "globals": { 3544 | "version": "11.12.0", 3545 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 3546 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 3547 | "dev": true 3548 | }, 3549 | "globby": { 3550 | "version": "11.0.4", 3551 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", 3552 | "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", 3553 | "dev": true, 3554 | "requires": { 3555 | "array-union": "^2.1.0", 3556 | "dir-glob": "^3.0.1", 3557 | "fast-glob": "^3.1.1", 3558 | "ignore": "^5.1.4", 3559 | "merge2": "^1.3.0", 3560 | "slash": "^3.0.0" 3561 | } 3562 | }, 3563 | "graceful-fs": { 3564 | "version": "4.2.6", 3565 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 3566 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 3567 | "dev": true 3568 | }, 3569 | "has": { 3570 | "version": "1.0.3", 3571 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 3572 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 3573 | "dev": true, 3574 | "requires": { 3575 | "function-bind": "^1.1.1" 3576 | } 3577 | }, 3578 | "has-flag": { 3579 | "version": "3.0.0", 3580 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 3581 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 3582 | "dev": true 3583 | }, 3584 | "has-symbols": { 3585 | "version": "1.0.2", 3586 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 3587 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 3588 | "dev": true 3589 | }, 3590 | "https-proxy-agent": { 3591 | "version": "5.0.0", 3592 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 3593 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 3594 | "dev": true, 3595 | "requires": { 3596 | "agent-base": "6", 3597 | "debug": "4" 3598 | } 3599 | }, 3600 | "ignore": { 3601 | "version": "5.1.8", 3602 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 3603 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 3604 | "dev": true 3605 | }, 3606 | "inflight": { 3607 | "version": "1.0.6", 3608 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 3609 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 3610 | "dev": true, 3611 | "requires": { 3612 | "once": "^1.3.0", 3613 | "wrappy": "1" 3614 | } 3615 | }, 3616 | "inherits": { 3617 | "version": "2.0.4", 3618 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3619 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 3620 | "dev": true 3621 | }, 3622 | "is-extglob": { 3623 | "version": "2.1.1", 3624 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3625 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 3626 | "dev": true 3627 | }, 3628 | "is-glob": { 3629 | "version": "4.0.1", 3630 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 3631 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 3632 | "dev": true, 3633 | "requires": { 3634 | "is-extglob": "^2.1.1" 3635 | } 3636 | }, 3637 | "is-number": { 3638 | "version": "7.0.0", 3639 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3640 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3641 | "dev": true 3642 | }, 3643 | "jest-diff": { 3644 | "version": "26.6.2", 3645 | "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", 3646 | "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", 3647 | "dev": true, 3648 | "requires": { 3649 | "chalk": "^4.0.0", 3650 | "diff-sequences": "^26.6.2", 3651 | "jest-get-type": "^26.3.0", 3652 | "pretty-format": "^26.6.2" 3653 | }, 3654 | "dependencies": { 3655 | "ansi-styles": { 3656 | "version": "4.3.0", 3657 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 3658 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 3659 | "dev": true, 3660 | "requires": { 3661 | "color-convert": "^2.0.1" 3662 | } 3663 | }, 3664 | "chalk": { 3665 | "version": "4.1.2", 3666 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 3667 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 3668 | "dev": true, 3669 | "requires": { 3670 | "ansi-styles": "^4.1.0", 3671 | "supports-color": "^7.1.0" 3672 | } 3673 | }, 3674 | "color-convert": { 3675 | "version": "2.0.1", 3676 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 3677 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 3678 | "dev": true, 3679 | "requires": { 3680 | "color-name": "~1.1.4" 3681 | } 3682 | }, 3683 | "color-name": { 3684 | "version": "1.1.4", 3685 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 3686 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 3687 | "dev": true 3688 | }, 3689 | "has-flag": { 3690 | "version": "4.0.0", 3691 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3692 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3693 | "dev": true 3694 | }, 3695 | "supports-color": { 3696 | "version": "7.2.0", 3697 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3698 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3699 | "dev": true, 3700 | "requires": { 3701 | "has-flag": "^4.0.0" 3702 | } 3703 | } 3704 | } 3705 | }, 3706 | "jest-get-type": { 3707 | "version": "26.3.0", 3708 | "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", 3709 | "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", 3710 | "dev": true 3711 | }, 3712 | "jest-matcher-utils": { 3713 | "version": "26.6.2", 3714 | "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", 3715 | "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", 3716 | "dev": true, 3717 | "requires": { 3718 | "chalk": "^4.0.0", 3719 | "jest-diff": "^26.6.2", 3720 | "jest-get-type": "^26.3.0", 3721 | "pretty-format": "^26.6.2" 3722 | }, 3723 | "dependencies": { 3724 | "ansi-styles": { 3725 | "version": "4.3.0", 3726 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 3727 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 3728 | "dev": true, 3729 | "requires": { 3730 | "color-convert": "^2.0.1" 3731 | } 3732 | }, 3733 | "chalk": { 3734 | "version": "4.1.2", 3735 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 3736 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 3737 | "dev": true, 3738 | "requires": { 3739 | "ansi-styles": "^4.1.0", 3740 | "supports-color": "^7.1.0" 3741 | } 3742 | }, 3743 | "color-convert": { 3744 | "version": "2.0.1", 3745 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 3746 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 3747 | "dev": true, 3748 | "requires": { 3749 | "color-name": "~1.1.4" 3750 | } 3751 | }, 3752 | "color-name": { 3753 | "version": "1.1.4", 3754 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 3755 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 3756 | "dev": true 3757 | }, 3758 | "has-flag": { 3759 | "version": "4.0.0", 3760 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3761 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3762 | "dev": true 3763 | }, 3764 | "supports-color": { 3765 | "version": "7.2.0", 3766 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3767 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3768 | "dev": true, 3769 | "requires": { 3770 | "has-flag": "^4.0.0" 3771 | } 3772 | } 3773 | } 3774 | }, 3775 | "jest-message-util": { 3776 | "version": "26.6.2", 3777 | "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", 3778 | "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", 3779 | "dev": true, 3780 | "requires": { 3781 | "@babel/code-frame": "^7.0.0", 3782 | "@jest/types": "^26.6.2", 3783 | "@types/stack-utils": "^2.0.0", 3784 | "chalk": "^4.0.0", 3785 | "graceful-fs": "^4.2.4", 3786 | "micromatch": "^4.0.2", 3787 | "pretty-format": "^26.6.2", 3788 | "slash": "^3.0.0", 3789 | "stack-utils": "^2.0.2" 3790 | }, 3791 | "dependencies": { 3792 | "ansi-styles": { 3793 | "version": "4.3.0", 3794 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 3795 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 3796 | "dev": true, 3797 | "requires": { 3798 | "color-convert": "^2.0.1" 3799 | } 3800 | }, 3801 | "chalk": { 3802 | "version": "4.1.2", 3803 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 3804 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 3805 | "dev": true, 3806 | "requires": { 3807 | "ansi-styles": "^4.1.0", 3808 | "supports-color": "^7.1.0" 3809 | } 3810 | }, 3811 | "color-convert": { 3812 | "version": "2.0.1", 3813 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 3814 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 3815 | "dev": true, 3816 | "requires": { 3817 | "color-name": "~1.1.4" 3818 | } 3819 | }, 3820 | "color-name": { 3821 | "version": "1.1.4", 3822 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 3823 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 3824 | "dev": true 3825 | }, 3826 | "has-flag": { 3827 | "version": "4.0.0", 3828 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 3829 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 3830 | "dev": true 3831 | }, 3832 | "supports-color": { 3833 | "version": "7.2.0", 3834 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3835 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3836 | "dev": true, 3837 | "requires": { 3838 | "has-flag": "^4.0.0" 3839 | } 3840 | } 3841 | } 3842 | }, 3843 | "jest-regex-util": { 3844 | "version": "26.0.0", 3845 | "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", 3846 | "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", 3847 | "dev": true 3848 | }, 3849 | "jpeg-js": { 3850 | "version": "0.4.3", 3851 | "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", 3852 | "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==", 3853 | "dev": true 3854 | }, 3855 | "js-tokens": { 3856 | "version": "4.0.0", 3857 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 3858 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 3859 | "dev": true 3860 | }, 3861 | "jsesc": { 3862 | "version": "2.5.2", 3863 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 3864 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 3865 | "dev": true 3866 | }, 3867 | "json5": { 3868 | "version": "2.2.0", 3869 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", 3870 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", 3871 | "dev": true, 3872 | "requires": { 3873 | "minimist": "^1.2.5" 3874 | } 3875 | }, 3876 | "merge2": { 3877 | "version": "1.4.1", 3878 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 3879 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 3880 | "dev": true 3881 | }, 3882 | "micromatch": { 3883 | "version": "4.0.4", 3884 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 3885 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 3886 | "dev": true, 3887 | "requires": { 3888 | "braces": "^3.0.1", 3889 | "picomatch": "^2.2.3" 3890 | } 3891 | }, 3892 | "mime": { 3893 | "version": "2.5.2", 3894 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", 3895 | "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", 3896 | "dev": true 3897 | }, 3898 | "minimatch": { 3899 | "version": "3.0.4", 3900 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 3901 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 3902 | "dev": true, 3903 | "requires": { 3904 | "brace-expansion": "^1.1.7" 3905 | } 3906 | }, 3907 | "minimist": { 3908 | "version": "1.2.5", 3909 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 3910 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 3911 | "dev": true 3912 | }, 3913 | "ms": { 3914 | "version": "2.1.3", 3915 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3916 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 3917 | "dev": true 3918 | }, 3919 | "node-modules-regexp": { 3920 | "version": "1.0.0", 3921 | "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", 3922 | "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", 3923 | "dev": true 3924 | }, 3925 | "node-releases": { 3926 | "version": "1.1.73", 3927 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", 3928 | "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", 3929 | "dev": true 3930 | }, 3931 | "object-keys": { 3932 | "version": "1.1.1", 3933 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 3934 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 3935 | "dev": true 3936 | }, 3937 | "object.assign": { 3938 | "version": "4.1.2", 3939 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 3940 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 3941 | "dev": true, 3942 | "requires": { 3943 | "call-bind": "^1.0.0", 3944 | "define-properties": "^1.1.3", 3945 | "has-symbols": "^1.0.1", 3946 | "object-keys": "^1.1.1" 3947 | } 3948 | }, 3949 | "once": { 3950 | "version": "1.4.0", 3951 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3952 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 3953 | "dev": true, 3954 | "requires": { 3955 | "wrappy": "1" 3956 | } 3957 | }, 3958 | "path-is-absolute": { 3959 | "version": "1.0.1", 3960 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3961 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 3962 | "dev": true 3963 | }, 3964 | "path-type": { 3965 | "version": "4.0.0", 3966 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 3967 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 3968 | "dev": true 3969 | }, 3970 | "pend": { 3971 | "version": "1.2.0", 3972 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 3973 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 3974 | "dev": true 3975 | }, 3976 | "picomatch": { 3977 | "version": "2.3.0", 3978 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 3979 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 3980 | "dev": true 3981 | }, 3982 | "pirates": { 3983 | "version": "4.0.1", 3984 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", 3985 | "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", 3986 | "dev": true, 3987 | "requires": { 3988 | "node-modules-regexp": "^1.0.0" 3989 | } 3990 | }, 3991 | "pixelmatch": { 3992 | "version": "5.2.1", 3993 | "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.2.1.tgz", 3994 | "integrity": "sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==", 3995 | "dev": true, 3996 | "requires": { 3997 | "pngjs": "^4.0.1" 3998 | }, 3999 | "dependencies": { 4000 | "pngjs": { 4001 | "version": "4.0.1", 4002 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", 4003 | "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", 4004 | "dev": true 4005 | } 4006 | } 4007 | }, 4008 | "pngjs": { 4009 | "version": "5.0.0", 4010 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", 4011 | "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", 4012 | "dev": true 4013 | }, 4014 | "pretty-format": { 4015 | "version": "26.6.2", 4016 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", 4017 | "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", 4018 | "dev": true, 4019 | "requires": { 4020 | "@jest/types": "^26.6.2", 4021 | "ansi-regex": "^5.0.0", 4022 | "ansi-styles": "^4.0.0", 4023 | "react-is": "^17.0.1" 4024 | }, 4025 | "dependencies": { 4026 | "ansi-styles": { 4027 | "version": "4.3.0", 4028 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 4029 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 4030 | "dev": true, 4031 | "requires": { 4032 | "color-convert": "^2.0.1" 4033 | } 4034 | }, 4035 | "color-convert": { 4036 | "version": "2.0.1", 4037 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 4038 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 4039 | "dev": true, 4040 | "requires": { 4041 | "color-name": "~1.1.4" 4042 | } 4043 | }, 4044 | "color-name": { 4045 | "version": "1.1.4", 4046 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 4047 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 4048 | "dev": true 4049 | } 4050 | } 4051 | }, 4052 | "progress": { 4053 | "version": "2.0.3", 4054 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 4055 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 4056 | "dev": true 4057 | }, 4058 | "proper-lockfile": { 4059 | "version": "4.1.2", 4060 | "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", 4061 | "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", 4062 | "dev": true, 4063 | "requires": { 4064 | "graceful-fs": "^4.2.4", 4065 | "retry": "^0.12.0", 4066 | "signal-exit": "^3.0.2" 4067 | } 4068 | }, 4069 | "proxy-from-env": { 4070 | "version": "1.1.0", 4071 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 4072 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 4073 | "dev": true 4074 | }, 4075 | "pump": { 4076 | "version": "3.0.0", 4077 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 4078 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 4079 | "dev": true, 4080 | "requires": { 4081 | "end-of-stream": "^1.1.0", 4082 | "once": "^1.3.1" 4083 | } 4084 | }, 4085 | "queue-microtask": { 4086 | "version": "1.2.3", 4087 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 4088 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 4089 | "dev": true 4090 | }, 4091 | "react-is": { 4092 | "version": "17.0.2", 4093 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 4094 | "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 4095 | "dev": true 4096 | }, 4097 | "retry": { 4098 | "version": "0.12.0", 4099 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 4100 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", 4101 | "dev": true 4102 | }, 4103 | "reusify": { 4104 | "version": "1.0.4", 4105 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 4106 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 4107 | "dev": true 4108 | }, 4109 | "rimraf": { 4110 | "version": "3.0.2", 4111 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 4112 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 4113 | "dev": true, 4114 | "requires": { 4115 | "glob": "^7.1.3" 4116 | } 4117 | }, 4118 | "run-parallel": { 4119 | "version": "1.2.0", 4120 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 4121 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 4122 | "dev": true, 4123 | "requires": { 4124 | "queue-microtask": "^1.2.2" 4125 | } 4126 | }, 4127 | "safe-buffer": { 4128 | "version": "5.1.2", 4129 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 4130 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 4131 | "dev": true 4132 | }, 4133 | "semver": { 4134 | "version": "6.3.0", 4135 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 4136 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 4137 | "dev": true 4138 | }, 4139 | "signal-exit": { 4140 | "version": "3.0.3", 4141 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 4142 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 4143 | "dev": true 4144 | }, 4145 | "slash": { 4146 | "version": "3.0.0", 4147 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 4148 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 4149 | "dev": true 4150 | }, 4151 | "source-map": { 4152 | "version": "0.5.7", 4153 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 4154 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 4155 | "dev": true 4156 | }, 4157 | "source-map-support": { 4158 | "version": "0.4.18", 4159 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 4160 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 4161 | "dev": true, 4162 | "requires": { 4163 | "source-map": "^0.5.6" 4164 | } 4165 | }, 4166 | "stack-utils": { 4167 | "version": "2.0.3", 4168 | "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", 4169 | "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", 4170 | "dev": true, 4171 | "requires": { 4172 | "escape-string-regexp": "^2.0.0" 4173 | }, 4174 | "dependencies": { 4175 | "escape-string-regexp": { 4176 | "version": "2.0.0", 4177 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 4178 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 4179 | "dev": true 4180 | } 4181 | } 4182 | }, 4183 | "supports-color": { 4184 | "version": "5.5.0", 4185 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 4186 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 4187 | "dev": true, 4188 | "requires": { 4189 | "has-flag": "^3.0.0" 4190 | } 4191 | }, 4192 | "to-fast-properties": { 4193 | "version": "2.0.0", 4194 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 4195 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 4196 | "dev": true 4197 | }, 4198 | "to-regex-range": { 4199 | "version": "5.0.1", 4200 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 4201 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 4202 | "dev": true, 4203 | "requires": { 4204 | "is-number": "^7.0.0" 4205 | } 4206 | }, 4207 | "typescript": { 4208 | "version": "4.2.2", 4209 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.2.tgz", 4210 | "integrity": "sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ==", 4211 | "dev": true 4212 | }, 4213 | "wrappy": { 4214 | "version": "1.0.2", 4215 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 4216 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 4217 | "dev": true 4218 | }, 4219 | "ws": { 4220 | "version": "7.5.3", 4221 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", 4222 | "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", 4223 | "dev": true, 4224 | "requires": {} 4225 | }, 4226 | "yauzl": { 4227 | "version": "2.10.0", 4228 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 4229 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 4230 | "dev": true, 4231 | "requires": { 4232 | "buffer-crc32": "~0.2.3", 4233 | "fd-slicer": "~1.1.0" 4234 | } 4235 | }, 4236 | "yazl": { 4237 | "version": "2.5.1", 4238 | "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", 4239 | "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", 4240 | "dev": true, 4241 | "requires": { 4242 | "buffer-crc32": "~0.2.3" 4243 | } 4244 | } 4245 | } 4246 | } 4247 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "playwright-request-mocker", 3 | "description": "Automatically generate and use network request mocks inside Playwright.", 4 | "author": "kousenlsn", 5 | "version": "0.3.0", 6 | "license": "MIT", 7 | "module": "./dist/index.js", 8 | "main": "./dist/index.js", 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/kousenlsn/playwright-request-mocker" 12 | }, 13 | "keywords": [ 14 | "Playwright", 15 | "HAR", 16 | "auto", 17 | "automatically", 18 | "Playwright/test", 19 | "mock", 20 | "network", 21 | "requests", 22 | "http", 23 | "record" 24 | ], 25 | "dependencies": {}, 26 | "devDependencies": { 27 | "@playwright/test": "^1.12.3", 28 | "esbuild": "^0.12.17", 29 | "globby": "^11.0.4", 30 | "typescript": "4.2.2", 31 | "rimraf": "^3.0.2" 32 | }, 33 | "peerDependencies": { 34 | "@playwright/test": "^1.12.3" 35 | }, 36 | "scripts": { 37 | "build": "rimraf dist && node ./esbuild.js && tsc --emitDeclarationOnly --outDir dist" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-network-record-mocks'; 2 | export * from './models'; 3 | export * from './utils/requests-utils'; 4 | -------------------------------------------------------------------------------- /src/models/har.ts: -------------------------------------------------------------------------------- 1 | export interface HAR { 2 | log: { 3 | entries: [ 4 | { 5 | request: { 6 | url: string; 7 | postData: { 8 | text: string; 9 | }; 10 | }; 11 | response: { 12 | content: { 13 | text: string; 14 | mimeType: string; 15 | }; 16 | }; 17 | } 18 | ]; 19 | }; 20 | } -------------------------------------------------------------------------------- /src/models/index.ts: -------------------------------------------------------------------------------- 1 | export * from './record-request'; 2 | export * from './har'; 3 | -------------------------------------------------------------------------------- /src/models/record-request.ts: -------------------------------------------------------------------------------- 1 | export interface RecordRequest { 2 | url: string; 3 | request: any; 4 | requestData: { [key: string]: any }; 5 | response: { [key: string]: any }; 6 | } 7 | -------------------------------------------------------------------------------- /src/recorder.ts: -------------------------------------------------------------------------------- 1 | import { chromium } from "@playwright/test"; 2 | import fs from "fs"; 3 | import os from "os"; 4 | 5 | import { 6 | removeFile, 7 | waitForFileExists, 8 | writeFile, 9 | endpointOfUrl, 10 | setHttpLogs, 11 | } from "./utils"; 12 | import { HAR, RecordRequest } from "./models"; 13 | 14 | export const readHarFile = (path: string, route: string): Promise => { 15 | const host = route 16 | .replace("https://", "") 17 | .replace("http://", "") 18 | .split("/")[0]; 19 | 20 | return new Promise((resolve, reject) => { 21 | fs.readFile(path, (err, data) => { 22 | if (err) reject(err); 23 | else { 24 | const result: HAR = JSON.parse(data.toString()); 25 | 26 | const xgrRequests: RecordRequest[] = result.log.entries 27 | .filter((e) => { 28 | const url: string = e.request.url; 29 | 30 | return ( 31 | !url.includes(host) && 32 | !/(.png)|(.jpeg)|(.webp)|(.jpg)|(.gif)|(.css)|(.js)|(.woff2)/.test( 33 | url 34 | ) && 35 | !/(image)|(font)|(javascript)|(css)|(html)|(text\/plain)/.test( 36 | e.response.content.mimeType 37 | ) 38 | ); 39 | }) 40 | .map(({ request, response }) => { 41 | const responseString = response.content.text 42 | ? Buffer.from(response.content.text, "base64").toString() 43 | : "{}"; 44 | 45 | return { 46 | url: endpointOfUrl(request.url), 47 | request, 48 | requestData: JSON.parse(request?.postData?.text || "{}"), 49 | response: JSON.parse(responseString), 50 | }; 51 | }); 52 | resolve(xgrRequests); 53 | } 54 | }); 55 | }); 56 | }; 57 | 58 | export const recordHar = async ( 59 | route: string, 60 | filePath?: string, 61 | logRecording = false 62 | ): Promise => { 63 | const harPath = filePath.replace(".json", ".temp.har"); 64 | 65 | const browser = await chromium.launchPersistentContext( 66 | `${os.tmpdir()}/chrome-user-data-dir`, 67 | { 68 | headless: false, 69 | viewport: null, 70 | recordHar: { 71 | omitContent: false, 72 | path: harPath, 73 | }, 74 | } 75 | ); 76 | 77 | const page = await browser.newPage(); 78 | await page.goto(route); 79 | 80 | logRecording && setHttpLogs(page); 81 | 82 | console.log("Recording requests"); 83 | 84 | await page.pause(); 85 | await page.close(); 86 | await browser.close(); 87 | 88 | let requests = []; 89 | 90 | try { 91 | console.log("Processing recording..."); 92 | 93 | await waitForFileExists(filePath); 94 | 95 | requests = await readHarFile(harPath, route); 96 | await writeFile(filePath, requests); 97 | 98 | await removeFile(harPath); 99 | 100 | console.log("Recording successfully saved!"); 101 | } catch (e) { 102 | console.error(e); 103 | 104 | await removeFile(harPath); 105 | } 106 | 107 | return requests; 108 | }; 109 | -------------------------------------------------------------------------------- /src/use-network-record-mocks.ts: -------------------------------------------------------------------------------- 1 | import { Page } from "@playwright/test"; 2 | import fs from "fs"; 3 | 4 | import { RecordRequest } from "./models"; 5 | import { readHarFile, recordHar } from "./recorder"; 6 | import { getCallerFile, mockRequests, readFile, writeFile } from "./utils"; 7 | 8 | const mergeOverriddenResponses = ( 9 | override: { [key: string]: any }, 10 | requests: RecordRequest[] 11 | ): RecordRequest[] => { 12 | return requests.map((r) => ({ 13 | ...r, 14 | response: override[r.url] || r.response, 15 | })); 16 | }; 17 | 18 | /** 19 | * 20 | * @param identifier For when you need to have more than one Mock version for a single .spec, it will look for a file containing such identifier (e.g. for test.specs.ts, and identifier "test2", it will look for ``test.spec.test2.mocks.json``). 21 | * @param recordRoute When recording a new network mock file, it will use this path to open the new page. 22 | * @param logRecording When recording a new network mock file, enables console logging of every xhr request happening. 23 | * @param overrideResponses To use other values instead of the ones recorded for given tests. 24 | * 25 | * ```e.g. { ["/url_to_override"]: myCustomMockData }``` 26 | * @returns 27 | */ 28 | export const useNetworkRecordMocks = async ( 29 | page: Page, 30 | configs: { 31 | identifier?: string; 32 | recordRoute?: string; 33 | logRecording?: boolean; 34 | overrideResponses?: { [key: string]: any }; 35 | } = {} 36 | ): Promise => { 37 | const { identifier, recordRoute, logRecording, overrideResponses } = 38 | configs || {}; 39 | 40 | const basePath = `${getCallerFile().replace(".ts", "").replace(".js", "")}${ 41 | identifier ? `.${identifier}` : "" 42 | }`; 43 | 44 | const path = `${basePath}.mocks.json`; 45 | 46 | let requests: RecordRequest[] = []; 47 | 48 | if (fs.existsSync(path)) { 49 | console.log(`Using "${path}" for network request mocks.`); 50 | requests = await readFile(path); 51 | } else if (fs.existsSync(`${basePath}.har`)) { 52 | console.log(`A HAR file was found for "${basePath}", creating a mock file and using it.`); 53 | 54 | requests = await readHarFile(`${basePath}.har`, recordRoute); 55 | await writeFile(path, requests); 56 | } else { 57 | console.log( 58 | `Mocks file not found${ 59 | identifier ? ` for ${identifier}` : "" 60 | }, recording a new one!` 61 | ); 62 | 63 | requests = await recordHar(recordRoute, path, logRecording); 64 | } 65 | 66 | if (!!overrideResponses) { 67 | requests = mergeOverriddenResponses(overrideResponses, requests); 68 | } 69 | 70 | await mockRequests(requests, page); 71 | 72 | return requests; 73 | }; 74 | -------------------------------------------------------------------------------- /src/utils/file-utils.ts: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import url from "url"; 3 | import { RecordRequest } from "../models"; 4 | 5 | export const writeFile = ( 6 | filePath: string, 7 | requests: RecordRequest[] 8 | ): Promise => { 9 | return new Promise((resolve, reject) => { 10 | fs.writeFile(filePath, JSON.stringify({ requests }, null, 2), (err) => { 11 | if (err) reject(err); 12 | else resolve(); 13 | }); 14 | }); 15 | }; 16 | 17 | export const removeFile = (filePath: string): Promise => { 18 | return new Promise((resolve, reject) => { 19 | fs.unlink(filePath, (err) => { 20 | if (err) reject(err); 21 | else resolve(); 22 | }); 23 | }); 24 | }; 25 | 26 | export const readFile = (filePath: string): Promise => { 27 | return new Promise((resolve, reject) => { 28 | fs.readFile(filePath, (err, data) => { 29 | if (err) reject(err); 30 | else { 31 | try { 32 | const requests = JSON.parse(data.toString()).requests; 33 | resolve(requests); 34 | } catch (e) { 35 | reject(e); 36 | } 37 | } 38 | }); 39 | }); 40 | }; 41 | 42 | const sleep = (ms: number): Promise => { 43 | return new Promise((resolve) => setTimeout(resolve, ms)); 44 | }; 45 | 46 | export const waitForFileExists = async ( 47 | filePath: string, 48 | currentTime = 0, 49 | timeout = 10000 50 | ): Promise => { 51 | if (fs.existsSync(filePath)) return true; 52 | if (currentTime === timeout) return false; 53 | 54 | await sleep(1000); 55 | 56 | return await waitForFileExists(filePath, currentTime + 1000, timeout); 57 | }; 58 | 59 | export const getCallerFile = (): string => { 60 | const err = new Error(); 61 | Error.prepareStackTrace = (_, stack) => stack; 62 | const stack = err.stack as any; 63 | Error.prepareStackTrace = undefined; 64 | 65 | const callerFile = stack 66 | .map((s) => s.getFileName()) 67 | .filter((s) => s && !s.includes("node_modules") && !s.includes("internal")) 68 | .pop(); 69 | 70 | const isFileUrl = callerFile.includes("file:"); 71 | const callerFilePath = isFileUrl ? url.fileURLToPath(callerFile) : callerFile; 72 | 73 | return callerFilePath; 74 | }; 75 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './file-utils'; 2 | export * from './requests-utils'; 3 | -------------------------------------------------------------------------------- /src/utils/requests-utils.ts: -------------------------------------------------------------------------------- 1 | import { Page, Request, Response } from '@playwright/test'; 2 | 3 | import { RecordRequest } from '../models'; 4 | 5 | export const mockRequests = async (data: RecordRequest[], page: Page): Promise => { 6 | await Promise.all( 7 | data.map(async (request) => { 8 | await mockRouteResponse(page, `**${request.url}`, request.response); 9 | }), 10 | ); 11 | }; 12 | 13 | export const mockRouteResponse = async ( 14 | page: Page, 15 | url: string, 16 | mock: { [key: string]: any }, 17 | status = 200, 18 | headers = { 'access-control-allow-origin': '*' }, 19 | ): Promise => { 20 | await page.route(url, (route) => 21 | route.fulfill({ 22 | headers, 23 | status, 24 | body: JSON.stringify(mock), 25 | }), 26 | ); 27 | }; 28 | 29 | export const endpointOfUrl = (route: string): string => { 30 | const routeFrag = route.replace('https://', ''); 31 | return routeFrag.substring(routeFrag.indexOf('/')); 32 | }; 33 | 34 | export const setHttpLogs = (page: Page): void => { 35 | page.on('request', (request: Request) => { 36 | if (request.resourceType() === 'xhr') { 37 | console.log('>>', endpointOfUrl(request.url())); 38 | console.dir(request.postData(), { depth: null }); 39 | } 40 | }); 41 | 42 | page.on('response', async (response: Response) => { 43 | if (response.request().resourceType() === 'xhr') { 44 | console.log('<<', endpointOfUrl(response.url())); 45 | console.dir(await response.json(), { depth: null }); 46 | } 47 | }); 48 | }; 49 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "skipLibCheck": true, 5 | "esModuleInterop": true, 6 | "allowSyntheticDefaultImports": true, 7 | "strict": false, 8 | "forceConsistentCasingInFileNames": true, 9 | "noFallthroughCasesInSwitch": true, 10 | "module": "esnext", 11 | "moduleResolution": "node", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noImplicitAny": false, 15 | 16 | "declaration": true, 17 | "declarationDir": "dist", 18 | "noEmit": false, 19 | "declarationMap": true, 20 | "sourceMap": true, 21 | "allowUmdGlobalAccess": true, 22 | "preserveConstEnums": true, 23 | "target": "ES6", 24 | "lib": ["es6", "dom", "es2016", "es2017"], 25 | 26 | "baseUrl": "./src/" 27 | }, 28 | "include": [ 29 | "src", 30 | ], 31 | "exclude": [ 32 | "node_modules", 33 | "dist" 34 | ] 35 | } 36 | --------------------------------------------------------------------------------