├── .babelrc ├── .gitignore ├── .npmrc ├── LICENSE ├── README.md ├── package-lock.json ├── package.json └── src ├── index.js ├── statusApi.js └── utils.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "comments": false, 3 | "compact": false, 4 | "env": { 5 | "node": { 6 | "plugins": [ 7 | ["@babel/plugin-transform-runtime", { 8 | "corejs": 2 9 | }] 10 | ], 11 | "presets": [ 12 | ["@babel/env", { 13 | "targets": {"node": "8.11.3"} 14 | }] 15 | ] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependency directory 2 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 3 | node_modules 4 | 5 | dist 6 | package 7 | 8 | .idea 9 | .vscode 10 | .eslintrc.json 11 | 12 | embark-status-*.tgz 13 | NOTES 14 | npm-debug.log 15 | TODO -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict = true 2 | save-exact = true 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Iuri Matias 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Embark-Status Plugin Setup 2 | Embark-status is a plugin for [Embark](https://github.com/embark-framework/embark) that connects a DApp running in Embark to the [Status.im](https://github.com/status-im/status-react) mobile app. This plugin adds the Embark network (ie the blockchain node spun up by Embark) to the Status.im app, connects the Status app to the node, then opens the DApp in the Status app's DApp browser. 3 | 4 | ## Installation 5 | In your DApp directory, install the embark-status plugin: 6 | ```npm install status-im/embark-status --save-dev``` 7 | > NOTE: Please do not install `embark-status` directly from npm as this is a very old package. We are working with the package owner to get this updated as soon as possible. If you have already installed via npm, please uninstall `embark-status` (`npm uninstall embark-status`) before installing using the above command. 8 | 9 | ## DApp configuration 10 | Add this config in the DApp's `embark.json`: 11 | 12 | ```Json 13 | "plugins": { 14 | "embark-status": { 15 | "deviceIp": "your-device-ip", 16 | "name": "MyDapp" 17 | } 18 | } 19 | ``` 20 | If your DApp is hosted (ie on decentralised storage like IPFS or Swarm), the plugin option `dappUrl` can be specified to override the DApp URL that is opened in the Status DApp browser after `embark-status` is connected to the Status app. 21 | ```Json 22 | "plugins": { 23 | "embark-status": { 24 | "deviceIp": "your-device-ip", 25 | "name": "MyDapp", 26 | "dappUrl": "https://ipfs.io/ipfs/QmSVa32dFs5SKRmd7EXzuztMbNsZd5LGpCoU1keSrxo9BK" 27 | } 28 | } 29 | ``` 30 | ### Development environment 31 | To configure for a development environment, please ensure you are running the correct version of NodeJS. Additionally, the blockchain client, webserver, and storage need to be set up to accept outside connections. 32 | #### NodeJS Version 33 | The minimum version of NodeJS that can be used is `8.11.3`. If you need to change your Node version, please [use NVM](https://github.com/creationix/nvm). 34 | ``` 35 | $> node --version 36 | v8.11.3 37 | ``` 38 | ### Blockchain client config 39 | In your DApp, set `config/blockchain.js > development > rpcHost` to `0.0.0.0` (macOS/Linux) or `127.0.0.1` (Windows). This will open up your blockchain client (Geth or Parity) to outside connections. 40 | ### Webserver config 41 | In your DApp, set `config/webserver.js > host` to `0.0.0.0` (macOS/Linux) or `127.0.0.1` (Windows). This will open up your webserver to outside connections. 42 | > NOTE: When the Status browser opens the DApp, it will open the IP of the machine running Embark along with the port specified in the webserver config, ie `http://192.168.0.15:8000`. This is so that the device can connect to the webserver started by Embark. 43 | ### Storage 44 | Our machine will be running our storage node, and we need to access the node from our DApp, so we have to configure IPFS to run on our machine's IP, then tell embark to access the node via the machine IP. 45 | > NOTE: `embark-status` has only been tested with IPFS. This guide assumes you have [ipfs installed](https://docs.ipfs.io/introduction/install/) and you are using it for your DApp. 46 | 47 | #### DApp storage config 48 | In your DApp, set `config/storage.js > dappConnection` to 49 | ``` 50 | dappConnection: [ 51 | { 52 | provider: "ipfs", 53 | host: "your-machine-ip", 54 | port: 5001, 55 | getUrl: "http://your-machine-ip:8080/ipfs/" 56 | } 57 | ] 58 | ``` 59 | #### IPFS config 60 | Next, we need to update our IPFS API and gateway configuration. 61 | 62 | ##### Backup 63 | First, let's backup our working IPFS config: 64 | ``` 65 | cp ~/.ipfs/config ~/.ipfs/config.bak 66 | ``` 67 | ##### Run IPFS first 68 | In order to interact with IPFS's `config` CLI, we need IPFS to be running first (alternatively, `~/.ipfs/config` (macOS/Linux) can be manually updated with the changes): 69 | ``` 70 | ipfs daemon 71 | ``` 72 | ##### Run IPFS CLI config update commands 73 | Then run the following commands in a new shell, (replacing `your-machine-ip` with your machine's IP): 74 | ``` 75 | ipfs config --json Addresses.API "\"/ip4/your-machine-ip/tcp/5001\"" 76 | ipfs config --json Addresses.Gateway "\"/ip4/your-machine-ip/tcp/8080\"" 77 | ``` 78 | > NOTE: In this case, we want the IPFS API and gateway to the be accessible from our machine's IP. 79 | 80 | ##### Stop IPFS daemon 81 | In the first terminal where IPFS daemon is running, stop the IPFS daemon using `Ctrl+c`. 82 | 83 | ##### When you need to revert your IPFS config 84 | If you'd like to revert to the default settings, run the following two commands: 85 | ``` 86 | ipfs daemon 87 | ``` 88 | In a separate shell, run: 89 | ``` 90 | ipfs config --json Addresses.API "\"/ip4/127.0.0.1/tcp/5001\"" 91 | ipfs config --json Addresses.Gateway "\"/ip4/127.0.0.1/tcp/8080\"" 92 | ``` 93 | Alternatively, you could overwrite your IPFS config with your backup: 94 | ``` 95 | mv ~/.ipfs/config.bak ~/.ipfs/config # overwrite the config 96 | rm ~/.ipfs/config.bak # delete the backup 97 | ``` 98 | Or, another option is to delete your modified config, and re-init IFPS: 99 | ``` 100 | rm ~/.ipfs/config 101 | ipfs init 102 | ``` 103 | The last option will recreate a fresh IPFS config for you. 104 | #### Status.im app 105 | Please make sure the Status app has development mode enabled. To enable development mode: 106 | 1. [Install Status mobile](https://status.im/) if not already done 107 | 1. Open the app. 108 | 2. Go to Profile (bottom right tab). 109 | 3. Scroll to the bottom and tap the "Advanced" button. 110 | 4. Enable the "Development mode" toggle 111 | 112 | ### CORS 113 | NOTE: The device IP specified in the plugin configuration above will be automatically added to CORS for the blockchain client (Geth/Parity) and the storage provider (IPFS/Swarm) when running Embark. 114 | 115 | ## Now run Embark 116 | Once all the above has been configured, run your DApp using Embark: 117 | ``` 118 | embark run 119 | ``` 120 | 121 | ## Known issues 122 | #### Status app crashes 123 | There is currently a [bug in the Status app](https://github.com/status-im/status-react/issues/6872) that crashes the app once the `embark-status` plugin attempts to open the DApp in the Status DApp browser. Simply re-open the Status app after this crash. You may have to manually open the DApp for now: 124 | 1. Tap the "+" in the top right of the Status app 125 | 2. Tap "Open DApp" 126 | 3. Enter `your-machine-ip:8000` for the URL. 127 | 128 | #### IPFS CORS not updated correctly 129 | Embark up to `4.0.0` is not updating IPFS CORS correctly, due to the need for IPFS to be restarted after update. This has been [fixed in a PR](https://github.com/embark-framework/embark/pull/1458), but has not been released yet. In the meantime, it's probably easiest to simply modify your IPFS config manually. Open up `~/.ipfs/config` (or equivalent in your OS), and edit both the `API/Access-Control-Allow-Origin` and `Gateway/Access-Control-Allow-Origin` sections to look like: 130 | ``` 131 | "Access-Control-Allow-Origin": [ 132 | "http://your-device-ip", 133 | "http://your-machine-ip:8000", 134 | "http://your-machine-ip:8080", 135 | "http://0.0.0.0:8000", 136 | "http://0.0.0.0:8545", 137 | "ws://localhost:8546", 138 | "http://embark" 139 | ] 140 | ``` 141 | If this is still not working for you, as a last resort, try updating both the `API/Access-Control-Allow-Origin` and `Gateway/Access-Control-Allow-Origin` to: 142 | ``` 143 | "Access-Control-Allow-Origin": [ 144 | "*" 145 | ] 146 | ``` 147 | #### Please report any other issues you find, thank you! 148 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "embark-status", 3 | "version": "0.3.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/cli": { 8 | "version": "7.2.3", 9 | "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.2.3.tgz", 10 | "integrity": "sha512-bfna97nmJV6nDJhXNPeEfxyMjWnt6+IjUAaDPiYRTBlm8L41n8nvw6UAqUCbvpFfU246gHPxW7sfWwqtF4FcYA==", 11 | "dev": true, 12 | "requires": { 13 | "chokidar": "^2.0.3", 14 | "commander": "^2.8.1", 15 | "convert-source-map": "^1.1.0", 16 | "fs-readdir-recursive": "^1.1.0", 17 | "glob": "^7.0.0", 18 | "lodash": "^4.17.10", 19 | "mkdirp": "^0.5.1", 20 | "output-file-sync": "^2.0.0", 21 | "slash": "^2.0.0", 22 | "source-map": "^0.5.0" 23 | } 24 | }, 25 | "@babel/code-frame": { 26 | "version": "7.0.0", 27 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", 28 | "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", 29 | "dev": true, 30 | "requires": { 31 | "@babel/highlight": "^7.0.0" 32 | } 33 | }, 34 | "@babel/core": { 35 | "version": "7.2.2", 36 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", 37 | "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", 38 | "dev": true, 39 | "requires": { 40 | "@babel/code-frame": "^7.0.0", 41 | "@babel/generator": "^7.2.2", 42 | "@babel/helpers": "^7.2.0", 43 | "@babel/parser": "^7.2.2", 44 | "@babel/template": "^7.2.2", 45 | "@babel/traverse": "^7.2.2", 46 | "@babel/types": "^7.2.2", 47 | "convert-source-map": "^1.1.0", 48 | "debug": "^4.1.0", 49 | "json5": "^2.1.0", 50 | "lodash": "^4.17.10", 51 | "resolve": "^1.3.2", 52 | "semver": "^5.4.1", 53 | "source-map": "^0.5.0" 54 | }, 55 | "dependencies": { 56 | "debug": { 57 | "version": "4.1.1", 58 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 59 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 60 | "dev": true, 61 | "requires": { 62 | "ms": "^2.1.1" 63 | } 64 | }, 65 | "ms": { 66 | "version": "2.1.1", 67 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 68 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 69 | "dev": true 70 | } 71 | } 72 | }, 73 | "@babel/generator": { 74 | "version": "7.4.0", 75 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.0.tgz", 76 | "integrity": "sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ==", 77 | "dev": true, 78 | "requires": { 79 | "@babel/types": "^7.4.0", 80 | "jsesc": "^2.5.1", 81 | "lodash": "^4.17.11", 82 | "source-map": "^0.5.0", 83 | "trim-right": "^1.0.1" 84 | } 85 | }, 86 | "@babel/helper-annotate-as-pure": { 87 | "version": "7.0.0", 88 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", 89 | "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", 90 | "dev": true, 91 | "requires": { 92 | "@babel/types": "^7.0.0" 93 | } 94 | }, 95 | "@babel/helper-builder-binary-assignment-operator-visitor": { 96 | "version": "7.1.0", 97 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", 98 | "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", 99 | "dev": true, 100 | "requires": { 101 | "@babel/helper-explode-assignable-expression": "^7.1.0", 102 | "@babel/types": "^7.0.0" 103 | } 104 | }, 105 | "@babel/helper-call-delegate": { 106 | "version": "7.4.0", 107 | "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz", 108 | "integrity": "sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ==", 109 | "dev": true, 110 | "requires": { 111 | "@babel/helper-hoist-variables": "^7.4.0", 112 | "@babel/traverse": "^7.4.0", 113 | "@babel/types": "^7.4.0" 114 | } 115 | }, 116 | "@babel/helper-define-map": { 117 | "version": "7.4.0", 118 | "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz", 119 | "integrity": "sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA==", 120 | "dev": true, 121 | "requires": { 122 | "@babel/helper-function-name": "^7.1.0", 123 | "@babel/types": "^7.4.0", 124 | "lodash": "^4.17.11" 125 | } 126 | }, 127 | "@babel/helper-explode-assignable-expression": { 128 | "version": "7.1.0", 129 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", 130 | "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", 131 | "dev": true, 132 | "requires": { 133 | "@babel/traverse": "^7.1.0", 134 | "@babel/types": "^7.0.0" 135 | } 136 | }, 137 | "@babel/helper-function-name": { 138 | "version": "7.1.0", 139 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", 140 | "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", 141 | "dev": true, 142 | "requires": { 143 | "@babel/helper-get-function-arity": "^7.0.0", 144 | "@babel/template": "^7.1.0", 145 | "@babel/types": "^7.0.0" 146 | } 147 | }, 148 | "@babel/helper-get-function-arity": { 149 | "version": "7.0.0", 150 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", 151 | "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", 152 | "dev": true, 153 | "requires": { 154 | "@babel/types": "^7.0.0" 155 | } 156 | }, 157 | "@babel/helper-hoist-variables": { 158 | "version": "7.4.0", 159 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz", 160 | "integrity": "sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw==", 161 | "dev": true, 162 | "requires": { 163 | "@babel/types": "^7.4.0" 164 | } 165 | }, 166 | "@babel/helper-member-expression-to-functions": { 167 | "version": "7.0.0", 168 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", 169 | "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", 170 | "dev": true, 171 | "requires": { 172 | "@babel/types": "^7.0.0" 173 | } 174 | }, 175 | "@babel/helper-module-imports": { 176 | "version": "7.0.0", 177 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", 178 | "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", 179 | "dev": true, 180 | "requires": { 181 | "@babel/types": "^7.0.0" 182 | } 183 | }, 184 | "@babel/helper-module-transforms": { 185 | "version": "7.2.2", 186 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz", 187 | "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==", 188 | "dev": true, 189 | "requires": { 190 | "@babel/helper-module-imports": "^7.0.0", 191 | "@babel/helper-simple-access": "^7.1.0", 192 | "@babel/helper-split-export-declaration": "^7.0.0", 193 | "@babel/template": "^7.2.2", 194 | "@babel/types": "^7.2.2", 195 | "lodash": "^4.17.10" 196 | } 197 | }, 198 | "@babel/helper-optimise-call-expression": { 199 | "version": "7.0.0", 200 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", 201 | "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", 202 | "dev": true, 203 | "requires": { 204 | "@babel/types": "^7.0.0" 205 | } 206 | }, 207 | "@babel/helper-plugin-utils": { 208 | "version": "7.0.0", 209 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", 210 | "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", 211 | "dev": true 212 | }, 213 | "@babel/helper-regex": { 214 | "version": "7.0.0", 215 | "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", 216 | "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", 217 | "dev": true, 218 | "requires": { 219 | "lodash": "^4.17.10" 220 | } 221 | }, 222 | "@babel/helper-remap-async-to-generator": { 223 | "version": "7.1.0", 224 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", 225 | "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", 226 | "dev": true, 227 | "requires": { 228 | "@babel/helper-annotate-as-pure": "^7.0.0", 229 | "@babel/helper-wrap-function": "^7.1.0", 230 | "@babel/template": "^7.1.0", 231 | "@babel/traverse": "^7.1.0", 232 | "@babel/types": "^7.0.0" 233 | } 234 | }, 235 | "@babel/helper-replace-supers": { 236 | "version": "7.4.0", 237 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz", 238 | "integrity": "sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg==", 239 | "dev": true, 240 | "requires": { 241 | "@babel/helper-member-expression-to-functions": "^7.0.0", 242 | "@babel/helper-optimise-call-expression": "^7.0.0", 243 | "@babel/traverse": "^7.4.0", 244 | "@babel/types": "^7.4.0" 245 | } 246 | }, 247 | "@babel/helper-simple-access": { 248 | "version": "7.1.0", 249 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", 250 | "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", 251 | "dev": true, 252 | "requires": { 253 | "@babel/template": "^7.1.0", 254 | "@babel/types": "^7.0.0" 255 | } 256 | }, 257 | "@babel/helper-split-export-declaration": { 258 | "version": "7.4.0", 259 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz", 260 | "integrity": "sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw==", 261 | "dev": true, 262 | "requires": { 263 | "@babel/types": "^7.4.0" 264 | } 265 | }, 266 | "@babel/helper-wrap-function": { 267 | "version": "7.2.0", 268 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", 269 | "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", 270 | "dev": true, 271 | "requires": { 272 | "@babel/helper-function-name": "^7.1.0", 273 | "@babel/template": "^7.1.0", 274 | "@babel/traverse": "^7.1.0", 275 | "@babel/types": "^7.2.0" 276 | } 277 | }, 278 | "@babel/helpers": { 279 | "version": "7.4.0", 280 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.0.tgz", 281 | "integrity": "sha512-2Lfcn74A2WSFUbYJ76ilYE1GnegCKUHTfXxp25EL2zPZHjV7OcDncqNjl295mUH0VnB65mNriXW4J5ROvxsgGg==", 282 | "dev": true, 283 | "requires": { 284 | "@babel/template": "^7.4.0", 285 | "@babel/traverse": "^7.4.0", 286 | "@babel/types": "^7.4.0" 287 | } 288 | }, 289 | "@babel/highlight": { 290 | "version": "7.0.0", 291 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", 292 | "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", 293 | "dev": true, 294 | "requires": { 295 | "chalk": "^2.0.0", 296 | "esutils": "^2.0.2", 297 | "js-tokens": "^4.0.0" 298 | } 299 | }, 300 | "@babel/parser": { 301 | "version": "7.4.0", 302 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.0.tgz", 303 | "integrity": "sha512-ZmMhJfU/+SXXvy9ALjDZopa3T3EixQtQai89JRC48eM9OUwrxJjYjuM/0wmdl2AekytlzMVhPY8cYdLb13kpKQ==", 304 | "dev": true 305 | }, 306 | "@babel/plugin-proposal-async-generator-functions": { 307 | "version": "7.2.0", 308 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", 309 | "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", 310 | "dev": true, 311 | "requires": { 312 | "@babel/helper-plugin-utils": "^7.0.0", 313 | "@babel/helper-remap-async-to-generator": "^7.1.0", 314 | "@babel/plugin-syntax-async-generators": "^7.2.0" 315 | } 316 | }, 317 | "@babel/plugin-proposal-json-strings": { 318 | "version": "7.2.0", 319 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", 320 | "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", 321 | "dev": true, 322 | "requires": { 323 | "@babel/helper-plugin-utils": "^7.0.0", 324 | "@babel/plugin-syntax-json-strings": "^7.2.0" 325 | } 326 | }, 327 | "@babel/plugin-proposal-object-rest-spread": { 328 | "version": "7.4.0", 329 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.0.tgz", 330 | "integrity": "sha512-uTNi8pPYyUH2eWHyYWWSYJKwKg34hhgl4/dbejEjL+64OhbHjTX7wEVWMQl82tEmdDsGeu77+s8HHLS627h6OQ==", 331 | "dev": true, 332 | "requires": { 333 | "@babel/helper-plugin-utils": "^7.0.0", 334 | "@babel/plugin-syntax-object-rest-spread": "^7.2.0" 335 | } 336 | }, 337 | "@babel/plugin-proposal-optional-catch-binding": { 338 | "version": "7.2.0", 339 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", 340 | "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", 341 | "dev": true, 342 | "requires": { 343 | "@babel/helper-plugin-utils": "^7.0.0", 344 | "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" 345 | } 346 | }, 347 | "@babel/plugin-proposal-unicode-property-regex": { 348 | "version": "7.4.0", 349 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz", 350 | "integrity": "sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w==", 351 | "dev": true, 352 | "requires": { 353 | "@babel/helper-plugin-utils": "^7.0.0", 354 | "@babel/helper-regex": "^7.0.0", 355 | "regexpu-core": "^4.5.4" 356 | } 357 | }, 358 | "@babel/plugin-syntax-async-generators": { 359 | "version": "7.2.0", 360 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", 361 | "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", 362 | "dev": true, 363 | "requires": { 364 | "@babel/helper-plugin-utils": "^7.0.0" 365 | } 366 | }, 367 | "@babel/plugin-syntax-json-strings": { 368 | "version": "7.2.0", 369 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", 370 | "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", 371 | "dev": true, 372 | "requires": { 373 | "@babel/helper-plugin-utils": "^7.0.0" 374 | } 375 | }, 376 | "@babel/plugin-syntax-object-rest-spread": { 377 | "version": "7.2.0", 378 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", 379 | "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", 380 | "dev": true, 381 | "requires": { 382 | "@babel/helper-plugin-utils": "^7.0.0" 383 | } 384 | }, 385 | "@babel/plugin-syntax-optional-catch-binding": { 386 | "version": "7.2.0", 387 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", 388 | "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", 389 | "dev": true, 390 | "requires": { 391 | "@babel/helper-plugin-utils": "^7.0.0" 392 | } 393 | }, 394 | "@babel/plugin-transform-arrow-functions": { 395 | "version": "7.2.0", 396 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", 397 | "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", 398 | "dev": true, 399 | "requires": { 400 | "@babel/helper-plugin-utils": "^7.0.0" 401 | } 402 | }, 403 | "@babel/plugin-transform-async-to-generator": { 404 | "version": "7.4.0", 405 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz", 406 | "integrity": "sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g==", 407 | "dev": true, 408 | "requires": { 409 | "@babel/helper-module-imports": "^7.0.0", 410 | "@babel/helper-plugin-utils": "^7.0.0", 411 | "@babel/helper-remap-async-to-generator": "^7.1.0" 412 | } 413 | }, 414 | "@babel/plugin-transform-block-scoped-functions": { 415 | "version": "7.2.0", 416 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", 417 | "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", 418 | "dev": true, 419 | "requires": { 420 | "@babel/helper-plugin-utils": "^7.0.0" 421 | } 422 | }, 423 | "@babel/plugin-transform-block-scoping": { 424 | "version": "7.4.0", 425 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz", 426 | "integrity": "sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ==", 427 | "dev": true, 428 | "requires": { 429 | "@babel/helper-plugin-utils": "^7.0.0", 430 | "lodash": "^4.17.11" 431 | } 432 | }, 433 | "@babel/plugin-transform-classes": { 434 | "version": "7.4.0", 435 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz", 436 | "integrity": "sha512-XGg1Mhbw4LDmrO9rSTNe+uI79tQPdGs0YASlxgweYRLZqo/EQktjaOV4tchL/UZbM0F+/94uOipmdNGoaGOEYg==", 437 | "dev": true, 438 | "requires": { 439 | "@babel/helper-annotate-as-pure": "^7.0.0", 440 | "@babel/helper-define-map": "^7.4.0", 441 | "@babel/helper-function-name": "^7.1.0", 442 | "@babel/helper-optimise-call-expression": "^7.0.0", 443 | "@babel/helper-plugin-utils": "^7.0.0", 444 | "@babel/helper-replace-supers": "^7.4.0", 445 | "@babel/helper-split-export-declaration": "^7.4.0", 446 | "globals": "^11.1.0" 447 | } 448 | }, 449 | "@babel/plugin-transform-computed-properties": { 450 | "version": "7.2.0", 451 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", 452 | "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", 453 | "dev": true, 454 | "requires": { 455 | "@babel/helper-plugin-utils": "^7.0.0" 456 | } 457 | }, 458 | "@babel/plugin-transform-destructuring": { 459 | "version": "7.4.0", 460 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.0.tgz", 461 | "integrity": "sha512-HySkoatyYTY3ZwLI8GGvkRWCFrjAGXUHur5sMecmCIdIharnlcWWivOqDJI76vvmVZfzwb6G08NREsrY96RhGQ==", 462 | "dev": true, 463 | "requires": { 464 | "@babel/helper-plugin-utils": "^7.0.0" 465 | } 466 | }, 467 | "@babel/plugin-transform-dotall-regex": { 468 | "version": "7.2.0", 469 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz", 470 | "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==", 471 | "dev": true, 472 | "requires": { 473 | "@babel/helper-plugin-utils": "^7.0.0", 474 | "@babel/helper-regex": "^7.0.0", 475 | "regexpu-core": "^4.1.3" 476 | } 477 | }, 478 | "@babel/plugin-transform-duplicate-keys": { 479 | "version": "7.2.0", 480 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", 481 | "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", 482 | "dev": true, 483 | "requires": { 484 | "@babel/helper-plugin-utils": "^7.0.0" 485 | } 486 | }, 487 | "@babel/plugin-transform-exponentiation-operator": { 488 | "version": "7.2.0", 489 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", 490 | "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", 491 | "dev": true, 492 | "requires": { 493 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", 494 | "@babel/helper-plugin-utils": "^7.0.0" 495 | } 496 | }, 497 | "@babel/plugin-transform-for-of": { 498 | "version": "7.4.0", 499 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.0.tgz", 500 | "integrity": "sha512-vWdfCEYLlYSxbsKj5lGtzA49K3KANtb8qCPQ1em07txJzsBwY+cKJzBHizj5fl3CCx7vt+WPdgDLTHmydkbQSQ==", 501 | "dev": true, 502 | "requires": { 503 | "@babel/helper-plugin-utils": "^7.0.0" 504 | } 505 | }, 506 | "@babel/plugin-transform-function-name": { 507 | "version": "7.2.0", 508 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz", 509 | "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==", 510 | "dev": true, 511 | "requires": { 512 | "@babel/helper-function-name": "^7.1.0", 513 | "@babel/helper-plugin-utils": "^7.0.0" 514 | } 515 | }, 516 | "@babel/plugin-transform-literals": { 517 | "version": "7.2.0", 518 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", 519 | "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", 520 | "dev": true, 521 | "requires": { 522 | "@babel/helper-plugin-utils": "^7.0.0" 523 | } 524 | }, 525 | "@babel/plugin-transform-modules-amd": { 526 | "version": "7.2.0", 527 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", 528 | "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", 529 | "dev": true, 530 | "requires": { 531 | "@babel/helper-module-transforms": "^7.1.0", 532 | "@babel/helper-plugin-utils": "^7.0.0" 533 | } 534 | }, 535 | "@babel/plugin-transform-modules-commonjs": { 536 | "version": "7.4.0", 537 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.0.tgz", 538 | "integrity": "sha512-iWKAooAkipG7g1IY0eah7SumzfnIT3WNhT4uYB2kIsvHnNSB6MDYVa5qyICSwaTBDBY2c4SnJ3JtEa6ltJd6Jw==", 539 | "dev": true, 540 | "requires": { 541 | "@babel/helper-module-transforms": "^7.1.0", 542 | "@babel/helper-plugin-utils": "^7.0.0", 543 | "@babel/helper-simple-access": "^7.1.0" 544 | } 545 | }, 546 | "@babel/plugin-transform-modules-systemjs": { 547 | "version": "7.4.0", 548 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz", 549 | "integrity": "sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ==", 550 | "dev": true, 551 | "requires": { 552 | "@babel/helper-hoist-variables": "^7.4.0", 553 | "@babel/helper-plugin-utils": "^7.0.0" 554 | } 555 | }, 556 | "@babel/plugin-transform-modules-umd": { 557 | "version": "7.2.0", 558 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", 559 | "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", 560 | "dev": true, 561 | "requires": { 562 | "@babel/helper-module-transforms": "^7.1.0", 563 | "@babel/helper-plugin-utils": "^7.0.0" 564 | } 565 | }, 566 | "@babel/plugin-transform-named-capturing-groups-regex": { 567 | "version": "7.3.0", 568 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz", 569 | "integrity": "sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw==", 570 | "dev": true, 571 | "requires": { 572 | "regexp-tree": "^0.1.0" 573 | } 574 | }, 575 | "@babel/plugin-transform-new-target": { 576 | "version": "7.4.0", 577 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz", 578 | "integrity": "sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw==", 579 | "dev": true, 580 | "requires": { 581 | "@babel/helper-plugin-utils": "^7.0.0" 582 | } 583 | }, 584 | "@babel/plugin-transform-object-super": { 585 | "version": "7.2.0", 586 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", 587 | "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", 588 | "dev": true, 589 | "requires": { 590 | "@babel/helper-plugin-utils": "^7.0.0", 591 | "@babel/helper-replace-supers": "^7.1.0" 592 | } 593 | }, 594 | "@babel/plugin-transform-parameters": { 595 | "version": "7.4.0", 596 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.0.tgz", 597 | "integrity": "sha512-Xqv6d1X+doyiuCGDoVJFtlZx0onAX0tnc3dY8w71pv/O0dODAbusVv2Ale3cGOwfiyi895ivOBhYa9DhAM8dUA==", 598 | "dev": true, 599 | "requires": { 600 | "@babel/helper-call-delegate": "^7.4.0", 601 | "@babel/helper-get-function-arity": "^7.0.0", 602 | "@babel/helper-plugin-utils": "^7.0.0" 603 | } 604 | }, 605 | "@babel/plugin-transform-regenerator": { 606 | "version": "7.4.0", 607 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.0.tgz", 608 | "integrity": "sha512-SZ+CgL4F0wm4npojPU6swo/cK4FcbLgxLd4cWpHaNXY/NJ2dpahODCqBbAwb2rDmVszVb3SSjnk9/vik3AYdBw==", 609 | "dev": true, 610 | "requires": { 611 | "regenerator-transform": "^0.13.4" 612 | } 613 | }, 614 | "@babel/plugin-transform-runtime": { 615 | "version": "7.4.0", 616 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.0.tgz", 617 | "integrity": "sha512-1uv2h9wnRj98XX3g0l4q+O3jFM6HfayKup7aIu4pnnlzGz0H+cYckGBC74FZIWJXJSXAmeJ9Yu5Gg2RQpS4hWg==", 618 | "dev": true, 619 | "requires": { 620 | "@babel/helper-module-imports": "^7.0.0", 621 | "@babel/helper-plugin-utils": "^7.0.0", 622 | "resolve": "^1.8.1", 623 | "semver": "^5.5.1" 624 | } 625 | }, 626 | "@babel/plugin-transform-shorthand-properties": { 627 | "version": "7.2.0", 628 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", 629 | "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", 630 | "dev": true, 631 | "requires": { 632 | "@babel/helper-plugin-utils": "^7.0.0" 633 | } 634 | }, 635 | "@babel/plugin-transform-spread": { 636 | "version": "7.2.2", 637 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", 638 | "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", 639 | "dev": true, 640 | "requires": { 641 | "@babel/helper-plugin-utils": "^7.0.0" 642 | } 643 | }, 644 | "@babel/plugin-transform-sticky-regex": { 645 | "version": "7.2.0", 646 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", 647 | "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", 648 | "dev": true, 649 | "requires": { 650 | "@babel/helper-plugin-utils": "^7.0.0", 651 | "@babel/helper-regex": "^7.0.0" 652 | } 653 | }, 654 | "@babel/plugin-transform-template-literals": { 655 | "version": "7.2.0", 656 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz", 657 | "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==", 658 | "dev": true, 659 | "requires": { 660 | "@babel/helper-annotate-as-pure": "^7.0.0", 661 | "@babel/helper-plugin-utils": "^7.0.0" 662 | } 663 | }, 664 | "@babel/plugin-transform-typeof-symbol": { 665 | "version": "7.2.0", 666 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", 667 | "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", 668 | "dev": true, 669 | "requires": { 670 | "@babel/helper-plugin-utils": "^7.0.0" 671 | } 672 | }, 673 | "@babel/plugin-transform-unicode-regex": { 674 | "version": "7.2.0", 675 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz", 676 | "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==", 677 | "dev": true, 678 | "requires": { 679 | "@babel/helper-plugin-utils": "^7.0.0", 680 | "@babel/helper-regex": "^7.0.0", 681 | "regexpu-core": "^4.1.3" 682 | } 683 | }, 684 | "@babel/preset-env": { 685 | "version": "7.4.1", 686 | "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.1.tgz", 687 | "integrity": "sha512-uC2DeVb6ljdjBGhJCyHxNZfSJEVgPdUm2R5cX85GCl1Qreo5sMM5g85ntqtzRF7XRYGgnRmV5we9cdlvo1wJvg==", 688 | "dev": true, 689 | "requires": { 690 | "@babel/helper-module-imports": "^7.0.0", 691 | "@babel/helper-plugin-utils": "^7.0.0", 692 | "@babel/plugin-proposal-async-generator-functions": "^7.2.0", 693 | "@babel/plugin-proposal-json-strings": "^7.2.0", 694 | "@babel/plugin-proposal-object-rest-spread": "^7.4.0", 695 | "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", 696 | "@babel/plugin-proposal-unicode-property-regex": "^7.4.0", 697 | "@babel/plugin-syntax-async-generators": "^7.2.0", 698 | "@babel/plugin-syntax-json-strings": "^7.2.0", 699 | "@babel/plugin-syntax-object-rest-spread": "^7.2.0", 700 | "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", 701 | "@babel/plugin-transform-arrow-functions": "^7.2.0", 702 | "@babel/plugin-transform-async-to-generator": "^7.4.0", 703 | "@babel/plugin-transform-block-scoped-functions": "^7.2.0", 704 | "@babel/plugin-transform-block-scoping": "^7.4.0", 705 | "@babel/plugin-transform-classes": "^7.4.0", 706 | "@babel/plugin-transform-computed-properties": "^7.2.0", 707 | "@babel/plugin-transform-destructuring": "^7.4.0", 708 | "@babel/plugin-transform-dotall-regex": "^7.2.0", 709 | "@babel/plugin-transform-duplicate-keys": "^7.2.0", 710 | "@babel/plugin-transform-exponentiation-operator": "^7.2.0", 711 | "@babel/plugin-transform-for-of": "^7.4.0", 712 | "@babel/plugin-transform-function-name": "^7.2.0", 713 | "@babel/plugin-transform-literals": "^7.2.0", 714 | "@babel/plugin-transform-modules-amd": "^7.2.0", 715 | "@babel/plugin-transform-modules-commonjs": "^7.4.0", 716 | "@babel/plugin-transform-modules-systemjs": "^7.4.0", 717 | "@babel/plugin-transform-modules-umd": "^7.2.0", 718 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", 719 | "@babel/plugin-transform-new-target": "^7.4.0", 720 | "@babel/plugin-transform-object-super": "^7.2.0", 721 | "@babel/plugin-transform-parameters": "^7.4.0", 722 | "@babel/plugin-transform-regenerator": "^7.4.0", 723 | "@babel/plugin-transform-shorthand-properties": "^7.2.0", 724 | "@babel/plugin-transform-spread": "^7.2.0", 725 | "@babel/plugin-transform-sticky-regex": "^7.2.0", 726 | "@babel/plugin-transform-template-literals": "^7.2.0", 727 | "@babel/plugin-transform-typeof-symbol": "^7.2.0", 728 | "@babel/plugin-transform-unicode-regex": "^7.2.0", 729 | "@babel/types": "^7.4.0", 730 | "browserslist": "^4.4.2", 731 | "core-js-compat": "^3.0.0", 732 | "invariant": "^2.2.2", 733 | "js-levenshtein": "^1.1.3", 734 | "semver": "^5.3.0" 735 | } 736 | }, 737 | "@babel/runtime-corejs2": { 738 | "version": "7.3.1", 739 | "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.3.1.tgz", 740 | "integrity": "sha512-YpO13776h3e6Wy8dl2J8T9Qwlvopr+b4trCEhHE+yek6yIqV8sx6g3KozdHMbXeBpjosbPi+Ii5Z7X9oXFHUKA==", 741 | "requires": { 742 | "core-js": "^2.5.7", 743 | "regenerator-runtime": "^0.12.0" 744 | } 745 | }, 746 | "@babel/template": { 747 | "version": "7.4.0", 748 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.0.tgz", 749 | "integrity": "sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw==", 750 | "dev": true, 751 | "requires": { 752 | "@babel/code-frame": "^7.0.0", 753 | "@babel/parser": "^7.4.0", 754 | "@babel/types": "^7.4.0" 755 | } 756 | }, 757 | "@babel/traverse": { 758 | "version": "7.4.0", 759 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.0.tgz", 760 | "integrity": "sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA==", 761 | "dev": true, 762 | "requires": { 763 | "@babel/code-frame": "^7.0.0", 764 | "@babel/generator": "^7.4.0", 765 | "@babel/helper-function-name": "^7.1.0", 766 | "@babel/helper-split-export-declaration": "^7.4.0", 767 | "@babel/parser": "^7.4.0", 768 | "@babel/types": "^7.4.0", 769 | "debug": "^4.1.0", 770 | "globals": "^11.1.0", 771 | "lodash": "^4.17.11" 772 | }, 773 | "dependencies": { 774 | "debug": { 775 | "version": "4.1.1", 776 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 777 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 778 | "dev": true, 779 | "requires": { 780 | "ms": "^2.1.1" 781 | } 782 | }, 783 | "ms": { 784 | "version": "2.1.1", 785 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 786 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 787 | "dev": true 788 | } 789 | } 790 | }, 791 | "@babel/types": { 792 | "version": "7.4.0", 793 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.0.tgz", 794 | "integrity": "sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA==", 795 | "dev": true, 796 | "requires": { 797 | "esutils": "^2.0.2", 798 | "lodash": "^4.17.11", 799 | "to-fast-properties": "^2.0.0" 800 | } 801 | }, 802 | "acorn": { 803 | "version": "5.7.3", 804 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", 805 | "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", 806 | "dev": true 807 | }, 808 | "acorn-jsx": { 809 | "version": "3.0.1", 810 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 811 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", 812 | "dev": true, 813 | "requires": { 814 | "acorn": "^3.0.4" 815 | }, 816 | "dependencies": { 817 | "acorn": { 818 | "version": "3.3.0", 819 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 820 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 821 | "dev": true 822 | } 823 | } 824 | }, 825 | "ajv": { 826 | "version": "5.5.2", 827 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 828 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 829 | "requires": { 830 | "co": "^4.6.0", 831 | "fast-deep-equal": "^1.0.0", 832 | "fast-json-stable-stringify": "^2.0.0", 833 | "json-schema-traverse": "^0.3.0" 834 | } 835 | }, 836 | "ajv-keywords": { 837 | "version": "2.1.1", 838 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", 839 | "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", 840 | "dev": true 841 | }, 842 | "ansi-escapes": { 843 | "version": "3.2.0", 844 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 845 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", 846 | "dev": true 847 | }, 848 | "ansi-regex": { 849 | "version": "2.1.1", 850 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 851 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 852 | "dev": true 853 | }, 854 | "ansi-styles": { 855 | "version": "3.2.1", 856 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 857 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 858 | "dev": true, 859 | "requires": { 860 | "color-convert": "^1.9.0" 861 | } 862 | }, 863 | "anymatch": { 864 | "version": "2.0.0", 865 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", 866 | "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", 867 | "dev": true, 868 | "optional": true, 869 | "requires": { 870 | "micromatch": "^3.1.4", 871 | "normalize-path": "^2.1.1" 872 | }, 873 | "dependencies": { 874 | "normalize-path": { 875 | "version": "2.1.1", 876 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 877 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 878 | "dev": true, 879 | "optional": true, 880 | "requires": { 881 | "remove-trailing-separator": "^1.0.1" 882 | } 883 | } 884 | } 885 | }, 886 | "argparse": { 887 | "version": "1.0.10", 888 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 889 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 890 | "dev": true, 891 | "requires": { 892 | "sprintf-js": "~1.0.2" 893 | } 894 | }, 895 | "arr-diff": { 896 | "version": "4.0.0", 897 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", 898 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", 899 | "dev": true, 900 | "optional": true 901 | }, 902 | "arr-flatten": { 903 | "version": "1.1.0", 904 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 905 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 906 | "dev": true, 907 | "optional": true 908 | }, 909 | "arr-union": { 910 | "version": "3.1.0", 911 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 912 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", 913 | "dev": true, 914 | "optional": true 915 | }, 916 | "array-unique": { 917 | "version": "0.3.2", 918 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", 919 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", 920 | "dev": true, 921 | "optional": true 922 | }, 923 | "asn1": { 924 | "version": "0.2.4", 925 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 926 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 927 | "requires": { 928 | "safer-buffer": "~2.1.0" 929 | } 930 | }, 931 | "assert-plus": { 932 | "version": "1.0.0", 933 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 934 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 935 | }, 936 | "assign-symbols": { 937 | "version": "1.0.0", 938 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 939 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", 940 | "dev": true, 941 | "optional": true 942 | }, 943 | "async": { 944 | "version": "2.6.1", 945 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", 946 | "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", 947 | "requires": { 948 | "lodash": "^4.17.10" 949 | } 950 | }, 951 | "async-each": { 952 | "version": "1.0.2", 953 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", 954 | "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==", 955 | "dev": true, 956 | "optional": true 957 | }, 958 | "asynckit": { 959 | "version": "0.4.0", 960 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 961 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 962 | }, 963 | "atob": { 964 | "version": "2.1.2", 965 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 966 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", 967 | "dev": true, 968 | "optional": true 969 | }, 970 | "aws-sign2": { 971 | "version": "0.7.0", 972 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 973 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 974 | }, 975 | "aws4": { 976 | "version": "1.8.0", 977 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 978 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" 979 | }, 980 | "babel-code-frame": { 981 | "version": "6.26.0", 982 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 983 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 984 | "dev": true, 985 | "requires": { 986 | "chalk": "^1.1.3", 987 | "esutils": "^2.0.2", 988 | "js-tokens": "^3.0.2" 989 | }, 990 | "dependencies": { 991 | "ansi-styles": { 992 | "version": "2.2.1", 993 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 994 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 995 | "dev": true 996 | }, 997 | "chalk": { 998 | "version": "1.1.3", 999 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 1000 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 1001 | "dev": true, 1002 | "requires": { 1003 | "ansi-styles": "^2.2.1", 1004 | "escape-string-regexp": "^1.0.2", 1005 | "has-ansi": "^2.0.0", 1006 | "strip-ansi": "^3.0.0", 1007 | "supports-color": "^2.0.0" 1008 | } 1009 | }, 1010 | "js-tokens": { 1011 | "version": "3.0.2", 1012 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 1013 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 1014 | "dev": true 1015 | }, 1016 | "strip-ansi": { 1017 | "version": "3.0.1", 1018 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1019 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1020 | "dev": true, 1021 | "requires": { 1022 | "ansi-regex": "^2.0.0" 1023 | } 1024 | }, 1025 | "supports-color": { 1026 | "version": "2.0.0", 1027 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1028 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1029 | "dev": true 1030 | } 1031 | } 1032 | }, 1033 | "balanced-match": { 1034 | "version": "1.0.0", 1035 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1036 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 1037 | "dev": true 1038 | }, 1039 | "base": { 1040 | "version": "0.11.2", 1041 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", 1042 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", 1043 | "dev": true, 1044 | "optional": true, 1045 | "requires": { 1046 | "cache-base": "^1.0.1", 1047 | "class-utils": "^0.3.5", 1048 | "component-emitter": "^1.2.1", 1049 | "define-property": "^1.0.0", 1050 | "isobject": "^3.0.1", 1051 | "mixin-deep": "^1.2.0", 1052 | "pascalcase": "^0.1.1" 1053 | }, 1054 | "dependencies": { 1055 | "define-property": { 1056 | "version": "1.0.0", 1057 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 1058 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 1059 | "dev": true, 1060 | "optional": true, 1061 | "requires": { 1062 | "is-descriptor": "^1.0.0" 1063 | } 1064 | }, 1065 | "is-accessor-descriptor": { 1066 | "version": "1.0.0", 1067 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1068 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1069 | "dev": true, 1070 | "optional": true, 1071 | "requires": { 1072 | "kind-of": "^6.0.0" 1073 | } 1074 | }, 1075 | "is-data-descriptor": { 1076 | "version": "1.0.0", 1077 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1078 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1079 | "dev": true, 1080 | "optional": true, 1081 | "requires": { 1082 | "kind-of": "^6.0.0" 1083 | } 1084 | }, 1085 | "is-descriptor": { 1086 | "version": "1.0.2", 1087 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1088 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1089 | "dev": true, 1090 | "optional": true, 1091 | "requires": { 1092 | "is-accessor-descriptor": "^1.0.0", 1093 | "is-data-descriptor": "^1.0.0", 1094 | "kind-of": "^6.0.2" 1095 | } 1096 | } 1097 | } 1098 | }, 1099 | "bcrypt-pbkdf": { 1100 | "version": "1.0.2", 1101 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 1102 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 1103 | "requires": { 1104 | "tweetnacl": "^0.14.3" 1105 | } 1106 | }, 1107 | "binary-extensions": { 1108 | "version": "1.13.0", 1109 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", 1110 | "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", 1111 | "dev": true, 1112 | "optional": true 1113 | }, 1114 | "boom": { 1115 | "version": "4.3.1", 1116 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 1117 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 1118 | "requires": { 1119 | "hoek": "4.x.x" 1120 | } 1121 | }, 1122 | "brace-expansion": { 1123 | "version": "1.1.11", 1124 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1125 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1126 | "dev": true, 1127 | "requires": { 1128 | "balanced-match": "^1.0.0", 1129 | "concat-map": "0.0.1" 1130 | } 1131 | }, 1132 | "braces": { 1133 | "version": "2.3.2", 1134 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", 1135 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", 1136 | "dev": true, 1137 | "optional": true, 1138 | "requires": { 1139 | "arr-flatten": "^1.1.0", 1140 | "array-unique": "^0.3.2", 1141 | "extend-shallow": "^2.0.1", 1142 | "fill-range": "^4.0.0", 1143 | "isobject": "^3.0.1", 1144 | "repeat-element": "^1.1.2", 1145 | "snapdragon": "^0.8.1", 1146 | "snapdragon-node": "^2.0.1", 1147 | "split-string": "^3.0.2", 1148 | "to-regex": "^3.0.1" 1149 | }, 1150 | "dependencies": { 1151 | "extend-shallow": { 1152 | "version": "2.0.1", 1153 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1154 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1155 | "dev": true, 1156 | "optional": true, 1157 | "requires": { 1158 | "is-extendable": "^0.1.0" 1159 | } 1160 | } 1161 | } 1162 | }, 1163 | "browserslist": { 1164 | "version": "4.5.1", 1165 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.1.tgz", 1166 | "integrity": "sha512-/pPw5IAUyqaQXGuD5vS8tcbudyPZ241jk1W5pQBsGDfcjNQt7p8qxZhgMNuygDShte1PibLFexecWUPgmVLfrg==", 1167 | "dev": true, 1168 | "requires": { 1169 | "caniuse-lite": "^1.0.30000949", 1170 | "electron-to-chromium": "^1.3.116", 1171 | "node-releases": "^1.1.11" 1172 | } 1173 | }, 1174 | "buffer-from": { 1175 | "version": "1.1.1", 1176 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 1177 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 1178 | "dev": true 1179 | }, 1180 | "cache-base": { 1181 | "version": "1.0.1", 1182 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 1183 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", 1184 | "dev": true, 1185 | "optional": true, 1186 | "requires": { 1187 | "collection-visit": "^1.0.0", 1188 | "component-emitter": "^1.2.1", 1189 | "get-value": "^2.0.6", 1190 | "has-value": "^1.0.0", 1191 | "isobject": "^3.0.1", 1192 | "set-value": "^2.0.0", 1193 | "to-object-path": "^0.3.0", 1194 | "union-value": "^1.0.0", 1195 | "unset-value": "^1.0.0" 1196 | } 1197 | }, 1198 | "caller-path": { 1199 | "version": "0.1.0", 1200 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 1201 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 1202 | "dev": true, 1203 | "requires": { 1204 | "callsites": "^0.2.0" 1205 | } 1206 | }, 1207 | "callsites": { 1208 | "version": "0.2.0", 1209 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 1210 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 1211 | "dev": true 1212 | }, 1213 | "caniuse-lite": { 1214 | "version": "1.0.30000950", 1215 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000950.tgz", 1216 | "integrity": "sha512-Cs+4U9T0okW2ftBsCIHuEYXXkki7mjXmjCh4c6PzYShk04qDEr76/iC7KwhLoWoY65wcra1XOsRD+S7BptEb5A==", 1217 | "dev": true 1218 | }, 1219 | "caseless": { 1220 | "version": "0.12.0", 1221 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 1222 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 1223 | }, 1224 | "chalk": { 1225 | "version": "2.4.2", 1226 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1227 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1228 | "dev": true, 1229 | "requires": { 1230 | "ansi-styles": "^3.2.1", 1231 | "escape-string-regexp": "^1.0.5", 1232 | "supports-color": "^5.3.0" 1233 | } 1234 | }, 1235 | "chardet": { 1236 | "version": "0.4.2", 1237 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", 1238 | "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", 1239 | "dev": true 1240 | }, 1241 | "chokidar": { 1242 | "version": "2.1.2", 1243 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", 1244 | "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", 1245 | "dev": true, 1246 | "optional": true, 1247 | "requires": { 1248 | "anymatch": "^2.0.0", 1249 | "async-each": "^1.0.1", 1250 | "braces": "^2.3.2", 1251 | "fsevents": "^1.2.7", 1252 | "glob-parent": "^3.1.0", 1253 | "inherits": "^2.0.3", 1254 | "is-binary-path": "^1.0.0", 1255 | "is-glob": "^4.0.0", 1256 | "normalize-path": "^3.0.0", 1257 | "path-is-absolute": "^1.0.0", 1258 | "readdirp": "^2.2.1", 1259 | "upath": "^1.1.0" 1260 | } 1261 | }, 1262 | "circular-json": { 1263 | "version": "0.3.3", 1264 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 1265 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 1266 | "dev": true 1267 | }, 1268 | "class-utils": { 1269 | "version": "0.3.6", 1270 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 1271 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", 1272 | "dev": true, 1273 | "optional": true, 1274 | "requires": { 1275 | "arr-union": "^3.1.0", 1276 | "define-property": "^0.2.5", 1277 | "isobject": "^3.0.0", 1278 | "static-extend": "^0.1.1" 1279 | }, 1280 | "dependencies": { 1281 | "define-property": { 1282 | "version": "0.2.5", 1283 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1284 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1285 | "dev": true, 1286 | "optional": true, 1287 | "requires": { 1288 | "is-descriptor": "^0.1.0" 1289 | } 1290 | } 1291 | } 1292 | }, 1293 | "cli-cursor": { 1294 | "version": "2.1.0", 1295 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 1296 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 1297 | "dev": true, 1298 | "requires": { 1299 | "restore-cursor": "^2.0.0" 1300 | } 1301 | }, 1302 | "cli-width": { 1303 | "version": "2.2.0", 1304 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 1305 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 1306 | "dev": true 1307 | }, 1308 | "co": { 1309 | "version": "4.6.0", 1310 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 1311 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 1312 | }, 1313 | "collection-visit": { 1314 | "version": "1.0.0", 1315 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 1316 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 1317 | "dev": true, 1318 | "optional": true, 1319 | "requires": { 1320 | "map-visit": "^1.0.0", 1321 | "object-visit": "^1.0.0" 1322 | } 1323 | }, 1324 | "color-convert": { 1325 | "version": "1.9.3", 1326 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1327 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1328 | "dev": true, 1329 | "requires": { 1330 | "color-name": "1.1.3" 1331 | } 1332 | }, 1333 | "color-name": { 1334 | "version": "1.1.3", 1335 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1336 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1337 | "dev": true 1338 | }, 1339 | "combined-stream": { 1340 | "version": "1.0.7", 1341 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 1342 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 1343 | "requires": { 1344 | "delayed-stream": "~1.0.0" 1345 | } 1346 | }, 1347 | "commander": { 1348 | "version": "2.19.0", 1349 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", 1350 | "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", 1351 | "dev": true 1352 | }, 1353 | "component-emitter": { 1354 | "version": "1.2.1", 1355 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 1356 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 1357 | "dev": true, 1358 | "optional": true 1359 | }, 1360 | "concat-map": { 1361 | "version": "0.0.1", 1362 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1363 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1364 | "dev": true 1365 | }, 1366 | "concat-stream": { 1367 | "version": "1.6.2", 1368 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 1369 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 1370 | "dev": true, 1371 | "requires": { 1372 | "buffer-from": "^1.0.0", 1373 | "inherits": "^2.0.3", 1374 | "readable-stream": "^2.2.2", 1375 | "typedarray": "^0.0.6" 1376 | } 1377 | }, 1378 | "convert-source-map": { 1379 | "version": "1.6.0", 1380 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", 1381 | "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", 1382 | "dev": true, 1383 | "requires": { 1384 | "safe-buffer": "~5.1.1" 1385 | } 1386 | }, 1387 | "copy-descriptor": { 1388 | "version": "0.1.1", 1389 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 1390 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", 1391 | "dev": true, 1392 | "optional": true 1393 | }, 1394 | "core-js": { 1395 | "version": "2.6.5", 1396 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", 1397 | "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" 1398 | }, 1399 | "core-js-compat": { 1400 | "version": "3.0.0", 1401 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.0.tgz", 1402 | "integrity": "sha512-W/Ppz34uUme3LmXWjMgFlYyGnbo1hd9JvA0LNQ4EmieqVjg2GPYbj3H6tcdP2QGPGWdRKUqZVbVKLNIFVs/HiA==", 1403 | "dev": true, 1404 | "requires": { 1405 | "browserslist": "^4.5.1", 1406 | "core-js": "3.0.0", 1407 | "core-js-pure": "3.0.0", 1408 | "semver": "^5.6.0" 1409 | }, 1410 | "dependencies": { 1411 | "core-js": { 1412 | "version": "3.0.0", 1413 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0.tgz", 1414 | "integrity": "sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ==", 1415 | "dev": true 1416 | } 1417 | } 1418 | }, 1419 | "core-js-pure": { 1420 | "version": "3.0.0", 1421 | "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.0.tgz", 1422 | "integrity": "sha512-yPiS3fQd842RZDgo/TAKGgS0f3p2nxssF1H65DIZvZv0Od5CygP8puHXn3IQiM/39VAvgCbdaMQpresrbGgt9g==", 1423 | "dev": true 1424 | }, 1425 | "core-util-is": { 1426 | "version": "1.0.2", 1427 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1428 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 1429 | }, 1430 | "cross-env": { 1431 | "version": "5.2.0", 1432 | "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", 1433 | "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", 1434 | "dev": true, 1435 | "requires": { 1436 | "cross-spawn": "^6.0.5", 1437 | "is-windows": "^1.0.0" 1438 | } 1439 | }, 1440 | "cross-spawn": { 1441 | "version": "6.0.5", 1442 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 1443 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 1444 | "dev": true, 1445 | "requires": { 1446 | "nice-try": "^1.0.4", 1447 | "path-key": "^2.0.1", 1448 | "semver": "^5.5.0", 1449 | "shebang-command": "^1.2.0", 1450 | "which": "^1.2.9" 1451 | } 1452 | }, 1453 | "cryptiles": { 1454 | "version": "3.1.4", 1455 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.4.tgz", 1456 | "integrity": "sha512-8I1sgZHfVwcSOY6mSGpVU3lw/GSIZvusg8dD2+OGehCJpOhQRLNcH0qb9upQnOH4XhgxxFJSg6E2kx95deb1Tw==", 1457 | "requires": { 1458 | "boom": "5.x.x" 1459 | }, 1460 | "dependencies": { 1461 | "boom": { 1462 | "version": "5.2.0", 1463 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1464 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 1465 | "requires": { 1466 | "hoek": "4.x.x" 1467 | } 1468 | } 1469 | } 1470 | }, 1471 | "dashdash": { 1472 | "version": "1.14.1", 1473 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 1474 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 1475 | "requires": { 1476 | "assert-plus": "^1.0.0" 1477 | } 1478 | }, 1479 | "debug": { 1480 | "version": "2.6.9", 1481 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1482 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1483 | "dev": true, 1484 | "optional": true, 1485 | "requires": { 1486 | "ms": "2.0.0" 1487 | } 1488 | }, 1489 | "decode-uri-component": { 1490 | "version": "0.2.0", 1491 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 1492 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", 1493 | "dev": true, 1494 | "optional": true 1495 | }, 1496 | "deep-is": { 1497 | "version": "0.1.3", 1498 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 1499 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 1500 | "dev": true 1501 | }, 1502 | "define-property": { 1503 | "version": "2.0.2", 1504 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 1505 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", 1506 | "dev": true, 1507 | "optional": true, 1508 | "requires": { 1509 | "is-descriptor": "^1.0.2", 1510 | "isobject": "^3.0.1" 1511 | }, 1512 | "dependencies": { 1513 | "is-accessor-descriptor": { 1514 | "version": "1.0.0", 1515 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1516 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1517 | "dev": true, 1518 | "optional": true, 1519 | "requires": { 1520 | "kind-of": "^6.0.0" 1521 | } 1522 | }, 1523 | "is-data-descriptor": { 1524 | "version": "1.0.0", 1525 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1526 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1527 | "dev": true, 1528 | "optional": true, 1529 | "requires": { 1530 | "kind-of": "^6.0.0" 1531 | } 1532 | }, 1533 | "is-descriptor": { 1534 | "version": "1.0.2", 1535 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1536 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1537 | "dev": true, 1538 | "optional": true, 1539 | "requires": { 1540 | "is-accessor-descriptor": "^1.0.0", 1541 | "is-data-descriptor": "^1.0.0", 1542 | "kind-of": "^6.0.2" 1543 | } 1544 | } 1545 | } 1546 | }, 1547 | "delayed-stream": { 1548 | "version": "1.0.0", 1549 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1550 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 1551 | }, 1552 | "doctrine": { 1553 | "version": "2.1.0", 1554 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 1555 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 1556 | "dev": true, 1557 | "requires": { 1558 | "esutils": "^2.0.2" 1559 | } 1560 | }, 1561 | "ecc-jsbn": { 1562 | "version": "0.1.2", 1563 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 1564 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 1565 | "requires": { 1566 | "jsbn": "~0.1.0", 1567 | "safer-buffer": "^2.1.0" 1568 | } 1569 | }, 1570 | "electron-to-chromium": { 1571 | "version": "1.3.116", 1572 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz", 1573 | "integrity": "sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA==", 1574 | "dev": true 1575 | }, 1576 | "escape-string-regexp": { 1577 | "version": "1.0.5", 1578 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1579 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1580 | "dev": true 1581 | }, 1582 | "eslint": { 1583 | "version": "4.19.1", 1584 | "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", 1585 | "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", 1586 | "dev": true, 1587 | "requires": { 1588 | "ajv": "^5.3.0", 1589 | "babel-code-frame": "^6.22.0", 1590 | "chalk": "^2.1.0", 1591 | "concat-stream": "^1.6.0", 1592 | "cross-spawn": "^5.1.0", 1593 | "debug": "^3.1.0", 1594 | "doctrine": "^2.1.0", 1595 | "eslint-scope": "^3.7.1", 1596 | "eslint-visitor-keys": "^1.0.0", 1597 | "espree": "^3.5.4", 1598 | "esquery": "^1.0.0", 1599 | "esutils": "^2.0.2", 1600 | "file-entry-cache": "^2.0.0", 1601 | "functional-red-black-tree": "^1.0.1", 1602 | "glob": "^7.1.2", 1603 | "globals": "^11.0.1", 1604 | "ignore": "^3.3.3", 1605 | "imurmurhash": "^0.1.4", 1606 | "inquirer": "^3.0.6", 1607 | "is-resolvable": "^1.0.0", 1608 | "js-yaml": "^3.9.1", 1609 | "json-stable-stringify-without-jsonify": "^1.0.1", 1610 | "levn": "^0.3.0", 1611 | "lodash": "^4.17.4", 1612 | "minimatch": "^3.0.2", 1613 | "mkdirp": "^0.5.1", 1614 | "natural-compare": "^1.4.0", 1615 | "optionator": "^0.8.2", 1616 | "path-is-inside": "^1.0.2", 1617 | "pluralize": "^7.0.0", 1618 | "progress": "^2.0.0", 1619 | "regexpp": "^1.0.1", 1620 | "require-uncached": "^1.0.3", 1621 | "semver": "^5.3.0", 1622 | "strip-ansi": "^4.0.0", 1623 | "strip-json-comments": "~2.0.1", 1624 | "table": "4.0.2", 1625 | "text-table": "~0.2.0" 1626 | }, 1627 | "dependencies": { 1628 | "cross-spawn": { 1629 | "version": "5.1.0", 1630 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 1631 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 1632 | "dev": true, 1633 | "requires": { 1634 | "lru-cache": "^4.0.1", 1635 | "shebang-command": "^1.2.0", 1636 | "which": "^1.2.9" 1637 | } 1638 | }, 1639 | "debug": { 1640 | "version": "3.2.6", 1641 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 1642 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 1643 | "dev": true, 1644 | "requires": { 1645 | "ms": "^2.1.1" 1646 | } 1647 | }, 1648 | "ms": { 1649 | "version": "2.1.1", 1650 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 1651 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 1652 | "dev": true 1653 | } 1654 | } 1655 | }, 1656 | "eslint-scope": { 1657 | "version": "3.7.3", 1658 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", 1659 | "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", 1660 | "dev": true, 1661 | "requires": { 1662 | "esrecurse": "^4.1.0", 1663 | "estraverse": "^4.1.1" 1664 | } 1665 | }, 1666 | "eslint-visitor-keys": { 1667 | "version": "1.0.0", 1668 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 1669 | "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", 1670 | "dev": true 1671 | }, 1672 | "espree": { 1673 | "version": "3.5.4", 1674 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", 1675 | "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", 1676 | "dev": true, 1677 | "requires": { 1678 | "acorn": "^5.5.0", 1679 | "acorn-jsx": "^3.0.0" 1680 | } 1681 | }, 1682 | "esprima": { 1683 | "version": "4.0.1", 1684 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1685 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1686 | "dev": true 1687 | }, 1688 | "esquery": { 1689 | "version": "1.0.1", 1690 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", 1691 | "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", 1692 | "dev": true, 1693 | "requires": { 1694 | "estraverse": "^4.0.0" 1695 | } 1696 | }, 1697 | "esrecurse": { 1698 | "version": "4.2.1", 1699 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 1700 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 1701 | "dev": true, 1702 | "requires": { 1703 | "estraverse": "^4.1.0" 1704 | } 1705 | }, 1706 | "estraverse": { 1707 | "version": "4.2.0", 1708 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 1709 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 1710 | "dev": true 1711 | }, 1712 | "esutils": { 1713 | "version": "2.0.2", 1714 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 1715 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 1716 | "dev": true 1717 | }, 1718 | "expand-brackets": { 1719 | "version": "2.1.4", 1720 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 1721 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 1722 | "dev": true, 1723 | "optional": true, 1724 | "requires": { 1725 | "debug": "^2.3.3", 1726 | "define-property": "^0.2.5", 1727 | "extend-shallow": "^2.0.1", 1728 | "posix-character-classes": "^0.1.0", 1729 | "regex-not": "^1.0.0", 1730 | "snapdragon": "^0.8.1", 1731 | "to-regex": "^3.0.1" 1732 | }, 1733 | "dependencies": { 1734 | "define-property": { 1735 | "version": "0.2.5", 1736 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1737 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1738 | "dev": true, 1739 | "optional": true, 1740 | "requires": { 1741 | "is-descriptor": "^0.1.0" 1742 | } 1743 | }, 1744 | "extend-shallow": { 1745 | "version": "2.0.1", 1746 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1747 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1748 | "dev": true, 1749 | "optional": true, 1750 | "requires": { 1751 | "is-extendable": "^0.1.0" 1752 | } 1753 | } 1754 | } 1755 | }, 1756 | "extend": { 1757 | "version": "3.0.2", 1758 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1759 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 1760 | }, 1761 | "extend-shallow": { 1762 | "version": "3.0.2", 1763 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 1764 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 1765 | "dev": true, 1766 | "optional": true, 1767 | "requires": { 1768 | "assign-symbols": "^1.0.0", 1769 | "is-extendable": "^1.0.1" 1770 | }, 1771 | "dependencies": { 1772 | "is-extendable": { 1773 | "version": "1.0.1", 1774 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 1775 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 1776 | "dev": true, 1777 | "optional": true, 1778 | "requires": { 1779 | "is-plain-object": "^2.0.4" 1780 | } 1781 | } 1782 | } 1783 | }, 1784 | "external-editor": { 1785 | "version": "2.2.0", 1786 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", 1787 | "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", 1788 | "dev": true, 1789 | "requires": { 1790 | "chardet": "^0.4.0", 1791 | "iconv-lite": "^0.4.17", 1792 | "tmp": "^0.0.33" 1793 | } 1794 | }, 1795 | "extglob": { 1796 | "version": "2.0.4", 1797 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", 1798 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", 1799 | "dev": true, 1800 | "optional": true, 1801 | "requires": { 1802 | "array-unique": "^0.3.2", 1803 | "define-property": "^1.0.0", 1804 | "expand-brackets": "^2.1.4", 1805 | "extend-shallow": "^2.0.1", 1806 | "fragment-cache": "^0.2.1", 1807 | "regex-not": "^1.0.0", 1808 | "snapdragon": "^0.8.1", 1809 | "to-regex": "^3.0.1" 1810 | }, 1811 | "dependencies": { 1812 | "define-property": { 1813 | "version": "1.0.0", 1814 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 1815 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 1816 | "dev": true, 1817 | "optional": true, 1818 | "requires": { 1819 | "is-descriptor": "^1.0.0" 1820 | } 1821 | }, 1822 | "extend-shallow": { 1823 | "version": "2.0.1", 1824 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1825 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1826 | "dev": true, 1827 | "optional": true, 1828 | "requires": { 1829 | "is-extendable": "^0.1.0" 1830 | } 1831 | }, 1832 | "is-accessor-descriptor": { 1833 | "version": "1.0.0", 1834 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 1835 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 1836 | "dev": true, 1837 | "optional": true, 1838 | "requires": { 1839 | "kind-of": "^6.0.0" 1840 | } 1841 | }, 1842 | "is-data-descriptor": { 1843 | "version": "1.0.0", 1844 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 1845 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 1846 | "dev": true, 1847 | "optional": true, 1848 | "requires": { 1849 | "kind-of": "^6.0.0" 1850 | } 1851 | }, 1852 | "is-descriptor": { 1853 | "version": "1.0.2", 1854 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 1855 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 1856 | "dev": true, 1857 | "optional": true, 1858 | "requires": { 1859 | "is-accessor-descriptor": "^1.0.0", 1860 | "is-data-descriptor": "^1.0.0", 1861 | "kind-of": "^6.0.2" 1862 | } 1863 | } 1864 | } 1865 | }, 1866 | "extsprintf": { 1867 | "version": "1.3.0", 1868 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1869 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 1870 | }, 1871 | "fast-deep-equal": { 1872 | "version": "1.1.0", 1873 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 1874 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 1875 | }, 1876 | "fast-json-stable-stringify": { 1877 | "version": "2.0.0", 1878 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1879 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 1880 | }, 1881 | "fast-levenshtein": { 1882 | "version": "2.0.6", 1883 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1884 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1885 | "dev": true 1886 | }, 1887 | "figures": { 1888 | "version": "2.0.0", 1889 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 1890 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 1891 | "dev": true, 1892 | "requires": { 1893 | "escape-string-regexp": "^1.0.5" 1894 | } 1895 | }, 1896 | "file-entry-cache": { 1897 | "version": "2.0.0", 1898 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 1899 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 1900 | "dev": true, 1901 | "requires": { 1902 | "flat-cache": "^1.2.1", 1903 | "object-assign": "^4.0.1" 1904 | } 1905 | }, 1906 | "fill-range": { 1907 | "version": "4.0.0", 1908 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 1909 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 1910 | "dev": true, 1911 | "optional": true, 1912 | "requires": { 1913 | "extend-shallow": "^2.0.1", 1914 | "is-number": "^3.0.0", 1915 | "repeat-string": "^1.6.1", 1916 | "to-regex-range": "^2.1.0" 1917 | }, 1918 | "dependencies": { 1919 | "extend-shallow": { 1920 | "version": "2.0.1", 1921 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 1922 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 1923 | "dev": true, 1924 | "optional": true, 1925 | "requires": { 1926 | "is-extendable": "^0.1.0" 1927 | } 1928 | } 1929 | } 1930 | }, 1931 | "flat-cache": { 1932 | "version": "1.3.4", 1933 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", 1934 | "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", 1935 | "dev": true, 1936 | "requires": { 1937 | "circular-json": "^0.3.1", 1938 | "graceful-fs": "^4.1.2", 1939 | "rimraf": "~2.6.2", 1940 | "write": "^0.2.1" 1941 | } 1942 | }, 1943 | "for-in": { 1944 | "version": "1.0.2", 1945 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 1946 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 1947 | "dev": true, 1948 | "optional": true 1949 | }, 1950 | "forever-agent": { 1951 | "version": "0.6.1", 1952 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1953 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 1954 | }, 1955 | "form-data": { 1956 | "version": "2.3.3", 1957 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 1958 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 1959 | "requires": { 1960 | "asynckit": "^0.4.0", 1961 | "combined-stream": "^1.0.6", 1962 | "mime-types": "^2.1.12" 1963 | } 1964 | }, 1965 | "fragment-cache": { 1966 | "version": "0.2.1", 1967 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", 1968 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", 1969 | "dev": true, 1970 | "optional": true, 1971 | "requires": { 1972 | "map-cache": "^0.2.2" 1973 | } 1974 | }, 1975 | "fs-readdir-recursive": { 1976 | "version": "1.1.0", 1977 | "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", 1978 | "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", 1979 | "dev": true 1980 | }, 1981 | "fs.realpath": { 1982 | "version": "1.0.0", 1983 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1984 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1985 | "dev": true 1986 | }, 1987 | "fsevents": { 1988 | "version": "1.2.7", 1989 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", 1990 | "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", 1991 | "dev": true, 1992 | "optional": true, 1993 | "requires": { 1994 | "nan": "^2.9.2", 1995 | "node-pre-gyp": "^0.10.0" 1996 | }, 1997 | "dependencies": { 1998 | "abbrev": { 1999 | "version": "1.1.1", 2000 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 2001 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 2002 | "dev": true, 2003 | "optional": true 2004 | }, 2005 | "ansi-regex": { 2006 | "version": "2.1.1", 2007 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 2008 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 2009 | "dev": true, 2010 | "optional": true 2011 | }, 2012 | "aproba": { 2013 | "version": "1.2.0", 2014 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 2015 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", 2016 | "dev": true, 2017 | "optional": true 2018 | }, 2019 | "are-we-there-yet": { 2020 | "version": "1.1.5", 2021 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", 2022 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", 2023 | "dev": true, 2024 | "optional": true, 2025 | "requires": { 2026 | "delegates": "^1.0.0", 2027 | "readable-stream": "^2.0.6" 2028 | } 2029 | }, 2030 | "balanced-match": { 2031 | "version": "1.0.0", 2032 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 2033 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 2034 | "dev": true, 2035 | "optional": true 2036 | }, 2037 | "brace-expansion": { 2038 | "version": "1.1.11", 2039 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2040 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2041 | "dev": true, 2042 | "optional": true, 2043 | "requires": { 2044 | "balanced-match": "^1.0.0", 2045 | "concat-map": "0.0.1" 2046 | } 2047 | }, 2048 | "chownr": { 2049 | "version": "1.1.1", 2050 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", 2051 | "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", 2052 | "dev": true, 2053 | "optional": true 2054 | }, 2055 | "code-point-at": { 2056 | "version": "1.1.0", 2057 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 2058 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 2059 | "dev": true, 2060 | "optional": true 2061 | }, 2062 | "concat-map": { 2063 | "version": "0.0.1", 2064 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2065 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 2066 | "dev": true, 2067 | "optional": true 2068 | }, 2069 | "console-control-strings": { 2070 | "version": "1.1.0", 2071 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 2072 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", 2073 | "dev": true, 2074 | "optional": true 2075 | }, 2076 | "core-util-is": { 2077 | "version": "1.0.2", 2078 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 2079 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 2080 | "dev": true, 2081 | "optional": true 2082 | }, 2083 | "debug": { 2084 | "version": "2.6.9", 2085 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2086 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2087 | "dev": true, 2088 | "optional": true, 2089 | "requires": { 2090 | "ms": "2.0.0" 2091 | } 2092 | }, 2093 | "deep-extend": { 2094 | "version": "0.6.0", 2095 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 2096 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 2097 | "dev": true, 2098 | "optional": true 2099 | }, 2100 | "delegates": { 2101 | "version": "1.0.0", 2102 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 2103 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", 2104 | "dev": true, 2105 | "optional": true 2106 | }, 2107 | "detect-libc": { 2108 | "version": "1.0.3", 2109 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 2110 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", 2111 | "dev": true, 2112 | "optional": true 2113 | }, 2114 | "fs-minipass": { 2115 | "version": "1.2.5", 2116 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", 2117 | "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", 2118 | "dev": true, 2119 | "optional": true, 2120 | "requires": { 2121 | "minipass": "^2.2.1" 2122 | } 2123 | }, 2124 | "fs.realpath": { 2125 | "version": "1.0.0", 2126 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2127 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 2128 | "dev": true, 2129 | "optional": true 2130 | }, 2131 | "gauge": { 2132 | "version": "2.7.4", 2133 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 2134 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 2135 | "dev": true, 2136 | "optional": true, 2137 | "requires": { 2138 | "aproba": "^1.0.3", 2139 | "console-control-strings": "^1.0.0", 2140 | "has-unicode": "^2.0.0", 2141 | "object-assign": "^4.1.0", 2142 | "signal-exit": "^3.0.0", 2143 | "string-width": "^1.0.1", 2144 | "strip-ansi": "^3.0.1", 2145 | "wide-align": "^1.1.0" 2146 | } 2147 | }, 2148 | "glob": { 2149 | "version": "7.1.3", 2150 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 2151 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 2152 | "dev": true, 2153 | "optional": true, 2154 | "requires": { 2155 | "fs.realpath": "^1.0.0", 2156 | "inflight": "^1.0.4", 2157 | "inherits": "2", 2158 | "minimatch": "^3.0.4", 2159 | "once": "^1.3.0", 2160 | "path-is-absolute": "^1.0.0" 2161 | } 2162 | }, 2163 | "has-unicode": { 2164 | "version": "2.0.1", 2165 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 2166 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", 2167 | "dev": true, 2168 | "optional": true 2169 | }, 2170 | "iconv-lite": { 2171 | "version": "0.4.24", 2172 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 2173 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 2174 | "dev": true, 2175 | "optional": true, 2176 | "requires": { 2177 | "safer-buffer": ">= 2.1.2 < 3" 2178 | } 2179 | }, 2180 | "ignore-walk": { 2181 | "version": "3.0.1", 2182 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", 2183 | "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", 2184 | "dev": true, 2185 | "optional": true, 2186 | "requires": { 2187 | "minimatch": "^3.0.4" 2188 | } 2189 | }, 2190 | "inflight": { 2191 | "version": "1.0.6", 2192 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2193 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2194 | "dev": true, 2195 | "optional": true, 2196 | "requires": { 2197 | "once": "^1.3.0", 2198 | "wrappy": "1" 2199 | } 2200 | }, 2201 | "inherits": { 2202 | "version": "2.0.3", 2203 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2204 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 2205 | "dev": true, 2206 | "optional": true 2207 | }, 2208 | "ini": { 2209 | "version": "1.3.5", 2210 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 2211 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 2212 | "dev": true, 2213 | "optional": true 2214 | }, 2215 | "is-fullwidth-code-point": { 2216 | "version": "1.0.0", 2217 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 2218 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 2219 | "dev": true, 2220 | "optional": true, 2221 | "requires": { 2222 | "number-is-nan": "^1.0.0" 2223 | } 2224 | }, 2225 | "isarray": { 2226 | "version": "1.0.0", 2227 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2228 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2229 | "dev": true, 2230 | "optional": true 2231 | }, 2232 | "minimatch": { 2233 | "version": "3.0.4", 2234 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2235 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2236 | "dev": true, 2237 | "optional": true, 2238 | "requires": { 2239 | "brace-expansion": "^1.1.7" 2240 | } 2241 | }, 2242 | "minimist": { 2243 | "version": "0.0.8", 2244 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2245 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2246 | "dev": true, 2247 | "optional": true 2248 | }, 2249 | "minipass": { 2250 | "version": "2.3.5", 2251 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", 2252 | "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", 2253 | "dev": true, 2254 | "optional": true, 2255 | "requires": { 2256 | "safe-buffer": "^5.1.2", 2257 | "yallist": "^3.0.0" 2258 | } 2259 | }, 2260 | "minizlib": { 2261 | "version": "1.2.1", 2262 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", 2263 | "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", 2264 | "dev": true, 2265 | "optional": true, 2266 | "requires": { 2267 | "minipass": "^2.2.1" 2268 | } 2269 | }, 2270 | "mkdirp": { 2271 | "version": "0.5.1", 2272 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2273 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2274 | "dev": true, 2275 | "optional": true, 2276 | "requires": { 2277 | "minimist": "0.0.8" 2278 | } 2279 | }, 2280 | "ms": { 2281 | "version": "2.0.0", 2282 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2283 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2284 | "dev": true, 2285 | "optional": true 2286 | }, 2287 | "needle": { 2288 | "version": "2.2.4", 2289 | "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", 2290 | "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", 2291 | "dev": true, 2292 | "optional": true, 2293 | "requires": { 2294 | "debug": "^2.1.2", 2295 | "iconv-lite": "^0.4.4", 2296 | "sax": "^1.2.4" 2297 | } 2298 | }, 2299 | "node-pre-gyp": { 2300 | "version": "0.10.3", 2301 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", 2302 | "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", 2303 | "dev": true, 2304 | "optional": true, 2305 | "requires": { 2306 | "detect-libc": "^1.0.2", 2307 | "mkdirp": "^0.5.1", 2308 | "needle": "^2.2.1", 2309 | "nopt": "^4.0.1", 2310 | "npm-packlist": "^1.1.6", 2311 | "npmlog": "^4.0.2", 2312 | "rc": "^1.2.7", 2313 | "rimraf": "^2.6.1", 2314 | "semver": "^5.3.0", 2315 | "tar": "^4" 2316 | } 2317 | }, 2318 | "nopt": { 2319 | "version": "4.0.1", 2320 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", 2321 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", 2322 | "dev": true, 2323 | "optional": true, 2324 | "requires": { 2325 | "abbrev": "1", 2326 | "osenv": "^0.1.4" 2327 | } 2328 | }, 2329 | "npm-bundled": { 2330 | "version": "1.0.5", 2331 | "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", 2332 | "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", 2333 | "dev": true, 2334 | "optional": true 2335 | }, 2336 | "npm-packlist": { 2337 | "version": "1.2.0", 2338 | "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz", 2339 | "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==", 2340 | "dev": true, 2341 | "optional": true, 2342 | "requires": { 2343 | "ignore-walk": "^3.0.1", 2344 | "npm-bundled": "^1.0.1" 2345 | } 2346 | }, 2347 | "npmlog": { 2348 | "version": "4.1.2", 2349 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 2350 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 2351 | "dev": true, 2352 | "optional": true, 2353 | "requires": { 2354 | "are-we-there-yet": "~1.1.2", 2355 | "console-control-strings": "~1.1.0", 2356 | "gauge": "~2.7.3", 2357 | "set-blocking": "~2.0.0" 2358 | } 2359 | }, 2360 | "number-is-nan": { 2361 | "version": "1.0.1", 2362 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2363 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 2364 | "dev": true, 2365 | "optional": true 2366 | }, 2367 | "object-assign": { 2368 | "version": "4.1.1", 2369 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2370 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2371 | "dev": true, 2372 | "optional": true 2373 | }, 2374 | "once": { 2375 | "version": "1.4.0", 2376 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2377 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2378 | "dev": true, 2379 | "optional": true, 2380 | "requires": { 2381 | "wrappy": "1" 2382 | } 2383 | }, 2384 | "os-homedir": { 2385 | "version": "1.0.2", 2386 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 2387 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 2388 | "dev": true, 2389 | "optional": true 2390 | }, 2391 | "os-tmpdir": { 2392 | "version": "1.0.2", 2393 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2394 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 2395 | "dev": true, 2396 | "optional": true 2397 | }, 2398 | "osenv": { 2399 | "version": "0.1.5", 2400 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 2401 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 2402 | "dev": true, 2403 | "optional": true, 2404 | "requires": { 2405 | "os-homedir": "^1.0.0", 2406 | "os-tmpdir": "^1.0.0" 2407 | } 2408 | }, 2409 | "path-is-absolute": { 2410 | "version": "1.0.1", 2411 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2412 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2413 | "dev": true, 2414 | "optional": true 2415 | }, 2416 | "process-nextick-args": { 2417 | "version": "2.0.0", 2418 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 2419 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 2420 | "dev": true, 2421 | "optional": true 2422 | }, 2423 | "rc": { 2424 | "version": "1.2.8", 2425 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2426 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2427 | "dev": true, 2428 | "optional": true, 2429 | "requires": { 2430 | "deep-extend": "^0.6.0", 2431 | "ini": "~1.3.0", 2432 | "minimist": "^1.2.0", 2433 | "strip-json-comments": "~2.0.1" 2434 | }, 2435 | "dependencies": { 2436 | "minimist": { 2437 | "version": "1.2.0", 2438 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 2439 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 2440 | "dev": true, 2441 | "optional": true 2442 | } 2443 | } 2444 | }, 2445 | "readable-stream": { 2446 | "version": "2.3.6", 2447 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2448 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2449 | "dev": true, 2450 | "optional": true, 2451 | "requires": { 2452 | "core-util-is": "~1.0.0", 2453 | "inherits": "~2.0.3", 2454 | "isarray": "~1.0.0", 2455 | "process-nextick-args": "~2.0.0", 2456 | "safe-buffer": "~5.1.1", 2457 | "string_decoder": "~1.1.1", 2458 | "util-deprecate": "~1.0.1" 2459 | } 2460 | }, 2461 | "rimraf": { 2462 | "version": "2.6.3", 2463 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 2464 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 2465 | "dev": true, 2466 | "optional": true, 2467 | "requires": { 2468 | "glob": "^7.1.3" 2469 | } 2470 | }, 2471 | "safe-buffer": { 2472 | "version": "5.1.2", 2473 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2474 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2475 | "dev": true, 2476 | "optional": true 2477 | }, 2478 | "safer-buffer": { 2479 | "version": "2.1.2", 2480 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2481 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2482 | "dev": true, 2483 | "optional": true 2484 | }, 2485 | "sax": { 2486 | "version": "1.2.4", 2487 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 2488 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 2489 | "dev": true, 2490 | "optional": true 2491 | }, 2492 | "semver": { 2493 | "version": "5.6.0", 2494 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 2495 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", 2496 | "dev": true, 2497 | "optional": true 2498 | }, 2499 | "set-blocking": { 2500 | "version": "2.0.0", 2501 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2502 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 2503 | "dev": true, 2504 | "optional": true 2505 | }, 2506 | "signal-exit": { 2507 | "version": "3.0.2", 2508 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2509 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 2510 | "dev": true, 2511 | "optional": true 2512 | }, 2513 | "string-width": { 2514 | "version": "1.0.2", 2515 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2516 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2517 | "dev": true, 2518 | "optional": true, 2519 | "requires": { 2520 | "code-point-at": "^1.0.0", 2521 | "is-fullwidth-code-point": "^1.0.0", 2522 | "strip-ansi": "^3.0.0" 2523 | } 2524 | }, 2525 | "string_decoder": { 2526 | "version": "1.1.1", 2527 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2528 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2529 | "dev": true, 2530 | "optional": true, 2531 | "requires": { 2532 | "safe-buffer": "~5.1.0" 2533 | } 2534 | }, 2535 | "strip-ansi": { 2536 | "version": "3.0.1", 2537 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2538 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2539 | "dev": true, 2540 | "optional": true, 2541 | "requires": { 2542 | "ansi-regex": "^2.0.0" 2543 | } 2544 | }, 2545 | "strip-json-comments": { 2546 | "version": "2.0.1", 2547 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2548 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2549 | "dev": true, 2550 | "optional": true 2551 | }, 2552 | "tar": { 2553 | "version": "4.4.8", 2554 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", 2555 | "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", 2556 | "dev": true, 2557 | "optional": true, 2558 | "requires": { 2559 | "chownr": "^1.1.1", 2560 | "fs-minipass": "^1.2.5", 2561 | "minipass": "^2.3.4", 2562 | "minizlib": "^1.1.1", 2563 | "mkdirp": "^0.5.0", 2564 | "safe-buffer": "^5.1.2", 2565 | "yallist": "^3.0.2" 2566 | } 2567 | }, 2568 | "util-deprecate": { 2569 | "version": "1.0.2", 2570 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2571 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2572 | "dev": true, 2573 | "optional": true 2574 | }, 2575 | "wide-align": { 2576 | "version": "1.1.3", 2577 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 2578 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 2579 | "dev": true, 2580 | "optional": true, 2581 | "requires": { 2582 | "string-width": "^1.0.2 || 2" 2583 | } 2584 | }, 2585 | "wrappy": { 2586 | "version": "1.0.2", 2587 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2588 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2589 | "dev": true, 2590 | "optional": true 2591 | }, 2592 | "yallist": { 2593 | "version": "3.0.3", 2594 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", 2595 | "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", 2596 | "dev": true, 2597 | "optional": true 2598 | } 2599 | } 2600 | }, 2601 | "functional-red-black-tree": { 2602 | "version": "1.0.1", 2603 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 2604 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 2605 | "dev": true 2606 | }, 2607 | "get-value": { 2608 | "version": "2.0.6", 2609 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 2610 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", 2611 | "dev": true, 2612 | "optional": true 2613 | }, 2614 | "getpass": { 2615 | "version": "0.1.7", 2616 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 2617 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 2618 | "requires": { 2619 | "assert-plus": "^1.0.0" 2620 | } 2621 | }, 2622 | "glob": { 2623 | "version": "7.1.3", 2624 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 2625 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 2626 | "dev": true, 2627 | "requires": { 2628 | "fs.realpath": "^1.0.0", 2629 | "inflight": "^1.0.4", 2630 | "inherits": "2", 2631 | "minimatch": "^3.0.4", 2632 | "once": "^1.3.0", 2633 | "path-is-absolute": "^1.0.0" 2634 | } 2635 | }, 2636 | "glob-parent": { 2637 | "version": "3.1.0", 2638 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 2639 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", 2640 | "dev": true, 2641 | "optional": true, 2642 | "requires": { 2643 | "is-glob": "^3.1.0", 2644 | "path-dirname": "^1.0.0" 2645 | }, 2646 | "dependencies": { 2647 | "is-glob": { 2648 | "version": "3.1.0", 2649 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 2650 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 2651 | "dev": true, 2652 | "optional": true, 2653 | "requires": { 2654 | "is-extglob": "^2.1.0" 2655 | } 2656 | } 2657 | } 2658 | }, 2659 | "globals": { 2660 | "version": "11.11.0", 2661 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", 2662 | "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", 2663 | "dev": true 2664 | }, 2665 | "graceful-fs": { 2666 | "version": "4.1.15", 2667 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 2668 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", 2669 | "dev": true 2670 | }, 2671 | "har-schema": { 2672 | "version": "2.0.0", 2673 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 2674 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 2675 | }, 2676 | "har-validator": { 2677 | "version": "5.0.3", 2678 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 2679 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 2680 | "requires": { 2681 | "ajv": "^5.1.0", 2682 | "har-schema": "^2.0.0" 2683 | } 2684 | }, 2685 | "has-ansi": { 2686 | "version": "2.0.0", 2687 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 2688 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 2689 | "dev": true, 2690 | "requires": { 2691 | "ansi-regex": "^2.0.0" 2692 | } 2693 | }, 2694 | "has-flag": { 2695 | "version": "3.0.0", 2696 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2697 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 2698 | "dev": true 2699 | }, 2700 | "has-value": { 2701 | "version": "1.0.0", 2702 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", 2703 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", 2704 | "dev": true, 2705 | "optional": true, 2706 | "requires": { 2707 | "get-value": "^2.0.6", 2708 | "has-values": "^1.0.0", 2709 | "isobject": "^3.0.0" 2710 | } 2711 | }, 2712 | "has-values": { 2713 | "version": "1.0.0", 2714 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", 2715 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", 2716 | "dev": true, 2717 | "optional": true, 2718 | "requires": { 2719 | "is-number": "^3.0.0", 2720 | "kind-of": "^4.0.0" 2721 | }, 2722 | "dependencies": { 2723 | "kind-of": { 2724 | "version": "4.0.0", 2725 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 2726 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 2727 | "dev": true, 2728 | "optional": true, 2729 | "requires": { 2730 | "is-buffer": "^1.1.5" 2731 | } 2732 | } 2733 | } 2734 | }, 2735 | "hawk": { 2736 | "version": "6.0.2", 2737 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 2738 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 2739 | "requires": { 2740 | "boom": "4.x.x", 2741 | "cryptiles": "3.x.x", 2742 | "hoek": "4.x.x", 2743 | "sntp": "2.x.x" 2744 | } 2745 | }, 2746 | "hoek": { 2747 | "version": "4.2.1", 2748 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", 2749 | "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" 2750 | }, 2751 | "http-signature": { 2752 | "version": "1.2.0", 2753 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 2754 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 2755 | "requires": { 2756 | "assert-plus": "^1.0.0", 2757 | "jsprim": "^1.2.2", 2758 | "sshpk": "^1.7.0" 2759 | } 2760 | }, 2761 | "iconv-lite": { 2762 | "version": "0.4.24", 2763 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 2764 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 2765 | "dev": true, 2766 | "requires": { 2767 | "safer-buffer": ">= 2.1.2 < 3" 2768 | } 2769 | }, 2770 | "ignore": { 2771 | "version": "3.3.10", 2772 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", 2773 | "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", 2774 | "dev": true 2775 | }, 2776 | "imurmurhash": { 2777 | "version": "0.1.4", 2778 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2779 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 2780 | "dev": true 2781 | }, 2782 | "inflight": { 2783 | "version": "1.0.6", 2784 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2785 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2786 | "dev": true, 2787 | "requires": { 2788 | "once": "^1.3.0", 2789 | "wrappy": "1" 2790 | } 2791 | }, 2792 | "inherits": { 2793 | "version": "2.0.3", 2794 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2795 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 2796 | "dev": true 2797 | }, 2798 | "inquirer": { 2799 | "version": "3.3.0", 2800 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", 2801 | "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", 2802 | "dev": true, 2803 | "requires": { 2804 | "ansi-escapes": "^3.0.0", 2805 | "chalk": "^2.0.0", 2806 | "cli-cursor": "^2.1.0", 2807 | "cli-width": "^2.0.0", 2808 | "external-editor": "^2.0.4", 2809 | "figures": "^2.0.0", 2810 | "lodash": "^4.3.0", 2811 | "mute-stream": "0.0.7", 2812 | "run-async": "^2.2.0", 2813 | "rx-lite": "^4.0.8", 2814 | "rx-lite-aggregates": "^4.0.8", 2815 | "string-width": "^2.1.0", 2816 | "strip-ansi": "^4.0.0", 2817 | "through": "^2.3.6" 2818 | } 2819 | }, 2820 | "invariant": { 2821 | "version": "2.2.4", 2822 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 2823 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 2824 | "dev": true, 2825 | "requires": { 2826 | "loose-envify": "^1.0.0" 2827 | } 2828 | }, 2829 | "ip": { 2830 | "version": "1.1.5", 2831 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", 2832 | "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" 2833 | }, 2834 | "is-accessor-descriptor": { 2835 | "version": "0.1.6", 2836 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 2837 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 2838 | "dev": true, 2839 | "optional": true, 2840 | "requires": { 2841 | "kind-of": "^3.0.2" 2842 | }, 2843 | "dependencies": { 2844 | "kind-of": { 2845 | "version": "3.2.2", 2846 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2847 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2848 | "dev": true, 2849 | "optional": true, 2850 | "requires": { 2851 | "is-buffer": "^1.1.5" 2852 | } 2853 | } 2854 | } 2855 | }, 2856 | "is-binary-path": { 2857 | "version": "1.0.1", 2858 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 2859 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 2860 | "dev": true, 2861 | "optional": true, 2862 | "requires": { 2863 | "binary-extensions": "^1.0.0" 2864 | } 2865 | }, 2866 | "is-buffer": { 2867 | "version": "1.1.6", 2868 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 2869 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 2870 | "dev": true, 2871 | "optional": true 2872 | }, 2873 | "is-data-descriptor": { 2874 | "version": "0.1.4", 2875 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 2876 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 2877 | "dev": true, 2878 | "optional": true, 2879 | "requires": { 2880 | "kind-of": "^3.0.2" 2881 | }, 2882 | "dependencies": { 2883 | "kind-of": { 2884 | "version": "3.2.2", 2885 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2886 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2887 | "dev": true, 2888 | "optional": true, 2889 | "requires": { 2890 | "is-buffer": "^1.1.5" 2891 | } 2892 | } 2893 | } 2894 | }, 2895 | "is-descriptor": { 2896 | "version": "0.1.6", 2897 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 2898 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 2899 | "dev": true, 2900 | "optional": true, 2901 | "requires": { 2902 | "is-accessor-descriptor": "^0.1.6", 2903 | "is-data-descriptor": "^0.1.4", 2904 | "kind-of": "^5.0.0" 2905 | }, 2906 | "dependencies": { 2907 | "kind-of": { 2908 | "version": "5.1.0", 2909 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 2910 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 2911 | "dev": true, 2912 | "optional": true 2913 | } 2914 | } 2915 | }, 2916 | "is-extendable": { 2917 | "version": "0.1.1", 2918 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 2919 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 2920 | "dev": true, 2921 | "optional": true 2922 | }, 2923 | "is-extglob": { 2924 | "version": "2.1.1", 2925 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2926 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 2927 | "dev": true, 2928 | "optional": true 2929 | }, 2930 | "is-fullwidth-code-point": { 2931 | "version": "2.0.0", 2932 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2933 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2934 | "dev": true 2935 | }, 2936 | "is-glob": { 2937 | "version": "4.0.0", 2938 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", 2939 | "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", 2940 | "dev": true, 2941 | "optional": true, 2942 | "requires": { 2943 | "is-extglob": "^2.1.1" 2944 | } 2945 | }, 2946 | "is-number": { 2947 | "version": "3.0.0", 2948 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 2949 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 2950 | "dev": true, 2951 | "optional": true, 2952 | "requires": { 2953 | "kind-of": "^3.0.2" 2954 | }, 2955 | "dependencies": { 2956 | "kind-of": { 2957 | "version": "3.2.2", 2958 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2959 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2960 | "dev": true, 2961 | "optional": true, 2962 | "requires": { 2963 | "is-buffer": "^1.1.5" 2964 | } 2965 | } 2966 | } 2967 | }, 2968 | "is-plain-obj": { 2969 | "version": "1.1.0", 2970 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 2971 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", 2972 | "dev": true 2973 | }, 2974 | "is-plain-object": { 2975 | "version": "2.0.4", 2976 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 2977 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 2978 | "dev": true, 2979 | "optional": true, 2980 | "requires": { 2981 | "isobject": "^3.0.1" 2982 | } 2983 | }, 2984 | "is-promise": { 2985 | "version": "2.1.0", 2986 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 2987 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 2988 | "dev": true 2989 | }, 2990 | "is-resolvable": { 2991 | "version": "1.1.0", 2992 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 2993 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 2994 | "dev": true 2995 | }, 2996 | "is-typedarray": { 2997 | "version": "1.0.0", 2998 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 2999 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 3000 | }, 3001 | "is-windows": { 3002 | "version": "1.0.2", 3003 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 3004 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 3005 | "dev": true 3006 | }, 3007 | "isarray": { 3008 | "version": "1.0.0", 3009 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 3010 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 3011 | "dev": true 3012 | }, 3013 | "isexe": { 3014 | "version": "2.0.0", 3015 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3016 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 3017 | "dev": true 3018 | }, 3019 | "isobject": { 3020 | "version": "3.0.1", 3021 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 3022 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 3023 | "dev": true, 3024 | "optional": true 3025 | }, 3026 | "isstream": { 3027 | "version": "0.1.2", 3028 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 3029 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 3030 | }, 3031 | "js-levenshtein": { 3032 | "version": "1.1.6", 3033 | "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", 3034 | "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", 3035 | "dev": true 3036 | }, 3037 | "js-tokens": { 3038 | "version": "4.0.0", 3039 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 3040 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 3041 | "dev": true 3042 | }, 3043 | "js-yaml": { 3044 | "version": "3.12.2", 3045 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", 3046 | "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", 3047 | "dev": true, 3048 | "requires": { 3049 | "argparse": "^1.0.7", 3050 | "esprima": "^4.0.0" 3051 | } 3052 | }, 3053 | "jsbn": { 3054 | "version": "0.1.1", 3055 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 3056 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 3057 | }, 3058 | "jsesc": { 3059 | "version": "2.5.2", 3060 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 3061 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 3062 | "dev": true 3063 | }, 3064 | "json-schema": { 3065 | "version": "0.2.3", 3066 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 3067 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 3068 | }, 3069 | "json-schema-traverse": { 3070 | "version": "0.3.1", 3071 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 3072 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 3073 | }, 3074 | "json-stable-stringify-without-jsonify": { 3075 | "version": "1.0.1", 3076 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 3077 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 3078 | "dev": true 3079 | }, 3080 | "json-stringify-safe": { 3081 | "version": "5.0.1", 3082 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 3083 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 3084 | }, 3085 | "json5": { 3086 | "version": "2.1.0", 3087 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", 3088 | "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", 3089 | "dev": true, 3090 | "requires": { 3091 | "minimist": "^1.2.0" 3092 | }, 3093 | "dependencies": { 3094 | "minimist": { 3095 | "version": "1.2.0", 3096 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 3097 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 3098 | "dev": true 3099 | } 3100 | } 3101 | }, 3102 | "jsprim": { 3103 | "version": "1.4.1", 3104 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 3105 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 3106 | "requires": { 3107 | "assert-plus": "1.0.0", 3108 | "extsprintf": "1.3.0", 3109 | "json-schema": "0.2.3", 3110 | "verror": "1.10.0" 3111 | } 3112 | }, 3113 | "kind-of": { 3114 | "version": "6.0.2", 3115 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 3116 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", 3117 | "dev": true, 3118 | "optional": true 3119 | }, 3120 | "levn": { 3121 | "version": "0.3.0", 3122 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 3123 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 3124 | "dev": true, 3125 | "requires": { 3126 | "prelude-ls": "~1.1.2", 3127 | "type-check": "~0.3.2" 3128 | } 3129 | }, 3130 | "lodash": { 3131 | "version": "4.17.11", 3132 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 3133 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" 3134 | }, 3135 | "loose-envify": { 3136 | "version": "1.4.0", 3137 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 3138 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 3139 | "dev": true, 3140 | "requires": { 3141 | "js-tokens": "^3.0.0 || ^4.0.0" 3142 | } 3143 | }, 3144 | "lru-cache": { 3145 | "version": "4.1.5", 3146 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 3147 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 3148 | "dev": true, 3149 | "requires": { 3150 | "pseudomap": "^1.0.2", 3151 | "yallist": "^2.1.2" 3152 | } 3153 | }, 3154 | "map-cache": { 3155 | "version": "0.2.2", 3156 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 3157 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", 3158 | "dev": true, 3159 | "optional": true 3160 | }, 3161 | "map-visit": { 3162 | "version": "1.0.0", 3163 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 3164 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 3165 | "dev": true, 3166 | "optional": true, 3167 | "requires": { 3168 | "object-visit": "^1.0.0" 3169 | } 3170 | }, 3171 | "micromatch": { 3172 | "version": "3.1.10", 3173 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", 3174 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", 3175 | "dev": true, 3176 | "optional": true, 3177 | "requires": { 3178 | "arr-diff": "^4.0.0", 3179 | "array-unique": "^0.3.2", 3180 | "braces": "^2.3.1", 3181 | "define-property": "^2.0.2", 3182 | "extend-shallow": "^3.0.2", 3183 | "extglob": "^2.0.4", 3184 | "fragment-cache": "^0.2.1", 3185 | "kind-of": "^6.0.2", 3186 | "nanomatch": "^1.2.9", 3187 | "object.pick": "^1.3.0", 3188 | "regex-not": "^1.0.0", 3189 | "snapdragon": "^0.8.1", 3190 | "to-regex": "^3.0.2" 3191 | } 3192 | }, 3193 | "mime-db": { 3194 | "version": "1.38.0", 3195 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", 3196 | "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" 3197 | }, 3198 | "mime-types": { 3199 | "version": "2.1.22", 3200 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", 3201 | "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", 3202 | "requires": { 3203 | "mime-db": "~1.38.0" 3204 | } 3205 | }, 3206 | "mimic-fn": { 3207 | "version": "1.2.0", 3208 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 3209 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 3210 | "dev": true 3211 | }, 3212 | "minimatch": { 3213 | "version": "3.0.4", 3214 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 3215 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 3216 | "dev": true, 3217 | "requires": { 3218 | "brace-expansion": "^1.1.7" 3219 | } 3220 | }, 3221 | "minimist": { 3222 | "version": "0.0.8", 3223 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 3224 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 3225 | "dev": true 3226 | }, 3227 | "mixin-deep": { 3228 | "version": "1.3.1", 3229 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", 3230 | "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", 3231 | "dev": true, 3232 | "optional": true, 3233 | "requires": { 3234 | "for-in": "^1.0.2", 3235 | "is-extendable": "^1.0.1" 3236 | }, 3237 | "dependencies": { 3238 | "is-extendable": { 3239 | "version": "1.0.1", 3240 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 3241 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 3242 | "dev": true, 3243 | "optional": true, 3244 | "requires": { 3245 | "is-plain-object": "^2.0.4" 3246 | } 3247 | } 3248 | } 3249 | }, 3250 | "mkdirp": { 3251 | "version": "0.5.1", 3252 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 3253 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 3254 | "dev": true, 3255 | "requires": { 3256 | "minimist": "0.0.8" 3257 | } 3258 | }, 3259 | "ms": { 3260 | "version": "2.0.0", 3261 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 3262 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 3263 | "dev": true, 3264 | "optional": true 3265 | }, 3266 | "mute-stream": { 3267 | "version": "0.0.7", 3268 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 3269 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 3270 | "dev": true 3271 | }, 3272 | "nan": { 3273 | "version": "2.13.1", 3274 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.1.tgz", 3275 | "integrity": "sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==", 3276 | "dev": true, 3277 | "optional": true 3278 | }, 3279 | "nanomatch": { 3280 | "version": "1.2.13", 3281 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", 3282 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", 3283 | "dev": true, 3284 | "optional": true, 3285 | "requires": { 3286 | "arr-diff": "^4.0.0", 3287 | "array-unique": "^0.3.2", 3288 | "define-property": "^2.0.2", 3289 | "extend-shallow": "^3.0.2", 3290 | "fragment-cache": "^0.2.1", 3291 | "is-windows": "^1.0.2", 3292 | "kind-of": "^6.0.2", 3293 | "object.pick": "^1.3.0", 3294 | "regex-not": "^1.0.0", 3295 | "snapdragon": "^0.8.1", 3296 | "to-regex": "^3.0.1" 3297 | } 3298 | }, 3299 | "natural-compare": { 3300 | "version": "1.4.0", 3301 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3302 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 3303 | "dev": true 3304 | }, 3305 | "nice-try": { 3306 | "version": "1.0.5", 3307 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 3308 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 3309 | "dev": true 3310 | }, 3311 | "node-releases": { 3312 | "version": "1.1.11", 3313 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.11.tgz", 3314 | "integrity": "sha512-8v1j5KfP+s5WOTa1spNUAOfreajQPN12JXbRR0oDE+YrJBQCXBnNqUDj27EKpPLOoSiU3tKi3xGPB+JaOdUEQQ==", 3315 | "dev": true, 3316 | "requires": { 3317 | "semver": "^5.3.0" 3318 | } 3319 | }, 3320 | "normalize-path": { 3321 | "version": "3.0.0", 3322 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 3323 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 3324 | "dev": true, 3325 | "optional": true 3326 | }, 3327 | "oauth-sign": { 3328 | "version": "0.8.2", 3329 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 3330 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 3331 | }, 3332 | "object-assign": { 3333 | "version": "4.1.1", 3334 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 3335 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 3336 | "dev": true 3337 | }, 3338 | "object-copy": { 3339 | "version": "0.1.0", 3340 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 3341 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 3342 | "dev": true, 3343 | "optional": true, 3344 | "requires": { 3345 | "copy-descriptor": "^0.1.0", 3346 | "define-property": "^0.2.5", 3347 | "kind-of": "^3.0.3" 3348 | }, 3349 | "dependencies": { 3350 | "define-property": { 3351 | "version": "0.2.5", 3352 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 3353 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 3354 | "dev": true, 3355 | "optional": true, 3356 | "requires": { 3357 | "is-descriptor": "^0.1.0" 3358 | } 3359 | }, 3360 | "kind-of": { 3361 | "version": "3.2.2", 3362 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 3363 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 3364 | "dev": true, 3365 | "optional": true, 3366 | "requires": { 3367 | "is-buffer": "^1.1.5" 3368 | } 3369 | } 3370 | } 3371 | }, 3372 | "object-hash": { 3373 | "version": "1.3.0", 3374 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", 3375 | "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==" 3376 | }, 3377 | "object-visit": { 3378 | "version": "1.0.1", 3379 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 3380 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 3381 | "dev": true, 3382 | "optional": true, 3383 | "requires": { 3384 | "isobject": "^3.0.0" 3385 | } 3386 | }, 3387 | "object.pick": { 3388 | "version": "1.3.0", 3389 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 3390 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", 3391 | "dev": true, 3392 | "optional": true, 3393 | "requires": { 3394 | "isobject": "^3.0.1" 3395 | } 3396 | }, 3397 | "once": { 3398 | "version": "1.4.0", 3399 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3400 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 3401 | "dev": true, 3402 | "requires": { 3403 | "wrappy": "1" 3404 | } 3405 | }, 3406 | "onetime": { 3407 | "version": "2.0.1", 3408 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 3409 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 3410 | "dev": true, 3411 | "requires": { 3412 | "mimic-fn": "^1.0.0" 3413 | } 3414 | }, 3415 | "optionator": { 3416 | "version": "0.8.2", 3417 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 3418 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 3419 | "dev": true, 3420 | "requires": { 3421 | "deep-is": "~0.1.3", 3422 | "fast-levenshtein": "~2.0.4", 3423 | "levn": "~0.3.0", 3424 | "prelude-ls": "~1.1.2", 3425 | "type-check": "~0.3.2", 3426 | "wordwrap": "~1.0.0" 3427 | } 3428 | }, 3429 | "os-tmpdir": { 3430 | "version": "1.0.2", 3431 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 3432 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 3433 | "dev": true 3434 | }, 3435 | "output-file-sync": { 3436 | "version": "2.0.1", 3437 | "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", 3438 | "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", 3439 | "dev": true, 3440 | "requires": { 3441 | "graceful-fs": "^4.1.11", 3442 | "is-plain-obj": "^1.1.0", 3443 | "mkdirp": "^0.5.1" 3444 | } 3445 | }, 3446 | "pascalcase": { 3447 | "version": "0.1.1", 3448 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", 3449 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", 3450 | "dev": true, 3451 | "optional": true 3452 | }, 3453 | "path-dirname": { 3454 | "version": "1.0.2", 3455 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 3456 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", 3457 | "dev": true, 3458 | "optional": true 3459 | }, 3460 | "path-is-absolute": { 3461 | "version": "1.0.1", 3462 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3463 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 3464 | "dev": true 3465 | }, 3466 | "path-is-inside": { 3467 | "version": "1.0.2", 3468 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 3469 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 3470 | "dev": true 3471 | }, 3472 | "path-key": { 3473 | "version": "2.0.1", 3474 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 3475 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 3476 | "dev": true 3477 | }, 3478 | "path-parse": { 3479 | "version": "1.0.6", 3480 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 3481 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 3482 | "dev": true 3483 | }, 3484 | "performance-now": { 3485 | "version": "2.1.0", 3486 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 3487 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 3488 | }, 3489 | "pluralize": { 3490 | "version": "7.0.0", 3491 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", 3492 | "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", 3493 | "dev": true 3494 | }, 3495 | "posix-character-classes": { 3496 | "version": "0.1.1", 3497 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", 3498 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", 3499 | "dev": true, 3500 | "optional": true 3501 | }, 3502 | "prelude-ls": { 3503 | "version": "1.1.2", 3504 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 3505 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 3506 | "dev": true 3507 | }, 3508 | "private": { 3509 | "version": "0.1.8", 3510 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 3511 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", 3512 | "dev": true 3513 | }, 3514 | "process-nextick-args": { 3515 | "version": "2.0.0", 3516 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 3517 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 3518 | "dev": true 3519 | }, 3520 | "progress": { 3521 | "version": "2.0.3", 3522 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 3523 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 3524 | "dev": true 3525 | }, 3526 | "pseudomap": { 3527 | "version": "1.0.2", 3528 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 3529 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 3530 | "dev": true 3531 | }, 3532 | "punycode": { 3533 | "version": "1.4.1", 3534 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 3535 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 3536 | }, 3537 | "qs": { 3538 | "version": "6.5.2", 3539 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 3540 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 3541 | }, 3542 | "readable-stream": { 3543 | "version": "2.3.6", 3544 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 3545 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 3546 | "dev": true, 3547 | "requires": { 3548 | "core-util-is": "~1.0.0", 3549 | "inherits": "~2.0.3", 3550 | "isarray": "~1.0.0", 3551 | "process-nextick-args": "~2.0.0", 3552 | "safe-buffer": "~5.1.1", 3553 | "string_decoder": "~1.1.1", 3554 | "util-deprecate": "~1.0.1" 3555 | } 3556 | }, 3557 | "readdirp": { 3558 | "version": "2.2.1", 3559 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", 3560 | "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", 3561 | "dev": true, 3562 | "optional": true, 3563 | "requires": { 3564 | "graceful-fs": "^4.1.11", 3565 | "micromatch": "^3.1.10", 3566 | "readable-stream": "^2.0.2" 3567 | } 3568 | }, 3569 | "regenerate": { 3570 | "version": "1.4.0", 3571 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", 3572 | "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", 3573 | "dev": true 3574 | }, 3575 | "regenerate-unicode-properties": { 3576 | "version": "8.0.2", 3577 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", 3578 | "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", 3579 | "dev": true, 3580 | "requires": { 3581 | "regenerate": "^1.4.0" 3582 | } 3583 | }, 3584 | "regenerator-runtime": { 3585 | "version": "0.12.1", 3586 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", 3587 | "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" 3588 | }, 3589 | "regenerator-transform": { 3590 | "version": "0.13.4", 3591 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", 3592 | "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", 3593 | "dev": true, 3594 | "requires": { 3595 | "private": "^0.1.6" 3596 | } 3597 | }, 3598 | "regex-not": { 3599 | "version": "1.0.2", 3600 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", 3601 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", 3602 | "dev": true, 3603 | "optional": true, 3604 | "requires": { 3605 | "extend-shallow": "^3.0.2", 3606 | "safe-regex": "^1.1.0" 3607 | } 3608 | }, 3609 | "regexp-tree": { 3610 | "version": "0.1.5", 3611 | "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.5.tgz", 3612 | "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==", 3613 | "dev": true 3614 | }, 3615 | "regexpp": { 3616 | "version": "1.1.0", 3617 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", 3618 | "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", 3619 | "dev": true 3620 | }, 3621 | "regexpu-core": { 3622 | "version": "4.5.4", 3623 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", 3624 | "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", 3625 | "dev": true, 3626 | "requires": { 3627 | "regenerate": "^1.4.0", 3628 | "regenerate-unicode-properties": "^8.0.2", 3629 | "regjsgen": "^0.5.0", 3630 | "regjsparser": "^0.6.0", 3631 | "unicode-match-property-ecmascript": "^1.0.4", 3632 | "unicode-match-property-value-ecmascript": "^1.1.0" 3633 | } 3634 | }, 3635 | "regjsgen": { 3636 | "version": "0.5.0", 3637 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", 3638 | "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", 3639 | "dev": true 3640 | }, 3641 | "regjsparser": { 3642 | "version": "0.6.0", 3643 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", 3644 | "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", 3645 | "dev": true, 3646 | "requires": { 3647 | "jsesc": "~0.5.0" 3648 | }, 3649 | "dependencies": { 3650 | "jsesc": { 3651 | "version": "0.5.0", 3652 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 3653 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 3654 | "dev": true 3655 | } 3656 | } 3657 | }, 3658 | "remove-trailing-separator": { 3659 | "version": "1.1.0", 3660 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 3661 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 3662 | "dev": true, 3663 | "optional": true 3664 | }, 3665 | "repeat-element": { 3666 | "version": "1.1.3", 3667 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", 3668 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", 3669 | "dev": true, 3670 | "optional": true 3671 | }, 3672 | "repeat-string": { 3673 | "version": "1.6.1", 3674 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 3675 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 3676 | "dev": true, 3677 | "optional": true 3678 | }, 3679 | "request": { 3680 | "version": "2.85.0", 3681 | "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", 3682 | "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", 3683 | "requires": { 3684 | "aws-sign2": "~0.7.0", 3685 | "aws4": "^1.6.0", 3686 | "caseless": "~0.12.0", 3687 | "combined-stream": "~1.0.5", 3688 | "extend": "~3.0.1", 3689 | "forever-agent": "~0.6.1", 3690 | "form-data": "~2.3.1", 3691 | "har-validator": "~5.0.3", 3692 | "hawk": "~6.0.2", 3693 | "http-signature": "~1.2.0", 3694 | "is-typedarray": "~1.0.0", 3695 | "isstream": "~0.1.2", 3696 | "json-stringify-safe": "~5.0.1", 3697 | "mime-types": "~2.1.17", 3698 | "oauth-sign": "~0.8.2", 3699 | "performance-now": "^2.1.0", 3700 | "qs": "~6.5.1", 3701 | "safe-buffer": "^5.1.1", 3702 | "stringstream": "~0.0.5", 3703 | "tough-cookie": "~2.3.3", 3704 | "tunnel-agent": "^0.6.0", 3705 | "uuid": "^3.1.0" 3706 | } 3707 | }, 3708 | "require-uncached": { 3709 | "version": "1.0.3", 3710 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 3711 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 3712 | "dev": true, 3713 | "requires": { 3714 | "caller-path": "^0.1.0", 3715 | "resolve-from": "^1.0.0" 3716 | } 3717 | }, 3718 | "resolve": { 3719 | "version": "1.10.0", 3720 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", 3721 | "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", 3722 | "dev": true, 3723 | "requires": { 3724 | "path-parse": "^1.0.6" 3725 | } 3726 | }, 3727 | "resolve-from": { 3728 | "version": "1.0.1", 3729 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 3730 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 3731 | "dev": true 3732 | }, 3733 | "resolve-url": { 3734 | "version": "0.2.1", 3735 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 3736 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", 3737 | "dev": true, 3738 | "optional": true 3739 | }, 3740 | "restore-cursor": { 3741 | "version": "2.0.0", 3742 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 3743 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 3744 | "dev": true, 3745 | "requires": { 3746 | "onetime": "^2.0.0", 3747 | "signal-exit": "^3.0.2" 3748 | } 3749 | }, 3750 | "ret": { 3751 | "version": "0.1.15", 3752 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 3753 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", 3754 | "dev": true, 3755 | "optional": true 3756 | }, 3757 | "rimraf": { 3758 | "version": "2.6.2", 3759 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 3760 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 3761 | "dev": true, 3762 | "requires": { 3763 | "glob": "^7.0.5" 3764 | } 3765 | }, 3766 | "run-async": { 3767 | "version": "2.3.0", 3768 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 3769 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 3770 | "dev": true, 3771 | "requires": { 3772 | "is-promise": "^2.1.0" 3773 | } 3774 | }, 3775 | "rx-lite": { 3776 | "version": "4.0.8", 3777 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", 3778 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", 3779 | "dev": true 3780 | }, 3781 | "rx-lite-aggregates": { 3782 | "version": "4.0.8", 3783 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", 3784 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", 3785 | "dev": true, 3786 | "requires": { 3787 | "rx-lite": "*" 3788 | } 3789 | }, 3790 | "safe-buffer": { 3791 | "version": "5.1.2", 3792 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 3793 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 3794 | }, 3795 | "safe-regex": { 3796 | "version": "1.1.0", 3797 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 3798 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", 3799 | "dev": true, 3800 | "optional": true, 3801 | "requires": { 3802 | "ret": "~0.1.10" 3803 | } 3804 | }, 3805 | "safer-buffer": { 3806 | "version": "2.1.2", 3807 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 3808 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 3809 | }, 3810 | "semver": { 3811 | "version": "5.6.0", 3812 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 3813 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", 3814 | "dev": true 3815 | }, 3816 | "set-value": { 3817 | "version": "2.0.0", 3818 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", 3819 | "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", 3820 | "dev": true, 3821 | "optional": true, 3822 | "requires": { 3823 | "extend-shallow": "^2.0.1", 3824 | "is-extendable": "^0.1.1", 3825 | "is-plain-object": "^2.0.3", 3826 | "split-string": "^3.0.1" 3827 | }, 3828 | "dependencies": { 3829 | "extend-shallow": { 3830 | "version": "2.0.1", 3831 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 3832 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 3833 | "dev": true, 3834 | "optional": true, 3835 | "requires": { 3836 | "is-extendable": "^0.1.0" 3837 | } 3838 | } 3839 | } 3840 | }, 3841 | "shebang-command": { 3842 | "version": "1.2.0", 3843 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 3844 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 3845 | "dev": true, 3846 | "requires": { 3847 | "shebang-regex": "^1.0.0" 3848 | } 3849 | }, 3850 | "shebang-regex": { 3851 | "version": "1.0.0", 3852 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 3853 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 3854 | "dev": true 3855 | }, 3856 | "signal-exit": { 3857 | "version": "3.0.2", 3858 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 3859 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 3860 | "dev": true 3861 | }, 3862 | "slash": { 3863 | "version": "2.0.0", 3864 | "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", 3865 | "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", 3866 | "dev": true 3867 | }, 3868 | "slice-ansi": { 3869 | "version": "1.0.0", 3870 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", 3871 | "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", 3872 | "dev": true, 3873 | "requires": { 3874 | "is-fullwidth-code-point": "^2.0.0" 3875 | } 3876 | }, 3877 | "snapdragon": { 3878 | "version": "0.8.2", 3879 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 3880 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", 3881 | "dev": true, 3882 | "optional": true, 3883 | "requires": { 3884 | "base": "^0.11.1", 3885 | "debug": "^2.2.0", 3886 | "define-property": "^0.2.5", 3887 | "extend-shallow": "^2.0.1", 3888 | "map-cache": "^0.2.2", 3889 | "source-map": "^0.5.6", 3890 | "source-map-resolve": "^0.5.0", 3891 | "use": "^3.1.0" 3892 | }, 3893 | "dependencies": { 3894 | "define-property": { 3895 | "version": "0.2.5", 3896 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 3897 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 3898 | "dev": true, 3899 | "optional": true, 3900 | "requires": { 3901 | "is-descriptor": "^0.1.0" 3902 | } 3903 | }, 3904 | "extend-shallow": { 3905 | "version": "2.0.1", 3906 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 3907 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 3908 | "dev": true, 3909 | "optional": true, 3910 | "requires": { 3911 | "is-extendable": "^0.1.0" 3912 | } 3913 | } 3914 | } 3915 | }, 3916 | "snapdragon-node": { 3917 | "version": "2.1.1", 3918 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", 3919 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", 3920 | "dev": true, 3921 | "optional": true, 3922 | "requires": { 3923 | "define-property": "^1.0.0", 3924 | "isobject": "^3.0.0", 3925 | "snapdragon-util": "^3.0.1" 3926 | }, 3927 | "dependencies": { 3928 | "define-property": { 3929 | "version": "1.0.0", 3930 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 3931 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 3932 | "dev": true, 3933 | "optional": true, 3934 | "requires": { 3935 | "is-descriptor": "^1.0.0" 3936 | } 3937 | }, 3938 | "is-accessor-descriptor": { 3939 | "version": "1.0.0", 3940 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 3941 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 3942 | "dev": true, 3943 | "optional": true, 3944 | "requires": { 3945 | "kind-of": "^6.0.0" 3946 | } 3947 | }, 3948 | "is-data-descriptor": { 3949 | "version": "1.0.0", 3950 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 3951 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 3952 | "dev": true, 3953 | "optional": true, 3954 | "requires": { 3955 | "kind-of": "^6.0.0" 3956 | } 3957 | }, 3958 | "is-descriptor": { 3959 | "version": "1.0.2", 3960 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 3961 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 3962 | "dev": true, 3963 | "optional": true, 3964 | "requires": { 3965 | "is-accessor-descriptor": "^1.0.0", 3966 | "is-data-descriptor": "^1.0.0", 3967 | "kind-of": "^6.0.2" 3968 | } 3969 | } 3970 | } 3971 | }, 3972 | "snapdragon-util": { 3973 | "version": "3.0.1", 3974 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", 3975 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", 3976 | "dev": true, 3977 | "optional": true, 3978 | "requires": { 3979 | "kind-of": "^3.2.0" 3980 | }, 3981 | "dependencies": { 3982 | "kind-of": { 3983 | "version": "3.2.2", 3984 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 3985 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 3986 | "dev": true, 3987 | "optional": true, 3988 | "requires": { 3989 | "is-buffer": "^1.1.5" 3990 | } 3991 | } 3992 | } 3993 | }, 3994 | "sntp": { 3995 | "version": "2.1.0", 3996 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", 3997 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", 3998 | "requires": { 3999 | "hoek": "4.x.x" 4000 | } 4001 | }, 4002 | "source-map": { 4003 | "version": "0.5.7", 4004 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 4005 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 4006 | "dev": true 4007 | }, 4008 | "source-map-resolve": { 4009 | "version": "0.5.2", 4010 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", 4011 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", 4012 | "dev": true, 4013 | "optional": true, 4014 | "requires": { 4015 | "atob": "^2.1.1", 4016 | "decode-uri-component": "^0.2.0", 4017 | "resolve-url": "^0.2.1", 4018 | "source-map-url": "^0.4.0", 4019 | "urix": "^0.1.0" 4020 | } 4021 | }, 4022 | "source-map-url": { 4023 | "version": "0.4.0", 4024 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", 4025 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", 4026 | "dev": true, 4027 | "optional": true 4028 | }, 4029 | "split-string": { 4030 | "version": "3.1.0", 4031 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 4032 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", 4033 | "dev": true, 4034 | "optional": true, 4035 | "requires": { 4036 | "extend-shallow": "^3.0.0" 4037 | } 4038 | }, 4039 | "sprintf-js": { 4040 | "version": "1.0.3", 4041 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 4042 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 4043 | "dev": true 4044 | }, 4045 | "sshpk": { 4046 | "version": "1.16.1", 4047 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 4048 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 4049 | "requires": { 4050 | "asn1": "~0.2.3", 4051 | "assert-plus": "^1.0.0", 4052 | "bcrypt-pbkdf": "^1.0.0", 4053 | "dashdash": "^1.12.0", 4054 | "ecc-jsbn": "~0.1.1", 4055 | "getpass": "^0.1.1", 4056 | "jsbn": "~0.1.0", 4057 | "safer-buffer": "^2.0.2", 4058 | "tweetnacl": "~0.14.0" 4059 | } 4060 | }, 4061 | "static-extend": { 4062 | "version": "0.1.2", 4063 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 4064 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 4065 | "dev": true, 4066 | "optional": true, 4067 | "requires": { 4068 | "define-property": "^0.2.5", 4069 | "object-copy": "^0.1.0" 4070 | }, 4071 | "dependencies": { 4072 | "define-property": { 4073 | "version": "0.2.5", 4074 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 4075 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 4076 | "dev": true, 4077 | "optional": true, 4078 | "requires": { 4079 | "is-descriptor": "^0.1.0" 4080 | } 4081 | } 4082 | } 4083 | }, 4084 | "string-width": { 4085 | "version": "2.1.1", 4086 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 4087 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 4088 | "dev": true, 4089 | "requires": { 4090 | "is-fullwidth-code-point": "^2.0.0", 4091 | "strip-ansi": "^4.0.0" 4092 | } 4093 | }, 4094 | "string_decoder": { 4095 | "version": "1.1.1", 4096 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 4097 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 4098 | "dev": true, 4099 | "requires": { 4100 | "safe-buffer": "~5.1.0" 4101 | } 4102 | }, 4103 | "stringstream": { 4104 | "version": "0.0.6", 4105 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", 4106 | "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" 4107 | }, 4108 | "strip-ansi": { 4109 | "version": "4.0.0", 4110 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 4111 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 4112 | "dev": true, 4113 | "requires": { 4114 | "ansi-regex": "^3.0.0" 4115 | }, 4116 | "dependencies": { 4117 | "ansi-regex": { 4118 | "version": "3.0.0", 4119 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 4120 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 4121 | "dev": true 4122 | } 4123 | } 4124 | }, 4125 | "strip-json-comments": { 4126 | "version": "2.0.1", 4127 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 4128 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 4129 | "dev": true 4130 | }, 4131 | "supports-color": { 4132 | "version": "5.5.0", 4133 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 4134 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 4135 | "dev": true, 4136 | "requires": { 4137 | "has-flag": "^3.0.0" 4138 | } 4139 | }, 4140 | "table": { 4141 | "version": "4.0.2", 4142 | "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", 4143 | "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", 4144 | "dev": true, 4145 | "requires": { 4146 | "ajv": "^5.2.3", 4147 | "ajv-keywords": "^2.1.0", 4148 | "chalk": "^2.1.0", 4149 | "lodash": "^4.17.4", 4150 | "slice-ansi": "1.0.0", 4151 | "string-width": "^2.1.1" 4152 | } 4153 | }, 4154 | "text-table": { 4155 | "version": "0.2.0", 4156 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 4157 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 4158 | "dev": true 4159 | }, 4160 | "through": { 4161 | "version": "2.3.8", 4162 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 4163 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 4164 | "dev": true 4165 | }, 4166 | "tmp": { 4167 | "version": "0.0.33", 4168 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 4169 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 4170 | "dev": true, 4171 | "requires": { 4172 | "os-tmpdir": "~1.0.2" 4173 | } 4174 | }, 4175 | "to-fast-properties": { 4176 | "version": "2.0.0", 4177 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 4178 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 4179 | "dev": true 4180 | }, 4181 | "to-object-path": { 4182 | "version": "0.3.0", 4183 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 4184 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 4185 | "dev": true, 4186 | "optional": true, 4187 | "requires": { 4188 | "kind-of": "^3.0.2" 4189 | }, 4190 | "dependencies": { 4191 | "kind-of": { 4192 | "version": "3.2.2", 4193 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 4194 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 4195 | "dev": true, 4196 | "optional": true, 4197 | "requires": { 4198 | "is-buffer": "^1.1.5" 4199 | } 4200 | } 4201 | } 4202 | }, 4203 | "to-regex": { 4204 | "version": "3.0.2", 4205 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", 4206 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", 4207 | "dev": true, 4208 | "optional": true, 4209 | "requires": { 4210 | "define-property": "^2.0.2", 4211 | "extend-shallow": "^3.0.2", 4212 | "regex-not": "^1.0.2", 4213 | "safe-regex": "^1.1.0" 4214 | } 4215 | }, 4216 | "to-regex-range": { 4217 | "version": "2.1.1", 4218 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", 4219 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", 4220 | "dev": true, 4221 | "optional": true, 4222 | "requires": { 4223 | "is-number": "^3.0.0", 4224 | "repeat-string": "^1.6.1" 4225 | } 4226 | }, 4227 | "tough-cookie": { 4228 | "version": "2.3.4", 4229 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 4230 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 4231 | "requires": { 4232 | "punycode": "^1.4.1" 4233 | } 4234 | }, 4235 | "trim-right": { 4236 | "version": "1.0.1", 4237 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 4238 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 4239 | "dev": true 4240 | }, 4241 | "tunnel-agent": { 4242 | "version": "0.6.0", 4243 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 4244 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 4245 | "requires": { 4246 | "safe-buffer": "^5.0.1" 4247 | } 4248 | }, 4249 | "tweetnacl": { 4250 | "version": "0.14.5", 4251 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 4252 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 4253 | }, 4254 | "type-check": { 4255 | "version": "0.3.2", 4256 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 4257 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 4258 | "dev": true, 4259 | "requires": { 4260 | "prelude-ls": "~1.1.2" 4261 | } 4262 | }, 4263 | "typedarray": { 4264 | "version": "0.0.6", 4265 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 4266 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 4267 | "dev": true 4268 | }, 4269 | "unicode-canonical-property-names-ecmascript": { 4270 | "version": "1.0.4", 4271 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 4272 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", 4273 | "dev": true 4274 | }, 4275 | "unicode-match-property-ecmascript": { 4276 | "version": "1.0.4", 4277 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", 4278 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", 4279 | "dev": true, 4280 | "requires": { 4281 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 4282 | "unicode-property-aliases-ecmascript": "^1.0.4" 4283 | } 4284 | }, 4285 | "unicode-match-property-value-ecmascript": { 4286 | "version": "1.1.0", 4287 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", 4288 | "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", 4289 | "dev": true 4290 | }, 4291 | "unicode-property-aliases-ecmascript": { 4292 | "version": "1.0.5", 4293 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", 4294 | "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", 4295 | "dev": true 4296 | }, 4297 | "union-value": { 4298 | "version": "1.0.0", 4299 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", 4300 | "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", 4301 | "dev": true, 4302 | "optional": true, 4303 | "requires": { 4304 | "arr-union": "^3.1.0", 4305 | "get-value": "^2.0.6", 4306 | "is-extendable": "^0.1.1", 4307 | "set-value": "^0.4.3" 4308 | }, 4309 | "dependencies": { 4310 | "extend-shallow": { 4311 | "version": "2.0.1", 4312 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 4313 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 4314 | "dev": true, 4315 | "optional": true, 4316 | "requires": { 4317 | "is-extendable": "^0.1.0" 4318 | } 4319 | }, 4320 | "set-value": { 4321 | "version": "0.4.3", 4322 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", 4323 | "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", 4324 | "dev": true, 4325 | "optional": true, 4326 | "requires": { 4327 | "extend-shallow": "^2.0.1", 4328 | "is-extendable": "^0.1.1", 4329 | "is-plain-object": "^2.0.1", 4330 | "to-object-path": "^0.3.0" 4331 | } 4332 | } 4333 | } 4334 | }, 4335 | "unset-value": { 4336 | "version": "1.0.0", 4337 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", 4338 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", 4339 | "dev": true, 4340 | "optional": true, 4341 | "requires": { 4342 | "has-value": "^0.3.1", 4343 | "isobject": "^3.0.0" 4344 | }, 4345 | "dependencies": { 4346 | "has-value": { 4347 | "version": "0.3.1", 4348 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", 4349 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", 4350 | "dev": true, 4351 | "optional": true, 4352 | "requires": { 4353 | "get-value": "^2.0.3", 4354 | "has-values": "^0.1.4", 4355 | "isobject": "^2.0.0" 4356 | }, 4357 | "dependencies": { 4358 | "isobject": { 4359 | "version": "2.1.0", 4360 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 4361 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 4362 | "dev": true, 4363 | "optional": true, 4364 | "requires": { 4365 | "isarray": "1.0.0" 4366 | } 4367 | } 4368 | } 4369 | }, 4370 | "has-values": { 4371 | "version": "0.1.4", 4372 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", 4373 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", 4374 | "dev": true, 4375 | "optional": true 4376 | } 4377 | } 4378 | }, 4379 | "upath": { 4380 | "version": "1.1.2", 4381 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", 4382 | "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", 4383 | "dev": true, 4384 | "optional": true 4385 | }, 4386 | "urix": { 4387 | "version": "0.1.0", 4388 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", 4389 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", 4390 | "dev": true, 4391 | "optional": true 4392 | }, 4393 | "use": { 4394 | "version": "3.1.1", 4395 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", 4396 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", 4397 | "dev": true, 4398 | "optional": true 4399 | }, 4400 | "util-deprecate": { 4401 | "version": "1.0.2", 4402 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 4403 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 4404 | "dev": true 4405 | }, 4406 | "uuid": { 4407 | "version": "3.3.2", 4408 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 4409 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" 4410 | }, 4411 | "verror": { 4412 | "version": "1.10.0", 4413 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 4414 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 4415 | "requires": { 4416 | "assert-plus": "^1.0.0", 4417 | "core-util-is": "1.0.2", 4418 | "extsprintf": "^1.2.0" 4419 | } 4420 | }, 4421 | "which": { 4422 | "version": "1.3.1", 4423 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 4424 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 4425 | "dev": true, 4426 | "requires": { 4427 | "isexe": "^2.0.0" 4428 | } 4429 | }, 4430 | "wordwrap": { 4431 | "version": "1.0.0", 4432 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 4433 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 4434 | "dev": true 4435 | }, 4436 | "wrappy": { 4437 | "version": "1.0.2", 4438 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 4439 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 4440 | "dev": true 4441 | }, 4442 | "write": { 4443 | "version": "0.2.1", 4444 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 4445 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 4446 | "dev": true, 4447 | "requires": { 4448 | "mkdirp": "^0.5.1" 4449 | } 4450 | }, 4451 | "yallist": { 4452 | "version": "2.1.2", 4453 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 4454 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 4455 | "dev": true 4456 | } 4457 | } 4458 | } 4459 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "embark-status-plugin", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "files": [ 7 | "dist", 8 | "src" 9 | ], 10 | "scripts": { 11 | "lint": "./node_modules/.bin/eslint src/", 12 | "babel": "npm run babel:node", 13 | "babel:node": "cross-env BABEL_ENV=node babel --out-dir dist src --source-maps", 14 | "build": "npm run clean && npm run babel", 15 | "clean": "rimraf dist embark-status-*.tgz package", 16 | "prepare": "npm run build", 17 | "test": "echo \"Error: no test specified\" && exit 1" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "git+https://github.com/status-im/embark-status.git" 22 | }, 23 | "author": "", 24 | "license": "MIT", 25 | "keywords": [ 26 | "ethereum", 27 | "dapps", 28 | "swarm", 29 | "blockchain", 30 | "serverless" 31 | ], 32 | "bugs": { 33 | "url": "https://github.com/status-im/embark-status/issues" 34 | }, 35 | "homepage": "https://github.com/status-im/embark-status#readme", 36 | "dependencies": { 37 | "@babel/runtime-corejs2": "7.3.1", 38 | "async": "2.6.1", 39 | "ip": "1.1.5", 40 | "object-hash": "1.3.0", 41 | "request": "2.85.0" 42 | }, 43 | "devDependencies": { 44 | "@babel/cli": "7.2.3", 45 | "@babel/core": "7.2.2", 46 | "@babel/plugin-transform-runtime": "7.4.0", 47 | "@babel/preset-env": "7.4.1", 48 | "cross-env": "5.2.0", 49 | "eslint": "4.19.1", 50 | "rimraf": "2.6.2" 51 | }, 52 | "engines": { 53 | "node": ">=8.11.3" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import StatusApi from './statusApi.js'; 2 | import { buildUrl } from './utils'; 3 | import { queue } from 'async'; 4 | const Ip = require('ip'); 5 | const path = require('path'); 6 | const hash = require('object-hash'); 7 | 8 | // Network constants 9 | const CONNECT_INTERVAL = 5000; // Duration (in ms) to wait before attempting to reconnect. 10 | const CHAIN_NAME = 'embark'; 11 | const NETWORK_NAME = 'Embark'; 12 | const DEFAULT_NETWORK_ID = 1337; 13 | const API_REQUEST_TIMEOUT = 30000; 14 | 15 | // Service check constants 16 | const SERVICE_CHECK_ON = 'on'; 17 | const SERVICE_CHECK_OFF = 'off'; 18 | 19 | // Device constants 20 | const DEVICE_PROTOCOL = 'http'; 21 | const DEVICE_PORT = 5561; 22 | 23 | // Local machine host constants 24 | const LOCAL_HOSTS = ['0.0.0.0', 'localhost', '127.0.0.1']; 25 | 26 | // App not running response codes 27 | const NOT_RUNNING_RESPONSES = ['ECONNREFUSED', 'ETIMEDOUT']; 28 | 29 | // Private backing variables 30 | let _networkSettings = null; 31 | 32 | const MACHINE_IP = Ip.address(); 33 | 34 | /** 35 | * Plugin that connects an Embark dApp to the Status app, and allows the dApp 36 | * to be run in the Status browser. 37 | */ 38 | class EmbarkStatusPlugin { 39 | constructor(embark) { 40 | this.networkId = DEFAULT_NETWORK_ID; 41 | this.embark = embark; 42 | this.events = this.embark.events; 43 | this.pluginConfig = this.embark.pluginConfig; 44 | this.deviceIp = this.pluginConfig.deviceIp; 45 | this.logger = this.embark.logger; 46 | // we want a timeout to occur before issuing the next request, so reduce the timeout specified 47 | this.statusApi = new StatusApi({ protocol: DEVICE_PROTOCOL, deviceIp: this.deviceIp, port: DEVICE_PORT, logger: this.logger, timeout: API_REQUEST_TIMEOUT }); 48 | this.webServerConfig = {}; 49 | this.blockchainConfig = {}; 50 | this.networkIdDirectory = path.join(process.env.DAPP_PATH, '.embark', 'embark-status'); 51 | this.networkIdPath = path.join(this.networkIdDirectory, 'networkId'); 52 | 53 | // gets hydrated webserver config from embark 54 | this.events.on('config:load:webserver', webServerConfig => { 55 | this.webServerConfig = webServerConfig; 56 | _networkSettings = null; // reset backing var to recompute hash 57 | this.events.request('config:cors:add', buildUrl(DEVICE_PROTOCOL, MACHINE_IP, this.webServerConfig.port)); 58 | }); 59 | 60 | // gets hydrated blockchain config from embark 61 | this.events.on('config:load:blockchain', blockchainConfig => { 62 | this.blockchainConfig = blockchainConfig; 63 | _networkSettings = null; // reset backing var to recompute hash 64 | }); 65 | 66 | // adds cors to blockchain and storage clients 67 | this.events.request('config:cors:add', buildUrl(DEVICE_PROTOCOL, this.deviceIp, false)); 68 | 69 | // register service check 70 | this._registerServiceCheck(); 71 | 72 | this._startContinuousPing(); 73 | 74 | // kick off network connection, and open dapp after connection 75 | this.connectStatusToEmbark(); 76 | 77 | } 78 | 79 | /** 80 | * Returns an object containing all settings needed for a Status network. 81 | * The returned object includes a hash that can be used to uniquely identify the 82 | * Status network ID. 83 | * 84 | * @returns {Object} Settings for a Status network: 85 | * - {...Object} pluginConfg All properties passed in from the plugin config 86 | * - {String} networkName Display name of the network to add to Status 87 | * - {String} nodeUrl URL of the blockchain node to connect to 88 | * - {String} chainName Name of the chain to connect to 89 | * - {Number} networkId ID of the chain to connect to 90 | * - {String} hash Computed hash of all settings above 91 | */ 92 | get networkSettings() { 93 | if (!_networkSettings) { 94 | const nodePort = this.blockchainConfig.proxy ? this.blockchainConfig.rpcPort + 10 : this.blockchainConfig.rpcPort; 95 | let blockchainHost = this.blockchainConfig.rpcHost; 96 | if (LOCAL_HOSTS.some(host => host === blockchainHost)) { 97 | blockchainHost = MACHINE_IP; 98 | } 99 | const nodeUrl = buildUrl('http', blockchainHost, nodePort); 100 | const networkName = `${NETWORK_NAME} (${this.pluginConfig.name})`; 101 | 102 | const settings = Object.assign(this.pluginConfig, { networkName, nodeUrl, chainName: CHAIN_NAME, networkId: this.networkId }); 103 | const settingsHash = hash(settings); 104 | _networkSettings = Object.assign(settings, { hash: settingsHash }); 105 | } 106 | return _networkSettings; 107 | } 108 | 109 | static _isNotRunningError(code) { 110 | return NOT_RUNNING_RESPONSES.some(responseCode => responseCode === code); 111 | } 112 | 113 | /** 114 | * Continuously attempts to connect to the Status app by instructing 115 | * the Status app to connect to this dApp's network (node) until a 116 | * successful connection is made. If the network doesn't exist, it is 117 | * added. Once a connection is made, the Status app is instructed to 118 | * open this dApp in it's dApp browser. 119 | * 120 | * @returns {void} 121 | */ 122 | connectStatusToEmbark() { 123 | // keep trying to connect to the status app if previous connections were unsuccessful 124 | this.events.once('blockchain:ready', (_isReady) => { 125 | this.events.request('blockchain:networkId', networkId => { 126 | this.networkId = networkId; 127 | const connectIntervalId = setInterval(() => { 128 | if (this.blockchainConfig === {} || this.webServerConfig === {}) return; // embark hasn't loaded configs yet 129 | this._connectStatus((err, result) => { 130 | if (err) return this.logger.error(err); 131 | 132 | // now that we're connected, stop trying to re-connect 133 | clearInterval(connectIntervalId); 134 | 135 | // attempt to open the dApp once 136 | // status will restart once the network is switched, wait for reconnect 137 | if (result && result.alreadyConnected !== true) { 138 | return this.events.once('embark-status:connect', () => { 139 | this.openDapp(err => { 140 | if (err) this.logger.error(err); 141 | }); 142 | }); 143 | } 144 | this.openDapp(err => { 145 | if (err) this.logger.error(err); 146 | }); 147 | }); 148 | }, CONNECT_INTERVAL); 149 | }); 150 | }); 151 | } 152 | 153 | /** 154 | * Opens the Embark dApp in the Status dApp browser. 155 | * 156 | * @param {Function} cb Callback called after the open dApp command is sent 157 | * to the Status app, called with parameters: 158 | * - {String} err Error that occurred opening the dApp in the Status 159 | * browser. 160 | * - {Object} result Result returned from the Status app on successful 161 | * opening of the dApp. 162 | * 163 | * @returns {void} 164 | */ 165 | openDapp(cb) { 166 | let dappHost = this.webServerConfig.host; 167 | if (LOCAL_HOSTS.some(host => host === dappHost)) { 168 | dappHost = MACHINE_IP; 169 | } 170 | const dappUrl = this.pluginConfig.dappUrl || buildUrl('http', dappHost, this.webServerConfig.port) + '/'; 171 | 172 | this.logger.info(`Opening ${this.pluginConfig.name} (${dappUrl}) in the Status browser...`); 173 | this.statusApi.openDapp(dappUrl, (err, result) => { 174 | if (err) { 175 | if (EmbarkStatusPlugin._isNotRunningError(err.code)) { 176 | return cb(`Failed to open ${this.pluginConfig.name} in the Status app. Is the Status app open?`); 177 | } 178 | return cb(`Error opening ${this.pluginConfig.name} in the Status app: ${err.message}.`); 179 | } 180 | this.logger.info(`${this.pluginConfig.name} opened successfully.`); 181 | cb(null, result); 182 | }); 183 | } 184 | 185 | _startContinuousPing() { 186 | setInterval(() => { 187 | this.statusApi.ping((err, isOnline) => { 188 | if (!err && isOnline) { 189 | this.events.emit('embark-status:connect'); 190 | } 191 | }); 192 | }, 2000); 193 | } 194 | 195 | /** 196 | * Connects the Status app to an Embark network (node running in this dApp). 197 | * If the network doesn't exist, it is added. Network (node) settings are 198 | * taken from the dApp's blockchain config rpcHost and rpcPort. CORS for the 199 | * device IP are setup automatically. 200 | * 201 | * @param {Function} cb Callback called after the connect to network command 202 | * is sent to the Status app, called with parameters: 203 | * - {String} err Error that occurred connecting the Status app to the 204 | * network. 205 | * - {Object} result Result returned from the Status app on successful 206 | * connection to the Embark network. 207 | * 208 | * @returns {void} 209 | */ 210 | _connectStatus(cb) { 211 | this.statusApi.ping((err, isOnline) => { 212 | if (err || !isOnline) return cb('Status app is not responding. Is it open? Are you logged in?'); 213 | 214 | this.events.emit('embark-status:connect'); 215 | 216 | this.statusApi.networks((err, networkList) => { 217 | if (err || !networkList) return cb(`Error getting list of networks from the Status app: ${err}`); 218 | const networks = networkList.networks; 219 | const { nodeUrl, networkId, networkName } = this.networkSettings; 220 | const statusNetworkId = Object.keys(networks).find(networkKey => { 221 | const network = networks[networkKey]; 222 | return network.config && 223 | network.config.UpstreamConfig && 224 | network.config.UpstreamConfig.URL === nodeUrl && 225 | network.config.NetworkId === networkId && 226 | network.name === networkName; 227 | }); 228 | if (statusNetworkId) { 229 | this.statusNetworkId = statusNetworkId; 230 | if (networks[statusNetworkId]['active?'] === true) return cb(null, { alreadyConnected: true }); // already connected to this network, do nothing 231 | return this._connectToStatusNetwork(this.statusNetworkId, cb); // connect to the already added network 232 | } 233 | // otherwise, add a new network and connect to that network 234 | this._addAndConnectStatusNetwork(cb); 235 | }); 236 | 237 | }); 238 | 239 | 240 | } 241 | 242 | /** 243 | * Connects the Status app to a network specified by the `statusNetworkId` 244 | * parameter. 245 | * 246 | * @param {String} statusNetworkId ID that identifies the network in the Status 247 | * app to connect to. 248 | * @param {Function} cb Callback called after the connect to network command 249 | * is sent to the Status app, called with parameters: 250 | * - {String} err Error that occurred connecting the Status app to the 251 | * network. 252 | * - {Object} result Result returned from the Status app on successful 253 | * connection to the Embark network. 254 | * 255 | * @returns {void} 256 | */ 257 | _connectToStatusNetwork(statusNetworkId, cb) { 258 | const { nodeUrl } = this.networkSettings; 259 | this.logger.info(`Connecting Status app to network ${nodeUrl}...`); 260 | this.statusApi.connect(statusNetworkId, (err, result) => { 261 | if (err) { 262 | if (EmbarkStatusPlugin._isNotRunningError(err.code)) { 263 | return cb('Failed to connect to the Status network. Is the Status app open? Are you logged in?'); 264 | } 265 | return cb(`Error while connecting to Status network ${nodeUrl} in the Status app: ${err.message}.`); 266 | } 267 | this.logger.info(`Successfully connected to network ${nodeUrl}.`); 268 | cb(null, result); 269 | }); 270 | } 271 | 272 | /** 273 | * Adds a network to the Status app, then attempts to connect to it. Upon a 274 | * successful addition of the network, the Status app will return a network ID, 275 | * which is stored in the dApp's temporary filesystem to prevent future additions 276 | * of an already exist network in the Status app. 277 | * 278 | * @param {Function} cb Callback called after the connect to network command 279 | * is sent to the Status app, called with parameters: 280 | * - {String} err Error that occurred adding and connecting a network. 281 | * - {Object} result Result returned from the Status app on successful 282 | * connection to the Embark network. 283 | * 284 | * @returns {void} 285 | */ 286 | _addAndConnectStatusNetwork(cb) { 287 | // defined here because the configs have not been hydrated from the dapp when the plugin is instantiated 288 | const { nodeUrl, networkName, chainName, networkId } = this.networkSettings; 289 | 290 | this.logger.info(`Adding network '${networkName}' to Status...`); 291 | return this.statusApi.addNetwork(networkName, nodeUrl, chainName, this.networkId, (err, result) => { 292 | if (err) { 293 | if (EmbarkStatusPlugin._isNotRunningError(err.code)) { 294 | return cb('Failed to add a network to the Status app. Is the Status app open? Are you logged in?'); 295 | } 296 | return cb(`Error while adding network ${nodeUrl} (name: ${chainName}, networkId: ${networkId}) to the Status App: ${err.message}.`); 297 | } 298 | if (!err && !result) { 299 | return cb(`Empty response from the Status app. Is it possible your phone is in standby or the Status app is in the background?`); 300 | } 301 | const statusNetworkId = result['network-id']; 302 | if (!statusNetworkId) { 303 | return cb(`Status app returned a bad response (no 'network-id' present), could not connect.`); 304 | } 305 | this.logger.info(`Network '${networkName}' added successfully.`); 306 | this.statusNetworkId = statusNetworkId; 307 | this._connectToStatusNetwork(statusNetworkId, cb); 308 | }); 309 | } 310 | 311 | /** 312 | * Registers this plugin for Embark service checks and sets up log messages for 313 | * connection and disconnection events. The service check pings the Status app. 314 | * 315 | * @returns {void} 316 | */ 317 | _registerServiceCheck() { 318 | const serviceCheckQueue = queue((task, callback) => { 319 | this.statusApi.ping((err, isOnline) => { 320 | if (!err && isOnline) this.events.emit('embark-status:connect'); 321 | const stateName = (isOnline ? SERVICE_CHECK_ON : SERVICE_CHECK_OFF); 322 | task.cb({ name: `Status.im (${this.deviceIp})`, status: stateName }); 323 | }); 324 | callback(); 325 | }, 1); 326 | this.embark.registerServiceCheck('Status', (cb) => { 327 | serviceCheckQueue.push({ cb }); 328 | 329 | }); 330 | 331 | this.embark.events.on('check:backOnline:Status', () => { 332 | this.logger.info("------------------"); 333 | this.logger.info("Connected to Status.im mobile app!"); 334 | this.logger.info("------------------"); 335 | }); 336 | 337 | this.embark.events.on('check:wentOffline:Status', () => { 338 | this.logger.error("------------------"); 339 | this.logger.error("Couldn't connect or lost connection to Status.im mobile app..."); 340 | this.logger.error("------------------"); 341 | }); 342 | } 343 | } 344 | 345 | export default EmbarkStatusPlugin; 346 | -------------------------------------------------------------------------------- /src/statusApi.js: -------------------------------------------------------------------------------- 1 | import { buildUrl } from './utils'; 2 | const request = require('request'); 3 | const queue = require('async/queue'); 4 | 5 | /** 6 | * Commands that can be run on the Status app. 7 | */ 8 | class StatusApi { 9 | constructor({ protocol, deviceIp, port, logger, timeout }) { 10 | this.url = buildUrl(protocol, deviceIp, port); 11 | this.logger = logger; 12 | this.timeout = timeout; 13 | this.queue = queue(function (task, cb) { 14 | request(task.url, task.options, (err, resp, body) => { 15 | // TODO: remove this setTimeout - it is a workaround for the 16 | // Status HTTP server not responding to simulataneous requests 17 | setTimeout(() => { cb(err, resp, body); }, 250); 18 | }); 19 | }, 1); 20 | } 21 | 22 | /** 23 | * Sends a request with a JSON body to the Status app. 24 | * 25 | * @param {String} endpoint Specifies the command sent to the Staus app. 26 | * @param {Object} body JSON data sent with the request. 27 | * @param {String} method HTTP method for the reqeust. Valid options are "POST" and "DELETE". 28 | * @param {Function} cb Callback called upon response, called with parameters: 29 | * - {Error} Error that occurred during request. 30 | * - {Object} JSON response from the Status app. 31 | * 32 | * @returns {void} 33 | */ 34 | _request(endpoint, body, method, cb) { 35 | this.queue.push({ 36 | url: this.url + endpoint, 37 | options: { 38 | method: method, 39 | timeout: this.timeout, 40 | json: true, 41 | body: body 42 | } 43 | }, (error, _response, respBody) => { 44 | this.logger.trace(`REQUEST: ${endpoint} ${JSON.stringify(body)}\nRESPONSE: ${JSON.stringify(respBody)}\nERROR: ${error}`); 45 | cb(error, respBody); 46 | }); 47 | } 48 | 49 | /** 50 | * Pings the Status app. 51 | * Expected response: {"message": "Pong!"} 52 | * Equivalent to: POST http://:5561/ping 53 | * 54 | * @param {Function} cb Callback called upon response, called with parameters: 55 | * - {Error} Error that occurred during request. 56 | * - {Boolean} True if ping was successful and returned {"message": "Pong!"}. 57 | * 58 | * @returns {void} 59 | */ 60 | ping(cb) { 61 | this._request('/ping', {}, "POST", (err, body) => { 62 | if (err) return cb(err); 63 | if (!body || body === '') return cb('No ping response'); 64 | cb(err, true); 65 | }); 66 | } 67 | 68 | /** 69 | * Opens URL in the Status browser. 70 | * Expected response: { "message": "URL has been opened." } 71 | * Equivalent to: POST http://:5561/dapp/open url= 72 | * 73 | * @param {String} url URL to open in the Status browser. 74 | * @param {Function} cb Callback called upon response, called with parameters: 75 | * - {Error} Error that occurred during request. 76 | * - {Object} JSON response from the Status app. 77 | * 78 | * @returns {void} 79 | */ 80 | openDapp(url, cb) { 81 | this._request('/dapp/open', { url: url }, "POST", cb); 82 | } 83 | 84 | /** 85 | * Adds a network to the Status app. 86 | * Example response (success): { "message": "Network has been added.", "network-id": "1535660846036b3c3241022ec5046af53cdb769dcc216" } 87 | * Example response (fail): { "message": "Please, check the validity of network information." } 88 | * Equivalent to: POST http://:5561/network name=AnyNetworkName url=http://localhost:3000 chain=mainnet network-id=2 89 | * 90 | * @param {String} name Display name of the network. 91 | * @param {String} nodeUrl URL of the node to connect to. 92 | * @param {String} chainName Name of the chain. 93 | * @param {Number} networkId ID of the network. 94 | * @param {Function} cb Callback called upon response, called with parameters: 95 | * - {Error} Error that occurred during request. 96 | * - {Object} JSON response from the Status app. 97 | * 98 | * @returns {void} 99 | */ 100 | addNetwork(name, nodeUrl, chainName, networkId, cb) { 101 | this._request('/network', { name: name, url: nodeUrl, chain: chainName, "network-id": networkId }, "POST", cb); 102 | } 103 | 104 | /** 105 | * Connects the Status app to an existing network. 106 | * Example response (success): { "message": "Network has been connected.", "network-id": "1535660846036b3c3241022ec5046af53cdb769dcc216" } 107 | * Example response (fail): { "message": "The network id you provided doesn't exist." } 108 | * Equivalent to: POST http://:5561/network/connect id=1535660846036b3c3241022ec5046af53cdb769dcc216 109 | * 110 | * @param {String} id Status network ID to connect to. 111 | * @param {Function} cb Callback called upon response, called with parameters: 112 | * - {Error} Error that occurred during request. 113 | * - {Object} JSON response from the Status app. 114 | * 115 | * @returns {void} 116 | */ 117 | connect(id, cb) { 118 | this._request('/network/connect', { id: id }, "POST", cb); 119 | } 120 | 121 | /** 122 | * Removes a network from the Status app. 123 | * Example response (success): { "message": "Network has been deleted.", "network-id": "1535660846036b3c3241022ec5046af53cdb769dcc216" } 124 | * Example response (fail): { "message": "Cannot delete the provided network." } 125 | * Equivalent to: DELETE http://:5561/network id=1535660846036b3c3241022ec5046af53cdb769dcc216 126 | * 127 | * @param {String} id Status network ID to remove. 128 | * @param {Function} cb Callback called upon response, called with parameters: 129 | * - {Error} Error that occurred during request. 130 | * - {Object} JSON response from the Status app. 131 | * 132 | * @returns {void} 133 | */ 134 | removeNetwork(id, cb) { 135 | this._request('/network', { id: id }, "DELETE", cb); 136 | } 137 | 138 | /** 139 | * Lists all networks in the Status app. 140 | * Example response (success): { "message": "Network has been deleted.", "network-id": "1535660846036b3c3241022ec5046af53cdb769dcc216" } 141 | * Example response (fail): { "message": "Cannot delete the provided network." } 142 | * Equivalent to: GET http://:5561/networks 143 | * 144 | * @param {Function} cb Callback called upon response, called with parameters: 145 | * - {Error} Error that occurred during request. 146 | * - {Object} JSON response from the Status app containing an Object with networks. 147 | * 148 | * @returns {void} 149 | */ 150 | networks(cb) { 151 | this._request('/networks', {}, "GET", cb); 152 | } 153 | } 154 | 155 | export default StatusApi; 156 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Builds a URL 3 | * 4 | * @param {string} protocol 5 | * The URL protocol, defaults to http. 6 | * @param {string} host 7 | * The URL host, required. 8 | * @param {string} port 9 | * The URL port, default to empty string. 10 | * @param {any} [type] 11 | * Type of connection - used when protocol is false or not specified. Valid options 12 | * are 'ws' and 'http'. 13 | * @returns {string} the constructued URL, with defaults 14 | */ 15 | export function buildUrl(protocol, host, port, type) { 16 | if (!host) throw new Error('utils.buildUrl: parameter \'host\' is required'); 17 | if (port) port = ':' + port; 18 | else port = ''; 19 | if (!protocol) { 20 | protocol = type === 'ws' ? 'ws' : 'http'; 21 | } 22 | return `${protocol}://${host}${port}`; 23 | } 24 | --------------------------------------------------------------------------------