├── .gitignore ├── .travis.yml ├── LICENSE ├── bin.js ├── collaborators.md ├── index.js ├── multiple.png ├── package-lock.json ├── package.json ├── readme.md ├── test ├── cli.js ├── resume.html ├── resume.js └── test.js └── usage.txt /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - 6 5 | - 4 6 | 7 | cache: 8 | directories: 9 | - node_modules 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2019 Max Ogden 2 | 3 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 4 | 5 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 6 | 7 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 8 | 9 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 10 | 11 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 12 | -------------------------------------------------------------------------------- /bin.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var fs = require('fs') 4 | var path = require('path') 5 | var nugget = require('./') 6 | var args = require('minimist')(process.argv.slice(2)) 7 | 8 | var urls = args._ 9 | if (urls.length === 0) { 10 | console.log(fs.readFileSync(path.join(__dirname, 'usage.txt')).toString()) 11 | process.exit(1) 12 | } 13 | 14 | var opts = { 15 | target: args.o || args.O || args.out, 16 | dir: args.d || args.dir, 17 | resume: args.c || args.continue, 18 | force: args.f || args.force, 19 | sockets: args.s || args.sockets, 20 | quiet: args.q || args.quiet, 21 | frequency: args.frequency ? +args.frequency : null, 22 | proxy: args.proxy ? args.proxy : null, 23 | tmpfile: args.t || args.tmpfile, 24 | strictSSL: args['strict-ssl'] 25 | } 26 | 27 | nugget(urls, opts, function (err) { 28 | if (err) { 29 | console.error('Error:', err) 30 | process.exit(1) 31 | } 32 | process.exit(0) 33 | }) 34 | -------------------------------------------------------------------------------- /collaborators.md: -------------------------------------------------------------------------------- 1 | ## Collaborators 2 | 3 | nugget is only possible due to the excellent work of the following collaborators: 4 | 5 | 6 | 7 | 8 | 9 |
maxogdenGitHub/maxogden
grncdrGitHub/grncdr
mafintoshGitHub/mafintosh
jlordGitHub/jlord
10 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var request = require('request') 2 | var fs = require('fs') 3 | var path = require('path') 4 | var log = require('single-line-log').stdout 5 | var progress = require('progress-stream') 6 | var prettyBytes = require('pretty-bytes') 7 | var throttle = require('throttleit') 8 | var EventEmitter = require('events').EventEmitter 9 | var debug = require('debug')('nugget') 10 | 11 | function noop () {} 12 | 13 | module.exports = function (urls, opts, cb) { 14 | if (!Array.isArray(urls)) urls = [urls] 15 | if (urls.length === 1) opts.singleTarget = true 16 | 17 | var defaultProps = {} 18 | 19 | if (opts.sockets) { 20 | var sockets = +opts.sockets 21 | defaultProps.pool = {maxSockets: sockets} 22 | } 23 | 24 | if (opts.proxy) { 25 | defaultProps.proxy = opts.proxy 26 | } 27 | 28 | if (opts.strictSSL !== null) { 29 | defaultProps.strictSSL = opts.strictSSL 30 | } 31 | 32 | if (Object.keys(defaultProps).length > 0) { 33 | request = request.defaults(defaultProps) 34 | } 35 | 36 | var downloads = [] 37 | var errors = [] 38 | var pending = 0 39 | var truncated = urls.length * 2 >= (process.stdout.rows - 15) 40 | 41 | urls.forEach(function (url) { 42 | debug('start dl', url) 43 | pending++ 44 | var dl = startDownload(url, opts, function done (err) { 45 | debug('done dl', url, pending) 46 | if (err) { 47 | debug('error dl', url, err) 48 | errors.push(err) 49 | dl.error = err.message 50 | } 51 | if (truncated) { 52 | var i = downloads.indexOf(dl) 53 | downloads.splice(i, 1) 54 | downloads.push(dl) 55 | } 56 | if (--pending === 0) { 57 | render() 58 | cb(errors.length ? errors : undefined) 59 | } 60 | }) 61 | 62 | downloads.push(dl) 63 | 64 | dl.on('start', function (progressStream) { 65 | throttledRender() 66 | }) 67 | 68 | dl.on('progress', function (data) { 69 | debug('progress', url, data.percentage) 70 | 71 | dl.speed = data.speed 72 | if (dl.percentage === 100) render() 73 | else throttledRender() 74 | }) 75 | }) 76 | 77 | var _log = opts.quiet ? noop : log 78 | render() 79 | var throttledRender = throttle(render, opts.frequency || 250) 80 | 81 | if (opts.singleTarget) return downloads[0] 82 | else return downloads 83 | 84 | function render () { 85 | var height = process.stdout.rows 86 | var rendered = 0 87 | var output = '' 88 | var totalSpeed = 0 89 | downloads.forEach(function (dl) { 90 | if (2 * rendered >= height - 15) return 91 | rendered++ 92 | if (dl.error) { 93 | output += 'Downloading ' + path.basename(dl.target) + '\n' 94 | output += 'Error: ' + dl.error + '\n' 95 | return 96 | } 97 | var pct = dl.percentage 98 | var speed = dl.speed || 0 99 | var total = dl.fileSize 100 | totalSpeed += speed 101 | var bar = Array(Math.floor(45 * pct / 100)).join('=') + '>' 102 | while (bar.length < 45) bar += ' ' 103 | output += 'Downloading ' + path.basename(dl.target) + '\n' + 104 | '[' + bar + '] ' + pct.toFixed(1) + '%' 105 | if (total) output += ' of ' + prettyBytes(total) 106 | output += ' (' + prettyBytes(speed) + '/s)\n' 107 | }) 108 | if (rendered < downloads.length) output += '\n... and ' + (downloads.length - rendered) + ' more\n' 109 | if (downloads.length > 1) output += '\nCombined Speed: ' + prettyBytes(totalSpeed) + '/s\n' 110 | _log(output) 111 | } 112 | 113 | function startDownload (url, opts, cb) { 114 | var targetName = path.basename(url).split('?')[0] 115 | if (opts.singleTarget && opts.target) targetName = opts.target 116 | var target = path.resolve(opts.dir || process.cwd(), targetName) 117 | var origTarget = target 118 | if (opts.tmpfile) { 119 | target = target + '.tmp' 120 | } 121 | if (opts.resume) { 122 | resume(url, opts, cb) 123 | } else { 124 | download(url, opts, cb) 125 | } 126 | 127 | var progressEmitter = new EventEmitter() 128 | progressEmitter.target = target 129 | progressEmitter.speed = 0 130 | progressEmitter.percentage = 0 131 | 132 | function onprogress (p) { 133 | var pct = p.percentage 134 | progressEmitter.progress = p 135 | progressEmitter.percentage = pct 136 | progressEmitter.emit('progress', p) 137 | } 138 | 139 | return progressEmitter 140 | 141 | function resume (url, opts, cb) { 142 | var onStat = function (err, stats) { 143 | if (err && err.code === 'ENOENT') { 144 | return download(url, opts, cb) 145 | } 146 | if (err) { 147 | return cb(err) 148 | } 149 | var offset = stats.size 150 | var req = request.get(url) 151 | 152 | req.on('error', cb) 153 | req.on('response', function (resp) { 154 | resp.destroy() 155 | 156 | var length = parseInt(resp.headers['content-length'], 10) 157 | 158 | // file is already downloaded. 159 | if (length === offset) { 160 | onprogress({percentage: 100}) 161 | return cb() 162 | } 163 | 164 | if (!isNaN(length) && length > offset && /bytes/.test(resp.headers['accept-ranges'])) { 165 | opts.range = [offset, length] 166 | } 167 | 168 | download(url, opts, cb) 169 | }) 170 | } 171 | if (opts.tmpfile) { 172 | fs.stat(origTarget, function (err, origStats) { 173 | if (err && err.code === 'ENOENT') { 174 | fs.stat(target, onStat) 175 | } else { 176 | // file is already downloaded 177 | onprogress({percentage: 100}) 178 | cb() 179 | } 180 | }) 181 | } else { 182 | fs.stat(target, onStat) 183 | } 184 | 185 | } 186 | 187 | function download (url, opts, cb) { 188 | var headers = opts.headers || {} 189 | if (opts.range) { 190 | headers.Range = 'bytes=' + opts.range[0] + '-' + opts.range[1] 191 | } 192 | var read = request(url, { headers: headers }) 193 | 194 | read.on('error', cb) 195 | read.on('response', function (resp) { 196 | debug('response', url, resp.statusCode) 197 | if (resp.statusCode > 299 && !opts.force) return cb(new Error('GET ' + url + ' returned ' + resp.statusCode)) 198 | var write = fs.createWriteStream(target, {flags: opts.resume ? 'a' : 'w'}) 199 | write.on('error', cb) 200 | write.on('finish', async () => { 201 | if (opts.tmpfile) { 202 | fs.rename(target, origTarget, cb) 203 | } else { 204 | process.nextTick(cb) 205 | } 206 | }) 207 | 208 | var fullLen 209 | var contentLen = Number(resp.headers['content-length']) 210 | var range = resp.headers['content-range'] 211 | if (range) { 212 | fullLen = Number(range.split('/')[1]) 213 | } else { 214 | fullLen = contentLen 215 | } 216 | 217 | progressEmitter.fileSize = fullLen 218 | if (range) { 219 | var downloaded = fullLen - contentLen 220 | } 221 | var progressStream = progress({ length: fullLen, transferred: downloaded }, onprogress) 222 | progressEmitter.emit('start', progressStream) 223 | 224 | resp 225 | .pipe(progressStream) 226 | .pipe(write) 227 | }) 228 | } 229 | } 230 | } 231 | -------------------------------------------------------------------------------- /multiple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/max-mapper/nugget/0211f66754012bd13f8f6ab64290c46a75f5f5a7/multiple.png -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nugget", 3 | "version": "2.2.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "acorn": { 8 | "version": "5.7.4", 9 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", 10 | "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", 11 | "dev": true 12 | }, 13 | "acorn-jsx": { 14 | "version": "3.0.1", 15 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 16 | "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", 17 | "dev": true, 18 | "requires": { 19 | "acorn": "^3.0.4" 20 | }, 21 | "dependencies": { 22 | "acorn": { 23 | "version": "3.3.0", 24 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 25 | "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", 26 | "dev": true 27 | } 28 | } 29 | }, 30 | "ajv": { 31 | "version": "6.12.6", 32 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 33 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 34 | "requires": { 35 | "fast-deep-equal": "^3.1.1", 36 | "fast-json-stable-stringify": "^2.0.0", 37 | "json-schema-traverse": "^0.4.1", 38 | "uri-js": "^4.2.2" 39 | } 40 | }, 41 | "ajv-keywords": { 42 | "version": "1.5.1", 43 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", 44 | "integrity": "sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA==", 45 | "dev": true 46 | }, 47 | "ansi-escapes": { 48 | "version": "1.4.0", 49 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", 50 | "integrity": "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==", 51 | "dev": true 52 | }, 53 | "ansi-regex": { 54 | "version": "2.1.1", 55 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 56 | "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" 57 | }, 58 | "ansi-styles": { 59 | "version": "2.2.1", 60 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 61 | "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", 62 | "dev": true 63 | }, 64 | "argparse": { 65 | "version": "1.0.10", 66 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 67 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 68 | "dev": true, 69 | "requires": { 70 | "sprintf-js": "~1.0.2" 71 | } 72 | }, 73 | "asn1": { 74 | "version": "0.2.6", 75 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", 76 | "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", 77 | "requires": { 78 | "safer-buffer": "~2.1.0" 79 | } 80 | }, 81 | "assert-plus": { 82 | "version": "1.0.0", 83 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 84 | "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" 85 | }, 86 | "asynckit": { 87 | "version": "0.4.0", 88 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 89 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 90 | }, 91 | "aws-sign2": { 92 | "version": "0.7.0", 93 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 94 | "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" 95 | }, 96 | "aws4": { 97 | "version": "1.11.0", 98 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 99 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 100 | }, 101 | "balanced-match": { 102 | "version": "1.0.2", 103 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 104 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 105 | "dev": true 106 | }, 107 | "bcrypt-pbkdf": { 108 | "version": "1.0.2", 109 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 110 | "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", 111 | "requires": { 112 | "tweetnacl": "^0.14.3" 113 | } 114 | }, 115 | "brace-expansion": { 116 | "version": "1.1.11", 117 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 118 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 119 | "dev": true, 120 | "requires": { 121 | "balanced-match": "^1.0.0", 122 | "concat-map": "0.0.1" 123 | } 124 | }, 125 | "buffer-from": { 126 | "version": "1.1.2", 127 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 128 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 129 | "dev": true 130 | }, 131 | "caller-path": { 132 | "version": "0.1.0", 133 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 134 | "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", 135 | "dev": true, 136 | "requires": { 137 | "callsites": "^0.2.0" 138 | } 139 | }, 140 | "callsites": { 141 | "version": "0.2.0", 142 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 143 | "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", 144 | "dev": true 145 | }, 146 | "caseless": { 147 | "version": "0.12.0", 148 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 149 | "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" 150 | }, 151 | "chalk": { 152 | "version": "1.1.3", 153 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 154 | "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", 155 | "dev": true, 156 | "requires": { 157 | "ansi-styles": "^2.2.1", 158 | "escape-string-regexp": "^1.0.2", 159 | "has-ansi": "^2.0.0", 160 | "strip-ansi": "^3.0.0", 161 | "supports-color": "^2.0.0" 162 | } 163 | }, 164 | "circular-json": { 165 | "version": "0.3.3", 166 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 167 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 168 | "dev": true 169 | }, 170 | "cli-cursor": { 171 | "version": "1.0.2", 172 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", 173 | "integrity": "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==", 174 | "dev": true, 175 | "requires": { 176 | "restore-cursor": "^1.0.1" 177 | } 178 | }, 179 | "cli-width": { 180 | "version": "2.2.1", 181 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 182 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", 183 | "dev": true 184 | }, 185 | "clone": { 186 | "version": "1.0.4", 187 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 188 | "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", 189 | "dev": true 190 | }, 191 | "co": { 192 | "version": "4.6.0", 193 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 194 | "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", 195 | "dev": true 196 | }, 197 | "code-point-at": { 198 | "version": "1.1.0", 199 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 200 | "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" 201 | }, 202 | "combined-stream": { 203 | "version": "1.0.8", 204 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 205 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 206 | "requires": { 207 | "delayed-stream": "~1.0.0" 208 | } 209 | }, 210 | "concat-map": { 211 | "version": "0.0.1", 212 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 213 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 214 | "dev": true 215 | }, 216 | "concat-stream": { 217 | "version": "1.6.2", 218 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 219 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 220 | "dev": true, 221 | "requires": { 222 | "buffer-from": "^1.0.0", 223 | "inherits": "^2.0.3", 224 | "readable-stream": "^2.2.2", 225 | "typedarray": "^0.0.6" 226 | }, 227 | "dependencies": { 228 | "isarray": { 229 | "version": "1.0.0", 230 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 231 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 232 | "dev": true 233 | }, 234 | "readable-stream": { 235 | "version": "2.3.7", 236 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 237 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 238 | "dev": true, 239 | "requires": { 240 | "core-util-is": "~1.0.0", 241 | "inherits": "~2.0.3", 242 | "isarray": "~1.0.0", 243 | "process-nextick-args": "~2.0.0", 244 | "safe-buffer": "~5.1.1", 245 | "string_decoder": "~1.1.1", 246 | "util-deprecate": "~1.0.1" 247 | } 248 | }, 249 | "safe-buffer": { 250 | "version": "5.1.2", 251 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 252 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 253 | "dev": true 254 | }, 255 | "string_decoder": { 256 | "version": "1.1.1", 257 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 258 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 259 | "dev": true, 260 | "requires": { 261 | "safe-buffer": "~5.1.0" 262 | } 263 | } 264 | } 265 | }, 266 | "core-util-is": { 267 | "version": "1.0.3", 268 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 269 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 270 | }, 271 | "d": { 272 | "version": "1.0.1", 273 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", 274 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", 275 | "dev": true, 276 | "requires": { 277 | "es5-ext": "^0.10.50", 278 | "type": "^1.0.1" 279 | } 280 | }, 281 | "dashdash": { 282 | "version": "1.14.1", 283 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 284 | "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", 285 | "requires": { 286 | "assert-plus": "^1.0.0" 287 | } 288 | }, 289 | "debug": { 290 | "version": "2.6.9", 291 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 292 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 293 | "requires": { 294 | "ms": "2.0.0" 295 | } 296 | }, 297 | "debug-log": { 298 | "version": "1.0.1", 299 | "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", 300 | "integrity": "sha512-gV/pe1YIaKNgLYnd1g9VNW80tcb7oV5qvNUxG7NM8rbDpnl6RGunzlAtlGSb0wEs3nesu2vHNiX9TSsZ+Y+RjA==", 301 | "dev": true 302 | }, 303 | "deep-equal": { 304 | "version": "0.2.2", 305 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", 306 | "integrity": "sha512-FXgye2Jr6oEk01S7gmSrHrPEQ1ontR7wwl+nYiZ8h4SXlHVm0DYda74BIPcHz2s2qPz4+375IcAz1vsWLwddgQ==", 307 | "dev": true 308 | }, 309 | "deep-is": { 310 | "version": "0.1.4", 311 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 312 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 313 | "dev": true 314 | }, 315 | "defaults": { 316 | "version": "1.0.3", 317 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 318 | "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", 319 | "dev": true, 320 | "requires": { 321 | "clone": "^1.0.2" 322 | } 323 | }, 324 | "defined": { 325 | "version": "0.0.0", 326 | "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", 327 | "integrity": "sha512-zpqiCT8bODLu3QSmLLic8xJnYWBFjOSu/fBCm189oAiTtPq/PSanNACKZDS7kgSyCJY7P+IcODzlIogBK/9RBg==", 328 | "dev": true 329 | }, 330 | "deglob": { 331 | "version": "1.1.2", 332 | "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", 333 | "integrity": "sha512-CACtLHJwEHEgrs2aShBEV4B318fGmUlYMzZgxut1h/R6k2vyusxwVAJJU+1IiPFgNuOPOfH1rBHrtJ2hwEElLw==", 334 | "dev": true, 335 | "requires": { 336 | "find-root": "^1.0.0", 337 | "glob": "^7.0.5", 338 | "ignore": "^3.0.9", 339 | "pkg-config": "^1.1.0", 340 | "run-parallel": "^1.1.2", 341 | "uniq": "^1.0.1", 342 | "xtend": "^4.0.0" 343 | }, 344 | "dependencies": { 345 | "glob": { 346 | "version": "7.2.3", 347 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 348 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 349 | "dev": true, 350 | "requires": { 351 | "fs.realpath": "^1.0.0", 352 | "inflight": "^1.0.4", 353 | "inherits": "2", 354 | "minimatch": "^3.1.1", 355 | "once": "^1.3.0", 356 | "path-is-absolute": "^1.0.0" 357 | } 358 | }, 359 | "ignore": { 360 | "version": "3.3.10", 361 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", 362 | "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", 363 | "dev": true 364 | }, 365 | "xtend": { 366 | "version": "4.0.2", 367 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 368 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 369 | "dev": true 370 | } 371 | } 372 | }, 373 | "delayed-stream": { 374 | "version": "1.0.0", 375 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 376 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" 377 | }, 378 | "doctrine": { 379 | "version": "1.5.0", 380 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", 381 | "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", 382 | "dev": true, 383 | "requires": { 384 | "esutils": "^2.0.2", 385 | "isarray": "^1.0.0" 386 | }, 387 | "dependencies": { 388 | "isarray": { 389 | "version": "1.0.0", 390 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 391 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 392 | "dev": true 393 | } 394 | } 395 | }, 396 | "ecc-jsbn": { 397 | "version": "0.1.2", 398 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 399 | "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", 400 | "requires": { 401 | "jsbn": "~0.1.0", 402 | "safer-buffer": "^2.1.0" 403 | } 404 | }, 405 | "es5-ext": { 406 | "version": "0.10.62", 407 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", 408 | "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", 409 | "dev": true, 410 | "requires": { 411 | "es6-iterator": "^2.0.3", 412 | "es6-symbol": "^3.1.3", 413 | "next-tick": "^1.1.0" 414 | } 415 | }, 416 | "es6-iterator": { 417 | "version": "2.0.3", 418 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 419 | "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", 420 | "dev": true, 421 | "requires": { 422 | "d": "1", 423 | "es5-ext": "^0.10.35", 424 | "es6-symbol": "^3.1.1" 425 | } 426 | }, 427 | "es6-map": { 428 | "version": "0.1.5", 429 | "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", 430 | "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", 431 | "dev": true, 432 | "requires": { 433 | "d": "1", 434 | "es5-ext": "~0.10.14", 435 | "es6-iterator": "~2.0.1", 436 | "es6-set": "~0.1.5", 437 | "es6-symbol": "~3.1.1", 438 | "event-emitter": "~0.3.5" 439 | } 440 | }, 441 | "es6-set": { 442 | "version": "0.1.6", 443 | "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", 444 | "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", 445 | "dev": true, 446 | "requires": { 447 | "d": "^1.0.1", 448 | "es5-ext": "^0.10.62", 449 | "es6-iterator": "~2.0.3", 450 | "es6-symbol": "^3.1.3", 451 | "event-emitter": "^0.3.5", 452 | "type": "^2.7.2" 453 | }, 454 | "dependencies": { 455 | "type": { 456 | "version": "2.7.2", 457 | "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", 458 | "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", 459 | "dev": true 460 | } 461 | } 462 | }, 463 | "es6-symbol": { 464 | "version": "3.1.3", 465 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", 466 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", 467 | "dev": true, 468 | "requires": { 469 | "d": "^1.0.1", 470 | "ext": "^1.1.2" 471 | } 472 | }, 473 | "es6-weak-map": { 474 | "version": "2.0.3", 475 | "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", 476 | "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", 477 | "dev": true, 478 | "requires": { 479 | "d": "1", 480 | "es5-ext": "^0.10.46", 481 | "es6-iterator": "^2.0.3", 482 | "es6-symbol": "^3.1.1" 483 | } 484 | }, 485 | "escape-string-regexp": { 486 | "version": "1.0.5", 487 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 488 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 489 | "dev": true 490 | }, 491 | "escope": { 492 | "version": "3.6.0", 493 | "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", 494 | "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", 495 | "dev": true, 496 | "requires": { 497 | "es6-map": "^0.1.3", 498 | "es6-weak-map": "^2.0.1", 499 | "esrecurse": "^4.1.0", 500 | "estraverse": "^4.1.1" 501 | } 502 | }, 503 | "eslint": { 504 | "version": "2.2.0", 505 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.2.0.tgz", 506 | "integrity": "sha512-Ay1ThESRUQUlI3JnWrVjAecu+v2sm9ldq95IPe4LyrC8fG3SSZs5f2l4xRfB3kW9UOACeBsx0Na8uJ1ckgeBrg==", 507 | "dev": true, 508 | "requires": { 509 | "chalk": "^1.0.0", 510 | "concat-stream": "^1.4.6", 511 | "debug": "^2.1.1", 512 | "doctrine": "^1.1.0", 513 | "es6-map": "^0.1.3", 514 | "escope": "^3.4.0", 515 | "espree": "^3.0.0", 516 | "estraverse": "^4.1.1", 517 | "estraverse-fb": "^1.3.1", 518 | "esutils": "^2.0.2", 519 | "file-entry-cache": "^1.1.1", 520 | "glob": "^6.0.4", 521 | "globals": "^8.18.0", 522 | "ignore": "^2.2.19", 523 | "inquirer": "^0.12.0", 524 | "is-my-json-valid": "^2.10.0", 525 | "is-resolvable": "^1.0.0", 526 | "js-yaml": "^3.5.1", 527 | "json-stable-stringify": "^1.0.0", 528 | "lodash": "^4.0.0", 529 | "mkdirp": "^0.5.0", 530 | "optionator": "^0.8.1", 531 | "path-is-absolute": "^1.0.0", 532 | "path-is-inside": "^1.0.1", 533 | "pluralize": "^1.2.1", 534 | "progress": "^1.1.8", 535 | "require-uncached": "^1.0.2", 536 | "resolve": "^1.1.6", 537 | "shelljs": "^0.5.3", 538 | "strip-json-comments": "~1.0.1", 539 | "table": "^3.7.8", 540 | "text-table": "~0.2.0", 541 | "user-home": "^2.0.0" 542 | } 543 | }, 544 | "eslint-config-standard": { 545 | "version": "5.1.0", 546 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.1.0.tgz", 547 | "integrity": "sha512-mDjsN6Hk4W3rJe2w9G6W2H3RIrUcKUeXtDWL6orlNcik8Q2w4oZvBOhHtDZGuB7uXTL5DKLOBnPVO9NVopLb2Q==", 548 | "dev": true 549 | }, 550 | "eslint-config-standard-jsx": { 551 | "version": "1.1.1", 552 | "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.1.1.tgz", 553 | "integrity": "sha512-AWUuX0M2BbnSQHNGTObfdfW7LtB+imuoqXdVrK74u+eMK3Astu8PFoHd8+kTUMqWR5WosrxxRtOY+IgBUs8ZYw==", 554 | "dev": true 555 | }, 556 | "eslint-plugin-promise": { 557 | "version": "1.3.2", 558 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", 559 | "integrity": "sha512-0u7miAO2rYoIt3xhSoajdZSQdCvkyAu0JFXY5la1PW/xcgSyaBxQz91Rnm4zN084YSwYB6dc+HId2ByMS7jImw==", 560 | "dev": true 561 | }, 562 | "eslint-plugin-react": { 563 | "version": "4.3.0", 564 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-4.3.0.tgz", 565 | "integrity": "sha512-ajQ9S74FUln2GcwgpPUQqRLcT6UFDhvAMIiDX4F68tDnuihNXcAA7LI19MmRGGOuJnpMVDXugJg+wf9K+bf6kg==", 566 | "dev": true 567 | }, 568 | "eslint-plugin-standard": { 569 | "version": "1.3.3", 570 | "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", 571 | "integrity": "sha512-LjMgISU4D6qdCmyGDzowQm5bINHpzkGiem1zhcm+Qa/FyZHsccZDU13cGYiEvF6iYl0ZazXAvPSPxbpD6/aEOg==", 572 | "dev": true 573 | }, 574 | "espree": { 575 | "version": "3.5.4", 576 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", 577 | "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", 578 | "dev": true, 579 | "requires": { 580 | "acorn": "^5.5.0", 581 | "acorn-jsx": "^3.0.0" 582 | } 583 | }, 584 | "esprima": { 585 | "version": "4.0.1", 586 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 587 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 588 | "dev": true 589 | }, 590 | "esrecurse": { 591 | "version": "4.3.0", 592 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 593 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 594 | "dev": true, 595 | "requires": { 596 | "estraverse": "^5.2.0" 597 | }, 598 | "dependencies": { 599 | "estraverse": { 600 | "version": "5.3.0", 601 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 602 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 603 | "dev": true 604 | } 605 | } 606 | }, 607 | "estraverse": { 608 | "version": "4.3.0", 609 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 610 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 611 | "dev": true 612 | }, 613 | "estraverse-fb": { 614 | "version": "1.3.2", 615 | "resolved": "https://registry.npmjs.org/estraverse-fb/-/estraverse-fb-1.3.2.tgz", 616 | "integrity": "sha512-wp3lfRrWy5EQD9TqesuYM1SKVP4ERT0cUatb4e8Vznf4K5IOpREhuyXZxGj3a9s9mvX5vGZKNHA4R9D4kp9Q9A==", 617 | "dev": true 618 | }, 619 | "esutils": { 620 | "version": "2.0.3", 621 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 622 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 623 | "dev": true 624 | }, 625 | "event-emitter": { 626 | "version": "0.3.5", 627 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 628 | "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", 629 | "dev": true, 630 | "requires": { 631 | "d": "1", 632 | "es5-ext": "~0.10.14" 633 | } 634 | }, 635 | "execspawn": { 636 | "version": "1.0.1", 637 | "resolved": "https://registry.npmjs.org/execspawn/-/execspawn-1.0.1.tgz", 638 | "integrity": "sha512-s2k06Jy9i8CUkYe0+DxRlvtkZoOkwwfhB+Xxo5HGUtrISVW2m98jO2tr67DGRFxZwkjQqloA3v/tNtjhBRBieg==", 639 | "dev": true, 640 | "requires": { 641 | "util-extend": "^1.0.1" 642 | } 643 | }, 644 | "exit-hook": { 645 | "version": "1.1.1", 646 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", 647 | "integrity": "sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==", 648 | "dev": true 649 | }, 650 | "ext": { 651 | "version": "1.6.0", 652 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", 653 | "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", 654 | "dev": true, 655 | "requires": { 656 | "type": "^2.5.0" 657 | }, 658 | "dependencies": { 659 | "type": { 660 | "version": "2.7.2", 661 | "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", 662 | "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", 663 | "dev": true 664 | } 665 | } 666 | }, 667 | "extend": { 668 | "version": "3.0.2", 669 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 670 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 671 | }, 672 | "extsprintf": { 673 | "version": "1.3.0", 674 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 675 | "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" 676 | }, 677 | "fast-deep-equal": { 678 | "version": "3.1.3", 679 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 680 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 681 | }, 682 | "fast-json-stable-stringify": { 683 | "version": "2.1.0", 684 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 685 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 686 | }, 687 | "fast-levenshtein": { 688 | "version": "2.0.6", 689 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 690 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 691 | "dev": true 692 | }, 693 | "figures": { 694 | "version": "1.7.0", 695 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 696 | "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", 697 | "dev": true, 698 | "requires": { 699 | "escape-string-regexp": "^1.0.5", 700 | "object-assign": "^4.1.0" 701 | } 702 | }, 703 | "file-entry-cache": { 704 | "version": "1.3.1", 705 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", 706 | "integrity": "sha512-JyVk7P0Hvw6uEAwH4Y0j+rZMvaMWvLBYRmRGAF2S6jKTycf0mMDcC7d21Y2KyrKJk3XI8YghSsk5KmRdbvg0VQ==", 707 | "dev": true, 708 | "requires": { 709 | "flat-cache": "^1.2.1", 710 | "object-assign": "^4.0.1" 711 | } 712 | }, 713 | "find-root": { 714 | "version": "1.1.0", 715 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", 716 | "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", 717 | "dev": true 718 | }, 719 | "flat-cache": { 720 | "version": "1.3.4", 721 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", 722 | "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", 723 | "dev": true, 724 | "requires": { 725 | "circular-json": "^0.3.1", 726 | "graceful-fs": "^4.1.2", 727 | "rimraf": "~2.6.2", 728 | "write": "^0.2.1" 729 | } 730 | }, 731 | "forever-agent": { 732 | "version": "0.6.1", 733 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 734 | "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" 735 | }, 736 | "form-data": { 737 | "version": "2.3.3", 738 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 739 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 740 | "requires": { 741 | "asynckit": "^0.4.0", 742 | "combined-stream": "^1.0.6", 743 | "mime-types": "^2.1.12" 744 | } 745 | }, 746 | "fs.realpath": { 747 | "version": "1.0.0", 748 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 749 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 750 | "dev": true 751 | }, 752 | "function-bind": { 753 | "version": "1.1.1", 754 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 755 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 756 | "dev": true 757 | }, 758 | "generate-function": { 759 | "version": "2.3.1", 760 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", 761 | "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", 762 | "dev": true, 763 | "requires": { 764 | "is-property": "^1.0.2" 765 | } 766 | }, 767 | "generate-object-property": { 768 | "version": "1.2.0", 769 | "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", 770 | "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", 771 | "dev": true, 772 | "requires": { 773 | "is-property": "^1.0.0" 774 | } 775 | }, 776 | "get-stdin": { 777 | "version": "5.0.1", 778 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", 779 | "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", 780 | "dev": true 781 | }, 782 | "getpass": { 783 | "version": "0.1.7", 784 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 785 | "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", 786 | "requires": { 787 | "assert-plus": "^1.0.0" 788 | } 789 | }, 790 | "glob": { 791 | "version": "6.0.4", 792 | "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", 793 | "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", 794 | "dev": true, 795 | "requires": { 796 | "inflight": "^1.0.4", 797 | "inherits": "2", 798 | "minimatch": "2 || 3", 799 | "once": "^1.3.0", 800 | "path-is-absolute": "^1.0.0" 801 | } 802 | }, 803 | "globals": { 804 | "version": "8.18.0", 805 | "resolved": "https://registry.npmjs.org/globals/-/globals-8.18.0.tgz", 806 | "integrity": "sha512-IHCTKEGo42ICEkTZBADyl4HX06hVdFF4qdJdqOgaBe5X8RE1/MrvubetsEtGTcwjs46djFq0Gc3+5RgTsc3UoQ==", 807 | "dev": true 808 | }, 809 | "graceful-fs": { 810 | "version": "4.2.10", 811 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 812 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 813 | "dev": true 814 | }, 815 | "har-schema": { 816 | "version": "2.0.0", 817 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 818 | "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" 819 | }, 820 | "har-validator": { 821 | "version": "5.1.5", 822 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 823 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 824 | "requires": { 825 | "ajv": "^6.12.3", 826 | "har-schema": "^2.0.0" 827 | } 828 | }, 829 | "has": { 830 | "version": "1.0.3", 831 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 832 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 833 | "dev": true, 834 | "requires": { 835 | "function-bind": "^1.1.1" 836 | } 837 | }, 838 | "has-ansi": { 839 | "version": "2.0.0", 840 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 841 | "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", 842 | "dev": true, 843 | "requires": { 844 | "ansi-regex": "^2.0.0" 845 | } 846 | }, 847 | "http-signature": { 848 | "version": "1.2.0", 849 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 850 | "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", 851 | "requires": { 852 | "assert-plus": "^1.0.0", 853 | "jsprim": "^1.2.2", 854 | "sshpk": "^1.7.0" 855 | } 856 | }, 857 | "ignore": { 858 | "version": "2.2.19", 859 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-2.2.19.tgz", 860 | "integrity": "sha512-Mq1FKJDxSky/AR+Goatl1RmCzWbAHE4fNvgkmJu9Ln8T8A8JbKAd/BHHZQaqknHSFCBe0zQJg7akDpI57pKTlQ==", 861 | "dev": true 862 | }, 863 | "inflight": { 864 | "version": "1.0.6", 865 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 866 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 867 | "dev": true, 868 | "requires": { 869 | "once": "^1.3.0", 870 | "wrappy": "1" 871 | } 872 | }, 873 | "inherits": { 874 | "version": "2.0.4", 875 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 876 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 877 | }, 878 | "inquirer": { 879 | "version": "0.12.0", 880 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", 881 | "integrity": "sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ==", 882 | "dev": true, 883 | "requires": { 884 | "ansi-escapes": "^1.1.0", 885 | "ansi-regex": "^2.0.0", 886 | "chalk": "^1.0.0", 887 | "cli-cursor": "^1.0.1", 888 | "cli-width": "^2.0.0", 889 | "figures": "^1.3.5", 890 | "lodash": "^4.3.0", 891 | "readline2": "^1.0.1", 892 | "run-async": "^0.1.0", 893 | "rx-lite": "^3.1.2", 894 | "string-width": "^1.0.1", 895 | "strip-ansi": "^3.0.0", 896 | "through": "^2.3.6" 897 | } 898 | }, 899 | "is-core-module": { 900 | "version": "2.10.0", 901 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", 902 | "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", 903 | "dev": true, 904 | "requires": { 905 | "has": "^1.0.3" 906 | } 907 | }, 908 | "is-fullwidth-code-point": { 909 | "version": "1.0.0", 910 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 911 | "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", 912 | "requires": { 913 | "number-is-nan": "^1.0.0" 914 | } 915 | }, 916 | "is-my-ip-valid": { 917 | "version": "1.0.1", 918 | "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", 919 | "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", 920 | "dev": true 921 | }, 922 | "is-my-json-valid": { 923 | "version": "2.20.6", 924 | "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", 925 | "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", 926 | "dev": true, 927 | "requires": { 928 | "generate-function": "^2.0.0", 929 | "generate-object-property": "^1.1.0", 930 | "is-my-ip-valid": "^1.0.0", 931 | "jsonpointer": "^5.0.0", 932 | "xtend": "^4.0.0" 933 | }, 934 | "dependencies": { 935 | "xtend": { 936 | "version": "4.0.2", 937 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 938 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 939 | "dev": true 940 | } 941 | } 942 | }, 943 | "is-property": { 944 | "version": "1.0.2", 945 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", 946 | "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", 947 | "dev": true 948 | }, 949 | "is-resolvable": { 950 | "version": "1.1.0", 951 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 952 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 953 | "dev": true 954 | }, 955 | "is-typedarray": { 956 | "version": "1.0.0", 957 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 958 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" 959 | }, 960 | "isarray": { 961 | "version": "0.0.1", 962 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 963 | "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" 964 | }, 965 | "isstream": { 966 | "version": "0.1.2", 967 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 968 | "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" 969 | }, 970 | "js-yaml": { 971 | "version": "3.14.1", 972 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 973 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 974 | "dev": true, 975 | "requires": { 976 | "argparse": "^1.0.7", 977 | "esprima": "^4.0.0" 978 | } 979 | }, 980 | "jsbn": { 981 | "version": "0.1.1", 982 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 983 | "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" 984 | }, 985 | "json-schema": { 986 | "version": "0.4.0", 987 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 988 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" 989 | }, 990 | "json-schema-traverse": { 991 | "version": "0.4.1", 992 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 993 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 994 | }, 995 | "json-stable-stringify": { 996 | "version": "1.0.1", 997 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 998 | "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", 999 | "dev": true, 1000 | "requires": { 1001 | "jsonify": "~0.0.0" 1002 | } 1003 | }, 1004 | "json-stringify-safe": { 1005 | "version": "5.0.1", 1006 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1007 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" 1008 | }, 1009 | "jsonify": { 1010 | "version": "0.0.0", 1011 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1012 | "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", 1013 | "dev": true 1014 | }, 1015 | "jsonpointer": { 1016 | "version": "5.0.1", 1017 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", 1018 | "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", 1019 | "dev": true 1020 | }, 1021 | "jsprim": { 1022 | "version": "1.4.2", 1023 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", 1024 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", 1025 | "requires": { 1026 | "assert-plus": "1.0.0", 1027 | "extsprintf": "1.3.0", 1028 | "json-schema": "0.4.0", 1029 | "verror": "1.10.0" 1030 | } 1031 | }, 1032 | "levn": { 1033 | "version": "0.3.0", 1034 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1035 | "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", 1036 | "dev": true, 1037 | "requires": { 1038 | "prelude-ls": "~1.1.2", 1039 | "type-check": "~0.3.2" 1040 | } 1041 | }, 1042 | "lodash": { 1043 | "version": "4.17.21", 1044 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1045 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1046 | "dev": true 1047 | }, 1048 | "lru-cache": { 1049 | "version": "2.7.3", 1050 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 1051 | "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==", 1052 | "dev": true 1053 | }, 1054 | "mime-db": { 1055 | "version": "1.52.0", 1056 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1057 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 1058 | }, 1059 | "mime-types": { 1060 | "version": "2.1.35", 1061 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1062 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1063 | "requires": { 1064 | "mime-db": "1.52.0" 1065 | } 1066 | }, 1067 | "minimatch": { 1068 | "version": "3.1.2", 1069 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1070 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1071 | "dev": true, 1072 | "requires": { 1073 | "brace-expansion": "^1.1.7" 1074 | } 1075 | }, 1076 | "minimist": { 1077 | "version": "1.2.6", 1078 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1079 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" 1080 | }, 1081 | "mkdirp": { 1082 | "version": "0.5.6", 1083 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 1084 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 1085 | "dev": true, 1086 | "requires": { 1087 | "minimist": "^1.2.6" 1088 | } 1089 | }, 1090 | "ms": { 1091 | "version": "2.0.0", 1092 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1093 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1094 | }, 1095 | "multiline": { 1096 | "version": "1.0.2", 1097 | "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", 1098 | "integrity": "sha512-DGpmDIZKKQ+EVx0sh0757V6qlb+ouuByoC5CWH7J0bOd6KRM6ka6l9LGHWfe17OKxm+4AsLs1tgiK4vZIx66RQ==", 1099 | "dev": true, 1100 | "requires": { 1101 | "strip-indent": "^1.0.0" 1102 | } 1103 | }, 1104 | "mute-stream": { 1105 | "version": "0.0.5", 1106 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", 1107 | "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==", 1108 | "dev": true 1109 | }, 1110 | "next-tick": { 1111 | "version": "1.1.0", 1112 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", 1113 | "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", 1114 | "dev": true 1115 | }, 1116 | "npm-execspawn": { 1117 | "version": "1.3.0", 1118 | "resolved": "https://registry.npmjs.org/npm-execspawn/-/npm-execspawn-1.3.0.tgz", 1119 | "integrity": "sha512-hnezAOsF4PMRlcwq6g5N/P25Vwa3XpVOQ5ZFc+5C9FTDQhLWXwzvwLYKH81ET0lGs3612nvQ0Kzt7LuHXPswUw==", 1120 | "dev": true, 1121 | "requires": { 1122 | "debug": "^2.1.3", 1123 | "execspawn": "^1.0.0", 1124 | "shell-quote": "^1.5.0", 1125 | "xtend": "^3.0.0" 1126 | }, 1127 | "dependencies": { 1128 | "xtend": { 1129 | "version": "3.0.0", 1130 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", 1131 | "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", 1132 | "dev": true 1133 | } 1134 | } 1135 | }, 1136 | "number-is-nan": { 1137 | "version": "1.0.1", 1138 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1139 | "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" 1140 | }, 1141 | "oauth-sign": { 1142 | "version": "0.9.0", 1143 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1144 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 1145 | }, 1146 | "object-assign": { 1147 | "version": "4.1.1", 1148 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1149 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1150 | "dev": true 1151 | }, 1152 | "object-inspect": { 1153 | "version": "0.4.0", 1154 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-0.4.0.tgz", 1155 | "integrity": "sha512-8WvkvUZiKAjjsy/63rJjA7jw9uyF0CLVLjBKEfnPHE3Jxvs1LgwqL2OmJN+LliIX1vrzKW+AAu02Cc+xv27ncQ==", 1156 | "dev": true 1157 | }, 1158 | "object-keys": { 1159 | "version": "0.4.0", 1160 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", 1161 | "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" 1162 | }, 1163 | "once": { 1164 | "version": "1.4.0", 1165 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1166 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1167 | "dev": true, 1168 | "requires": { 1169 | "wrappy": "1" 1170 | } 1171 | }, 1172 | "onetime": { 1173 | "version": "1.1.0", 1174 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", 1175 | "integrity": "sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==", 1176 | "dev": true 1177 | }, 1178 | "optionator": { 1179 | "version": "0.8.3", 1180 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1181 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1182 | "dev": true, 1183 | "requires": { 1184 | "deep-is": "~0.1.3", 1185 | "fast-levenshtein": "~2.0.6", 1186 | "levn": "~0.3.0", 1187 | "prelude-ls": "~1.1.2", 1188 | "type-check": "~0.3.2", 1189 | "word-wrap": "~1.2.3" 1190 | } 1191 | }, 1192 | "os-homedir": { 1193 | "version": "1.0.2", 1194 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1195 | "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", 1196 | "dev": true 1197 | }, 1198 | "path-is-absolute": { 1199 | "version": "1.0.1", 1200 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1201 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1202 | "dev": true 1203 | }, 1204 | "path-is-inside": { 1205 | "version": "1.0.2", 1206 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1207 | "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", 1208 | "dev": true 1209 | }, 1210 | "path-parse": { 1211 | "version": "1.0.7", 1212 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1213 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1214 | "dev": true 1215 | }, 1216 | "performance-now": { 1217 | "version": "2.1.0", 1218 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1219 | "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" 1220 | }, 1221 | "pkg-config": { 1222 | "version": "1.1.1", 1223 | "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", 1224 | "integrity": "sha512-ft/WI9YK6FuTuw4Ql+QUaNXtm/ASQNqDUUsZEgFZKyFpW6amyP8Gx01xrRs8KdiNbbqXfYxkOXplpq1euWbOjw==", 1225 | "dev": true, 1226 | "requires": { 1227 | "debug-log": "^1.0.0", 1228 | "find-root": "^1.0.0", 1229 | "xtend": "^4.0.1" 1230 | }, 1231 | "dependencies": { 1232 | "xtend": { 1233 | "version": "4.0.2", 1234 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1235 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1236 | "dev": true 1237 | } 1238 | } 1239 | }, 1240 | "pluralize": { 1241 | "version": "1.2.1", 1242 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", 1243 | "integrity": "sha512-TH+BeeL6Ct98C7as35JbZLf8lgsRzlNJb5gklRIGHKaPkGl1esOKBc5ALUMd+q08Sr6tiEKM+Icbsxg5vuhMKQ==", 1244 | "dev": true 1245 | }, 1246 | "prelude-ls": { 1247 | "version": "1.1.2", 1248 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1249 | "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", 1250 | "dev": true 1251 | }, 1252 | "pretty-bytes": { 1253 | "version": "4.0.2", 1254 | "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", 1255 | "integrity": "sha512-yJAF+AjbHKlxQ8eezMd/34Mnj/YTQ3i6kLzvVsH4l/BfIFtp444n0wVbnsn66JimZ9uBofv815aRp1zCppxlWw==" 1256 | }, 1257 | "process-nextick-args": { 1258 | "version": "2.0.1", 1259 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1260 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1261 | "dev": true 1262 | }, 1263 | "progress": { 1264 | "version": "1.1.8", 1265 | "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", 1266 | "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", 1267 | "dev": true 1268 | }, 1269 | "progress-stream": { 1270 | "version": "1.2.0", 1271 | "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", 1272 | "integrity": "sha512-MIBPjZz6oGNSw5rn2mSp+nP9FGoaVo6QsPyPVEaD4puilz5hZNa3kfnrlqRNYFsugslbU3An4mnkLLtZOaWvrA==", 1273 | "requires": { 1274 | "speedometer": "~0.1.2", 1275 | "through2": "~0.2.3" 1276 | } 1277 | }, 1278 | "psl": { 1279 | "version": "1.9.0", 1280 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", 1281 | "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" 1282 | }, 1283 | "punycode": { 1284 | "version": "2.1.1", 1285 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1286 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 1287 | }, 1288 | "qs": { 1289 | "version": "6.5.3", 1290 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", 1291 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" 1292 | }, 1293 | "queue-microtask": { 1294 | "version": "1.2.3", 1295 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1296 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1297 | "dev": true 1298 | }, 1299 | "readable-stream": { 1300 | "version": "1.1.14", 1301 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 1302 | "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", 1303 | "requires": { 1304 | "core-util-is": "~1.0.0", 1305 | "inherits": "~2.0.1", 1306 | "isarray": "0.0.1", 1307 | "string_decoder": "~0.10.x" 1308 | } 1309 | }, 1310 | "readline2": { 1311 | "version": "1.0.1", 1312 | "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", 1313 | "integrity": "sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==", 1314 | "dev": true, 1315 | "requires": { 1316 | "code-point-at": "^1.0.0", 1317 | "is-fullwidth-code-point": "^1.0.0", 1318 | "mute-stream": "0.0.5" 1319 | } 1320 | }, 1321 | "request": { 1322 | "version": "2.88.2", 1323 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 1324 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 1325 | "requires": { 1326 | "aws-sign2": "~0.7.0", 1327 | "aws4": "^1.8.0", 1328 | "caseless": "~0.12.0", 1329 | "combined-stream": "~1.0.6", 1330 | "extend": "~3.0.2", 1331 | "forever-agent": "~0.6.1", 1332 | "form-data": "~2.3.2", 1333 | "har-validator": "~5.1.3", 1334 | "http-signature": "~1.2.0", 1335 | "is-typedarray": "~1.0.0", 1336 | "isstream": "~0.1.2", 1337 | "json-stringify-safe": "~5.0.1", 1338 | "mime-types": "~2.1.19", 1339 | "oauth-sign": "~0.9.0", 1340 | "performance-now": "^2.1.0", 1341 | "qs": "~6.5.2", 1342 | "safe-buffer": "^5.1.2", 1343 | "tough-cookie": "~2.5.0", 1344 | "tunnel-agent": "^0.6.0", 1345 | "uuid": "^3.3.2" 1346 | } 1347 | }, 1348 | "require-uncached": { 1349 | "version": "1.0.3", 1350 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 1351 | "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", 1352 | "dev": true, 1353 | "requires": { 1354 | "caller-path": "^0.1.0", 1355 | "resolve-from": "^1.0.0" 1356 | } 1357 | }, 1358 | "resolve": { 1359 | "version": "1.22.1", 1360 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1361 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1362 | "dev": true, 1363 | "requires": { 1364 | "is-core-module": "^2.9.0", 1365 | "path-parse": "^1.0.7", 1366 | "supports-preserve-symlinks-flag": "^1.0.0" 1367 | } 1368 | }, 1369 | "resolve-from": { 1370 | "version": "1.0.1", 1371 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 1372 | "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", 1373 | "dev": true 1374 | }, 1375 | "restore-cursor": { 1376 | "version": "1.0.1", 1377 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", 1378 | "integrity": "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==", 1379 | "dev": true, 1380 | "requires": { 1381 | "exit-hook": "^1.0.0", 1382 | "onetime": "^1.0.0" 1383 | } 1384 | }, 1385 | "resumer": { 1386 | "version": "0.0.0", 1387 | "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", 1388 | "integrity": "sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==", 1389 | "dev": true, 1390 | "requires": { 1391 | "through": "~2.3.4" 1392 | } 1393 | }, 1394 | "rimraf": { 1395 | "version": "2.6.3", 1396 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1397 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1398 | "dev": true, 1399 | "requires": { 1400 | "glob": "^7.1.3" 1401 | }, 1402 | "dependencies": { 1403 | "glob": { 1404 | "version": "7.2.3", 1405 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1406 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1407 | "dev": true, 1408 | "requires": { 1409 | "fs.realpath": "^1.0.0", 1410 | "inflight": "^1.0.4", 1411 | "inherits": "2", 1412 | "minimatch": "^3.1.1", 1413 | "once": "^1.3.0", 1414 | "path-is-absolute": "^1.0.0" 1415 | } 1416 | } 1417 | } 1418 | }, 1419 | "run-async": { 1420 | "version": "0.1.0", 1421 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", 1422 | "integrity": "sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==", 1423 | "dev": true, 1424 | "requires": { 1425 | "once": "^1.3.0" 1426 | } 1427 | }, 1428 | "run-parallel": { 1429 | "version": "1.2.0", 1430 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1431 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1432 | "dev": true, 1433 | "requires": { 1434 | "queue-microtask": "^1.2.2" 1435 | } 1436 | }, 1437 | "rx-lite": { 1438 | "version": "3.1.2", 1439 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", 1440 | "integrity": "sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ==", 1441 | "dev": true 1442 | }, 1443 | "safe-buffer": { 1444 | "version": "5.2.1", 1445 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1446 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1447 | }, 1448 | "safer-buffer": { 1449 | "version": "2.1.2", 1450 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1451 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1452 | }, 1453 | "shell-quote": { 1454 | "version": "1.7.3", 1455 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", 1456 | "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", 1457 | "dev": true 1458 | }, 1459 | "shelljs": { 1460 | "version": "0.5.3", 1461 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", 1462 | "integrity": "sha512-C2FisSSW8S6TIYHHiMHN0NqzdjWfTekdMpA2FJTbRWnQMLO1RRIXEB9eVZYOlofYmjZA7fY3ChoFu09MeI3wlQ==", 1463 | "dev": true 1464 | }, 1465 | "sigmund": { 1466 | "version": "1.0.1", 1467 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 1468 | "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", 1469 | "dev": true 1470 | }, 1471 | "single-line-log": { 1472 | "version": "1.1.2", 1473 | "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", 1474 | "integrity": "sha512-awzaaIPtYFdexLr6TBpcZSGPB6D1RInNO/qNetgaJloPDF/D0GkVtLvGEp8InfmLV7CyLyQ5fIRP+tVN/JmWQA==", 1475 | "requires": { 1476 | "string-width": "^1.0.1" 1477 | } 1478 | }, 1479 | "slice-ansi": { 1480 | "version": "0.0.4", 1481 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", 1482 | "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", 1483 | "dev": true 1484 | }, 1485 | "speedometer": { 1486 | "version": "0.1.4", 1487 | "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", 1488 | "integrity": "sha512-phdEoDlA6EUIVtzwq1UiNMXDUogczp204aYF/yfOhjNePWFfIpBJ1k5wLMuXQhEOOMjuTJEcc4vdZa+vuP+n/Q==" 1489 | }, 1490 | "sprintf-js": { 1491 | "version": "1.0.3", 1492 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1493 | "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", 1494 | "dev": true 1495 | }, 1496 | "sshpk": { 1497 | "version": "1.17.0", 1498 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", 1499 | "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", 1500 | "requires": { 1501 | "asn1": "~0.2.3", 1502 | "assert-plus": "^1.0.0", 1503 | "bcrypt-pbkdf": "^1.0.0", 1504 | "dashdash": "^1.12.0", 1505 | "ecc-jsbn": "~0.1.1", 1506 | "getpass": "^0.1.1", 1507 | "jsbn": "~0.1.0", 1508 | "safer-buffer": "^2.0.2", 1509 | "tweetnacl": "~0.14.0" 1510 | } 1511 | }, 1512 | "standard": { 1513 | "version": "6.0.8", 1514 | "resolved": "https://registry.npmjs.org/standard/-/standard-6.0.8.tgz", 1515 | "integrity": "sha512-qvzyrbsMBqapl7BAAQUmxhUvZW+sN5Ok4Mj+ZEsqABrjOY88a1rE5IFybXnXUdvD7KN/8fjqRubHW5NgT4bJhw==", 1516 | "dev": true, 1517 | "requires": { 1518 | "eslint": "~2.2.0", 1519 | "eslint-config-standard": "5.1.0", 1520 | "eslint-config-standard-jsx": "1.1.1", 1521 | "eslint-plugin-promise": "^1.0.8", 1522 | "eslint-plugin-react": "^4.0.0", 1523 | "eslint-plugin-standard": "^1.3.1", 1524 | "standard-engine": "^3.3.0", 1525 | "xtend": "^4.0.1" 1526 | }, 1527 | "dependencies": { 1528 | "xtend": { 1529 | "version": "4.0.2", 1530 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1531 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1532 | "dev": true 1533 | } 1534 | } 1535 | }, 1536 | "standard-engine": { 1537 | "version": "3.3.1", 1538 | "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-3.3.1.tgz", 1539 | "integrity": "sha512-Y1k4p/k0e3BGk/xnyr3T2ybnYEm7b3Jdr2NtjW74RV6bzlxHTZPQAJdaQUKlmhKSdauWleUuTo4Xn9nTvS3A5g==", 1540 | "dev": true, 1541 | "requires": { 1542 | "defaults": "^1.0.2", 1543 | "deglob": "^1.0.0", 1544 | "find-root": "^1.0.0", 1545 | "get-stdin": "^5.0.1", 1546 | "minimist": "^1.1.0", 1547 | "multiline": "^1.0.2", 1548 | "pkg-config": "^1.0.1", 1549 | "xtend": "^4.0.0" 1550 | }, 1551 | "dependencies": { 1552 | "xtend": { 1553 | "version": "4.0.2", 1554 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1555 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1556 | "dev": true 1557 | } 1558 | } 1559 | }, 1560 | "string-width": { 1561 | "version": "1.0.2", 1562 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1563 | "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", 1564 | "requires": { 1565 | "code-point-at": "^1.0.0", 1566 | "is-fullwidth-code-point": "^1.0.0", 1567 | "strip-ansi": "^3.0.0" 1568 | } 1569 | }, 1570 | "string_decoder": { 1571 | "version": "0.10.31", 1572 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1573 | "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" 1574 | }, 1575 | "strip-ansi": { 1576 | "version": "3.0.1", 1577 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1578 | "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", 1579 | "requires": { 1580 | "ansi-regex": "^2.0.0" 1581 | } 1582 | }, 1583 | "strip-indent": { 1584 | "version": "1.0.1", 1585 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 1586 | "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", 1587 | "dev": true, 1588 | "requires": { 1589 | "get-stdin": "^4.0.1" 1590 | }, 1591 | "dependencies": { 1592 | "get-stdin": { 1593 | "version": "4.0.1", 1594 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 1595 | "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", 1596 | "dev": true 1597 | } 1598 | } 1599 | }, 1600 | "strip-json-comments": { 1601 | "version": "1.0.4", 1602 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 1603 | "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==", 1604 | "dev": true 1605 | }, 1606 | "supports-color": { 1607 | "version": "2.0.0", 1608 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1609 | "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", 1610 | "dev": true 1611 | }, 1612 | "supports-preserve-symlinks-flag": { 1613 | "version": "1.0.0", 1614 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1615 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1616 | "dev": true 1617 | }, 1618 | "table": { 1619 | "version": "3.8.3", 1620 | "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", 1621 | "integrity": "sha512-RZuzIOtzFbprLCE0AXhkI0Xi42ZJLZhCC+qkwuMLf/Vjz3maWpA8gz1qMdbmNoI9cOROT2Am/DxeRyXenrL11g==", 1622 | "dev": true, 1623 | "requires": { 1624 | "ajv": "^4.7.0", 1625 | "ajv-keywords": "^1.0.0", 1626 | "chalk": "^1.1.1", 1627 | "lodash": "^4.0.0", 1628 | "slice-ansi": "0.0.4", 1629 | "string-width": "^2.0.0" 1630 | }, 1631 | "dependencies": { 1632 | "ajv": { 1633 | "version": "4.11.8", 1634 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", 1635 | "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", 1636 | "dev": true, 1637 | "requires": { 1638 | "co": "^4.6.0", 1639 | "json-stable-stringify": "^1.0.1" 1640 | } 1641 | }, 1642 | "ansi-regex": { 1643 | "version": "3.0.1", 1644 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", 1645 | "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", 1646 | "dev": true 1647 | }, 1648 | "is-fullwidth-code-point": { 1649 | "version": "2.0.0", 1650 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1651 | "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", 1652 | "dev": true 1653 | }, 1654 | "string-width": { 1655 | "version": "2.1.1", 1656 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1657 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1658 | "dev": true, 1659 | "requires": { 1660 | "is-fullwidth-code-point": "^2.0.0", 1661 | "strip-ansi": "^4.0.0" 1662 | } 1663 | }, 1664 | "strip-ansi": { 1665 | "version": "4.0.0", 1666 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1667 | "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", 1668 | "dev": true, 1669 | "requires": { 1670 | "ansi-regex": "^3.0.0" 1671 | } 1672 | } 1673 | } 1674 | }, 1675 | "tape": { 1676 | "version": "3.6.1", 1677 | "resolved": "https://registry.npmjs.org/tape/-/tape-3.6.1.tgz", 1678 | "integrity": "sha512-Qy+shSMwr+bg5NwJhrdCKNOS7BEoo/SEjE+dF4a2OYR73f6ocH5ioLIHE6TuttjONmR3HYlOXwSqFTxUDFJtGg==", 1679 | "dev": true, 1680 | "requires": { 1681 | "deep-equal": "~0.2.0", 1682 | "defined": "~0.0.0", 1683 | "glob": "~3.2.9", 1684 | "inherits": "~2.0.1", 1685 | "object-inspect": "~0.4.0", 1686 | "resumer": "~0.0.0", 1687 | "through": "~2.3.4" 1688 | }, 1689 | "dependencies": { 1690 | "glob": { 1691 | "version": "3.2.11", 1692 | "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", 1693 | "integrity": "sha512-hVb0zwEZwC1FXSKRPFTeOtN7AArJcJlI6ULGLtrstaswKNlrTJqAA+1lYlSUop4vjA423xlBzqfVS3iWGlqJ+g==", 1694 | "dev": true, 1695 | "requires": { 1696 | "inherits": "2", 1697 | "minimatch": "0.3" 1698 | } 1699 | }, 1700 | "minimatch": { 1701 | "version": "0.3.0", 1702 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", 1703 | "integrity": "sha512-WFX1jI1AaxNTZVOHLBVazwTWKaQjoykSzCBNXB72vDTCzopQGtyP91tKdFK5cv1+qMwPyiTu1HqUriqplI8pcA==", 1704 | "dev": true, 1705 | "requires": { 1706 | "lru-cache": "2", 1707 | "sigmund": "~1.0.0" 1708 | } 1709 | } 1710 | } 1711 | }, 1712 | "tape-spawn": { 1713 | "version": "1.4.2", 1714 | "resolved": "https://registry.npmjs.org/tape-spawn/-/tape-spawn-1.4.2.tgz", 1715 | "integrity": "sha512-nNLqmRwC6ZE3JRcEGvOC8F03Xs1Y6+7hF39A3i9dIyWKsEkEZ+5FCWCXJYRTc1noGZuSwxuPiumabu30e0vaRA==", 1716 | "dev": true, 1717 | "requires": { 1718 | "defined": "^1.0.0", 1719 | "npm-execspawn": "^1.3.0", 1720 | "strip-ansi": "^2.0.1" 1721 | }, 1722 | "dependencies": { 1723 | "ansi-regex": { 1724 | "version": "1.1.1", 1725 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz", 1726 | "integrity": "sha512-q5i8bFLg2wDfsuR56c1NzlJFPzVD+9mxhDrhqOGigEFa87OZHlF+9dWeGWzVTP/0ECiA/JUGzfzRr2t3eYORRw==", 1727 | "dev": true 1728 | }, 1729 | "defined": { 1730 | "version": "1.0.0", 1731 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 1732 | "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", 1733 | "dev": true 1734 | }, 1735 | "strip-ansi": { 1736 | "version": "2.0.1", 1737 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz", 1738 | "integrity": "sha512-2h8q2CP3EeOhDJ+jd932PRMpa3/pOJFGoF22J1U/DNbEK2gSW2DqeF46VjCXsSQXhC+k/l8/gaaRBQKL6hUPfQ==", 1739 | "dev": true, 1740 | "requires": { 1741 | "ansi-regex": "^1.0.0" 1742 | } 1743 | } 1744 | } 1745 | }, 1746 | "text-table": { 1747 | "version": "0.2.0", 1748 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1749 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 1750 | "dev": true 1751 | }, 1752 | "throttleit": { 1753 | "version": "0.0.2", 1754 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", 1755 | "integrity": "sha512-HtlTFeyYs1elDM2txiIGsdXHaq8kffVaZH/QEBRbo95zQqzlsBx5ELKhkPOZVad9OK9oxzwx6UrQN8Vfh/+yag==" 1756 | }, 1757 | "through": { 1758 | "version": "2.3.8", 1759 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1760 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", 1761 | "dev": true 1762 | }, 1763 | "through2": { 1764 | "version": "0.2.3", 1765 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", 1766 | "integrity": "sha512-mLa8Bn2mZurjyomGKWRu3Bo2mvoQojFks9NvOK8H+k4kDJNkdEqG522KFZsEFBEl6rKkxTgFbE5+OPcgfvPEHA==", 1767 | "requires": { 1768 | "readable-stream": "~1.1.9", 1769 | "xtend": "~2.1.1" 1770 | } 1771 | }, 1772 | "tough-cookie": { 1773 | "version": "2.5.0", 1774 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 1775 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 1776 | "requires": { 1777 | "psl": "^1.1.28", 1778 | "punycode": "^2.1.1" 1779 | } 1780 | }, 1781 | "tunnel-agent": { 1782 | "version": "0.6.0", 1783 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1784 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 1785 | "requires": { 1786 | "safe-buffer": "^5.0.1" 1787 | } 1788 | }, 1789 | "tweetnacl": { 1790 | "version": "0.14.5", 1791 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1792 | "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" 1793 | }, 1794 | "type": { 1795 | "version": "1.2.0", 1796 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 1797 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", 1798 | "dev": true 1799 | }, 1800 | "type-check": { 1801 | "version": "0.3.2", 1802 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1803 | "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", 1804 | "dev": true, 1805 | "requires": { 1806 | "prelude-ls": "~1.1.2" 1807 | } 1808 | }, 1809 | "typedarray": { 1810 | "version": "0.0.6", 1811 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1812 | "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", 1813 | "dev": true 1814 | }, 1815 | "uniq": { 1816 | "version": "1.0.1", 1817 | "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", 1818 | "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", 1819 | "dev": true 1820 | }, 1821 | "uri-js": { 1822 | "version": "4.4.1", 1823 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1824 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1825 | "requires": { 1826 | "punycode": "^2.1.0" 1827 | } 1828 | }, 1829 | "user-home": { 1830 | "version": "2.0.0", 1831 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", 1832 | "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", 1833 | "dev": true, 1834 | "requires": { 1835 | "os-homedir": "^1.0.0" 1836 | } 1837 | }, 1838 | "util-deprecate": { 1839 | "version": "1.0.2", 1840 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1841 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1842 | "dev": true 1843 | }, 1844 | "util-extend": { 1845 | "version": "1.0.3", 1846 | "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", 1847 | "integrity": "sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA==", 1848 | "dev": true 1849 | }, 1850 | "uuid": { 1851 | "version": "3.4.0", 1852 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1853 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 1854 | }, 1855 | "verror": { 1856 | "version": "1.10.0", 1857 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1858 | "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", 1859 | "requires": { 1860 | "assert-plus": "^1.0.0", 1861 | "core-util-is": "1.0.2", 1862 | "extsprintf": "^1.2.0" 1863 | }, 1864 | "dependencies": { 1865 | "core-util-is": { 1866 | "version": "1.0.2", 1867 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1868 | "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" 1869 | } 1870 | } 1871 | }, 1872 | "word-wrap": { 1873 | "version": "1.2.3", 1874 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 1875 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 1876 | "dev": true 1877 | }, 1878 | "wrappy": { 1879 | "version": "1.0.2", 1880 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1881 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1882 | "dev": true 1883 | }, 1884 | "write": { 1885 | "version": "0.2.1", 1886 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 1887 | "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", 1888 | "dev": true, 1889 | "requires": { 1890 | "mkdirp": "^0.5.1" 1891 | } 1892 | }, 1893 | "xtend": { 1894 | "version": "2.1.2", 1895 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", 1896 | "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", 1897 | "requires": { 1898 | "object-keys": "~0.4.0" 1899 | } 1900 | } 1901 | } 1902 | } 1903 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nugget", 3 | "version": "2.2.0", 4 | "description": "minimalist wget clone written in node. HTTP GETs a file and saves it to the current working directory", 5 | "main": "index.js", 6 | "bin": { 7 | "nugget": "bin.js" 8 | }, 9 | "scripts": { 10 | "test": "standard && tape test/*.js" 11 | }, 12 | "author": "max ogden", 13 | "license": "BSD", 14 | "dependencies": { 15 | "debug": "^2.1.3", 16 | "minimist": "^1.1.0", 17 | "pretty-bytes": "^4.0.2", 18 | "progress-stream": "^1.1.0", 19 | "request": "^2.45.0", 20 | "single-line-log": "^1.1.2", 21 | "throttleit": "0.0.2" 22 | }, 23 | "devDependencies": { 24 | "standard": "^6.0.5", 25 | "tape": "^3.0.1", 26 | "tape-spawn": "^1.4.2" 27 | }, 28 | "directories": { 29 | "test": "test" 30 | }, 31 | "repository": { 32 | "type": "git", 33 | "url": "git://github.com/maxogden/nugget.git" 34 | }, 35 | "bugs": { 36 | "url": "https://github.com/maxogden/nugget/issues" 37 | }, 38 | "homepage": "https://github.com/maxogden/nugget" 39 | } 40 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # nugget 2 | 3 | Minimalist command line downloader written in node, inspired by wget. HTTP GETs a file and streams it into a file in the current working directory. Specializes at downloading many files in parallel. 4 | 5 | [![NPM](https://nodei.co/npm/nugget.png?global=true)](https://nodei.co/npm/nugget/) 6 | ![dat](http://img.shields.io/badge/Development%20sponsored%20by-dat-green.svg?style=flat) 7 | [![Travis](http://img.shields.io/travis/maxogden/nugget.svg?style=flat)](https://travis-ci.org/maxogden/nugget) 8 | 9 | ## installation 10 | 11 | ``` 12 | npm install nugget -g 13 | ``` 14 | 15 | ## usage 16 | 17 | ``` 18 | Usage: nugget [options] 19 | -o, --output output filename 20 | -d, --dir output parent directory 21 | -c, --continue resume aborted download 22 | -f, --force ignore response codes > 299 23 | -s, --sockets concurrent socket limit (default infinity) 24 | -q, --quiet disable logging 25 | -t, --tmpfile write files to .tmp while downloading 26 | --proxy specify a proxy to use 27 | --no-strict-ssl disable strict SSL cehcking 28 | ``` 29 | 30 | ### examples 31 | 32 | ``` 33 | nugget http://foo.com/bar.jpg 34 | # downloads bar.jpg and stores it in the current directory 35 | ``` 36 | 37 | or 38 | 39 | ``` 40 | nugget http://foo.com/bar.jpg -O baz.jpg 41 | # saves it as baz.jpg. you can also do lowercase -o 42 | ``` 43 | 44 | if you get a statusCode of 300 or greater nugget will stop. you can force it to stream the response into a file anyway by doing `nugget http://404link.com/file.html -f` or `--force` works too 45 | 46 | you can also download multiple files, just pass multiple urls: 47 | 48 | ![download multiple](multiple.png) 49 | 50 | ## options 51 | 52 | The following options are recognized by nugget: 53 | 54 | - `-o|-O|--out` - specify the filename to write to. this only works if you are downloading a single file 55 | - `-d|--dir` - save files in a directory other than the current one. 56 | - `-c|--continue` - resume downloads if a partially complete target file already exists. If the target file exists and is the same size as the remote file, nothing will be done. 57 | - `-f|--force` - force the server response to be saved to the target file, even if it's a non-successful status code. 58 | - `-s|--sockets` - default Infinity. specify the number of http sockets to use at once (this controls concurrency) 59 | - `-q|--quiet` - disable logging 60 | - `-t, --tmpfile` - write files to .tmp while downloading 61 | - `--proxy` - specify a proxy to use 62 | - `--no-strict-ssl` - disable strict ssl 63 | -------------------------------------------------------------------------------- /test/cli.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs') 2 | var path = require('path') 3 | var spawn = require('tape-spawn') 4 | var test = require('tape') 5 | 6 | test('usage', function (t) { 7 | var child = spawn(t, path.join(__dirname, '..', 'bin.js')) 8 | child.stdout.match(fs.readFileSync(path.join(__dirname, '..', 'usage.txt')).toString() + '\n') 9 | child.stderr.empty() 10 | child.end() 11 | }) 12 | -------------------------------------------------------------------------------- /test/resume.html: -------------------------------------------------------------------------------- 1 | hello -------------------------------------------------------------------------------- /test/resume.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs') 2 | var http = require('http') 3 | var nugget = require('../') 4 | var path = require('path') 5 | var test = require('tape') 6 | 7 | var data = new Buffer('hello everybody I am the data') 8 | 9 | var testServer = http.createServer(function (req, res) { 10 | if (!req.headers['range']) { 11 | res.setHeader('content-length', data.length) 12 | res.setHeader('accept-ranges', 'bytes') 13 | res.end(data) 14 | } else { 15 | var range = req.headers['range'].split('=').pop().split('-').map(function (s) { 16 | return parseInt(s, 10) 17 | }) 18 | res.setHeader('content-length', range[1] - range[0]) 19 | res.setHeader('content-range', range[0] + '-' + range[1] + '/' + data.length) 20 | res.end(data.slice(range[0], range[1])) 21 | } 22 | }) 23 | 24 | var target = path.join(__dirname, 'foobar.html') 25 | if (fs.existsSync(target)) fs.unlinkSync(target) 26 | 27 | fs.writeFileSync(target, data.slice(0, 10)) 28 | 29 | testServer.listen(0, function () { 30 | var port = this.address().port 31 | test('fetches rest of file', function (t) { 32 | nugget('http://localhost:' + port + '/foobar.html', {dir: __dirname, resume: true, quiet: true}, function (err) { 33 | if (err) t.ifErr(err) 34 | t.ok(fs.existsSync(target), 'downloaded file') 35 | t.equal(fs.statSync(target).size, data.length, 'file is complete') 36 | if (fs.existsSync(target)) fs.unlinkSync(target) 37 | t.end() 38 | testServer.close() 39 | }) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs') 2 | var http = require('http') 3 | var nugget = require('../') 4 | var path = require('path') 5 | var test = require('tape') 6 | 7 | var testServer = http.createServer(function (req, res) { 8 | res.end('hello') 9 | }) 10 | 11 | var target = path.join(__dirname, 'resume.html') 12 | if (fs.existsSync(target)) fs.unlinkSync(target) 13 | 14 | testServer.listen(0, function () { 15 | var port = this.address().port 16 | test('fetches file', function (t) { 17 | nugget('http://localhost:' + port + '/resume.html', {dir: __dirname, quiet: true}, function (err) { 18 | if (err) t.ifErr(err) 19 | t.ok(fs.existsSync(target), 'downloaded file') 20 | if (fs.existsSync(target)) fs.unlinkSync(target) 21 | t.end() 22 | }) 23 | }) 24 | 25 | test('has progress events', function (t) { 26 | var gotProgress = false 27 | var dl = nugget('http://localhost:' + port + '/resume.html', {dir: __dirname, quiet: true}, function (err) { 28 | t.notOk(err, 'no error') 29 | t.ok(gotProgress, 'got progress event') 30 | t.end() 31 | testServer.close() 32 | }) 33 | dl.once('progress', function (data) { 34 | t.ok(data.hasOwnProperty('percentage'), 'has percentage') 35 | gotProgress = true 36 | }) 37 | }) 38 | }) 39 | -------------------------------------------------------------------------------- /usage.txt: -------------------------------------------------------------------------------- 1 | Usage: nugget [options] 2 | -o, --output output filename 3 | -d, --dir output parent directory 4 | -c, --continue resume aborted download 5 | -f, --force ignore response codes > 299 6 | -s, --sockets concurrent socket limit (default infinity) 7 | -q, --quiet disable logging 8 | -t, --tmpfile write files to .tmp while downloading 9 | --proxy specify a proxy to use 10 | --no-strict-ssl disable strict SSL cehcking 11 | --------------------------------------------------------------------------------