├── test ├── fixtures │ ├── invalid.json │ └── root.json ├── fakeserver.coffee └── test-airbud.coffee ├── index.js ├── airbud.code-workspace ├── .travis.yml ├── .gitignore ├── LICENSE ├── Makefile ├── package.json ├── coffeelint.json ├── src └── Airbud.coffee ├── README.md ├── lib └── Airbud.js └── yarn.lock /test/fixtures/invalid.json: -------------------------------------------------------------------------------- 1 | {invalid.json 2 | } 3 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require("./lib/Airbud"); 2 | -------------------------------------------------------------------------------- /test/fixtures/root.json: -------------------------------------------------------------------------------- 1 | {"ok":"SERVER_ROOT","hostname":"evalina.transloadit.com"} 2 | -------------------------------------------------------------------------------- /airbud.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "." 5 | } 6 | ], 7 | "settings": {} 8 | } 9 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | - "4" 5 | # travis encrypt [subdomain]:[api token]@[room id] 6 | # notifications: 7 | # email: false 8 | # campfire: 9 | # rooms: 10 | # secure: xyz 11 | # on_failure: always 12 | # on_success: always 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # Compiled binary addons (http://nodejs.org/api/addons.html) 20 | build/Release 21 | 22 | # Dependency directory 23 | # Deployed apps should consider commenting this line out: 24 | # see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git 25 | node_modules 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Kevin van Zonneveld 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Licensed under MIT. 2 | # Copyright (2016) by Kevin van Zonneveld https://twitter.com/kvz 3 | # 4 | # https://www.npmjs.com/package/fakefile 5 | # 6 | # Please do not edit this file directly, but propose changed upstream instead: 7 | # https://github.com/kvz/fakefile/blob/master/Makefile 8 | # 9 | # This Makefile offers convience shortcuts into any Node.js project that utilizes npm scripts. 10 | # It functions as a wrapper around the actual listed in `package.json` 11 | # So instead of typing: 12 | # 13 | # $ npm script build:assets 14 | # 15 | # you could also type: 16 | # 17 | # $ make build-assets 18 | # 19 | # Notice that colons (:) are replaced by dashes for Makefile compatibility. 20 | # 21 | # The benefits of this wrapper are: 22 | # 23 | # - You get to keep the the scripts package.json, which is more portable 24 | # (Makefiles & Windows are harder to mix) 25 | # - Offer a polite way into the project for developers coming from different 26 | # languages (npm scripts is obviously very Node centric) 27 | # - Profit from better autocomplete (make ) than npm currently offers. 28 | # OSX users will have to install bash-completion 29 | # (http://davidalger.com/development/bash-completion-on-os-x-with-brew/) 30 | 31 | define npm_script_targets 32 | TARGETS := $(shell node -e 'for (var k in require("./package.json").scripts) {console.log(k.replace(/:/g, "-"));}') 33 | $$(TARGETS): 34 | npm run $(subst -,:,$(MAKECMDGOALS)) 35 | 36 | .PHONY: $$(TARGETS) 37 | endef 38 | 39 | $(eval $(call npm_script_targets)) 40 | 41 | # These npm run scripts are available, without needing to be mentioned in `package.json` 42 | install: 43 | npm install 44 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "airbud", 3 | "version": "4.0.0", 4 | "description": "node.js request wrapper adding support for retries, exponential back-off, fixture serving, JSON", 5 | "keywords": [ 6 | "http", 7 | "request", 8 | "json", 9 | "retries", 10 | "testing", 11 | "fixtures" 12 | ], 13 | "author": "Kevin van Zonneveld ", 14 | "engines": { 15 | "node": ">= 0.10.0" 16 | }, 17 | "dependencies": { 18 | "depurar": "0.3.0", 19 | "request": "2.88.2", 20 | "retry": "0.12.0" 21 | }, 22 | "devDependencies": { 23 | "chai": "4.3.9", 24 | "coffee-script": "1.12.7", 25 | "coffeelint": "2.1.0", 26 | "fakefile": "0.0.9", 27 | "mocha": "3.2.0", 28 | "next-update": "3.6.0", 29 | "should": "13.2.3" 30 | }, 31 | "repository": { 32 | "type": "git", 33 | "url": "git://github.com/kvz/airbud.git" 34 | }, 35 | "directories": { 36 | "lib": "./lib" 37 | }, 38 | "scripts": { 39 | "build": "coffee -c -o lib src", 40 | "lint": "coffeelint --file ./coffeelint.json src", 41 | "release:major": "env SEMANTIC=major npm run release", 42 | "release:minor": "env SEMANTIC=minor npm run release", 43 | "release:patch": "env SEMANTIC=patch npm run release", 44 | "release": "npm version ${SEMANTIC:-patch} -m \"Release %s\" && npm run build && git push && git push --tags && npm publish", 45 | "test": "npm run build && env DEBUG=Airbud:* mocha --compilers coffee:coffee-script --require \"coffee-script/register\" --reporter spec test/ --grep \"${GREP}\"", 46 | "upgrade:modules": "next-update --keep true --tldr" 47 | }, 48 | "license": "MIT", 49 | "main": "./index" 50 | } 51 | -------------------------------------------------------------------------------- /test/fakeserver.coffee: -------------------------------------------------------------------------------- 1 | http = require "http" 2 | debug = require("depurar")("Airbud") 3 | util = require "util" 4 | 5 | class Fakeserver 6 | requestCnt : 0 7 | createServer: (params = {}) -> 8 | params.numberOfFails ?= 0 9 | params.delay ?= {} 10 | params.redirect ?= {} 11 | params.port ?= 7000 12 | @requestCnt = 0 13 | expectedRequests = 1 14 | 15 | if (maybe = Object.keys(params.delay).length) >= expectedRequests 16 | expectedRequests = maybe 17 | if (maybe = Object.keys(params.redirect).length) >= expectedRequests 18 | expectedRequests = maybe 19 | 20 | server = http.createServer (req, res) => 21 | cnt = ++@requestCnt 22 | delay = params.delay[cnt] 23 | redirect = params.redirect[cnt] 24 | 25 | setTimeout -> 26 | if req.url == "/other-location" 27 | res.writeHead 200, 28 | "content-type": "application/json" 29 | res.end '{ "msg": "Arrived at other location" }' 30 | return 31 | 32 | if redirect == true 33 | res.writeHead 301, 34 | "location": "/other-location" 35 | res.end() 36 | return 37 | 38 | if cnt <= params.numberOfFails 39 | res.writeHead 500, 40 | "content-type": "application/json" 41 | res.end '{ "msg": "Internal Server Error" }' 42 | return 43 | 44 | res.writeHead 202, 45 | "content-type": "application/json" 46 | 47 | payload = 48 | msg: "OK" 49 | 50 | if req.headers? 51 | payload.received_headers = req.headers 52 | 53 | res.end JSON.stringify payload 54 | 55 | 56 | # debug "#{cnt} of #{expectedRequests}" 57 | if cnt >= expectedRequests 58 | # debug "Closing server" 59 | try 60 | # Might have been closed by Airbud already due to delay param 61 | server.close() 62 | catch e 63 | console.log e 64 | 65 | , delay 66 | server.listen params.port 67 | return "http://localhost:#{params.port}" 68 | 69 | module.exports = Fakeserver 70 | -------------------------------------------------------------------------------- /coffeelint.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrow_spacing": { 3 | "level": "ignore" 4 | }, 5 | "camel_case_classes": { 6 | "level": "error" 7 | }, 8 | "coffeescript_error": { 9 | "level": "error" 10 | }, 11 | "colon_assignment_spacing": { 12 | "level": "ignore", 13 | "spacing": { 14 | "left": 0, 15 | "right": 0 16 | } 17 | }, 18 | "cyclomatic_complexity": { 19 | "value": 10, 20 | "level": "ignore" 21 | }, 22 | "duplicate_key": { 23 | "level": "error" 24 | }, 25 | "empty_constructor_needs_parens": { 26 | "level": "ignore" 27 | }, 28 | "indentation": { 29 | "value": 2, 30 | "level": "error" 31 | }, 32 | "line_endings": { 33 | "level": "ignore", 34 | "value": "unix" 35 | }, 36 | "max_line_length": { 37 | "value": 100, 38 | "level": "error", 39 | "limitComments": true 40 | }, 41 | "missing_fat_arrows": { 42 | "level": "ignore" 43 | }, 44 | "newlines_after_classes": { 45 | "value": 3, 46 | "level": "ignore" 47 | }, 48 | "no_backticks": { 49 | "level": "error" 50 | }, 51 | "no_debugger": { 52 | "level": "warn" 53 | }, 54 | "no_empty_functions": { 55 | "level": "ignore" 56 | }, 57 | "no_empty_param_list": { 58 | "level": "ignore" 59 | }, 60 | "no_implicit_braces": { 61 | "level": "ignore", 62 | "strict": true 63 | }, 64 | "no_implicit_parens": { 65 | "strict": true, 66 | "level": "ignore" 67 | }, 68 | "no_interpolation_in_single_quotes": { 69 | "level": "ignore" 70 | }, 71 | "no_plusplus": { 72 | "level": "ignore" 73 | }, 74 | "no_stand_alone_at": { 75 | "level": "ignore" 76 | }, 77 | "no_tabs": { 78 | "level": "error" 79 | }, 80 | "no_throwing_strings": { 81 | "level": "error" 82 | }, 83 | "no_trailing_semicolons": { 84 | "level": "error" 85 | }, 86 | "no_trailing_whitespace": { 87 | "level": "error", 88 | "allowed_in_comments": false, 89 | "allowed_in_empty_lines": true 90 | }, 91 | "no_unnecessary_double_quotes": { 92 | "level": "ignore" 93 | }, 94 | "no_unnecessary_fat_arrows": { 95 | "level": "warn" 96 | }, 97 | "non_empty_constructor_needs_parens": { 98 | "level": "ignore" 99 | }, 100 | "space_operators": { 101 | "level": "ignore" 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /src/Airbud.coffee: -------------------------------------------------------------------------------- 1 | request = require "request" 2 | fs = require "fs" 3 | retry = require "retry" 4 | 5 | class Airbud 6 | @_defaults: 7 | # Timeout of a single operation 8 | operationTimeout: 30000 9 | 10 | # Retry 5 times over 10 minutes 11 | # http://www.wolframalpha.com/input/?i=Sum%5Bx%5Ek+*+5%2C+%7Bk%2C+0%2C+4%7D%5D+%3D+10+*+60+%26%26+x+%3E+0 12 | # The maximum amount of times to retry the operation 13 | retries: 4 14 | 15 | # The exponential factor to use 16 | factor: 2.99294 17 | 18 | # The number of milliseconds before starting the first retry 19 | minInterval: 5 * 1000 20 | 21 | # The maximum number of milliseconds between two retries 22 | maxInterval: Infinity 23 | 24 | # Randomizes the intervals by multiplying with a factor between 1 to 2 25 | randomize: true 26 | 27 | # Automatically parse json 28 | parseJson: null 29 | 30 | # Includes the full response object in the meta property of the main callback 31 | fetchResponseObj: false 32 | 33 | # A key to find in the rootlevel of the parsed json. 34 | # If not found, Airbud will error out 35 | expectedKey: null 36 | 37 | # An array of allowed HTTP Status codes. If specified, 38 | # Airbud will error out if the actual status doesn't match. 39 | # 30x redirect codes are followed automatically. 40 | expectedStatus: "20x" 41 | 42 | # Custom headers to submit in the request 43 | headers: [] 44 | 45 | # Custom auth to submit in the request 46 | auth: null 47 | 48 | @getDefaults: -> 49 | return Airbud._defaults 50 | 51 | @setDefaults: (options) -> 52 | for key, val of options 53 | Airbud._defaults[key] = val 54 | 55 | @json: (options, cb) -> 56 | airbud = new Airbud options, parseJson: true 57 | 58 | Airbud.retrieve airbud, cb 59 | 60 | @retrieve: (options, cb) -> 61 | if options instanceof Airbud 62 | airbud = options 63 | else 64 | airbud = new Airbud options 65 | 66 | try 67 | airbud.fetch cb 68 | catch err 69 | err.message = "Got an error while retrieving #{airbud.url}. #{err}" 70 | cb err 71 | 72 | constructor: (optionSets...) -> 73 | optionSets.unshift Airbud.getDefaults() 74 | 75 | for options in optionSets 76 | if typeof options == "string" 77 | options = url: options 78 | 79 | for key, val of options 80 | this[key] = val 81 | 82 | # Normalize expectedStatus as we allow these input formats: 83 | # - RegExp 84 | # - 200 85 | # - "20x" 86 | # - [ "20x", "40x" ] 87 | # - "xxx" 88 | if @expectedStatus? and @expectedStatus not instanceof RegExp 89 | if @expectedStatus not instanceof Array 90 | @expectedStatus = [ @expectedStatus ] 91 | @expectedStatus = @expectedStatus 92 | .join "|" 93 | .replace /x/g, "\\d" 94 | @expectedStatus = new RegExp "^#{@expectedStatus}$" 95 | 96 | fetch: (mainCb) -> 97 | operation = retry.operation 98 | retries : @retries 99 | factor : @factor 100 | minTimeout: @minInterval 101 | maxTimeout: @maxInterval 102 | randomize : @randomize 103 | 104 | # Setup timeouts for single operation 105 | cbOperationTimeout = null 106 | timeoutErr = null 107 | operationStart = null 108 | calledCallbacks = {} 109 | 110 | cb = (err, data, res) => 111 | if calledCallbacks[operationStart] 112 | return 113 | 114 | calledCallbacks[operationStart] = true 115 | operationDurations += +new Date - operationStart 116 | 117 | if operation.retry(err) 118 | return 119 | 120 | totalDuration = +new Date - totalStart 121 | meta = 122 | statusCode : res?.statusCode 123 | errors : operation.errors() 124 | attempts : operation.attempts() 125 | totalDuration : totalDuration 126 | operationDuration: Math.floor(operationDurations / operation.attempts()) 127 | returnErr = if err then operation.mainError() else null 128 | 129 | if @fetchResponseObj 130 | meta.responseObj = res 131 | 132 | mainCb returnErr, data, meta 133 | 134 | if @operationTimeout? 135 | cbOperationTimeout = 136 | timeout: @operationTimeout 137 | cb : => 138 | msg = "Operation timeout of #{@operationTimeout}ms reached." 139 | timeoutErr = new Error msg 140 | cb timeoutErr 141 | 142 | totalStart = +new Date 143 | operationDurations = 0 144 | operation.attempt (currentAttempt) => 145 | operationStart = +new Date 146 | calledCallbacks[operationStart] = false 147 | @_execute cb 148 | , cbOperationTimeout 149 | 150 | _execute: (cb) -> 151 | # Validate 152 | if !@url 153 | err = new Error "You did not specify a url to fetch" 154 | return cb err 155 | 156 | if @url.indexOf("file://") == 0 157 | # Url can also be local json to inject test fixtures 158 | path = @url.substr(7, @url.length).split("?")[0] 159 | fs.readFile path, "utf8", (err, buf) => 160 | if err 161 | returnErr = new Error "Cannot open '#{path}'. #{err.message}" 162 | return cb returnErr 163 | 164 | @_handleData buf, {}, cb 165 | 166 | return 167 | 168 | reqOpts = 169 | url: @url 170 | 171 | if @headers? 172 | reqOpts.headers = @headers 173 | 174 | if @auth? 175 | reqOpts.auth = @auth 176 | 177 | request.get reqOpts, (err, res, buf) => 178 | if err 179 | return cb err, buf, res 180 | 181 | if @expectedStatus? 182 | if not @expectedStatus.test(res.statusCode + "") 183 | msg = "HTTP Status #{res.statusCode} received when fetching '#{@url}'. " 184 | msg += "Expected: #{@expectedStatus}. #{(buf + "").substr(0, 30)}.." 185 | err = new Error msg 186 | return cb err, buf, res 187 | 188 | @_handleData buf, res, cb 189 | 190 | _handleData: (buf, res, cb) -> 191 | data = buf 192 | 193 | if !@parseJson 194 | return cb null, data, res 195 | 196 | try 197 | data = JSON.parse data 198 | catch err 199 | err.message = "Got an error while parsing json for #{@url}. #{err}" 200 | return cb err, data, res 201 | 202 | if @expectedKey? && !data[@expectedKey]? 203 | msg = "Invalid body received when fetching '#{@url}'. \n" 204 | msg += "No key: #{@expectedKey}. #{buf}" 205 | err = new Error msg 206 | return cb err, data, res 207 | 208 | cb null, data, res 209 | 210 | module.exports = Airbud 211 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | [![Build Status](https://secure.travis-ci.org/kvz/airbud.png?branch=master)](http://travis-ci.org/kvz/airbud "Check this project's build status on TravisCI") 3 | 4 | 5 | Retrieving stuff from the web is unreliable. Airbud adds retries for production, and fixture support for test. 6 | 7 | ![air_bud_-_golden_receiver](https://cloud.githubusercontent.com/assets/26752/3387034/c4cc56d0-fc79-11e3-8d0a-09ef9280bb0f.jpg) 8 | 9 | Airbud is a wrapper around [request](https://www.npmjs.org/package/request) with support for for handling JSON, retries with exponential backoff & injecting fixtures. This will save you some boilerplate and allow you to easier test your applications. 10 | 11 | ## Install 12 | 13 | Inside your project, type 14 | 15 | ```bash 16 | npm install --save airbud 17 | ``` 18 | 19 | ## Use 20 | 21 | To use Airbud, first require it 22 | 23 | In JavaScript 24 | 25 | ```javascript 26 | var Airbud = require('airbud'); 27 | ``` 28 | 29 | Or CoffeeScript: 30 | 31 | ```coffeescript 32 | Airbud = require "airbud" 33 | ``` 34 | 35 | Airbud doesn't care. 36 | 37 | ### Example: simple 38 | 39 | A common usecase is getting remote JSON. By default `Airbud.json` will already: 40 | 41 | - Timeout each single operation in 30 seconds 42 | - [Retry 5 times over 10 minutes](http://www.wolframalpha.com/input/?i=Sum%5Bx%5Ek+*+5%2C+%7Bk%2C+0%2C+4%7D%5D+%3D+10+*+60+%26%26+x+%3E+0) 43 | - Return parsed JSON 44 | - Return `err` if 45 | - A non-2xx HTTP code is returned (3xx redirects are followed first) 46 | - The json could not be parsed 47 | 48 | In CoffeeScript: 49 | 50 | ```coffeescript 51 | Airbud.json "https://api.github.com/events", (err, events, meta) -> 52 | if err 53 | throw err 54 | console.log events[0].created_at 55 | ``` 56 | 57 | ### Example: local JSON fixtures 58 | 59 | Say you're writing an app that among things, retrieves public events from the GitHub API. 60 | 61 | Using [environment variables](https://github.com/kvz/environmental), your production environment will have a `GITHUB_EVENTS_ENDPOINT` of `"https://api.github.com/events"`, but when you `source envs/test.sh`, it can be `"file://./fixtures/github-events.json"`. 62 | 63 | Now just let `Airbud.retrieve` the `process.env.GITHUB_EVENTS_ENDPOINT`, and it will either retrieve the fixture, or the real thing, depending which environment you are in. 64 | 65 | This makes it easy to test your app's depending functions, without having to worry about GitHub ratelimiting, downtime, or sloth when running your tests. All of this without making your app aware, or changing it's flow. In JavaScript: 66 | 67 | ```javascript 68 | var opts = { 69 | url: process.env.GITHUB_EVENTS_ENDPOINT, 70 | }; 71 | 72 | Airbud.json(opts, function (err, events, meta) { 73 | if (err) { 74 | throw err; 75 | } 76 | 77 | console.log('Number of attempts: '+ meta.attempts); 78 | console.log('Time it took to complete all attempts: ' + meta.totalDuration); 79 | console.log('Some auto-parsed JSON: ' + events[0].created_at); 80 | }); 81 | ``` 82 | 83 | ### Example: customize 84 | 85 | You don't have to use environment vars or the local fixture feature. You can also use Airbud as a wrapper around request to profit from retries with exponential backoffs. Here's how to customize the retry flow in CoffeeScript: 86 | 87 | ```coffeescript 88 | opts = 89 | retries : 3 90 | randomize : true 91 | factor : 3 92 | minInterval : 3 * 1000 93 | maxInterval : 30 * 1000 94 | operationTimeout: 10 * 1000 95 | expectedStatus : /^[2345]\d{2}$/ 96 | expectedKey : "status" 97 | url : "https://api.github.com/events" 98 | 99 | Airbud.retrieve opts, (err, events, meta) -> 100 | if err 101 | throw err 102 | 103 | console.log events 104 | ``` 105 | 106 | 107 | ### Example: 3 retries in one minute, retry after 3s timeout for each operation 108 | 109 | ```coffeescript 110 | opts = 111 | url : "https://api2.transloadit.com/instances" 112 | retries : 2 113 | factor : 1.73414 114 | expectedKey : "instances" 115 | operationTimeout: 3000 116 | ``` 117 | 118 | Some other tricks up Airbud's sleeves are `expectedKey` and `expectedStatus`, to make it error out when you get invalid data, without you writing all the extra `if` and maybes. 119 | 120 | 121 | ## Options 122 | 123 | Here are all of Airbud's options and their default values. 124 | 125 | ```coffeescript 126 | # Timeout of a single operation 127 | operationTimeout: 30000 128 | 129 | # Retry 5 times over 10 minutes 130 | # http://www.wolframalpha.com/input/?i=Sum%5Bx%5Ek+*+5%2C+%7Bk%2C+0%2C+4%7D%5D+%3D+10+*+60+%26%26+x+%3E+0 131 | # The maximum amount of times to retry the operation 132 | retries: 4 133 | 134 | # The exponential factor to use 135 | factor: 2.99294 136 | 137 | # The number of milliseconds before starting the first retry 138 | minInterval: 5 * 1000 139 | 140 | # The maximum number of milliseconds between two retries 141 | maxInterval: Infinity 142 | 143 | # Randomizes the intervals by multiplying with a factor between 1 to 2 144 | randomize: true 145 | 146 | # Automatically parse json 147 | parseJson: null 148 | 149 | # A key to find in the rootlevel of the parsed json. 150 | # If not found, Airbud will error out 151 | expectedKey: null 152 | 153 | # An array of allowed HTTP Status codes. If specified, 154 | # Airbud will error out if the actual status doesn't match. 155 | # 30x redirect codes are followed automatically. 156 | expectedStatus: "20x" 157 | 158 | # Custom headers to submit in the request 159 | headers: [] 160 | ``` 161 | 162 | ## Meta 163 | 164 | Besides, `err`, `data`, Airbud returns a third argument `meta`. It contains some meta data about the operation(s) for your convenience. 165 | 166 | ```coffeescript 167 | # The HTTP status code returned 168 | statusCode 169 | # An array of all errors that occured 170 | errors 171 | # Number of attempts before Airbud was able to retrieve, or gave up 172 | attempts 173 | # Total duration of all attempts 174 | totalDuration 175 | # Average duration of a single attempt 176 | operationDuration 177 | ``` 178 | 179 | ## Contribute 180 | 181 | I'd be happy to accept pull requests. If you plan on working on something big, please first give a shout! 182 | 183 | ### Compile 184 | 185 | This project is written in [CoffeeScript](http://coffeescript.org/), but the JavaScript it generates is commited back into the repository so people can use this module without a CoffeeScript dependency. If you want to work on the source, please do so in `./src` and type: `make build` or `make test` (also builds first). Please don't edit generated JavaScript in `./lib`! 186 | 187 | ### Test 188 | 189 | Run tests via `make test`. 190 | 191 | To single out a test use `make test GREP=30x` 192 | 193 | ### Release 194 | 195 | Releasing a new version to npmjs.org can be done via `make release-patch` (or minor / major, depending on the [semantic versioning](http://semver.org/) impact of your changes). This: 196 | 197 | - updates the `package.json` 198 | - saves a release commit with the updated version in Git 199 | - pushes to GitHub 200 | - publishes to npmjs.org 201 | 202 | ## Authors 203 | 204 | * [Kevin van Zonneveld](https://twitter.com/kvz) 205 | 206 | ## Related 207 | 208 | - [got](https://github.com/sindresorhus/got) has a similar purpose but a much larger community to maintain it. Consider using it. Airbud however does provide `meta` information (in addition to `err` and `data` which are similar to got), that passes you the number of retries involved as well as the time it took for the first successful operation to complete. Airbud also supports `file://` URLs meaning you could substitute URLs with fixtures easily for your project's testing purposes. 209 | 210 | ## License 211 | 212 | [MIT Licensed](LICENSE). 213 | -------------------------------------------------------------------------------- /test/test-airbud.coffee: -------------------------------------------------------------------------------- 1 | should = require("chai").should() 2 | Fakeserver = require "./fakeserver" 3 | debug = require("depurar")("Airbud") 4 | util = require "util" 5 | expect = require("chai").expect 6 | Airbud = require "../src/Airbud" 7 | fixtureDir = "#{__dirname}/fixtures" 8 | fakeserver = new Fakeserver() 9 | port = 7000 10 | 11 | 12 | Airbud.setDefaults 13 | minInterval: 1 14 | maxInterval: 1 15 | retries : 1 16 | 17 | describe "airbud", -> 18 | @timeout 10000 # <-- This is the Mocha timeout, allowing tests to run longer 19 | describe "retrieve", -> 20 | it "should not try to parse JSON by default", (done) -> 21 | opts = 22 | url: fakeserver.createServer(port: ++port) 23 | headers: 24 | "user-Agent": "Airbud" 25 | Airbud.retrieve opts, (err, data, meta) -> 26 | expect(err).to.be.null 27 | parsed = JSON.parse data 28 | expect(parsed).to.have.property("msg").that.equals "OK" 29 | expect(parsed).to.have.property("received_headers").with.property("user-agent").that.equals "Airbud" 30 | meta.should.have.property("statusCode").that.equals 202 31 | meta.should.have.property("attempts").that.equals 1 32 | done() 33 | 34 | describe "json", -> 35 | it "should be able to take a plain url as options argument", (done) -> 36 | url = fakeserver.createServer(port: ++port) 37 | Airbud.json url, (err, data, meta) -> 38 | expect(err).to.be.null 39 | data.should.have.property("msg").that.equals "OK" 40 | meta.should.have.property("statusCode").that.equals 202 41 | meta.should.have.property("attempts").that.equals 1 42 | done() 43 | 44 | it "should (re)try 500 HTTP Status 5 times", (done) -> 45 | opts = 46 | url : fakeserver.createServer(port: ++port, numberOfFails: 99) 47 | retries : 4 48 | operationTimeout: 10 49 | Airbud.json opts, (err, data, meta) -> 50 | err.should.have.property("message").that.match /500/ 51 | meta.should.have.property("statusCode").that.equals 500 52 | meta.should.have.property("attempts").that.equals 5 53 | done() 54 | 55 | it "should be able to get a 500 HTTP Status without error if we're ambivalent about expectedStatus", (done) -> 56 | opts = 57 | url : fakeserver.createServer(port: ++port, numberOfFails: 1) 58 | retries : 0 59 | expectedStatus: [ "xxx" ] 60 | Airbud.json opts, (err, data, meta) -> 61 | expect(err).to.be.null 62 | meta.should.have.property("statusCode").that.equals 500 63 | meta.should.have.property("attempts").that.equals 1 64 | data.should.have.property("msg").that.equals "Internal Server Error" 65 | done() 66 | 67 | it "should retry until we receive an expected HTTP Status", (done) -> 68 | opts = 69 | url : fakeserver.createServer(port: ++port, numberOfFails: 3) 70 | retries : 4 71 | expectedStatus: [ "20x", "30x" ] 72 | Airbud.json opts, (err, data, meta) -> 73 | expect(err).to.be.null 74 | meta.should.have.property("attempts").that.equals 4 75 | data.should.have.property("msg").that.equals "OK" 76 | done() 77 | 78 | it "should follow 301 redirect", (done) -> 79 | opts = 80 | url : fakeserver.createServer(port: ++port, redirect: {1: true}) 81 | expectedStatus : 200 82 | Airbud.json opts, (err, data, meta) -> 83 | expect(err).to.be.null 84 | meta.should.have.property("attempts").that.equals 1 85 | data.should.have.property("msg").that.equals "Arrived at other location" 86 | done() 87 | 88 | it "should retry if the first operation is too slow", (done) -> 89 | opts = 90 | url : fakeserver.createServer(port: ++port, delay: {1: 400, 2: 400, 3: 1}) 91 | retries : 2 92 | operationTimeout: 100 93 | minInterval : 1 94 | maxInterval : 1 95 | randomize : false 96 | Airbud.json opts, (err, data, meta) -> 97 | expect(err).to.be.null 98 | data.should.have.property("msg").that.equals "OK" 99 | meta.should.have.property("attempts").that.equals 3 100 | # should be 2x operationTimeout, then the 3rd try is quick. So 201ms, but throwing in some inaccuracy: 101 | meta.should.have.property("totalDuration").that.is.within 100, 250 102 | done() 103 | 104 | it "should be able to serve a local fixture", (done) -> 105 | opts = 106 | url: "file://#{fixtureDir}/root.json" 107 | Airbud.json opts, (err, data, meta) -> 108 | expect(err).to.be.null 109 | meta.should.have.property("attempts").that.equals 1 110 | done() 111 | 112 | it "should retry and then fail on not having an expected key in root of local fixture", (done) -> 113 | opts = 114 | url : "file://#{fixtureDir}/root.json" 115 | expectedKey: "this-key-wont-exist" 116 | 117 | Airbud.json opts, (err, data, meta) -> 118 | meta.should.have.property("attempts").that.equals 2 119 | expect(err).to.match /No key: this-key-wont-exist/ 120 | done() 121 | 122 | it "should fail on not found, with 2 attempts on missing local fixture", (done) -> 123 | opts = 124 | url: "file://#{fixtureDir}/non-existing.json" 125 | 126 | Airbud.json opts, (err, data, meta) -> 127 | meta.should.have.property("attempts").that.equals 2 128 | err.should.have.property("message").that.match /Cannot open/ 129 | done() 130 | 131 | it "should only fire the callback once, no matter how many attempts", (done) -> 132 | opts = 133 | retries: 5 134 | url : "file://#{fixtureDir}/non-existing.json" 135 | 136 | cnt = 0 137 | Airbud.json opts, (err, data, meta) -> 138 | meta.should.have.property("attempts").that.equals 6 139 | err.should.have.property("message").that.match /Cannot open/ 140 | expect(++cnt).to.equal 1 141 | done() 142 | 143 | it "should only fire the callback once, even for retries after timeouts", (done) -> 144 | opts = 145 | url : fakeserver.createServer(port: ++port, delay: {1: 1000, 2: 1000}) 146 | retries : 1 147 | minInterval : 1 148 | maxInterval : 1 149 | operationTimeout: 1 150 | factor : 1.3524 # 3x in 30 seconds 151 | expectedStatus: [ 200 ] 152 | 153 | cnt = 0 154 | Airbud.json opts, (err, data, meta) -> 155 | err.should.have.property("message").that.match /Operation timeout of 1ms reached/ 156 | meta.should.have.property("attempts").that.equals 2 157 | expect(++cnt).to.equal 1 158 | done() 159 | 160 | it "should not throw exception for unresolvable domain", (done) -> 161 | opts = 162 | url: "http://asd.asdasdasd.asdfnon-existingsadf.com/non-existing.json" 163 | 164 | Airbud.json opts, (err, data, meta) -> 165 | meta.should.have.property("attempts").that.equals 2 166 | err.should.have.property("message").that.match /getaddrinfo ENOTFOUND/ 167 | done() 168 | 169 | it "should not throw exception for invalid protocol", (done) -> 170 | opts = 171 | url: "httpasd://example.com/non-existing.json" 172 | 173 | Airbud.json opts, (err, data, meta) -> 174 | meta.should.have.property("attempts").that.equals 2 175 | err.should.have.property("message").that.match /Invalid protocol: httpasd:/ 176 | done() 177 | 178 | it "should not throw exception for invalid json", (done) -> 179 | opts = 180 | url: "file://#{fixtureDir}/invalid.json" 181 | 182 | Airbud.json opts, (err, data, meta) -> 183 | meta.should.have.property("attempts").that.equals 2 184 | err.should.have.property("message").that.match /Got an error while parsing json for file:.*\. SyntaxError: Unexpected token i/ 185 | done() 186 | 187 | 188 | it "should be possible to set global defaults", (done) -> 189 | Airbud.setDefaults 190 | retries: 9 191 | 192 | Airbud.json "httpasd://example.com/non-existing.json", (err, data, meta) -> 193 | meta.should.have.property("attempts").that.equals 10 194 | err.should.have.property("message").that.match /Invalid protocol: httpasd:/ 195 | done() 196 | 197 | it "should include the full response object if so desired", (done) -> 198 | Airbud.setDefaults 199 | fetchResponseObj: true 200 | 201 | Airbud.json "http://api2.transloadit.com/", (err, data, meta) -> 202 | meta.should.have.property("responseObj") 203 | done() 204 | -------------------------------------------------------------------------------- /lib/Airbud.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 2.5.1 2 | (function() { 3 | var Airbud, fs, request, retry; 4 | 5 | request = require("request"); 6 | 7 | fs = require("fs"); 8 | 9 | retry = require("retry"); 10 | 11 | Airbud = (function() { 12 | class Airbud { 13 | static getDefaults() { 14 | return Airbud._defaults; 15 | } 16 | 17 | static setDefaults(options) { 18 | var key, results, val; 19 | results = []; 20 | for (key in options) { 21 | val = options[key]; 22 | results.push(Airbud._defaults[key] = val); 23 | } 24 | return results; 25 | } 26 | 27 | static json(options, cb) { 28 | var airbud; 29 | airbud = new Airbud(options, { 30 | parseJson: true 31 | }); 32 | return Airbud.retrieve(airbud, cb); 33 | } 34 | 35 | static retrieve(options, cb) { 36 | var airbud, err; 37 | if (options instanceof Airbud) { 38 | airbud = options; 39 | } else { 40 | airbud = new Airbud(options); 41 | } 42 | try { 43 | return airbud.fetch(cb); 44 | } catch (error) { 45 | err = error; 46 | err.message = `Got an error while retrieving ${airbud.url}. ${err}`; 47 | return cb(err); 48 | } 49 | } 50 | 51 | constructor(...optionSets) { 52 | var i, key, len, options, val; 53 | optionSets.unshift(Airbud.getDefaults()); 54 | for (i = 0, len = optionSets.length; i < len; i++) { 55 | options = optionSets[i]; 56 | if (typeof options === "string") { 57 | options = { 58 | url: options 59 | }; 60 | } 61 | for (key in options) { 62 | val = options[key]; 63 | this[key] = val; 64 | } 65 | } 66 | // Normalize expectedStatus as we allow these input formats: 67 | // - RegExp 68 | // - 200 69 | // - "20x" 70 | // - [ "20x", "40x" ] 71 | // - "xxx" 72 | if ((this.expectedStatus != null) && !(this.expectedStatus instanceof RegExp)) { 73 | if (!(this.expectedStatus instanceof Array)) { 74 | this.expectedStatus = [this.expectedStatus]; 75 | } 76 | this.expectedStatus = this.expectedStatus.join("|").replace(/x/g, "\\d"); 77 | this.expectedStatus = new RegExp(`^${this.expectedStatus}$`); 78 | } 79 | } 80 | 81 | fetch(mainCb) { 82 | var calledCallbacks, cb, cbOperationTimeout, operation, operationDurations, operationStart, timeoutErr, totalStart; 83 | operation = retry.operation({ 84 | retries: this.retries, 85 | factor: this.factor, 86 | minTimeout: this.minInterval, 87 | maxTimeout: this.maxInterval, 88 | randomize: this.randomize 89 | }); 90 | // Setup timeouts for single operation 91 | cbOperationTimeout = null; 92 | timeoutErr = null; 93 | operationStart = null; 94 | calledCallbacks = {}; 95 | cb = (err, data, res) => { 96 | var meta, returnErr, totalDuration; 97 | if (calledCallbacks[operationStart]) { 98 | return; 99 | } 100 | calledCallbacks[operationStart] = true; 101 | operationDurations += +new Date() - operationStart; 102 | if (operation.retry(err)) { 103 | return; 104 | } 105 | totalDuration = +new Date() - totalStart; 106 | meta = { 107 | statusCode: res != null ? res.statusCode : void 0, 108 | errors: operation.errors(), 109 | attempts: operation.attempts(), 110 | totalDuration: totalDuration, 111 | operationDuration: Math.floor(operationDurations / operation.attempts()) 112 | }; 113 | returnErr = err ? operation.mainError() : null; 114 | if (this.fetchResponseObj) { 115 | meta.responseObj = res; 116 | } 117 | return mainCb(returnErr, data, meta); 118 | }; 119 | if (this.operationTimeout != null) { 120 | cbOperationTimeout = { 121 | timeout: this.operationTimeout, 122 | cb: () => { 123 | var msg; 124 | msg = `Operation timeout of ${this.operationTimeout}ms reached.`; 125 | timeoutErr = new Error(msg); 126 | return cb(timeoutErr); 127 | } 128 | }; 129 | } 130 | totalStart = +new Date(); 131 | operationDurations = 0; 132 | return operation.attempt((currentAttempt) => { 133 | operationStart = +new Date(); 134 | calledCallbacks[operationStart] = false; 135 | return this._execute(cb); 136 | }, cbOperationTimeout); 137 | } 138 | 139 | _execute(cb) { 140 | var err, path, reqOpts; 141 | if (!this.url) { 142 | err = new Error("You did not specify a url to fetch"); 143 | return cb(err); 144 | } 145 | if (this.url.indexOf("file://") === 0) { 146 | // Url can also be local json to inject test fixtures 147 | path = this.url.substr(7, this.url.length).split("?")[0]; 148 | fs.readFile(path, "utf8", (err, buf) => { 149 | var returnErr; 150 | if (err) { 151 | returnErr = new Error(`Cannot open '${path}'. ${err.message}`); 152 | return cb(returnErr); 153 | } 154 | return this._handleData(buf, {}, cb); 155 | }); 156 | return; 157 | } 158 | reqOpts = { 159 | url: this.url 160 | }; 161 | if (this.headers != null) { 162 | reqOpts.headers = this.headers; 163 | } 164 | if (this.auth != null) { 165 | reqOpts.auth = this.auth; 166 | } 167 | return request.get(reqOpts, (err, res, buf) => { 168 | var msg; 169 | if (err) { 170 | return cb(err, buf, res); 171 | } 172 | if (this.expectedStatus != null) { 173 | if (!this.expectedStatus.test(res.statusCode + "")) { 174 | msg = `HTTP Status ${res.statusCode} received when fetching '${this.url}'. `; 175 | msg += `Expected: ${this.expectedStatus}. ${(buf + "").substr(0, 30)}..`; 176 | err = new Error(msg); 177 | return cb(err, buf, res); 178 | } 179 | } 180 | return this._handleData(buf, res, cb); 181 | }); 182 | } 183 | 184 | _handleData(buf, res, cb) { 185 | var data, err, msg; 186 | data = buf; 187 | if (!this.parseJson) { 188 | return cb(null, data, res); 189 | } 190 | try { 191 | data = JSON.parse(data); 192 | } catch (error) { 193 | err = error; 194 | err.message = `Got an error while parsing json for ${this.url}. ${err}`; 195 | return cb(err, data, res); 196 | } 197 | if ((this.expectedKey != null) && (data[this.expectedKey] == null)) { 198 | msg = `Invalid body received when fetching '${this.url}'. \n`; 199 | msg += `No key: ${this.expectedKey}. ${buf}`; 200 | err = new Error(msg); 201 | return cb(err, data, res); 202 | } 203 | return cb(null, data, res); 204 | } 205 | 206 | }; 207 | 208 | Airbud._defaults = { 209 | // Timeout of a single operation 210 | operationTimeout: 30000, 211 | // Retry 5 times over 10 minutes 212 | // http://www.wolframalpha.com/input/?i=Sum%5Bx%5Ek+*+5%2C+%7Bk%2C+0%2C+4%7D%5D+%3D+10+*+60+%26%26+x+%3E+0 213 | // The maximum amount of times to retry the operation 214 | retries: 4, 215 | // The exponential factor to use 216 | factor: 2.99294, 217 | // The number of milliseconds before starting the first retry 218 | minInterval: 5 * 1000, 219 | // The maximum number of milliseconds between two retries 220 | maxInterval: 2e308, 221 | // Randomizes the intervals by multiplying with a factor between 1 to 2 222 | randomize: true, 223 | // Automatically parse json 224 | parseJson: null, 225 | // Includes the full response object in the meta property of the main callback 226 | fetchResponseObj: false, 227 | // A key to find in the rootlevel of the parsed json. 228 | // If not found, Airbud will error out 229 | expectedKey: null, 230 | // An array of allowed HTTP Status codes. If specified, 231 | // Airbud will error out if the actual status doesn't match. 232 | // 30x redirect codes are followed automatically. 233 | expectedStatus: "20x", 234 | // Custom headers to submit in the request 235 | headers: [], 236 | // Custom auth to submit in the request 237 | auth: null 238 | }; 239 | 240 | return Airbud; 241 | 242 | }).call(this); 243 | 244 | module.exports = Airbud; 245 | 246 | }).call(this); 247 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | agent-base@2: 6 | version "2.0.1" 7 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" 8 | dependencies: 9 | extend "~3.0.0" 10 | semver "~5.0.1" 11 | 12 | ajv@^6.5.5: 13 | version "6.12.6" 14 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 15 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 16 | dependencies: 17 | fast-deep-equal "^3.1.1" 18 | fast-json-stable-stringify "^2.0.0" 19 | json-schema-traverse "^0.4.1" 20 | uri-js "^4.2.2" 21 | 22 | ansi-align@^1.1.0: 23 | version "1.1.0" 24 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" 25 | dependencies: 26 | string-width "^1.0.1" 27 | 28 | ansi-escapes@^1.1.0: 29 | version "1.4.0" 30 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 31 | 32 | ansi-regex@^2.0.0: 33 | version "2.0.0" 34 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" 35 | 36 | ansi-regex@^2.1.1: 37 | version "2.1.1" 38 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 39 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 40 | 41 | ansi-styles@^2.2.1: 42 | version "2.2.1" 43 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 44 | 45 | app-root-path@1.3.0: 46 | version "1.3.0" 47 | resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-1.3.0.tgz#dc9a096d78a270ae3cbba6cd162f85f7de3edea4" 48 | 49 | arrify@^1.0.1: 50 | version "1.0.1" 51 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 52 | 53 | asap@^2.0.0: 54 | version "2.0.5" 55 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" 56 | 57 | asn1@~0.2.3: 58 | version "0.2.4" 59 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 60 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 61 | dependencies: 62 | safer-buffer "~2.1.0" 63 | 64 | assert-plus@^0.2.0: 65 | version "0.2.0" 66 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 67 | 68 | assert-plus@^1.0.0: 69 | version "1.0.0" 70 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 71 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 72 | 73 | assertion-error@^1.1.0: 74 | version "1.1.0" 75 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 76 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 77 | 78 | async@^2.0.1: 79 | version "2.6.4" 80 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" 81 | integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== 82 | dependencies: 83 | lodash "^4.17.14" 84 | 85 | asynckit@^0.4.0: 86 | version "0.4.0" 87 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 88 | 89 | aws-sign2@~0.6.0: 90 | version "0.6.0" 91 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 92 | 93 | aws-sign2@~0.7.0: 94 | version "0.7.0" 95 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 96 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 97 | 98 | aws4@^1.2.1: 99 | version "1.5.0" 100 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" 101 | 102 | aws4@^1.8.0: 103 | version "1.9.1" 104 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" 105 | integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== 106 | 107 | babel-runtime@^6.18.0: 108 | version "6.26.0" 109 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 110 | integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= 111 | dependencies: 112 | core-js "^2.4.0" 113 | regenerator-runtime "^0.11.0" 114 | 115 | balanced-match@^1.0.0: 116 | version "1.0.2" 117 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 118 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 119 | 120 | bcrypt-pbkdf@^1.0.0: 121 | version "1.0.2" 122 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 123 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 124 | dependencies: 125 | tweetnacl "^0.14.3" 126 | 127 | bl@~1.1.2: 128 | version "1.1.2" 129 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" 130 | dependencies: 131 | readable-stream "~2.0.5" 132 | 133 | bluebird@3.4.1: 134 | version "3.4.1" 135 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.1.tgz#b731ddf48e2dd3bedac2e75e1215a11bcb91fa07" 136 | 137 | boom@2.x.x: 138 | version "2.10.1" 139 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 140 | dependencies: 141 | hoek "2.x.x" 142 | 143 | boxen@^0.6.0: 144 | version "0.6.0" 145 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6" 146 | dependencies: 147 | ansi-align "^1.1.0" 148 | camelcase "^2.1.0" 149 | chalk "^1.1.1" 150 | cli-boxes "^1.0.0" 151 | filled-array "^1.0.0" 152 | object-assign "^4.0.1" 153 | repeating "^2.0.0" 154 | string-width "^1.0.1" 155 | widest-line "^1.0.0" 156 | 157 | brace-expansion@^1.1.7: 158 | version "1.1.11" 159 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 160 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 161 | dependencies: 162 | balanced-match "^1.0.0" 163 | concat-map "0.0.1" 164 | 165 | browser-stdout@1.3.0: 166 | version "1.3.0" 167 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 168 | integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= 169 | 170 | buffer-shims@^1.0.0: 171 | version "1.0.0" 172 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 173 | 174 | camelcase@^2.1.0: 175 | version "2.1.1" 176 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 177 | 178 | capture-stack-trace@^1.0.0: 179 | version "1.0.0" 180 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" 181 | 182 | caseless@~0.11.0: 183 | version "0.11.0" 184 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" 185 | 186 | caseless@~0.12.0: 187 | version "0.12.0" 188 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 189 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 190 | 191 | chai@4.3.9: 192 | version "4.3.9" 193 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.9.tgz#c934ab542b11cc933a963617f0f890274c66c042" 194 | integrity sha512-tH8vhfA1CfuYMkALXj+wmZcqiwqOfshU9Gry+NYiiLqIddrobkBhALv6XD4yDz68qapphYI4vSaqhqAdThCAAA== 195 | dependencies: 196 | assertion-error "^1.1.0" 197 | check-error "^1.0.3" 198 | deep-eql "^4.1.2" 199 | get-func-name "^2.0.0" 200 | loupe "^2.3.1" 201 | pathval "^1.1.1" 202 | type-detect "^4.0.5" 203 | 204 | chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1: 205 | version "1.1.3" 206 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 207 | dependencies: 208 | ansi-styles "^2.2.1" 209 | escape-string-regexp "^1.0.2" 210 | has-ansi "^2.0.0" 211 | strip-ansi "^3.0.0" 212 | supports-color "^2.0.0" 213 | 214 | changed-log@0.13.0: 215 | version "0.13.0" 216 | resolved "https://registry.yarnpkg.com/changed-log/-/changed-log-0.13.0.tgz#9865217c47dc3afbca338ec78dc72cefe4845be5" 217 | integrity sha1-mGUhfEfcOvvKM47Hjccs7+SEW+U= 218 | dependencies: 219 | bluebird "3.4.1" 220 | chalk "1.1.3" 221 | check-more-types "2.22.0" 222 | debug "2.2.0" 223 | github "2.4.0" 224 | inquirer "1.1.2" 225 | lazy-ass "1.5.0" 226 | lodash "3.10.1" 227 | package-json "2.4.0" 228 | parse-github-repo-url "1.3.0" 229 | ramda "0.15.1" 230 | update-notifier "1.0.3" 231 | 232 | chdir-promise@0.4.0: 233 | version "0.4.0" 234 | resolved "https://registry.yarnpkg.com/chdir-promise/-/chdir-promise-0.4.0.tgz#46dc602ed193197470140f152459a4382cf79974" 235 | integrity sha1-RtxgLtGTGXRwFA8VJFmkOCz3mXQ= 236 | dependencies: 237 | check-more-types "2.23.0" 238 | debug "^2.3.3" 239 | lazy-ass "1.5.0" 240 | q "1.1.2" 241 | spots "0.4.0" 242 | 243 | check-error@^1.0.3: 244 | version "1.0.3" 245 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" 246 | integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== 247 | dependencies: 248 | get-func-name "^2.0.2" 249 | 250 | check-more-types@2.21.0: 251 | version "2.21.0" 252 | resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.21.0.tgz#f40c43249eb93972018d0ccea0c1f5dedc58f912" 253 | 254 | check-more-types@2.22.0: 255 | version "2.22.0" 256 | resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.22.0.tgz#9b5971c7ede788ec400ed28e0a3601139a2488b4" 257 | 258 | check-more-types@2.23.0: 259 | version "2.23.0" 260 | resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.23.0.tgz#6226264d30b1095aa1c0a5b874edbdd5d2d0a66f" 261 | integrity sha1-YiYmTTCxCVqhwKW4dO291dLQpm8= 262 | 263 | check-more-types@2.24.0: 264 | version "2.24.0" 265 | resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" 266 | integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= 267 | 268 | check-types@1.4.0: 269 | version "1.4.0" 270 | resolved "https://registry.yarnpkg.com/check-types/-/check-types-1.4.0.tgz#eed63bbac9ea49a0e26a096314058b03b08dd62b" 271 | 272 | cli-boxes@^1.0.0: 273 | version "1.0.0" 274 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 275 | 276 | cli-color@1.2.0: 277 | version "1.2.0" 278 | resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.2.0.tgz#3a5ae74fd76b6267af666e69e2afbbd01def34d1" 279 | integrity sha1-OlrnT9drYmevZm5p4q+70B3vNNE= 280 | dependencies: 281 | ansi-regex "^2.1.1" 282 | d "1" 283 | es5-ext "^0.10.12" 284 | es6-iterator "2" 285 | memoizee "^0.4.3" 286 | timers-ext "0.1" 287 | 288 | cli-cursor@^1.0.1: 289 | version "1.0.2" 290 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 291 | dependencies: 292 | restore-cursor "^1.0.1" 293 | 294 | cli-width@^2.0.0: 295 | version "2.1.0" 296 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" 297 | 298 | code-point-at@^1.0.0: 299 | version "1.1.0" 300 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 301 | 302 | coffee-script@1.12.7: 303 | version "1.12.7" 304 | resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" 305 | integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== 306 | 307 | coffeelint@2.1.0: 308 | version "2.1.0" 309 | resolved "https://registry.yarnpkg.com/coffeelint/-/coffeelint-2.1.0.tgz#af65df3634e999d9ac01480736c36d3cd2f5dad8" 310 | integrity sha1-r2XfNjTpmdmsAUgHNsNtPNL12tg= 311 | dependencies: 312 | coffeescript "^2.1.0" 313 | glob "^7.0.6" 314 | ignore "^3.0.9" 315 | optimist "^0.6.1" 316 | resolve "^0.6.3" 317 | strip-json-comments "^1.0.2" 318 | 319 | coffeescript@^2.1.0: 320 | version "2.5.1" 321 | resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.5.1.tgz#b2442a1f2c806139669534a54adc35010559d16a" 322 | integrity sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ== 323 | 324 | combined-stream@^1.0.5, combined-stream@~1.0.5: 325 | version "1.0.5" 326 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 327 | dependencies: 328 | delayed-stream "~1.0.0" 329 | 330 | combined-stream@^1.0.6, combined-stream@~1.0.6: 331 | version "1.0.8" 332 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 333 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 334 | dependencies: 335 | delayed-stream "~1.0.0" 336 | 337 | commander@2.9.0, commander@^2.9.0: 338 | version "2.9.0" 339 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 340 | integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= 341 | dependencies: 342 | graceful-readlink ">= 1.0.0" 343 | 344 | common-tags@1.4.0: 345 | version "1.4.0" 346 | resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.4.0.tgz#1187be4f3d4cf0c0427d43f74eef1f73501614c0" 347 | integrity sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA= 348 | dependencies: 349 | babel-runtime "^6.18.0" 350 | 351 | concat-map@0.0.1: 352 | version "0.0.1" 353 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 354 | 355 | concat-stream@, concat-stream@^1.4.7: 356 | version "1.6.0" 357 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" 358 | dependencies: 359 | inherits "^2.0.3" 360 | readable-stream "^2.2.2" 361 | typedarray "^0.0.6" 362 | 363 | configstore@^1.0.0: 364 | version "1.4.0" 365 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-1.4.0.tgz#c35781d0501d268c25c54b8b17f6240e8a4fb021" 366 | dependencies: 367 | graceful-fs "^4.1.2" 368 | mkdirp "^0.5.0" 369 | object-assign "^4.0.1" 370 | os-tmpdir "^1.0.0" 371 | osenv "^0.1.0" 372 | uuid "^2.0.1" 373 | write-file-atomic "^1.1.2" 374 | xdg-basedir "^2.0.0" 375 | 376 | configstore@^2.0.0: 377 | version "2.1.0" 378 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" 379 | dependencies: 380 | dot-prop "^3.0.0" 381 | graceful-fs "^4.1.2" 382 | mkdirp "^0.5.0" 383 | object-assign "^4.0.1" 384 | os-tmpdir "^1.0.0" 385 | osenv "^0.1.0" 386 | uuid "^2.0.1" 387 | write-file-atomic "^1.1.2" 388 | xdg-basedir "^2.0.0" 389 | 390 | console.json@0.2.1: 391 | version "0.2.1" 392 | resolved "https://registry.yarnpkg.com/console.json/-/console.json-0.2.1.tgz#40951b4f550452dae0067479e50f7fc8e677939e" 393 | 394 | console.table@0.8.0: 395 | version "0.8.0" 396 | resolved "https://registry.yarnpkg.com/console.table/-/console.table-0.8.0.tgz#69e91d2eabfcced9a0c877ea670b251c6bdbd35f" 397 | integrity sha1-aekdLqv8ztmgyHfqZwslHGvb018= 398 | dependencies: 399 | easy-table "1.0.0" 400 | 401 | core-js@^2.4.0: 402 | version "2.6.11" 403 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" 404 | integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== 405 | 406 | core-util-is@~1.0.0: 407 | version "1.0.2" 408 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 409 | 410 | crc-32@0.4.1: 411 | version "0.4.1" 412 | resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-0.4.1.tgz#cd43fa1e5625381e35e85ca2064a52c03b5706ed" 413 | dependencies: 414 | concat-stream "" 415 | exit-on-epipe "" 416 | 417 | create-error-class@^3.0.1: 418 | version "3.0.2" 419 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 420 | dependencies: 421 | capture-stack-trace "^1.0.0" 422 | 423 | cross-spawn@4.0.0: 424 | version "4.0.0" 425 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.0.tgz#8254774ab4786b8c5b3cf4dfba66ce563932c252" 426 | dependencies: 427 | lru-cache "^4.0.1" 428 | which "^1.2.9" 429 | 430 | cross-spawn@^5.0.1: 431 | version "5.1.0" 432 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 433 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 434 | dependencies: 435 | lru-cache "^4.0.1" 436 | shebang-command "^1.2.0" 437 | which "^1.2.9" 438 | 439 | cryptiles@2.x.x: 440 | version "2.0.5" 441 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 442 | dependencies: 443 | boom "2.x.x" 444 | 445 | d@1, d@^1.0.1: 446 | version "1.0.1" 447 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" 448 | integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== 449 | dependencies: 450 | es5-ext "^0.10.50" 451 | type "^1.0.1" 452 | 453 | d@^0.1.1, d@~0.1.1: 454 | version "0.1.1" 455 | resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" 456 | dependencies: 457 | es5-ext "~0.10.2" 458 | 459 | dashdash@^1.12.0: 460 | version "1.14.1" 461 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 462 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 463 | dependencies: 464 | assert-plus "^1.0.0" 465 | 466 | debug@2, debug@2.2.0, debug@^2.2.0: 467 | version "2.2.0" 468 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 469 | dependencies: 470 | ms "0.7.1" 471 | 472 | debug@2.6.8: 473 | version "2.6.8" 474 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" 475 | integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw= 476 | dependencies: 477 | ms "2.0.0" 478 | 479 | debug@^2.3.3: 480 | version "2.6.9" 481 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 482 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 483 | dependencies: 484 | ms "2.0.0" 485 | 486 | deep-eql@^4.1.2: 487 | version "4.1.3" 488 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" 489 | integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== 490 | dependencies: 491 | type-detect "^4.0.0" 492 | 493 | deep-extend@^0.6.0: 494 | version "0.6.0" 495 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 496 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 497 | 498 | deep-extend@~0.4.0: 499 | version "0.4.1" 500 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 501 | 502 | delayed-stream@~1.0.0: 503 | version "1.0.0" 504 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 505 | 506 | deps-ok@1.2.0: 507 | version "1.2.0" 508 | resolved "https://registry.yarnpkg.com/deps-ok/-/deps-ok-1.2.0.tgz#942caaa9e2d95696922f45405dbcd4f062ed1a33" 509 | integrity sha1-lCyqqeLZVpaSL0VAXbzU8GLtGjM= 510 | dependencies: 511 | check-types "1.4.0" 512 | lodash "3.10.1" 513 | optimist "0.6.1" 514 | q "2.0.3" 515 | quote "0.4.0" 516 | semver "5.3.0" 517 | 518 | depurar@0.3.0: 519 | version "0.3.0" 520 | resolved "https://registry.yarnpkg.com/depurar/-/depurar-0.3.0.tgz#c2b03f157ff1e475b0bd663846fddcf3182bc966" 521 | integrity sha1-wrA/FX/x5HWwvWY4Rv3c8xgryWY= 522 | dependencies: 523 | app-root-path "1.3.0" 524 | crc-32 "0.4.1" 525 | debug "2.2.0" 526 | 527 | diff@1.4.0: 528 | version "1.4.0" 529 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" 530 | integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= 531 | 532 | dot-prop@^3.0.0: 533 | version "3.0.0" 534 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" 535 | dependencies: 536 | is-obj "^1.0.0" 537 | 538 | duplexer2@^0.1.4: 539 | version "0.1.4" 540 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 541 | dependencies: 542 | readable-stream "^2.0.2" 543 | 544 | duplexify@^3.2.0: 545 | version "3.5.0" 546 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" 547 | dependencies: 548 | end-of-stream "1.0.0" 549 | inherits "^2.0.1" 550 | readable-stream "^2.0.0" 551 | stream-shift "^1.0.0" 552 | 553 | each-async@^1.1.1: 554 | version "1.1.1" 555 | resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473" 556 | dependencies: 557 | onetime "^1.0.0" 558 | set-immediate-shim "^1.0.0" 559 | 560 | easy-table@0.3.0: 561 | version "0.3.0" 562 | resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-0.3.0.tgz#46f3b04418273a716c2ce8c52f1caca9d0241cb7" 563 | 564 | easy-table@1.0.0: 565 | version "1.0.0" 566 | resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.0.0.tgz#29db2d0855d36316e4382e5a3d85d9cb5fc93216" 567 | integrity sha1-KdstCFXTYxbkOC5aPYXZy1/JMhY= 568 | 569 | ecc-jsbn@~0.1.1: 570 | version "0.1.2" 571 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 572 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 573 | dependencies: 574 | jsbn "~0.1.0" 575 | safer-buffer "^2.1.0" 576 | 577 | end-of-stream@1.0.0: 578 | version "1.0.0" 579 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" 580 | dependencies: 581 | once "~1.3.0" 582 | 583 | error-ex@^1.2.0: 584 | version "1.3.0" 585 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" 586 | dependencies: 587 | is-arrayish "^0.2.1" 588 | 589 | es5-ext@^0.10.12, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.62, es5-ext@^0.10.7, es5-ext@~0.10.11, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: 590 | version "0.10.63" 591 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.63.tgz#9c222a63b6a332ac80b1e373b426af723b895bd6" 592 | integrity sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ== 593 | dependencies: 594 | es6-iterator "^2.0.3" 595 | es6-symbol "^3.1.3" 596 | esniff "^2.0.1" 597 | next-tick "^1.1.0" 598 | 599 | es6-iterator@2: 600 | version "2.0.0" 601 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" 602 | dependencies: 603 | d "^0.1.1" 604 | es5-ext "^0.10.7" 605 | es6-symbol "3" 606 | 607 | es6-iterator@^2.0.3: 608 | version "2.0.3" 609 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 610 | integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= 611 | dependencies: 612 | d "1" 613 | es5-ext "^0.10.35" 614 | es6-symbol "^3.1.1" 615 | 616 | es6-symbol@3: 617 | version "3.1.0" 618 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" 619 | dependencies: 620 | d "~0.1.1" 621 | es5-ext "~0.10.11" 622 | 623 | es6-symbol@^3.1.1, es6-symbol@^3.1.3: 624 | version "3.1.3" 625 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" 626 | integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== 627 | dependencies: 628 | d "^1.0.1" 629 | ext "^1.1.2" 630 | 631 | es6-weak-map@^2.0.2: 632 | version "2.0.3" 633 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" 634 | integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== 635 | dependencies: 636 | d "1" 637 | es5-ext "^0.10.46" 638 | es6-iterator "^2.0.3" 639 | es6-symbol "^3.1.1" 640 | 641 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 642 | version "1.0.5" 643 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 644 | 645 | escape-string-regexp@^1.0.2: 646 | version "1.0.2" 647 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" 648 | 649 | esniff@^2.0.1: 650 | version "2.0.1" 651 | resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" 652 | integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== 653 | dependencies: 654 | d "^1.0.1" 655 | es5-ext "^0.10.62" 656 | event-emitter "^0.3.5" 657 | type "^2.7.2" 658 | 659 | event-emitter@^0.3.5: 660 | version "0.3.5" 661 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 662 | integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= 663 | dependencies: 664 | d "1" 665 | es5-ext "~0.10.14" 666 | 667 | execa@0.7.0: 668 | version "0.7.0" 669 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 670 | integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= 671 | dependencies: 672 | cross-spawn "^5.0.1" 673 | get-stream "^3.0.0" 674 | is-stream "^1.1.0" 675 | npm-run-path "^2.0.0" 676 | p-finally "^1.0.0" 677 | signal-exit "^3.0.0" 678 | strip-eof "^1.0.0" 679 | 680 | exit-hook@^1.0.0: 681 | version "1.1.1" 682 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 683 | 684 | exit-on-epipe@: 685 | version "0.1.0" 686 | resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-0.1.0.tgz#aa2f0155b78b34fe60dd2b462e84637ba5ed0697" 687 | 688 | ext@^1.1.2: 689 | version "1.4.0" 690 | resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" 691 | integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== 692 | dependencies: 693 | type "^2.0.0" 694 | 695 | extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.2: 696 | version "3.0.2" 697 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 698 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 699 | 700 | external-editor@^1.0.1: 701 | version "1.1.1" 702 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b" 703 | dependencies: 704 | extend "^3.0.0" 705 | spawn-sync "^1.0.15" 706 | tmp "^0.0.29" 707 | 708 | extsprintf@1.0.2: 709 | version "1.0.2" 710 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 711 | 712 | fakefile@0.0.9: 713 | version "0.0.9" 714 | resolved "https://registry.yarnpkg.com/fakefile/-/fakefile-0.0.9.tgz#411c9c23eb3b1c98cf7925a7e2d69e2e70c23ca8" 715 | integrity sha1-QRycI+s7HJjPeSWn4taeLnDCPKg= 716 | dependencies: 717 | fs-extra "0.26.5" 718 | 719 | fast-deep-equal@^3.1.1: 720 | version "3.1.3" 721 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 722 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 723 | 724 | fast-json-stable-stringify@^2.0.0: 725 | version "2.1.0" 726 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 727 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 728 | 729 | figures@^1.3.5: 730 | version "1.7.0" 731 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 732 | dependencies: 733 | escape-string-regexp "^1.0.5" 734 | object-assign "^4.1.0" 735 | 736 | filled-array@^1.0.0: 737 | version "1.1.0" 738 | resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" 739 | 740 | follow-redirects@0.0.7: 741 | version "0.0.7" 742 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-0.0.7.tgz#34b90bab2a911aa347571da90f22bd36ecd8a919" 743 | dependencies: 744 | debug "^2.2.0" 745 | stream-consume "^0.1.0" 746 | 747 | forever-agent@~0.6.1: 748 | version "0.6.1" 749 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 750 | 751 | form-data@~1.0.0-rc4: 752 | version "1.0.1" 753 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" 754 | dependencies: 755 | async "^2.0.1" 756 | combined-stream "^1.0.5" 757 | mime-types "^2.1.11" 758 | 759 | form-data@~2.3.2: 760 | version "2.3.3" 761 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 762 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 763 | dependencies: 764 | asynckit "^0.4.0" 765 | combined-stream "^1.0.6" 766 | mime-types "^2.1.12" 767 | 768 | fs-extra@0.26.5: 769 | version "0.26.5" 770 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.5.tgz#53ac74667ca083fd2dc1712c813039ca32d69a7f" 771 | dependencies: 772 | graceful-fs "^4.1.2" 773 | jsonfile "^2.1.0" 774 | klaw "^1.0.0" 775 | path-is-absolute "^1.0.0" 776 | rimraf "^2.2.8" 777 | 778 | fs.realpath@^1.0.0: 779 | version "1.0.0" 780 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 781 | 782 | generate-function@^2.0.0: 783 | version "2.3.1" 784 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" 785 | integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== 786 | dependencies: 787 | is-property "^1.0.2" 788 | 789 | generate-object-property@^1.1.0: 790 | version "1.2.0" 791 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 792 | integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA= 793 | dependencies: 794 | is-property "^1.0.0" 795 | 796 | get-func-name@^2.0.0, get-func-name@^2.0.2: 797 | version "2.0.2" 798 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" 799 | integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== 800 | 801 | get-stream@^3.0.0: 802 | version "3.0.0" 803 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 804 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 805 | 806 | getpass@^0.1.1: 807 | version "0.1.7" 808 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 809 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 810 | dependencies: 811 | assert-plus "^1.0.0" 812 | 813 | github@2.4.0: 814 | version "2.4.0" 815 | resolved "https://registry.yarnpkg.com/github/-/github-2.4.0.tgz#04feee7830ea7d2b9dbe439e612fdbf8f89a0c94" 816 | dependencies: 817 | follow-redirects "0.0.7" 818 | https-proxy-agent "^1.0.0" 819 | mime "^1.2.11" 820 | 821 | glob@7.0.5: 822 | version "7.0.5" 823 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" 824 | integrity sha1-tCAqaQmbu00pKnwblbZoK2fr3JU= 825 | dependencies: 826 | fs.realpath "^1.0.0" 827 | inflight "^1.0.4" 828 | inherits "2" 829 | minimatch "^3.0.2" 830 | once "^1.3.0" 831 | path-is-absolute "^1.0.0" 832 | 833 | glob@^7.0.5, glob@^7.0.6: 834 | version "7.1.1" 835 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 836 | dependencies: 837 | fs.realpath "^1.0.0" 838 | inflight "^1.0.4" 839 | inherits "2" 840 | minimatch "^3.0.2" 841 | once "^1.3.0" 842 | path-is-absolute "^1.0.0" 843 | 844 | got@^3.2.0: 845 | version "3.3.1" 846 | resolved "https://registry.yarnpkg.com/got/-/got-3.3.1.tgz#e5d0ed4af55fc3eef4d56007769d98192bcb2eca" 847 | dependencies: 848 | duplexify "^3.2.0" 849 | infinity-agent "^2.0.0" 850 | is-redirect "^1.0.0" 851 | is-stream "^1.0.0" 852 | lowercase-keys "^1.0.0" 853 | nested-error-stacks "^1.0.0" 854 | object-assign "^3.0.0" 855 | prepend-http "^1.0.0" 856 | read-all-stream "^3.0.0" 857 | timed-out "^2.0.0" 858 | 859 | got@^5.0.0: 860 | version "5.7.1" 861 | resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" 862 | dependencies: 863 | create-error-class "^3.0.1" 864 | duplexer2 "^0.1.4" 865 | is-redirect "^1.0.0" 866 | is-retry-allowed "^1.0.0" 867 | is-stream "^1.0.0" 868 | lowercase-keys "^1.0.0" 869 | node-status-codes "^1.0.0" 870 | object-assign "^4.0.1" 871 | parse-json "^2.1.0" 872 | pinkie-promise "^2.0.0" 873 | read-all-stream "^3.0.0" 874 | readable-stream "^2.0.5" 875 | timed-out "^3.0.0" 876 | unzip-response "^1.0.2" 877 | url-parse-lax "^1.0.0" 878 | 879 | graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: 880 | version "4.1.11" 881 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 882 | 883 | "graceful-readlink@>= 1.0.0": 884 | version "1.0.1" 885 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 886 | 887 | growl@1.9.2: 888 | version "1.9.2" 889 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 890 | integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= 891 | 892 | har-schema@^2.0.0: 893 | version "2.0.0" 894 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 895 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 896 | 897 | har-validator@~2.0.6: 898 | version "2.0.6" 899 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" 900 | dependencies: 901 | chalk "^1.1.1" 902 | commander "^2.9.0" 903 | is-my-json-valid "^2.12.4" 904 | pinkie-promise "^2.0.0" 905 | 906 | har-validator@~5.1.3: 907 | version "5.1.3" 908 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" 909 | integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== 910 | dependencies: 911 | ajv "^6.5.5" 912 | har-schema "^2.0.0" 913 | 914 | has-ansi@^2.0.0: 915 | version "2.0.0" 916 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 917 | dependencies: 918 | ansi-regex "^2.0.0" 919 | 920 | has-flag@^1.0.0: 921 | version "1.0.0" 922 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 923 | integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= 924 | 925 | hawk@~3.1.3: 926 | version "3.1.3" 927 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 928 | dependencies: 929 | boom "2.x.x" 930 | cryptiles "2.x.x" 931 | hoek "2.x.x" 932 | sntp "1.x.x" 933 | 934 | hoek@2.x.x: 935 | version "2.16.3" 936 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 937 | 938 | http-signature@~1.1.0: 939 | version "1.1.1" 940 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 941 | dependencies: 942 | assert-plus "^0.2.0" 943 | jsprim "^1.2.2" 944 | sshpk "^1.7.0" 945 | 946 | http-signature@~1.2.0: 947 | version "1.2.0" 948 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 949 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 950 | dependencies: 951 | assert-plus "^1.0.0" 952 | jsprim "^1.2.2" 953 | sshpk "^1.7.0" 954 | 955 | https-proxy-agent@^1.0.0: 956 | version "1.0.0" 957 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" 958 | dependencies: 959 | agent-base "2" 960 | debug "2" 961 | extend "3" 962 | 963 | ignore@^3.0.9: 964 | version "3.2.0" 965 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" 966 | 967 | imurmurhash@^0.1.4: 968 | version "0.1.4" 969 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 970 | 971 | infinity-agent@^2.0.0: 972 | version "2.0.3" 973 | resolved "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz#45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216" 974 | 975 | inflight@^1.0.4: 976 | version "1.0.6" 977 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 978 | dependencies: 979 | once "^1.3.0" 980 | wrappy "1" 981 | 982 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1: 983 | version "2.0.3" 984 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 985 | 986 | ini@~1.3.0: 987 | version "1.3.8" 988 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 989 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 990 | 991 | inquirer@1.1.2: 992 | version "1.1.2" 993 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-1.1.2.tgz#ac3ba5f06b8e7291abd9f22912c03f09cfe2dd1f" 994 | dependencies: 995 | ansi-escapes "^1.1.0" 996 | chalk "^1.0.0" 997 | cli-cursor "^1.0.1" 998 | cli-width "^2.0.0" 999 | external-editor "^1.0.1" 1000 | figures "^1.3.5" 1001 | lodash "^4.3.0" 1002 | mute-stream "0.0.6" 1003 | pinkie-promise "^2.0.0" 1004 | run-async "^2.2.0" 1005 | rx "^4.1.0" 1006 | string-width "^1.0.1" 1007 | strip-ansi "^3.0.0" 1008 | through "^2.3.6" 1009 | 1010 | is-arrayish@^0.2.1: 1011 | version "0.2.1" 1012 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1013 | 1014 | is-finite@^1.0.0: 1015 | version "1.0.2" 1016 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1017 | dependencies: 1018 | number-is-nan "^1.0.0" 1019 | 1020 | is-fullwidth-code-point@^1.0.0: 1021 | version "1.0.0" 1022 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1023 | dependencies: 1024 | number-is-nan "^1.0.0" 1025 | 1026 | is-my-ip-valid@^1.0.0: 1027 | version "1.0.0" 1028 | resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" 1029 | integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ== 1030 | 1031 | is-my-json-valid@^2.12.4: 1032 | version "2.20.0" 1033 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a" 1034 | integrity sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA== 1035 | dependencies: 1036 | generate-function "^2.0.0" 1037 | generate-object-property "^1.1.0" 1038 | is-my-ip-valid "^1.0.0" 1039 | jsonpointer "^4.0.0" 1040 | xtend "^4.0.0" 1041 | 1042 | is-npm@^1.0.0: 1043 | version "1.0.0" 1044 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 1045 | 1046 | is-obj@^1.0.0: 1047 | version "1.0.1" 1048 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1049 | 1050 | is-online@5.1.2: 1051 | version "5.1.2" 1052 | resolved "https://registry.yarnpkg.com/is-online/-/is-online-5.1.2.tgz#4c10aa69d11cf1fec531f0dc940f4185b9d983fe" 1053 | dependencies: 1054 | is-reachable "^1.3.0" 1055 | onetime "^1.1.0" 1056 | random-item "^1.0.0" 1057 | root-hints "^1.0.0" 1058 | 1059 | is-port-reachable@^1.0.0: 1060 | version "1.0.0" 1061 | resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-1.0.0.tgz#7d933a217d0399576709e27b4f0ded5a500d94d6" 1062 | dependencies: 1063 | onetime "^1.0.0" 1064 | 1065 | is-promise@^2.1: 1066 | version "2.2.2" 1067 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" 1068 | integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== 1069 | 1070 | is-promise@^2.1.0: 1071 | version "2.1.0" 1072 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1073 | 1074 | is-property@^1.0.0, is-property@^1.0.2: 1075 | version "1.0.2" 1076 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 1077 | integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= 1078 | 1079 | is-reachable@^1.3.0: 1080 | version "1.3.0" 1081 | resolved "https://registry.yarnpkg.com/is-reachable/-/is-reachable-1.3.0.tgz#0d800c861de2b6d8bcd6757dc788a85a4971ac6a" 1082 | dependencies: 1083 | arrify "^1.0.1" 1084 | each-async "^1.1.1" 1085 | is-port-reachable "^1.0.0" 1086 | onetime "^1.1.0" 1087 | router-ips "^0.2.0" 1088 | url-parse-lax "^1.0.0" 1089 | 1090 | is-redirect@^1.0.0: 1091 | version "1.0.0" 1092 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 1093 | 1094 | is-retry-allowed@^1.0.0: 1095 | version "1.1.0" 1096 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 1097 | 1098 | is-stream@^1.0.0, is-stream@^1.1.0: 1099 | version "1.1.0" 1100 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1101 | 1102 | is-typedarray@~1.0.0: 1103 | version "1.0.0" 1104 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1105 | 1106 | isarray@~1.0.0: 1107 | version "1.0.0" 1108 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1109 | 1110 | isexe@^1.1.1: 1111 | version "1.1.2" 1112 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" 1113 | 1114 | isstream@~0.1.2: 1115 | version "0.1.2" 1116 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1117 | 1118 | jsbn@~0.1.0: 1119 | version "0.1.1" 1120 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1121 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 1122 | 1123 | json-schema-traverse@^0.4.1: 1124 | version "0.4.1" 1125 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1126 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1127 | 1128 | json-schema@0.2.3: 1129 | version "0.2.3" 1130 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1131 | 1132 | json-stringify-safe@~5.0.1: 1133 | version "5.0.1" 1134 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1135 | 1136 | json3@3.3.2: 1137 | version "3.3.2" 1138 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 1139 | integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= 1140 | 1141 | jsonfile@^2.1.0: 1142 | version "2.4.0" 1143 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" 1144 | optionalDependencies: 1145 | graceful-fs "^4.1.6" 1146 | 1147 | jsonpointer@^4.0.0: 1148 | version "4.0.1" 1149 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" 1150 | integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= 1151 | 1152 | jsprim@^1.2.2: 1153 | version "1.3.1" 1154 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" 1155 | dependencies: 1156 | extsprintf "1.0.2" 1157 | json-schema "0.2.3" 1158 | verror "1.3.6" 1159 | 1160 | klaw@^1.0.0: 1161 | version "1.3.1" 1162 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" 1163 | optionalDependencies: 1164 | graceful-fs "^4.1.9" 1165 | 1166 | latest-version@^1.0.0: 1167 | version "1.0.1" 1168 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-1.0.1.tgz#72cfc46e3e8d1be651e1ebb54ea9f6ea96f374bb" 1169 | dependencies: 1170 | package-json "^1.0.0" 1171 | 1172 | latest-version@^2.0.0: 1173 | version "2.0.0" 1174 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" 1175 | dependencies: 1176 | package-json "^2.0.0" 1177 | 1178 | lazy-ass@1.4.0: 1179 | version "1.4.0" 1180 | resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.4.0.tgz#c4acfd59d65b9e6f25b05c439cb2f8fc2be34437" 1181 | 1182 | lazy-ass@1.5.0: 1183 | version "1.5.0" 1184 | resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.5.0.tgz#ca15be243c7c475b8565cdbfa0f9c2f374f2a01d" 1185 | 1186 | lazy-req@^1.1.0: 1187 | version "1.1.0" 1188 | resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac" 1189 | 1190 | lodash._baseassign@^3.0.0: 1191 | version "3.2.0" 1192 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 1193 | integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= 1194 | dependencies: 1195 | lodash._basecopy "^3.0.0" 1196 | lodash.keys "^3.0.0" 1197 | 1198 | lodash._basecopy@^3.0.0: 1199 | version "3.0.1" 1200 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 1201 | integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= 1202 | 1203 | lodash._basecreate@^3.0.0: 1204 | version "3.0.3" 1205 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 1206 | integrity sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE= 1207 | 1208 | lodash._getnative@^3.0.0: 1209 | version "3.9.1" 1210 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 1211 | integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= 1212 | 1213 | lodash._isiterateecall@^3.0.0: 1214 | version "3.0.9" 1215 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 1216 | integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= 1217 | 1218 | lodash.create@3.1.1: 1219 | version "3.1.1" 1220 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 1221 | integrity sha1-1/KEnw29p+BGgruM1yqwIkYd6+c= 1222 | dependencies: 1223 | lodash._baseassign "^3.0.0" 1224 | lodash._basecreate "^3.0.0" 1225 | lodash._isiterateecall "^3.0.0" 1226 | 1227 | lodash.isarguments@^3.0.0: 1228 | version "3.1.0" 1229 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 1230 | integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= 1231 | 1232 | lodash.isarray@^3.0.0: 1233 | version "3.0.4" 1234 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 1235 | integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= 1236 | 1237 | lodash.keys@^3.0.0: 1238 | version "3.1.2" 1239 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 1240 | integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= 1241 | dependencies: 1242 | lodash._getnative "^3.0.0" 1243 | lodash.isarguments "^3.0.0" 1244 | lodash.isarray "^3.0.0" 1245 | 1246 | lodash@3.10.1: 1247 | version "3.10.1" 1248 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" 1249 | 1250 | lodash@^4.17.14, lodash@^4.3.0: 1251 | version "4.17.21" 1252 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1253 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1254 | 1255 | loupe@^2.3.1: 1256 | version "2.3.6" 1257 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" 1258 | integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== 1259 | dependencies: 1260 | get-func-name "^2.0.0" 1261 | 1262 | lowercase-keys@^1.0.0: 1263 | version "1.0.0" 1264 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" 1265 | 1266 | lru-cache@^4.0.1: 1267 | version "4.0.2" 1268 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" 1269 | dependencies: 1270 | pseudomap "^1.0.1" 1271 | yallist "^2.0.0" 1272 | 1273 | lru-queue@0.1: 1274 | version "0.1.0" 1275 | resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" 1276 | dependencies: 1277 | es5-ext "~0.10.2" 1278 | 1279 | memoizee@^0.4.3: 1280 | version "0.4.14" 1281 | resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" 1282 | integrity sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg== 1283 | dependencies: 1284 | d "1" 1285 | es5-ext "^0.10.45" 1286 | es6-weak-map "^2.0.2" 1287 | event-emitter "^0.3.5" 1288 | is-promise "^2.1" 1289 | lru-queue "0.1" 1290 | next-tick "1" 1291 | timers-ext "^0.1.5" 1292 | 1293 | mime-db@1.44.0: 1294 | version "1.44.0" 1295 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 1296 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 1297 | 1298 | mime-db@~1.25.0: 1299 | version "1.25.0" 1300 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" 1301 | 1302 | mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.7: 1303 | version "2.1.13" 1304 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" 1305 | dependencies: 1306 | mime-db "~1.25.0" 1307 | 1308 | mime-types@~2.1.19: 1309 | version "2.1.27" 1310 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 1311 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 1312 | dependencies: 1313 | mime-db "1.44.0" 1314 | 1315 | mime@^1.2.11: 1316 | version "1.3.4" 1317 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" 1318 | 1319 | minimatch@^3.0.2: 1320 | version "3.1.2" 1321 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1322 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1323 | dependencies: 1324 | brace-expansion "^1.1.7" 1325 | 1326 | minimist@0.0.8: 1327 | version "0.0.8" 1328 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1329 | 1330 | minimist@^1.2.0: 1331 | version "1.2.0" 1332 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1333 | 1334 | minimist@~0.0.1: 1335 | version "0.0.10" 1336 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 1337 | 1338 | mkdirp@0.5.1: 1339 | version "0.5.1" 1340 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1341 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1342 | dependencies: 1343 | minimist "0.0.8" 1344 | 1345 | mkdirp@^0.5.0: 1346 | version "0.5.0" 1347 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" 1348 | dependencies: 1349 | minimist "0.0.8" 1350 | 1351 | mocha@3.2.0: 1352 | version "3.2.0" 1353 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" 1354 | integrity sha1-fcT0XlCIB1FxpoiWgU5q6et6heM= 1355 | dependencies: 1356 | browser-stdout "1.3.0" 1357 | commander "2.9.0" 1358 | debug "2.2.0" 1359 | diff "1.4.0" 1360 | escape-string-regexp "1.0.5" 1361 | glob "7.0.5" 1362 | growl "1.9.2" 1363 | json3 "3.3.2" 1364 | lodash.create "3.1.1" 1365 | mkdirp "0.5.1" 1366 | supports-color "3.1.2" 1367 | 1368 | ms@0.7.1: 1369 | version "0.7.1" 1370 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 1371 | 1372 | ms@2.0.0: 1373 | version "2.0.0" 1374 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1375 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1376 | 1377 | mute-stream@0.0.6: 1378 | version "0.0.6" 1379 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" 1380 | 1381 | nested-error-stacks@^1.0.0: 1382 | version "1.0.2" 1383 | resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz#19f619591519f096769a5ba9a86e6eeec823c3cf" 1384 | dependencies: 1385 | inherits "~2.0.1" 1386 | 1387 | next-tick@1, next-tick@^1.1.0: 1388 | version "1.1.0" 1389 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" 1390 | integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== 1391 | 1392 | next-tick@~0.2.2: 1393 | version "0.2.2" 1394 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-0.2.2.tgz#75da4a927ee5887e39065880065b7336413b310d" 1395 | 1396 | next-update@3.6.0: 1397 | version "3.6.0" 1398 | resolved "https://registry.yarnpkg.com/next-update/-/next-update-3.6.0.tgz#6a54fc525ce25ccc1b755d087a043c88037dabf8" 1399 | integrity sha1-alT8UlziXMwbdV0IegQ8iAN9q/g= 1400 | dependencies: 1401 | changed-log "0.13.0" 1402 | chdir-promise "0.4.0" 1403 | check-more-types "2.24.0" 1404 | cli-color "1.2.0" 1405 | common-tags "1.4.0" 1406 | console.json "0.2.1" 1407 | console.table "0.8.0" 1408 | debug "2.6.8" 1409 | deps-ok "1.2.0" 1410 | easy-table "0.3.0" 1411 | execa "0.7.0" 1412 | is-online "5.1.2" 1413 | lazy-ass "1.5.0" 1414 | lodash "3.10.1" 1415 | npm-utils "1.7.1" 1416 | optimist "0.6.1" 1417 | pluralize "5.0.0" 1418 | q "2.0.3" 1419 | quote "0.4.0" 1420 | ramda "0.24.1" 1421 | request "2.74.0" 1422 | semver "5.3.0" 1423 | update-notifier "0.5.0" 1424 | 1425 | node-status-codes@^1.0.0: 1426 | version "1.0.0" 1427 | resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" 1428 | 1429 | node-uuid@~1.4.7: 1430 | version "1.4.7" 1431 | resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" 1432 | 1433 | npm-run-path@^2.0.0: 1434 | version "2.0.2" 1435 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1436 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 1437 | dependencies: 1438 | path-key "^2.0.0" 1439 | 1440 | npm-utils@1.7.1: 1441 | version "1.7.1" 1442 | resolved "https://registry.yarnpkg.com/npm-utils/-/npm-utils-1.7.1.tgz#b11c180b75f19f44dd30fc8a68bae6da4dae9d1b" 1443 | dependencies: 1444 | check-more-types "2.21.0" 1445 | cross-spawn "4.0.0" 1446 | debug "2.2.0" 1447 | lazy-ass "1.4.0" 1448 | q "2.0.3" 1449 | registry-url "3.1.0" 1450 | user-home "2.0.0" 1451 | verbal-expressions "0.2.1" 1452 | 1453 | number-is-nan@^1.0.0: 1454 | version "1.0.1" 1455 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1456 | 1457 | oauth-sign@~0.8.1: 1458 | version "0.8.2" 1459 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1460 | 1461 | oauth-sign@~0.9.0: 1462 | version "0.9.0" 1463 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1464 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1465 | 1466 | object-assign@^3.0.0: 1467 | version "3.0.0" 1468 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" 1469 | 1470 | object-assign@^4.0.1, object-assign@^4.1.0: 1471 | version "4.1.0" 1472 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" 1473 | 1474 | once@^1.3.0: 1475 | version "1.4.0" 1476 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1477 | dependencies: 1478 | wrappy "1" 1479 | 1480 | once@~1.3.0: 1481 | version "1.3.3" 1482 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" 1483 | dependencies: 1484 | wrappy "1" 1485 | 1486 | onetime@^1.0.0, onetime@^1.1.0: 1487 | version "1.1.0" 1488 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 1489 | 1490 | optimist@0.6.1, optimist@^0.6.1: 1491 | version "0.6.1" 1492 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1493 | dependencies: 1494 | minimist "~0.0.1" 1495 | wordwrap "~0.0.2" 1496 | 1497 | os-homedir@^1.0.0: 1498 | version "1.0.2" 1499 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1500 | 1501 | os-shim@^0.1.2: 1502 | version "0.1.3" 1503 | resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" 1504 | 1505 | os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: 1506 | version "1.0.2" 1507 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1508 | 1509 | osenv@^0.1.0: 1510 | version "0.1.4" 1511 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1512 | dependencies: 1513 | os-homedir "^1.0.0" 1514 | os-tmpdir "^1.0.0" 1515 | 1516 | p-finally@^1.0.0: 1517 | version "1.0.0" 1518 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1519 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1520 | 1521 | package-json@2.4.0: 1522 | version "2.4.0" 1523 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" 1524 | integrity sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs= 1525 | dependencies: 1526 | got "^5.0.0" 1527 | registry-auth-token "^3.0.1" 1528 | registry-url "^3.0.3" 1529 | semver "^5.1.0" 1530 | 1531 | package-json@^1.0.0: 1532 | version "1.2.0" 1533 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-1.2.0.tgz#c8ecac094227cdf76a316874ed05e27cc939a0e0" 1534 | dependencies: 1535 | got "^3.2.0" 1536 | registry-url "^3.0.0" 1537 | 1538 | package-json@^2.0.0: 1539 | version "2.3.3" 1540 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.3.3.tgz#14895311a963d18edf8801e06b67ea87795d15b9" 1541 | dependencies: 1542 | got "^5.0.0" 1543 | rc "^1.1.2" 1544 | registry-url "^3.0.3" 1545 | semver "^5.1.0" 1546 | 1547 | parse-github-repo-url@1.3.0: 1548 | version "1.3.0" 1549 | resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.3.0.tgz#d4de02d68e2e60f0d6a182e7a8cb21b6f38c730b" 1550 | 1551 | parse-json@^2.1.0: 1552 | version "2.2.0" 1553 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1554 | dependencies: 1555 | error-ex "^1.2.0" 1556 | 1557 | path-is-absolute@^1.0.0: 1558 | version "1.0.1" 1559 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1560 | 1561 | path-key@^2.0.0: 1562 | version "2.0.1" 1563 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1564 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1565 | 1566 | pathval@^1.1.1: 1567 | version "1.1.1" 1568 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 1569 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 1570 | 1571 | performance-now@^2.1.0: 1572 | version "2.1.0" 1573 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1574 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 1575 | 1576 | pinkie-promise@^2.0.0: 1577 | version "2.0.1" 1578 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1579 | dependencies: 1580 | pinkie "^2.0.0" 1581 | 1582 | pinkie@^2.0.0: 1583 | version "2.0.4" 1584 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1585 | 1586 | pluralize@5.0.0: 1587 | version "5.0.0" 1588 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-5.0.0.tgz#e8b9073af9a0cb02e4c2efa95b55bebbdbf01299" 1589 | integrity sha1-6LkHOvmgywLkwu+pW1W+u9vwEpk= 1590 | 1591 | pop-iterate@^1.0.1: 1592 | version "1.0.1" 1593 | resolved "https://registry.yarnpkg.com/pop-iterate/-/pop-iterate-1.0.1.tgz#ceacfdab4abf353d7a0f2aaa2c1fc7b3f9413ba3" 1594 | 1595 | prepend-http@^1.0.0, prepend-http@^1.0.1: 1596 | version "1.0.4" 1597 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 1598 | 1599 | process-nextick-args@~1.0.6: 1600 | version "1.0.7" 1601 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1602 | 1603 | pseudomap@^1.0.1: 1604 | version "1.0.2" 1605 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1606 | 1607 | psl@^1.1.28: 1608 | version "1.8.0" 1609 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 1610 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 1611 | 1612 | punycode@^1.4.1: 1613 | version "1.4.1" 1614 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1615 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 1616 | 1617 | punycode@^2.1.0, punycode@^2.1.1: 1618 | version "2.1.1" 1619 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1620 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1621 | 1622 | q@1.1.2: 1623 | version "1.1.2" 1624 | resolved "https://registry.yarnpkg.com/q/-/q-1.1.2.tgz#6357e291206701d99f197ab84e57e8ad196f2a89" 1625 | 1626 | q@2.0.3: 1627 | version "2.0.3" 1628 | resolved "https://registry.yarnpkg.com/q/-/q-2.0.3.tgz#75b8db0255a1a5af82f58c3f3aaa1efec7d0d134" 1629 | dependencies: 1630 | asap "^2.0.0" 1631 | pop-iterate "^1.0.1" 1632 | weak-map "^1.0.5" 1633 | 1634 | qs@~6.2.0: 1635 | version "6.2.4" 1636 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.4.tgz#d90821bb8537cecc140e6c34f54ec76e54b39b22" 1637 | integrity sha512-E57gmgKXqDda+qWTkUJgIwgJICK7zgMfqZZopTRKZ6mY9gzLlmJN9EpXNnDrTxXFlOM/a+I28kJkF/60rqgnYw== 1638 | 1639 | qs@~6.5.2: 1640 | version "6.5.2" 1641 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1642 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1643 | 1644 | quote@0.4.0: 1645 | version "0.4.0" 1646 | resolved "https://registry.yarnpkg.com/quote/-/quote-0.4.0.tgz#10839217f6c1362b89194044d29b233fd7f32f01" 1647 | 1648 | ramda@0.15.1: 1649 | version "0.15.1" 1650 | resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.15.1.tgz#b227f79e9ff0acee1955d582f18681eb02c4dc2a" 1651 | 1652 | ramda@0.24.1: 1653 | version "0.24.1" 1654 | resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" 1655 | integrity sha1-w7d1UZfzW43DUCIoJixMkd22uFc= 1656 | 1657 | random-item@^1.0.0: 1658 | version "1.0.0" 1659 | resolved "https://registry.yarnpkg.com/random-item/-/random-item-1.0.0.tgz#16ee31626cb050c8a1686a5f0f42a6b99a2aaf11" 1660 | 1661 | rc@^1.0.1, rc@^1.1.2: 1662 | version "1.1.6" 1663 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" 1664 | dependencies: 1665 | deep-extend "~0.4.0" 1666 | ini "~1.3.0" 1667 | minimist "^1.2.0" 1668 | strip-json-comments "~1.0.4" 1669 | 1670 | rc@^1.1.6: 1671 | version "1.2.8" 1672 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1673 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1674 | dependencies: 1675 | deep-extend "^0.6.0" 1676 | ini "~1.3.0" 1677 | minimist "^1.2.0" 1678 | strip-json-comments "~2.0.1" 1679 | 1680 | read-all-stream@^3.0.0: 1681 | version "3.1.0" 1682 | resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" 1683 | dependencies: 1684 | pinkie-promise "^2.0.0" 1685 | readable-stream "^2.0.0" 1686 | 1687 | readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.0.5: 1688 | version "2.0.6" 1689 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" 1690 | dependencies: 1691 | core-util-is "~1.0.0" 1692 | inherits "~2.0.1" 1693 | isarray "~1.0.0" 1694 | process-nextick-args "~1.0.6" 1695 | string_decoder "~0.10.x" 1696 | util-deprecate "~1.0.1" 1697 | 1698 | readable-stream@^2.2.2: 1699 | version "2.2.2" 1700 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" 1701 | dependencies: 1702 | buffer-shims "^1.0.0" 1703 | core-util-is "~1.0.0" 1704 | inherits "~2.0.1" 1705 | isarray "~1.0.0" 1706 | process-nextick-args "~1.0.6" 1707 | string_decoder "~0.10.x" 1708 | util-deprecate "~1.0.1" 1709 | 1710 | regenerator-runtime@^0.11.0: 1711 | version "0.11.1" 1712 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 1713 | integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== 1714 | 1715 | registry-auth-token@^3.0.1: 1716 | version "3.4.0" 1717 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" 1718 | integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== 1719 | dependencies: 1720 | rc "^1.1.6" 1721 | safe-buffer "^5.0.1" 1722 | 1723 | registry-url@3.1.0, registry-url@^3.0.0, registry-url@^3.0.3: 1724 | version "3.1.0" 1725 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 1726 | dependencies: 1727 | rc "^1.0.1" 1728 | 1729 | repeating@^1.1.2: 1730 | version "1.1.3" 1731 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" 1732 | dependencies: 1733 | is-finite "^1.0.0" 1734 | 1735 | repeating@^2.0.0: 1736 | version "2.0.1" 1737 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1738 | dependencies: 1739 | is-finite "^1.0.0" 1740 | 1741 | request@2.74.0: 1742 | version "2.74.0" 1743 | resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" 1744 | dependencies: 1745 | aws-sign2 "~0.6.0" 1746 | aws4 "^1.2.1" 1747 | bl "~1.1.2" 1748 | caseless "~0.11.0" 1749 | combined-stream "~1.0.5" 1750 | extend "~3.0.0" 1751 | forever-agent "~0.6.1" 1752 | form-data "~1.0.0-rc4" 1753 | har-validator "~2.0.6" 1754 | hawk "~3.1.3" 1755 | http-signature "~1.1.0" 1756 | is-typedarray "~1.0.0" 1757 | isstream "~0.1.2" 1758 | json-stringify-safe "~5.0.1" 1759 | mime-types "~2.1.7" 1760 | node-uuid "~1.4.7" 1761 | oauth-sign "~0.8.1" 1762 | qs "~6.2.0" 1763 | stringstream "~0.0.4" 1764 | tough-cookie "~2.3.0" 1765 | tunnel-agent "~0.4.1" 1766 | 1767 | request@2.88.2: 1768 | version "2.88.2" 1769 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 1770 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 1771 | dependencies: 1772 | aws-sign2 "~0.7.0" 1773 | aws4 "^1.8.0" 1774 | caseless "~0.12.0" 1775 | combined-stream "~1.0.6" 1776 | extend "~3.0.2" 1777 | forever-agent "~0.6.1" 1778 | form-data "~2.3.2" 1779 | har-validator "~5.1.3" 1780 | http-signature "~1.2.0" 1781 | is-typedarray "~1.0.0" 1782 | isstream "~0.1.2" 1783 | json-stringify-safe "~5.0.1" 1784 | mime-types "~2.1.19" 1785 | oauth-sign "~0.9.0" 1786 | performance-now "^2.1.0" 1787 | qs "~6.5.2" 1788 | safe-buffer "^5.1.2" 1789 | tough-cookie "~2.5.0" 1790 | tunnel-agent "^0.6.0" 1791 | uuid "^3.3.2" 1792 | 1793 | resolve@^0.6.3: 1794 | version "0.6.3" 1795 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" 1796 | 1797 | restore-cursor@^1.0.1: 1798 | version "1.0.1" 1799 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 1800 | dependencies: 1801 | exit-hook "^1.0.0" 1802 | onetime "^1.0.0" 1803 | 1804 | retry@0.12.0: 1805 | version "0.12.0" 1806 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" 1807 | integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= 1808 | 1809 | rimraf@^2.2.8: 1810 | version "2.5.4" 1811 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" 1812 | dependencies: 1813 | glob "^7.0.5" 1814 | 1815 | root-hints@^1.0.0: 1816 | version "1.0.12" 1817 | resolved "https://registry.yarnpkg.com/root-hints/-/root-hints-1.0.12.tgz#673c7a4227321c575bb8231ffa4c884f0bc072a2" 1818 | 1819 | router-ips@^0.2.0: 1820 | version "0.2.0" 1821 | resolved "https://registry.yarnpkg.com/router-ips/-/router-ips-0.2.0.tgz#20f6e5774221e519197639dd9ac04b7badec96cd" 1822 | 1823 | run-async@^2.2.0: 1824 | version "2.3.0" 1825 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 1826 | dependencies: 1827 | is-promise "^2.1.0" 1828 | 1829 | rx@^4.1.0: 1830 | version "4.1.0" 1831 | resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" 1832 | 1833 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 1834 | version "5.2.0" 1835 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 1836 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 1837 | 1838 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1839 | version "2.1.2" 1840 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1841 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1842 | 1843 | semver-diff@^2.0.0: 1844 | version "2.1.0" 1845 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 1846 | dependencies: 1847 | semver "^5.0.3" 1848 | 1849 | semver@5.3.0, semver@^5.0.3, semver@^5.1.0: 1850 | version "5.3.0" 1851 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 1852 | 1853 | semver@~5.0.1: 1854 | version "5.0.3" 1855 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" 1856 | 1857 | set-immediate-shim@^1.0.0: 1858 | version "1.0.1" 1859 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 1860 | 1861 | shebang-command@^1.2.0: 1862 | version "1.2.0" 1863 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1864 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1865 | dependencies: 1866 | shebang-regex "^1.0.0" 1867 | 1868 | shebang-regex@^1.0.0: 1869 | version "1.0.0" 1870 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1871 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1872 | 1873 | should-equal@^2.0.0: 1874 | version "2.0.0" 1875 | resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" 1876 | integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== 1877 | dependencies: 1878 | should-type "^1.4.0" 1879 | 1880 | should-format@^3.0.3: 1881 | version "3.0.3" 1882 | resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" 1883 | integrity sha1-m/yPdPo5IFxT04w01xcwPidxJPE= 1884 | dependencies: 1885 | should-type "^1.3.0" 1886 | should-type-adaptors "^1.0.1" 1887 | 1888 | should-type-adaptors@^1.0.1: 1889 | version "1.0.1" 1890 | resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz#efe5553cdf68cff66e5c5f51b712dc351c77beaa" 1891 | dependencies: 1892 | should-type "^1.3.0" 1893 | should-util "^1.0.0" 1894 | 1895 | should-type@^1.3.0, should-type@^1.4.0: 1896 | version "1.4.0" 1897 | resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" 1898 | 1899 | should-util@^1.0.0: 1900 | version "1.0.0" 1901 | resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.0.tgz#c98cda374aa6b190df8ba87c9889c2b4db620063" 1902 | 1903 | should@13.2.3: 1904 | version "13.2.3" 1905 | resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" 1906 | integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== 1907 | dependencies: 1908 | should-equal "^2.0.0" 1909 | should-format "^3.0.3" 1910 | should-type "^1.4.0" 1911 | should-type-adaptors "^1.0.1" 1912 | should-util "^1.0.0" 1913 | 1914 | signal-exit@^3.0.0: 1915 | version "3.0.3" 1916 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1917 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1918 | 1919 | slide@^1.1.5: 1920 | version "1.1.6" 1921 | resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 1922 | 1923 | sntp@1.x.x: 1924 | version "1.0.9" 1925 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1926 | dependencies: 1927 | hoek "2.x.x" 1928 | 1929 | spawn-sync@^1.0.15: 1930 | version "1.0.15" 1931 | resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" 1932 | dependencies: 1933 | concat-stream "^1.4.7" 1934 | os-shim "^0.1.2" 1935 | 1936 | spots@0.4.0: 1937 | version "0.4.0" 1938 | resolved "https://registry.yarnpkg.com/spots/-/spots-0.4.0.tgz#01eec5efc143669d9d3a20e3eec8b8cbd9842df6" 1939 | integrity sha1-Ae7F78FDZp2dOiDj7si4y9mELfY= 1940 | 1941 | sshpk@^1.7.0: 1942 | version "1.16.1" 1943 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1944 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 1945 | dependencies: 1946 | asn1 "~0.2.3" 1947 | assert-plus "^1.0.0" 1948 | bcrypt-pbkdf "^1.0.0" 1949 | dashdash "^1.12.0" 1950 | ecc-jsbn "~0.1.1" 1951 | getpass "^0.1.1" 1952 | jsbn "~0.1.0" 1953 | safer-buffer "^2.0.2" 1954 | tweetnacl "~0.14.0" 1955 | 1956 | stream-consume@^0.1.0: 1957 | version "0.1.0" 1958 | resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" 1959 | 1960 | stream-shift@^1.0.0: 1961 | version "1.0.0" 1962 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" 1963 | 1964 | string-length@^1.0.0: 1965 | version "1.0.1" 1966 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" 1967 | dependencies: 1968 | strip-ansi "^3.0.0" 1969 | 1970 | string-width@^1.0.1: 1971 | version "1.0.2" 1972 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1973 | dependencies: 1974 | code-point-at "^1.0.0" 1975 | is-fullwidth-code-point "^1.0.0" 1976 | strip-ansi "^3.0.0" 1977 | 1978 | string_decoder@~0.10.x: 1979 | version "0.10.31" 1980 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1981 | 1982 | stringstream@~0.0.4: 1983 | version "0.0.6" 1984 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" 1985 | integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== 1986 | 1987 | strip-ansi@^3.0.0: 1988 | version "3.0.1" 1989 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1990 | dependencies: 1991 | ansi-regex "^2.0.0" 1992 | 1993 | strip-eof@^1.0.0: 1994 | version "1.0.0" 1995 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1996 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 1997 | 1998 | strip-json-comments@^1.0.2, strip-json-comments@~1.0.4: 1999 | version "1.0.4" 2000 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 2001 | 2002 | strip-json-comments@~2.0.1: 2003 | version "2.0.1" 2004 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2005 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2006 | 2007 | supports-color@3.1.2: 2008 | version "3.1.2" 2009 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 2010 | integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU= 2011 | dependencies: 2012 | has-flag "^1.0.0" 2013 | 2014 | supports-color@^2.0.0: 2015 | version "2.0.0" 2016 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2017 | 2018 | through@^2.3.6: 2019 | version "2.3.8" 2020 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2021 | 2022 | timed-out@^2.0.0: 2023 | version "2.0.0" 2024 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a" 2025 | 2026 | timed-out@^3.0.0: 2027 | version "3.1.0" 2028 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.0.tgz#43b98b14bb712c9161c28f4dc1f3068d67a04ec2" 2029 | 2030 | timers-ext@0.1: 2031 | version "0.1.0" 2032 | resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.0.tgz#00345a2ca93089d1251322054389d263e27b77e2" 2033 | dependencies: 2034 | es5-ext "~0.10.2" 2035 | next-tick "~0.2.2" 2036 | 2037 | timers-ext@^0.1.5: 2038 | version "0.1.7" 2039 | resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" 2040 | integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== 2041 | dependencies: 2042 | es5-ext "~0.10.46" 2043 | next-tick "1" 2044 | 2045 | tmp@^0.0.29: 2046 | version "0.0.29" 2047 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" 2048 | dependencies: 2049 | os-tmpdir "~1.0.1" 2050 | 2051 | tough-cookie@~2.3.0: 2052 | version "2.3.4" 2053 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" 2054 | integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA== 2055 | dependencies: 2056 | punycode "^1.4.1" 2057 | 2058 | tough-cookie@~2.5.0: 2059 | version "2.5.0" 2060 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 2061 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 2062 | dependencies: 2063 | psl "^1.1.28" 2064 | punycode "^2.1.1" 2065 | 2066 | tunnel-agent@^0.6.0: 2067 | version "0.6.0" 2068 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2069 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 2070 | dependencies: 2071 | safe-buffer "^5.0.1" 2072 | 2073 | tunnel-agent@~0.4.1: 2074 | version "0.4.3" 2075 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" 2076 | 2077 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2078 | version "0.14.5" 2079 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2080 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 2081 | 2082 | type-detect@^4.0.0, type-detect@^4.0.5: 2083 | version "4.0.8" 2084 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2085 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2086 | 2087 | type@^1.0.1: 2088 | version "1.2.0" 2089 | resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" 2090 | integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== 2091 | 2092 | type@^2.0.0: 2093 | version "2.0.0" 2094 | resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" 2095 | integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== 2096 | 2097 | type@^2.7.2: 2098 | version "2.7.2" 2099 | resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" 2100 | integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== 2101 | 2102 | typedarray@^0.0.6: 2103 | version "0.0.6" 2104 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 2105 | 2106 | unzip-response@^1.0.2: 2107 | version "1.0.2" 2108 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" 2109 | 2110 | update-notifier@0.5.0: 2111 | version "0.5.0" 2112 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.5.0.tgz#07b5dc2066b3627ab3b4f530130f7eddda07a4cc" 2113 | dependencies: 2114 | chalk "^1.0.0" 2115 | configstore "^1.0.0" 2116 | is-npm "^1.0.0" 2117 | latest-version "^1.0.0" 2118 | repeating "^1.1.2" 2119 | semver-diff "^2.0.0" 2120 | string-length "^1.0.0" 2121 | 2122 | update-notifier@1.0.3: 2123 | version "1.0.3" 2124 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a" 2125 | integrity sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o= 2126 | dependencies: 2127 | boxen "^0.6.0" 2128 | chalk "^1.0.0" 2129 | configstore "^2.0.0" 2130 | is-npm "^1.0.0" 2131 | latest-version "^2.0.0" 2132 | lazy-req "^1.1.0" 2133 | semver-diff "^2.0.0" 2134 | xdg-basedir "^2.0.0" 2135 | 2136 | uri-js@^4.2.2: 2137 | version "4.4.1" 2138 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2139 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2140 | dependencies: 2141 | punycode "^2.1.0" 2142 | 2143 | url-parse-lax@^1.0.0: 2144 | version "1.0.0" 2145 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 2146 | dependencies: 2147 | prepend-http "^1.0.1" 2148 | 2149 | user-home@2.0.0: 2150 | version "2.0.0" 2151 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" 2152 | dependencies: 2153 | os-homedir "^1.0.0" 2154 | 2155 | util-deprecate@~1.0.1: 2156 | version "1.0.2" 2157 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2158 | 2159 | uuid@^2.0.1: 2160 | version "2.0.3" 2161 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" 2162 | 2163 | uuid@^3.3.2: 2164 | version "3.4.0" 2165 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 2166 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 2167 | 2168 | verbal-expressions@0.2.1: 2169 | version "0.2.1" 2170 | resolved "https://registry.yarnpkg.com/verbal-expressions/-/verbal-expressions-0.2.1.tgz#28b845f760dd9f91d6bc351d2e0bb48fa95c6daf" 2171 | 2172 | verror@1.3.6: 2173 | version "1.3.6" 2174 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 2175 | dependencies: 2176 | extsprintf "1.0.2" 2177 | 2178 | weak-map@^1.0.5: 2179 | version "1.0.5" 2180 | resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.5.tgz#79691584d98607f5070bd3b70a40e6bb22e401eb" 2181 | 2182 | which@^1.2.9: 2183 | version "1.2.12" 2184 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" 2185 | dependencies: 2186 | isexe "^1.1.1" 2187 | 2188 | widest-line@^1.0.0: 2189 | version "1.0.0" 2190 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" 2191 | dependencies: 2192 | string-width "^1.0.1" 2193 | 2194 | wordwrap@~0.0.2: 2195 | version "0.0.3" 2196 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2197 | 2198 | wrappy@1: 2199 | version "1.0.2" 2200 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2201 | 2202 | write-file-atomic@^1.1.2: 2203 | version "1.2.0" 2204 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.2.0.tgz#14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab" 2205 | dependencies: 2206 | graceful-fs "^4.1.2" 2207 | imurmurhash "^0.1.4" 2208 | slide "^1.1.5" 2209 | 2210 | xdg-basedir@^2.0.0: 2211 | version "2.0.0" 2212 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" 2213 | dependencies: 2214 | os-homedir "^1.0.0" 2215 | 2216 | xtend@^4.0.0: 2217 | version "4.0.2" 2218 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 2219 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 2220 | 2221 | yallist@^2.0.0: 2222 | version "2.0.0" 2223 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" 2224 | --------------------------------------------------------------------------------