├── .editorconfig ├── .github └── workflows │ └── test.yml ├── .gitignore ├── .npmignore ├── .prettierignore ├── LICENSE ├── README.md ├── Taskfile.yml ├── example └── package.json ├── package.json ├── prettier.config.js ├── src ├── actions │ ├── install.js │ ├── install.spec.js │ ├── uninstall.js │ └── uninstall.spec.js ├── assets │ ├── binary.js │ ├── binary.spec.js │ ├── move.js │ ├── move.spec.js │ ├── untar.js │ ├── untar.spec.js │ ├── unzip.js │ └── unzip.spec.js ├── cli.js ├── cli.spec.js ├── common.js ├── common.spec.js └── index.js └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | insert_final_newline = true 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | indent_style = space 10 | indent_size = 2 11 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | pull_request: 5 | push: 6 | tags: 7 | - v* 8 | branches: 9 | - main 10 | 11 | jobs: 12 | test: 13 | name: Test 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v3 17 | 18 | - uses: actions/setup-node@v3 19 | with: 20 | node-version: 18.x 21 | cache: yarn 22 | 23 | - name: Install dependencies 24 | run: yarn install --frozen-lockfile 25 | 26 | - name: Tun Tests 27 | run: yarn run test 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | coverage 4 | bin 5 | .task 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | src 4 | __test__ 5 | example/ 6 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | /bin 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Go NPM 2 | 3 | ### (@go-task): MODIFICATIONS FROM gzuidhof/go-npm FORK 4 | 5 | * Added `{{archive_ext}}` to recognize `.zip` packages on Windows and `.tar.gz` on macOS and Linux. 6 | * Fixed error when trying to remove the binary from a previous installation. 7 | * Add support for local npm prefix ([#1](https://github.com/go-task/go-npm/pull/1)). 8 | * Added support for [pnpm](https://pnpm.io/) ([#3](https://github.com/go-task/go-npm/pull/3)). 9 | * Fixed installation path on Windows ([#4](https://github.com/go-task/go-npm/issues/4), [#5](https://github.com/go-task/go-npm/pull/5)). 10 | * Fixed installation path in newer Node versions ([go-task/task#1190](https://github.com/go-task/task/issues/1190), [#8](https://github.com/go-task/go-npm/pull/8)). 11 | * Migrate from `unzipper` to `adm-zip` to fix ZIP extraction bugs ([#7](https://github.com/go-task/go-npm/issues/7), [#9](https://github.com/go-task/go-npm/pull/9)). 12 | 13 | ### (@gzuidhof): MODIFICATIONS FROM BASE `go-npm` PACKAGE 14 | * Support for zip and non-compressed binaries. 15 | * Added support for `arm64` architecture. 16 | * Fix for use on Windows platform (the binary would get placed in the wrong place for consumers). 17 | * Shipped as a bundle using `esbuild`, removing 70 packages of dependencies (including huge things like Babel). Now your users will only have to download one additional package (`@gzuidhof/go-npm`). 18 | 19 | ### Distribute cross-platform Go binaries via NPM 20 | 21 | Applications written in Golang are portable - you can easily cross-compile binaries that work on Windows, Mac, and Linux. But how do you distribute the binaries to customers? When you publish new releases, how do they update the binary? 22 | 23 | **Use NPM to distribute cross-platform Go binaries** 24 | 25 | ## Kidding me! Why NPM? 26 | * **Cross-platform**: NPM is the only popular package manager that works cross-platform. 27 | * **Lower barier to entry**: Most developers have NPM installed already. 28 | * **Pain free publishing**: It just takes one command to publish - `npm publish` 29 | * **Dead simple install & update story**: `npm install/update -g your-awesome-app` 30 | * **Adds $PATH**: NPM will automatically add your binary location to $PATH and generate .cmd file for Windows. Your app just works after installation! 31 | 32 | ## Okay, tell me how? 33 | ### 1. Publish your binaries 34 | Setup your Go application to compile and publish binaries to a file server. This could be Github Releases or Amazon S3 or even Dropbox. All you need is a link. 35 | 36 | I like to use [GoReleaser](https://github.com/goreleaser/goreleaser) to setup by release process. You create a simple YAML configuration file like this and run `goreleaser` CLI to publish binaries for various platform/architecture combination to Github: 37 | 38 | ``` 39 | # .goreleaser.yml 40 | # Build customization 41 | builds: 42 | - binary: drum-roll 43 | goos: 44 | - windows 45 | - darwin 46 | - linux 47 | goarch: 48 | - amd64 49 | ``` 50 | 51 | `go-npm` will pull the appropriate binary for the platform & architecture where the package is being installed. 52 | 53 | ### 2. Create a package.json file for your NPM app 54 | To publish to NPM, you need to create a `package.json` file. You give your application a name, link to Readme, Github repository etc, and more importantly add `go-npm` as a dependency. You can create this file in an empty directory in your project or in a separate Git repository altogether. It is your choice. 55 | 56 | **Create package.json** 57 | 58 | `$ npm init` 59 | 60 | Answer the questions to create an initial package.json file 61 | 62 | **Add go-npm dependency** 63 | 64 | From the directory containing package.json file, do 65 | 66 | `$ npm install @go-task/go-npm --save` 67 | 68 | This will install go-npm under to your package.json file. It will also create a `node_modules` directory where the `go-npm` package is downloaded. You don't need this directory since you are only going to publish the module and not consume it yourself. Let's go ahead and delete it. 69 | 70 | `$ rm -r node_modules` 71 | 72 | **Add postinstall and preuninstall scripts** 73 | Here is the magic: You ask to run `go-npm install` after it completes installing your package. This will pull down binaries from Github or Amazon S3 and install in NPM's `bin` directory. Binaries under bin directory are immediately available for use in your Terminal. 74 | 75 | Edit `package.json` file and add the following: 76 | ``` 77 | "scripts": { 78 | "postinstall": "go-npm install", 79 | "preuninstall": "go-npm uninstall", 80 | } 81 | ``` 82 | 83 | `go-npm uninstall` simply deletes the binary from `bin` directory before NPM uninstalls your package. 84 | 85 | **Configure your binary path** 86 | 87 | You need to tell `go-npm` where to download the binaries from, and where to install them. Edit `package.json` file and add the following configuration. 88 | 89 | ``` 90 | "goBinary": { 91 | "name": "command-name", 92 | "path": "./bin", 93 | "url": "https://github.com/user/my-go-package/releases/download/v{{version}}/myGoPackage_{{version}}_{{platform}}_{{arch}}.tar.gz" 94 | ``` 95 | 96 | * *name*: Name of the command users will use to run your binary. 97 | * *path*: Temporary path where binaries will be downloaded to 98 | * *url*: HTTP Web server where binaries are hosted. 99 | 100 | Following variables are available to customize the URL: 101 | * `{{version}}`: Version number read from `package.json` file. When you publish your package to NPM, it will use this version number. Ex: 0.0.1 102 | * `{{platform}}`: `$GOOS` value for the platform 103 | * `{{arch}}`: `$GOARCH` value for the architecture 104 | * `{{win_ext}}`: optional `.exe` extension for windows assets. 105 | * `{{archive_ext}}`: outputs `.zip` on Windows or `.tar.gz` on macOS and Linux. 106 | 107 | If you use `goreleaser` to publish your modules, it will automatically set the right architecture & platform in your URL. 108 | 109 | **Publish to NPM** 110 | 111 | All that's left now is publish to NPM. As I promised before, just one command 112 | 113 | `$ npm publish` 114 | 115 | ### 3. Distribute to users 116 | 117 | To install: 118 | 119 | `npm install -g your-app-name` 120 | 121 | To Update: 122 | 123 | `npm update -g your-app-name` 124 | 125 | 126 | --- 127 | 128 | With ❤️ to the community by [Sanath Kumar Ramesh](http://twitter.com/sanathkr_) 129 | -------------------------------------------------------------------------------- /Taskfile.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | tasks: 4 | default: 5 | cmds: 6 | - task: test 7 | 8 | yarn:install: 9 | desc: Runs yarn install 10 | cmds: 11 | - yarn install 12 | sources: 13 | - package.json 14 | - yarn.lock 15 | 16 | build: 17 | desc: Build project using esbuild 18 | deps: [yarn:install] 19 | cmds: 20 | - yarn run build 21 | sources: 22 | - ./src/**/*.js 23 | - package.json 24 | - yarn.lock 25 | generates: 26 | - bin/index.js 27 | 28 | test: 29 | desc: Run tests 30 | deps: [yarn:install] 31 | cmds: 32 | - yarn run test 33 | 34 | publish: 35 | desc: Publish release to npm 36 | deps: [build] 37 | cmds: 38 | - yarn publish --access=public 39 | 40 | clean: 41 | desc: Clean build files 42 | cmds: 43 | - rm -rf bin/ 44 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "app", 3 | "version": "0.0.1", 4 | "description": "Example App", 5 | "main": "index.js", 6 | "scripts": { 7 | "postinstall": "go-npm install", 8 | "preuninstall": "go-npm uninstall" 9 | }, 10 | "goBinary": { 11 | "name": "myBinaryName", 12 | "path": "./bin", 13 | "url": "https://github.com/user/myrepo/releases/download/v{{version}}/myBinaryName{{platform}}_{{arch}}.tar.gz" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@go-task/go-npm", 3 | "version": "0.2.0", 4 | "description": "Distribute and install Go binaries via NPM", 5 | "main": "index.js", 6 | "bin": { 7 | "go-npm": "./bin/index.js" 8 | }, 9 | "scripts": { 10 | "test": "jest --silent", 11 | "build": "rm -rf ./bin && esbuild --bundle src/index.js --outfile=\"./bin/index.js\" --platform=node --target=es6 --minify-whitespace", 12 | "prepublishOnly": "npm i && npm run build" 13 | }, 14 | "author": "Andrey Nering", 15 | "license": "Apache-2.0", 16 | "repository": { 17 | "type": "git", 18 | "url": "https://github.com/go-task/go-npm.git" 19 | }, 20 | "homepage": "https://github.com/go-task/go-npm", 21 | "devDependencies": { 22 | "adm-zip": "0.5.10", 23 | "esbuild": "^0.12.17", 24 | "jest": "29.5.0", 25 | "mkdirp": "^1.0.4", 26 | "mock-fs": "^5.2.0", 27 | "nock": "^13.3.1", 28 | "request": "^2.88.2", 29 | "tar": "^2.2.2", 30 | "used-pm": "^1.0.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | trailingComma: 'none', 3 | singleQuote: true 4 | }; 5 | -------------------------------------------------------------------------------- /src/actions/install.js: -------------------------------------------------------------------------------- 1 | const mkdirp = require('mkdirp'); 2 | const request = require('request'); 3 | const { parsePackageJson } = require('../common'); 4 | const verifyAndPlaceBinary = require('../assets/binary'); 5 | 6 | /** 7 | * Select a resource handling strategy based on given options. 8 | */ 9 | function getStrategy({ url }) { 10 | if (url.endsWith('.tar.gz')) { 11 | return require('../assets/untar'); 12 | } else if (url.endsWith('.zip')) { 13 | return require('../assets/unzip'); 14 | } else { 15 | return require('../assets/move'); 16 | } 17 | } 18 | 19 | /** 20 | * Reads the configuration from application's package.json, 21 | * validates properties, downloads the binary, untars, and stores at 22 | * ./bin in the package's root. NPM already has support to install binary files 23 | * specific locations when invoked with "npm install -g" 24 | * 25 | * See: https://docs.npmjs.com/files/package.json#bin 26 | */ 27 | function install(callback) { 28 | const opts = parsePackageJson(); 29 | if (!opts) return callback('Invalid inputs'); 30 | 31 | mkdirp.sync(opts.binPath); 32 | 33 | console.log('Downloading from URL: ' + opts.url); 34 | 35 | const req = request({ uri: opts.url }); 36 | 37 | req.on('error', () => callback('Error downloading from URL: ' + opts.url)); 38 | req.on('response', (res) => { 39 | if (res.statusCode !== 200) 40 | return callback( 41 | 'Error downloading binary. HTTP Status Code: ' + res.statusCode 42 | ); 43 | 44 | const strategy = getStrategy(opts); 45 | 46 | strategy({ 47 | opts, 48 | req, 49 | onSuccess: () => 50 | verifyAndPlaceBinary(opts.binName, opts.binPath, callback), 51 | onError: callback 52 | }); 53 | }); 54 | } 55 | 56 | module.exports = install; 57 | -------------------------------------------------------------------------------- /src/actions/install.spec.js: -------------------------------------------------------------------------------- 1 | const { EventEmitter } = require('events'); 2 | const request = require('request'); 3 | const common = require('../common'); 4 | const install = require('./install'); 5 | const move = require('../assets/move'); 6 | const untar = require('../assets/untar'); 7 | const unzip = require('../assets/unzip'); 8 | const verifyAndPlaceCallback = require('../assets/binary'); 9 | 10 | jest.mock('fs'); 11 | jest.mock('mkdirp'); 12 | jest.mock('request'); 13 | jest.mock('../../src/common'); 14 | jest.mock('../../src/assets/move'); 15 | jest.mock('../../src/assets/untar'); 16 | jest.mock('../../src/assets/unzip'); 17 | jest.mock('../../src/assets/binary'); 18 | 19 | describe('install()', () => { 20 | let callback, requestEvents; 21 | 22 | beforeEach(() => { 23 | callback = jest.fn(); 24 | 25 | requestEvents = new EventEmitter(); 26 | }); 27 | 28 | it('should call callback with error if package.json did not return value', () => { 29 | common.parsePackageJson.mockReturnValueOnce(undefined); 30 | 31 | install(callback); 32 | 33 | expect(callback).toHaveBeenCalledWith('Invalid inputs'); 34 | }); 35 | 36 | it('should call callback with error on request error', () => { 37 | request.mockReturnValueOnce(requestEvents); 38 | common.parsePackageJson.mockReturnValueOnce({ url: 'http://url' }); 39 | 40 | install(callback); 41 | 42 | requestEvents.emit('error'); 43 | 44 | expect(callback).toHaveBeenCalledWith( 45 | 'Error downloading from URL: http://url' 46 | ); 47 | }); 48 | 49 | it('should call callback with error on response with status code different than 200', () => { 50 | request.mockReturnValueOnce(requestEvents); 51 | common.parsePackageJson.mockReturnValueOnce({ url: 'http://url' }); 52 | 53 | install(callback); 54 | 55 | requestEvents.emit('response', { statusCode: 404 }); 56 | 57 | expect(callback).toHaveBeenCalledWith( 58 | 'Error downloading binary. HTTP Status Code: 404' 59 | ); 60 | }); 61 | 62 | it('should pick move strategy if url is an uncompressed binary', () => { 63 | request.mockReturnValueOnce(requestEvents); 64 | common.parsePackageJson.mockReturnValueOnce({ url: 'http://url' }); 65 | 66 | install(callback); 67 | 68 | requestEvents.emit('response', { statusCode: 200 }); 69 | 70 | expect(move).toHaveBeenCalled(); 71 | }); 72 | 73 | it('should pick untar strategy if url ends with .tar.gz', () => { 74 | request.mockReturnValueOnce(requestEvents); 75 | common.parsePackageJson.mockReturnValueOnce({ url: 'http://url.tar.gz' }); 76 | 77 | install(callback); 78 | 79 | requestEvents.emit('response', { statusCode: 200 }); 80 | 81 | expect(untar).toHaveBeenCalled(); 82 | }); 83 | 84 | it('should pick unzip strategy if url ends with .zip', () => { 85 | request.mockReturnValueOnce(requestEvents); 86 | common.parsePackageJson.mockReturnValueOnce({ url: 'http://url.zip' }); 87 | 88 | install(callback); 89 | 90 | requestEvents.emit('response', { statusCode: 200 }); 91 | 92 | expect(unzip).toHaveBeenCalled(); 93 | }); 94 | 95 | it('should call verifyAndPlaceCallback on success', () => { 96 | request.mockReturnValueOnce(requestEvents); 97 | common.parsePackageJson.mockReturnValueOnce({ 98 | url: 'http://url', 99 | binName: 'command', 100 | binPath: './bin' 101 | }); 102 | move.mockImplementationOnce(({ onSuccess }) => onSuccess()); 103 | 104 | install(callback); 105 | 106 | requestEvents.emit('response', { statusCode: 200 }); 107 | 108 | expect(verifyAndPlaceCallback).toHaveBeenCalledWith( 109 | 'command', 110 | './bin', 111 | callback 112 | ); 113 | }); 114 | }); 115 | -------------------------------------------------------------------------------- /src/actions/uninstall.js: -------------------------------------------------------------------------------- 1 | const { join } = require('path'); 2 | const { unlinkSync } = require('fs'); 3 | const { parsePackageJson, getInstallationPath } = require('../common'); 4 | 5 | function uninstall(callback) { 6 | const { binName } = parsePackageJson(); 7 | 8 | getInstallationPath((err, installationPath) => { 9 | if (err) { 10 | return callback(err); 11 | } 12 | 13 | try { 14 | unlinkSync(join(installationPath, binName)); 15 | } catch (ex) { 16 | // Ignore errors when deleting the file. 17 | } 18 | 19 | return callback(null); 20 | }); 21 | } 22 | 23 | module.exports = uninstall; 24 | -------------------------------------------------------------------------------- /src/actions/uninstall.spec.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const common = require('../../src/common'); 3 | const path = require('path'); 4 | const uninstall = require('../../src/actions/uninstall'); 5 | 6 | jest.mock('fs'); 7 | jest.mock('../../src/common'); 8 | 9 | describe('uninstall()', () => { 10 | let callback; 11 | 12 | beforeEach(() => { 13 | callback = jest.fn(); 14 | 15 | common.parsePackageJson.mockReturnValueOnce({ binName: 'command' }); 16 | }); 17 | 18 | it('should call callback with error if binary not found', () => { 19 | const error = new Error(); 20 | 21 | common.getInstallationPath.mockImplementationOnce((cb) => cb(error)); 22 | 23 | uninstall(callback); 24 | 25 | expect(callback).toHaveBeenCalledWith(error); 26 | }); 27 | 28 | it('should call unlinkSync with binary and installation path', () => { 29 | common.getInstallationPath.mockImplementationOnce((cb) => 30 | cb(null, './bin') 31 | ); 32 | 33 | uninstall(callback); 34 | 35 | expect(fs.unlinkSync).toHaveBeenCalledWith(path.join('bin', 'command')); 36 | }); 37 | 38 | it('should call callback on success', () => { 39 | common.getInstallationPath.mockImplementationOnce((cb) => 40 | cb(null, './bin') 41 | ); 42 | 43 | uninstall(callback); 44 | 45 | expect(callback).toHaveBeenCalledWith(null); 46 | }); 47 | 48 | it('should call callback regardless of errors on unlink', () => { 49 | common.getInstallationPath.mockImplementationOnce((cb) => 50 | cb(null, './bin') 51 | ); 52 | 53 | fs.unlinkSync.mockImplementationOnce(() => { 54 | throw new Error(); 55 | }); 56 | 57 | uninstall(callback); 58 | 59 | expect(callback).toHaveBeenCalledWith(null); 60 | }); 61 | }); 62 | -------------------------------------------------------------------------------- /src/assets/binary.js: -------------------------------------------------------------------------------- 1 | const { join } = require('path'); 2 | const { chmodSync, copyFileSync, existsSync, unlinkSync } = require('fs'); 3 | const { getInstallationPath } = require('../common'); 4 | 5 | function verifyAndPlaceBinary(binName, binPath, callback) { 6 | if (!existsSync(join(binPath, binName))) { 7 | return callback( 8 | `Downloaded binary does not contain the binary specified in configuration - ${binName}` 9 | ); 10 | } 11 | 12 | getInstallationPath((err, installationPath) => { 13 | if (err) { 14 | return callback(err); 15 | } 16 | 17 | // Move the binary file and make sure it is executable 18 | copyFileSync(join(binPath, binName), join(installationPath, binName)); 19 | unlinkSync(join(binPath, binName)); 20 | chmodSync(join(installationPath, binName), '755'); 21 | 22 | console.log('Placed binary on', join(installationPath, binName)); 23 | 24 | callback(null); 25 | }); 26 | } 27 | 28 | module.exports = verifyAndPlaceBinary; 29 | -------------------------------------------------------------------------------- /src/assets/binary.spec.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const common = require('../common'); 3 | const verifyAndPlaceBinary = require('./binary'); 4 | const path = require('path'); 5 | 6 | jest.mock('fs'); 7 | jest.mock('../../src/common'); 8 | 9 | describe('verifyAndPlaceBinary()', () => { 10 | let callback; 11 | 12 | beforeEach(() => { 13 | callback = jest.fn(); 14 | }); 15 | 16 | it('should call callback with error if binary downloaded differs from config', () => { 17 | fs.existsSync.mockReturnValueOnce(false); 18 | 19 | verifyAndPlaceBinary('command', './bin', callback); 20 | 21 | expect(callback).toHaveBeenCalledWith( 22 | 'Downloaded binary does not contain the binary specified in configuration - command' 23 | ); 24 | }); 25 | 26 | it('should call callback with error if installation path cannot be found', () => { 27 | const error = new Error(); 28 | 29 | fs.existsSync.mockReturnValueOnce(true); 30 | common.getInstallationPath.mockImplementationOnce((cb) => cb(error)); 31 | 32 | verifyAndPlaceBinary('command', './bin', callback); 33 | 34 | expect(callback).toHaveBeenCalledWith(error); 35 | }); 36 | 37 | it('should call callback with null on success', () => { 38 | fs.existsSync.mockReturnValueOnce(true); 39 | common.getInstallationPath.mockImplementationOnce((cb) => 40 | cb(null, path.sep + path.join('usr', 'local', 'bin')) 41 | ); 42 | 43 | verifyAndPlaceBinary('command', './bin', callback); 44 | 45 | expect(callback).toHaveBeenCalledWith(null); 46 | }); 47 | 48 | it('should move the binary to installation directory', () => { 49 | fs.existsSync.mockReturnValueOnce(true); 50 | common.getInstallationPath.mockImplementationOnce((cb) => 51 | cb(null, path.sep + path.join('usr', 'local', 'bin')) 52 | ); 53 | 54 | verifyAndPlaceBinary('command', './bin', callback); 55 | 56 | expect(fs.copyFileSync).toHaveBeenCalledWith( 57 | path.join('bin', 'command'), 58 | path.sep + path.join('usr', 'local', 'bin', 'command') 59 | ); 60 | }); 61 | }); 62 | -------------------------------------------------------------------------------- /src/assets/move.js: -------------------------------------------------------------------------------- 1 | const { join } = require('path'); 2 | const { createWriteStream } = require('fs'); 3 | 4 | /** 5 | * Move strategy for binary resources without compression. 6 | */ 7 | function move({ opts, req, onSuccess, onError }) { 8 | const stream = createWriteStream(join(opts.binPath, opts.binName)); 9 | 10 | stream.on('error', onError); 11 | stream.on('close', onSuccess); 12 | 13 | req.pipe(stream); 14 | } 15 | 16 | module.exports = move; 17 | -------------------------------------------------------------------------------- /src/assets/move.spec.js: -------------------------------------------------------------------------------- 1 | const { EventEmitter } = require('events'); 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | const move = require('../../src/assets/move'); 5 | 6 | jest.mock('fs'); 7 | 8 | describe('move()', () => { 9 | let streamEvents, pipe, onSuccess, onError; 10 | 11 | beforeEach(() => { 12 | streamEvents = new EventEmitter(); 13 | 14 | pipe = jest.fn(); 15 | onSuccess = jest.fn(); 16 | onError = jest.fn(); 17 | createWriteStream = jest.fn(); 18 | 19 | fs.createWriteStream.mockReturnValueOnce(streamEvents); 20 | }); 21 | 22 | it('should download resource to given binPath', () => { 23 | move({ 24 | opts: { binPath: './bin', binName: 'command' }, 25 | req: { pipe }, 26 | onSuccess, 27 | onError 28 | }); 29 | 30 | expect(fs.createWriteStream).toHaveBeenCalledWith( 31 | path.join('bin', 'command') 32 | ); 33 | }); 34 | 35 | it('should call onSuccess on stream closed', () => { 36 | move({ 37 | opts: { binPath: './bin', binName: 'command' }, 38 | req: { pipe }, 39 | onSuccess, 40 | onError 41 | }); 42 | 43 | streamEvents.emit('close'); 44 | 45 | expect(onSuccess).toHaveBeenCalled(); 46 | }); 47 | 48 | it('should call onError with error on write stream error', () => { 49 | const error = new Error(); 50 | 51 | move({ 52 | opts: { binPath: './bin', binName: 'command' }, 53 | req: { pipe }, 54 | onSuccess, 55 | onError 56 | }); 57 | 58 | streamEvents.emit('error', error); 59 | 60 | expect(onError).toHaveBeenCalledWith(error); 61 | }); 62 | }); 63 | -------------------------------------------------------------------------------- /src/assets/untar.js: -------------------------------------------------------------------------------- 1 | const tar = require('tar'); 2 | const zlib = require('zlib'); 3 | 4 | /** 5 | * Unzip strategy for resources using `.tar.gz`. 6 | * 7 | * First we will Un-GZip, then we will untar. So once untar is completed, 8 | * binary is downloaded into `binPath`. Verify the binary and call it good. 9 | */ 10 | function untar({ opts, req, onSuccess, onError }) { 11 | const ungz = zlib.createGunzip(); 12 | const untar = tar.Extract({ path: opts.binPath }); 13 | 14 | ungz.on('error', onError); 15 | untar.on('error', onError); 16 | untar.on('end', onSuccess); 17 | 18 | req.pipe(ungz).pipe(untar); 19 | } 20 | 21 | module.exports = untar; 22 | -------------------------------------------------------------------------------- /src/assets/untar.spec.js: -------------------------------------------------------------------------------- 1 | const { EventEmitter } = require('events'); 2 | const zlib = require('zlib'); 3 | const tar = require('tar'); 4 | const untar = require('../../src/assets/untar'); 5 | 6 | jest.mock('zlib'); 7 | jest.mock('tar', () => ({ 8 | Extract: jest.fn() 9 | })); 10 | 11 | describe('untar()', () => { 12 | let ungzEvents, untarEvents, pipe, onSuccess, onError; 13 | 14 | beforeEach(() => { 15 | ungzEvents = new EventEmitter(); 16 | untarEvents = new EventEmitter(); 17 | 18 | pipe = jest.fn(); 19 | onSuccess = jest.fn(); 20 | onError = jest.fn(); 21 | 22 | pipe.mockReturnValueOnce({ pipe }); 23 | tar.Extract.mockReturnValueOnce(untarEvents); 24 | zlib.createGunzip.mockReturnValueOnce(ungzEvents); 25 | }); 26 | 27 | it('should download resource and untar to given binPath', () => { 28 | untar({ 29 | opts: { binPath: './bin', binName: 'command' }, 30 | req: { pipe }, 31 | onSuccess, 32 | onError 33 | }); 34 | 35 | expect(tar.Extract).toHaveBeenCalledWith({ path: './bin' }); 36 | }); 37 | 38 | it('should call onSuccess on untar end', () => { 39 | untar({ 40 | opts: { binPath: './bin', binName: 'command' }, 41 | req: { pipe }, 42 | onSuccess, 43 | onError 44 | }); 45 | 46 | untarEvents.emit('end'); 47 | 48 | expect(onSuccess).toHaveBeenCalled(); 49 | }); 50 | 51 | it('should call onError with error on ungz error', () => { 52 | const error = new Error(); 53 | 54 | untar({ 55 | opts: { binPath: './bin', binName: 'command' }, 56 | req: { pipe }, 57 | onSuccess, 58 | onError 59 | }); 60 | 61 | ungzEvents.emit('error', error); 62 | 63 | expect(onError).toHaveBeenCalledWith(error); 64 | }); 65 | 66 | it('should call onError with error on untar error', () => { 67 | const error = new Error(); 68 | 69 | untar({ 70 | opts: { binPath: './bin', binName: 'command' }, 71 | req: { pipe }, 72 | onSuccess, 73 | onError 74 | }); 75 | 76 | untarEvents.emit('error', error); 77 | 78 | expect(onError).toHaveBeenCalledWith(error); 79 | }); 80 | }); 81 | -------------------------------------------------------------------------------- /src/assets/unzip.js: -------------------------------------------------------------------------------- 1 | const buffer = require('buffer'); 2 | const fs = require('fs').promises; 3 | const { join } = require('path'); 4 | const { Writable } = require('stream'); 5 | 6 | const AdmZip = require('adm-zip'); 7 | 8 | /** 9 | * Reads the response body from the `Request` object and returns a `Buffer` object. 10 | * Preallocate memory for response body length based on HTTP Content-Length header, if available. 11 | * @param {import('request').Request} req 12 | * @returns {Promise} 13 | * 14 | * Note: This logic loads the entire contents of the ZIP file being downloaded into memory. 15 | * This is not recommended as it consumes a lot of memory. Normally it should be written to a temporary file. 16 | * However, the logic of adm-zip is similar: it loads the entire contents of the ZIP file into memory. 17 | * See: https://github.com/cthackers/adm-zip/issues/417 18 | * https://github.com/cthackers/adm-zip/blob/v0.5.10/adm-zip.js#L55 19 | * So even if we write the zip to a temporary file, it does not change the behavior 20 | * of loading the entire contents of the ZIP file into memory. 21 | * In fact, more memory is used to read the file. 22 | * For this reason, we use download logic that loads the entire contents of the ZIP file into memory. 23 | */ 24 | const getBody = (req) => 25 | new Promise((resolve, reject) => { 26 | /** @type {{ readonly buf: Buffer, readonly reservedByteLength: number, updatedByteLength: number } | null | undefined} */ 27 | let reservedMemory; 28 | /** @type {Buffer[]} */ 29 | const chunkList = []; 30 | 31 | // If the Content-Length header is available, reserve the required amount of memory in advance. 32 | const contentLength = Number( 33 | req.response && req.response.headers['content-length'] 34 | ); 35 | if ( 36 | Number.isInteger(contentLength) && 37 | 0 < contentLength && 38 | contentLength <= buffer.constants.MAX_LENGTH 39 | ) { 40 | reservedMemory = { 41 | buf: Buffer.allocUnsafe(contentLength), 42 | reservedByteLength: contentLength, 43 | updatedByteLength: 0 44 | }; 45 | } 46 | 47 | const dest = new Writable({ 48 | write(chunk, encoding, done) { 49 | /** @type {Error | undefined} */ 50 | let error; 51 | try { 52 | // Convert chunks to Buffer if possible 53 | if (typeof chunk === 'string') { 54 | chunk = Buffer.from(chunk, encoding); 55 | } 56 | if (!Buffer.isBuffer(chunk)) return; 57 | 58 | // If the required memory is not allocated, add chunks to the `chunkList` 59 | if (!reservedMemory) { 60 | chunkList.push(chunk); 61 | return; 62 | } 63 | 64 | const newByteLength = 65 | reservedMemory.updatedByteLength + chunk.byteLength; 66 | if (newByteLength <= reservedMemory.reservedByteLength) { 67 | // If the byte length after writing is less than the reserved memory, write to it 68 | chunk.copy(reservedMemory.buf, reservedMemory.updatedByteLength); 69 | reservedMemory.updatedByteLength = newByteLength; 70 | return; 71 | } 72 | 73 | // If the byte length after writing is greater than the reserved memory 74 | // (i.e. the Content-Length header was less than the required length), 75 | // the reserved memory is added to `chunkList`, and subsequent chunks are also added to `chunkList` 76 | if (reservedMemory.updatedByteLength !== 0) { 77 | chunkList.push( 78 | // Slices only the written area from reserved memory 79 | // Note: Use the `.subarray()` method instead of the `.slice()` method, because `.slice()` always copies memory. 80 | reservedMemory.buf.subarray(0, reservedMemory.updatedByteLength) 81 | ); 82 | } 83 | reservedMemory = null; 84 | chunkList.push(chunk); 85 | } catch (err) { 86 | error = err; 87 | } finally { 88 | done(error); 89 | } 90 | } 91 | }); 92 | 93 | dest.on('error', reject); 94 | dest.on('finish', async () => { 95 | try { 96 | if (reservedMemory) { 97 | // If the chunk was written only to reserved memory 98 | // (i.e., the Content-Length header was equal to or greater than the required length), 99 | // use only the range written from here 100 | resolve( 101 | reservedMemory.buf.subarray(0, reservedMemory.updatedByteLength) 102 | ); 103 | } else if (chunkList.length === 1) { 104 | // The `Buffer.concat()` function will always copy the Buffer object. 105 | // However, if the length of the array is 1, there is no need to copy it. 106 | resolve(chunkList[0]); 107 | } else { 108 | resolve(Buffer.concat(chunkList)); 109 | } 110 | } catch (error) { 111 | reject(error); 112 | } 113 | }); 114 | req.pipe(dest); 115 | }); 116 | 117 | /** 118 | * Unzip strategy for resources using `.zip`. 119 | * 120 | * Once unzip is completed, binary is downloaded into `binPath`. 121 | * Verify the binary and call it good. 122 | */ 123 | function unzip({ opts, req, onSuccess, onError }) { 124 | getBody(req) 125 | .then(async (zipData) => { 126 | const zip = new AdmZip(zipData); 127 | 128 | // Extract only the specified binary. 129 | const entry = zip.getEntry(opts.binName); 130 | if (!entry || entry.isDirectory) { 131 | // Leave error handling to `src/assets/binary.js` if the specified binary does not exist 132 | onSuccess(); 133 | return; 134 | } 135 | 136 | // Note: The `zip.extractEntryTo()` function is not used because of its complicated behavior. 137 | const fileAttr = entry.header.fileAttr || 0o666; 138 | await fs.writeFile(join(opts.binPath, opts.binName), entry.getData(), { 139 | mode: fileAttr 140 | }); 141 | 142 | onSuccess(); 143 | }) 144 | .catch(onError); 145 | } 146 | 147 | module.exports = unzip; 148 | -------------------------------------------------------------------------------- /src/assets/unzip.spec.js: -------------------------------------------------------------------------------- 1 | const crypto = require('crypto'); 2 | const fs = require('fs'); 3 | const stream = require('stream'); 4 | 5 | const mockFs = require('mock-fs'); 6 | const nock = require('nock'); 7 | const request = require('request'); 8 | 9 | const unzip = require('../../src/assets/unzip'); 10 | 11 | // ZIP archive data of `command` file 12 | // generated by `head -c 2 /dev/urandom > ./command` command 13 | // and compressed by `zip ./test.zip ./command` command 14 | const TEST_ZIP = { 15 | data: Buffer.from( 16 | 'UEsDBAoAAAAAAOKAxFbxsdyoAgAAAAIAAAAHABwAY29tbWFuZFVUCQADGDh8ZBg4fGR1eAsAAQT1AQAABBQAAADazFBLAQIeAwoAAAAAAOKAxFbxsdyoAgAAAAIAAAAHABgAAAAAAAEAAACkgQAAAABjb21tYW5kVVQFAAMYOHxkdXgLAAEE9QEAAAQUAAAAUEsFBgAAAAABAAEATQAAAEMAAAAAAA', 17 | 'base64' 18 | ), 19 | sha256: { 20 | command: '4a553e10c72a1df61b3601a2c402808e21fe6028209d1e6acfce26d451d738e3' 21 | } 22 | }; 23 | 24 | class ChunkedDataReadable extends stream.Readable { 25 | /** 26 | * @param {Uint8Array} data 27 | * @param {number} [chunkSize] 28 | */ 29 | constructor(data, chunkSize) { 30 | super(); 31 | this._data = data; 32 | this._chunkSize = chunkSize; 33 | this._offset = 0; 34 | } 35 | 36 | /** 37 | * @param {number} size 38 | */ 39 | _read(size) { 40 | const chunkSize = this._chunkSize != null ? this._chunkSize : size; 41 | if (this._offset < this._data.length) { 42 | this.push(this._data.subarray(this._offset, (this._offset += chunkSize))); 43 | } else { 44 | this.push(null); 45 | } 46 | } 47 | } 48 | 49 | /** 50 | * Disable functions that write to stdout, such as `console.log()`, and do not print anything from them. 51 | * @param {() => void} cb 52 | */ 53 | function ignoreStdoutWrite(cb) { 54 | const originalWrite = process.stdout.write; 55 | process.stdout.write = (...args) => { 56 | for (const arg of args) { 57 | if (typeof arg === 'function') { 58 | arg(); 59 | break; 60 | } 61 | } 62 | return true; 63 | }; 64 | cb(); 65 | process.stdout.write = originalWrite; 66 | } 67 | 68 | /** 69 | * @param {string} algorithm 70 | * @param {string} filepath 71 | * @returns {Promise} 72 | */ 73 | function createFileHash(algorithm, filepath) { 74 | return new Promise((resolve, reject) => { 75 | const hash = crypto.createHash(algorithm); 76 | const fileStream = fs.createReadStream(filepath); 77 | fileStream.on('data', (chunk) => { 78 | hash.update(chunk); 79 | }); 80 | fileStream.on('end', () => { 81 | resolve(hash.digest('hex')); 82 | }); 83 | fileStream.on('error', reject); 84 | }); 85 | } 86 | 87 | /** 88 | * Create mock functions `onSuccess` and `onError`, and a Promise object to wait until one of them is called 89 | */ 90 | function createCallbacks() { 91 | // Note: If `Promise.withResolvers` becomes available in the future, this code can be rewritten using it. 92 | // See: https://github.com/tc39/proposal-promise-with-resolvers 93 | /** @type {() => void} */ 94 | let finishCb; 95 | /** @type {Promise} */ 96 | const waitFinish = new Promise((resolve) => { 97 | finishCb = resolve; 98 | }); 99 | 100 | return { 101 | onSuccess: jest.fn(() => finishCb()), 102 | onError: jest.fn(() => finishCb()), 103 | /** 104 | * A Promise object to be resolved when onSuccess or onError is called. 105 | */ 106 | waitFinish 107 | }; 108 | } 109 | 110 | describe('unzip()', () => { 111 | /** 112 | * Get the `Request` object returned by the `request()` function 113 | * @param {string} uri URL to send HTTP request 114 | * @param {Buffer | stream.Readable} expectedResponseBody Response body that should come back from the URL 115 | * @returns {Promise} 116 | */ 117 | async function getReq(uri, expectedResponseBody) { 118 | const parsedUrl = new URL(uri); 119 | 120 | return await new Promise((resolve, reject) => { 121 | // Enable HTTP request mocking 122 | nock(parsedUrl.origin) 123 | .get(parsedUrl.pathname + parsedUrl.search) 124 | .reply(200, expectedResponseBody); 125 | 126 | // This code reproduces the logic of install.js 127 | // See: https://github.com/go-task/go-npm/blob/b3015dac197f7335b1da03759e707c5ee7ad4f27/src/actions/install.js#L37-L51 128 | const req = request({ uri }); 129 | req.on('error', reject); 130 | req.on('response', () => { 131 | resolve(req); 132 | }); 133 | }); 134 | } 135 | 136 | beforeAll(async () => { 137 | // The following error occurs when the `console.log()` function is called in the test code: 138 | // ENOENT: no such file or directory, lstat '.../node_modules/callsites' 139 | // Probably caused by having mock-fs enabled. 140 | // To work around this, call `console.log()` once here. 141 | ignoreStdoutWrite(() => console.log()); 142 | }); 143 | 144 | beforeEach(async () => { 145 | // Enable file system mocking 146 | mockFs({ 147 | // Create a "./bin" directory in the virtual file system 148 | bin: {} 149 | }); 150 | 151 | // Disable all unnecessary HTTP requests 152 | nock.disableNetConnect(); 153 | }); 154 | 155 | afterEach(() => { 156 | // Unmock the file system 157 | mockFs.restore(); 158 | 159 | // Unmock HTTP requests 160 | nock.cleanAll(); 161 | }); 162 | 163 | it('should download resource and unzip to given binPath', async () => { 164 | const req = await getReq( 165 | 'https://example.com/releases/latest.zip', 166 | // Some unzip implementations may decompress invalid data if the ZIP archive is passed in multiple chunks. 167 | // See: https://github.com/ZJONSSON/node-unzipper/issues/271#issuecomment-1509961508 168 | // To test for such bugs, ZIP data is split into 1-byte chunks and passed to unzip. 169 | new ChunkedDataReadable(TEST_ZIP.data, 1) 170 | ); 171 | const { onSuccess, onError, waitFinish } = createCallbacks(); 172 | 173 | unzip({ 174 | opts: { binPath: './bin', binName: 'command' }, 175 | req, 176 | onSuccess, 177 | onError 178 | }); 179 | 180 | await waitFinish; 181 | 182 | await expect(createFileHash('sha256', './bin/command')).resolves.toEqual( 183 | TEST_ZIP.sha256['command'] 184 | ); 185 | }); 186 | 187 | it('should call onSuccess on unzip close', async () => { 188 | const req = await getReq( 189 | 'https://example.com/releases/latest.zip', 190 | TEST_ZIP.data 191 | ); 192 | const { onSuccess, onError, waitFinish } = createCallbacks(); 193 | 194 | unzip({ 195 | opts: { binPath: './bin', binName: 'command' }, 196 | req, 197 | onSuccess, 198 | onError 199 | }); 200 | 201 | await waitFinish; 202 | 203 | expect(onSuccess).toHaveBeenCalled(); 204 | }); 205 | 206 | it('should call onError with error on unzip error', async () => { 207 | const req = await getReq( 208 | 'https://example.com/releases/latest.zip', 209 | // Returns an empty Buffer instead of ZIP data. 210 | // This should cause the unzip process to fail and throw an error. 211 | Buffer.alloc(0) 212 | ); 213 | const { onSuccess, onError, waitFinish } = createCallbacks(); 214 | 215 | unzip({ 216 | opts: { binPath: './bin', binName: 'command' }, 217 | req, 218 | onSuccess, 219 | onError 220 | }); 221 | 222 | await waitFinish; 223 | 224 | expect(onError).toHaveBeenCalledWith(expect.any(Error)); 225 | }); 226 | }); 227 | -------------------------------------------------------------------------------- /src/cli.js: -------------------------------------------------------------------------------- 1 | const actions = { 2 | install: (callback) => require('./actions/install')(callback), 3 | uninstall: (callback) => require('./actions/uninstall')(callback) 4 | }; 5 | 6 | // Parse command line arguments and call the right action 7 | module.exports = ({ argv, exit }) => { 8 | if (argv && argv.length > 2) { 9 | const cmd = argv[2]; 10 | 11 | if (!actions[cmd]) { 12 | console.log( 13 | 'Invalid command to go-npm. `install` and `uninstall` are the only supported commands' 14 | ); 15 | exit(1); 16 | } else { 17 | actions[cmd]((err) => { 18 | if (err) { 19 | console.error(err); 20 | exit(1); 21 | } else { 22 | exit(0); 23 | } 24 | }); 25 | } 26 | } else { 27 | console.log( 28 | 'No command supplied. `install` and `uninstall` are the only supported commands' 29 | ); 30 | exit(1); 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /src/cli.spec.js: -------------------------------------------------------------------------------- 1 | const cli = require('./cli'); 2 | const install = require('./actions/install'); 3 | 4 | jest.mock('../src/actions/install'); 5 | 6 | describe('cli()', () => { 7 | let exit; 8 | 9 | beforeEach(() => { 10 | exit = jest.fn(); 11 | }); 12 | 13 | it('should exit with error if not enough args are supplied', () => { 14 | cli({ argv: [], exit }); 15 | 16 | expect(exit).toHaveBeenCalledWith(1); 17 | }); 18 | 19 | it('should exit with error if command does not exist', () => { 20 | cli({ argv: ['/usr/local/bin/node', 'index.js', 'command'], exit }); 21 | 22 | expect(exit).toHaveBeenCalledWith(1); 23 | }); 24 | 25 | it('should exit with error if command returns error', () => { 26 | install.mockImplementationOnce((cb) => cb(new Error())); 27 | 28 | cli({ argv: ['/usr/local/bin/node', 'index.js', 'install'], exit }); 29 | 30 | expect(exit).toHaveBeenCalledWith(1); 31 | }); 32 | 33 | it('should exit with success if command runs fine', () => { 34 | install.mockImplementationOnce((cb) => cb(null)); 35 | 36 | cli({ argv: ['/usr/local/bin/node', 'index.js', 'install'], exit }); 37 | 38 | expect(exit).toHaveBeenCalledWith(0); 39 | }); 40 | }); 41 | -------------------------------------------------------------------------------- /src/common.js: -------------------------------------------------------------------------------- 1 | const { join, isAbsolute } = require('path'); 2 | const { exec } = require('child_process'); 3 | const { existsSync, readFileSync } = require('fs'); 4 | const mkdirp = require('mkdirp'); 5 | const usedPM = require('used-pm'); 6 | 7 | // Mapping from Node's `process.arch` to Golang's `$GOARCH` 8 | const ARCH_MAPPING = { 9 | ia32: '386', 10 | x64: 'amd64', 11 | arm: 'arm', 12 | arm64: 'arm64' 13 | }; 14 | 15 | // Mapping between Node's `process.platform` to Golang's 16 | const PLATFORM_MAPPING = { 17 | darwin: 'darwin', 18 | linux: 'linux', 19 | win32: 'windows', 20 | freebsd: 'freebsd' 21 | }; 22 | 23 | function getInstallationPath(callback) { 24 | // `npm bin` will output the path where binary files should be installed 25 | exec('npm bin', (err, stdout, stderr) => { 26 | let dir = null; 27 | if ( 28 | err || 29 | stderr || 30 | !stdout || 31 | stdout.length === 0 || 32 | // In Node.js 20, the behavior of the `process.exit()` function has changed. 33 | // As a result, npm 7.19.0 or later does not set the correct exit code on error. 34 | // Therefore, the `child_process.exec()` function will not return an `err`. 35 | // See: https://github.com/npm/cli/issues/6399 36 | // This bug was fixed in npm 9.6.7, but not all users are running the latest version of npm. 37 | // So if `stdout` is not an absolute path in a Node.js 20+ environment, 38 | // we treat it as if the `npm bin` command failed. 39 | // 40 | // Note: The most common failure of the `npm bin` command is the `Unknown command: "bin"` error, but other errors may occur. 41 | // So it is not possible to determine the error from the contents of `stdout`. 42 | // On the other hand, the `npm bin` command will never return a relative path. 43 | // And the error message will never be in the format of an absolute path. 44 | // Therefore, it should be possible to determine the error by determining whether `stdout` is an absolute path. 45 | (Number(process.versions.node.split('.')[0]) >= 20 && 46 | !isAbsolute(stdout.trim())) 47 | ) { 48 | // We couldn't infer path from `npm bin`. Let's try to get it from 49 | // Environment variables set by NPM when it runs. 50 | // npm_config_prefix points to NPM's installation directory where `bin` folder is available 51 | // Ex: /Users/foo/.nvm/versions/node/v4.3.0 52 | const env = process.env; 53 | 54 | // Get the package manager who is running the script 55 | // This is needed since PNPM works in a different way than NPM or YARN. 56 | const packageManager = usedPM(); 57 | 58 | if (env && env.npm_config_prefix) { 59 | if (process.platform === 'win32') { 60 | // On Windows, use the installation directory itself instead of the `bin` folder. 61 | // See: https://docs.npmjs.com/cli/v6/configuring-npm/folders#executables 62 | dir = env.npm_config_prefix; 63 | } else { 64 | dir = join(env.npm_config_prefix, 'bin'); 65 | } 66 | } else if (env && env.npm_config_local_prefix) { 67 | dir = join(env.npm_config_local_prefix, join('node_modules', '.bin')); 68 | } else if (packageManager.name.toLowerCase() === 'pnpm') { 69 | dir = join(process.cwd(), 'node_modules', '.bin'); 70 | } else { 71 | return callback( 72 | new Error('Error finding binary installation directory') 73 | ); 74 | } 75 | } else { 76 | dir = stdout.trim(); 77 | } 78 | 79 | dir = dir.replace( 80 | /node_modules.*[\/\\]\.bin/, 81 | join('node_modules', '.bin') 82 | ); 83 | 84 | mkdirp.sync(dir); 85 | 86 | callback(null, dir); 87 | }); 88 | } 89 | 90 | function validateConfiguration({ version, goBinary }) { 91 | if (!version) { 92 | return "'version' property must be specified"; 93 | } 94 | 95 | if (!goBinary || typeof goBinary !== 'object') { 96 | return "'goBinary' property must be defined and be an object"; 97 | } 98 | 99 | if (!goBinary.name) { 100 | return "'name' property is necessary"; 101 | } 102 | 103 | if (!goBinary.path) { 104 | return "'path' property is necessary"; 105 | } 106 | 107 | if (!goBinary.url) { 108 | return "'url' property is required"; 109 | } 110 | } 111 | 112 | function getUrl(url, process) { 113 | if (typeof url === 'string') { 114 | return url; 115 | } 116 | 117 | let _url; 118 | 119 | if (url[PLATFORM_MAPPING[process.platform]]) { 120 | _url = url[PLATFORM_MAPPING[process.platform]]; 121 | } else { 122 | _url = url.default; 123 | } 124 | 125 | if (typeof _url === 'string') { 126 | return _url; 127 | } 128 | 129 | if (_url[ARCH_MAPPING[process.arch]]) { 130 | _url = _url[ARCH_MAPPING[process.arch]]; 131 | } else { 132 | _url = _url.default; 133 | } 134 | 135 | return _url; 136 | } 137 | 138 | function parsePackageJson() { 139 | if (!(process.arch in ARCH_MAPPING)) { 140 | console.error( 141 | 'Installation is not supported for this architecture: ' + process.arch 142 | ); 143 | return; 144 | } 145 | 146 | if (!(process.platform in PLATFORM_MAPPING)) { 147 | console.error( 148 | 'Installation is not supported for this platform: ' + process.platform 149 | ); 150 | return; 151 | } 152 | 153 | const packageJsonPath = join('.', 'package.json'); 154 | if (!existsSync(packageJsonPath)) { 155 | console.error( 156 | 'Unable to find package.json. ' + 157 | 'Please run this script at root of the package you want to be installed' 158 | ); 159 | return; 160 | } 161 | 162 | const packageJson = JSON.parse(readFileSync(packageJsonPath)); 163 | const error = validateConfiguration(packageJson); 164 | 165 | if (error && error.length > 0) { 166 | console.error('Invalid package.json: ' + error); 167 | return; 168 | } 169 | 170 | // We have validated the config. It exists in all its glory 171 | const binPath = packageJson.goBinary.path; 172 | let binName = packageJson.goBinary.name; 173 | let url = getUrl(packageJson.goBinary.url, process); 174 | let version = packageJson.version; 175 | 176 | if (!url) { 177 | console.error('Could not find url matching platform and architecture'); 178 | return; 179 | } 180 | 181 | if (version[0] === 'v') version = version.substr(1); // strip the 'v' if necessary v0.0.1 => 0.0.1 182 | 183 | // Binary name on Windows has .exe suffix 184 | if (process.platform === 'win32') { 185 | binName += '.exe'; 186 | 187 | url = url.replace(/{{win_ext}}/g, '.exe'); 188 | url = url.replace(/{{archive_ext}}/g, '.zip'); 189 | } else { 190 | url = url.replace(/{{win_ext}}/g, ''); 191 | url = url.replace(/{{archive_ext}}/g, '.tar.gz'); 192 | } 193 | 194 | // Interpolate variables in URL, if necessary 195 | url = url.replace(/{{arch}}/g, ARCH_MAPPING[process.arch]); 196 | url = url.replace(/{{platform}}/g, PLATFORM_MAPPING[process.platform]); 197 | url = url.replace(/{{version}}/g, version); 198 | url = url.replace(/{{bin_name}}/g, binName); 199 | 200 | return { 201 | binName, 202 | binPath, 203 | url, 204 | version 205 | }; 206 | } 207 | 208 | module.exports = { parsePackageJson, getUrl, getInstallationPath }; 209 | -------------------------------------------------------------------------------- /src/common.spec.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const childProcess = require('child_process'); 3 | const common = require('../src/common'); 4 | const path = require('path'); 5 | 6 | jest.mock('fs'); 7 | jest.mock('child_process'); 8 | jest.mock('mkdirp'); 9 | 10 | describe('common', () => { 11 | describe('getInstallationPath()', () => { 12 | let callback, _process; 13 | 14 | beforeEach(() => { 15 | callback = jest.fn(); 16 | 17 | _process = { ...global.process, env: { ...process.env } }; 18 | }); 19 | 20 | afterEach(() => { 21 | global.process = _process; 22 | }); 23 | 24 | it('should get binaries path from `npm bin`', () => { 25 | childProcess.exec.mockImplementationOnce((_cmd, cb) => 26 | cb(null, path.sep + path.join('usr', 'local', 'bin')) 27 | ); 28 | 29 | common.getInstallationPath(callback); 30 | 31 | expect(callback).toHaveBeenCalledWith( 32 | null, 33 | path.sep + path.join('usr', 'local', 'bin') 34 | ); 35 | }); 36 | 37 | it('should get binaries path from env on windows platform', () => { 38 | childProcess.exec.mockImplementationOnce((_cmd, cb) => cb(new Error())); 39 | 40 | process.platform = 'win32'; 41 | process.env.npm_config_prefix = String.raw`C:\Users\John Smith\AppData\npm`; 42 | 43 | common.getInstallationPath(callback); 44 | 45 | expect(callback).toHaveBeenCalledWith( 46 | null, 47 | path.win32.join('C:', 'Users', 'John Smith', 'AppData', 'npm') 48 | ); 49 | }); 50 | 51 | it('should get binaries path from env on platform different than windows', () => { 52 | childProcess.exec.mockImplementationOnce((_cmd, cb) => cb(new Error())); 53 | 54 | process.platform = 'linux'; 55 | process.env.npm_config_prefix = '/usr/local'; 56 | 57 | common.getInstallationPath(callback); 58 | 59 | expect(callback).toHaveBeenCalledWith( 60 | null, 61 | path.sep + path.join('usr', 'local', 'bin') 62 | ); 63 | }); 64 | 65 | it('should call callback with error if binaries path is not found', () => { 66 | childProcess.exec.mockImplementationOnce((_cmd, cb) => cb(new Error())); 67 | 68 | process.env.npm_config_prefix = undefined; 69 | process.env.npm_config_local_prefix = undefined; 70 | 71 | common.getInstallationPath(callback); 72 | 73 | expect(callback).toHaveBeenCalledWith( 74 | new Error('Error finding binary installation directory') 75 | ); 76 | }); 77 | 78 | it('should call callback with error if binaries path is not found (avoid bug where npm does not set exit code in Node.js 20)', () => { 79 | // In Node.js 20, the behavior of the `process.exit()` function has changed. 80 | // As a result, npm 7.19.0 or later does not set the correct exit code on error. 81 | // see https://github.com/npm/cli/issues/6399 82 | // Therefore, the `child_process.exec()` function will not return an error. 83 | 84 | // This bug was fixed in npm 9.6.7, but not all users are running the latest version of npm. 85 | // In particular, in the environment of users using yarn or pnpm, 86 | // npm will remain at the old version built into Node.js and will not be updated to the new one. 87 | // So the `getInstallationPath()` function also needs to work around this bug. 88 | 89 | childProcess.exec.mockImplementationOnce((_cmd, cb) => 90 | cb( 91 | null, 92 | 'Unknown command: "bin"\n\nTo see a list of supported npm commands, run:\n npm help\n', 93 | '' 94 | ) 95 | ); 96 | 97 | process.version = 'v20.0.0'; 98 | process.versions = { ...process.versions, node: '20.0.0' }; 99 | process.env.npm_config_prefix = undefined; 100 | process.env.npm_config_local_prefix = undefined; 101 | 102 | common.getInstallationPath(callback); 103 | 104 | expect(callback).toHaveBeenCalledWith( 105 | new Error('Error finding binary installation directory') 106 | ); 107 | }); 108 | }); 109 | 110 | describe('getUrl', () => { 111 | it('should get url from given string url', () => { 112 | const url = common.getUrl('http://url'); 113 | 114 | expect(url).toEqual('http://url'); 115 | }); 116 | 117 | it('should get specific url for current platform', () => { 118 | const url = common.getUrl( 119 | { 120 | default: 'http://url.tar.gz', 121 | windows: 'http://url.exe.zip' 122 | }, 123 | { platform: 'win32' } 124 | ); 125 | 126 | expect(url).toEqual('http://url.exe.zip'); 127 | }); 128 | 129 | it('should get default url for current platform', () => { 130 | const url = common.getUrl( 131 | { 132 | default: 'http://url.tar.gz', 133 | windows: 'http://url.exe.zip' 134 | }, 135 | { platform: 'linux' } 136 | ); 137 | 138 | expect(url).toEqual('http://url.tar.gz'); 139 | }); 140 | 141 | it('should get specific url for current platform and architecture', () => { 142 | const url = common.getUrl( 143 | { 144 | default: 'http://url.tar.gz', 145 | windows: 'http://url.exe.zip', 146 | darwin: { 147 | default: 'http://url_darwin.tar.gz', 148 | 386: 'http://url_darwin_i386.tar.gz' 149 | } 150 | }, 151 | { platform: 'darwin', arch: 'ia32' } 152 | ); 153 | 154 | expect(url).toEqual('http://url_darwin_i386.tar.gz'); 155 | }); 156 | 157 | it('should get default url for current platform and architecture', () => { 158 | const url = common.getUrl( 159 | { 160 | default: 'http://url.tar.gz', 161 | windows: 'http://url.exe.zip', 162 | darwin: { 163 | default: 'http://url_darwin.tar.gz', 164 | 386: 'http://url_darwin_i386.tar.gz' 165 | } 166 | }, 167 | { platform: 'darwin', arch: 'amd64' } 168 | ); 169 | 170 | expect(url).toEqual('http://url_darwin.tar.gz'); 171 | }); 172 | }); 173 | 174 | describe('parsePackageJson()', () => { 175 | let _process; 176 | 177 | beforeEach(() => { 178 | _process = { ...global.process }; 179 | }); 180 | 181 | afterEach(() => { 182 | global.process = _process; 183 | }); 184 | 185 | describe('validation', () => { 186 | it('should return if architecture is unsupported', () => { 187 | process.arch = 'mips'; 188 | 189 | expect(common.parsePackageJson()).toBeUndefined(); 190 | }); 191 | 192 | it('should return if platform is unsupported', () => { 193 | process.platform = 'amiga'; 194 | 195 | expect(common.parsePackageJson()).toBeUndefined(); 196 | }); 197 | 198 | it('should return if package.json does not exist', () => { 199 | fs.existsSync.mockReturnValueOnce(false); 200 | 201 | expect(common.parsePackageJson()).toBeUndefined(); 202 | }); 203 | }); 204 | 205 | describe('variable replacement', () => { 206 | it('should append .exe extension on windows platform', () => { 207 | fs.existsSync.mockReturnValueOnce(true); 208 | fs.readFileSync.mockReturnValueOnce( 209 | JSON.stringify({ 210 | version: '1.0.0', 211 | goBinary: { 212 | name: 'command', 213 | path: './bin', 214 | url: 'https://github.com/foo/bar/releases/v{{version}}/assets/command{{win_ext}}' 215 | } 216 | }) 217 | ); 218 | 219 | process.platform = 'win32'; 220 | 221 | expect(common.parsePackageJson()).toMatchObject({ 222 | binName: 'command.exe', 223 | url: 'https://github.com/foo/bar/releases/v1.0.0/assets/command.exe' 224 | }); 225 | }); 226 | 227 | it('should not append .exe extension on platform different than windows', () => { 228 | fs.existsSync.mockReturnValueOnce(true); 229 | fs.readFileSync.mockReturnValueOnce( 230 | JSON.stringify({ 231 | version: '1.0.0', 232 | goBinary: { 233 | name: 'command', 234 | path: './bin', 235 | url: 'https://github.com/foo/bar/releases/v{{version}}/assets/command{{win_ext}}' 236 | } 237 | }) 238 | ); 239 | 240 | process.platform = 'darwin'; 241 | 242 | expect(common.parsePackageJson()).toMatchObject({ 243 | binName: 'command', 244 | url: 'https://github.com/foo/bar/releases/v1.0.0/assets/command' 245 | }); 246 | }); 247 | }); 248 | }); 249 | }); 250 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('./cli')(process); 4 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.2.0": 6 | version "2.2.1" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" 8 | integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.3.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.5": 14 | version "7.22.5" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" 16 | integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== 17 | dependencies: 18 | "@babel/highlight" "^7.22.5" 19 | 20 | "@babel/compat-data@^7.22.5": 21 | version "7.22.5" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" 23 | integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== 24 | 25 | "@babel/core@^7.11.6", "@babel/core@^7.12.3": 26 | version "7.22.5" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" 28 | integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== 29 | dependencies: 30 | "@ampproject/remapping" "^2.2.0" 31 | "@babel/code-frame" "^7.22.5" 32 | "@babel/generator" "^7.22.5" 33 | "@babel/helper-compilation-targets" "^7.22.5" 34 | "@babel/helper-module-transforms" "^7.22.5" 35 | "@babel/helpers" "^7.22.5" 36 | "@babel/parser" "^7.22.5" 37 | "@babel/template" "^7.22.5" 38 | "@babel/traverse" "^7.22.5" 39 | "@babel/types" "^7.22.5" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.2" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.22.5", "@babel/generator@^7.7.2": 47 | version "7.22.5" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" 49 | integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== 50 | dependencies: 51 | "@babel/types" "^7.22.5" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | "@jridgewell/trace-mapping" "^0.3.17" 54 | jsesc "^2.5.1" 55 | 56 | "@babel/helper-compilation-targets@^7.22.5": 57 | version "7.22.5" 58 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" 59 | integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== 60 | dependencies: 61 | "@babel/compat-data" "^7.22.5" 62 | "@babel/helper-validator-option" "^7.22.5" 63 | browserslist "^4.21.3" 64 | lru-cache "^5.1.1" 65 | semver "^6.3.0" 66 | 67 | "@babel/helper-environment-visitor@^7.22.5": 68 | version "7.22.5" 69 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" 70 | integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== 71 | 72 | "@babel/helper-function-name@^7.22.5": 73 | version "7.22.5" 74 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" 75 | integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== 76 | dependencies: 77 | "@babel/template" "^7.22.5" 78 | "@babel/types" "^7.22.5" 79 | 80 | "@babel/helper-hoist-variables@^7.22.5": 81 | version "7.22.5" 82 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" 83 | integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== 84 | dependencies: 85 | "@babel/types" "^7.22.5" 86 | 87 | "@babel/helper-module-imports@^7.22.5": 88 | version "7.22.5" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" 90 | integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== 91 | dependencies: 92 | "@babel/types" "^7.22.5" 93 | 94 | "@babel/helper-module-transforms@^7.22.5": 95 | version "7.22.5" 96 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" 97 | integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== 98 | dependencies: 99 | "@babel/helper-environment-visitor" "^7.22.5" 100 | "@babel/helper-module-imports" "^7.22.5" 101 | "@babel/helper-simple-access" "^7.22.5" 102 | "@babel/helper-split-export-declaration" "^7.22.5" 103 | "@babel/helper-validator-identifier" "^7.22.5" 104 | "@babel/template" "^7.22.5" 105 | "@babel/traverse" "^7.22.5" 106 | "@babel/types" "^7.22.5" 107 | 108 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": 109 | version "7.22.5" 110 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" 111 | integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== 112 | 113 | "@babel/helper-simple-access@^7.22.5": 114 | version "7.22.5" 115 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" 116 | integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== 117 | dependencies: 118 | "@babel/types" "^7.22.5" 119 | 120 | "@babel/helper-split-export-declaration@^7.22.5": 121 | version "7.22.5" 122 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" 123 | integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== 124 | dependencies: 125 | "@babel/types" "^7.22.5" 126 | 127 | "@babel/helper-string-parser@^7.22.5": 128 | version "7.22.5" 129 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" 130 | integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== 131 | 132 | "@babel/helper-validator-identifier@^7.22.5": 133 | version "7.22.5" 134 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" 135 | integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== 136 | 137 | "@babel/helper-validator-option@^7.22.5": 138 | version "7.22.5" 139 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" 140 | integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== 141 | 142 | "@babel/helpers@^7.22.5": 143 | version "7.22.5" 144 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" 145 | integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== 146 | dependencies: 147 | "@babel/template" "^7.22.5" 148 | "@babel/traverse" "^7.22.5" 149 | "@babel/types" "^7.22.5" 150 | 151 | "@babel/highlight@^7.22.5": 152 | version "7.22.5" 153 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" 154 | integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== 155 | dependencies: 156 | "@babel/helper-validator-identifier" "^7.22.5" 157 | chalk "^2.0.0" 158 | js-tokens "^4.0.0" 159 | 160 | "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.5": 161 | version "7.22.5" 162 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" 163 | integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== 164 | 165 | "@babel/plugin-syntax-async-generators@^7.8.4": 166 | version "7.8.4" 167 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 168 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 169 | dependencies: 170 | "@babel/helper-plugin-utils" "^7.8.0" 171 | 172 | "@babel/plugin-syntax-bigint@^7.8.3": 173 | version "7.8.3" 174 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" 175 | integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== 176 | dependencies: 177 | "@babel/helper-plugin-utils" "^7.8.0" 178 | 179 | "@babel/plugin-syntax-class-properties@^7.8.3": 180 | version "7.12.13" 181 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 182 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== 183 | dependencies: 184 | "@babel/helper-plugin-utils" "^7.12.13" 185 | 186 | "@babel/plugin-syntax-import-meta@^7.8.3": 187 | version "7.10.4" 188 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" 189 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== 190 | dependencies: 191 | "@babel/helper-plugin-utils" "^7.10.4" 192 | 193 | "@babel/plugin-syntax-json-strings@^7.8.3": 194 | version "7.8.3" 195 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 196 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 197 | dependencies: 198 | "@babel/helper-plugin-utils" "^7.8.0" 199 | 200 | "@babel/plugin-syntax-jsx@^7.7.2": 201 | version "7.22.5" 202 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" 203 | integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== 204 | dependencies: 205 | "@babel/helper-plugin-utils" "^7.22.5" 206 | 207 | "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": 208 | version "7.10.4" 209 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 210 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 211 | dependencies: 212 | "@babel/helper-plugin-utils" "^7.10.4" 213 | 214 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 215 | version "7.8.3" 216 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 217 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 218 | dependencies: 219 | "@babel/helper-plugin-utils" "^7.8.0" 220 | 221 | "@babel/plugin-syntax-numeric-separator@^7.8.3": 222 | version "7.10.4" 223 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 224 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 225 | dependencies: 226 | "@babel/helper-plugin-utils" "^7.10.4" 227 | 228 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 229 | version "7.8.3" 230 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 231 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 232 | dependencies: 233 | "@babel/helper-plugin-utils" "^7.8.0" 234 | 235 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 236 | version "7.8.3" 237 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 238 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 239 | dependencies: 240 | "@babel/helper-plugin-utils" "^7.8.0" 241 | 242 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 243 | version "7.8.3" 244 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 245 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 246 | dependencies: 247 | "@babel/helper-plugin-utils" "^7.8.0" 248 | 249 | "@babel/plugin-syntax-top-level-await@^7.8.3": 250 | version "7.14.5" 251 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" 252 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== 253 | dependencies: 254 | "@babel/helper-plugin-utils" "^7.14.5" 255 | 256 | "@babel/plugin-syntax-typescript@^7.7.2": 257 | version "7.22.5" 258 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" 259 | integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== 260 | dependencies: 261 | "@babel/helper-plugin-utils" "^7.22.5" 262 | 263 | "@babel/template@^7.22.5", "@babel/template@^7.3.3": 264 | version "7.22.5" 265 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" 266 | integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== 267 | dependencies: 268 | "@babel/code-frame" "^7.22.5" 269 | "@babel/parser" "^7.22.5" 270 | "@babel/types" "^7.22.5" 271 | 272 | "@babel/traverse@^7.22.5", "@babel/traverse@^7.7.2": 273 | version "7.22.5" 274 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" 275 | integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== 276 | dependencies: 277 | "@babel/code-frame" "^7.22.5" 278 | "@babel/generator" "^7.22.5" 279 | "@babel/helper-environment-visitor" "^7.22.5" 280 | "@babel/helper-function-name" "^7.22.5" 281 | "@babel/helper-hoist-variables" "^7.22.5" 282 | "@babel/helper-split-export-declaration" "^7.22.5" 283 | "@babel/parser" "^7.22.5" 284 | "@babel/types" "^7.22.5" 285 | debug "^4.1.0" 286 | globals "^11.1.0" 287 | 288 | "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.3.3": 289 | version "7.22.5" 290 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" 291 | integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== 292 | dependencies: 293 | "@babel/helper-string-parser" "^7.22.5" 294 | "@babel/helper-validator-identifier" "^7.22.5" 295 | to-fast-properties "^2.0.0" 296 | 297 | "@bcoe/v8-coverage@^0.2.3": 298 | version "0.2.3" 299 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 300 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 301 | 302 | "@istanbuljs/load-nyc-config@^1.0.0": 303 | version "1.1.0" 304 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 305 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 306 | dependencies: 307 | camelcase "^5.3.1" 308 | find-up "^4.1.0" 309 | get-package-type "^0.1.0" 310 | js-yaml "^3.13.1" 311 | resolve-from "^5.0.0" 312 | 313 | "@istanbuljs/schema@^0.1.2": 314 | version "0.1.3" 315 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 316 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 317 | 318 | "@jest/console@^29.5.0": 319 | version "29.5.0" 320 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57" 321 | integrity sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ== 322 | dependencies: 323 | "@jest/types" "^29.5.0" 324 | "@types/node" "*" 325 | chalk "^4.0.0" 326 | jest-message-util "^29.5.0" 327 | jest-util "^29.5.0" 328 | slash "^3.0.0" 329 | 330 | "@jest/core@^29.5.0": 331 | version "29.5.0" 332 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03" 333 | integrity sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ== 334 | dependencies: 335 | "@jest/console" "^29.5.0" 336 | "@jest/reporters" "^29.5.0" 337 | "@jest/test-result" "^29.5.0" 338 | "@jest/transform" "^29.5.0" 339 | "@jest/types" "^29.5.0" 340 | "@types/node" "*" 341 | ansi-escapes "^4.2.1" 342 | chalk "^4.0.0" 343 | ci-info "^3.2.0" 344 | exit "^0.1.2" 345 | graceful-fs "^4.2.9" 346 | jest-changed-files "^29.5.0" 347 | jest-config "^29.5.0" 348 | jest-haste-map "^29.5.0" 349 | jest-message-util "^29.5.0" 350 | jest-regex-util "^29.4.3" 351 | jest-resolve "^29.5.0" 352 | jest-resolve-dependencies "^29.5.0" 353 | jest-runner "^29.5.0" 354 | jest-runtime "^29.5.0" 355 | jest-snapshot "^29.5.0" 356 | jest-util "^29.5.0" 357 | jest-validate "^29.5.0" 358 | jest-watcher "^29.5.0" 359 | micromatch "^4.0.4" 360 | pretty-format "^29.5.0" 361 | slash "^3.0.0" 362 | strip-ansi "^6.0.0" 363 | 364 | "@jest/environment@^29.5.0": 365 | version "29.5.0" 366 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" 367 | integrity sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ== 368 | dependencies: 369 | "@jest/fake-timers" "^29.5.0" 370 | "@jest/types" "^29.5.0" 371 | "@types/node" "*" 372 | jest-mock "^29.5.0" 373 | 374 | "@jest/expect-utils@^29.5.0": 375 | version "29.5.0" 376 | resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" 377 | integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== 378 | dependencies: 379 | jest-get-type "^29.4.3" 380 | 381 | "@jest/expect@^29.5.0": 382 | version "29.5.0" 383 | resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.5.0.tgz#80952f5316b23c483fbca4363ce822af79c38fba" 384 | integrity sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g== 385 | dependencies: 386 | expect "^29.5.0" 387 | jest-snapshot "^29.5.0" 388 | 389 | "@jest/fake-timers@^29.5.0": 390 | version "29.5.0" 391 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" 392 | integrity sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg== 393 | dependencies: 394 | "@jest/types" "^29.5.0" 395 | "@sinonjs/fake-timers" "^10.0.2" 396 | "@types/node" "*" 397 | jest-message-util "^29.5.0" 398 | jest-mock "^29.5.0" 399 | jest-util "^29.5.0" 400 | 401 | "@jest/globals@^29.5.0": 402 | version "29.5.0" 403 | resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298" 404 | integrity sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ== 405 | dependencies: 406 | "@jest/environment" "^29.5.0" 407 | "@jest/expect" "^29.5.0" 408 | "@jest/types" "^29.5.0" 409 | jest-mock "^29.5.0" 410 | 411 | "@jest/reporters@^29.5.0": 412 | version "29.5.0" 413 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b" 414 | integrity sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA== 415 | dependencies: 416 | "@bcoe/v8-coverage" "^0.2.3" 417 | "@jest/console" "^29.5.0" 418 | "@jest/test-result" "^29.5.0" 419 | "@jest/transform" "^29.5.0" 420 | "@jest/types" "^29.5.0" 421 | "@jridgewell/trace-mapping" "^0.3.15" 422 | "@types/node" "*" 423 | chalk "^4.0.0" 424 | collect-v8-coverage "^1.0.0" 425 | exit "^0.1.2" 426 | glob "^7.1.3" 427 | graceful-fs "^4.2.9" 428 | istanbul-lib-coverage "^3.0.0" 429 | istanbul-lib-instrument "^5.1.0" 430 | istanbul-lib-report "^3.0.0" 431 | istanbul-lib-source-maps "^4.0.0" 432 | istanbul-reports "^3.1.3" 433 | jest-message-util "^29.5.0" 434 | jest-util "^29.5.0" 435 | jest-worker "^29.5.0" 436 | slash "^3.0.0" 437 | string-length "^4.0.1" 438 | strip-ansi "^6.0.0" 439 | v8-to-istanbul "^9.0.1" 440 | 441 | "@jest/schemas@^29.4.3": 442 | version "29.4.3" 443 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" 444 | integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== 445 | dependencies: 446 | "@sinclair/typebox" "^0.25.16" 447 | 448 | "@jest/source-map@^29.4.3": 449 | version "29.4.3" 450 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" 451 | integrity sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w== 452 | dependencies: 453 | "@jridgewell/trace-mapping" "^0.3.15" 454 | callsites "^3.0.0" 455 | graceful-fs "^4.2.9" 456 | 457 | "@jest/test-result@^29.5.0": 458 | version "29.5.0" 459 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408" 460 | integrity sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ== 461 | dependencies: 462 | "@jest/console" "^29.5.0" 463 | "@jest/types" "^29.5.0" 464 | "@types/istanbul-lib-coverage" "^2.0.0" 465 | collect-v8-coverage "^1.0.0" 466 | 467 | "@jest/test-sequencer@^29.5.0": 468 | version "29.5.0" 469 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4" 470 | integrity sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ== 471 | dependencies: 472 | "@jest/test-result" "^29.5.0" 473 | graceful-fs "^4.2.9" 474 | jest-haste-map "^29.5.0" 475 | slash "^3.0.0" 476 | 477 | "@jest/transform@^29.5.0": 478 | version "29.5.0" 479 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" 480 | integrity sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw== 481 | dependencies: 482 | "@babel/core" "^7.11.6" 483 | "@jest/types" "^29.5.0" 484 | "@jridgewell/trace-mapping" "^0.3.15" 485 | babel-plugin-istanbul "^6.1.1" 486 | chalk "^4.0.0" 487 | convert-source-map "^2.0.0" 488 | fast-json-stable-stringify "^2.1.0" 489 | graceful-fs "^4.2.9" 490 | jest-haste-map "^29.5.0" 491 | jest-regex-util "^29.4.3" 492 | jest-util "^29.5.0" 493 | micromatch "^4.0.4" 494 | pirates "^4.0.4" 495 | slash "^3.0.0" 496 | write-file-atomic "^4.0.2" 497 | 498 | "@jest/types@^29.5.0": 499 | version "29.5.0" 500 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" 501 | integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== 502 | dependencies: 503 | "@jest/schemas" "^29.4.3" 504 | "@types/istanbul-lib-coverage" "^2.0.0" 505 | "@types/istanbul-reports" "^3.0.0" 506 | "@types/node" "*" 507 | "@types/yargs" "^17.0.8" 508 | chalk "^4.0.0" 509 | 510 | "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": 511 | version "0.3.3" 512 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" 513 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== 514 | dependencies: 515 | "@jridgewell/set-array" "^1.0.1" 516 | "@jridgewell/sourcemap-codec" "^1.4.10" 517 | "@jridgewell/trace-mapping" "^0.3.9" 518 | 519 | "@jridgewell/resolve-uri@3.1.0": 520 | version "3.1.0" 521 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 522 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 523 | 524 | "@jridgewell/set-array@^1.0.1": 525 | version "1.1.2" 526 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 527 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 528 | 529 | "@jridgewell/sourcemap-codec@1.4.14": 530 | version "1.4.14" 531 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 532 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 533 | 534 | "@jridgewell/sourcemap-codec@^1.4.10": 535 | version "1.4.15" 536 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 537 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 538 | 539 | "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": 540 | version "0.3.18" 541 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" 542 | integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== 543 | dependencies: 544 | "@jridgewell/resolve-uri" "3.1.0" 545 | "@jridgewell/sourcemap-codec" "1.4.14" 546 | 547 | "@sinclair/typebox@^0.25.16": 548 | version "0.25.24" 549 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" 550 | integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== 551 | 552 | "@sinonjs/commons@^3.0.0": 553 | version "3.0.0" 554 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" 555 | integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== 556 | dependencies: 557 | type-detect "4.0.8" 558 | 559 | "@sinonjs/fake-timers@^10.0.2": 560 | version "10.2.0" 561 | resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz#b3e322a34c5f26e3184e7f6115695f299c1b1194" 562 | integrity sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg== 563 | dependencies: 564 | "@sinonjs/commons" "^3.0.0" 565 | 566 | "@types/babel__core@^7.1.14": 567 | version "7.20.1" 568 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" 569 | integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== 570 | dependencies: 571 | "@babel/parser" "^7.20.7" 572 | "@babel/types" "^7.20.7" 573 | "@types/babel__generator" "*" 574 | "@types/babel__template" "*" 575 | "@types/babel__traverse" "*" 576 | 577 | "@types/babel__generator@*": 578 | version "7.6.4" 579 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" 580 | integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== 581 | dependencies: 582 | "@babel/types" "^7.0.0" 583 | 584 | "@types/babel__template@*": 585 | version "7.4.1" 586 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" 587 | integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== 588 | dependencies: 589 | "@babel/parser" "^7.1.0" 590 | "@babel/types" "^7.0.0" 591 | 592 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 593 | version "7.20.1" 594 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" 595 | integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== 596 | dependencies: 597 | "@babel/types" "^7.20.7" 598 | 599 | "@types/graceful-fs@^4.1.3": 600 | version "4.1.6" 601 | resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" 602 | integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== 603 | dependencies: 604 | "@types/node" "*" 605 | 606 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 607 | version "2.0.4" 608 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" 609 | integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== 610 | 611 | "@types/istanbul-lib-report@*": 612 | version "3.0.0" 613 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 614 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 615 | dependencies: 616 | "@types/istanbul-lib-coverage" "*" 617 | 618 | "@types/istanbul-reports@^3.0.0": 619 | version "3.0.1" 620 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" 621 | integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== 622 | dependencies: 623 | "@types/istanbul-lib-report" "*" 624 | 625 | "@types/node@*": 626 | version "20.3.1" 627 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" 628 | integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== 629 | 630 | "@types/prettier@^2.1.5": 631 | version "2.7.3" 632 | resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" 633 | integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== 634 | 635 | "@types/stack-utils@^2.0.0": 636 | version "2.0.1" 637 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" 638 | integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== 639 | 640 | "@types/yargs-parser@*": 641 | version "21.0.0" 642 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" 643 | integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== 644 | 645 | "@types/yargs@^17.0.8": 646 | version "17.0.24" 647 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" 648 | integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== 649 | dependencies: 650 | "@types/yargs-parser" "*" 651 | 652 | adm-zip@0.5.10: 653 | version "0.5.10" 654 | resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.10.tgz#4a51d5ab544b1f5ce51e1b9043139b639afff45b" 655 | integrity sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ== 656 | 657 | ajv@^6.12.3: 658 | version "6.12.6" 659 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 660 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 661 | dependencies: 662 | fast-deep-equal "^3.1.1" 663 | fast-json-stable-stringify "^2.0.0" 664 | json-schema-traverse "^0.4.1" 665 | uri-js "^4.2.2" 666 | 667 | ansi-escapes@^4.2.1: 668 | version "4.3.2" 669 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 670 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 671 | dependencies: 672 | type-fest "^0.21.3" 673 | 674 | ansi-regex@^5.0.1: 675 | version "5.0.1" 676 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 677 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 678 | 679 | ansi-styles@^3.2.1: 680 | version "3.2.1" 681 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 682 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 683 | dependencies: 684 | color-convert "^1.9.0" 685 | 686 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 687 | version "4.3.0" 688 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 689 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 690 | dependencies: 691 | color-convert "^2.0.1" 692 | 693 | ansi-styles@^5.0.0: 694 | version "5.2.0" 695 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 696 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 697 | 698 | anymatch@^3.0.3: 699 | version "3.1.3" 700 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 701 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 702 | dependencies: 703 | normalize-path "^3.0.0" 704 | picomatch "^2.0.4" 705 | 706 | argparse@^1.0.7: 707 | version "1.0.10" 708 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 709 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 710 | dependencies: 711 | sprintf-js "~1.0.2" 712 | 713 | asn1@~0.2.3: 714 | version "0.2.6" 715 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" 716 | integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== 717 | dependencies: 718 | safer-buffer "~2.1.0" 719 | 720 | assert-plus@1.0.0, assert-plus@^1.0.0: 721 | version "1.0.0" 722 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 723 | integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== 724 | 725 | asynckit@^0.4.0: 726 | version "0.4.0" 727 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 728 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 729 | 730 | aws-sign2@~0.7.0: 731 | version "0.7.0" 732 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 733 | integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== 734 | 735 | aws4@^1.8.0: 736 | version "1.12.0" 737 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" 738 | integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== 739 | 740 | babel-jest@^29.5.0: 741 | version "29.5.0" 742 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" 743 | integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q== 744 | dependencies: 745 | "@jest/transform" "^29.5.0" 746 | "@types/babel__core" "^7.1.14" 747 | babel-plugin-istanbul "^6.1.1" 748 | babel-preset-jest "^29.5.0" 749 | chalk "^4.0.0" 750 | graceful-fs "^4.2.9" 751 | slash "^3.0.0" 752 | 753 | babel-plugin-istanbul@^6.1.1: 754 | version "6.1.1" 755 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" 756 | integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== 757 | dependencies: 758 | "@babel/helper-plugin-utils" "^7.0.0" 759 | "@istanbuljs/load-nyc-config" "^1.0.0" 760 | "@istanbuljs/schema" "^0.1.2" 761 | istanbul-lib-instrument "^5.0.4" 762 | test-exclude "^6.0.0" 763 | 764 | babel-plugin-jest-hoist@^29.5.0: 765 | version "29.5.0" 766 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" 767 | integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== 768 | dependencies: 769 | "@babel/template" "^7.3.3" 770 | "@babel/types" "^7.3.3" 771 | "@types/babel__core" "^7.1.14" 772 | "@types/babel__traverse" "^7.0.6" 773 | 774 | babel-preset-current-node-syntax@^1.0.0: 775 | version "1.0.1" 776 | resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" 777 | integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== 778 | dependencies: 779 | "@babel/plugin-syntax-async-generators" "^7.8.4" 780 | "@babel/plugin-syntax-bigint" "^7.8.3" 781 | "@babel/plugin-syntax-class-properties" "^7.8.3" 782 | "@babel/plugin-syntax-import-meta" "^7.8.3" 783 | "@babel/plugin-syntax-json-strings" "^7.8.3" 784 | "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" 785 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 786 | "@babel/plugin-syntax-numeric-separator" "^7.8.3" 787 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 788 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 789 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 790 | "@babel/plugin-syntax-top-level-await" "^7.8.3" 791 | 792 | babel-preset-jest@^29.5.0: 793 | version "29.5.0" 794 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" 795 | integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== 796 | dependencies: 797 | babel-plugin-jest-hoist "^29.5.0" 798 | babel-preset-current-node-syntax "^1.0.0" 799 | 800 | balanced-match@^1.0.0: 801 | version "1.0.2" 802 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 803 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 804 | 805 | bcrypt-pbkdf@^1.0.0: 806 | version "1.0.2" 807 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 808 | integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== 809 | dependencies: 810 | tweetnacl "^0.14.3" 811 | 812 | block-stream@*: 813 | version "0.0.9" 814 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 815 | integrity sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ== 816 | dependencies: 817 | inherits "~2.0.0" 818 | 819 | brace-expansion@^1.1.7: 820 | version "1.1.11" 821 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 822 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 823 | dependencies: 824 | balanced-match "^1.0.0" 825 | concat-map "0.0.1" 826 | 827 | braces@^3.0.2: 828 | version "3.0.2" 829 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 830 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 831 | dependencies: 832 | fill-range "^7.0.1" 833 | 834 | browserslist@^4.21.3: 835 | version "4.21.9" 836 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" 837 | integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== 838 | dependencies: 839 | caniuse-lite "^1.0.30001503" 840 | electron-to-chromium "^1.4.431" 841 | node-releases "^2.0.12" 842 | update-browserslist-db "^1.0.11" 843 | 844 | bser@2.1.1: 845 | version "2.1.1" 846 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 847 | integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 848 | dependencies: 849 | node-int64 "^0.4.0" 850 | 851 | buffer-from@^1.0.0: 852 | version "1.1.2" 853 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 854 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 855 | 856 | callsites@^3.0.0: 857 | version "3.1.0" 858 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 859 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 860 | 861 | camelcase@^5.3.1: 862 | version "5.3.1" 863 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 864 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 865 | 866 | camelcase@^6.2.0: 867 | version "6.3.0" 868 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 869 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 870 | 871 | caniuse-lite@^1.0.30001503: 872 | version "1.0.30001503" 873 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001503.tgz#88b6ff1b2cf735f1f3361dc1a15b59f0561aa398" 874 | integrity sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw== 875 | 876 | caseless@~0.12.0: 877 | version "0.12.0" 878 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 879 | integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== 880 | 881 | chalk@^2.0.0: 882 | version "2.4.2" 883 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 884 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 885 | dependencies: 886 | ansi-styles "^3.2.1" 887 | escape-string-regexp "^1.0.5" 888 | supports-color "^5.3.0" 889 | 890 | chalk@^4.0.0: 891 | version "4.1.2" 892 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 893 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 894 | dependencies: 895 | ansi-styles "^4.1.0" 896 | supports-color "^7.1.0" 897 | 898 | char-regex@^1.0.2: 899 | version "1.0.2" 900 | resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" 901 | integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 902 | 903 | ci-info@^3.2.0: 904 | version "3.8.0" 905 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" 906 | integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== 907 | 908 | cjs-module-lexer@^1.0.0: 909 | version "1.2.3" 910 | resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" 911 | integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== 912 | 913 | cliui@^8.0.1: 914 | version "8.0.1" 915 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" 916 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 917 | dependencies: 918 | string-width "^4.2.0" 919 | strip-ansi "^6.0.1" 920 | wrap-ansi "^7.0.0" 921 | 922 | co@^4.6.0: 923 | version "4.6.0" 924 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 925 | integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== 926 | 927 | collect-v8-coverage@^1.0.0: 928 | version "1.0.1" 929 | resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" 930 | integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== 931 | 932 | color-convert@^1.9.0: 933 | version "1.9.3" 934 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 935 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 936 | dependencies: 937 | color-name "1.1.3" 938 | 939 | color-convert@^2.0.1: 940 | version "2.0.1" 941 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 942 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 943 | dependencies: 944 | color-name "~1.1.4" 945 | 946 | color-name@1.1.3: 947 | version "1.1.3" 948 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 949 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 950 | 951 | color-name@~1.1.4: 952 | version "1.1.4" 953 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 954 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 955 | 956 | combined-stream@^1.0.6, combined-stream@~1.0.6: 957 | version "1.0.8" 958 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 959 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 960 | dependencies: 961 | delayed-stream "~1.0.0" 962 | 963 | concat-map@0.0.1: 964 | version "0.0.1" 965 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 966 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 967 | 968 | convert-source-map@^1.6.0, convert-source-map@^1.7.0: 969 | version "1.9.0" 970 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 971 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 972 | 973 | convert-source-map@^2.0.0: 974 | version "2.0.0" 975 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" 976 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== 977 | 978 | core-util-is@1.0.2: 979 | version "1.0.2" 980 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 981 | integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== 982 | 983 | cross-spawn@^7.0.3: 984 | version "7.0.3" 985 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 986 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 987 | dependencies: 988 | path-key "^3.1.0" 989 | shebang-command "^2.0.0" 990 | which "^2.0.1" 991 | 992 | dashdash@^1.12.0: 993 | version "1.14.1" 994 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 995 | integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== 996 | dependencies: 997 | assert-plus "^1.0.0" 998 | 999 | debug@^4.1.0, debug@^4.1.1: 1000 | version "4.3.4" 1001 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1002 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1003 | dependencies: 1004 | ms "2.1.2" 1005 | 1006 | dedent@^0.7.0: 1007 | version "0.7.0" 1008 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" 1009 | integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== 1010 | 1011 | deepmerge@^4.2.2: 1012 | version "4.3.1" 1013 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" 1014 | integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== 1015 | 1016 | delayed-stream@~1.0.0: 1017 | version "1.0.0" 1018 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1019 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 1020 | 1021 | detect-newline@^3.0.0: 1022 | version "3.1.0" 1023 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" 1024 | integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== 1025 | 1026 | diff-sequences@^29.4.3: 1027 | version "29.4.3" 1028 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" 1029 | integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== 1030 | 1031 | ecc-jsbn@~0.1.1: 1032 | version "0.1.2" 1033 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 1034 | integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== 1035 | dependencies: 1036 | jsbn "~0.1.0" 1037 | safer-buffer "^2.1.0" 1038 | 1039 | electron-to-chromium@^1.4.431: 1040 | version "1.4.433" 1041 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz#305ef5f8ea5fe65d252aae4b0e1088f9e4842533" 1042 | integrity sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ== 1043 | 1044 | emittery@^0.13.1: 1045 | version "0.13.1" 1046 | resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" 1047 | integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== 1048 | 1049 | emoji-regex@^8.0.0: 1050 | version "8.0.0" 1051 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1052 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1053 | 1054 | error-ex@^1.3.1: 1055 | version "1.3.2" 1056 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1057 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1058 | dependencies: 1059 | is-arrayish "^0.2.1" 1060 | 1061 | esbuild@^0.12.17: 1062 | version "0.12.29" 1063 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.29.tgz#be602db7c4dc78944a9dbde0d1ea19d36c1f882d" 1064 | integrity sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g== 1065 | 1066 | escalade@^3.1.1: 1067 | version "3.1.1" 1068 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1069 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1070 | 1071 | escape-string-regexp@^1.0.5: 1072 | version "1.0.5" 1073 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1074 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1075 | 1076 | escape-string-regexp@^2.0.0: 1077 | version "2.0.0" 1078 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 1079 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 1080 | 1081 | esprima@^4.0.0: 1082 | version "4.0.1" 1083 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1084 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1085 | 1086 | execa@^5.0.0: 1087 | version "5.1.1" 1088 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 1089 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 1090 | dependencies: 1091 | cross-spawn "^7.0.3" 1092 | get-stream "^6.0.0" 1093 | human-signals "^2.1.0" 1094 | is-stream "^2.0.0" 1095 | merge-stream "^2.0.0" 1096 | npm-run-path "^4.0.1" 1097 | onetime "^5.1.2" 1098 | signal-exit "^3.0.3" 1099 | strip-final-newline "^2.0.0" 1100 | 1101 | exit@^0.1.2: 1102 | version "0.1.2" 1103 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1104 | integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== 1105 | 1106 | expect@^29.5.0: 1107 | version "29.5.0" 1108 | resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" 1109 | integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== 1110 | dependencies: 1111 | "@jest/expect-utils" "^29.5.0" 1112 | jest-get-type "^29.4.3" 1113 | jest-matcher-utils "^29.5.0" 1114 | jest-message-util "^29.5.0" 1115 | jest-util "^29.5.0" 1116 | 1117 | extend@~3.0.2: 1118 | version "3.0.2" 1119 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 1120 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 1121 | 1122 | extsprintf@1.3.0: 1123 | version "1.3.0" 1124 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 1125 | integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== 1126 | 1127 | extsprintf@^1.2.0: 1128 | version "1.4.1" 1129 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" 1130 | integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== 1131 | 1132 | fast-deep-equal@^3.1.1: 1133 | version "3.1.3" 1134 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1135 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1136 | 1137 | fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: 1138 | version "2.1.0" 1139 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1140 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1141 | 1142 | fb-watchman@^2.0.0: 1143 | version "2.0.2" 1144 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" 1145 | integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== 1146 | dependencies: 1147 | bser "2.1.1" 1148 | 1149 | fill-range@^7.0.1: 1150 | version "7.0.1" 1151 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1152 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1153 | dependencies: 1154 | to-regex-range "^5.0.1" 1155 | 1156 | find-up@^4.0.0, find-up@^4.1.0: 1157 | version "4.1.0" 1158 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1159 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1160 | dependencies: 1161 | locate-path "^5.0.0" 1162 | path-exists "^4.0.0" 1163 | 1164 | forever-agent@~0.6.1: 1165 | version "0.6.1" 1166 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1167 | integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== 1168 | 1169 | form-data@~2.3.2: 1170 | version "2.3.3" 1171 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 1172 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 1173 | dependencies: 1174 | asynckit "^0.4.0" 1175 | combined-stream "^1.0.6" 1176 | mime-types "^2.1.12" 1177 | 1178 | fs.realpath@^1.0.0: 1179 | version "1.0.0" 1180 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1181 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1182 | 1183 | fsevents@^2.3.2: 1184 | version "2.3.2" 1185 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1186 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1187 | 1188 | fstream@^1.0.12: 1189 | version "1.0.12" 1190 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" 1191 | integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== 1192 | dependencies: 1193 | graceful-fs "^4.1.2" 1194 | inherits "~2.0.0" 1195 | mkdirp ">=0.5 0" 1196 | rimraf "2" 1197 | 1198 | function-bind@^1.1.1: 1199 | version "1.1.1" 1200 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1201 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1202 | 1203 | gensync@^1.0.0-beta.2: 1204 | version "1.0.0-beta.2" 1205 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1206 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1207 | 1208 | get-caller-file@^2.0.5: 1209 | version "2.0.5" 1210 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1211 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1212 | 1213 | get-package-type@^0.1.0: 1214 | version "0.1.0" 1215 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 1216 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 1217 | 1218 | get-stream@^6.0.0: 1219 | version "6.0.1" 1220 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1221 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1222 | 1223 | getpass@^0.1.1: 1224 | version "0.1.7" 1225 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1226 | integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== 1227 | dependencies: 1228 | assert-plus "^1.0.0" 1229 | 1230 | glob@^7.1.3, glob@^7.1.4: 1231 | version "7.2.3" 1232 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1233 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1234 | dependencies: 1235 | fs.realpath "^1.0.0" 1236 | inflight "^1.0.4" 1237 | inherits "2" 1238 | minimatch "^3.1.1" 1239 | once "^1.3.0" 1240 | path-is-absolute "^1.0.0" 1241 | 1242 | globals@^11.1.0: 1243 | version "11.12.0" 1244 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1245 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1246 | 1247 | graceful-fs@^4.1.2, graceful-fs@^4.2.9: 1248 | version "4.2.11" 1249 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1250 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1251 | 1252 | har-schema@^2.0.0: 1253 | version "2.0.0" 1254 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1255 | integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== 1256 | 1257 | har-validator@~5.1.3: 1258 | version "5.1.5" 1259 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" 1260 | integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== 1261 | dependencies: 1262 | ajv "^6.12.3" 1263 | har-schema "^2.0.0" 1264 | 1265 | has-flag@^3.0.0: 1266 | version "3.0.0" 1267 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1268 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1269 | 1270 | has-flag@^4.0.0: 1271 | version "4.0.0" 1272 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1273 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1274 | 1275 | has@^1.0.3: 1276 | version "1.0.3" 1277 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1278 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1279 | dependencies: 1280 | function-bind "^1.1.1" 1281 | 1282 | html-escaper@^2.0.0: 1283 | version "2.0.2" 1284 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1285 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1286 | 1287 | http-signature@~1.2.0: 1288 | version "1.2.0" 1289 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1290 | integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== 1291 | dependencies: 1292 | assert-plus "^1.0.0" 1293 | jsprim "^1.2.2" 1294 | sshpk "^1.7.0" 1295 | 1296 | human-signals@^2.1.0: 1297 | version "2.1.0" 1298 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1299 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1300 | 1301 | import-local@^3.0.2: 1302 | version "3.1.0" 1303 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 1304 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 1305 | dependencies: 1306 | pkg-dir "^4.2.0" 1307 | resolve-cwd "^3.0.0" 1308 | 1309 | imurmurhash@^0.1.4: 1310 | version "0.1.4" 1311 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1312 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1313 | 1314 | inflight@^1.0.4: 1315 | version "1.0.6" 1316 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1317 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1318 | dependencies: 1319 | once "^1.3.0" 1320 | wrappy "1" 1321 | 1322 | inherits@2, inherits@~2.0.0: 1323 | version "2.0.4" 1324 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1325 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1326 | 1327 | is-arrayish@^0.2.1: 1328 | version "0.2.1" 1329 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1330 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1331 | 1332 | is-core-module@^2.11.0: 1333 | version "2.12.1" 1334 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" 1335 | integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== 1336 | dependencies: 1337 | has "^1.0.3" 1338 | 1339 | is-fullwidth-code-point@^3.0.0: 1340 | version "3.0.0" 1341 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1342 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1343 | 1344 | is-generator-fn@^2.0.0: 1345 | version "2.1.0" 1346 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1347 | integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 1348 | 1349 | is-number@^7.0.0: 1350 | version "7.0.0" 1351 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1352 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1353 | 1354 | is-stream@^2.0.0: 1355 | version "2.0.1" 1356 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1357 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1358 | 1359 | is-typedarray@~1.0.0: 1360 | version "1.0.0" 1361 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1362 | integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== 1363 | 1364 | isexe@^2.0.0: 1365 | version "2.0.0" 1366 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1367 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1368 | 1369 | isstream@~0.1.2: 1370 | version "0.1.2" 1371 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1372 | integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== 1373 | 1374 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: 1375 | version "3.2.0" 1376 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" 1377 | integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== 1378 | 1379 | istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: 1380 | version "5.2.1" 1381 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" 1382 | integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== 1383 | dependencies: 1384 | "@babel/core" "^7.12.3" 1385 | "@babel/parser" "^7.14.7" 1386 | "@istanbuljs/schema" "^0.1.2" 1387 | istanbul-lib-coverage "^3.2.0" 1388 | semver "^6.3.0" 1389 | 1390 | istanbul-lib-report@^3.0.0: 1391 | version "3.0.0" 1392 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 1393 | integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 1394 | dependencies: 1395 | istanbul-lib-coverage "^3.0.0" 1396 | make-dir "^3.0.0" 1397 | supports-color "^7.1.0" 1398 | 1399 | istanbul-lib-source-maps@^4.0.0: 1400 | version "4.0.1" 1401 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" 1402 | integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== 1403 | dependencies: 1404 | debug "^4.1.1" 1405 | istanbul-lib-coverage "^3.0.0" 1406 | source-map "^0.6.1" 1407 | 1408 | istanbul-reports@^3.1.3: 1409 | version "3.1.5" 1410 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" 1411 | integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== 1412 | dependencies: 1413 | html-escaper "^2.0.0" 1414 | istanbul-lib-report "^3.0.0" 1415 | 1416 | jest-changed-files@^29.5.0: 1417 | version "29.5.0" 1418 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" 1419 | integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== 1420 | dependencies: 1421 | execa "^5.0.0" 1422 | p-limit "^3.1.0" 1423 | 1424 | jest-circus@^29.5.0: 1425 | version "29.5.0" 1426 | resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317" 1427 | integrity sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA== 1428 | dependencies: 1429 | "@jest/environment" "^29.5.0" 1430 | "@jest/expect" "^29.5.0" 1431 | "@jest/test-result" "^29.5.0" 1432 | "@jest/types" "^29.5.0" 1433 | "@types/node" "*" 1434 | chalk "^4.0.0" 1435 | co "^4.6.0" 1436 | dedent "^0.7.0" 1437 | is-generator-fn "^2.0.0" 1438 | jest-each "^29.5.0" 1439 | jest-matcher-utils "^29.5.0" 1440 | jest-message-util "^29.5.0" 1441 | jest-runtime "^29.5.0" 1442 | jest-snapshot "^29.5.0" 1443 | jest-util "^29.5.0" 1444 | p-limit "^3.1.0" 1445 | pretty-format "^29.5.0" 1446 | pure-rand "^6.0.0" 1447 | slash "^3.0.0" 1448 | stack-utils "^2.0.3" 1449 | 1450 | jest-cli@^29.5.0: 1451 | version "29.5.0" 1452 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67" 1453 | integrity sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw== 1454 | dependencies: 1455 | "@jest/core" "^29.5.0" 1456 | "@jest/test-result" "^29.5.0" 1457 | "@jest/types" "^29.5.0" 1458 | chalk "^4.0.0" 1459 | exit "^0.1.2" 1460 | graceful-fs "^4.2.9" 1461 | import-local "^3.0.2" 1462 | jest-config "^29.5.0" 1463 | jest-util "^29.5.0" 1464 | jest-validate "^29.5.0" 1465 | prompts "^2.0.1" 1466 | yargs "^17.3.1" 1467 | 1468 | jest-config@^29.5.0: 1469 | version "29.5.0" 1470 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da" 1471 | integrity sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA== 1472 | dependencies: 1473 | "@babel/core" "^7.11.6" 1474 | "@jest/test-sequencer" "^29.5.0" 1475 | "@jest/types" "^29.5.0" 1476 | babel-jest "^29.5.0" 1477 | chalk "^4.0.0" 1478 | ci-info "^3.2.0" 1479 | deepmerge "^4.2.2" 1480 | glob "^7.1.3" 1481 | graceful-fs "^4.2.9" 1482 | jest-circus "^29.5.0" 1483 | jest-environment-node "^29.5.0" 1484 | jest-get-type "^29.4.3" 1485 | jest-regex-util "^29.4.3" 1486 | jest-resolve "^29.5.0" 1487 | jest-runner "^29.5.0" 1488 | jest-util "^29.5.0" 1489 | jest-validate "^29.5.0" 1490 | micromatch "^4.0.4" 1491 | parse-json "^5.2.0" 1492 | pretty-format "^29.5.0" 1493 | slash "^3.0.0" 1494 | strip-json-comments "^3.1.1" 1495 | 1496 | jest-diff@^29.5.0: 1497 | version "29.5.0" 1498 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" 1499 | integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== 1500 | dependencies: 1501 | chalk "^4.0.0" 1502 | diff-sequences "^29.4.3" 1503 | jest-get-type "^29.4.3" 1504 | pretty-format "^29.5.0" 1505 | 1506 | jest-docblock@^29.4.3: 1507 | version "29.4.3" 1508 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" 1509 | integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== 1510 | dependencies: 1511 | detect-newline "^3.0.0" 1512 | 1513 | jest-each@^29.5.0: 1514 | version "29.5.0" 1515 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06" 1516 | integrity sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA== 1517 | dependencies: 1518 | "@jest/types" "^29.5.0" 1519 | chalk "^4.0.0" 1520 | jest-get-type "^29.4.3" 1521 | jest-util "^29.5.0" 1522 | pretty-format "^29.5.0" 1523 | 1524 | jest-environment-node@^29.5.0: 1525 | version "29.5.0" 1526 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" 1527 | integrity sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw== 1528 | dependencies: 1529 | "@jest/environment" "^29.5.0" 1530 | "@jest/fake-timers" "^29.5.0" 1531 | "@jest/types" "^29.5.0" 1532 | "@types/node" "*" 1533 | jest-mock "^29.5.0" 1534 | jest-util "^29.5.0" 1535 | 1536 | jest-get-type@^29.4.3: 1537 | version "29.4.3" 1538 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" 1539 | integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== 1540 | 1541 | jest-haste-map@^29.5.0: 1542 | version "29.5.0" 1543 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" 1544 | integrity sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA== 1545 | dependencies: 1546 | "@jest/types" "^29.5.0" 1547 | "@types/graceful-fs" "^4.1.3" 1548 | "@types/node" "*" 1549 | anymatch "^3.0.3" 1550 | fb-watchman "^2.0.0" 1551 | graceful-fs "^4.2.9" 1552 | jest-regex-util "^29.4.3" 1553 | jest-util "^29.5.0" 1554 | jest-worker "^29.5.0" 1555 | micromatch "^4.0.4" 1556 | walker "^1.0.8" 1557 | optionalDependencies: 1558 | fsevents "^2.3.2" 1559 | 1560 | jest-leak-detector@^29.5.0: 1561 | version "29.5.0" 1562 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" 1563 | integrity sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow== 1564 | dependencies: 1565 | jest-get-type "^29.4.3" 1566 | pretty-format "^29.5.0" 1567 | 1568 | jest-matcher-utils@^29.5.0: 1569 | version "29.5.0" 1570 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" 1571 | integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== 1572 | dependencies: 1573 | chalk "^4.0.0" 1574 | jest-diff "^29.5.0" 1575 | jest-get-type "^29.4.3" 1576 | pretty-format "^29.5.0" 1577 | 1578 | jest-message-util@^29.5.0: 1579 | version "29.5.0" 1580 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" 1581 | integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== 1582 | dependencies: 1583 | "@babel/code-frame" "^7.12.13" 1584 | "@jest/types" "^29.5.0" 1585 | "@types/stack-utils" "^2.0.0" 1586 | chalk "^4.0.0" 1587 | graceful-fs "^4.2.9" 1588 | micromatch "^4.0.4" 1589 | pretty-format "^29.5.0" 1590 | slash "^3.0.0" 1591 | stack-utils "^2.0.3" 1592 | 1593 | jest-mock@^29.5.0: 1594 | version "29.5.0" 1595 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" 1596 | integrity sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw== 1597 | dependencies: 1598 | "@jest/types" "^29.5.0" 1599 | "@types/node" "*" 1600 | jest-util "^29.5.0" 1601 | 1602 | jest-pnp-resolver@^1.2.2: 1603 | version "1.2.3" 1604 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" 1605 | integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== 1606 | 1607 | jest-regex-util@^29.4.3: 1608 | version "29.4.3" 1609 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" 1610 | integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== 1611 | 1612 | jest-resolve-dependencies@^29.5.0: 1613 | version "29.5.0" 1614 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" 1615 | integrity sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg== 1616 | dependencies: 1617 | jest-regex-util "^29.4.3" 1618 | jest-snapshot "^29.5.0" 1619 | 1620 | jest-resolve@^29.5.0: 1621 | version "29.5.0" 1622 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc" 1623 | integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w== 1624 | dependencies: 1625 | chalk "^4.0.0" 1626 | graceful-fs "^4.2.9" 1627 | jest-haste-map "^29.5.0" 1628 | jest-pnp-resolver "^1.2.2" 1629 | jest-util "^29.5.0" 1630 | jest-validate "^29.5.0" 1631 | resolve "^1.20.0" 1632 | resolve.exports "^2.0.0" 1633 | slash "^3.0.0" 1634 | 1635 | jest-runner@^29.5.0: 1636 | version "29.5.0" 1637 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8" 1638 | integrity sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ== 1639 | dependencies: 1640 | "@jest/console" "^29.5.0" 1641 | "@jest/environment" "^29.5.0" 1642 | "@jest/test-result" "^29.5.0" 1643 | "@jest/transform" "^29.5.0" 1644 | "@jest/types" "^29.5.0" 1645 | "@types/node" "*" 1646 | chalk "^4.0.0" 1647 | emittery "^0.13.1" 1648 | graceful-fs "^4.2.9" 1649 | jest-docblock "^29.4.3" 1650 | jest-environment-node "^29.5.0" 1651 | jest-haste-map "^29.5.0" 1652 | jest-leak-detector "^29.5.0" 1653 | jest-message-util "^29.5.0" 1654 | jest-resolve "^29.5.0" 1655 | jest-runtime "^29.5.0" 1656 | jest-util "^29.5.0" 1657 | jest-watcher "^29.5.0" 1658 | jest-worker "^29.5.0" 1659 | p-limit "^3.1.0" 1660 | source-map-support "0.5.13" 1661 | 1662 | jest-runtime@^29.5.0: 1663 | version "29.5.0" 1664 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420" 1665 | integrity sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw== 1666 | dependencies: 1667 | "@jest/environment" "^29.5.0" 1668 | "@jest/fake-timers" "^29.5.0" 1669 | "@jest/globals" "^29.5.0" 1670 | "@jest/source-map" "^29.4.3" 1671 | "@jest/test-result" "^29.5.0" 1672 | "@jest/transform" "^29.5.0" 1673 | "@jest/types" "^29.5.0" 1674 | "@types/node" "*" 1675 | chalk "^4.0.0" 1676 | cjs-module-lexer "^1.0.0" 1677 | collect-v8-coverage "^1.0.0" 1678 | glob "^7.1.3" 1679 | graceful-fs "^4.2.9" 1680 | jest-haste-map "^29.5.0" 1681 | jest-message-util "^29.5.0" 1682 | jest-mock "^29.5.0" 1683 | jest-regex-util "^29.4.3" 1684 | jest-resolve "^29.5.0" 1685 | jest-snapshot "^29.5.0" 1686 | jest-util "^29.5.0" 1687 | slash "^3.0.0" 1688 | strip-bom "^4.0.0" 1689 | 1690 | jest-snapshot@^29.5.0: 1691 | version "29.5.0" 1692 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce" 1693 | integrity sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g== 1694 | dependencies: 1695 | "@babel/core" "^7.11.6" 1696 | "@babel/generator" "^7.7.2" 1697 | "@babel/plugin-syntax-jsx" "^7.7.2" 1698 | "@babel/plugin-syntax-typescript" "^7.7.2" 1699 | "@babel/traverse" "^7.7.2" 1700 | "@babel/types" "^7.3.3" 1701 | "@jest/expect-utils" "^29.5.0" 1702 | "@jest/transform" "^29.5.0" 1703 | "@jest/types" "^29.5.0" 1704 | "@types/babel__traverse" "^7.0.6" 1705 | "@types/prettier" "^2.1.5" 1706 | babel-preset-current-node-syntax "^1.0.0" 1707 | chalk "^4.0.0" 1708 | expect "^29.5.0" 1709 | graceful-fs "^4.2.9" 1710 | jest-diff "^29.5.0" 1711 | jest-get-type "^29.4.3" 1712 | jest-matcher-utils "^29.5.0" 1713 | jest-message-util "^29.5.0" 1714 | jest-util "^29.5.0" 1715 | natural-compare "^1.4.0" 1716 | pretty-format "^29.5.0" 1717 | semver "^7.3.5" 1718 | 1719 | jest-util@^29.5.0: 1720 | version "29.5.0" 1721 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" 1722 | integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== 1723 | dependencies: 1724 | "@jest/types" "^29.5.0" 1725 | "@types/node" "*" 1726 | chalk "^4.0.0" 1727 | ci-info "^3.2.0" 1728 | graceful-fs "^4.2.9" 1729 | picomatch "^2.2.3" 1730 | 1731 | jest-validate@^29.5.0: 1732 | version "29.5.0" 1733 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" 1734 | integrity sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ== 1735 | dependencies: 1736 | "@jest/types" "^29.5.0" 1737 | camelcase "^6.2.0" 1738 | chalk "^4.0.0" 1739 | jest-get-type "^29.4.3" 1740 | leven "^3.1.0" 1741 | pretty-format "^29.5.0" 1742 | 1743 | jest-watcher@^29.5.0: 1744 | version "29.5.0" 1745 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363" 1746 | integrity sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA== 1747 | dependencies: 1748 | "@jest/test-result" "^29.5.0" 1749 | "@jest/types" "^29.5.0" 1750 | "@types/node" "*" 1751 | ansi-escapes "^4.2.1" 1752 | chalk "^4.0.0" 1753 | emittery "^0.13.1" 1754 | jest-util "^29.5.0" 1755 | string-length "^4.0.1" 1756 | 1757 | jest-worker@^29.5.0: 1758 | version "29.5.0" 1759 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" 1760 | integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== 1761 | dependencies: 1762 | "@types/node" "*" 1763 | jest-util "^29.5.0" 1764 | merge-stream "^2.0.0" 1765 | supports-color "^8.0.0" 1766 | 1767 | jest@29.5.0: 1768 | version "29.5.0" 1769 | resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" 1770 | integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== 1771 | dependencies: 1772 | "@jest/core" "^29.5.0" 1773 | "@jest/types" "^29.5.0" 1774 | import-local "^3.0.2" 1775 | jest-cli "^29.5.0" 1776 | 1777 | js-tokens@^4.0.0: 1778 | version "4.0.0" 1779 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1780 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1781 | 1782 | js-yaml@^3.13.1: 1783 | version "3.14.1" 1784 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1785 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1786 | dependencies: 1787 | argparse "^1.0.7" 1788 | esprima "^4.0.0" 1789 | 1790 | jsbn@~0.1.0: 1791 | version "0.1.1" 1792 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1793 | integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== 1794 | 1795 | jsesc@^2.5.1: 1796 | version "2.5.2" 1797 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1798 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1799 | 1800 | json-parse-even-better-errors@^2.3.0: 1801 | version "2.3.1" 1802 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1803 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1804 | 1805 | json-schema-traverse@^0.4.1: 1806 | version "0.4.1" 1807 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1808 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1809 | 1810 | json-schema@0.4.0: 1811 | version "0.4.0" 1812 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" 1813 | integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== 1814 | 1815 | json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: 1816 | version "5.0.1" 1817 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1818 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 1819 | 1820 | json5@^2.2.2: 1821 | version "2.2.3" 1822 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 1823 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 1824 | 1825 | jsprim@^1.2.2: 1826 | version "1.4.2" 1827 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" 1828 | integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== 1829 | dependencies: 1830 | assert-plus "1.0.0" 1831 | extsprintf "1.3.0" 1832 | json-schema "0.4.0" 1833 | verror "1.10.0" 1834 | 1835 | kleur@^3.0.3: 1836 | version "3.0.3" 1837 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 1838 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 1839 | 1840 | leven@^3.1.0: 1841 | version "3.1.0" 1842 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 1843 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 1844 | 1845 | lines-and-columns@^1.1.6: 1846 | version "1.2.4" 1847 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1848 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1849 | 1850 | locate-path@^5.0.0: 1851 | version "5.0.0" 1852 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1853 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1854 | dependencies: 1855 | p-locate "^4.1.0" 1856 | 1857 | lodash@^4.17.21: 1858 | version "4.17.21" 1859 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1860 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1861 | 1862 | lru-cache@^5.1.1: 1863 | version "5.1.1" 1864 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 1865 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 1866 | dependencies: 1867 | yallist "^3.0.2" 1868 | 1869 | lru-cache@^6.0.0: 1870 | version "6.0.0" 1871 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1872 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1873 | dependencies: 1874 | yallist "^4.0.0" 1875 | 1876 | make-dir@^3.0.0: 1877 | version "3.1.0" 1878 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1879 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1880 | dependencies: 1881 | semver "^6.0.0" 1882 | 1883 | makeerror@1.0.12: 1884 | version "1.0.12" 1885 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" 1886 | integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== 1887 | dependencies: 1888 | tmpl "1.0.5" 1889 | 1890 | merge-stream@^2.0.0: 1891 | version "2.0.0" 1892 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1893 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1894 | 1895 | micromatch@^4.0.4: 1896 | version "4.0.5" 1897 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1898 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1899 | dependencies: 1900 | braces "^3.0.2" 1901 | picomatch "^2.3.1" 1902 | 1903 | mime-db@1.52.0: 1904 | version "1.52.0" 1905 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1906 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1907 | 1908 | mime-types@^2.1.12, mime-types@~2.1.19: 1909 | version "2.1.35" 1910 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1911 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1912 | dependencies: 1913 | mime-db "1.52.0" 1914 | 1915 | mimic-fn@^2.1.0: 1916 | version "2.1.0" 1917 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1918 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1919 | 1920 | minimatch@^3.0.4, minimatch@^3.1.1: 1921 | version "3.1.2" 1922 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1923 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1924 | dependencies: 1925 | brace-expansion "^1.1.7" 1926 | 1927 | minimist@^1.2.6: 1928 | version "1.2.8" 1929 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 1930 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1931 | 1932 | "mkdirp@>=0.5 0": 1933 | version "0.5.6" 1934 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" 1935 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 1936 | dependencies: 1937 | minimist "^1.2.6" 1938 | 1939 | mkdirp@^1.0.4: 1940 | version "1.0.4" 1941 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1942 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1943 | 1944 | mock-fs@^5.2.0: 1945 | version "5.2.0" 1946 | resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.2.0.tgz#3502a9499c84c0a1218ee4bf92ae5bf2ea9b2b5e" 1947 | integrity sha512-2dF2R6YMSZbpip1V1WHKGLNjr/k48uQClqMVb5H3MOvwc9qhYis3/IWbj02qIg/Y8MDXKFF4c5v0rxx2o6xTZw== 1948 | 1949 | ms@2.1.2: 1950 | version "2.1.2" 1951 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1952 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1953 | 1954 | natural-compare@^1.4.0: 1955 | version "1.4.0" 1956 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1957 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1958 | 1959 | nock@^13.3.1: 1960 | version "13.3.1" 1961 | resolved "https://registry.yarnpkg.com/nock/-/nock-13.3.1.tgz#f22d4d661f7a05ebd9368edae1b5dc0a62d758fc" 1962 | integrity sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw== 1963 | dependencies: 1964 | debug "^4.1.0" 1965 | json-stringify-safe "^5.0.1" 1966 | lodash "^4.17.21" 1967 | propagate "^2.0.0" 1968 | 1969 | node-int64@^0.4.0: 1970 | version "0.4.0" 1971 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 1972 | integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== 1973 | 1974 | node-releases@^2.0.12: 1975 | version "2.0.12" 1976 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" 1977 | integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== 1978 | 1979 | normalize-path@^3.0.0: 1980 | version "3.0.0" 1981 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1982 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1983 | 1984 | npm-run-path@^4.0.1: 1985 | version "4.0.1" 1986 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1987 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1988 | dependencies: 1989 | path-key "^3.0.0" 1990 | 1991 | oauth-sign@~0.9.0: 1992 | version "0.9.0" 1993 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1994 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1995 | 1996 | once@^1.3.0: 1997 | version "1.4.0" 1998 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1999 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 2000 | dependencies: 2001 | wrappy "1" 2002 | 2003 | onetime@^5.1.2: 2004 | version "5.1.2" 2005 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 2006 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 2007 | dependencies: 2008 | mimic-fn "^2.1.0" 2009 | 2010 | p-limit@^2.2.0: 2011 | version "2.3.0" 2012 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2013 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2014 | dependencies: 2015 | p-try "^2.0.0" 2016 | 2017 | p-limit@^3.1.0: 2018 | version "3.1.0" 2019 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 2020 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2021 | dependencies: 2022 | yocto-queue "^0.1.0" 2023 | 2024 | p-locate@^4.1.0: 2025 | version "4.1.0" 2026 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 2027 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 2028 | dependencies: 2029 | p-limit "^2.2.0" 2030 | 2031 | p-try@^2.0.0: 2032 | version "2.2.0" 2033 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2034 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2035 | 2036 | parse-json@^5.2.0: 2037 | version "5.2.0" 2038 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 2039 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 2040 | dependencies: 2041 | "@babel/code-frame" "^7.0.0" 2042 | error-ex "^1.3.1" 2043 | json-parse-even-better-errors "^2.3.0" 2044 | lines-and-columns "^1.1.6" 2045 | 2046 | path-exists@^4.0.0: 2047 | version "4.0.0" 2048 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2049 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2050 | 2051 | path-is-absolute@^1.0.0: 2052 | version "1.0.1" 2053 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2054 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 2055 | 2056 | path-key@^3.0.0, path-key@^3.1.0: 2057 | version "3.1.1" 2058 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2059 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2060 | 2061 | path-parse@^1.0.7: 2062 | version "1.0.7" 2063 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2064 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2065 | 2066 | performance-now@^2.1.0: 2067 | version "2.1.0" 2068 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 2069 | integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== 2070 | 2071 | picocolors@^1.0.0: 2072 | version "1.0.0" 2073 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 2074 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 2075 | 2076 | picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: 2077 | version "2.3.1" 2078 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2079 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2080 | 2081 | pirates@^4.0.4: 2082 | version "4.0.5" 2083 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" 2084 | integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== 2085 | 2086 | pkg-dir@^4.2.0: 2087 | version "4.2.0" 2088 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2089 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2090 | dependencies: 2091 | find-up "^4.0.0" 2092 | 2093 | pretty-format@^29.5.0: 2094 | version "29.5.0" 2095 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" 2096 | integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== 2097 | dependencies: 2098 | "@jest/schemas" "^29.4.3" 2099 | ansi-styles "^5.0.0" 2100 | react-is "^18.0.0" 2101 | 2102 | prompts@^2.0.1: 2103 | version "2.4.2" 2104 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" 2105 | integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== 2106 | dependencies: 2107 | kleur "^3.0.3" 2108 | sisteransi "^1.0.5" 2109 | 2110 | propagate@^2.0.0: 2111 | version "2.0.1" 2112 | resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" 2113 | integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== 2114 | 2115 | psl@^1.1.28: 2116 | version "1.9.0" 2117 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" 2118 | integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== 2119 | 2120 | punycode@^2.1.0, punycode@^2.1.1: 2121 | version "2.3.0" 2122 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 2123 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 2124 | 2125 | pure-rand@^6.0.0: 2126 | version "6.0.2" 2127 | resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" 2128 | integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== 2129 | 2130 | qs@~6.5.2: 2131 | version "6.5.3" 2132 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" 2133 | integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== 2134 | 2135 | react-is@^18.0.0: 2136 | version "18.2.0" 2137 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" 2138 | integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== 2139 | 2140 | request@^2.88.2: 2141 | version "2.88.2" 2142 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 2143 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 2144 | dependencies: 2145 | aws-sign2 "~0.7.0" 2146 | aws4 "^1.8.0" 2147 | caseless "~0.12.0" 2148 | combined-stream "~1.0.6" 2149 | extend "~3.0.2" 2150 | forever-agent "~0.6.1" 2151 | form-data "~2.3.2" 2152 | har-validator "~5.1.3" 2153 | http-signature "~1.2.0" 2154 | is-typedarray "~1.0.0" 2155 | isstream "~0.1.2" 2156 | json-stringify-safe "~5.0.1" 2157 | mime-types "~2.1.19" 2158 | oauth-sign "~0.9.0" 2159 | performance-now "^2.1.0" 2160 | qs "~6.5.2" 2161 | safe-buffer "^5.1.2" 2162 | tough-cookie "~2.5.0" 2163 | tunnel-agent "^0.6.0" 2164 | uuid "^3.3.2" 2165 | 2166 | require-directory@^2.1.1: 2167 | version "2.1.1" 2168 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2169 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 2170 | 2171 | resolve-cwd@^3.0.0: 2172 | version "3.0.0" 2173 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 2174 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 2175 | dependencies: 2176 | resolve-from "^5.0.0" 2177 | 2178 | resolve-from@^5.0.0: 2179 | version "5.0.0" 2180 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2181 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2182 | 2183 | resolve.exports@^2.0.0: 2184 | version "2.0.2" 2185 | resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" 2186 | integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== 2187 | 2188 | resolve@^1.20.0: 2189 | version "1.22.2" 2190 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" 2191 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== 2192 | dependencies: 2193 | is-core-module "^2.11.0" 2194 | path-parse "^1.0.7" 2195 | supports-preserve-symlinks-flag "^1.0.0" 2196 | 2197 | rimraf@2: 2198 | version "2.7.1" 2199 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 2200 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 2201 | dependencies: 2202 | glob "^7.1.3" 2203 | 2204 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 2205 | version "5.2.1" 2206 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2207 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2208 | 2209 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 2210 | version "2.1.2" 2211 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2212 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2213 | 2214 | semver@^6.0.0, semver@^6.3.0: 2215 | version "6.3.0" 2216 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2217 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2218 | 2219 | semver@^7.3.5: 2220 | version "7.5.2" 2221 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" 2222 | integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== 2223 | dependencies: 2224 | lru-cache "^6.0.0" 2225 | 2226 | shebang-command@^2.0.0: 2227 | version "2.0.0" 2228 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2229 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2230 | dependencies: 2231 | shebang-regex "^3.0.0" 2232 | 2233 | shebang-regex@^3.0.0: 2234 | version "3.0.0" 2235 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2236 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2237 | 2238 | signal-exit@^3.0.3, signal-exit@^3.0.7: 2239 | version "3.0.7" 2240 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2241 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2242 | 2243 | sisteransi@^1.0.5: 2244 | version "1.0.5" 2245 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 2246 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 2247 | 2248 | slash@^3.0.0: 2249 | version "3.0.0" 2250 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2251 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2252 | 2253 | source-map-support@0.5.13: 2254 | version "0.5.13" 2255 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" 2256 | integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== 2257 | dependencies: 2258 | buffer-from "^1.0.0" 2259 | source-map "^0.6.0" 2260 | 2261 | source-map@^0.6.0, source-map@^0.6.1: 2262 | version "0.6.1" 2263 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2264 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2265 | 2266 | sprintf-js@~1.0.2: 2267 | version "1.0.3" 2268 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2269 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 2270 | 2271 | sshpk@^1.7.0: 2272 | version "1.17.0" 2273 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" 2274 | integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== 2275 | dependencies: 2276 | asn1 "~0.2.3" 2277 | assert-plus "^1.0.0" 2278 | bcrypt-pbkdf "^1.0.0" 2279 | dashdash "^1.12.0" 2280 | ecc-jsbn "~0.1.1" 2281 | getpass "^0.1.1" 2282 | jsbn "~0.1.0" 2283 | safer-buffer "^2.0.2" 2284 | tweetnacl "~0.14.0" 2285 | 2286 | stack-utils@^2.0.3: 2287 | version "2.0.6" 2288 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" 2289 | integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== 2290 | dependencies: 2291 | escape-string-regexp "^2.0.0" 2292 | 2293 | string-length@^4.0.1: 2294 | version "4.0.2" 2295 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" 2296 | integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== 2297 | dependencies: 2298 | char-regex "^1.0.2" 2299 | strip-ansi "^6.0.0" 2300 | 2301 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 2302 | version "4.2.3" 2303 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2304 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2305 | dependencies: 2306 | emoji-regex "^8.0.0" 2307 | is-fullwidth-code-point "^3.0.0" 2308 | strip-ansi "^6.0.1" 2309 | 2310 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2311 | version "6.0.1" 2312 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2313 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2314 | dependencies: 2315 | ansi-regex "^5.0.1" 2316 | 2317 | strip-bom@^4.0.0: 2318 | version "4.0.0" 2319 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 2320 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 2321 | 2322 | strip-final-newline@^2.0.0: 2323 | version "2.0.0" 2324 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2325 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2326 | 2327 | strip-json-comments@^3.1.1: 2328 | version "3.1.1" 2329 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2330 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2331 | 2332 | supports-color@^5.3.0: 2333 | version "5.5.0" 2334 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2335 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2336 | dependencies: 2337 | has-flag "^3.0.0" 2338 | 2339 | supports-color@^7.1.0: 2340 | version "7.2.0" 2341 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2342 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2343 | dependencies: 2344 | has-flag "^4.0.0" 2345 | 2346 | supports-color@^8.0.0: 2347 | version "8.1.1" 2348 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2349 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2350 | dependencies: 2351 | has-flag "^4.0.0" 2352 | 2353 | supports-preserve-symlinks-flag@^1.0.0: 2354 | version "1.0.0" 2355 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2356 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2357 | 2358 | tar@^2.2.2: 2359 | version "2.2.2" 2360 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" 2361 | integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== 2362 | dependencies: 2363 | block-stream "*" 2364 | fstream "^1.0.12" 2365 | inherits "2" 2366 | 2367 | test-exclude@^6.0.0: 2368 | version "6.0.0" 2369 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 2370 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 2371 | dependencies: 2372 | "@istanbuljs/schema" "^0.1.2" 2373 | glob "^7.1.4" 2374 | minimatch "^3.0.4" 2375 | 2376 | tmpl@1.0.5: 2377 | version "1.0.5" 2378 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" 2379 | integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== 2380 | 2381 | to-fast-properties@^2.0.0: 2382 | version "2.0.0" 2383 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2384 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 2385 | 2386 | to-regex-range@^5.0.1: 2387 | version "5.0.1" 2388 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2389 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2390 | dependencies: 2391 | is-number "^7.0.0" 2392 | 2393 | tough-cookie@~2.5.0: 2394 | version "2.5.0" 2395 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 2396 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 2397 | dependencies: 2398 | psl "^1.1.28" 2399 | punycode "^2.1.1" 2400 | 2401 | tunnel-agent@^0.6.0: 2402 | version "0.6.0" 2403 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2404 | integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== 2405 | dependencies: 2406 | safe-buffer "^5.0.1" 2407 | 2408 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2409 | version "0.14.5" 2410 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2411 | integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== 2412 | 2413 | type-detect@4.0.8: 2414 | version "4.0.8" 2415 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2416 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2417 | 2418 | type-fest@^0.21.3: 2419 | version "0.21.3" 2420 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 2421 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 2422 | 2423 | update-browserslist-db@^1.0.11: 2424 | version "1.0.11" 2425 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" 2426 | integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== 2427 | dependencies: 2428 | escalade "^3.1.1" 2429 | picocolors "^1.0.0" 2430 | 2431 | uri-js@^4.2.2: 2432 | version "4.4.1" 2433 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2434 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2435 | dependencies: 2436 | punycode "^2.1.0" 2437 | 2438 | used-pm@^1.0.0: 2439 | version "1.0.3" 2440 | resolved "https://registry.yarnpkg.com/used-pm/-/used-pm-1.0.3.tgz#9f7fc7aa761a17853d33eff51aa7da32be74495f" 2441 | integrity sha512-DvrJz8w3qyjAt+rXPcLNKXjB/OUfC1/ZCgwo1dLtFEopu6pUijV+RcPTmPf4mQbB/PsDdcRtdze0A81olKDNbg== 2442 | 2443 | uuid@^3.3.2: 2444 | version "3.4.0" 2445 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 2446 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 2447 | 2448 | v8-to-istanbul@^9.0.1: 2449 | version "9.1.0" 2450 | resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" 2451 | integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== 2452 | dependencies: 2453 | "@jridgewell/trace-mapping" "^0.3.12" 2454 | "@types/istanbul-lib-coverage" "^2.0.1" 2455 | convert-source-map "^1.6.0" 2456 | 2457 | verror@1.10.0: 2458 | version "1.10.0" 2459 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 2460 | integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== 2461 | dependencies: 2462 | assert-plus "^1.0.0" 2463 | core-util-is "1.0.2" 2464 | extsprintf "^1.2.0" 2465 | 2466 | walker@^1.0.8: 2467 | version "1.0.8" 2468 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" 2469 | integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== 2470 | dependencies: 2471 | makeerror "1.0.12" 2472 | 2473 | which@^2.0.1: 2474 | version "2.0.2" 2475 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2476 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2477 | dependencies: 2478 | isexe "^2.0.0" 2479 | 2480 | wrap-ansi@^7.0.0: 2481 | version "7.0.0" 2482 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2483 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2484 | dependencies: 2485 | ansi-styles "^4.0.0" 2486 | string-width "^4.1.0" 2487 | strip-ansi "^6.0.0" 2488 | 2489 | wrappy@1: 2490 | version "1.0.2" 2491 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2492 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2493 | 2494 | write-file-atomic@^4.0.2: 2495 | version "4.0.2" 2496 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" 2497 | integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== 2498 | dependencies: 2499 | imurmurhash "^0.1.4" 2500 | signal-exit "^3.0.7" 2501 | 2502 | y18n@^5.0.5: 2503 | version "5.0.8" 2504 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2505 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2506 | 2507 | yallist@^3.0.2: 2508 | version "3.1.1" 2509 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2510 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2511 | 2512 | yallist@^4.0.0: 2513 | version "4.0.0" 2514 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2515 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2516 | 2517 | yargs-parser@^21.1.1: 2518 | version "21.1.1" 2519 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" 2520 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 2521 | 2522 | yargs@^17.3.1: 2523 | version "17.7.2" 2524 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" 2525 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== 2526 | dependencies: 2527 | cliui "^8.0.1" 2528 | escalade "^3.1.1" 2529 | get-caller-file "^2.0.5" 2530 | require-directory "^2.1.1" 2531 | string-width "^4.2.3" 2532 | y18n "^5.0.5" 2533 | yargs-parser "^21.1.1" 2534 | 2535 | yocto-queue@^0.1.0: 2536 | version "0.1.0" 2537 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2538 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2539 | --------------------------------------------------------------------------------