├── .babelrc ├── .circleci └── config.yml ├── .eslintrc.js ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── node_modules └── .yarn-integrity ├── package.json ├── src ├── getters.js ├── index.js ├── messages.js ├── sdk-errors.js ├── send.js ├── signature.js └── simulate.js ├── test └── signature.spec.js ├── webpack.config.js ├── yarn-error.log └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@babel/preset-env" 5 | ] 6 | ], 7 | "plugins": [ 8 | "@babel/plugin-transform-runtime" 9 | ] 10 | } -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | 3 | # reusable commands 4 | commands: 5 | yarn-install: 6 | description: "[YARN] update and install" 7 | steps: 8 | - restore_cache: 9 | keys: 10 | - v4-dependencies-root-{{ checksum "package.json" }} 11 | - v4-dependencies-root- 12 | 13 | - run: yarn install 14 | - save_cache: 15 | paths: 16 | - yarn.lock 17 | - node_modules 18 | key: v4-dependencies-root-{{ checksum "package.json" }} 19 | 20 | jobs: 21 | pendingUpdated: 22 | docker: 23 | - image: circleci/node:10.15.3 24 | steps: 25 | - checkout 26 | - run: yarn add simsala 27 | - run: node node_modules/simsala/src/cli.js check 28 | 29 | lint: 30 | docker: 31 | - image: circleci/node:10.15.3 32 | steps: 33 | - checkout 34 | - yarn-install 35 | - run: yarn run lint 36 | 37 | testUnit: 38 | docker: 39 | - image: circleci/node:10.15.3 40 | steps: 41 | - checkout 42 | - yarn-install 43 | - run: 44 | name: Setup Code Climate test-reporter 45 | command: | 46 | # download test reporter as a static binary 47 | curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter 48 | chmod +x ./cc-test-reporter 49 | - run: 50 | name: Test 51 | command: | 52 | # notify Code Climate of a pending test report using `before-build` 53 | ./cc-test-reporter before-build 54 | yarn run test 55 | # upload test report to Code Climate 56 | ./cc-test-reporter format-coverage -t lcov ./coverage/lcov.info 57 | ./cc-test-reporter upload-coverage 58 | no_output_timeout: 120 59 | 60 | security: 61 | docker: 62 | - image: circleci/node:10.15.3 63 | steps: 64 | - checkout 65 | - run: 66 | name: Audit 67 | command: | 68 | set +e 69 | 70 | SUMMARY="$(yarn audit | grep Severity)" 71 | VULNERABILITIES=".*(High|Critical).*" 72 | 73 | if [[ $SUMMARY =~ $VULNERABILITIES ]]; then 74 | echo "Unsafe dependencies found: $SUMMARY" >&2 75 | exit 1 76 | fi 77 | echo "Your dependencies are secure enough: $SUMMARY" 78 | exit 0 79 | 80 | # Create release. 81 | release: 82 | docker: 83 | - image: circleci/node:10.15.3 84 | steps: 85 | - checkout 86 | - run: | 87 | yarn add simsala 88 | git config user.email "bot@lunie.io" 89 | git config user.name "Lunie Bot" 90 | node node_modules/simsala/src/cli.js release-candidate --semver prerelease --owner luniehq --repository cosmos-api --token $GIT_BOT_TOKEN 91 | 92 | # Push merges to master immediatly back to develop to stay in sync 93 | mergeBack: 94 | docker: 95 | - image: circleci/node:10.15.3 96 | steps: 97 | - checkout 98 | - run: 99 | command: | 100 | git remote add bot https://${GIT_BOT_TOKEN}@github.com/luniehq/lunie.git 101 | git checkout develop 102 | git pull 103 | git merge origin/master 104 | git push 105 | 106 | 107 | workflows: 108 | version: 2 109 | build-and-deploy: 110 | jobs: 111 | # Static checks before 112 | - pendingUpdated: 113 | filters: 114 | branches: 115 | ignore: 116 | - release 117 | - master 118 | 119 | - security: 120 | filters: 121 | branches: 122 | ignore: release 123 | 124 | - lint: 125 | filters: 126 | branches: 127 | ignore: release 128 | 129 | - testUnit: 130 | filters: 131 | branches: 132 | ignore: release 133 | releaseManually: 134 | jobs: 135 | - release: 136 | filters: 137 | branches: 138 | only: 139 | - release 140 | mergeBack: 141 | jobs: 142 | - mergeBack: 143 | filters: 144 | branches: 145 | only: master 146 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "extends": "standard" 3 | }; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | lib/* 3 | coverage -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 6 | and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 7 | 8 | 9 | 10 | ## [0.2.3] - 2019-12-18 11 | 12 | ### Fixed 13 | 14 | - [#24](https://github.com/cosmos/lunie/pull/24) Fix 'window is undefined' bug for UMD @colw 15 | 16 | ## [0.2.2] - 2019-11-15 17 | 18 | ### Fixed 19 | 20 | - Fix api.get.tx(hash) not working because of an unhandled response format @faboweb 21 | 22 | ## [0.2.1] - 2019-08-23 23 | 24 | ### Changed 25 | 26 | - Updated to support newest SDK version @faboweb 27 | 28 | ## [0.1.3] - 2019-08-06 29 | 30 | ### Added 31 | 32 | - Added collective validatorSigningInfos endpoint @faboweb 33 | 34 | ## [0.1.2] - 2019-08-01 35 | 36 | ### Added 37 | 38 | - Added minting endpoints @faboweb 39 | 40 | ## [0.1.1] - 2019-07-10 41 | 42 | ### Added 43 | 44 | - Export some lower level api calls to make it easier to integrate into other libs @faboweb 45 | - Return included transaction @faboweb 46 | 47 | ### Repository 48 | 49 | - Made repo CI ready @faboweb 50 | 51 | ## [0.0.23] - 2019-06-15 52 | 53 | ### Changed 54 | 55 | - Renamed module to cosmos-api @faboweb 56 | 57 | ### Fixed 58 | 59 | - Fixed depositing message @faboweb 60 | 61 | ## [0.0.22] - 2019-06-05 62 | 63 | ### Security 64 | 65 | - Updated axios @faboweb 66 | 67 | ## [0.0.21] - 2019-05-24 68 | 69 | ### Fixed 70 | 71 | - Fixed not all validators being loaded @faboweb 72 | 73 | ## [0.0.20] - 2019-05-23 74 | 75 | ### Fixed 76 | 77 | - Fixed inclusion check @faboweb 78 | 79 | ## [0.0.19] - 2019-05-22 80 | 81 | ### Fixed 82 | 83 | - Fix inclusion check @faboweb 84 | 85 | ## [0.0.18] - 2019-05-22 86 | 87 | ### Added 88 | 89 | - Check for errors on already broadcased transactions @faboweb 90 | 91 | ## [0.0.17] - 2019-05-22 92 | 93 | ### Changed 94 | 95 | - Increase gas adjustment to 1.5 @faboweb 96 | 97 | ## [0.0.16] - 2019-05-21 98 | 99 | ### Fixed 100 | 101 | - Fixed premature success message on tx inclusion failure @faboweb 102 | 103 | ## [0.0.15] - 2019-05-21 104 | 105 | ### Added 106 | 107 | - Added simsala release tool @faboweb 108 | 109 | ### Changed 110 | 111 | - Increase simulated gas by a factor of 1.2 as a recommendation of the SDK team @faboweb 112 | 113 | ### Fixed 114 | 115 | - Properly handle synchronous signers @faboweb -------------------------------------------------------------------------------- /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 | # Cosmos API 2 | Cosmos API is a library for interacting with applications built on the Cosmos SDK. 3 | 4 | ## Install 5 | 6 | ```bash 7 | yarn add @lunie/cosmos-api 8 | ``` 9 | 10 | ## Use 11 | 12 | Simple example of how to send tokens. 13 | 14 | ```javascript 15 | import Cosmos from "@lunie/cosmos-api" 16 | 17 | const STARGATE_URL = "https://stargate.cosmos.network" 18 | const ADDRESS = "cosmos1abcd1234" 19 | const cosmos = Cosmos(STARGATE_URL, ADDRESS) 20 | 21 | // create the transaction object 22 | const msg = cosmos 23 | .MsgSend({toAddress: 'cosmos1abcd09876', amounts: [{ denom: 'stake', amount: 10 }]}) 24 | 25 | // estimate the needed gas amount 26 | const gasEstimate = await msg.simulate() 27 | 28 | // create a signer 29 | const ledgerSigner = ... // async (signMessage: string) => { signature: Buffer, publicKey: Buffer } 30 | 31 | // send the transaction 32 | const { included }= await msg.send({ gas: gasEstimate }, ledgerSigner) 33 | 34 | // await tx to be included in a block 35 | await included() 36 | ``` 37 | 38 | ## API 39 | 40 | If you want to query data only, you don't need to specify an address. 41 | 42 | ```javascript 43 | import { API } from "@lunie/cosmos-api" 44 | 45 | const STARGATE_URL = "https://stargate.cosmos.network" 46 | 47 | const api = API(STARGATE_URL) 48 | 49 | const validators = await api.validators() 50 | ``` 51 | 52 | ### Create a sign message to sign with on a Ledger or with any other signer 53 | 54 | ```javascript 55 | const { signWithPrivateKey } = require('@lunie/cosmos-keys'); 56 | const { createSignMessage } = require('@lunie/cosmos-api'); 57 | 58 | const stdTx = { 59 | msg: [ 60 | { 61 | type: `cosmos-sdk/Send`, 62 | value: { 63 | inputs: [ 64 | { 65 | address: `cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66`, 66 | coins: [{ denom: `STAKE`, amount: `1` }] 67 | } 68 | ], 69 | outputs: [ 70 | { 71 | address: `cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt`, 72 | coins: [{ denom: `STAKE`, amount: `1` }] 73 | } 74 | ] 75 | } 76 | } 77 | ], 78 | fee: { amount: [{ denom: ``, amount: `0` }], gas: `21906` }, 79 | signatures: null, 80 | memo: `` 81 | } 82 | 83 | const signMessage = createSignMessage(stdTx, { sequence, accountNumber, chainId }); 84 | const signature = signWithPrivateKey(signMessage, Buffer.from(wallet.privateKey, 'hex')); 85 | ``` 86 | 87 | ### Create and sign a transaction from a message which then is ready to be broadcast 88 | 89 | ```javascript 90 | const { signWithPrivateKey } = require('@lunie/cosmos-keys'); 91 | const { createSignedTransaction } = require('@lunie/cosmos-api'); 92 | 93 | const sendMsg = { 94 | type: `cosmos-sdk/Send`, 95 | value: { 96 | inputs: [ 97 | { 98 | address: `cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66`, 99 | coins: [{ denom: `STAKE`, amount: `1` }] 100 | } 101 | ], 102 | outputs: [ 103 | { 104 | address: `cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt`, 105 | coins: [{ denom: `STAKE`, amount: `1` }] 106 | } 107 | ] 108 | } 109 | } 110 | 111 | const signer = signMessage = > signWithPrivateKey(signMessage, Buffer.from(wallet.privateKey, 'hex')) 112 | 113 | const signMessage = createSignedTransaction({ gas: 1000, gasPrices = [{ amount: "10", denom: "uatom" }], memo = `Hi from Lunie` }, [sendMsg], signer, chainId: "test-chain", accountNumber: 0, sequence: 12); 114 | ``` 115 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@lunie/cosmos-api", 3 | "version": "0.2.5", 4 | "description": "Cosmos API is a library for interacting with applications built on the Cosmos SDK.", 5 | "main": "lib/cosmos.js", 6 | "scripts": { 7 | "test": "jest", 8 | "lint": "eslint src/* --fix", 9 | "build": "webpack", 10 | "log": "simsala log", 11 | "release": "git checkout develop & git pull & git push origin develop:release" 12 | }, 13 | "keywords": [ 14 | "cosmos", 15 | "sdk", 16 | "blockchain" 17 | ], 18 | "author": "Lunie International Software Systems Inc. ", 19 | "licenses": [ 20 | { 21 | "license": "Apache-2.0" 22 | } 23 | ], 24 | "devDependencies": { 25 | "@babel/core": "^7.4.5", 26 | "@babel/plugin-transform-runtime": "^7.4.4", 27 | "@babel/preset-env": "^7.4.5", 28 | "babel-core": "^7.0.0-0", 29 | "babel-jest": "^26.0.1", 30 | "babel-loader": "^8.0.5", 31 | "eslint": "^6.1.0", 32 | "eslint-config-standard": "^14.1.1", 33 | "eslint-plugin-import": "^2.17.3", 34 | "eslint-plugin-node": "^11.1.0", 35 | "eslint-plugin-promise": "^4.1.1", 36 | "eslint-plugin-standard": "^4.0.0", 37 | "jest": "^26.0.1", 38 | "simsala": "^0.0.21", 39 | "webpack": "^4.31.0", 40 | "webpack-cli": "^3.3.2" 41 | }, 42 | "dependencies": { 43 | "@babel/runtime": "^7.5.4", 44 | "axios": "^0.19.0" 45 | }, 46 | "jest": { 47 | "transform": { 48 | ".*\\.js$": "/node_modules/babel-jest" 49 | }, 50 | "transformIgnorePatterns": [ 51 | "node_modules" 52 | ], 53 | "collectCoverage": true 54 | } 55 | } -------------------------------------------------------------------------------- /src/getters.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | /* eslint-env browser */ 4 | 5 | const RETRIES = 4 6 | 7 | export default function Getters (cosmosRESTURL) { 8 | // request and retry 9 | async function get (path, { page, limit, all } = { page: 1, limit: 30, all: false }, tries = RETRIES) { 10 | while (tries) { 11 | try { 12 | let url = cosmosRESTURL + path 13 | const isTxsPagination = path.startsWith('/txs?') 14 | if (isTxsPagination) url = url + `&page=${page}&limit=${limit}` 15 | 16 | const response = await fetch(url).then(res => res.json()) 17 | 18 | // handle txs pagination 19 | if (isTxsPagination) { 20 | if (!all || Number(response.page_number) >= Number(response.page_total)) return response.txs 21 | 22 | return response.txs.concat(await get(path, { page: page + 1, limit, all })) 23 | } 24 | 25 | // handle height wrappers 26 | // most responses are wrapped in a construct containing height and the actual result 27 | if (response.height !== undefined && response.result !== undefined) { 28 | return response.result 29 | } 30 | 31 | return response 32 | } catch (err) { 33 | if (--tries === 0) { 34 | throw err 35 | } 36 | } 37 | } 38 | } 39 | 40 | return { 41 | url: cosmosRESTURL, 42 | 43 | // meta 44 | connected: function () { 45 | return this.nodeVersion().then(() => true, () => false) 46 | }, 47 | 48 | nodeVersion: () => fetch(cosmosRESTURL + `/node_version`).then(res => res.text()), 49 | 50 | // coins 51 | account: function (address) { 52 | const emptyAccount = { 53 | coins: [], 54 | sequence: `0`, 55 | account_number: `0` 56 | } 57 | return get(`/auth/accounts/${address}`) 58 | .then(res => { 59 | if (!res) return emptyAccount 60 | let account = res.value || emptyAccount 61 | // HACK, hope for: https://github.com/cosmos/cosmos-sdk/issues/3885 62 | if (res.type === `auth/DelayedVestingAccount`) { 63 | if (!account.BaseVestingAccount) { 64 | console.error( 65 | `SDK format of vesting accounts responses has changed` 66 | ) 67 | return emptyAccount 68 | } 69 | account = Object.assign( 70 | {}, 71 | account.BaseVestingAccount.BaseAccount, 72 | account.BaseVestingAccount 73 | ) 74 | delete account.BaseAccount 75 | delete account.BaseVestingAccount 76 | } 77 | return account 78 | }) 79 | .catch(err => { 80 | // if account not found, return null instead of throwing 81 | if ( 82 | err.response && 83 | (err.response.data.includes(`account bytes are empty`) || 84 | err.response.data.includes(`failed to prove merkle proof`)) 85 | ) { 86 | return emptyAccount 87 | } 88 | throw err 89 | }) 90 | }, 91 | txs: function (addr, paginationOptions) { 92 | return get(`/txs?message.sender=${addr}`, paginationOptions) 93 | }, 94 | bankTxs: function (addr, paginationOptions) { 95 | return Promise.all([ 96 | get(`/txs?message.sender=${addr}`, paginationOptions), 97 | get(`/txs?message.recipient=${addr}`, paginationOptions) 98 | ]).then(([senderTxs, recipientTxs]) => [].concat(senderTxs, recipientTxs)) 99 | }, 100 | txsByHeight: function (height, paginationOptions) { 101 | return get(`/txs?tx.height=${height}`, paginationOptions) 102 | }, 103 | tx: hash => get(`/txs/${hash}`), 104 | 105 | /* ============ STAKE ============ */ 106 | stakingTxs: async function (address, valAddress, paginationOptions) { 107 | return Promise.all([ 108 | get( 109 | `/txs?message.action=create_validator&message.destination-validator=${valAddress}`, paginationOptions), 110 | get( 111 | `/txs?message.action=edit_validator&message.destination-validator=${valAddress}`, paginationOptions), 112 | get(`/txs?message.action=delegate&message.delegator=${address}`), 113 | get(`/txs?message.action=begin_redelegate&message.delegator=${address}`, paginationOptions), 114 | get(`/txs?message.action=begin_unbonding&message.delegator=${address}`, paginationOptions), 115 | get(`/txs?message.action=unjail&message.source-validator=${valAddress}`, paginationOptions) 116 | ]).then(([ 117 | createValidatorTxs, 118 | editValidatorTxs, 119 | delegationTxs, 120 | redelegationTxs, 121 | undelegationTxs, 122 | unjailTxs 123 | ]) => 124 | [].concat( 125 | createValidatorTxs, 126 | editValidatorTxs, 127 | delegationTxs, 128 | redelegationTxs, 129 | undelegationTxs, 130 | unjailTxs 131 | ) 132 | ) 133 | }, 134 | // Get all delegations information from a delegator 135 | delegations: function (addr) { 136 | return get(`/staking/delegators/${addr}/delegations`) 137 | }, 138 | undelegations: function (addr) { 139 | return get( 140 | 141 | `/staking/delegators/${addr}/unbonding_delegations`, 142 | true 143 | ) 144 | }, 145 | redelegations: function (addr) { 146 | return get(`/staking/redelegations?delegator=${addr}`) 147 | }, 148 | // Query all validators that a delegator is bonded to 149 | delegatorValidators: function (delegatorAddr) { 150 | return get(`/staking/delegators/${delegatorAddr}/validators`) 151 | }, 152 | // Get a list containing all the validator candidates 153 | validators: () => Promise.all([ 154 | get(`/staking/validators?status=unbonding`), 155 | get(`/staking/validators?status=bonded`), 156 | get(`/staking/validators?status=unbonded`) 157 | ]).then((validatorGroups) => 158 | [].concat(...validatorGroups) 159 | ), 160 | // Get information from a validator 161 | validator: function (addr) { 162 | return get(`/staking/validators/${addr}`) 163 | }, 164 | 165 | // Get the list of the validators in the latest validator set 166 | validatorSet: () => get(`/validatorsets/latest`), 167 | 168 | // Query a delegation between a delegator and a validator 169 | delegation: function (delegatorAddr, validatorAddr) { 170 | return get( 171 | 172 | `/staking/delegators/${delegatorAddr}/delegations/${validatorAddr}`, 173 | true 174 | ) 175 | }, 176 | unbondingDelegation: function (delegatorAddr, validatorAddr) { 177 | return get( 178 | 179 | `/staking/delegators/${delegatorAddr}/unbonding_delegations/${validatorAddr}`, 180 | true 181 | ) 182 | }, 183 | pool: () => get(`/staking/pool`), 184 | stakingParameters: () => get(`/staking/parameters`), 185 | 186 | /* ============ Slashing ============ */ 187 | 188 | validatorSigningInfo: function (pubKey) { 189 | return get(`/slashing/validators/${pubKey}/signing_info`) 190 | }, 191 | validatorSigningInfos: function () { 192 | return get(`/slashing/signing_infos`) 193 | }, 194 | 195 | /* ============ Governance ============ */ 196 | 197 | proposals: () => get(`/gov/proposals`), 198 | proposal: function (proposalId) { 199 | return get(`/gov/proposals/${proposalId}`) 200 | }, 201 | proposer: function (proposalId) { 202 | return get(`/gov/proposals/${proposalId}/proposer`) 203 | }, 204 | proposalVotes: function (proposalId) { 205 | return get(`/gov/proposals/${proposalId}/votes`) 206 | }, 207 | proposalVote: function (proposalId, address) { 208 | return get(`/gov/proposals/${proposalId}/votes/${address}`) 209 | }, 210 | proposalDeposits: function (proposalId) { 211 | return get(`/gov/proposals/${proposalId}/deposits`) 212 | }, 213 | proposalDeposit: function (proposalId, address) { 214 | return get( 215 | 216 | `/gov/proposals/${proposalId}/deposits/${address}`, 217 | true 218 | ) 219 | }, 220 | proposalTally: function (proposalId) { 221 | return get(`/gov/proposals/${proposalId}/tally`) 222 | }, 223 | govDepositParameters: () => get(`/gov/parameters/deposit`), 224 | govTallyingParameters: () => get(`/gov/parameters/tallying`), 225 | govVotingParameters: () => get(`/gov/parameters/voting`), 226 | governanceTxs: async function (address) { 227 | return Promise.all([ 228 | get(`/txs?message.action=submit_proposal&message.proposer=${address}`), 229 | get(`/txs?message.action=deposit&message.depositor=${address}`), 230 | get(`/txs?message.action=vote&message.voter=${address}`) 231 | ]).then(([submitProposalTxs, depositTxs, voteTxs]) => 232 | [].concat(submitProposalTxs, depositTxs, voteTxs) 233 | ) 234 | }, 235 | /* ============ Explorer ============ */ 236 | block: function (blockHeight) { 237 | return get(`/blocks/${blockHeight}`) 238 | }, 239 | /* ============ Distribution ============ */ 240 | distributionTxs: async function (address, valAddress) { 241 | return Promise.all([ 242 | get(`/txs?message.action=set_withdraw_address&message.delegator=${address}`), 243 | get(`/txs?message.action=withdraw_delegator_reward&message.delegator=${address}`), 244 | get(`/txs?message.action=withdraw_validator_rewards_all&message.source-validator=${valAddress}`) 245 | ]).then(([ 246 | updateWithdrawAddressTxs, 247 | withdrawDelegationRewardsTxs, 248 | withdrawValidatorCommissionTxs 249 | ]) => 250 | [].concat( 251 | updateWithdrawAddressTxs, 252 | withdrawDelegationRewardsTxs, 253 | withdrawValidatorCommissionTxs 254 | ) 255 | ) 256 | }, 257 | delegatorRewards: function (delegatorAddr) { 258 | return get(`/distribution/delegators/${delegatorAddr}/rewards`) 259 | }, 260 | delegatorRewardsFromValidator: async function (delegatorAddr, validatorAddr) { 261 | return (await get( 262 | `/distribution/delegators/${delegatorAddr}/rewards/${validatorAddr}` 263 | )) || [] 264 | }, 265 | validatorDistributionInformation: function (validatorAddr) { 266 | return get(`/distribution/validators/${validatorAddr}`) 267 | }, 268 | validatorRewards: function (validatorAddr) { 269 | return get(`/distribution/validators/${validatorAddr}/rewards`) 270 | }, 271 | distributionParameters: function () { 272 | return get(`/distribution/parameters`) 273 | }, 274 | distributionOutstandingRewards: function () { 275 | return get(`/distribution/outstanding_rewards`) 276 | }, 277 | 278 | annualProvisionedTokens: function () { 279 | return get(`/minting/annual-provisions`) 280 | }, 281 | inflation: function () { 282 | return get(`/minting/inflation`) 283 | }, 284 | mintingParameters: function () { 285 | return get(`/minting/parameters`) 286 | } 287 | } 288 | } 289 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import _Getters from './getters' 2 | import send from './send' 3 | import simulate from './simulate' 4 | import * as MessageConstructors from './messages' 5 | 6 | /* 7 | * Sender object to build and send transactions 8 | * Example: 9 | * const cosmos = Cosmos("https://stargate.lunie.io", "cosmos1abcd1234") 10 | * const msg = cosmos 11 | * .MsgSend({toAddress: 'cosmos1abcd09876', amounts: [{ denom: 'stake', amount: 10 }}) 12 | * const gasEstimate = await msg.simulate() 13 | * const ledgerSigner = ... // async (signMessage: string) => { signature: Buffer, publicKey: Buffer } 14 | * const { included }= await msg.send({ gas: gasEstimate }, ledgerSigner) 15 | * await included() 16 | */ 17 | 18 | export default class Cosmos { 19 | constructor (cosmosRESTURL, chainId = undefined) { 20 | this.url = cosmosRESTURL 21 | this.get = {} 22 | this.accounts = {} // storing sequence numbers to not send two transactions with the same sequence number 23 | this.chainId = chainId 24 | 25 | const getters = _Getters(cosmosRESTURL) 26 | Object.keys(getters).forEach(getter => { 27 | this.get[getter] = getters[getter] 28 | }) 29 | 30 | // add message constructors to the Sender to provide a simple API 31 | Object.entries(MessageConstructors) 32 | .forEach(([name, messageConstructor]) => { 33 | this[name] = function (senderAddress, args) { 34 | const message = messageConstructor(senderAddress, args) 35 | 36 | return { 37 | message, 38 | simulate: ({ memo = undefined }) => this.simulate(senderAddress, { message, memo }), 39 | send: ({ gas, gasPrices, memo = undefined }, signer) => this.send(senderAddress, { gas, gasPrices, memo }, message, signer) 40 | } 41 | } 42 | }) 43 | 44 | this.MultiMessage = function (senderAddress, ...messageObjects) { 45 | const allMessageObjects = [].concat(...messageObjects) 46 | const messages = allMessageObjects.map(({ message }) => message) 47 | return { 48 | messages, 49 | simulate: ({ memo = undefined }) => this.simulate(senderAddress, { message: messages[0], memo }), // TODO include actual mutli message simulation 50 | send: ({ gas, gasPrices, memo = undefined }, signer) => this.send(senderAddress, { gas, gasPrices, memo }, messages, signer) 51 | } 52 | } 53 | } 54 | 55 | async setChainId (chainId = this.chainId) { 56 | if (!chainId) { 57 | const { block_meta: { header: { chain_id: latestChainId } } } = await this.get.block('latest') 58 | chainId = latestChainId 59 | } 60 | this.chainId = chainId 61 | 62 | return chainId 63 | } 64 | 65 | async getAccount (senderAddress) { 66 | const { sequence, account_number: accountNumber } = await this.get.account(senderAddress) 67 | this.accounts[senderAddress] = { 68 | // prevent downgrading a sequence number as we assume we send a transaction that hasn't affected the remote sequence number yet 69 | sequence: this.accounts[senderAddress] && sequence < this.accounts[senderAddress].sequence 70 | ? this.accounts[senderAddress].sequence 71 | : sequence, 72 | accountNumber 73 | } 74 | 75 | return this.accounts[senderAddress] 76 | } 77 | 78 | /* 79 | * message: object 80 | * signer: async (signMessage: string) => { signature: Buffer, publicKey: Buffer } 81 | */ 82 | async send (senderAddress, { gas, gasPrices, memo }, messages, signer) { 83 | const chainId = await this.setChainId() 84 | const { sequence, accountNumber } = await this.getAccount(senderAddress) 85 | 86 | const { 87 | hash, 88 | included 89 | } = await send({ gas, gasPrices, memo }, messages, signer, this.url, chainId, accountNumber, sequence) 90 | this.accounts[senderAddress].sequence = (parseInt(this.accounts[senderAddress].sequence) + 1).toString(); 91 | 92 | return { 93 | hash, 94 | sequence, 95 | included 96 | } 97 | } 98 | 99 | async simulate (senderAddress, { message, memo = undefined }) { 100 | const chainId = await this.setChainId() 101 | const { sequence, accountNumber } = await this.getAccount(senderAddress) 102 | 103 | return simulate(this.url, senderAddress, chainId, message, memo, sequence, accountNumber) 104 | } 105 | } 106 | 107 | export { createSignedTransaction } from './send' 108 | export { createSignMessage } from './signature' 109 | -------------------------------------------------------------------------------- /src/messages.js: -------------------------------------------------------------------------------- 1 | // Bank 2 | export function MsgSend ( 3 | senderAddress, 4 | { 5 | toAddress, 6 | amounts // [{ denom, amount}] 7 | } 8 | ) { 9 | return { 10 | type: `cosmos-sdk/MsgSend`, 11 | value: { 12 | from_address: senderAddress, 13 | to_address: toAddress, 14 | amount: amounts.map(Coin) 15 | } 16 | } 17 | } 18 | 19 | // Staking 20 | export function MsgDelegate ( 21 | senderAddress, 22 | { 23 | validatorAddress, 24 | amount, 25 | denom 26 | } 27 | ) { 28 | return { 29 | type: `cosmos-sdk/MsgDelegate`, 30 | value: { 31 | delegator_address: senderAddress, 32 | validator_address: validatorAddress, 33 | amount: Coin({ amount, denom }) 34 | } 35 | } 36 | } 37 | 38 | export function MsgUndelegate ( 39 | senderAddress, 40 | { 41 | validatorAddress, 42 | amount, 43 | denom 44 | } 45 | ) { 46 | return { 47 | type: `cosmos-sdk/MsgUndelegate`, 48 | value: { 49 | validator_address: validatorAddress, 50 | delegator_address: senderAddress, 51 | amount: Coin({ amount, denom }) 52 | } 53 | } 54 | } 55 | 56 | export function MsgRedelegate ( 57 | senderAddress, 58 | { 59 | validatorSourceAddress, 60 | validatorDestinationAddress, 61 | amount, 62 | denom 63 | } 64 | ) { 65 | return { 66 | type: `cosmos-sdk/MsgBeginRedelegate`, 67 | value: { 68 | delegator_address: senderAddress, 69 | validator_src_address: validatorSourceAddress, 70 | validator_dst_address: validatorDestinationAddress, 71 | amount: Coin({ amount, denom }) 72 | } 73 | } 74 | } 75 | 76 | // Governance 77 | 78 | export function MsgSubmitProposal ( 79 | senderAddress, 80 | { 81 | proposalType, 82 | title, 83 | description, 84 | initialDeposits // [{ denom, amount }] 85 | } 86 | ) { 87 | return { 88 | type: `cosmos-sdk/MsgSubmitProposal`, 89 | value: { 90 | content: { 91 | type: 'cosmos-sdk/TextProposal', 92 | value: { 93 | title, 94 | description 95 | } 96 | }, 97 | proposer: senderAddress, 98 | initial_deposit: initialDeposits.map(Coin) 99 | } 100 | } 101 | } 102 | 103 | export function MsgVote ( 104 | senderAddress, 105 | { 106 | proposalId, 107 | option 108 | } 109 | ) { 110 | return { 111 | type: `cosmos-sdk/MsgVote`, 112 | value: { 113 | voter: senderAddress, 114 | proposal_id: proposalId, 115 | option 116 | } 117 | } 118 | } 119 | 120 | export function MsgDeposit ( 121 | senderAddress, 122 | { 123 | proposalId, 124 | amounts // [{ denom, amount }] 125 | } 126 | ) { 127 | return { 128 | type: `cosmos-sdk/MsgDeposit`, 129 | value: { 130 | depositor: senderAddress, 131 | proposal_id: proposalId, 132 | amount: amounts.map(Coin) 133 | } 134 | } 135 | } 136 | 137 | export function MsgWithdrawDelegationReward ( 138 | senderAddress, 139 | { 140 | validatorAddress 141 | } 142 | ) { 143 | return { 144 | type: `cosmos-sdk/MsgWithdrawDelegationReward`, 145 | value: { 146 | delegator_address: senderAddress, 147 | validator_address: validatorAddress 148 | } 149 | } 150 | } 151 | 152 | function Coin ({ amount, denom }) { 153 | return ({ 154 | amount: String(amount), 155 | denom 156 | }) 157 | } 158 | 159 | export default { 160 | 'MsgSend': MsgSend, 161 | 'MsgDelegate': MsgDelegate, 162 | 'MsgUndelegate': MsgUndelegate, 163 | 'MsgRedelegate': MsgRedelegate, 164 | 'MsgSubmitProposal': MsgSubmitProposal, 165 | 'MsgVote': MsgVote, 166 | 'MsgDeposit': MsgDeposit, 167 | 'MsgWithdrawDelegationReward': MsgWithdrawDelegationReward 168 | } 169 | -------------------------------------------------------------------------------- /src/sdk-errors.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // convert an SDK error code into a meaningful text message 4 | export function getErrorMessage (code) { 5 | return ( 6 | { 7 | 1: `internal error`, 8 | 2: `tx parse error`, 9 | 3: `invalid sequence`, 10 | 4: `unauthorized`, 11 | 5: `insufficient funds`, 12 | 6: `unknown request`, 13 | 7: `invalid address`, 14 | 8: `invalid pubkey`, 15 | 9: `unknown address`, 16 | 10: `insufficient coins`, 17 | 11: `invalid coins`, 18 | 12: `out of gas`, 19 | 13: `memo too large`, 20 | 14: `insufficient fee`, 21 | 15: `maximum number of signatures exceeded`, 22 | 16: `amount of gas exceeded maximum allowed size`, 23 | 17: `no signatures supplied` 24 | }[code] || `unknown error` 25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /src/send.js: -------------------------------------------------------------------------------- 1 | /* eslint-env browser */ 2 | 3 | import { createSignMessage, createSignature } from './signature' 4 | 5 | const DEFAULT_GAS_PRICE = [{ amount: (2.5e-8).toFixed(9), denom: `uatom` }] 6 | 7 | export default async function send ({ gas, gasPrices = DEFAULT_GAS_PRICE, memo = `` }, messages, signer, cosmosRESTURL, chainId, accountNumber, sequence) { 8 | const signedTx = await createSignedTransaction({ gas, gasPrices, memo }, messages, signer, chainId, accountNumber, sequence) 9 | 10 | // broadcast transaction with signatures included 11 | const body = createBroadcastBody(signedTx, `sync`) 12 | const res = await fetch(`${cosmosRESTURL}/txs`, { 13 | method: `POST`, 14 | headers: { 15 | 'Content-Type': 'application/json' 16 | }, 17 | body }) 18 | .then(res => res.json()) 19 | .then(assertOk) 20 | 21 | return { 22 | hash: res.txhash, 23 | sequence, 24 | included: () => queryTxInclusion(res.txhash, cosmosRESTURL) 25 | } 26 | } 27 | 28 | export async function createSignedTransaction ({ gas, gasPrices = DEFAULT_GAS_PRICE, memo = `` }, messages, signer, chainId, accountNumber, sequence) { 29 | // sign transaction 30 | const stdTx = createStdTx({ gas, gasPrices, memo }, messages) 31 | const signMessage = createSignMessage(stdTx, { sequence, accountNumber, chainId }) 32 | let signature, publicKey 33 | try { 34 | ({ signature, publicKey } = await signer(signMessage)) 35 | } catch (err) { 36 | throw new Error('Signing failed: ' + err.message) 37 | } 38 | 39 | const signatureObject = createSignature(signature, sequence, accountNumber, publicKey) 40 | const signedTx = createSignedTransactionObject(stdTx, signatureObject) 41 | 42 | return signedTx 43 | } 44 | 45 | // wait for inclusion of a tx in a block 46 | // Default waiting time: 60 * 3s = 180s 47 | export async function queryTxInclusion (txHash, cosmosRESTURL, iterations = 60, timeout = 3000) { 48 | let includedTx 49 | while (iterations-- > 0) { 50 | try { 51 | includedTx = await fetch(`${cosmosRESTURL}/txs/${txHash}`) 52 | .then(function (response) { 53 | if (response.status >= 200 && response.status < 300) { 54 | return Promise.resolve(response.json()) 55 | } else { 56 | var error = new Error(response.statusText || response.status) 57 | error.response = response 58 | return Promise.reject(error) 59 | } 60 | }) 61 | break 62 | } catch (err) { 63 | // tx wasn't included in a block yet 64 | await new Promise(resolve => 65 | setTimeout(resolve, timeout) 66 | ) 67 | } 68 | } 69 | if (iterations <= 0) { 70 | throw new Error(`The transaction was still not included in a block. We can't say for certain it will be included in the future.`) 71 | } 72 | 73 | assertOk(includedTx) 74 | 75 | return includedTx 76 | } 77 | 78 | // attaches the request meta data to the message 79 | export function createStdTx ({ gas, gasPrices, memo }, messages) { 80 | const fees = gasPrices.map(({ amount, denom }) => ({ amount: String(Math.round(amount * gas)), denom })) 81 | .filter(({ amount }) => amount > 0) 82 | return { 83 | msg: Array.isArray(messages) ? messages : [messages], 84 | fee: { 85 | amount: fees.length > 0 ? fees : null, 86 | gas 87 | }, 88 | signatures: null, 89 | memo 90 | } 91 | } 92 | 93 | // the broadcast body consists of the signed tx and a return type 94 | // returnType can be block (inclusion in block), async (right away), sync (after checkTx has passed) 95 | function createBroadcastBody (signedTx, returnType = `sync`) { 96 | return JSON.stringify({ 97 | tx: signedTx, 98 | mode: returnType 99 | }) 100 | } 101 | 102 | // adds the signature object to the tx 103 | function createSignedTransactionObject (tx, signature) { 104 | return Object.assign({}, tx, { 105 | signatures: [signature] 106 | }) 107 | } 108 | 109 | // assert that a transaction was sent successful 110 | function assertOk (res) { 111 | if (Array.isArray(res)) { 112 | if (res.length === 0) throw new Error(`Error sending transaction`) 113 | 114 | res.forEach(assertOk) 115 | } 116 | 117 | if (res.error) { 118 | throw new Error(res.error) 119 | } 120 | 121 | // Sometimes we get back failed transactions, which shows only by them having a `code` property 122 | if (res.code) { 123 | const message = JSON.parse(res.raw_log).message 124 | throw new Error(message) 125 | } 126 | 127 | if (!res.txhash) { 128 | const message = res.message 129 | throw new Error(message) 130 | } 131 | 132 | return res 133 | } 134 | -------------------------------------------------------------------------------- /src/signature.js: -------------------------------------------------------------------------------- 1 | /* 2 | The SDK expects a certain message format to serialize and then sign. 3 | 4 | type StdSignMsg struct { 5 | ChainID string `json:"chain_id"` 6 | AccountNumber uint64 `json:"account_number"` 7 | Sequence uint64 `json:"sequence"` 8 | Fee auth.StdFee `json:"fee"` 9 | Msgs []sdk.Msg `json:"msgs"` 10 | Memo string `json:"memo"` 11 | } 12 | */ 13 | export function createSignMessage ( 14 | jsonTx, 15 | { sequence, accountNumber, chainId } 16 | ) { 17 | // sign bytes need amount to be an array 18 | const fee = { 19 | amount: jsonTx.fee.amount || [], 20 | gas: jsonTx.fee.gas 21 | } 22 | 23 | return JSON.stringify( 24 | removeEmptyProperties({ 25 | fee, 26 | memo: jsonTx.memo, 27 | msgs: jsonTx.msg, // weird msg vs. msgs 28 | sequence, 29 | account_number: accountNumber, 30 | chain_id: chainId 31 | }) 32 | ) 33 | } 34 | 35 | export function createSignature ( 36 | signature, 37 | sequence, 38 | accountNumber, 39 | publicKey 40 | ) { 41 | return { 42 | signature: signature.toString(`base64`), 43 | account_number: accountNumber, 44 | sequence, 45 | pub_key: { 46 | type: `tendermint/PubKeySecp256k1`, // TODO: allow other keytypes 47 | value: publicKey.toString(`base64`) 48 | } 49 | } 50 | } 51 | 52 | export function removeEmptyProperties (jsonTx) { 53 | if (Array.isArray(jsonTx)) { 54 | return jsonTx.map(removeEmptyProperties) 55 | } 56 | 57 | // string or number 58 | if (typeof jsonTx !== `object`) { 59 | return jsonTx 60 | } 61 | 62 | const sorted = {} 63 | Object.keys(jsonTx) 64 | .sort() 65 | .forEach(key => { 66 | if (jsonTx[key] === undefined || jsonTx[key] === null) return 67 | 68 | sorted[key] = removeEmptyProperties(jsonTx[key]) 69 | }) 70 | return sorted 71 | } 72 | -------------------------------------------------------------------------------- /src/simulate.js: -------------------------------------------------------------------------------- 1 | /* eslint-env browser */ 2 | 3 | const GAS_ADJUSTMENT = 2.3 4 | 5 | export default async function simulate ( 6 | cosmosRESTURL, 7 | senderAddress, 8 | chainId, 9 | msg, 10 | memo, 11 | sequence, 12 | accountNumber 13 | ) { 14 | const type = msg.type 15 | const path = { 16 | 'cosmos-sdk/MsgSend': () => `/bank/accounts/${senderAddress}/transfers`, 17 | 'cosmos-sdk/MsgDelegate': () => `/staking/delegators/${senderAddress}/delegations`, 18 | 'cosmos-sdk/MsgUndelegate': () => `/staking/delegators/${senderAddress}/unbonding_delegations`, 19 | 'cosmos-sdk/MsgBeginRedelegate': () => `/staking/delegators/${senderAddress}/redelegations`, 20 | 'cosmos-sdk/MsgSubmitProposal': () => `/gov/proposals`, 21 | 'cosmos-sdk/MsgVote': () => `/gov/proposals/${msg.value.proposal_id}/votes`, 22 | 'cosmos-sdk/MsgDeposit': () => `/gov/proposals/${msg.value.proposal_id}/deposits`, 23 | 'cosmos-sdk/MsgWithdrawDelegationReward': () => `/distribution/delegators/${senderAddress}/rewards` 24 | }[type]() 25 | const url = `${cosmosRESTURL}${path}` 26 | 27 | // the simulate endpoint is out of sync right now: https://github.com/cosmos/cosmos-sdk/issues/4929 28 | if (type === 'cosmos-sdk/MsgSubmitProposal') { 29 | const fixedMessage = { 30 | type: 'cosmos-sdk/MsgSubmitProposal', 31 | value: { 32 | title: msg.value.content.value.title, 33 | description: msg.value.content.value.description, 34 | proposal_type: 'Text', 35 | proposer: msg.value.proposer, 36 | initial_deposit: msg.value.initial_deposit 37 | } 38 | } 39 | msg = fixedMessage 40 | } 41 | 42 | const tx = createRESTPOSTObject(senderAddress, chainId, { sequence, accountNumber, memo }, msg) 43 | 44 | const { gas_estimate: gasEstimate } = await fetch(url, { 45 | method: `POST`, 46 | headers: { 47 | 'Content-Type': 'application/json' 48 | }, 49 | body: JSON.stringify(tx) 50 | }).then(res => res.json()) 51 | return Math.round(gasEstimate * GAS_ADJUSTMENT) 52 | } 53 | 54 | // attaches the request meta data to the message 55 | function createRESTPOSTObject (senderAddress, chainId, { sequence, accountNumber, memo }, msg) { 56 | const requestMetaData = { 57 | sequence, 58 | from: senderAddress, 59 | account_number: accountNumber, 60 | chain_id: chainId, 61 | simulate: true, 62 | memo 63 | } 64 | 65 | return { base_req: requestMetaData, ...msg.value } 66 | } 67 | -------------------------------------------------------------------------------- /test/signature.spec.js: -------------------------------------------------------------------------------- 1 | import { 2 | createSignature, 3 | createSignMessage, 4 | removeEmptyProperties 5 | } from "../src/signature.js" 6 | 7 | describe(`Signing`, () => { 8 | const tx = { 9 | msg: [ 10 | { 11 | type: `cosmos-sdk/Send`, 12 | value: { 13 | inputs: [ 14 | { 15 | address: `cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66`, 16 | coins: [{ denom: `STAKE`, amount: `1` }] 17 | } 18 | ], 19 | outputs: [ 20 | { 21 | address: `cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt`, 22 | coins: [{ denom: `STAKE`, amount: `1` }] 23 | } 24 | ] 25 | } 26 | } 27 | ], 28 | fee: { amount: [{ denom: ``, amount: `0` }], gas: `21906` }, 29 | signatures: null, 30 | memo: `` 31 | } 32 | const txWithNulls = { 33 | msg: [ 34 | { 35 | type: `cosmos-sdk/Send`, 36 | value: { 37 | inputs: [ 38 | { 39 | address: `cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66`, 40 | coins: [{ denom: `STAKE`, amount: `1` }] 41 | } 42 | ], 43 | outputs: [ 44 | { 45 | x: undefined, 46 | address: `cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt`, 47 | coins: [{ denom: `STAKE`, amount: `1` }] 48 | } 49 | ] 50 | } 51 | } 52 | ], 53 | fee: { amount: [{ denom: ``, amount: `0` }], gas: `21906` }, 54 | signatures: null, 55 | memo: `` 56 | } 57 | 58 | it(`createSignature`, () => { 59 | const vectors = [ 60 | { 61 | sequence: `0`, 62 | account_number: `1`, 63 | signature: `MEQCIE2f8y5lVAOZu/MDZX3aH+d0sgvTRVrEzdP60NHr7lKJAiBexCiaAsh35R25IhgJMBIp/AD2Lfuk57suV8gnqOSfzg==`, 64 | publicKey: `03ab1ebbb21aee35154e36aaebc25067177f783f7e967c9d6493e8920c05e40eb5` 65 | }, 66 | { 67 | sequence: `1`, 68 | account_number: `1`, 69 | signature: `MEQCIE2f8y5lVAOZu/MDZX3aH+d0sgvTRVrEzdP60NHr7lKJAiBexCiaAsh35R25IhgJMBIp/AD2Lfuk57suV8gnqOSfzg==`, 70 | publicKey: `0243311589af63c2adda04fcd7792c038a05c12a4fe40351b3eb1612ff6b2e5a0e` 71 | } 72 | ] 73 | 74 | vectors.forEach(({ signature, sequence, account_number, publicKey }) => 75 | expect( 76 | createSignature(signature, sequence, account_number, publicKey) 77 | ).toMatchObject({ 78 | signature: signature.toString(`base64`), 79 | account_number, 80 | sequence, 81 | pub_key: { 82 | type: `tendermint/PubKeySecp256k1`, 83 | value: publicKey.toString(`base64`) 84 | } 85 | }) 86 | ) 87 | }) 88 | 89 | it(`createSignMessage`, () => { 90 | const vectors = [ 91 | { 92 | tx, 93 | sequence: `0`, 94 | accountNumber: `1`, 95 | chainId: `tendermint_test`, 96 | signMessage: `{"account_number":"1","chain_id":"tendermint_test","fee":{"amount":[{"amount":"0","denom":""}],"gas":"21906"},"memo":"","msgs":[{"type":"cosmos-sdk/Send","value":{"inputs":[{"address":"cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66","coins":[{"amount":"1","denom":"STAKE"}]}],"outputs":[{"address":"cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt","coins":[{"amount":"1","denom":"STAKE"}]}]}}],"sequence":"0"}` 97 | }, 98 | { 99 | tx: txWithNulls, 100 | sequence: `0`, 101 | accountNumber: `1`, 102 | chainId: `tendermint_test`, 103 | signMessage: `{"account_number":"1","chain_id":"tendermint_test","fee":{"amount":[{"amount":"0","denom":""}],"gas":"21906"},"memo":"","msgs":[{"type":"cosmos-sdk/Send","value":{"inputs":[{"address":"cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66","coins":[{"amount":"1","denom":"STAKE"}]}],"outputs":[{"address":"cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt","coins":[{"amount":"1","denom":"STAKE"}]}]}}],"sequence":"0"}` 104 | } 105 | ] 106 | 107 | vectors.forEach( 108 | ({ tx, sequence, accountNumber, chainId, signMessage }) => { 109 | expect( 110 | createSignMessage(tx, { sequence, accountNumber, chainId }) 111 | ).toBe(signMessage) 112 | } 113 | ) 114 | }) 115 | 116 | it(`removeEmptyProperties`, () => { 117 | expect(removeEmptyProperties({ 118 | a: { 119 | b: undefined, 120 | c: 1 121 | }, 122 | d: "abc", 123 | e: { 124 | f: 'g' 125 | }, 126 | h: null 127 | })).toEqual({ 128 | a: { 129 | c: 1 130 | }, 131 | d: "abc", 132 | e: { 133 | f: 'g' 134 | } 135 | }) 136 | }) 137 | }) 138 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const config = { 2 | devtool: "cheap-source-map", 3 | entry: ['./src/index.js'], 4 | output: { 5 | path: __dirname + '/lib', 6 | filename: 'cosmos.js', 7 | library: 'cosmos-js', 8 | libraryTarget: 'umd', 9 | umdNamedDefine: true, 10 | globalObject: "this" 11 | }, 12 | module: { 13 | rules: [ 14 | { 15 | loader: 'babel-loader', 16 | test: /\.js$/, 17 | exclude: /node_modules/, 18 | query: { 19 | presets: ['@babel/preset-env'] 20 | } 21 | } 22 | ] 23 | } 24 | } 25 | module.exports = config; -------------------------------------------------------------------------------- /yarn-error.log: -------------------------------------------------------------------------------- 1 | Arguments: 2 | C:\Program Files\nodejs\node.exe C:\Users\Fabo\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js add -D webpack @babel/core babel-loader 3 | 4 | PATH: 5 | C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Users\Fabo\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files (x86)\NoteBook FanControl;C:\Users\Fabo\AppData\Roaming\nvm;C:\Program Files\nodejs;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit;C:\Program Files\PuTTY;C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin;C:\Windows\System32\OpenSSH;C:\Users\Fabo\Documents\Entwicklung\flutter\bin;C:\Users\Fabo\AppData\Local\Android\Sdk\tools\bin;C:\Users\Fabo\AppData\Local\Android\Sdk\platform-tools;C:\Program Files\RedHat\java-1.8.0-openjdk-1.8.0.161-1\bin;C:\Program Files (x86)\GnuPG\bin;C:\Python27;C:\Users\Fabo\Documents\Entwicklung\ffmpeg\bin;C:\Program Files\Intel\WiFi\bin;C:\Program Files\Common Files\Intel\WirelessCommon;C:\Program Files\Microsoft VS Code\bin;C:\Go\bin;C:\Program Files (x86)\Yarn\bin;C:\Program Files\Amazon\AWSCLI;C:\Program Files\Git\cmd;C:\ProgramData\chocolatey\bin;C:\Program Files\nodejs;C:\Users\Fabo\.cargo\bin;C:\Users\Fabo\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Heroku\bin;C:\Users\Fabo\Documents\Entwicklung\make;C:\Users\Fabo\Documents\Entwicklung\Glide;C:\Users\Fabo\Documents\Entwicklung\Go\bin;C:\Users\Fabo\AppData\Local\atom\bin;C:\Users\Fabo\AppData\Local\Microsoft\WindowsApps;C:\Users\Fabo\AppData\Local\Android\sdk\platform-tools;C:\WINDOWS\system32;C:\Users\Fabo\AppData\Local\Yarn\config\global;C:\Program Files\Docker Toolbox;C:\Users\Fabo\go\bin;C:\Users\Fabo\AppData\Local\Yarn\bin;C:\Users\Fabo\Documents\Entwicklung\terraform;C:\Python27\Scripts;C:\Users\Fabo\AppData\Roaming\npm 6 | 7 | Yarn version: 8 | 1.15.2 9 | 10 | Node version: 11 | 10.15.3 12 | 13 | Platform: 14 | win32 x64 15 | 16 | Trace: 17 | Error: EPERM: operation not permitted, unlink 'C:\Users\Fabo\Documents\Entwicklung\cosmos-js\node_modules\@babel\template\node_modules\.bin' 18 | 19 | npm manifest: 20 | { 21 | "name": "@lunie/cosmos-js", 22 | "version": "0.0.4", 23 | "description": "Wrapper around getting and sending transactions from and to applications build on top of the Cosmos SDK", 24 | "main": "src/index.js", 25 | "scripts": { 26 | "test": "jest" 27 | }, 28 | "keywords": [ 29 | "cosmos", 30 | "sdk", 31 | "blockchain" 32 | ], 33 | "author": "Lunie International Software Systems Inc. ", 34 | "license": "Apache-2.0", 35 | "dependencies": { 36 | "jest": "^24.7.1" 37 | }, 38 | "devDependencies": {} 39 | } 40 | 41 | yarn manifest: 42 | No manifest 43 | 44 | Lockfile: 45 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 46 | # yarn lockfile v1 47 | 48 | 49 | "@babel/code-frame@^7.0.0": 50 | version "7.0.0" 51 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 52 | dependencies: 53 | "@babel/highlight" "^7.0.0" 54 | 55 | "@babel/core@^7.1.0": 56 | version "7.4.4" 57 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250" 58 | dependencies: 59 | "@babel/code-frame" "^7.0.0" 60 | "@babel/generator" "^7.4.4" 61 | "@babel/helpers" "^7.4.4" 62 | "@babel/parser" "^7.4.4" 63 | "@babel/template" "^7.4.4" 64 | "@babel/traverse" "^7.4.4" 65 | "@babel/types" "^7.4.4" 66 | convert-source-map "^1.1.0" 67 | debug "^4.1.0" 68 | json5 "^2.1.0" 69 | lodash "^4.17.11" 70 | resolve "^1.3.2" 71 | semver "^5.4.1" 72 | source-map "^0.5.0" 73 | 74 | "@babel/generator@^7.0.0", "@babel/generator@^7.4.4": 75 | version "7.4.4" 76 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" 77 | dependencies: 78 | "@babel/types" "^7.4.4" 79 | jsesc "^2.5.1" 80 | lodash "^4.17.11" 81 | source-map "^0.5.0" 82 | trim-right "^1.0.1" 83 | 84 | "@babel/helper-function-name@^7.1.0": 85 | version "7.1.0" 86 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" 87 | dependencies: 88 | "@babel/helper-get-function-arity" "^7.0.0" 89 | "@babel/template" "^7.1.0" 90 | "@babel/types" "^7.0.0" 91 | 92 | "@babel/helper-get-function-arity@^7.0.0": 93 | version "7.0.0" 94 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" 95 | dependencies: 96 | "@babel/types" "^7.0.0" 97 | 98 | "@babel/helper-plugin-utils@^7.0.0": 99 | version "7.0.0" 100 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" 101 | 102 | "@babel/helper-split-export-declaration@^7.4.4": 103 | version "7.4.4" 104 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" 105 | dependencies: 106 | "@babel/types" "^7.4.4" 107 | 108 | "@babel/helpers@^7.4.4": 109 | version "7.4.4" 110 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" 111 | dependencies: 112 | "@babel/template" "^7.4.4" 113 | "@babel/traverse" "^7.4.4" 114 | "@babel/types" "^7.4.4" 115 | 116 | "@babel/highlight@^7.0.0": 117 | version "7.0.0" 118 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 119 | dependencies: 120 | chalk "^2.0.0" 121 | esutils "^2.0.2" 122 | js-tokens "^4.0.0" 123 | 124 | "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.4": 125 | version "7.4.4" 126 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" 127 | 128 | "@babel/plugin-syntax-object-rest-spread@^7.0.0": 129 | version "7.2.0" 130 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" 131 | dependencies: 132 | "@babel/helper-plugin-utils" "^7.0.0" 133 | 134 | "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.4": 135 | version "7.4.4" 136 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" 137 | dependencies: 138 | "@babel/code-frame" "^7.0.0" 139 | "@babel/parser" "^7.4.4" 140 | "@babel/types" "^7.4.4" 141 | 142 | "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4": 143 | version "7.4.4" 144 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8" 145 | dependencies: 146 | "@babel/code-frame" "^7.0.0" 147 | "@babel/generator" "^7.4.4" 148 | "@babel/helper-function-name" "^7.1.0" 149 | "@babel/helper-split-export-declaration" "^7.4.4" 150 | "@babel/parser" "^7.4.4" 151 | "@babel/types" "^7.4.4" 152 | debug "^4.1.0" 153 | globals "^11.1.0" 154 | lodash "^4.17.11" 155 | 156 | "@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": 157 | version "7.4.4" 158 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" 159 | dependencies: 160 | esutils "^2.0.2" 161 | lodash "^4.17.11" 162 | to-fast-properties "^2.0.0" 163 | 164 | "@cnakazawa/watch@^1.0.3": 165 | version "1.0.3" 166 | resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" 167 | dependencies: 168 | exec-sh "^0.3.2" 169 | minimist "^1.2.0" 170 | 171 | "@jest/console@^24.7.1": 172 | version "24.7.1" 173 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" 174 | dependencies: 175 | "@jest/source-map" "^24.3.0" 176 | chalk "^2.0.1" 177 | slash "^2.0.0" 178 | 179 | "@jest/core@^24.7.1": 180 | version "24.7.1" 181 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.7.1.tgz#6707f50db238d0c5988860680e2e414df0032024" 182 | dependencies: 183 | "@jest/console" "^24.7.1" 184 | "@jest/reporters" "^24.7.1" 185 | "@jest/test-result" "^24.7.1" 186 | "@jest/transform" "^24.7.1" 187 | "@jest/types" "^24.7.0" 188 | ansi-escapes "^3.0.0" 189 | chalk "^2.0.1" 190 | exit "^0.1.2" 191 | graceful-fs "^4.1.15" 192 | jest-changed-files "^24.7.0" 193 | jest-config "^24.7.1" 194 | jest-haste-map "^24.7.1" 195 | jest-message-util "^24.7.1" 196 | jest-regex-util "^24.3.0" 197 | jest-resolve-dependencies "^24.7.1" 198 | jest-runner "^24.7.1" 199 | jest-runtime "^24.7.1" 200 | jest-snapshot "^24.7.1" 201 | jest-util "^24.7.1" 202 | jest-validate "^24.7.0" 203 | jest-watcher "^24.7.1" 204 | micromatch "^3.1.10" 205 | p-each-series "^1.0.0" 206 | pirates "^4.0.1" 207 | realpath-native "^1.1.0" 208 | rimraf "^2.5.4" 209 | strip-ansi "^5.0.0" 210 | 211 | "@jest/environment@^24.7.1": 212 | version "24.7.1" 213 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.7.1.tgz#9b9196bc737561f67ac07817d4c5ece772e33135" 214 | dependencies: 215 | "@jest/fake-timers" "^24.7.1" 216 | "@jest/transform" "^24.7.1" 217 | "@jest/types" "^24.7.0" 218 | jest-mock "^24.7.0" 219 | 220 | "@jest/fake-timers@^24.7.1": 221 | version "24.7.1" 222 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.7.1.tgz#56e5d09bdec09ee81050eaff2794b26c71d19db2" 223 | dependencies: 224 | "@jest/types" "^24.7.0" 225 | jest-message-util "^24.7.1" 226 | jest-mock "^24.7.0" 227 | 228 | "@jest/reporters@^24.7.1": 229 | version "24.7.1" 230 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.7.1.tgz#38ac0b096cd691bbbe3051ddc25988d42e37773a" 231 | dependencies: 232 | "@jest/environment" "^24.7.1" 233 | "@jest/test-result" "^24.7.1" 234 | "@jest/transform" "^24.7.1" 235 | "@jest/types" "^24.7.0" 236 | chalk "^2.0.1" 237 | exit "^0.1.2" 238 | glob "^7.1.2" 239 | istanbul-api "^2.1.1" 240 | istanbul-lib-coverage "^2.0.2" 241 | istanbul-lib-instrument "^3.0.1" 242 | istanbul-lib-source-maps "^3.0.1" 243 | jest-haste-map "^24.7.1" 244 | jest-resolve "^24.7.1" 245 | jest-runtime "^24.7.1" 246 | jest-util "^24.7.1" 247 | jest-worker "^24.6.0" 248 | node-notifier "^5.2.1" 249 | slash "^2.0.0" 250 | source-map "^0.6.0" 251 | string-length "^2.0.0" 252 | 253 | "@jest/source-map@^24.3.0": 254 | version "24.3.0" 255 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" 256 | dependencies: 257 | callsites "^3.0.0" 258 | graceful-fs "^4.1.15" 259 | source-map "^0.6.0" 260 | 261 | "@jest/test-result@^24.7.1": 262 | version "24.7.1" 263 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.7.1.tgz#19eacdb29a114300aed24db651e5d975f08b6bbe" 264 | dependencies: 265 | "@jest/console" "^24.7.1" 266 | "@jest/types" "^24.7.0" 267 | "@types/istanbul-lib-coverage" "^2.0.0" 268 | 269 | "@jest/test-sequencer@^24.7.1": 270 | version "24.7.1" 271 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz#9c18e428e1ad945fa74f6233a9d35745ca0e63e0" 272 | dependencies: 273 | "@jest/test-result" "^24.7.1" 274 | jest-haste-map "^24.7.1" 275 | jest-runner "^24.7.1" 276 | jest-runtime "^24.7.1" 277 | 278 | "@jest/transform@^24.7.1": 279 | version "24.7.1" 280 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.7.1.tgz#872318f125bcfab2de11f53b465ab1aa780789c2" 281 | dependencies: 282 | "@babel/core" "^7.1.0" 283 | "@jest/types" "^24.7.0" 284 | babel-plugin-istanbul "^5.1.0" 285 | chalk "^2.0.1" 286 | convert-source-map "^1.4.0" 287 | fast-json-stable-stringify "^2.0.0" 288 | graceful-fs "^4.1.15" 289 | jest-haste-map "^24.7.1" 290 | jest-regex-util "^24.3.0" 291 | jest-util "^24.7.1" 292 | micromatch "^3.1.10" 293 | realpath-native "^1.1.0" 294 | slash "^2.0.0" 295 | source-map "^0.6.1" 296 | write-file-atomic "2.4.1" 297 | 298 | "@jest/types@^24.7.0": 299 | version "24.7.0" 300 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.7.0.tgz#c4ec8d1828cdf23234d9b4ee31f5482a3f04f48b" 301 | dependencies: 302 | "@types/istanbul-lib-coverage" "^2.0.0" 303 | "@types/yargs" "^12.0.9" 304 | 305 | "@types/babel__core@^7.1.0": 306 | version "7.1.1" 307 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.1.tgz#ce9a9e5d92b7031421e1d0d74ae59f572ba48be6" 308 | dependencies: 309 | "@babel/parser" "^7.1.0" 310 | "@babel/types" "^7.0.0" 311 | "@types/babel__generator" "*" 312 | "@types/babel__template" "*" 313 | "@types/babel__traverse" "*" 314 | 315 | "@types/babel__generator@*": 316 | version "7.0.2" 317 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" 318 | dependencies: 319 | "@babel/types" "^7.0.0" 320 | 321 | "@types/babel__template@*": 322 | version "7.0.2" 323 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" 324 | dependencies: 325 | "@babel/parser" "^7.1.0" 326 | "@babel/types" "^7.0.0" 327 | 328 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 329 | version "7.0.6" 330 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" 331 | dependencies: 332 | "@babel/types" "^7.3.0" 333 | 334 | "@types/istanbul-lib-coverage@^2.0.0": 335 | version "2.0.1" 336 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" 337 | 338 | "@types/stack-utils@^1.0.1": 339 | version "1.0.1" 340 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" 341 | 342 | "@types/yargs@^12.0.2", "@types/yargs@^12.0.9": 343 | version "12.0.12" 344 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" 345 | 346 | abab@^2.0.0: 347 | version "2.0.0" 348 | resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" 349 | 350 | abbrev@1: 351 | version "1.1.1" 352 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 353 | 354 | acorn-globals@^4.1.0: 355 | version "4.3.2" 356 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" 357 | dependencies: 358 | acorn "^6.0.1" 359 | acorn-walk "^6.0.1" 360 | 361 | acorn-walk@^6.0.1: 362 | version "6.1.1" 363 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" 364 | 365 | acorn@^5.5.3: 366 | version "5.7.3" 367 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" 368 | 369 | acorn@^6.0.1: 370 | version "6.1.1" 371 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" 372 | 373 | ajv@^6.5.5: 374 | version "6.10.0" 375 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" 376 | dependencies: 377 | fast-deep-equal "^2.0.1" 378 | fast-json-stable-stringify "^2.0.0" 379 | json-schema-traverse "^0.4.1" 380 | uri-js "^4.2.2" 381 | 382 | ansi-escapes@^3.0.0: 383 | version "3.2.0" 384 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 385 | 386 | ansi-regex@^2.0.0: 387 | version "2.1.1" 388 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 389 | 390 | ansi-regex@^3.0.0: 391 | version "3.0.0" 392 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 393 | 394 | ansi-regex@^4.0.0, ansi-regex@^4.1.0: 395 | version "4.1.0" 396 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 397 | 398 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 399 | version "3.2.1" 400 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 401 | dependencies: 402 | color-convert "^1.9.0" 403 | 404 | anymatch@^2.0.0: 405 | version "2.0.0" 406 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 407 | dependencies: 408 | micromatch "^3.1.4" 409 | normalize-path "^2.1.1" 410 | 411 | append-transform@^1.0.0: 412 | version "1.0.0" 413 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" 414 | dependencies: 415 | default-require-extensions "^2.0.0" 416 | 417 | aproba@^1.0.3: 418 | version "1.2.0" 419 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 420 | 421 | are-we-there-yet@~1.1.2: 422 | version "1.1.5" 423 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 424 | dependencies: 425 | delegates "^1.0.0" 426 | readable-stream "^2.0.6" 427 | 428 | argparse@^1.0.7: 429 | version "1.0.10" 430 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 431 | dependencies: 432 | sprintf-js "~1.0.2" 433 | 434 | arr-diff@^4.0.0: 435 | version "4.0.0" 436 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 437 | 438 | arr-flatten@^1.1.0: 439 | version "1.1.0" 440 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 441 | 442 | arr-union@^3.1.0: 443 | version "3.1.0" 444 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 445 | 446 | array-equal@^1.0.0: 447 | version "1.0.0" 448 | resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" 449 | 450 | array-unique@^0.3.2: 451 | version "0.3.2" 452 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 453 | 454 | asn1@~0.2.3: 455 | version "0.2.4" 456 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 457 | dependencies: 458 | safer-buffer "~2.1.0" 459 | 460 | assert-plus@1.0.0, assert-plus@^1.0.0: 461 | version "1.0.0" 462 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 463 | 464 | assign-symbols@^1.0.0: 465 | version "1.0.0" 466 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 467 | 468 | astral-regex@^1.0.0: 469 | version "1.0.0" 470 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 471 | 472 | async-limiter@~1.0.0: 473 | version "1.0.0" 474 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 475 | 476 | async@^2.6.1: 477 | version "2.6.2" 478 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" 479 | dependencies: 480 | lodash "^4.17.11" 481 | 482 | asynckit@^0.4.0: 483 | version "0.4.0" 484 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 485 | 486 | atob@^2.1.1: 487 | version "2.1.2" 488 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 489 | 490 | aws-sign2@~0.7.0: 491 | version "0.7.0" 492 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 493 | 494 | aws4@^1.8.0: 495 | version "1.8.0" 496 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 497 | 498 | babel-jest@^24.7.1: 499 | version "24.7.1" 500 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.7.1.tgz#73902c9ff15a7dfbdc9994b0b17fcefd96042178" 501 | dependencies: 502 | "@jest/transform" "^24.7.1" 503 | "@jest/types" "^24.7.0" 504 | "@types/babel__core" "^7.1.0" 505 | babel-plugin-istanbul "^5.1.0" 506 | babel-preset-jest "^24.6.0" 507 | chalk "^2.4.2" 508 | slash "^2.0.0" 509 | 510 | babel-plugin-istanbul@^5.1.0: 511 | version "5.1.3" 512 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.3.tgz#202d20ffc96a821c68a3964412de75b9bdeb48c7" 513 | dependencies: 514 | find-up "^3.0.0" 515 | istanbul-lib-instrument "^3.2.0" 516 | test-exclude "^5.2.2" 517 | 518 | babel-plugin-jest-hoist@^24.6.0: 519 | version "24.6.0" 520 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019" 521 | dependencies: 522 | "@types/babel__traverse" "^7.0.6" 523 | 524 | babel-preset-jest@^24.6.0: 525 | version "24.6.0" 526 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984" 527 | dependencies: 528 | "@babel/plugin-syntax-object-rest-spread" "^7.0.0" 529 | babel-plugin-jest-hoist "^24.6.0" 530 | 531 | balanced-match@^1.0.0: 532 | version "1.0.0" 533 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 534 | 535 | base@^0.11.1: 536 | version "0.11.2" 537 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 538 | dependencies: 539 | cache-base "^1.0.1" 540 | class-utils "^0.3.5" 541 | component-emitter "^1.2.1" 542 | define-property "^1.0.0" 543 | isobject "^3.0.1" 544 | mixin-deep "^1.2.0" 545 | pascalcase "^0.1.1" 546 | 547 | bcrypt-pbkdf@^1.0.0: 548 | version "1.0.2" 549 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 550 | dependencies: 551 | tweetnacl "^0.14.3" 552 | 553 | brace-expansion@^1.1.7: 554 | version "1.1.11" 555 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 556 | dependencies: 557 | balanced-match "^1.0.0" 558 | concat-map "0.0.1" 559 | 560 | braces@^2.3.1: 561 | version "2.3.2" 562 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 563 | dependencies: 564 | arr-flatten "^1.1.0" 565 | array-unique "^0.3.2" 566 | extend-shallow "^2.0.1" 567 | fill-range "^4.0.0" 568 | isobject "^3.0.1" 569 | repeat-element "^1.1.2" 570 | snapdragon "^0.8.1" 571 | snapdragon-node "^2.0.1" 572 | split-string "^3.0.2" 573 | to-regex "^3.0.1" 574 | 575 | browser-process-hrtime@^0.1.2: 576 | version "0.1.3" 577 | resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" 578 | 579 | browser-resolve@^1.11.3: 580 | version "1.11.3" 581 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" 582 | dependencies: 583 | resolve "1.1.7" 584 | 585 | bser@^2.0.0: 586 | version "2.0.0" 587 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" 588 | dependencies: 589 | node-int64 "^0.4.0" 590 | 591 | buffer-from@^1.0.0: 592 | version "1.1.1" 593 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 594 | 595 | cache-base@^1.0.1: 596 | version "1.0.1" 597 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 598 | dependencies: 599 | collection-visit "^1.0.0" 600 | component-emitter "^1.2.1" 601 | get-value "^2.0.6" 602 | has-value "^1.0.0" 603 | isobject "^3.0.1" 604 | set-value "^2.0.0" 605 | to-object-path "^0.3.0" 606 | union-value "^1.0.0" 607 | unset-value "^1.0.0" 608 | 609 | callsites@^3.0.0: 610 | version "3.1.0" 611 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 612 | 613 | camelcase@^5.0.0: 614 | version "5.3.1" 615 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 616 | 617 | capture-exit@^2.0.0: 618 | version "2.0.0" 619 | resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" 620 | dependencies: 621 | rsvp "^4.8.4" 622 | 623 | caseless@~0.12.0: 624 | version "0.12.0" 625 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 626 | 627 | chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: 628 | version "2.4.2" 629 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 630 | dependencies: 631 | ansi-styles "^3.2.1" 632 | escape-string-regexp "^1.0.5" 633 | supports-color "^5.3.0" 634 | 635 | chownr@^1.1.1: 636 | version "1.1.1" 637 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 638 | 639 | ci-info@^2.0.0: 640 | version "2.0.0" 641 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 642 | 643 | class-utils@^0.3.5: 644 | version "0.3.6" 645 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 646 | dependencies: 647 | arr-union "^3.1.0" 648 | define-property "^0.2.5" 649 | isobject "^3.0.0" 650 | static-extend "^0.1.1" 651 | 652 | cliui@^4.0.0: 653 | version "4.1.0" 654 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 655 | dependencies: 656 | string-width "^2.1.1" 657 | strip-ansi "^4.0.0" 658 | wrap-ansi "^2.0.0" 659 | 660 | co@^4.6.0: 661 | version "4.6.0" 662 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 663 | 664 | code-point-at@^1.0.0: 665 | version "1.1.0" 666 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 667 | 668 | collection-visit@^1.0.0: 669 | version "1.0.0" 670 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 671 | dependencies: 672 | map-visit "^1.0.0" 673 | object-visit "^1.0.0" 674 | 675 | color-convert@^1.9.0: 676 | version "1.9.3" 677 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 678 | dependencies: 679 | color-name "1.1.3" 680 | 681 | color-name@1.1.3: 682 | version "1.1.3" 683 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 684 | 685 | combined-stream@^1.0.6, combined-stream@~1.0.6: 686 | version "1.0.7" 687 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" 688 | dependencies: 689 | delayed-stream "~1.0.0" 690 | 691 | commander@~2.20.0: 692 | version "2.20.0" 693 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 694 | 695 | compare-versions@^3.2.1: 696 | version "3.4.0" 697 | resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26" 698 | 699 | component-emitter@^1.2.1: 700 | version "1.3.0" 701 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 702 | 703 | concat-map@0.0.1: 704 | version "0.0.1" 705 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 706 | 707 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 708 | version "1.1.0" 709 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 710 | 711 | convert-source-map@^1.1.0, convert-source-map@^1.4.0: 712 | version "1.6.0" 713 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 714 | dependencies: 715 | safe-buffer "~5.1.1" 716 | 717 | copy-descriptor@^0.1.0: 718 | version "0.1.1" 719 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 720 | 721 | core-util-is@1.0.2, core-util-is@~1.0.0: 722 | version "1.0.2" 723 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 724 | 725 | cross-spawn@^6.0.0: 726 | version "6.0.5" 727 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 728 | dependencies: 729 | nice-try "^1.0.4" 730 | path-key "^2.0.1" 731 | semver "^5.5.0" 732 | shebang-command "^1.2.0" 733 | which "^1.2.9" 734 | 735 | cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": 736 | version "0.3.6" 737 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" 738 | 739 | cssstyle@^1.0.0: 740 | version "1.2.2" 741 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.2.tgz#427ea4d585b18624f6fdbf9de7a2a1a3ba713077" 742 | dependencies: 743 | cssom "0.3.x" 744 | 745 | dashdash@^1.12.0: 746 | version "1.14.1" 747 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 748 | dependencies: 749 | assert-plus "^1.0.0" 750 | 751 | data-urls@^1.0.0: 752 | version "1.1.0" 753 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" 754 | dependencies: 755 | abab "^2.0.0" 756 | whatwg-mimetype "^2.2.0" 757 | whatwg-url "^7.0.0" 758 | 759 | debug@^2.2.0, debug@^2.3.3: 760 | version "2.6.9" 761 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 762 | dependencies: 763 | ms "2.0.0" 764 | 765 | debug@^4.1.0, debug@^4.1.1: 766 | version "4.1.1" 767 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 768 | dependencies: 769 | ms "^2.1.1" 770 | 771 | decamelize@^1.2.0: 772 | version "1.2.0" 773 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 774 | 775 | decode-uri-component@^0.2.0: 776 | version "0.2.0" 777 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 778 | 779 | deep-extend@^0.6.0: 780 | version "0.6.0" 781 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 782 | 783 | deep-is@~0.1.3: 784 | version "0.1.3" 785 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 786 | 787 | default-require-extensions@^2.0.0: 788 | version "2.0.0" 789 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" 790 | dependencies: 791 | strip-bom "^3.0.0" 792 | 793 | define-properties@^1.1.2: 794 | version "1.1.3" 795 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 796 | dependencies: 797 | object-keys "^1.0.12" 798 | 799 | define-property@^0.2.5: 800 | version "0.2.5" 801 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 802 | dependencies: 803 | is-descriptor "^0.1.0" 804 | 805 | define-property@^1.0.0: 806 | version "1.0.0" 807 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 808 | dependencies: 809 | is-descriptor "^1.0.0" 810 | 811 | define-property@^2.0.2: 812 | version "2.0.2" 813 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 814 | dependencies: 815 | is-descriptor "^1.0.2" 816 | isobject "^3.0.1" 817 | 818 | delayed-stream@~1.0.0: 819 | version "1.0.0" 820 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 821 | 822 | delegates@^1.0.0: 823 | version "1.0.0" 824 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 825 | 826 | detect-libc@^1.0.2: 827 | version "1.0.3" 828 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 829 | 830 | detect-newline@^2.1.0: 831 | version "2.1.0" 832 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" 833 | 834 | diff-sequences@^24.3.0: 835 | version "24.3.0" 836 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" 837 | 838 | domexception@^1.0.1: 839 | version "1.0.1" 840 | resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" 841 | dependencies: 842 | webidl-conversions "^4.0.2" 843 | 844 | ecc-jsbn@~0.1.1: 845 | version "0.1.2" 846 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 847 | dependencies: 848 | jsbn "~0.1.0" 849 | safer-buffer "^2.1.0" 850 | 851 | end-of-stream@^1.1.0: 852 | version "1.4.1" 853 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 854 | dependencies: 855 | once "^1.4.0" 856 | 857 | error-ex@^1.3.1: 858 | version "1.3.2" 859 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 860 | dependencies: 861 | is-arrayish "^0.2.1" 862 | 863 | es-abstract@^1.5.1: 864 | version "1.13.0" 865 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 866 | dependencies: 867 | es-to-primitive "^1.2.0" 868 | function-bind "^1.1.1" 869 | has "^1.0.3" 870 | is-callable "^1.1.4" 871 | is-regex "^1.0.4" 872 | object-keys "^1.0.12" 873 | 874 | es-to-primitive@^1.2.0: 875 | version "1.2.0" 876 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 877 | dependencies: 878 | is-callable "^1.1.4" 879 | is-date-object "^1.0.1" 880 | is-symbol "^1.0.2" 881 | 882 | escape-string-regexp@^1.0.5: 883 | version "1.0.5" 884 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 885 | 886 | escodegen@^1.9.1: 887 | version "1.11.1" 888 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" 889 | dependencies: 890 | esprima "^3.1.3" 891 | estraverse "^4.2.0" 892 | esutils "^2.0.2" 893 | optionator "^0.8.1" 894 | optionalDependencies: 895 | source-map "~0.6.1" 896 | 897 | esprima@^3.1.3: 898 | version "3.1.3" 899 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 900 | 901 | esprima@^4.0.0: 902 | version "4.0.1" 903 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 904 | 905 | estraverse@^4.2.0: 906 | version "4.2.0" 907 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 908 | 909 | esutils@^2.0.2: 910 | version "2.0.2" 911 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 912 | 913 | exec-sh@^0.3.2: 914 | version "0.3.2" 915 | resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" 916 | 917 | execa@^1.0.0: 918 | version "1.0.0" 919 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 920 | dependencies: 921 | cross-spawn "^6.0.0" 922 | get-stream "^4.0.0" 923 | is-stream "^1.1.0" 924 | npm-run-path "^2.0.0" 925 | p-finally "^1.0.0" 926 | signal-exit "^3.0.0" 927 | strip-eof "^1.0.0" 928 | 929 | exit@^0.1.2: 930 | version "0.1.2" 931 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 932 | 933 | expand-brackets@^2.1.4: 934 | version "2.1.4" 935 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 936 | dependencies: 937 | debug "^2.3.3" 938 | define-property "^0.2.5" 939 | extend-shallow "^2.0.1" 940 | posix-character-classes "^0.1.0" 941 | regex-not "^1.0.0" 942 | snapdragon "^0.8.1" 943 | to-regex "^3.0.1" 944 | 945 | expect@^24.7.1: 946 | version "24.7.1" 947 | resolved "https://registry.yarnpkg.com/expect/-/expect-24.7.1.tgz#d91defbab4e627470a152feaf35b3c31aa1c7c14" 948 | dependencies: 949 | "@jest/types" "^24.7.0" 950 | ansi-styles "^3.2.0" 951 | jest-get-type "^24.3.0" 952 | jest-matcher-utils "^24.7.0" 953 | jest-message-util "^24.7.1" 954 | jest-regex-util "^24.3.0" 955 | 956 | extend-shallow@^2.0.1: 957 | version "2.0.1" 958 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 959 | dependencies: 960 | is-extendable "^0.1.0" 961 | 962 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 963 | version "3.0.2" 964 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 965 | dependencies: 966 | assign-symbols "^1.0.0" 967 | is-extendable "^1.0.1" 968 | 969 | extend@~3.0.2: 970 | version "3.0.2" 971 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 972 | 973 | extglob@^2.0.4: 974 | version "2.0.4" 975 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 976 | dependencies: 977 | array-unique "^0.3.2" 978 | define-property "^1.0.0" 979 | expand-brackets "^2.1.4" 980 | extend-shallow "^2.0.1" 981 | fragment-cache "^0.2.1" 982 | regex-not "^1.0.0" 983 | snapdragon "^0.8.1" 984 | to-regex "^3.0.1" 985 | 986 | extsprintf@1.3.0: 987 | version "1.3.0" 988 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 989 | 990 | extsprintf@^1.2.0: 991 | version "1.4.0" 992 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 993 | 994 | fast-deep-equal@^2.0.1: 995 | version "2.0.1" 996 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 997 | 998 | fast-json-stable-stringify@^2.0.0: 999 | version "2.0.0" 1000 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 1001 | 1002 | fast-levenshtein@~2.0.4: 1003 | version "2.0.6" 1004 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1005 | 1006 | fb-watchman@^2.0.0: 1007 | version "2.0.0" 1008 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" 1009 | dependencies: 1010 | bser "^2.0.0" 1011 | 1012 | fileset@^2.0.3: 1013 | version "2.0.3" 1014 | resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" 1015 | dependencies: 1016 | glob "^7.0.3" 1017 | minimatch "^3.0.3" 1018 | 1019 | fill-range@^4.0.0: 1020 | version "4.0.0" 1021 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1022 | dependencies: 1023 | extend-shallow "^2.0.1" 1024 | is-number "^3.0.0" 1025 | repeat-string "^1.6.1" 1026 | to-regex-range "^2.1.0" 1027 | 1028 | find-up@^3.0.0: 1029 | version "3.0.0" 1030 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 1031 | dependencies: 1032 | locate-path "^3.0.0" 1033 | 1034 | for-in@^1.0.2: 1035 | version "1.0.2" 1036 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1037 | 1038 | forever-agent@~0.6.1: 1039 | version "0.6.1" 1040 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1041 | 1042 | form-data@~2.3.2: 1043 | version "2.3.3" 1044 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 1045 | dependencies: 1046 | asynckit "^0.4.0" 1047 | combined-stream "^1.0.6" 1048 | mime-types "^2.1.12" 1049 | 1050 | fragment-cache@^0.2.1: 1051 | version "0.2.1" 1052 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 1053 | dependencies: 1054 | map-cache "^0.2.2" 1055 | 1056 | fs-minipass@^1.2.5: 1057 | version "1.2.5" 1058 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" 1059 | dependencies: 1060 | minipass "^2.2.1" 1061 | 1062 | fs.realpath@^1.0.0: 1063 | version "1.0.0" 1064 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1065 | 1066 | fsevents@^1.2.7: 1067 | version "1.2.8" 1068 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.8.tgz#57ea5320f762cd4696e5e8e87120eccc8b11cacf" 1069 | dependencies: 1070 | nan "^2.12.1" 1071 | node-pre-gyp "^0.12.0" 1072 | 1073 | function-bind@^1.1.1: 1074 | version "1.1.1" 1075 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1076 | 1077 | gauge@~2.7.3: 1078 | version "2.7.4" 1079 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1080 | dependencies: 1081 | aproba "^1.0.3" 1082 | console-control-strings "^1.0.0" 1083 | has-unicode "^2.0.0" 1084 | object-assign "^4.1.0" 1085 | signal-exit "^3.0.0" 1086 | string-width "^1.0.1" 1087 | strip-ansi "^3.0.1" 1088 | wide-align "^1.1.0" 1089 | 1090 | get-caller-file@^1.0.1: 1091 | version "1.0.3" 1092 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 1093 | 1094 | get-stream@^4.0.0: 1095 | version "4.1.0" 1096 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 1097 | dependencies: 1098 | pump "^3.0.0" 1099 | 1100 | get-value@^2.0.3, get-value@^2.0.6: 1101 | version "2.0.6" 1102 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 1103 | 1104 | getpass@^0.1.1: 1105 | version "0.1.7" 1106 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1107 | dependencies: 1108 | assert-plus "^1.0.0" 1109 | 1110 | glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: 1111 | version "7.1.3" 1112 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 1113 | dependencies: 1114 | fs.realpath "^1.0.0" 1115 | inflight "^1.0.4" 1116 | inherits "2" 1117 | minimatch "^3.0.4" 1118 | once "^1.3.0" 1119 | path-is-absolute "^1.0.0" 1120 | 1121 | globals@^11.1.0: 1122 | version "11.11.0" 1123 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" 1124 | 1125 | graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: 1126 | version "4.1.15" 1127 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 1128 | 1129 | growly@^1.3.0: 1130 | version "1.3.0" 1131 | resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" 1132 | 1133 | handlebars@^4.1.0: 1134 | version "4.1.2" 1135 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" 1136 | dependencies: 1137 | neo-async "^2.6.0" 1138 | optimist "^0.6.1" 1139 | source-map "^0.6.1" 1140 | optionalDependencies: 1141 | uglify-js "^3.1.4" 1142 | 1143 | har-schema@^2.0.0: 1144 | version "2.0.0" 1145 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1146 | 1147 | har-validator@~5.1.0: 1148 | version "5.1.3" 1149 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 1150 | dependencies: 1151 | ajv "^6.5.5" 1152 | har-schema "^2.0.0" 1153 | 1154 | has-flag@^3.0.0: 1155 | version "3.0.0" 1156 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1157 | 1158 | has-symbols@^1.0.0: 1159 | version "1.0.0" 1160 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 1161 | 1162 | has-unicode@^2.0.0: 1163 | version "2.0.1" 1164 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1165 | 1166 | has-value@^0.3.1: 1167 | version "0.3.1" 1168 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1169 | dependencies: 1170 | get-value "^2.0.3" 1171 | has-values "^0.1.4" 1172 | isobject "^2.0.0" 1173 | 1174 | has-value@^1.0.0: 1175 | version "1.0.0" 1176 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1177 | dependencies: 1178 | get-value "^2.0.6" 1179 | has-values "^1.0.0" 1180 | isobject "^3.0.0" 1181 | 1182 | has-values@^0.1.4: 1183 | version "0.1.4" 1184 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1185 | 1186 | has-values@^1.0.0: 1187 | version "1.0.0" 1188 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1189 | dependencies: 1190 | is-number "^3.0.0" 1191 | kind-of "^4.0.0" 1192 | 1193 | has@^1.0.1, has@^1.0.3: 1194 | version "1.0.3" 1195 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1196 | dependencies: 1197 | function-bind "^1.1.1" 1198 | 1199 | hosted-git-info@^2.1.4: 1200 | version "2.7.1" 1201 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 1202 | 1203 | html-encoding-sniffer@^1.0.2: 1204 | version "1.0.2" 1205 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" 1206 | dependencies: 1207 | whatwg-encoding "^1.0.1" 1208 | 1209 | http-signature@~1.2.0: 1210 | version "1.2.0" 1211 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1212 | dependencies: 1213 | assert-plus "^1.0.0" 1214 | jsprim "^1.2.2" 1215 | sshpk "^1.7.0" 1216 | 1217 | iconv-lite@0.4.24, iconv-lite@^0.4.4: 1218 | version "0.4.24" 1219 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1220 | dependencies: 1221 | safer-buffer ">= 2.1.2 < 3" 1222 | 1223 | ignore-walk@^3.0.1: 1224 | version "3.0.1" 1225 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 1226 | dependencies: 1227 | minimatch "^3.0.4" 1228 | 1229 | import-local@^2.0.0: 1230 | version "2.0.0" 1231 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" 1232 | dependencies: 1233 | pkg-dir "^3.0.0" 1234 | resolve-cwd "^2.0.0" 1235 | 1236 | imurmurhash@^0.1.4: 1237 | version "0.1.4" 1238 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1239 | 1240 | inflight@^1.0.4: 1241 | version "1.0.6" 1242 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1243 | dependencies: 1244 | once "^1.3.0" 1245 | wrappy "1" 1246 | 1247 | inherits@2, inherits@~2.0.3: 1248 | version "2.0.3" 1249 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1250 | 1251 | ini@~1.3.0: 1252 | version "1.3.5" 1253 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1254 | 1255 | invariant@^2.2.4: 1256 | version "2.2.4" 1257 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1258 | dependencies: 1259 | loose-envify "^1.0.0" 1260 | 1261 | invert-kv@^2.0.0: 1262 | version "2.0.0" 1263 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" 1264 | 1265 | is-accessor-descriptor@^0.1.6: 1266 | version "0.1.6" 1267 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1268 | dependencies: 1269 | kind-of "^3.0.2" 1270 | 1271 | is-accessor-descriptor@^1.0.0: 1272 | version "1.0.0" 1273 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1274 | dependencies: 1275 | kind-of "^6.0.0" 1276 | 1277 | is-arrayish@^0.2.1: 1278 | version "0.2.1" 1279 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1280 | 1281 | is-buffer@^1.1.5: 1282 | version "1.1.6" 1283 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1284 | 1285 | is-callable@^1.1.4: 1286 | version "1.1.4" 1287 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 1288 | 1289 | is-ci@^2.0.0: 1290 | version "2.0.0" 1291 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 1292 | dependencies: 1293 | ci-info "^2.0.0" 1294 | 1295 | is-data-descriptor@^0.1.4: 1296 | version "0.1.4" 1297 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1298 | dependencies: 1299 | kind-of "^3.0.2" 1300 | 1301 | is-data-descriptor@^1.0.0: 1302 | version "1.0.0" 1303 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1304 | dependencies: 1305 | kind-of "^6.0.0" 1306 | 1307 | is-date-object@^1.0.1: 1308 | version "1.0.1" 1309 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1310 | 1311 | is-descriptor@^0.1.0: 1312 | version "0.1.6" 1313 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1314 | dependencies: 1315 | is-accessor-descriptor "^0.1.6" 1316 | is-data-descriptor "^0.1.4" 1317 | kind-of "^5.0.0" 1318 | 1319 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1320 | version "1.0.2" 1321 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1322 | dependencies: 1323 | is-accessor-descriptor "^1.0.0" 1324 | is-data-descriptor "^1.0.0" 1325 | kind-of "^6.0.2" 1326 | 1327 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1328 | version "0.1.1" 1329 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1330 | 1331 | is-extendable@^1.0.1: 1332 | version "1.0.1" 1333 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1334 | dependencies: 1335 | is-plain-object "^2.0.4" 1336 | 1337 | is-fullwidth-code-point@^1.0.0: 1338 | version "1.0.0" 1339 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1340 | dependencies: 1341 | number-is-nan "^1.0.0" 1342 | 1343 | is-fullwidth-code-point@^2.0.0: 1344 | version "2.0.0" 1345 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1346 | 1347 | is-generator-fn@^2.0.0: 1348 | version "2.1.0" 1349 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1350 | 1351 | is-number@^3.0.0: 1352 | version "3.0.0" 1353 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1354 | dependencies: 1355 | kind-of "^3.0.2" 1356 | 1357 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1358 | version "2.0.4" 1359 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1360 | dependencies: 1361 | isobject "^3.0.1" 1362 | 1363 | is-regex@^1.0.4: 1364 | version "1.0.4" 1365 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 1366 | dependencies: 1367 | has "^1.0.1" 1368 | 1369 | is-stream@^1.1.0: 1370 | version "1.1.0" 1371 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1372 | 1373 | is-symbol@^1.0.2: 1374 | version "1.0.2" 1375 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 1376 | dependencies: 1377 | has-symbols "^1.0.0" 1378 | 1379 | is-typedarray@~1.0.0: 1380 | version "1.0.0" 1381 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1382 | 1383 | is-windows@^1.0.2: 1384 | version "1.0.2" 1385 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1386 | 1387 | is-wsl@^1.1.0: 1388 | version "1.1.0" 1389 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" 1390 | 1391 | isarray@1.0.0, isarray@~1.0.0: 1392 | version "1.0.0" 1393 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1394 | 1395 | isexe@^2.0.0: 1396 | version "2.0.0" 1397 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1398 | 1399 | isobject@^2.0.0: 1400 | version "2.1.0" 1401 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1402 | dependencies: 1403 | isarray "1.0.0" 1404 | 1405 | isobject@^3.0.0, isobject@^3.0.1: 1406 | version "3.0.1" 1407 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1408 | 1409 | isstream@~0.1.2: 1410 | version "0.1.2" 1411 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1412 | 1413 | istanbul-api@^2.1.1: 1414 | version "2.1.5" 1415 | resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.5.tgz#697b95ec69856c278aacafc0f86ee7392338d5b5" 1416 | dependencies: 1417 | async "^2.6.1" 1418 | compare-versions "^3.2.1" 1419 | fileset "^2.0.3" 1420 | istanbul-lib-coverage "^2.0.4" 1421 | istanbul-lib-hook "^2.0.6" 1422 | istanbul-lib-instrument "^3.2.0" 1423 | istanbul-lib-report "^2.0.7" 1424 | istanbul-lib-source-maps "^3.0.5" 1425 | istanbul-reports "^2.2.3" 1426 | js-yaml "^3.13.0" 1427 | make-dir "^2.1.0" 1428 | minimatch "^3.0.4" 1429 | once "^1.4.0" 1430 | 1431 | istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.4: 1432 | version "2.0.4" 1433 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#927a354005d99dd43a24607bb8b33fd4e9aca1ad" 1434 | 1435 | istanbul-lib-hook@^2.0.6: 1436 | version "2.0.6" 1437 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.6.tgz#5baa6067860a38290aef038b389068b225b01b7d" 1438 | dependencies: 1439 | append-transform "^1.0.0" 1440 | 1441 | istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.2.0: 1442 | version "3.2.0" 1443 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.2.0.tgz#c549208da8a793f6622257a2da83e0ea96ae6a93" 1444 | dependencies: 1445 | "@babel/generator" "^7.0.0" 1446 | "@babel/parser" "^7.0.0" 1447 | "@babel/template" "^7.0.0" 1448 | "@babel/traverse" "^7.0.0" 1449 | "@babel/types" "^7.0.0" 1450 | istanbul-lib-coverage "^2.0.4" 1451 | semver "^6.0.0" 1452 | 1453 | istanbul-lib-report@^2.0.7: 1454 | version "2.0.7" 1455 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.7.tgz#370d80d433c4dbc7f58de63618f49599c74bd954" 1456 | dependencies: 1457 | istanbul-lib-coverage "^2.0.4" 1458 | make-dir "^2.1.0" 1459 | supports-color "^6.0.0" 1460 | 1461 | istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.5: 1462 | version "3.0.5" 1463 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.5.tgz#1d9ee9d94d2633f15611ee7aae28f9cac6d1aeb9" 1464 | dependencies: 1465 | debug "^4.1.1" 1466 | istanbul-lib-coverage "^2.0.4" 1467 | make-dir "^2.1.0" 1468 | rimraf "^2.6.2" 1469 | source-map "^0.6.1" 1470 | 1471 | istanbul-reports@^2.2.3: 1472 | version "2.2.3" 1473 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.3.tgz#14e0d00ecbfa9387757999cf36599b88e9f2176e" 1474 | dependencies: 1475 | handlebars "^4.1.0" 1476 | 1477 | jest-changed-files@^24.7.0: 1478 | version "24.7.0" 1479 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.7.0.tgz#39d723a11b16ed7b373ac83adc76a69464b0c4fa" 1480 | dependencies: 1481 | "@jest/types" "^24.7.0" 1482 | execa "^1.0.0" 1483 | throat "^4.0.0" 1484 | 1485 | jest-cli@^24.7.1: 1486 | version "24.7.1" 1487 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.7.1.tgz#6093a539073b6f4953145abeeb9709cd621044f1" 1488 | dependencies: 1489 | "@jest/core" "^24.7.1" 1490 | "@jest/test-result" "^24.7.1" 1491 | "@jest/types" "^24.7.0" 1492 | chalk "^2.0.1" 1493 | exit "^0.1.2" 1494 | import-local "^2.0.0" 1495 | is-ci "^2.0.0" 1496 | jest-config "^24.7.1" 1497 | jest-util "^24.7.1" 1498 | jest-validate "^24.7.0" 1499 | prompts "^2.0.1" 1500 | realpath-native "^1.1.0" 1501 | yargs "^12.0.2" 1502 | 1503 | jest-config@^24.7.1: 1504 | version "24.7.1" 1505 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.7.1.tgz#6c1dd4db82a89710a3cf66bdba97827c9a1cf052" 1506 | dependencies: 1507 | "@babel/core" "^7.1.0" 1508 | "@jest/test-sequencer" "^24.7.1" 1509 | "@jest/types" "^24.7.0" 1510 | babel-jest "^24.7.1" 1511 | chalk "^2.0.1" 1512 | glob "^7.1.1" 1513 | jest-environment-jsdom "^24.7.1" 1514 | jest-environment-node "^24.7.1" 1515 | jest-get-type "^24.3.0" 1516 | jest-jasmine2 "^24.7.1" 1517 | jest-regex-util "^24.3.0" 1518 | jest-resolve "^24.7.1" 1519 | jest-util "^24.7.1" 1520 | jest-validate "^24.7.0" 1521 | micromatch "^3.1.10" 1522 | pretty-format "^24.7.0" 1523 | realpath-native "^1.1.0" 1524 | 1525 | jest-diff@^24.7.0: 1526 | version "24.7.0" 1527 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.7.0.tgz#5d862899be46249754806f66e5729c07fcb3580f" 1528 | dependencies: 1529 | chalk "^2.0.1" 1530 | diff-sequences "^24.3.0" 1531 | jest-get-type "^24.3.0" 1532 | pretty-format "^24.7.0" 1533 | 1534 | jest-docblock@^24.3.0: 1535 | version "24.3.0" 1536 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" 1537 | dependencies: 1538 | detect-newline "^2.1.0" 1539 | 1540 | jest-each@^24.7.1: 1541 | version "24.7.1" 1542 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.7.1.tgz#fcc7dda4147c28430ad9fb6dc7211cd17ab54e74" 1543 | dependencies: 1544 | "@jest/types" "^24.7.0" 1545 | chalk "^2.0.1" 1546 | jest-get-type "^24.3.0" 1547 | jest-util "^24.7.1" 1548 | pretty-format "^24.7.0" 1549 | 1550 | jest-environment-jsdom@^24.7.1: 1551 | version "24.7.1" 1552 | resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.7.1.tgz#a40e004b4458ebeb8a98082df135fd501b9fbbd6" 1553 | dependencies: 1554 | "@jest/environment" "^24.7.1" 1555 | "@jest/fake-timers" "^24.7.1" 1556 | "@jest/types" "^24.7.0" 1557 | jest-mock "^24.7.0" 1558 | jest-util "^24.7.1" 1559 | jsdom "^11.5.1" 1560 | 1561 | jest-environment-node@^24.7.1: 1562 | version "24.7.1" 1563 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.7.1.tgz#fa2c047a31522a48038d26ee4f7c8fd9c1ecfe12" 1564 | dependencies: 1565 | "@jest/environment" "^24.7.1" 1566 | "@jest/fake-timers" "^24.7.1" 1567 | "@jest/types" "^24.7.0" 1568 | jest-mock "^24.7.0" 1569 | jest-util "^24.7.1" 1570 | 1571 | jest-get-type@^24.3.0: 1572 | version "24.3.0" 1573 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da" 1574 | 1575 | jest-haste-map@^24.7.1: 1576 | version "24.7.1" 1577 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.7.1.tgz#772e215cd84080d4bbcb759cfb668ad649a21471" 1578 | dependencies: 1579 | "@jest/types" "^24.7.0" 1580 | anymatch "^2.0.0" 1581 | fb-watchman "^2.0.0" 1582 | graceful-fs "^4.1.15" 1583 | invariant "^2.2.4" 1584 | jest-serializer "^24.4.0" 1585 | jest-util "^24.7.1" 1586 | jest-worker "^24.6.0" 1587 | micromatch "^3.1.10" 1588 | sane "^4.0.3" 1589 | walker "^1.0.7" 1590 | optionalDependencies: 1591 | fsevents "^1.2.7" 1592 | 1593 | jest-jasmine2@^24.7.1: 1594 | version "24.7.1" 1595 | resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.7.1.tgz#01398686dabe46553716303993f3be62e5d9d818" 1596 | dependencies: 1597 | "@babel/traverse" "^7.1.0" 1598 | "@jest/environment" "^24.7.1" 1599 | "@jest/test-result" "^24.7.1" 1600 | "@jest/types" "^24.7.0" 1601 | chalk "^2.0.1" 1602 | co "^4.6.0" 1603 | expect "^24.7.1" 1604 | is-generator-fn "^2.0.0" 1605 | jest-each "^24.7.1" 1606 | jest-matcher-utils "^24.7.0" 1607 | jest-message-util "^24.7.1" 1608 | jest-runtime "^24.7.1" 1609 | jest-snapshot "^24.7.1" 1610 | jest-util "^24.7.1" 1611 | pretty-format "^24.7.0" 1612 | throat "^4.0.0" 1613 | 1614 | jest-leak-detector@^24.7.0: 1615 | version "24.7.0" 1616 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.7.0.tgz#323ff93ed69be12e898f5b040952f08a94288ff9" 1617 | dependencies: 1618 | pretty-format "^24.7.0" 1619 | 1620 | jest-matcher-utils@^24.7.0: 1621 | version "24.7.0" 1622 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.7.0.tgz#bbee1ff37bc8b2e4afcaabc91617c1526af4bcd4" 1623 | dependencies: 1624 | chalk "^2.0.1" 1625 | jest-diff "^24.7.0" 1626 | jest-get-type "^24.3.0" 1627 | pretty-format "^24.7.0" 1628 | 1629 | jest-message-util@^24.7.1: 1630 | version "24.7.1" 1631 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.7.1.tgz#f1dc3a6c195647096a99d0f1dadbc447ae547018" 1632 | dependencies: 1633 | "@babel/code-frame" "^7.0.0" 1634 | "@jest/test-result" "^24.7.1" 1635 | "@jest/types" "^24.7.0" 1636 | "@types/stack-utils" "^1.0.1" 1637 | chalk "^2.0.1" 1638 | micromatch "^3.1.10" 1639 | slash "^2.0.0" 1640 | stack-utils "^1.0.1" 1641 | 1642 | jest-mock@^24.7.0: 1643 | version "24.7.0" 1644 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.7.0.tgz#e49ce7262c12d7f5897b0d8af77f6db8e538023b" 1645 | dependencies: 1646 | "@jest/types" "^24.7.0" 1647 | 1648 | jest-pnp-resolver@^1.2.1: 1649 | version "1.2.1" 1650 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" 1651 | 1652 | jest-regex-util@^24.3.0: 1653 | version "24.3.0" 1654 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" 1655 | 1656 | jest-resolve-dependencies@^24.7.1: 1657 | version "24.7.1" 1658 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.7.1.tgz#cf93bbef26999488a96a2b2012f9fe7375aa378f" 1659 | dependencies: 1660 | "@jest/types" "^24.7.0" 1661 | jest-regex-util "^24.3.0" 1662 | jest-snapshot "^24.7.1" 1663 | 1664 | jest-resolve@^24.7.1: 1665 | version "24.7.1" 1666 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.7.1.tgz#e4150198299298380a75a9fd55043fa3b9b17fde" 1667 | dependencies: 1668 | "@jest/types" "^24.7.0" 1669 | browser-resolve "^1.11.3" 1670 | chalk "^2.0.1" 1671 | jest-pnp-resolver "^1.2.1" 1672 | realpath-native "^1.1.0" 1673 | 1674 | jest-runner@^24.7.1: 1675 | version "24.7.1" 1676 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.7.1.tgz#41c8a02a06aa23ea82d8bffd69d7fa98d32f85bf" 1677 | dependencies: 1678 | "@jest/console" "^24.7.1" 1679 | "@jest/environment" "^24.7.1" 1680 | "@jest/test-result" "^24.7.1" 1681 | "@jest/types" "^24.7.0" 1682 | chalk "^2.4.2" 1683 | exit "^0.1.2" 1684 | graceful-fs "^4.1.15" 1685 | jest-config "^24.7.1" 1686 | jest-docblock "^24.3.0" 1687 | jest-haste-map "^24.7.1" 1688 | jest-jasmine2 "^24.7.1" 1689 | jest-leak-detector "^24.7.0" 1690 | jest-message-util "^24.7.1" 1691 | jest-resolve "^24.7.1" 1692 | jest-runtime "^24.7.1" 1693 | jest-util "^24.7.1" 1694 | jest-worker "^24.6.0" 1695 | source-map-support "^0.5.6" 1696 | throat "^4.0.0" 1697 | 1698 | jest-runtime@^24.7.1: 1699 | version "24.7.1" 1700 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.7.1.tgz#2ffd70b22dd03a5988c0ab9465c85cdf5d25c597" 1701 | dependencies: 1702 | "@jest/console" "^24.7.1" 1703 | "@jest/environment" "^24.7.1" 1704 | "@jest/source-map" "^24.3.0" 1705 | "@jest/transform" "^24.7.1" 1706 | "@jest/types" "^24.7.0" 1707 | "@types/yargs" "^12.0.2" 1708 | chalk "^2.0.1" 1709 | exit "^0.1.2" 1710 | glob "^7.1.3" 1711 | graceful-fs "^4.1.15" 1712 | jest-config "^24.7.1" 1713 | jest-haste-map "^24.7.1" 1714 | jest-message-util "^24.7.1" 1715 | jest-mock "^24.7.0" 1716 | jest-regex-util "^24.3.0" 1717 | jest-resolve "^24.7.1" 1718 | jest-snapshot "^24.7.1" 1719 | jest-util "^24.7.1" 1720 | jest-validate "^24.7.0" 1721 | realpath-native "^1.1.0" 1722 | slash "^2.0.0" 1723 | strip-bom "^3.0.0" 1724 | yargs "^12.0.2" 1725 | 1726 | jest-serializer@^24.4.0: 1727 | version "24.4.0" 1728 | resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" 1729 | 1730 | jest-snapshot@^24.7.1: 1731 | version "24.7.1" 1732 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.7.1.tgz#bd5a35f74aedff070975e9e9c90024f082099568" 1733 | dependencies: 1734 | "@babel/types" "^7.0.0" 1735 | "@jest/types" "^24.7.0" 1736 | chalk "^2.0.1" 1737 | expect "^24.7.1" 1738 | jest-diff "^24.7.0" 1739 | jest-matcher-utils "^24.7.0" 1740 | jest-message-util "^24.7.1" 1741 | jest-resolve "^24.7.1" 1742 | mkdirp "^0.5.1" 1743 | natural-compare "^1.4.0" 1744 | pretty-format "^24.7.0" 1745 | semver "^5.5.0" 1746 | 1747 | jest-util@^24.7.1: 1748 | version "24.7.1" 1749 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.7.1.tgz#b4043df57b32a23be27c75a2763d8faf242038ff" 1750 | dependencies: 1751 | "@jest/console" "^24.7.1" 1752 | "@jest/fake-timers" "^24.7.1" 1753 | "@jest/source-map" "^24.3.0" 1754 | "@jest/test-result" "^24.7.1" 1755 | "@jest/types" "^24.7.0" 1756 | callsites "^3.0.0" 1757 | chalk "^2.0.1" 1758 | graceful-fs "^4.1.15" 1759 | is-ci "^2.0.0" 1760 | mkdirp "^0.5.1" 1761 | slash "^2.0.0" 1762 | source-map "^0.6.0" 1763 | 1764 | jest-validate@^24.7.0: 1765 | version "24.7.0" 1766 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.7.0.tgz#70007076f338528ee1b1c8a8258b1b0bb982508d" 1767 | dependencies: 1768 | "@jest/types" "^24.7.0" 1769 | camelcase "^5.0.0" 1770 | chalk "^2.0.1" 1771 | jest-get-type "^24.3.0" 1772 | leven "^2.1.0" 1773 | pretty-format "^24.7.0" 1774 | 1775 | jest-watcher@^24.7.1: 1776 | version "24.7.1" 1777 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.7.1.tgz#e161363d7f3f4e1ef3d389b7b3a0aad247b673f5" 1778 | dependencies: 1779 | "@jest/test-result" "^24.7.1" 1780 | "@jest/types" "^24.7.0" 1781 | "@types/yargs" "^12.0.9" 1782 | ansi-escapes "^3.0.0" 1783 | chalk "^2.0.1" 1784 | jest-util "^24.7.1" 1785 | string-length "^2.0.0" 1786 | 1787 | jest-worker@^24.6.0: 1788 | version "24.6.0" 1789 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" 1790 | dependencies: 1791 | merge-stream "^1.0.1" 1792 | supports-color "^6.1.0" 1793 | 1794 | jest@^24.7.1: 1795 | version "24.7.1" 1796 | resolved "https://registry.yarnpkg.com/jest/-/jest-24.7.1.tgz#0d94331cf510c75893ee32f87d7321d5bf8f2501" 1797 | dependencies: 1798 | import-local "^2.0.0" 1799 | jest-cli "^24.7.1" 1800 | 1801 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1802 | version "4.0.0" 1803 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1804 | 1805 | js-yaml@^3.13.0: 1806 | version "3.13.1" 1807 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1808 | dependencies: 1809 | argparse "^1.0.7" 1810 | esprima "^4.0.0" 1811 | 1812 | jsbn@~0.1.0: 1813 | version "0.1.1" 1814 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1815 | 1816 | jsdom@^11.5.1: 1817 | version "11.12.0" 1818 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" 1819 | dependencies: 1820 | abab "^2.0.0" 1821 | acorn "^5.5.3" 1822 | acorn-globals "^4.1.0" 1823 | array-equal "^1.0.0" 1824 | cssom ">= 0.3.2 < 0.4.0" 1825 | cssstyle "^1.0.0" 1826 | data-urls "^1.0.0" 1827 | domexception "^1.0.1" 1828 | escodegen "^1.9.1" 1829 | html-encoding-sniffer "^1.0.2" 1830 | left-pad "^1.3.0" 1831 | nwsapi "^2.0.7" 1832 | parse5 "4.0.0" 1833 | pn "^1.1.0" 1834 | request "^2.87.0" 1835 | request-promise-native "^1.0.5" 1836 | sax "^1.2.4" 1837 | symbol-tree "^3.2.2" 1838 | tough-cookie "^2.3.4" 1839 | w3c-hr-time "^1.0.1" 1840 | webidl-conversions "^4.0.2" 1841 | whatwg-encoding "^1.0.3" 1842 | whatwg-mimetype "^2.1.0" 1843 | whatwg-url "^6.4.1" 1844 | ws "^5.2.0" 1845 | xml-name-validator "^3.0.0" 1846 | 1847 | jsesc@^2.5.1: 1848 | version "2.5.2" 1849 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1850 | 1851 | json-parse-better-errors@^1.0.1: 1852 | version "1.0.2" 1853 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1854 | 1855 | json-schema-traverse@^0.4.1: 1856 | version "0.4.1" 1857 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1858 | 1859 | json-schema@0.2.3: 1860 | version "0.2.3" 1861 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1862 | 1863 | json-stringify-safe@~5.0.1: 1864 | version "5.0.1" 1865 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1866 | 1867 | json5@^2.1.0: 1868 | version "2.1.0" 1869 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" 1870 | dependencies: 1871 | minimist "^1.2.0" 1872 | 1873 | jsprim@^1.2.2: 1874 | version "1.4.1" 1875 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1876 | dependencies: 1877 | assert-plus "1.0.0" 1878 | extsprintf "1.3.0" 1879 | json-schema "0.2.3" 1880 | verror "1.10.0" 1881 | 1882 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 1883 | version "3.2.2" 1884 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1885 | dependencies: 1886 | is-buffer "^1.1.5" 1887 | 1888 | kind-of@^4.0.0: 1889 | version "4.0.0" 1890 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1891 | dependencies: 1892 | is-buffer "^1.1.5" 1893 | 1894 | kind-of@^5.0.0: 1895 | version "5.1.0" 1896 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1897 | 1898 | kind-of@^6.0.0, kind-of@^6.0.2: 1899 | version "6.0.2" 1900 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 1901 | 1902 | kleur@^3.0.2: 1903 | version "3.0.3" 1904 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 1905 | 1906 | lcid@^2.0.0: 1907 | version "2.0.0" 1908 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" 1909 | dependencies: 1910 | invert-kv "^2.0.0" 1911 | 1912 | left-pad@^1.3.0: 1913 | version "1.3.0" 1914 | resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" 1915 | 1916 | leven@^2.1.0: 1917 | version "2.1.0" 1918 | resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" 1919 | 1920 | levn@~0.3.0: 1921 | version "0.3.0" 1922 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1923 | dependencies: 1924 | prelude-ls "~1.1.2" 1925 | type-check "~0.3.2" 1926 | 1927 | load-json-file@^4.0.0: 1928 | version "4.0.0" 1929 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 1930 | dependencies: 1931 | graceful-fs "^4.1.2" 1932 | parse-json "^4.0.0" 1933 | pify "^3.0.0" 1934 | strip-bom "^3.0.0" 1935 | 1936 | locate-path@^3.0.0: 1937 | version "3.0.0" 1938 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1939 | dependencies: 1940 | p-locate "^3.0.0" 1941 | path-exists "^3.0.0" 1942 | 1943 | lodash.sortby@^4.7.0: 1944 | version "4.7.0" 1945 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 1946 | 1947 | lodash@^4.17.11: 1948 | version "4.17.11" 1949 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 1950 | 1951 | loose-envify@^1.0.0: 1952 | version "1.4.0" 1953 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1954 | dependencies: 1955 | js-tokens "^3.0.0 || ^4.0.0" 1956 | 1957 | make-dir@^2.1.0: 1958 | version "2.1.0" 1959 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 1960 | dependencies: 1961 | pify "^4.0.1" 1962 | semver "^5.6.0" 1963 | 1964 | makeerror@1.0.x: 1965 | version "1.0.11" 1966 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" 1967 | dependencies: 1968 | tmpl "1.0.x" 1969 | 1970 | map-age-cleaner@^0.1.1: 1971 | version "0.1.3" 1972 | resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" 1973 | dependencies: 1974 | p-defer "^1.0.0" 1975 | 1976 | map-cache@^0.2.2: 1977 | version "0.2.2" 1978 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1979 | 1980 | map-visit@^1.0.0: 1981 | version "1.0.0" 1982 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1983 | dependencies: 1984 | object-visit "^1.0.0" 1985 | 1986 | mem@^4.0.0: 1987 | version "4.3.0" 1988 | resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" 1989 | dependencies: 1990 | map-age-cleaner "^0.1.1" 1991 | mimic-fn "^2.0.0" 1992 | p-is-promise "^2.0.0" 1993 | 1994 | merge-stream@^1.0.1: 1995 | version "1.0.1" 1996 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" 1997 | dependencies: 1998 | readable-stream "^2.0.1" 1999 | 2000 | micromatch@^3.1.10, micromatch@^3.1.4: 2001 | version "3.1.10" 2002 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 2003 | dependencies: 2004 | arr-diff "^4.0.0" 2005 | array-unique "^0.3.2" 2006 | braces "^2.3.1" 2007 | define-property "^2.0.2" 2008 | extend-shallow "^3.0.2" 2009 | extglob "^2.0.4" 2010 | fragment-cache "^0.2.1" 2011 | kind-of "^6.0.2" 2012 | nanomatch "^1.2.9" 2013 | object.pick "^1.3.0" 2014 | regex-not "^1.0.0" 2015 | snapdragon "^0.8.1" 2016 | to-regex "^3.0.2" 2017 | 2018 | mime-db@1.40.0: 2019 | version "1.40.0" 2020 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" 2021 | 2022 | mime-types@^2.1.12, mime-types@~2.1.19: 2023 | version "2.1.24" 2024 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" 2025 | dependencies: 2026 | mime-db "1.40.0" 2027 | 2028 | mimic-fn@^2.0.0: 2029 | version "2.1.0" 2030 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 2031 | 2032 | minimatch@^3.0.3, minimatch@^3.0.4: 2033 | version "3.0.4" 2034 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2035 | dependencies: 2036 | brace-expansion "^1.1.7" 2037 | 2038 | minimist@0.0.8: 2039 | version "0.0.8" 2040 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 2041 | 2042 | minimist@^1.1.1, minimist@^1.2.0: 2043 | version "1.2.0" 2044 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 2045 | 2046 | minimist@~0.0.1: 2047 | version "0.0.10" 2048 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 2049 | 2050 | minipass@^2.2.1, minipass@^2.3.4: 2051 | version "2.3.5" 2052 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" 2053 | dependencies: 2054 | safe-buffer "^5.1.2" 2055 | yallist "^3.0.0" 2056 | 2057 | minizlib@^1.1.1: 2058 | version "1.2.1" 2059 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" 2060 | dependencies: 2061 | minipass "^2.2.1" 2062 | 2063 | mixin-deep@^1.2.0: 2064 | version "1.3.1" 2065 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" 2066 | dependencies: 2067 | for-in "^1.0.2" 2068 | is-extendable "^1.0.1" 2069 | 2070 | mkdirp@^0.5.0, mkdirp@^0.5.1: 2071 | version "0.5.1" 2072 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 2073 | dependencies: 2074 | minimist "0.0.8" 2075 | 2076 | ms@2.0.0: 2077 | version "2.0.0" 2078 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2079 | 2080 | ms@^2.1.1: 2081 | version "2.1.1" 2082 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 2083 | 2084 | nan@^2.12.1: 2085 | version "2.13.2" 2086 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" 2087 | 2088 | nanomatch@^1.2.9: 2089 | version "1.2.13" 2090 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 2091 | dependencies: 2092 | arr-diff "^4.0.0" 2093 | array-unique "^0.3.2" 2094 | define-property "^2.0.2" 2095 | extend-shallow "^3.0.2" 2096 | fragment-cache "^0.2.1" 2097 | is-windows "^1.0.2" 2098 | kind-of "^6.0.2" 2099 | object.pick "^1.3.0" 2100 | regex-not "^1.0.0" 2101 | snapdragon "^0.8.1" 2102 | to-regex "^3.0.1" 2103 | 2104 | natural-compare@^1.4.0: 2105 | version "1.4.0" 2106 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2107 | 2108 | needle@^2.2.1: 2109 | version "2.3.1" 2110 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.1.tgz#d272f2f4034afb9c4c9ab1379aabc17fc85c9388" 2111 | dependencies: 2112 | debug "^4.1.0" 2113 | iconv-lite "^0.4.4" 2114 | sax "^1.2.4" 2115 | 2116 | neo-async@^2.6.0: 2117 | version "2.6.0" 2118 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" 2119 | 2120 | nice-try@^1.0.4: 2121 | version "1.0.5" 2122 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 2123 | 2124 | node-int64@^0.4.0: 2125 | version "0.4.0" 2126 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 2127 | 2128 | node-modules-regexp@^1.0.0: 2129 | version "1.0.0" 2130 | resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" 2131 | 2132 | node-notifier@^5.2.1: 2133 | version "5.4.0" 2134 | resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a" 2135 | dependencies: 2136 | growly "^1.3.0" 2137 | is-wsl "^1.1.0" 2138 | semver "^5.5.0" 2139 | shellwords "^0.1.1" 2140 | which "^1.3.0" 2141 | 2142 | node-pre-gyp@^0.12.0: 2143 | version "0.12.0" 2144 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" 2145 | dependencies: 2146 | detect-libc "^1.0.2" 2147 | mkdirp "^0.5.1" 2148 | needle "^2.2.1" 2149 | nopt "^4.0.1" 2150 | npm-packlist "^1.1.6" 2151 | npmlog "^4.0.2" 2152 | rc "^1.2.7" 2153 | rimraf "^2.6.1" 2154 | semver "^5.3.0" 2155 | tar "^4" 2156 | 2157 | nopt@^4.0.1: 2158 | version "4.0.1" 2159 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 2160 | dependencies: 2161 | abbrev "1" 2162 | osenv "^0.1.4" 2163 | 2164 | normalize-package-data@^2.3.2: 2165 | version "2.5.0" 2166 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 2167 | dependencies: 2168 | hosted-git-info "^2.1.4" 2169 | resolve "^1.10.0" 2170 | semver "2 || 3 || 4 || 5" 2171 | validate-npm-package-license "^3.0.1" 2172 | 2173 | normalize-path@^2.1.1: 2174 | version "2.1.1" 2175 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 2176 | dependencies: 2177 | remove-trailing-separator "^1.0.1" 2178 | 2179 | npm-bundled@^1.0.1: 2180 | version "1.0.6" 2181 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" 2182 | 2183 | npm-packlist@^1.1.6: 2184 | version "1.4.1" 2185 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" 2186 | dependencies: 2187 | ignore-walk "^3.0.1" 2188 | npm-bundled "^1.0.1" 2189 | 2190 | npm-run-path@^2.0.0: 2191 | version "2.0.2" 2192 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 2193 | dependencies: 2194 | path-key "^2.0.0" 2195 | 2196 | npmlog@^4.0.2: 2197 | version "4.1.2" 2198 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 2199 | dependencies: 2200 | are-we-there-yet "~1.1.2" 2201 | console-control-strings "~1.1.0" 2202 | gauge "~2.7.3" 2203 | set-blocking "~2.0.0" 2204 | 2205 | number-is-nan@^1.0.0: 2206 | version "1.0.1" 2207 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 2208 | 2209 | nwsapi@^2.0.7: 2210 | version "2.1.3" 2211 | resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.3.tgz#25f3a5cec26c654f7376df6659cdf84b99df9558" 2212 | 2213 | oauth-sign@~0.9.0: 2214 | version "0.9.0" 2215 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 2216 | 2217 | object-assign@^4.1.0: 2218 | version "4.1.1" 2219 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2220 | 2221 | object-copy@^0.1.0: 2222 | version "0.1.0" 2223 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 2224 | dependencies: 2225 | copy-descriptor "^0.1.0" 2226 | define-property "^0.2.5" 2227 | kind-of "^3.0.3" 2228 | 2229 | object-keys@^1.0.12: 2230 | version "1.1.1" 2231 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 2232 | 2233 | object-visit@^1.0.0: 2234 | version "1.0.1" 2235 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 2236 | dependencies: 2237 | isobject "^3.0.0" 2238 | 2239 | object.getownpropertydescriptors@^2.0.3: 2240 | version "2.0.3" 2241 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" 2242 | dependencies: 2243 | define-properties "^1.1.2" 2244 | es-abstract "^1.5.1" 2245 | 2246 | object.pick@^1.3.0: 2247 | version "1.3.0" 2248 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 2249 | dependencies: 2250 | isobject "^3.0.1" 2251 | 2252 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 2253 | version "1.4.0" 2254 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2255 | dependencies: 2256 | wrappy "1" 2257 | 2258 | optimist@^0.6.1: 2259 | version "0.6.1" 2260 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 2261 | dependencies: 2262 | minimist "~0.0.1" 2263 | wordwrap "~0.0.2" 2264 | 2265 | optionator@^0.8.1: 2266 | version "0.8.2" 2267 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 2268 | dependencies: 2269 | deep-is "~0.1.3" 2270 | fast-levenshtein "~2.0.4" 2271 | levn "~0.3.0" 2272 | prelude-ls "~1.1.2" 2273 | type-check "~0.3.2" 2274 | wordwrap "~1.0.0" 2275 | 2276 | os-homedir@^1.0.0: 2277 | version "1.0.2" 2278 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 2279 | 2280 | os-locale@^3.0.0: 2281 | version "3.1.0" 2282 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" 2283 | dependencies: 2284 | execa "^1.0.0" 2285 | lcid "^2.0.0" 2286 | mem "^4.0.0" 2287 | 2288 | os-tmpdir@^1.0.0: 2289 | version "1.0.2" 2290 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 2291 | 2292 | osenv@^0.1.4: 2293 | version "0.1.5" 2294 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 2295 | dependencies: 2296 | os-homedir "^1.0.0" 2297 | os-tmpdir "^1.0.0" 2298 | 2299 | p-defer@^1.0.0: 2300 | version "1.0.0" 2301 | resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" 2302 | 2303 | p-each-series@^1.0.0: 2304 | version "1.0.0" 2305 | resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" 2306 | dependencies: 2307 | p-reduce "^1.0.0" 2308 | 2309 | p-finally@^1.0.0: 2310 | version "1.0.0" 2311 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 2312 | 2313 | p-is-promise@^2.0.0: 2314 | version "2.1.0" 2315 | resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" 2316 | 2317 | p-limit@^2.0.0: 2318 | version "2.2.0" 2319 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" 2320 | dependencies: 2321 | p-try "^2.0.0" 2322 | 2323 | p-locate@^3.0.0: 2324 | version "3.0.0" 2325 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 2326 | dependencies: 2327 | p-limit "^2.0.0" 2328 | 2329 | p-reduce@^1.0.0: 2330 | version "1.0.0" 2331 | resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" 2332 | 2333 | p-try@^2.0.0: 2334 | version "2.2.0" 2335 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2336 | 2337 | parse-json@^4.0.0: 2338 | version "4.0.0" 2339 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 2340 | dependencies: 2341 | error-ex "^1.3.1" 2342 | json-parse-better-errors "^1.0.1" 2343 | 2344 | parse5@4.0.0: 2345 | version "4.0.0" 2346 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" 2347 | 2348 | pascalcase@^0.1.1: 2349 | version "0.1.1" 2350 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 2351 | 2352 | path-exists@^3.0.0: 2353 | version "3.0.0" 2354 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2355 | 2356 | path-is-absolute@^1.0.0: 2357 | version "1.0.1" 2358 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2359 | 2360 | path-key@^2.0.0, path-key@^2.0.1: 2361 | version "2.0.1" 2362 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2363 | 2364 | path-parse@^1.0.6: 2365 | version "1.0.6" 2366 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 2367 | 2368 | path-type@^3.0.0: 2369 | version "3.0.0" 2370 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 2371 | dependencies: 2372 | pify "^3.0.0" 2373 | 2374 | performance-now@^2.1.0: 2375 | version "2.1.0" 2376 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 2377 | 2378 | pify@^3.0.0: 2379 | version "3.0.0" 2380 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2381 | 2382 | pify@^4.0.1: 2383 | version "4.0.1" 2384 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 2385 | 2386 | pirates@^4.0.1: 2387 | version "4.0.1" 2388 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" 2389 | dependencies: 2390 | node-modules-regexp "^1.0.0" 2391 | 2392 | pkg-dir@^3.0.0: 2393 | version "3.0.0" 2394 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" 2395 | dependencies: 2396 | find-up "^3.0.0" 2397 | 2398 | pn@^1.1.0: 2399 | version "1.1.0" 2400 | resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" 2401 | 2402 | posix-character-classes@^0.1.0: 2403 | version "0.1.1" 2404 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2405 | 2406 | prelude-ls@~1.1.2: 2407 | version "1.1.2" 2408 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 2409 | 2410 | pretty-format@^24.7.0: 2411 | version "24.7.0" 2412 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.7.0.tgz#d23106bc2edcd776079c2daa5da02bcb12ed0c10" 2413 | dependencies: 2414 | "@jest/types" "^24.7.0" 2415 | ansi-regex "^4.0.0" 2416 | ansi-styles "^3.2.0" 2417 | react-is "^16.8.4" 2418 | 2419 | process-nextick-args@~2.0.0: 2420 | version "2.0.0" 2421 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 2422 | 2423 | prompts@^2.0.1: 2424 | version "2.0.4" 2425 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.4.tgz#179f9d4db3128b9933aa35f93a800d8fce76a682" 2426 | dependencies: 2427 | kleur "^3.0.2" 2428 | sisteransi "^1.0.0" 2429 | 2430 | psl@^1.1.24, psl@^1.1.28: 2431 | version "1.1.31" 2432 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" 2433 | 2434 | pump@^3.0.0: 2435 | version "3.0.0" 2436 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 2437 | dependencies: 2438 | end-of-stream "^1.1.0" 2439 | once "^1.3.1" 2440 | 2441 | punycode@^1.4.1: 2442 | version "1.4.1" 2443 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2444 | 2445 | punycode@^2.1.0, punycode@^2.1.1: 2446 | version "2.1.1" 2447 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2448 | 2449 | qs@~6.5.2: 2450 | version "6.5.2" 2451 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 2452 | 2453 | rc@^1.2.7: 2454 | version "1.2.8" 2455 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 2456 | dependencies: 2457 | deep-extend "^0.6.0" 2458 | ini "~1.3.0" 2459 | minimist "^1.2.0" 2460 | strip-json-comments "~2.0.1" 2461 | 2462 | react-is@^16.8.4: 2463 | version "16.8.6" 2464 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" 2465 | 2466 | read-pkg-up@^4.0.0: 2467 | version "4.0.0" 2468 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" 2469 | dependencies: 2470 | find-up "^3.0.0" 2471 | read-pkg "^3.0.0" 2472 | 2473 | read-pkg@^3.0.0: 2474 | version "3.0.0" 2475 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 2476 | dependencies: 2477 | load-json-file "^4.0.0" 2478 | normalize-package-data "^2.3.2" 2479 | path-type "^3.0.0" 2480 | 2481 | readable-stream@^2.0.1, readable-stream@^2.0.6: 2482 | version "2.3.6" 2483 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2484 | dependencies: 2485 | core-util-is "~1.0.0" 2486 | inherits "~2.0.3" 2487 | isarray "~1.0.0" 2488 | process-nextick-args "~2.0.0" 2489 | safe-buffer "~5.1.1" 2490 | string_decoder "~1.1.1" 2491 | util-deprecate "~1.0.1" 2492 | 2493 | realpath-native@^1.1.0: 2494 | version "1.1.0" 2495 | resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" 2496 | dependencies: 2497 | util.promisify "^1.0.0" 2498 | 2499 | regex-not@^1.0.0, regex-not@^1.0.2: 2500 | version "1.0.2" 2501 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2502 | dependencies: 2503 | extend-shallow "^3.0.2" 2504 | safe-regex "^1.1.0" 2505 | 2506 | remove-trailing-separator@^1.0.1: 2507 | version "1.1.0" 2508 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2509 | 2510 | repeat-element@^1.1.2: 2511 | version "1.1.3" 2512 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 2513 | 2514 | repeat-string@^1.6.1: 2515 | version "1.6.1" 2516 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2517 | 2518 | request-promise-core@1.1.2: 2519 | version "1.1.2" 2520 | resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" 2521 | dependencies: 2522 | lodash "^4.17.11" 2523 | 2524 | request-promise-native@^1.0.5: 2525 | version "1.0.7" 2526 | resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" 2527 | dependencies: 2528 | request-promise-core "1.1.2" 2529 | stealthy-require "^1.1.1" 2530 | tough-cookie "^2.3.3" 2531 | 2532 | request@^2.87.0: 2533 | version "2.88.0" 2534 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" 2535 | dependencies: 2536 | aws-sign2 "~0.7.0" 2537 | aws4 "^1.8.0" 2538 | caseless "~0.12.0" 2539 | combined-stream "~1.0.6" 2540 | extend "~3.0.2" 2541 | forever-agent "~0.6.1" 2542 | form-data "~2.3.2" 2543 | har-validator "~5.1.0" 2544 | http-signature "~1.2.0" 2545 | is-typedarray "~1.0.0" 2546 | isstream "~0.1.2" 2547 | json-stringify-safe "~5.0.1" 2548 | mime-types "~2.1.19" 2549 | oauth-sign "~0.9.0" 2550 | performance-now "^2.1.0" 2551 | qs "~6.5.2" 2552 | safe-buffer "^5.1.2" 2553 | tough-cookie "~2.4.3" 2554 | tunnel-agent "^0.6.0" 2555 | uuid "^3.3.2" 2556 | 2557 | require-directory@^2.1.1: 2558 | version "2.1.1" 2559 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2560 | 2561 | require-main-filename@^1.0.1: 2562 | version "1.0.1" 2563 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 2564 | 2565 | require-main-filename@^2.0.0: 2566 | version "2.0.0" 2567 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 2568 | 2569 | resolve-cwd@^2.0.0: 2570 | version "2.0.0" 2571 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" 2572 | dependencies: 2573 | resolve-from "^3.0.0" 2574 | 2575 | resolve-from@^3.0.0: 2576 | version "3.0.0" 2577 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" 2578 | 2579 | resolve-url@^0.2.1: 2580 | version "0.2.1" 2581 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2582 | 2583 | resolve@1.1.7: 2584 | version "1.1.7" 2585 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2586 | 2587 | resolve@^1.10.0, resolve@^1.3.2: 2588 | version "1.10.1" 2589 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" 2590 | dependencies: 2591 | path-parse "^1.0.6" 2592 | 2593 | ret@~0.1.10: 2594 | version "0.1.15" 2595 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2596 | 2597 | rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: 2598 | version "2.6.3" 2599 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 2600 | dependencies: 2601 | glob "^7.1.3" 2602 | 2603 | rsvp@^4.8.4: 2604 | version "4.8.4" 2605 | resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" 2606 | 2607 | safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2608 | version "5.1.2" 2609 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2610 | 2611 | safe-regex@^1.1.0: 2612 | version "1.1.0" 2613 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2614 | dependencies: 2615 | ret "~0.1.10" 2616 | 2617 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 2618 | version "2.1.2" 2619 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2620 | 2621 | sane@^4.0.3: 2622 | version "4.1.0" 2623 | resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" 2624 | dependencies: 2625 | "@cnakazawa/watch" "^1.0.3" 2626 | anymatch "^2.0.0" 2627 | capture-exit "^2.0.0" 2628 | exec-sh "^0.3.2" 2629 | execa "^1.0.0" 2630 | fb-watchman "^2.0.0" 2631 | micromatch "^3.1.4" 2632 | minimist "^1.1.1" 2633 | walker "~1.0.5" 2634 | 2635 | sax@^1.2.4: 2636 | version "1.2.4" 2637 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 2638 | 2639 | "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: 2640 | version "5.7.0" 2641 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 2642 | 2643 | semver@^6.0.0: 2644 | version "6.0.0" 2645 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" 2646 | 2647 | set-blocking@^2.0.0, set-blocking@~2.0.0: 2648 | version "2.0.0" 2649 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2650 | 2651 | set-value@^0.4.3: 2652 | version "0.4.3" 2653 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 2654 | dependencies: 2655 | extend-shallow "^2.0.1" 2656 | is-extendable "^0.1.1" 2657 | is-plain-object "^2.0.1" 2658 | to-object-path "^0.3.0" 2659 | 2660 | set-value@^2.0.0: 2661 | version "2.0.0" 2662 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 2663 | dependencies: 2664 | extend-shallow "^2.0.1" 2665 | is-extendable "^0.1.1" 2666 | is-plain-object "^2.0.3" 2667 | split-string "^3.0.1" 2668 | 2669 | shebang-command@^1.2.0: 2670 | version "1.2.0" 2671 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2672 | dependencies: 2673 | shebang-regex "^1.0.0" 2674 | 2675 | shebang-regex@^1.0.0: 2676 | version "1.0.0" 2677 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2678 | 2679 | shellwords@^0.1.1: 2680 | version "0.1.1" 2681 | resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" 2682 | 2683 | signal-exit@^3.0.0, signal-exit@^3.0.2: 2684 | version "3.0.2" 2685 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2686 | 2687 | sisteransi@^1.0.0: 2688 | version "1.0.0" 2689 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" 2690 | 2691 | slash@^2.0.0: 2692 | version "2.0.0" 2693 | resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" 2694 | 2695 | snapdragon-node@^2.0.1: 2696 | version "2.1.1" 2697 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 2698 | dependencies: 2699 | define-property "^1.0.0" 2700 | isobject "^3.0.0" 2701 | snapdragon-util "^3.0.1" 2702 | 2703 | snapdragon-util@^3.0.1: 2704 | version "3.0.1" 2705 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 2706 | dependencies: 2707 | kind-of "^3.2.0" 2708 | 2709 | snapdragon@^0.8.1: 2710 | version "0.8.2" 2711 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 2712 | dependencies: 2713 | base "^0.11.1" 2714 | debug "^2.2.0" 2715 | define-property "^0.2.5" 2716 | extend-shallow "^2.0.1" 2717 | map-cache "^0.2.2" 2718 | source-map "^0.5.6" 2719 | source-map-resolve "^0.5.0" 2720 | use "^3.1.0" 2721 | 2722 | source-map-resolve@^0.5.0: 2723 | version "0.5.2" 2724 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 2725 | dependencies: 2726 | atob "^2.1.1" 2727 | decode-uri-component "^0.2.0" 2728 | resolve-url "^0.2.1" 2729 | source-map-url "^0.4.0" 2730 | urix "^0.1.0" 2731 | 2732 | source-map-support@^0.5.6: 2733 | version "0.5.12" 2734 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" 2735 | dependencies: 2736 | buffer-from "^1.0.0" 2737 | source-map "^0.6.0" 2738 | 2739 | source-map-url@^0.4.0: 2740 | version "0.4.0" 2741 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 2742 | 2743 | source-map@^0.5.0, source-map@^0.5.6: 2744 | version "0.5.7" 2745 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2746 | 2747 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 2748 | version "0.6.1" 2749 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2750 | 2751 | spdx-correct@^3.0.0: 2752 | version "3.1.0" 2753 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" 2754 | dependencies: 2755 | spdx-expression-parse "^3.0.0" 2756 | spdx-license-ids "^3.0.0" 2757 | 2758 | spdx-exceptions@^2.1.0: 2759 | version "2.2.0" 2760 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 2761 | 2762 | spdx-expression-parse@^3.0.0: 2763 | version "3.0.0" 2764 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 2765 | dependencies: 2766 | spdx-exceptions "^2.1.0" 2767 | spdx-license-ids "^3.0.0" 2768 | 2769 | spdx-license-ids@^3.0.0: 2770 | version "3.0.4" 2771 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" 2772 | 2773 | split-string@^3.0.1, split-string@^3.0.2: 2774 | version "3.1.0" 2775 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 2776 | dependencies: 2777 | extend-shallow "^3.0.0" 2778 | 2779 | sprintf-js@~1.0.2: 2780 | version "1.0.3" 2781 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2782 | 2783 | sshpk@^1.7.0: 2784 | version "1.16.1" 2785 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 2786 | dependencies: 2787 | asn1 "~0.2.3" 2788 | assert-plus "^1.0.0" 2789 | bcrypt-pbkdf "^1.0.0" 2790 | dashdash "^1.12.0" 2791 | ecc-jsbn "~0.1.1" 2792 | getpass "^0.1.1" 2793 | jsbn "~0.1.0" 2794 | safer-buffer "^2.0.2" 2795 | tweetnacl "~0.14.0" 2796 | 2797 | stack-utils@^1.0.1: 2798 | version "1.0.2" 2799 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" 2800 | 2801 | static-extend@^0.1.1: 2802 | version "0.1.2" 2803 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 2804 | dependencies: 2805 | define-property "^0.2.5" 2806 | object-copy "^0.1.0" 2807 | 2808 | stealthy-require@^1.1.1: 2809 | version "1.1.1" 2810 | resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" 2811 | 2812 | string-length@^2.0.0: 2813 | version "2.0.0" 2814 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" 2815 | dependencies: 2816 | astral-regex "^1.0.0" 2817 | strip-ansi "^4.0.0" 2818 | 2819 | string-width@^1.0.1: 2820 | version "1.0.2" 2821 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2822 | dependencies: 2823 | code-point-at "^1.0.0" 2824 | is-fullwidth-code-point "^1.0.0" 2825 | strip-ansi "^3.0.0" 2826 | 2827 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: 2828 | version "2.1.1" 2829 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2830 | dependencies: 2831 | is-fullwidth-code-point "^2.0.0" 2832 | strip-ansi "^4.0.0" 2833 | 2834 | string_decoder@~1.1.1: 2835 | version "1.1.1" 2836 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2837 | dependencies: 2838 | safe-buffer "~5.1.0" 2839 | 2840 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2841 | version "3.0.1" 2842 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2843 | dependencies: 2844 | ansi-regex "^2.0.0" 2845 | 2846 | strip-ansi@^4.0.0: 2847 | version "4.0.0" 2848 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2849 | dependencies: 2850 | ansi-regex "^3.0.0" 2851 | 2852 | strip-ansi@^5.0.0: 2853 | version "5.2.0" 2854 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2855 | dependencies: 2856 | ansi-regex "^4.1.0" 2857 | 2858 | strip-bom@^3.0.0: 2859 | version "3.0.0" 2860 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2861 | 2862 | strip-eof@^1.0.0: 2863 | version "1.0.0" 2864 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2865 | 2866 | strip-json-comments@~2.0.1: 2867 | version "2.0.1" 2868 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2869 | 2870 | supports-color@^5.3.0: 2871 | version "5.5.0" 2872 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2873 | dependencies: 2874 | has-flag "^3.0.0" 2875 | 2876 | supports-color@^6.0.0, supports-color@^6.1.0: 2877 | version "6.1.0" 2878 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 2879 | dependencies: 2880 | has-flag "^3.0.0" 2881 | 2882 | symbol-tree@^3.2.2: 2883 | version "3.2.2" 2884 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" 2885 | 2886 | tar@^4: 2887 | version "4.4.8" 2888 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" 2889 | dependencies: 2890 | chownr "^1.1.1" 2891 | fs-minipass "^1.2.5" 2892 | minipass "^2.3.4" 2893 | minizlib "^1.1.1" 2894 | mkdirp "^0.5.0" 2895 | safe-buffer "^5.1.2" 2896 | yallist "^3.0.2" 2897 | 2898 | test-exclude@^5.2.2: 2899 | version "5.2.2" 2900 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.2.tgz#7322f8ab037b0b93ad2aab35fe9068baf997a4c4" 2901 | dependencies: 2902 | glob "^7.1.3" 2903 | minimatch "^3.0.4" 2904 | read-pkg-up "^4.0.0" 2905 | require-main-filename "^2.0.0" 2906 | 2907 | throat@^4.0.0: 2908 | version "4.1.0" 2909 | resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" 2910 | 2911 | tmpl@1.0.x: 2912 | version "1.0.4" 2913 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" 2914 | 2915 | to-fast-properties@^2.0.0: 2916 | version "2.0.0" 2917 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2918 | 2919 | to-object-path@^0.3.0: 2920 | version "0.3.0" 2921 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 2922 | dependencies: 2923 | kind-of "^3.0.2" 2924 | 2925 | to-regex-range@^2.1.0: 2926 | version "2.1.1" 2927 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 2928 | dependencies: 2929 | is-number "^3.0.0" 2930 | repeat-string "^1.6.1" 2931 | 2932 | to-regex@^3.0.1, to-regex@^3.0.2: 2933 | version "3.0.2" 2934 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 2935 | dependencies: 2936 | define-property "^2.0.2" 2937 | extend-shallow "^3.0.2" 2938 | regex-not "^1.0.2" 2939 | safe-regex "^1.1.0" 2940 | 2941 | tough-cookie@^2.3.3, tough-cookie@^2.3.4: 2942 | version "2.5.0" 2943 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 2944 | dependencies: 2945 | psl "^1.1.28" 2946 | punycode "^2.1.1" 2947 | 2948 | tough-cookie@~2.4.3: 2949 | version "2.4.3" 2950 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 2951 | dependencies: 2952 | psl "^1.1.24" 2953 | punycode "^1.4.1" 2954 | 2955 | tr46@^1.0.1: 2956 | version "1.0.1" 2957 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" 2958 | dependencies: 2959 | punycode "^2.1.0" 2960 | 2961 | trim-right@^1.0.1: 2962 | version "1.0.1" 2963 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 2964 | 2965 | tunnel-agent@^0.6.0: 2966 | version "0.6.0" 2967 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2968 | dependencies: 2969 | safe-buffer "^5.0.1" 2970 | 2971 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2972 | version "0.14.5" 2973 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2974 | 2975 | type-check@~0.3.2: 2976 | version "0.3.2" 2977 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2978 | dependencies: 2979 | prelude-ls "~1.1.2" 2980 | 2981 | uglify-js@^3.1.4: 2982 | version "3.5.9" 2983 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.9.tgz#372fbf95939555b1f460b1777d33a67d4a994ac9" 2984 | dependencies: 2985 | commander "~2.20.0" 2986 | source-map "~0.6.1" 2987 | 2988 | union-value@^1.0.0: 2989 | version "1.0.0" 2990 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 2991 | dependencies: 2992 | arr-union "^3.1.0" 2993 | get-value "^2.0.6" 2994 | is-extendable "^0.1.1" 2995 | set-value "^0.4.3" 2996 | 2997 | unset-value@^1.0.0: 2998 | version "1.0.0" 2999 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 3000 | dependencies: 3001 | has-value "^0.3.1" 3002 | isobject "^3.0.0" 3003 | 3004 | uri-js@^4.2.2: 3005 | version "4.2.2" 3006 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 3007 | dependencies: 3008 | punycode "^2.1.0" 3009 | 3010 | urix@^0.1.0: 3011 | version "0.1.0" 3012 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 3013 | 3014 | use@^3.1.0: 3015 | version "3.1.1" 3016 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 3017 | 3018 | util-deprecate@~1.0.1: 3019 | version "1.0.2" 3020 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3021 | 3022 | util.promisify@^1.0.0: 3023 | version "1.0.0" 3024 | resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" 3025 | dependencies: 3026 | define-properties "^1.1.2" 3027 | object.getownpropertydescriptors "^2.0.3" 3028 | 3029 | uuid@^3.3.2: 3030 | version "3.3.2" 3031 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 3032 | 3033 | validate-npm-package-license@^3.0.1: 3034 | version "3.0.4" 3035 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 3036 | dependencies: 3037 | spdx-correct "^3.0.0" 3038 | spdx-expression-parse "^3.0.0" 3039 | 3040 | verror@1.10.0: 3041 | version "1.10.0" 3042 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 3043 | dependencies: 3044 | assert-plus "^1.0.0" 3045 | core-util-is "1.0.2" 3046 | extsprintf "^1.2.0" 3047 | 3048 | w3c-hr-time@^1.0.1: 3049 | version "1.0.1" 3050 | resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" 3051 | dependencies: 3052 | browser-process-hrtime "^0.1.2" 3053 | 3054 | walker@^1.0.7, walker@~1.0.5: 3055 | version "1.0.7" 3056 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" 3057 | dependencies: 3058 | makeerror "1.0.x" 3059 | 3060 | webidl-conversions@^4.0.2: 3061 | version "4.0.2" 3062 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" 3063 | 3064 | whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: 3065 | version "1.0.5" 3066 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" 3067 | dependencies: 3068 | iconv-lite "0.4.24" 3069 | 3070 | whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: 3071 | version "2.3.0" 3072 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" 3073 | 3074 | whatwg-url@^6.4.1: 3075 | version "6.5.0" 3076 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" 3077 | dependencies: 3078 | lodash.sortby "^4.7.0" 3079 | tr46 "^1.0.1" 3080 | webidl-conversions "^4.0.2" 3081 | 3082 | whatwg-url@^7.0.0: 3083 | version "7.0.0" 3084 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" 3085 | dependencies: 3086 | lodash.sortby "^4.7.0" 3087 | tr46 "^1.0.1" 3088 | webidl-conversions "^4.0.2" 3089 | 3090 | which-module@^2.0.0: 3091 | version "2.0.0" 3092 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 3093 | 3094 | which@^1.2.9, which@^1.3.0: 3095 | version "1.3.1" 3096 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 3097 | dependencies: 3098 | isexe "^2.0.0" 3099 | 3100 | wide-align@^1.1.0: 3101 | version "1.1.3" 3102 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 3103 | dependencies: 3104 | string-width "^1.0.2 || 2" 3105 | 3106 | wordwrap@~0.0.2: 3107 | version "0.0.3" 3108 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 3109 | 3110 | wordwrap@~1.0.0: 3111 | version "1.0.0" 3112 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 3113 | 3114 | wrap-ansi@^2.0.0: 3115 | version "2.1.0" 3116 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 3117 | dependencies: 3118 | string-width "^1.0.1" 3119 | strip-ansi "^3.0.1" 3120 | 3121 | wrappy@1: 3122 | version "1.0.2" 3123 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3124 | 3125 | write-file-atomic@2.4.1: 3126 | version "2.4.1" 3127 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" 3128 | dependencies: 3129 | graceful-fs "^4.1.11" 3130 | imurmurhash "^0.1.4" 3131 | signal-exit "^3.0.2" 3132 | 3133 | ws@^5.2.0: 3134 | version "5.2.2" 3135 | resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" 3136 | dependencies: 3137 | async-limiter "~1.0.0" 3138 | 3139 | xml-name-validator@^3.0.0: 3140 | version "3.0.0" 3141 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" 3142 | 3143 | "y18n@^3.2.1 || ^4.0.0": 3144 | version "4.0.0" 3145 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 3146 | 3147 | yallist@^3.0.0, yallist@^3.0.2: 3148 | version "3.0.3" 3149 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" 3150 | 3151 | yargs-parser@^11.1.1: 3152 | version "11.1.1" 3153 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" 3154 | dependencies: 3155 | camelcase "^5.0.0" 3156 | decamelize "^1.2.0" 3157 | 3158 | yargs@^12.0.2: 3159 | version "12.0.5" 3160 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" 3161 | dependencies: 3162 | cliui "^4.0.0" 3163 | decamelize "^1.2.0" 3164 | find-up "^3.0.0" 3165 | get-caller-file "^1.0.1" 3166 | os-locale "^3.0.0" 3167 | require-directory "^2.1.1" 3168 | require-main-filename "^1.0.1" 3169 | set-blocking "^2.0.0" 3170 | string-width "^2.0.0" 3171 | which-module "^2.0.0" 3172 | y18n "^3.2.1 || ^4.0.0" 3173 | yargs-parser "^11.1.1" 3174 | --------------------------------------------------------------------------------