pax_global_header00006660000000000000000000000064136225737400014523gustar00rootroot0000000000000052 comment=0de12b299d5d5b5ec05cc43e18e853a95bffb25a superagent-5.2.2/000077500000000000000000000000001362257374000137065ustar00rootroot00000000000000superagent-5.2.2/.browserslistrc000066400000000000000000000000661362257374000170000ustar00rootroot00000000000000# Browsers that we support > 1% last 2 versions ie 9 superagent-5.2.2/.dist.babelrc000066400000000000000000000002421362257374000162410ustar00rootroot00000000000000{ "presets": [ ["@babel/env", { "targets": { "browsers": [ "> 1%", "last 2 versions", "ie 9" ] } }] ], "sourceMaps": "inline" } superagent-5.2.2/.dist.eslintrc000066400000000000000000000013031362257374000164710ustar00rootroot00000000000000{ "extends": ["eslint:recommended"], "env": { "node": false, "browser": true, "amd": true, "es6": true }, "plugins": ["compat"], "rules": { "compat/compat": "error", "no-console": "off", "no-empty": "off", "no-extra-semi": "off", "no-func-assign": "off", "no-undef": "off", "no-unused-vars": "off", "no-useless-escape": "off", "no-cond-assign": "off", "no-redeclare": "off", "node/no-exports-assign": "off" }, "globals": { "regeneratorRuntime": "writable" }, "settings": { "polyfills": [ "Promise", "Array.from", "Symbol", "Object.getOwnPropertySymbols", "Object.setPrototypeOf" ] } } superagent-5.2.2/.editorconfig000066400000000000000000000002231362257374000163600ustar00rootroot00000000000000root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true superagent-5.2.2/.gitattributes000066400000000000000000000000141362257374000165740ustar00rootroot00000000000000* text=auto superagent-5.2.2/.gitignore000066400000000000000000000002711362257374000156760ustar00rootroot00000000000000build lib-cov coverage.html .DS_Store node_modules *.sock test.js components test/node/fixtures/tmp.json .idea superagent.js package-lock.json *.log coverage .nyc_output lib dist *.swp superagent-5.2.2/.lib.babelrc000066400000000000000000000002731362257374000160500ustar00rootroot00000000000000{ "presets": [ ["@babel/env", { "targets": { "node": "6.4.0", "browsers": [ "> 1%", "last 2 versions", "ie 9" ] } }] ], "sourceMaps": "inline" } superagent-5.2.2/.lib.eslintrc000066400000000000000000000010521362257374000162750ustar00rootroot00000000000000{ "extends": ["eslint:recommended", "plugin:node/recommended"], "env": { "browser": true }, "rules": { "node/no-deprecated-api": "off", "no-console": "off", "no-unused-vars": "off", "no-empty": "off", "node/no-unsupported-features/node-builtins": "off", "no-func-assign": "off", "no-global-assign": ["error", {"exceptions": ["exports"]}], "node/no-exports-assign": "off" }, "overrides": [ { "files": [ "lib/client.js" ], "globals": { "ActiveXObject": "readable" } } ] } superagent-5.2.2/.npmignore000066400000000000000000000001551362257374000157060ustar00rootroot00000000000000support test examples *.sock lib-cov coverage.html bower.json coverage src .travis.yml .nojekyll .nyc_output superagent-5.2.2/.remarkignore000066400000000000000000000000401362257374000163660ustar00rootroot00000000000000CONTRIBUTING.md HISTORY.md docs superagent-5.2.2/.travis.yml000066400000000000000000000005731362257374000160240ustar00rootroot00000000000000sudo: false language: node_js node_js: - "10" - "8" after_success: npm run coverage env: global: - SAUCE_USERNAME='shtylman-superagent' - SAUCE_ACCESS_KEY='39a45464-cb1d-4b8d-aa1f-83c7c04fa673' matrix: include: - node_js: "9" env: BROWSER=1 include: - node_js: "11" env: HTTP2_TEST=1 include: - node_js: "12" env: HTTP2_TEST=1 superagent-5.2.2/.zuul.yml000066400000000000000000000005041362257374000155050ustar00rootroot00000000000000ui: mocha-bdd server: ./test/support/server.js tunnel_host: http://focusaurus.com browsers: - name: chrome version: latest - name: firefox version: latest - name: safari version: latest - name: ie version: 9..latest browserify: - transform: name: babelify configFile: './.dist.babelrc' superagent-5.2.2/CONTRIBUTING.md000066400000000000000000000005461362257374000161440ustar00rootroot00000000000000When submitting a PR, your chance of acceptance increases if you do the following: * Code style is consistent with existing in the file. * Tests are passing (client and server). * You add a test for the failing issue you are fixing. * Code changes are focused on the area of discussion. * Do not rebuild the distribution files or increment version numbers. superagent-5.2.2/HISTORY.md000066400000000000000000000606051362257374000154000ustar00rootroot00000000000000# This HISTORY log is deprecated Please see [GitHub releases page](https://github.com/visionmedia/superagent/releases) for the current changelog. # 4.1.0 (2018-12-26) * `.connect()` IP/DNS override option (Kornel) * `.trustLocalhost()` option for allowing broken HTTPS on `localhost` * `.abort()` used with promises rejects the promise. # 4.0.0 (2018-11-17) ## Breaking changes * Node.js v4 has reached it's end of life, so we no longer support it. It's v6+ or later. We recommend Node.js 10. * We now use ES6 in the browser code, too. * If you're using Browserify or Webpack to package code for Internet Explorer, you will also have to use Babel. * The pre-built node_modules/superagent.js is still ES5-compatible. * `.end(…)` returns `undefined` instead of the request. If you need the request object after calling `.end()` (and you probably don't), save it in a variable and call `request.end(…)`. Consider not using `.end()` at all, and migrating to promises by calling `.then()` instead. * In Node, responses with unknown MIME type are buffered by default. To get old behavior, if you use custom _unbuffered_ parsers, add `.buffer(false)` to requests or set `superagent.buffer[yourMimeType] = false`. * Invalid uses of `.pipe()` throw. ## Minor changes * Throw if `req.abort().end()` is called * Throw if using unsupported mix of send and field * Reject `.end()` promise on all error events (Kornel Lesiński) * Set `https.servername` from the `Host` header (Kornel Lesiński) * Leave backticks unencoded in query strings where possible (Ethan Resnick) * Update node-mime to 2.x (Alexey Kucherenko) * Allow default buffer settings based on response-type (shrey) * `response.buffered` is more accurate. # 3.8.3 (2018-04-29) * Add flags for 201 & 422 responses (Nikhil Fadnis) * Emit progress event while uploading Node `Buffer` via send method (Sergey Akhalkov) * Fixed setting correct cookies for redirects (Damien Clark) * Replace .catch with ['catch'] for IE9 Support (Miguel Stevens) # 3.8.2 (2017-12-09) * Fixed handling of exceptions thrown from callbacks * Stricter matching of `+json` MIME types. # 3.8.1 (2017-11-08) * Clear authorization header on cross-domain redirect # 3.8.0 * Added support for "globally" defined headers and event handlers via `superagent.agent()`. It now remembers default settings for all its requests. * Added optional callback to `.retry()` (Alexander Murphy) * Unified auth args handling in node/browser (Edmundo Alvarez) * Fixed error handling in zlib pipes (Kornel) * Documented that 3xx status codes are errors (Mickey Reiss) # 3.7.0 (2017-10-17) * Limit maximum response size. Prevents zip bombs (Kornel) * Catch and pass along errors in `.ok()` callback (Jeremy Ruppel) * Fixed parsing of XHR headers without a newline (nsf) # 3.6.2 (2017-10-02) * Upgrade MIME type dependency to a newer, secure version * Recognize PDF MIME as binary * Fix for error in subsequent require() calls (Steven de Salas) # 3.6.0 (2017-08-20) * Support disabling TCP_NODELAY option ([#1240](https://github.com/visionmedia/superagent/issues/1240)) (xiamengyu) * Send payload in query string for GET and HEAD shorthand API (Peter Lyons) * Support passphrase with pfx certificate (Paul Westerdale (ABRS Limited)) * Documentation improvements (Peter Lyons) * Fixed duplicated query string params ([#1200](https://github.com/visionmedia/superagent/issues/1200)) (Kornel) # 3.5.1 (2017-03-18) * Allow crossDomain errors to be retried ([#1194](https://github.com/visionmedia/superagent/issues/1194)) (Michael Olson) * Read responseType property from the correct object (Julien Dupouy) * Check for ownProperty before adding header (Lucas Vieira) # 3.5.0 (2017-02-23) * Add errno to distinguish between request timeout and body download timeout ([#1184](https://github.com/visionmedia/superagent/issues/1184)) (Kornel Lesiński) * Warn about bogus timeout options ([#1185](https://github.com/visionmedia/superagent/issues/1185)) (Kornel Lesiński) # 3.4.4 (2017-02-17) * Treat videos like images (Kornel Lesiński) * Avoid renaming module (Kornel Lesiński) # 3.4.3 (2017-02-14) * Fixed being able to define own parsers when their mime type starts with `text/` (Damien Clark) * `withCredentials(false)` (Andy Woods) * Use `formData.on` instead of `.once` (Kornel Lesiński) * Ignore `attach("file",null)` (Kornel Lesiński) # 3.4.1 (2017-01-29) * Allow `retry()` and `retry(0)` (Alexander Pope) * Allow optional body/data in DELETE requests (Alpha Shuro) * Fixed query string on retried requests (Kornel Lesiński) # 3.4.0 (2017-01-25) * New `.retry(n)` method and `err.retries` (Alexander Pope) * Docs for HTTPS request (Jun Wan Goh) # 3.3.1 (2016-12-17) * Fixed "double callback bug" warning on timeouts of gzipped responses # 3.3.0 (2016-12-14) * Added `.ok(callback)` that allows customizing which responses are errors (Kornel Lesiński) * Added `.responseType()` to Node version (Kornel Lesiński) * Added `.parse()` to browser version (jakepearson) * Fixed parse error when using `responseType('blob')` (Kornel Lesiński) # 3.2.0 (2016-12-11) * Added `.timeout({response:ms})`, which allows limiting maximum response time independently from total download time (Kornel Lesiński) * Added warnings when `.end()` is called more than once (Kornel Lesiński) * Added `response.links` to browser version (Lukas Eipert) * `btoa` is no longer required in IE9 (Kornel Lesiński) * Fixed `.sortQuery()` on URLs without query strings (Kornel Lesiński) * Refactored common response code into `ResponseBase` (Lukas Eipert) # 3.1.0 (2016-11-28) * Added `.sortQuery()` (vicanso) * Added support for arrays and bools in `.field()` (Kornel Lesiński) * Made `superagent.Request` subclassable without need to patch all static methods (Kornel Lesiński) # 3.0.0 (2016-11-19) * Dropped support for Node 0.x. Please upgrade to at least Node 4. * Dropped support for componentjs (Damien Caselli) * Removed deprecated `.part()`/`superagent.Part` APIs. * Removed unreliable `.body` property on internal response object used by unbuffered parsers. Note: the normal `response.body` is unaffected. * Multiple `.send()` calls mixing `Buffer`/`Blob` and JSON data are not possible and will now throw instead of messing up the data. * Improved `.send()` data object type check (Fernando Mendes) * Added common prototype for Node and browser versions (Andreas Helmberger) * Added `http+unix:` schema to support Unix sockets (Yuki KAN) * Added full `attach` options parameter in the Node version (Lapo Luchini) * Added `pfx` TLS option with new `pfx()` method. (Reid Burke) * Internally changed `.on` to `.once` to prevent possible memory leaks (Matt Blair) * Made all errors reported as an event (Kornel Lesiński) # 2.3.0 (2016-09-20) * Enabled `.field()` to handle objects (Affan Shahid) * Added authentication with client certificates (terusus) * Added `.catch()` for more Promise-like interface (Maxim Samoilov, Kornel Lesiński) * Silenced errors from incomplete gzip streams for compatibility with web browsers (Kornel Lesiński) * Fixed `event.direction` in uploads (Kornel Lesiński) * Fixed returned value of overwritten response object's `on()` method (Juan Dopazo) # 2.2.0 (2016-08-13) * Added `timedout` property to node Request instance (Alexander Pope) * Unified `null` querystring values in node and browser environments. (George Chung) # 2.1.0 (2016-06-14) * Refactored async parsers. Now the `end` callback waits for async parsers to finish (Kornel Lesiński) * Errors thrown in `.end()` callback don't cause the callback to be called twice (Kornel Lesiński) * Added `headers` to `toJSON()` (Tao) # 2.0.0 (2016-05-29) ## Breaking changes Breaking changes are in rarely used functionality, so we hope upgrade will be smooth for most users. * Browser: The `.parse()` method has been renamed to `.serialize()` for consistency with NodeJS version. * Browser: Query string keys without a value used to be parsed as `'undefined'`, now their value is `''` (empty string) (shura, Kornel Lesiński). * NodeJS: The `redirect` event is called after new query string and headers have been set and is allowed to override the request URL (Kornel Lesiński) * `.then()` returns a real `Promise`. Note that use of superagent with promises now requires a global `Promise` object. If you target Internet Explorer or Node 0.10, you'll need `require('es6-promise').polyfill()` or similar. * Upgraded all dependencies (Peter Lyons) * Renamed properties documented as `@api private` to have `_prefixed` names (Kornel Lesiński) ## Probably not breaking changes: * Extracted common functions to request-base (Peter Lyons) * Fixed race condition in pipe tests (Peter Lyons) * Handle `FormData` error events (scriptype) * Fixed wrong jsdoc of Request#attach (George Chung) * Updated and improved tests (Peter Lyons) * `request.head()` supports `.redirects(5)` call (Kornel Lesiński) * `response` event is also emitted when using `.pipe()` # 1.8.2 (2016-03-20) * Fixed handling of HTTP status 204 with content-encoding: gzip (Andrew Shelton) * Handling of FormData error events (scriptype) * Fixed parsing of `vnd+json` MIME types (Kornel Lesiński) * Aliased browser implementation of `.parse()` as `.serialize()` for forward compatibility # 1.8.1 (2016-03-14) * Fixed form-data incompatibility with IE9 # 1.8.0 (2016-03-09) * Extracted common code into request-base class (Peter Lyons) * It does not affect the public API, but please let us know if you notice any plugins/subclasses breaking! * Added option `{type:'auto'}` to `auth` method, which enables browser-native auth types (Jungle, Askar Yusupov) * Added `responseType()` to set XHR `responseType` (chris) * Switched to form-data for browserify-compatible `FormData` (Peter Lyons) * Added `statusCode` to error response when JSON response is malformed (mattdell) * Prevented TCP port conflicts in all tests (Peter Lyons) * Updated form-data dependency # 1.7.2 (2016-01-26) * Fix case-sensitivity of header fields introduced by [`a4ddd6a`](https://github.com/visionmedia/superagent/commit/a4ddd6a). (Edward J. Jinotti) * bump extend dependency, as former version did not contain any license information (Lukas Eipert) # 1.7.1 (2016-01-21) * Fixed a conflict with express when using npm 3.x (Glenn) * Fixed redirects after a multipart/form-data POST request (cyclist2) # 1.7.0 (2016-01-18) * When attaching files, read default filename from the `File` object (JD Isaacks) * Add `direction` property to `progress` events (Joseph Dykstra) * Update component-emitter & formidable (Kornel Lesiński) * Don't re-encode query string needlessly (Ruben Verborgh) * ensure querystring is appended when doing `stream.pipe(request)` (Keith Grennan) * change set header function, not call `this.request()` until call `this.end()` (vicanso) * Add no-op `withCredentials` to Node API (markdalgleish) * fix `delete` breaking on ie8 (kenjiokabe) * Don't let request error override responses (Clay Reimann) * Increased number of tests shared between node and client (Kornel Lesiński) # 1.6.0/1.6.1 (2015-12-09) * avoid misleading CORS error message * added 'progress' event on file/form upload in Node (Olivier Lalonde) * return raw response if the response parsing fails (Rei Colina) * parse content-types ending with `+json` as JSON (Eiryyy) * fix to avoid throwing errors on aborted requests (gjurgens) * retain cookies on redirect when hosts match (Tom Conroy) * added Bower manifest (Johnny Freeman) * upgrade to latest cookiejar (Andy Burke) # 1.5.0 (2015-11-30) * encode array values as `key=1&key=2&key=3` etc... (aalpern, Davis Kim) * avoid the error which is omitted from 'socket hang up' * faster JSON parsing, handling of zlib errors (jbellenger) * fix IE11 sends 'undefined' string if data was undefined (Vadim Goncharov) * alias `del()` method as `delete()` (Aaron Krause) * revert Request#parse since it was actually Response#parse # 1.4.0 (2015-09-14) * add Request#parse method to client library * add missing statusCode in client response * don't apply JSON heuristics if a valid parser is found * fix detection of root object for webworkers # 1.3.0 (2015-08-05) * fix incorrect content-length of data set to buffer * serialize request data takes into account charsets * add basic promise support via a `then` function # 1.2.0 (2015-04-13) * add progress events to downlodas * make usable in webworkers * add support for 308 redirects * update node-form-data dependency * update to work in react native * update node-mime dependency # 1.1.0 (2015-03-13) * Fix responseType checks without xhr2 and ie9 tests (rase-) * errors have .status and .response fields if applicable (defunctzombie) * fix end callback called before saving cookies (rase-) # 1.0.0 / 2015-03-08 * All non-200 responses are treated as errors now. (The callback is called with an error when the response has a status < 200 or >= 300 now. In previous versions this would not have raised an error and the client would have to check the `res` object. See [#283](https://github.com/visionmedia/superagent/issues/283). * keep timeouts intact across redirects (hopkinsth) * handle falsy json values (themaarten) * fire response events in browser version (Schoonology) * getXHR exported in client version (KidsKilla) * remove arity check on `.end()` callbacks (defunctzombie) * avoid setting content-type for host objects (rexxars) * don't index array strings in querystring (travisjeffery) * fix pipe() with redirects (cyrilis) * add xhr2 file download (vstirbu) * set default response type to text/plain if not specified (warrenseine) # 0.21.0 / 2014-11-11 * Trim text before parsing json (gjohnson) * Update tests to express 4 (gaastonsr) * Prevent double callback when error is thrown (pgn-vole) * Fix missing clearTimeout (nickdima) * Update debug (TooTallNate) # 0.20.0 / 2014-10-02 * Add toJSON() to request and response instances. (yields) * Prevent HEAD requests from getting parsed. (gjohnson) * Update debug. (TooTallNate) # 0.19.1 / 2014-09-24 * Fix basic auth issue when password is falsey value. (gjohnson) # 0.19.0 / 2014-09-24 * Add unset() to browser. (shesek) * Prefer XHR over ActiveX. (omeid) * Catch parse errors. (jacwright) * Update qs dependency. (wercker) * Add use() to node. (Financial-Times) * Add response text to errors. (yields) * Don't send empty cookie headers. (undoZen) * Don't parse empty response bodies. (DveMac) * Use hostname when setting cookie host. (prasunsultania) # 0.18.2 / 2014-07-12 * Handle parser errors. (kof) * Ensure not to use default parsers when there is a user defined one. (kof) # 0.18.1 / 2014-07-05 * Upgrade cookiejar dependency (juanpin) * Support image mime types (nebulade) * Make .agent chainable (kof) * Upgrade debug (TooTallNate) * Fix docs (aheckmann) # 0.18.0 / 2014-04-29 * Use "form-data" module for the multipart/form-data implementation. (TooTallNate) * Add basic `field()` and `attach()` functions for HTML5 FormData. (TooTallNate) * Deprecate `part()`. (TooTallNate) * Set default user-agent header. (bevacqua) * Add `unset()` method for removing headers. (bevacqua) * Update cookiejar. (missinglink) * Fix response error formatting. (shesek) # 0.17.0 / 2014-03-06 * supply uri malformed error to the callback (yields) * add request event (yields) * allow simple auth (yields) * add request event (yields) * switch to component/reduce (visionmedia) * fix part content-disposition (mscdex) * add browser testing via zuul (defunctzombie) * adds request.use() (johntron) # 0.16.0 / 2014-01-07 * remove support for 0.6 (superjoe30) * fix CORS withCredentials (wejendorp) * add "test" script (superjoe30) * add request .accept() method (nickl-) * add xml to mime types mappings (nickl-) * fix parse body error on HEAD requests (gjohnson) * fix documentation typos (matteofigus) * fix content-type + charset (bengourley) * fix null values on query parameters (cristiandouce) # 0.15.7 / 2013-10-19 * pin should.js to 1.3.0 due to breaking change in 2.0.x * fix browserify regression # 0.15.5 / 2013-10-09 * add browser field to support browserify * fix .field() value number support # 0.15.4 / 2013-07-09 * node: add a Request#agent() function to set the http Agent to use # 0.15.3 / 2013-07-05 * fix .pipe() unzipping on more recent nodes. Closes [#240](https://github.com/visionmedia/superagent/issues/240) * fix passing an empty object to .query() no longer appends "?" * fix formidable error handling * update formidable # 0.15.2 / 2013-07-02 * fix: emit 'end' when piping. # 0.15.1 / 2013-06-26 * add try/catch around parseLinks # 0.15.0 / 2013-06-25 * make `Response#toError()` have a more meaningful `message` # 0.14.9 / 2013-06-15 * add debug()s to the node client * add .abort() method to node client # 0.14.8 / 2013-06-13 * set .agent = false always * remove X-Requested-With. Closes [#189](https://github.com/visionmedia/superagent/issues/189) # 0.14.7 / 2013-06-06 * fix unzip error handling # 0.14.6 / 2013-05-23 * fix HEAD unzip bug # 0.14.5 / 2013-05-23 * add flag to ensure the callback is **never** invoked twice # 0.14.4 / 2013-05-22 * add superagent.js build output * update qs * update emitter-component * revert "add browser field to support browserify" see [GH-221](https://github.com/visionmedia/superagent/issues/221) # 0.14.3 / 2013-05-18 * add browser field to support browserify # 0.14.2/ 2013-05-07 * add host object check to fix serialization of File/Blobs etc as json # 0.14.1 / 2013-04-09 * update qs # 0.14.0 / 2013-04-02 * add client-side basic auth * fix retaining of .set() header field case # 0.13.0 / 2013-03-13 * add progress events to client * add simple example * add res.headers as alias of res.header for browser client * add res.get(field) to node/client # 0.12.4 / 2013-02-11 * fix get content-type even if can't get other headers in firefox. fixes [#181](https://github.com/visionmedia/superagent/issues/181) # 0.12.3 / 2013-02-11 * add quick "progress" event support # 0.12.2 / 2013-02-04 * add test to check if response acts as a readable stream * add ReadableStream in the Response prototype. * add test to assert correct redirection when the host changes in the location header. * add default Accept-Encoding. Closes [#155](https://github.com/visionmedia/superagent/issues/155) * fix req.pipe() return value of original stream for node parity. Closes [#171](https://github.com/visionmedia/superagent/issues/171) * remove the host header when cleaning headers to properly follow the redirection. # 0.12.1 / 2013-01-10 * add x-domain error handling # 0.12.0 / 2013-01-04 * add header persistence on redirects # 0.11.0 / 2013-01-02 * add .error Error object. Closes [#156](https://github.com/visionmedia/superagent/issues/156) * add forcing of res.text removal for FF HEAD responses. Closes [#162](https://github.com/visionmedia/superagent/issues/162) * add reduce component usage. Closes [#90](https://github.com/visionmedia/superagent/issues/90) * move better-assert dep to development deps # 0.10.0 / 2012-11-14 * add req.timeout(ms) support for the client # 0.9.10 / 2012-11-14 * fix client-side .query(str) support # 0.9.9 / 2012-11-14 * add .parse(fn) support * fix socket hangup with dates in querystring. Closes [#146](https://github.com/visionmedia/superagent/issues/146) * fix socket hangup "error" event when a callback of arity 2 is provided # 0.9.8 / 2012-11-03 * add emission of error from `Request#callback()` * add a better fix for nodes weird socket hang up error * add PUT/POST/PATCH data support to client short-hand functions * add .license property to component.json * change client portion to build using component(1) * fix GET body support [guille] # 0.9.7 / 2012-10-19 * fix `.buffer()` `res.text` when no parser matches # 0.9.6 / 2012-10-17 * change: use `this` when `window` is undefined * update to new component spec [juliangruber] * fix emission of "data" events for compressed responses without encoding. Closes [#125](https://github.com/visionmedia/superagent/issues/125) # 0.9.5 / 2012-10-01 * add field name to .attach() * add text "parser" * refactor isObject() * remove wtf isFunction() helper # 0.9.4 / 2012-09-20 * fix `Buffer` responses [TooTallNate] * fix `res.type` when a "type" param is present [TooTallNate] # 0.9.3 / 2012-09-18 * remove **GET** `.send()` == `.query()` special-case (**API** change !!!) # 0.9.2 / 2012-09-17 * add `.aborted` prop * add `.abort()`. Closes [#115](https://github.com/visionmedia/superagent/issues/115) # 0.9.1 / 2012-09-07 * add `.forbidden` response property * add component.json * change emitter-component to 0.0.5 * fix client-side tests # 0.9.0 / 2012-08-28 * add `.timeout(ms)`. Closes [#17](https://github.com/visionmedia/superagent/issues/17) # 0.8.2 / 2012-08-28 * fix pathname relative redirects. Closes [#112](https://github.com/visionmedia/superagent/issues/112) # 0.8.1 / 2012-08-21 * fix redirects when schema is specified # 0.8.0 / 2012-08-19 * add `res.buffered` flag * add buffering of text/\*, json and forms only by default. Closes [#61](https://github.com/visionmedia/superagent/issues/61) * add `.buffer(false)` cancellation * add cookie jar support [hunterloftis] * add agent functionality [hunterloftis] # 0.7.0 / 2012-08-03 * allow `query()` to be called after the internal `req` has been created [tootallnate] # 0.6.0 / 2012-07-17 * add `res.send('foo=bar')` default of "application/x-www-form-urlencoded" # 0.5.1 / 2012-07-16 * add "methods" dep * add `.end()` arity check to node callbacks * fix unzip support due to weird node internals # 0.5.0 / 2012-06-16 * Added "Link" response header field parsing, exposing `res.links` # 0.4.3 / 2012-06-15 * Added 303, 305 and 307 as redirect status codes [slaskis] * Fixed passing an object as the url # 0.4.2 / 2012-06-02 * Added component support * Fixed redirect data # 0.4.1 / 2012-04-13 * Added HTTP PATCH support * Fixed: GET / HEAD when following redirects. Closes [#86](https://github.com/visionmedia/superagent/issues/86) * Fixed Content-Length detection for multibyte chars # 0.4.0 / 2012-03-04 * Added `.head()` method [browser]. Closes [#78](https://github.com/visionmedia/superagent/issues/78) * Added `make test-cov` support * Added multipart request support. Closes [#11](https://github.com/visionmedia/superagent/issues/11) * Added all methods that node supports. Closes [#71](https://github.com/visionmedia/superagent/issues/71) * Added "response" event providing a Response object. Closes [#28](https://github.com/visionmedia/superagent/issues/28) * Added `.query(obj)`. Closes [#59](https://github.com/visionmedia/superagent/issues/59) * Added `res.type` (browser). Closes [#54](https://github.com/visionmedia/superagent/issues/54) * Changed: default `res.body` and `res.files` to {} * Fixed: port existing query-string fix (browser). Closes [#57](https://github.com/visionmedia/superagent/issues/57) # 0.3.0 / 2012-01-24 * Added deflate/gzip support [guillermo] * Added `res.type` (Content-Type void of params) * Added `res.statusCode` to mirror node * Added `res.headers` to mirror node * Changed: parsers take callbacks * Fixed optional schema support. Closes [#49](https://github.com/visionmedia/superagent/issues/49) # 0.2.0 / 2012-01-05 * Added url auth support * Added `.auth(username, password)` * Added basic auth support [node]. Closes [#41](https://github.com/visionmedia/superagent/issues/41) * Added `make test-docs` * Added guillermo's EventEmitter. Closes [#16](https://github.com/visionmedia/superagent/issues/16) * Removed `Request#data()` for SS, renamed to `send()` * Removed `Request#data()` from client, renamed to `send()` * Fixed array support. [browser] * Fixed array support. Closes [#35](https://github.com/visionmedia/superagent/issues/35) [node] * Fixed `EventEmitter#emit()` # 0.1.3 / 2011-10-25 * Added error to callback * Bumped node dep for 0.5.x # 0.1.2 / 2011-09-24 * Added markdown documentation * Added `request(url[, fn])` support to the client * Added `qs` dependency to package.json * Added options for `Request#pipe()` * Added support for `request(url, callback)` * Added `request(url)` as shortcut for `request.get(url)` * Added `Request#pipe(stream)` * Added inherit from `Stream` * Added multipart support * Added ssl support (node) * Removed Content-Length field from client * Fixed buffering, `setEncoding()` to utf8 [reported by stagas] * Fixed "end" event when piping # 0.1.1 / 2011-08-20 * Added `res.redirect` flag (node) * Added redirect support (node) * Added `Request#redirects(n)` (node) * Added `.set(object)` header field support * Fixed `Content-Length` support # 0.1.0 / 2011-08-09 * Added support for multiple calls to `.data()` * Added support for `.get(uri, obj)` * Added GET `.data()` querystring support * Added IE{6,7,8} support [alexyoung] # 0.0.1 / 2011-08-05 * Initial commit superagent-5.2.2/LICENSE000066400000000000000000000021171362257374000147140ustar00rootroot00000000000000(The MIT License) Copyright (c) 2014-2016 TJ Holowaychuk Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. superagent-5.2.2/Makefile000066400000000000000000000024601362257374000153500ustar00rootroot00000000000000 NODETESTS ?= test/*.js test/node/*.js BROWSERTESTS ?= test/*.js test/client/*.js REPORTER = spec test: @if [ "x$(BROWSER)" = "x" ]; then make test-node; else make test-browser; fi test-node: @NODE_ENV=test ./node_modules/.bin/mocha \ --require should \ --trace-warnings \ --throw-deprecation \ --reporter $(REPORTER) \ --timeout 5000 \ $(NODETESTS) test-node-http2: @NODE_ENV=test HTTP2_TEST=1 node ./node_modules/.bin/mocha \ --require should \ --trace-warnings \ --throw-deprecation \ --reporter $(REPORTER) \ --timeout 5000 \ $(NODETESTS) test-cov: lib-cov SUPERAGENT_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html test-browser: SAUCE_APPIUM_VERSION=1.7 ./node_modules/.bin/zuul -- $(BROWSERTESTS) test-browser-local: ./node_modules/.bin/zuul --no-coverage --local 4000 -- $(BROWSERTESTS) lib-cov: jscoverage lib lib-cov test-server: @node test/server docs: index.html test-docs docs/index.md index.html: docs/index.md docs/head.html docs/tail.html marked < $< \ | cat docs/head.html - docs/tail.html \ > $@ docclean: rm -f index.html docs/test.html test-docs: docs/head.html docs/tail.html make test REPORTER=doc \ | cat docs/head.html - docs/tail.html \ > docs/test.html clean: rm -fr components .PHONY: test-cov test docs test-docs clean test-browser-local superagent-5.2.2/README.md000066400000000000000000000224511362257374000151710ustar00rootroot00000000000000# superagent [![build status](https://img.shields.io/travis/visionmedia/superagent.svg)](https://travis-ci.org/visionmedia/superagent) [![code coverage](https://img.shields.io/codecov/c/github/visionmedia/superagent.svg)](https://codecov.io/gh/visionmedia/superagent) [![code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier) [![made with lass](https://img.shields.io/badge/made_with-lass-95CC28.svg)](https://lass.js.org) [![license](https://img.shields.io/github/license/visionmedia/superagent.svg)](LICENSE) > Small progressive client-side HTTP request library, and Node.js module with the same API, supporting many high-level HTTP client features ## Table of Contents * [Install](#install) * [Usage](#usage) * [Node](#node) * [Browser](#browser) * [Supported Platforms](#supported-platforms) * [Required Browser Features](#required-browser-features) * [Plugins](#plugins) * [Upgrading from previous versions](#upgrading-from-previous-versions) * [Contributors](#contributors) * [License](#license) ## Install [npm][]: ```sh npm install superagent ``` [yarn][]: ```sh yarn add superagent ``` ## Usage ### Node ```js const superagent = require('superagent'); // callback superagent .post('/api/pet') .send({ name: 'Manny', species: 'cat' }) // sends a JSON post body .set('X-API-Key', 'foobar') .set('accept', 'json') .end((err, res) => { // Calling the end function will send the request }); // promise with then/catch superagent.post('/api/pet').then(console.log).catch(console.error); // promise with async/await (async () => { try { const res = await superagent.post('/api/pet'); console.log(res); } catch (err) { console.error(err); } })(); ``` ### Browser **The browser-ready, minified version of `superagent` is only 6 KB (minified and gzipped)!** Browser-ready versions of this module are available via [jsdelivr][], [unpkg][], and also in the `node_modules/superagent/dist` folder in downloads of the `superagent` package. > Note that we also provide unminified versions with `.js` instead of `.min.js` file extensions. #### VanillaJS This is the solution for you if you're just using ` ``` #### Bundler If you are using [browserify][], [webpack][], [rollup][], or another bundler, then you can follow the same usage as [Node](#node) above. ## Supported Platforms * Node: v6.x+ * Browsers (see [.browserslistrc](.browserslistrc)): ```sh npx browserslist ``` ```sh and_chr 71 and_ff 64 and_qq 1.2 and_uc 11.8 android 67 android 4.4.3-4.4.4 baidu 7.12 bb 10 bb 7 chrome 73 chrome 72 chrome 71 edge 18 edge 17 firefox 66 firefox 65 ie 11 ie 10 ie 9 ie_mob 11 ie_mob 10 ios_saf 12.0-12.1 ios_saf 11.3-11.4 op_mini all op_mob 46 op_mob 12.1 opera 58 opera 57 safari 12 safari 11.1 samsung 8.2 samsung 7.2-7.4 ``` ### Required Browser Features We recommend using (specifically with the bundle mentioned in [VanillaJS](#vanillajs) above): ```html ``` * IE 9-10 requires a polyfill for `Promise`, `Array.from`, `Symbol`, `Object.getOwnPropertySymbols`, and `Object.setPrototypeOf` * IE 9 requires a polyfill for `window.FormData` (we recommend [formdata-polyfill][]) ## Plugins SuperAgent is easily extended via plugins. ```js const nocache = require('superagent-no-cache'); const superagent = require('superagent'); const prefix = require('superagent-prefix')('/static'); superagent .get('/some-url') .query({ action: 'edit', city: 'London' }) // query string .use(prefix) // Prefixes *only* this request .use(nocache) // Prevents caching of *only* this request .end((err, res) => { // Do something }); ``` Existing plugins: * [superagent-no-cache](https://github.com/johntron/superagent-no-cache) - prevents caching by including Cache-Control header * [superagent-prefix](https://github.com/johntron/superagent-prefix) - prefixes absolute URLs (useful in test environment) * [superagent-suffix](https://github.com/timneutkens1/superagent-suffix) - suffix URLs with a given path * [superagent-mock](https://github.com/M6Web/superagent-mock) - simulate HTTP calls by returning data fixtures based on the requested URL * [superagent-mocker](https://github.com/shuvalov-anton/superagent-mocker) — simulate REST API * [superagent-cache](https://github.com/jpodwys/superagent-cache) - A global SuperAgent patch with built-in, flexible caching * [superagent-cache-plugin](https://github.com/jpodwys/superagent-cache-plugin) - A SuperAgent plugin with built-in, flexible caching * [superagent-jsonapify](https://github.com/alex94puchades/superagent-jsonapify) - A lightweight [json-api](http://jsonapi.org/format/) client addon for superagent * [superagent-serializer](https://github.com/zzarcon/superagent-serializer) - Converts server payload into different cases * [superagent-httpbackend](https://www.npmjs.com/package/superagent-httpbackend) - stub out requests using AngularJS' $httpBackend syntax * [superagent-throttle](https://github.com/leviwheatcroft/superagent-throttle) - queues and intelligently throttles requests * [superagent-charset](https://github.com/magicdawn/superagent-charset) - add charset support for node's SuperAgent * [superagent-verbose-errors](https://github.com/jcoreio/superagent-verbose-errors) - include response body in error messages for failed requests * [superagent-declare](https://github.com/damoclark/superagent-declare) - A simple [declarative](https://en.wikipedia.org/wiki/Declarative_programming) API for SuperAgent * [superagent-node-http-timings](https://github.com/webuniverseio/superagent-node-http-timings) - measure http timings in node.js Please prefix your plugin with `superagent-*` so that it can easily be found by others. For SuperAgent extensions such as couchdb and oauth visit the [wiki](https://github.com/visionmedia/superagent/wiki). ## Upgrading from previous versions Our breaking changes are mostly in rarely used functionality and from stricter error handling. * [4.x to 5.x](https://github.com/visionmedia/superagent/releases/tag/v5.0.0): * We've implemented the build setup of [Lass](https://lass.js.org) to simplify our stack and linting * Unminified browserified build size has been reduced from 48KB to 20KB (via `tinyify` and the latest version of Babel using `@babel/preset-env` and `.browserslistrc`) * Linting support has been added using `caniuse-lite` and `eslint-plugin-compat` * We can now target what versions of Node we wish to support more easily using `.babelrc` * [3.x to 4.x](https://github.com/visionmedia/superagent/releases/tag/v4.0.0-alpha.1): * Ensure you're running Node 6 or later. We've dropped support for Node 4. * We've started using ES6 and for compatibility with Internet Explorer you may need to use Babel. * We suggest migrating from `.end()` callbacks to `.then()` or `await`. * [2.x to 3.x](https://github.com/visionmedia/superagent/releases/tag/v3.0.0): * Ensure you're running Node 4 or later. We've dropped support for Node 0.x. * Test code that calls `.send()` multiple times. Invalid calls to `.send()` will now throw instead of sending garbage. * [1.x to 2.x](https://github.com/visionmedia/superagent/releases/tag/v2.0.0): * If you use `.parse()` in the _browser_ version, rename it to `.serialize()`. * If you rely on `undefined` in query-string values being sent literally as the text "undefined", switch to checking for missing value instead. `?key=undefined` is now `?key` (without a value). * If you use `.then()` in Internet Explorer, ensure that you have a polyfill that adds a global `Promise` object. * 0.x to 1.x: * Instead of 1-argument callback `.end(function(res){})` use `.then(res => {})`. ## Contributors | Name | | ------------------- | | **Kornel Lesiński** | | **Peter Lyons** | | **Hunter Loftis** | | **Nick Baugh** | ## License [MIT](LICENSE) © TJ Holowaychuk ## [npm]: https://www.npmjs.com/ [yarn]: https://yarnpkg.com/ [formdata-polyfill]: https://www.npmjs.com/package/formdata-polyfill [jsdelivr]: https://www.jsdelivr.com/ [unpkg]: https://unpkg.com/ [browserify]: https://github.com/browserify/browserify [webpack]: https://github.com/webpack/webpack [rollup]: https://github.com/rollup/rollup superagent-5.2.2/docs/000077500000000000000000000000001362257374000146365ustar00rootroot00000000000000superagent-5.2.2/docs/head.html000066400000000000000000000005341362257374000164270ustar00rootroot00000000000000 SuperAgent — elegant API for AJAX in Node and browsers
superagent-5.2.2/docs/images/000077500000000000000000000000001362257374000161035ustar00rootroot00000000000000superagent-5.2.2/docs/images/bg.png000066400000000000000000000212301362257374000171770ustar00rootroot00000000000000PNG  IHDRffPzPLTE#%%:;;!##9::*+-668,--556#$%355 !#%%'455/00:<<%'(566(*+666+--689)+,446+,-88://08::445-//::<##%89:,-/688--/!#$/11'(*()+++-*,,$%%'()+,,)*,022133*,----)*+,,-456002014)++()*/01-/0699135++,///*++3569;;**,::;001145(**345/0224656866999:335466889"#%"#$899.01&(*024011+-.*+,013!"#)**)+--.0$%'144//1146244&()99;%&(9:;$%&134+-/ !"012(()555%%%''(000888""#!!"<<<:::999))*##$;;;222))+,,,:;<569k| IDATx4zw/> U^D%"Q\&$Mwݫjr #i*}3>S6|n K^Lbp)63 FfWmS[!>׾3;%]|ʴ޵$ф '7EV~ngHIkvsmj~WT5Z%ԣU7X?{ ӱd`r ȕW `D⛁h :b~[@FWuMcniUԽe&)Y z}ЌZqۚřhrb%Ɖ+ 3,%,: (9=l~9j*LJQ,M.h&[ n#O檉p9"w!&i=^<# ")Ð* 6ꤗ@5)M%z4YWsDj MդY}A J#kt>7cKV(.Kb꜃>١sQdV;:8ȹ#-v\%vLp+A />&TVf8Ͼa- )Z?Z[wF[lH^KZnh*5 )v5i\٩3iZ͸׮p@&'G ЦX&(ӆؓX9 bËԥꢺtmoڪǾOW8Ue?؎8mj4ͮmyX03[hW]l 3}uE=>-x.LruKEW|ke!&O9lWx:'|=52Xy& 2%mm?z,@ r}b4sV5(Q`oS7э-(F^Xd_\CU& d1J2Xp47R5OuͰ |Ku)L*ĶI?(R?Vfx,nF\tF⾋P9$BFY4+j5R黉7FO+ NcTmgb?C*KeA`n!6^/:C~QWcKs9bǰf{"דp(m ƹ-g[%0f.DL%5Y+U׋45N\&{F[J&P$[R`'c9 ?&EnC "0n;,gP):\]i?Z4GX_K&Nݺ`w0 [%. K>\qҏFVN5UJM.nB'Z,d?l?mOC.&X%槈 b,~13JrJr" #sh@5b ɄIwND7.-r^ZW55 bD*%V~'9ܖȖHOmԍa5g]#7ӑNGpwVCF:;0QDD[{h>g~ZxҹAq*1WԎ)OȔ2*L-3BTYnOm.[wZOiB]z8 D\{:${࢘ytFOG &,< ƇQsmA'sB:4[fJ`CpuVJHdvԃk5v#kZ6+Մ;\F^f9)~:3wХU'TI"_~|913~LxD2#v!JGD&I] G»Y~*`j}fς* >}ݝw<ٹ]NX?8-#]1bw3`ۄRS pT:I#R/S#,MpSt䮑Qo+\ꘑTDԙ49ҽ)JLV'`oCR5iw; ٺJ5:@JKgB`&ɑ掩ה&;ht̒`ܭg}BG ׋;E9̮b?`ֆؔ~@,uTϦ%6*klr?0c7n{H솋<+~r)X@#xX?_ uf YFHBKjQh7ݞ) s٨ĞΗpZb`-Nz5c 5JTW-q 7 G77'&^e.d.M` 8`I !$BVXKܶV GBFh$-(#1dylyJ5=$Bb#JX^RBm&t0 }A }'0h,Mu,t,`搹=8L~@+QA7},[œwz"kb7_(U[o5<6ȓrx| sk$a1d@lrq \v*SLPM%~nՋ~A?v3HMy"=xWR.^ 9r@='W Kc ?$ 6Ef5(|ߤw|u302yf &H\H=ਈ)r*uK^U%SHjn,!HPYorbrډ^? HYpq{4Ws\ _SΔ0\㎮5 =_^Юʠt`˰.7)*u_ˊOʍD;/;"-M~,XЁsMc&nG 3ڠ9LSEsZ"-TkpO}*/uKMQ?O/uׄ{kѵxct>2YY#sT;94&U򑭉Lo$P֙ve`A݇X5*x6/|׶ x\,;-?sF P:r"YlՃM\P{!bP[&C& 3btA}ax}^_]:vn |j-ѿ:Y"R?h{Afv5[w/bs՛IVg;t@ uXi/NSDM= -Hը蘹,R)ޑzJ$_O>ObQHn@;_9cݑ+%07 ٣&xK-jXld]}UI%UQ'X'۽/ o,D(Oܳ8~R  L&q|>d/ZO%O$'x?Qb\CQJ/@ȿiiR>4d#N&};Ax.33Ʌu~3JO$a /h'Z-us|a\QS")qGݑ?uA_F)3Yapfm&?[u c 8Nئ xcl֞?*+ބ)bǬcyڄvO󎲸ettv.;3zJ ~We%:ZޱkQ^@ n0a۔8DJPvl "ꠂkh.T35*,O)i96u*NqwPDv-Qـp9/ P@hҔNXIcl|ʕA=5|7?5@|i_fX4lu~dj'}oi2ؕ4De<;O0K_/T7I̐xBpxBJMf$~Q~p@QZ2"d n>[^e: pqfe4|%;kySEOo]tH^ᖁ*=7-7( }WlPG40*: 0m"zsjtrJ6cji4q o,TX4O fr~C7TkkRzzH_eUP 8 KkܕTz[KV/Hĕ*Mj)I?"Lqps5z3{:י̠eB_x|"KDibq?jnX>tB{%_>.+GJM+@;pCy(~4z". V |hz:3msX.@FkxW UMHƀ\~gN~vX }MĖW+_ 5mLcj(MکƇ3@@t%[X ˟uVP!Dzpk@E9$R?&58 :HnAg_m0MnwMM5O_eѥ/ʅi!m|.cM~wU|N 5'+|zWs@JHMk 37lT"O:y0]k\ :~JPui)lҒ2]{-E %%?Ly&`6jW!!> V7f ZTܵ%mT{ICo^QT\FrI߬xV^n%v XGyn_6l9%==vaoư7z8_gQa?+81 8W$-;jj 0MV+bHBuܪ9kjWn孬+og#TE{|y!Az}&VwR ir? pG?mFLVs r9bM(٠xyQ[ ^¿p 7 gt8X#b&-kjŸ+/| xm `Ӓ-K >mHC5yW~8˩:gp&L R$8\+^DQkG D7-B<}"S,GRHE3gĆtH:Wel}aP񵻗I)/ ,ͅmר2d% H`)-FU8vѺmmPZͤDssK \@S琭_tpot{M{ZѦ?U'K?.X Ggd! '^s>$YWi_GXfB90aПHfhu 0^f@'}Š*'H;>nwNF4l Id5h(EoqGS[I|d7r9]M7Є2h!N!Lq̽yNhqW-t=#tp,D0ֺe;W ",alHuI`*Dàe>$nbFkV̖hrW'qpJRzXG?$?sPU p- k_Ѓ \3Z^M\oQ&U6OV]䟯zjiD7`ýg,Y^),b/)6&`xU_y3nj\쏇/9=8km'2l4/AKY@H])Z}ZBVx1|Iږ#mRx3H)9hhl;qdG1j{ t:#3W\?g3/i٠Xǂ EB6"tE%=Nmy; hˉ"q "eKnbD;`JK#qLywߓ44;Kec24h%0SeeCàvAB\%@5nLHLa1'u! ۍF:hqkHG3o޽h9lײsSƜDH"e+{푟-0YJ}nw"#L7`8/7YP\L5n'p%;}"fv>,O,Tͦ Z߽6Mv8;bgUo=j~UV"͉V}pmS^c[SkQnl7U%-z]EY?4m.ٯz+XtAl~;|i>.t=hoh>xOd вbXp+- V?Wf*V>V",\0#[8x 6ړݚl^' v7߽LFk[ۃICЎ[=UO |UK‹LWnmZ/Ղ&e;y4@nۼV9&sRF_20KvY{Lf\ B>8YSAxi4lj=Zh߲mK] KKIENDB`superagent-5.2.2/docs/index.md000066400000000000000000000717751362257374000163100ustar00rootroot00000000000000 # SuperAgent SuperAgent is light-weight progressive ajax API crafted for flexibility, readability, and a low learning curve after being frustrated with many of the existing request APIs. It also works with Node.js! request .post('/api/pet') .send({ name: 'Manny', species: 'cat' }) .set('X-API-Key', 'foobar') .set('Accept', 'application/json') .then(res => { alert('yay got ' + JSON.stringify(res.body)); }); ## Test documentation The following [test documentation](docs/test.html) was generated with [Mocha's](https://mochajs.org/) "doc" reporter, and directly reflects the test suite. This provides an additional source of documentation. ## Request basics A request can be initiated by invoking the appropriate method on the `request` object, then calling `.then()` (or `.end()` [or `await`](#promise-and-generator-support)) to send the request. For example a simple __GET__ request: request .get('/search') .then(res => { // res.body, res.headers, res.status }) .catch(err => { // err.message, err.response }); HTTP method may also be passed as a string: request('GET', '/search').then(success, failure); Old-style callbacks are also supported, but not recommended. *Instead of* `.then()` you can call `.end()`: request('GET', '/search').end(function(err, res){ if (res.ok) {} }); Absolute URLs can be used. In web browsers absolute URLs work only if the server implements [CORS](#cors). request .get('https://example.com/search') .then(res => { }); The __Node__ client supports making requests to [Unix Domain Sockets](https://en.wikipedia.org/wiki/Unix_domain_socket): // pattern: https?+unix://SOCKET_PATH/REQUEST_PATH // Use `%2F` as `/` in SOCKET_PATH try { const res = await request .get('http+unix://%2Fabsolute%2Fpath%2Fto%2Funix.sock/search'); // res.body, res.headers, res.status } catch(err) { // err.message, err.response } __DELETE__, __HEAD__, __PATCH__, __POST__, and __PUT__ requests can also be used, simply change the method name: request .head('/favicon.ico') .then(res => { }); __DELETE__ can be also called as `.del()` for compatibility with old IE where `delete` is a reserved word. The HTTP method defaults to __GET__, so if you wish, the following is valid: request('/search', (err, res) => { }); ## Setting header fields Setting header fields is simple, invoke `.set()` with a field name and value: request .get('/search') .set('API-Key', 'foobar') .set('Accept', 'application/json') .then(callback); You may also pass an object to set several fields in a single call: request .get('/search') .set({ 'API-Key': 'foobar', Accept: 'application/json' }) .then(callback); ## `GET` requests The `.query()` method accepts objects, which when used with the __GET__ method will form a query-string. The following will produce the path `/search?query=Manny&range=1..5&order=desc`. request .get('/search') .query({ query: 'Manny' }) .query({ range: '1..5' }) .query({ order: 'desc' }) .then(res => { }); Or as a single object: request .get('/search') .query({ query: 'Manny', range: '1..5', order: 'desc' }) .then(res => { }); The `.query()` method accepts strings as well: request .get('/querystring') .query('search=Manny&range=1..5') .then(res => { }); Or joined: request .get('/querystring') .query('search=Manny') .query('range=1..5') .then(res => { }); ## `HEAD` requests You can also use the `.query()` method for HEAD requests. The following will produce the path `/users?email=joe@smith.com`. request .head('/users') .query({ email: 'joe@smith.com' }) .then(res => { }); ## `POST` / `PUT` requests A typical JSON __POST__ request might look a little like the following, where we set the Content-Type header field appropriately, and "write" some data, in this case just a JSON string. request.post('/user') .set('Content-Type', 'application/json') .send('{"name":"tj","pet":"tobi"}') .then(callback) .catch(errorCallback) Since JSON is undoubtedly the most common, it's the _default_! The following example is equivalent to the previous. request.post('/user') .send({ name: 'tj', pet: 'tobi' }) .then(callback, errorCallback) Or using multiple `.send()` calls: request.post('/user') .send({ name: 'tj' }) .send({ pet: 'tobi' }) .then(callback, errorCallback) By default sending strings will set the `Content-Type` to `application/x-www-form-urlencoded`, multiple calls will be concatenated with `&`, here resulting in `name=tj&pet=tobi`: request.post('/user') .send('name=tj') .send('pet=tobi') .then(callback, errorCallback); SuperAgent formats are extensible, however by default "json" and "form" are supported. To send the data as `application/x-www-form-urlencoded` simply invoke `.type()` with "form", where the default is "json". This request will __POST__ the body "name=tj&pet=tobi". request.post('/user') .type('form') .send({ name: 'tj' }) .send({ pet: 'tobi' }) .then(callback, errorCallback) Sending a [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData/FormData) object is also supported. The following example will __POST__ the content of the HTML form identified by id="myForm": request.post('/user') .send(new FormData(document.getElementById('myForm'))) .then(callback, errorCallback) ## Setting the `Content-Type` The obvious solution is to use the `.set()` method: request.post('/user') .set('Content-Type', 'application/json') As a short-hand the `.type()` method is also available, accepting the canonicalized MIME type name complete with type/subtype, or simply the extension name such as "xml", "json", "png", etc: request.post('/user') .type('application/json') request.post('/user') .type('json') request.post('/user') .type('png') ## Serializing request body SuperAgent will automatically serialize JSON and forms. You can setup automatic serialization for other types as well: ```js request.serialize['application/xml'] = function (obj) { return 'string generated from obj'; }; // going forward, all requests with a Content-type of // 'application/xml' will be automatically serialized ``` If you want to send the payload in a custom format, you can replace the built-in serialization with the `.serialize()` method on a per-request basis: ```js request .post('/user') .send({foo: 'bar'}) .serialize(obj => { return 'string generated from obj'; }); ``` ## Retrying requests When given the `.retry()` method, SuperAgent will automatically retry requests, if they fail in a way that is transient or could be due to a flaky Internet connection. This method has two optional arguments: number of retries (default 1) and a callback. It calls `callback(err, res)` before each retry. The callback may return `true`/`false` to control whether the request sould be retried (but the maximum number of retries is always applied). request .get('https://example.com/search') .retry(2) // or: .retry(2, callback) .then(finished); .catch(failed); Use `.retry()` only with requests that are *idempotent* (i.e. multiple requests reaching the server won't cause undesirable side effects like duplicate purchases). ## Setting Accept In a similar fashion to the `.type()` method it is also possible to set the `Accept` header via the short hand method `.accept()`. Which references `request.types` as well allowing you to specify either the full canonicalized MIME type name as `type/subtype`, or the extension suffix form as "xml", "json", "png", etc. for convenience: request.get('/user') .accept('application/json') request.get('/user') .accept('json') request.post('/user') .accept('png') ### Facebook and Accept JSON If you are calling Facebook's API, be sure to send an `Accept: application/json` header in your request. If you don't do this, Facebook will respond with `Content-Type: text/javascript; charset=UTF-8`, which SuperAgent will not parse and thus `res.body` will be undefined. You can do this with either `req.accept('json')` or `req.header('Accept', 'application/json')`. See [issue 1078](https://github.com/visionmedia/superagent/issues/1078) for details. ## Query strings `req.query(obj)` is a method which may be used to build up a query-string. For example populating `?format=json&dest=/login` on a __POST__: request .post('/') .query({ format: 'json' }) .query({ dest: '/login' }) .send({ post: 'data', here: 'wahoo' }) .then(callback); By default the query string is not assembled in any particular order. An asciibetically-sorted query string can be enabled with `req.sortQuery()`. You may also provide a custom sorting comparison function with `req.sortQuery(myComparisonFn)`. The comparison function should take 2 arguments and return a negative/zero/positive integer. ```js // default order request.get('/user') .query('name=Nick') .query('search=Manny') .sortQuery() .then(callback) // customized sort function request.get('/user') .query('name=Nick') .query('search=Manny') .sortQuery((a, b) => a.length - b.length) .then(callback) ``` ## TLS options In Node.js SuperAgent supports methods to configure HTTPS requests: - `.ca()`: Set the CA certificate(s) to trust - `.cert()`: Set the client certificate chain(s) - `.key()`: Set the client private key(s) - `.pfx()`: Set the client PFX or PKCS12 encoded private key and certificate chain - `.disableTLSCerts()`: Does not reject expired or invalid TLS certs. Sets internally `rejectUnauthorized=true`. *Be warned, this method allows MITM attacks.* For more information, see Node.js [https.request docs](https://nodejs.org/api/https.html#https_https_request_options_callback). ```js var key = fs.readFileSync('key.pem'), cert = fs.readFileSync('cert.pem'); request .post('/client-auth') .key(key) .cert(cert) .then(callback); ``` ```js var ca = fs.readFileSync('ca.cert.pem'); request .post('https://localhost/private-ca-server') .ca(ca) .then(res => {}); ``` ## Parsing response bodies SuperAgent will parse known response-body data for you, currently supporting `application/x-www-form-urlencoded`, `application/json`, and `multipart/form-data`. You can setup automatic parsing for other response-body data as well: ```js //browser request.parse['application/xml'] = function (str) { return {'object': 'parsed from str'}; }; //node request.parse['application/xml'] = function (res, cb) { //parse response text and set res.body here cb(null, res); }; //going forward, responses of type 'application/xml' //will be parsed automatically ``` You can set a custom parser (that takes precedence over built-in parsers) with the `.buffer(true).parse(fn)` method. If response buffering is not enabled (`.buffer(false)`) then the `response` event will be emitted without waiting for the body parser to finish, so `response.body` won't be available. ### JSON / Urlencoded The property `res.body` is the parsed object, for example if a request responded with the JSON string '{"user":{"name":"tobi"}}', `res.body.user.name` would be "tobi". Likewise the x-www-form-urlencoded value of "user[name]=tobi" would yield the same result. Only one level of nesting is supported. If you need more complex data, send JSON instead. Arrays are sent by repeating the key. `.send({color: ['red','blue']})` sends `color=red&color=blue`. If you want the array keys to contain `[]` in their name, you must add it yourself, as SuperAgent doesn't add it automatically. ### Multipart The Node client supports _multipart/form-data_ via the [Formidable](https://github.com/felixge/node-formidable) module. When parsing multipart responses, the object `res.files` is also available to you. Suppose for example a request responds with the following multipart body: --whoop Content-Disposition: attachment; name="image"; filename="tobi.png" Content-Type: image/png ... data here ... --whoop Content-Disposition: form-data; name="name" Content-Type: text/plain Tobi --whoop-- You would have the values `res.body.name` provided as "Tobi", and `res.files.image` as a `File` object containing the path on disk, filename, and other properties. ### Binary In browsers, you may use `.responseType('blob')` to request handling of binary response bodies. This API is unnecessary when running in node.js. The supported argument values for this method are - `'blob'` passed through to the XmlHTTPRequest `responseType` property - `'arraybuffer'` passed through to the XmlHTTPRequest `responseType` property ```js req.get('/binary.data') .responseType('blob') .then(res => { // res.body will be a browser native Blob type here }); ``` For more information, see the Mozilla Developer Network [xhr.responseType docs](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType). ## Response properties Many helpful flags and properties are set on the `Response` object, ranging from the response text, parsed response body, header fields, status flags and more. ### Response text The `res.text` property contains the unparsed response body string. This property is always present for the client API, and only when the mime type matches "text/*", "*/json", or "x-www-form-urlencoded" by default for node. The reasoning is to conserve memory, as buffering text of large bodies such as multipart files or images is extremely inefficient. To force buffering see the "Buffering responses" section. ### Response body Much like SuperAgent can auto-serialize request data, it can also automatically parse it. When a parser is defined for the Content-Type, it is parsed, which by default includes "application/json" and "application/x-www-form-urlencoded". The parsed object is then available via `res.body`. ### Response header fields The `res.header` contains an object of parsed header fields, lowercasing field names much like node does. For example `res.header['content-length']`. ### Response Content-Type The Content-Type response header is special-cased, providing `res.type`, which is void of the charset (if any). For example the Content-Type of "text/html; charset=utf8" will provide "text/html" as `res.type`, and the `res.charset` property would then contain "utf8". ### Response status The response status flags help determine if the request was a success, among other useful information, making SuperAgent ideal for interacting with RESTful web services. These flags are currently defined as: var type = status / 100 | 0; // status / class res.status = status; res.statusType = type; // basics res.info = 1 == type; res.ok = 2 == type; res.clientError = 4 == type; res.serverError = 5 == type; res.error = 4 == type || 5 == type; // sugar res.accepted = 202 == status; res.noContent = 204 == status || 1223 == status; res.badRequest = 400 == status; res.unauthorized = 401 == status; res.notAcceptable = 406 == status; res.notFound = 404 == status; res.forbidden = 403 == status; ## Aborting requests To abort requests simply invoke the `req.abort()` method. ## Timeouts Sometimes networks and servers get "stuck" and never respond after accepting a request. Set timeouts to avoid requests waiting forever. * `req.timeout({deadline:ms})` or `req.timeout(ms)` (where `ms` is a number of milliseconds > 0) sets a deadline for the entire request (including all uploads, redirects, server processing time) to complete. If the response isn't fully downloaded within that time, the request will be aborted. * `req.timeout({response:ms})` sets maximum time to wait for the first byte to arrive from the server, but it does not limit how long the entire download can take. Response timeout should be at least few seconds longer than just the time it takes the server to respond, because it also includes time to make DNS lookup, TCP/IP and TLS connections, and time to upload request data. You should use both `deadline` and `response` timeouts. This way you can use a short response timeout to detect unresponsive networks quickly, and a long deadline to give time for downloads on slow, but reliable, networks. Note that both of these timers limit how long *uploads* of attached files are allowed to take. Use long timeouts if you're uploading files. request .get('/big-file?network=slow') .timeout({ response: 5000, // Wait 5 seconds for the server to start sending, deadline: 60000, // but allow 1 minute for the file to finish loading. }) .then(res => { /* responded in time */ }, err => { if (err.timeout) { /* timed out! */ } else { /* other error */ } }); Timeout errors have a `.timeout` property. ## Authentication In both Node and browsers auth available via the `.auth()` method: request .get('http://local') .auth('tobi', 'learnboost') .then(callback); In the _Node_ client Basic auth can be in the URL as "user:pass": request.get('http://tobi:learnboost@local').then(callback); By default only `Basic` auth is used. In browser you can add `{type:'auto'}` to enable all methods built-in in the browser (Digest, NTLM, etc.): request.auth('digest', 'secret', {type:'auto'}) ## Following redirects By default up to 5 redirects will be followed, however you may specify this with the `res.redirects(n)` method: const response = await request.get('/some.png').redirects(2); Redirects exceeding the limit are treated as errors. Use `.ok(res => res.status < 400)` to read them as successful responses. ## Agents for global state ### Saving cookies In Node SuperAgent does not save cookies by default, but you can use the `.agent()` method to create a copy of SuperAgent that saves cookies. Each copy has a separate cookie jar. const agent = request.agent(); agent .post('/login') .then(() => { return agent.get('/cookied-page'); }); In browsers cookies are managed automatically by the browser, so the `.agent()` does not isolate cookies. ### Default options for multiple requests Regular request methods called on the agent will be used as defaults for all requests made by that agent. const agent = request.agent() .use(plugin) .auth(shared); await agent.get('/with-plugin-and-auth'); await agent.get('/also-with-plugin-and-auth'); The complete list of methods that the agent can use to set defaults is: `use`, `on`, `once`, `set`, `query`, `type`, `accept`, `auth`, `withCredentials`, `sortQuery`, `retry`, `ok`, `redirects`, `timeout`, `buffer`, `serialize`, `parse`, `ca`, `key`, `pfx`, `cert`. ## Piping data The Node client allows you to pipe data to and from the request. Please note that `.pipe()` is used **instead of** `.end()`/`.then()` methods. For example piping a file's contents as the request: const request = require('superagent'); const fs = require('fs'); const stream = fs.createReadStream('path/to/my.json'); const req = request.post('/somewhere'); req.type('json'); stream.pipe(req); Note that when you pipe to a request, superagent sends the piped data with [chunked transfer encoding](https://en.wikipedia.org/wiki/Chunked_transfer_encoding), which isn't supported by all servers (for instance, Python WSGI servers). Or piping the response to a file: const stream = fs.createWriteStream('path/to/my.json'); const req = request.get('/some.json'); req.pipe(stream); It's not possible to mix pipes and callbacks or promises. Note that you should **NOT** attempt to pipe the result of `.end()` or the `Response` object: // Don't do either of these: const stream = getAWritableStream(); const req = request .get('/some.json') // BAD: this pipes garbage to the stream and fails in unexpected ways .end((err, this_does_not_work) => this_does_not_work.pipe(stream)) const req = request .get('/some.json') .end() // BAD: this is also unsupported, .pipe calls .end for you. .pipe(nope_its_too_late); In a [future version](https://github.com/visionmedia/superagent/issues/1188) of superagent, improper calls to `pipe()` will fail. ## Multipart requests SuperAgent is also great for _building_ multipart requests for which it provides methods `.attach()` and `.field()`. When you use `.field()` or `.attach()` you can't use `.send()` and you *must not* set `Content-Type` (the correct type will be set for you). ### Attaching files To send a file use `.attach(name, [file], [options])`. You can attach multiple files by calling `.attach` multiple times. The arguments are: * `name` — field name in the form. * `file` — either string with file path or `Blob`/`Buffer` object. * `options` — (optional) either string with custom file name or `{filename: string}` object. In Node also `{contentType: 'mime/type'}` is supported. In browser create a `Blob` with an appropriate type instead.
request .post('/upload') .attach('image1', 'path/to/felix.jpeg') .attach('image2', imageBuffer, 'luna.jpeg') .field('caption', 'My cats') .then(callback); ### Field values Much like form fields in HTML, you can set field values with `.field(name, value)` and `.field({name: value})`. Suppose you want to upload a few images with your name and email, your request might look something like this: request .post('/upload') .field('user[name]', 'Tobi') .field('user[email]', 'tobi@learnboost.com') .field('friends[]', ['loki', 'jane']) .attach('image', 'path/to/tobi.png') .then(callback); ## Compression The node client supports compressed responses, best of all, you don't have to do anything! It just works. ## Buffering responses To force buffering of response bodies as `res.text` you may invoke `req.buffer()`. To undo the default of buffering for text responses such as "text/plain", "text/html" etc you may invoke `req.buffer(false)`. When buffered the `res.buffered` flag is provided, you may use this to handle both buffered and unbuffered responses in the same callback. ## CORS For security reasons, browsers will block cross-origin requests unless the server opts-in using CORS headers. Browsers will also make extra __OPTIONS__ requests to check what HTTP headers and methods are allowed by the server. [Read more about CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS). The `.withCredentials()` method enables the ability to send cookies from the origin, however only when `Access-Control-Allow-Origin` is _not_ a wildcard ("*"), and `Access-Control-Allow-Credentials` is "true". request .get('https://api.example.com:4001/') .withCredentials() .then(res => { assert.equal(200, res.status); assert.equal('tobi', res.text); }) ## Error handling Your callback function will always be passed two arguments: error and response. If no error occurred, the first argument will be null: request .post('/upload') .attach('image', 'path/to/tobi.png') .then(res => { }); An "error" event is also emitted, with you can listen for: request .post('/upload') .attach('image', 'path/to/tobi.png') .on('error', handle) .then(res => { }); Note that **superagent considers 4xx and 5xx responses (as well as unhandled 3xx responses) errors by default**. For example, if you get a `304 Not modified`, `403 Forbidden` or `500 Internal server error` response, this status information will be available via `err.status`. Errors from such responses also contain an `err.response` field with all of the properties mentioned in "[Response properties](#response-properties)". The library behaves in this way to handle the common case of wanting success responses and treating HTTP error status codes as errors while still allowing for custom logic around specific error conditions. Network failures, timeouts, and other errors that produce no response will contain no `err.status` or `err.response` fields. If you wish to handle 404 or other HTTP error responses, you can query the `err.status` property. When an HTTP error occurs (4xx or 5xx response) the `res.error` property is an `Error` object, this allows you to perform checks such as: if (err && err.status === 404) { alert('oh no ' + res.body.message); } else if (err) { // all other error types we handle generically } Alternatively, you can use the `.ok(callback)` method to decide whether a response is an error or not. The callback to the `ok` function gets a response and returns `true` if the response should be interpreted as success. request.get('/404') .ok(res => res.status < 500) .then(response => { // reads 404 page as a successful response }) ## Progress tracking SuperAgent fires `progress` events on upload and download of large files. request.post(url) .attach('field_name', file) .on('progress', event => { /* the event is: { direction: "upload" or "download" percent: 0 to 100 // may be missing if file size is unknown total: // total file size, may be missing loaded: // bytes downloaded or uploaded so far } */ }) .then() ## Testing on localhost ### Forcing specific connection IP address In Node.js it's possible to ignore DNS resolution and direct all requests to a specific IP address using `.connect()` method. For example, this request will go to localhost instead of `example.com`: const res = await request.get("http://example.com").connect("127.0.0.1"); Because the request may be redirected, it's possible to specify multiple hostnames and multiple IPs, as well as a special `*` as the fallback (note: other wildcards are not supported). The requests will keep their `Host` header with the original value. `.connect(undefined)` turns off the feature. const res = await request.get("http://redir.example.com:555") .connect({ "redir.example.com": "127.0.0.1", // redir.example.com:555 will use 127.0.0.1:555 "www.example.com": false, // don't override this one; use DNS as normal "*": "proxy.example.com", // all other requests will go to this host }); ### Ignoring broken/insecure HTTPS on localhost In Node.js, when HTTPS is misconfigured and insecure (e.g. using self-signed certificate *without* specifying own `.ca()`), it's still possible to permit requests to `localhost` by calling `.trustLocalhost()`: const res = await request.get("https://localhost").trustLocalhost() Together with `.connect("127.0.0.1")` this may be used to force HTTPS requests to any domain to be re-routed to `localhost` instead. It's generally safe to ignore broken HTTPS on `localhost`, because the loopback interface is not exposed to untrusted networks. Trusting `localhost` may become the default in the future. Use `.trustLocalhost(false)` to force check of `127.0.0.1`'s authenticity. We intentionally don't support disabling of HTTPS security when making requests to any other IP, because such options end up abused as a quick "fix" for HTTPS problems. You can get free HTTPS certificates from [Let's Encrypt](https://certbot.eff.org) or set your own CA (`.ca(ca_public_pem)`) to make your self-signed certificates trusted. ## Promise and Generator support SuperAgent's request is a "thenable" object that's compatible with JavaScript promises and the `async`/`await` syntax. const res = await request.get(url); If you're using promises, **do not** call `.end()` or `.pipe()`. Any use of `.then()` or `await` disables all other ways of using the request. Libraries like [co](https://github.com/tj/co) or a web framework like [koa](https://github.com/koajs/koa) can `yield` on any SuperAgent method: const req = request .get('http://local') .auth('tobi', 'learnboost'); const res = yield req; Note that SuperAgent expects the global `Promise` object to be present. You'll need a polyfill to use promises in Internet Explorer or Node.js 0.10. ## Browser and node versions SuperAgent has two implementations: one for web browsers (using XHR) and one for Node.JS (using core http module). By default Browserify and WebPack will pick the browser version. If want to use WebPack to compile code for Node.JS, you *must* specify [node target](https://webpack.github.io/docs/configuration.html#target) in its configuration. ### Using browser version in electron [Electron](https://electron.atom.io/) developers report if you would prefer to use the browser version of SuperAgent instead of the Node version, you can `require('superagent/superagent')`. Your requests will now show up in the Chrome developer tools Network tab. Note this environment is not covered by automated test suite and not officially supported. superagent-5.2.2/docs/style.css000066400000000000000000000026351362257374000165160ustar00rootroot00000000000000body { padding: 40px 80px; font: 14px/1.5 "Helvetica Neue", Helvetica, sans-serif; background: #181818 url(images/bg.png); text-align: center; } #content { margin: 0 auto; padding: 10px 40px; text-align: left; background: white; width: 50%; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; -webkit-box-shadow: 0 2px 5px 0 black; } #menu { font-size: 13px; margin: 0; padding: 0; text-align: left; position: fixed; top: 15px; left: 15px; } #menu ul { margin: 0; padding: 0; } #menu li { list-style: none; } #menu a { color: rgba(255,255,255,.5); text-decoration: none; } #menu a:hover { color: white; } #menu .active a { color: white; } pre { padding: 10px; } code { font-family: monaco, monospace, sans-serif; font-size: 0.85em; } p code { border: 1px solid #ECEA75; padding: 1px 3px; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; background: #FDFCD1; } pre { padding: 20px 25px; border: 1px solid #ddd; -webkit-box-shadow: inset 0 0 5px #eee; -moz-box-shadow: inset 0 0 5px #eee; box-shadow: inset 0 0 5px #eee; } code .comment { color: #ddd } code .init { color: #2F6FAD } code .string { color: #5890AD } code .keyword { color: #8A6343 } code .number { color: #2F6FAD } /* override tocbot style to avoid vertical white line in table of content */ .toc-link::before { content: initial; } superagent-5.2.2/docs/tail.html000066400000000000000000000030651362257374000164610ustar00rootroot00000000000000
Fork me on GitHub superagent-5.2.2/docs/test.html000066400000000000000000005056551362257374000165230ustar00rootroot00000000000000 SuperAgent — elegant API for AJAX in Node and browsers

Agent

should remember defaults
if (typeof Promise === 'undefined') {
  return;
}
let called = 0;
let event_called = 0;
const agent = request
  .agent()
  .accept('json')
  .use(() => {
    called++;
  })
  .once('request', () => {
    event_called++;
  })
  .query({ hello: 'world' })
  .set('X-test', 'testing');
assert.equal(0, called);
assert.equal(0, event_called);
return agent
  .get(`${base}/echo`)
  .then(res => {
    assert.equal(1, called);
    assert.equal(1, event_called);
    assert.equal('application/json', res.headers.accept);
    assert.equal('testing', res.headers['x-test']);
    return agent.get(`${base}/querystring`);
  })
  .then(res => {
    assert.equal(2, called);
    assert.equal(2, event_called);
    assert.deepEqual({ hello: 'world' }, res.body);
  });

request

res.statusCode

should set statusCode
done => {
      request.get(`${uri}/login`, (err, res) => {
        try {
          assert.strictEqual(res.statusCode, 200);
          done();
        } catch (err2) {
          done(err2);
        }
      });
    }

should allow the send shorthand

with callback in the method call
done => {
      request.get(`${uri}/login`, (err, res) => {
        assert.equal(res.status, 200);
        done();
      });
    }
with data in the method call
done => {
      request.post(`${uri}/echo`, { foo: 'bar' }).end((err, res) => {
        assert.equal('{"foo":"bar"}', res.text);
        done();
      });
    }
with callback and data in the method call
done => {
      request.post(`${uri}/echo`, { foo: 'bar' }, (err, res) => {
        assert.equal('{"foo":"bar"}', res.text);
        done();
      });
    }

with a callback

should invoke .end()
done => {
      request.get(`${uri}/login`, (err, res) => {
        try {
          assert.equal(res.status, 200);
          done();
        } catch (err2) {
          done(err2);
        }
      });
    }

.end()

should issue a request
done => {
      request.get(`${uri}/login`).end((err, res) => {
        try {
          assert.equal(res.status, 200);
          done();
        } catch (err2) {
          done(err2);
        }
      });
    }
is optional with a promise
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/login`)
  .then(res => res.status)
  .then()
  .then(status => {
    assert.equal(200, status, 'Real promises pass results through');
  });
called only once with a promise
if (typeof Promise === 'undefined') {
  return;
}
const req = request.get(`${uri}/unique`);
return Promise.all([req, req, req]).then(results => {
  results.forEach(item => {
    assert.equal(
      item.body,
      results[0].body,
      'It should keep returning the same result after being called once'
    );
  });
});

res.error

ok
done => {
      let calledErrorEvent = false;
      let calledOKHandler = false;
      request
        .get(`${uri}/error`)
        .ok(res => {
          assert.strictEqual(500, res.status);
          calledOKHandler = true;
          return true;
        })
        .on('error', err => {
          calledErrorEvent = true;
        })
        .end((err, res) => {
          try {
            assert.ifError(err);
            assert.strictEqual(res.status, 500);
            assert(!calledErrorEvent);
            assert(calledOKHandler);
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should should be an Error object
done => {
      let calledErrorEvent = false;
      request
        .get(`${uri}/error`)
        .on('error', err => {
          assert.strictEqual(err.status, 500);
          calledErrorEvent = true;
        })
        .end((err, res) => {
          try {
            if (NODE) {
              res.error.message.should.equal('cannot GET /error (500)');
            } else {
              res.error.message.should.equal(`cannot GET ${uri}/error (500)`);
            }
            assert.strictEqual(res.error.status, 500);
            assert(err, 'should have an error for 500');
            assert.equal(err.message, 'Internal Server Error');
            assert(calledErrorEvent);
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
with .then() promise
if (typeof Promise === 'undefined') {
  return;
}
return request.get(`${uri}/error`).then(
  () => {
    assert.fail();
  },
  err => {
    assert.equal(err.message, 'Internal Server Error');
  }
);
with .ok() returning false
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/echo`)
  .ok(() => false)
  .then(
    () => {
      assert.fail();
    },
    err => {
      assert.equal(200, err.response.status);
      assert.equal(err.message, 'OK');
    }
  );
with .ok() throwing an Error
if (typeof Promise === 'undefined') {
  return;
}
return request
  .get(`${uri}/echo`)
  .ok(() => {
    throw new Error('boom');
  })
  .then(
    () => {
      assert.fail();
    },
    err => {
      assert.equal(200, err.response.status);
      assert.equal(err.message, 'boom');
    }
  );

res.header

should be an object
done => {
      request.get(`${uri}/login`).end((err, res) => {
        try {
          assert.equal('Express', res.header['x-powered-by']);
          done();
        } catch (err2) {
          done(err2);
        }
      });
    }

set headers

should only set headers for ownProperties of header
done => {
      try {
        request
          .get(`${uri}/echo-headers`)
          .set('valid', 'ok')
          .end((err, res) => {
            if (
              !err &&
              res.body &&
              res.body.valid &&
              !res.body.hasOwnProperty('invalid')
            ) {
              return done();
            }
            done(err || new Error('fail'));
          });
      } catch (err) {
        done(err);
      }
    }

res.charset

should be set when present
done => {
      request.get(`${uri}/login`).end((err, res) => {
        try {
          res.charset.should.equal('utf-8');
          done();
        } catch (err2) {
          done(err2);
        }
      });
    }

res.statusType

should provide the first digit
done => {
      request.get(`${uri}/login`).end((err, res) => {
        try {
          assert(!err, 'should not have an error for success responses');
          assert.equal(200, res.status);
          assert.equal(2, res.statusType);
          done();
        } catch (err2) {
          done(err2);
        }
      });
    }

res.type

should provide the mime-type void of params
done => {
      request.get(`${uri}/login`).end((err, res) => {
        try {
          res.type.should.equal('text/html');
          res.charset.should.equal('utf-8');
          done();
        } catch (err2) {
          done(err2);
        }
      });
    }

req.set(field, val)

should set the header field
done => {
      request
        .post(`${uri}/echo`)
        .set('X-Foo', 'bar')
        .set('X-Bar', 'baz')
        .end((err, res) => {
          try {
            assert.equal('bar', res.header['x-foo']);
            assert.equal('baz', res.header['x-bar']);
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }

req.set(obj)

should set the header fields
done => {
      request
        .post(`${uri}/echo`)
        .set({ 'X-Foo': 'bar', 'X-Bar': 'baz' })
        .end((err, res) => {
          try {
            assert.equal('bar', res.header['x-foo']);
            assert.equal('baz', res.header['x-bar']);
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }

req.type(str)

should set the Content-Type
done => {
      request
        .post(`${uri}/echo`)
        .type('text/x-foo')
        .end((err, res) => {
          try {
            res.header['content-type'].should.equal('text/x-foo');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should map "json"
done => {
      request
        .post(`${uri}/echo`)
        .type('json')
        .send('{"a": 1}')
        .end((err, res) => {
          try {
            res.should.be.json();
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should map "html"
done => {
      request
        .post(`${uri}/echo`)
        .type('html')
        .end((err, res) => {
          try {
            res.header['content-type'].should.equal('text/html');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }

req.accept(str)

should set Accept
done => {
      request
        .get(`${uri}/echo`)
        .accept('text/x-foo')
        .end((err, res) => {
          try {
            res.header.accept.should.equal('text/x-foo');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should map "json"
done => {
      request
        .get(`${uri}/echo`)
        .accept('json')
        .end((err, res) => {
          try {
            res.header.accept.should.equal('application/json');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should map "xml"
done => {
      request
        .get(`${uri}/echo`)
        .accept('xml')
        .end((err, res) => {
          try {
            // Mime module keeps changing this :(
            assert(
              res.header.accept == 'application/xml' ||
                res.header.accept == 'text/xml'
            );
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should map "html"
done => {
      request
        .get(`${uri}/echo`)
        .accept('html')
        .end((err, res) => {
          try {
            res.header.accept.should.equal('text/html');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }

req.send(str)

should write the string
done => {
      request
        .post(`${uri}/echo`)
        .type('json')
        .send('{"name":"tobi"}')
        .end((err, res) => {
          try {
            res.text.should.equal('{"name":"tobi"}');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }

req.send(Object)

should default to json
done => {
      request
        .post(`${uri}/echo`)
        .send({ name: 'tobi' })
        .end((err, res) => {
          try {
            res.should.be.json();
            res.text.should.equal('{"name":"tobi"}');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }

when called several times

should merge the objects
done => {
        request
          .post(`${uri}/echo`)
          .send({ name: 'tobi' })
          .send({ age: 1 })
          .end((err, res) => {
            try {
              res.should.be.json();
              if (NODE) {
                res.buffered.should.be.true();
              }
              res.text.should.equal('{"name":"tobi","age":1}');
              done();
            } catch (err2) {
              done(err2);
            }
          });
      }

.end(fn)

should check arity
done => {
      request
        .post(`${uri}/echo`)
        .send({ name: 'tobi' })
        .end((err, res) => {
          try {
            assert.ifError(err);
            res.text.should.equal('{"name":"tobi"}');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should emit request
done => {
      const req = request.post(`${uri}/echo`);
      req.on('request', request => {
        assert.equal(req, request);
        done();
      });
      req.end();
    }
should emit response
done => {
      request
        .post(`${uri}/echo`)
        .send({ name: 'tobi' })
        .on('response', res => {
          res.text.should.equal('{"name":"tobi"}');
          done();
        })
        .end();
    }

.then(fulfill, reject)

should support successful fulfills with .then(fulfill)
done => {
      if (typeof Promise === 'undefined') {
        return done();
      }
      request
        .post(`${uri}/echo`)
        .send({ name: 'tobi' })
        .then(res => {
          res.type.should.equal('application/json');
          res.text.should.equal('{"name":"tobi"}');
          done();
        });
    }
should reject an error with .then(null, reject)
done => {
      if (typeof Promise === 'undefined') {
        return done();
      }
      request.get(`${uri}/error`).then(null, err => {
        assert.equal(err.status, 500);
        assert.equal(err.response.text, 'boom');
        done();
      });
    }

.catch(reject)

should reject an error with .catch(reject)
done => {
      if (typeof Promise === 'undefined') {
        return done();
      }
      request.get(`${uri}/error`).catch(err => {
        assert.equal(err.status, 500);
        assert.equal(err.response.text, 'boom');
        done();
      });
    }

.abort()

should abort the request
done => {
      const req = request.get(`${uri}/delay/3000`);
      req.end((err, res) => {
        try {
          assert(false, 'should not complete the request');
        } catch (err2) {
          done(err2);
        }
      });
      req.on('error', error => {
        done(error);
      });
      req.on('abort', done);
      setTimeout(() => {
        req.abort();
      }, 500);
    }
should abort the promise
const req = request.get(`${uri}/delay/3000`);
setTimeout(() => {
  req.abort();
}, 10);
return req.then(
  () => {
    assert.fail('should not complete the request');
  },
  err => {
    assert.equal('ABORTED', err.code);
  }
);
should allow chaining .abort() several times
done => {
      const req = request.get(`${uri}/delay/3000`);
      req.end((err, res) => {
        try {
          assert(false, 'should not complete the request');
        } catch (err2) {
          done(err2);
        }
      });
      // This also verifies only a single 'done' event is emitted
      req.on('abort', done);
      setTimeout(() => {
        req
          .abort()
          .abort()
          .abort();
      }, 1000);
    }
should not allow abort then end
done => {
      request
        .get(`${uri}/delay/3000`)
        .abort()
        .end((err, res) => {
          done(err ? undefined : new Error('Expected abort error'));
        });
    }

req.toJSON()

should describe the request
done => {
      const req = request.post(`${uri}/echo`).send({ foo: 'baz' });
      req.end((err, res) => {
        try {
          const json = req.toJSON();
          assert.equal('POST', json.method);
          assert(/\/echo$/.test(json.url));
          assert.equal('baz', json.data.foo);
          done();
        } catch (err2) {
          done(err2);
        }
      });
    }

req.options()

should allow request body
done => {
      request
        .options(`${uri}/options/echo/body`)
        .send({ foo: 'baz' })
        .end((err, res) => {
          try {
            assert.equal(err, null);
            assert.strictEqual(res.body.foo, 'baz');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }

req.sortQuery()

nop with no querystring
done => {
      request
        .get(`${uri}/url`)
        .sortQuery()
        .end((err, res) => {
          try {
            assert.equal(res.text, '/url');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should sort the request querystring
done => {
      request
        .get(`${uri}/url`)
        .query('search=Manny')
        .query('order=desc')
        .sortQuery()
        .end((err, res) => {
          try {
            assert.equal(res.text, '/url?order=desc&search=Manny');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should allow disabling sorting
done => {
      request
        .get(`${uri}/url`)
        .query('search=Manny')
        .query('order=desc')
        .sortQuery() // take default of true
        .sortQuery(false) // override it in later call
        .end((err, res) => {
          try {
            assert.equal(res.text, '/url?search=Manny&order=desc');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should sort the request querystring using customized function
done => {
      request
        .get(`${uri}/url`)
        .query('name=Nick')
        .query('search=Manny')
        .query('order=desc')
        .sortQuery((a, b) => a.length - b.length)
        .end((err, res) => {
          try {
            assert.equal(res.text, '/url?name=Nick&order=desc&search=Manny');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }

req.set("Content-Type", contentType)

should work with just the contentType component
done => {
    request
      .post(`${uri}/echo`)
      .set('Content-Type', 'application/json')
      .send({ name: 'tobi' })
      .end((err, res) => {
        assert(!err);
        done();
      });
  }
should work with the charset component
done => {
    request
      .post(`${uri}/echo`)
      .set('Content-Type', 'application/json; charset=utf-8')
      .send({ name: 'tobi' })
      .end((err, res) => {
        assert(!err);
        done();
      });
  }

req.send(Object) as "form"

with req.type() set to form

should send x-www-form-urlencoded data
done => {
      request
        .post(`${base}/echo`)
        .type('form')
        .send({ name: 'tobi' })
        .end((err, res) => {
          res.header['content-type'].should.equal(
            'application/x-www-form-urlencoded'
          );
          res.text.should.equal('name=tobi');
          done();
        });
    }

when called several times

should merge the objects
done => {
      request
        .post(`${base}/echo`)
        .type('form')
        .send({ name: { first: 'tobi', last: 'holowaychuk' } })
        .send({ age: '1' })
        .end((err, res) => {
          res.header['content-type'].should.equal(
            'application/x-www-form-urlencoded'
          );
          res.text.should.equal(
            'name%5Bfirst%5D=tobi&name%5Blast%5D=holowaychuk&age=1'
          );
          done();
        });
    }

req.attach

ignores null file
done => {
    request
      .post('/echo')
      .attach('image', null)
      .end((err, res) => {
        done();
      });
  }

req.field

allow bools
done => {
    if (!formDataSupported) {
      return done();
    }
    request
      .post(`${base}/formecho`)
      .field('bools', true)
      .field('strings', 'true')
      .end((err, res) => {
        assert.ifError(err);
        assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' });
        done();
      });
  }
allow objects
done => {
    if (!formDataSupported) {
      return done();
    }
    request
      .post(`${base}/formecho`)
      .field({ bools: true, strings: 'true' })
      .end((err, res) => {
        assert.ifError(err);
        assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' });
        done();
      });
  }
works with arrays in objects
done => {
    if (!formDataSupported) {
      return done();
    }
    request
      .post(`${base}/formecho`)
      .field({ numbers: [1, 2, 3] })
      .end((err, res) => {
        assert.ifError(err);
        assert.deepStrictEqual(res.body, { numbers: ['1', '2', '3'] });
        done();
      });
  }
works with arrays
done => {
    if (!formDataSupported) {
      return done();
    }
    request
      .post(`${base}/formecho`)
      .field('letters', ['a', 'b', 'c'])
      .end((err, res) => {
        assert.ifError(err);
        assert.deepStrictEqual(res.body, { letters: ['a', 'b', 'c'] });
        done();
      });
  }
throw when empty
should.throws(() => {
  request.post(`${base}/echo`).field();
}, /name/);
should.throws(() => {
  request.post(`${base}/echo`).field('name');
}, /val/);
cannot be mixed with send()
assert.throws(() => {
  request
    .post('/echo')
    .field('form', 'data')
    .send('hi');
});
assert.throws(() => {
  request
    .post('/echo')
    .send('hi')
    .field('form', 'data');
});

req.send(Object) as "json"

should default to json
done => {
    request
      .post(`${uri}/echo`)
      .send({ name: 'tobi' })
      .end((err, res) => {
        res.should.be.json();
        res.text.should.equal('{"name":"tobi"}');
        done();
      });
  }
should work with arrays
done => {
    request
      .post(`${uri}/echo`)
      .send([1, 2, 3])
      .end((err, res) => {
        res.should.be.json();
        res.text.should.equal('[1,2,3]');
        done();
      });
  }
should work with value null
done => {
    request
      .post(`${uri}/echo`)
      .type('json')
      .send('null')
      .end((err, res) => {
        res.should.be.json();
        assert.strictEqual(res.body, null);
        done();
      });
  }
should work with value false
done => {
    request
      .post(`${uri}/echo`)
      .type('json')
      .send('false')
      .end((err, res) => {
        res.should.be.json();
        res.body.should.equal(false);
        done();
      });
  }
should work with value 0
done => {
      // fails in IE9
      request
        .post(`${uri}/echo`)
        .type('json')
        .send('0')
        .end((err, res) => {
          res.should.be.json();
          res.body.should.equal(0);
          done();
        });
    }
should work with empty string value
done => {
    request
      .post(`${uri}/echo`)
      .type('json')
      .send('""')
      .end((err, res) => {
        res.should.be.json();
        res.body.should.equal('');
        done();
      });
  }
should work with GET
done => {
      request
        .get(`${uri}/echo`)
        .send({ tobi: 'ferret' })
        .end((err, res) => {
          try {
            res.should.be.json();
            res.text.should.equal('{"tobi":"ferret"}');
            ({ tobi: 'ferret' }.should.eql(res.body));
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should work with vendor MIME type
done => {
    request
      .post(`${uri}/echo`)
      .set('Content-Type', 'application/vnd.example+json')
      .send({ name: 'vendor' })
      .end((err, res) => {
        res.text.should.equal('{"name":"vendor"}');
        ({ name: 'vendor' }.should.eql(res.body));
        done();
      });
  }

when called several times

should merge the objects
done => {
      request
        .post(`${uri}/echo`)
        .send({ name: 'tobi' })
        .send({ age: 1 })
        .end((err, res) => {
          res.should.be.json();
          res.text.should.equal('{"name":"tobi","age":1}');
          ({ name: 'tobi', age: 1 }.should.eql(res.body));
          done();
        });
    }

res.body

application/json

should parse the body
done => {
      request.get(`${uri}/json`).end((err, res) => {
        res.text.should.equal('{"name":"manny"}');
        res.body.should.eql({ name: 'manny' });
        done();
      });
    }

HEAD requests

should not throw a parse error
done => {
        request.head(`${uri}/json`).end((err, res) => {
          try {
            assert.strictEqual(err, null);
            assert.strictEqual(res.text, undefined);
            assert.strictEqual(Object.keys(res.body).length, 0);
            done();
          } catch (err2) {
            done(err2);
          }
        });
      }

Invalid JSON response

should return the raw response
done => {
      request.get(`${uri}/invalid-json`).end((err, res) => {
        assert.deepEqual(
          err.rawResponse,
          ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}"
        );
        done();
      });
    }
should return the http status code
done => {
      request.get(`${uri}/invalid-json-forbidden`).end((err, res) => {
        assert.equal(err.statusCode, 403);
        done();
      });
    }

No content

should not throw a parse error
done => {
        request.get(`${uri}/no-content`).end((err, res) => {
          try {
            assert.strictEqual(err, null);
            assert.strictEqual(res.text, '');
            assert.strictEqual(Object.keys(res.body).length, 0);
            done();
          } catch (err2) {
            done(err2);
          }
        });
      }

application/json+hal

should parse the body
done => {
        request.get(`${uri}/json-hal`).end((err, res) => {
          if (err) return done(err);
          res.text.should.equal('{"name":"hal 5000"}');
          res.body.should.eql({ name: 'hal 5000' });
          done();
        });
      }

vnd.collection+json

should parse the body
done => {
        request.get(`${uri}/collection-json`).end((err, res) => {
          res.text.should.equal('{"name":"chewbacca"}');
          res.body.should.eql({ name: 'chewbacca' });
          done();
        });
      }

request

on redirect

should retain header fields
done => {
      request
        .get(`${base}/header`)
        .set('X-Foo', 'bar')
        .end((err, res) => {
          try {
            assert(res.body);
            res.body.should.have.property('x-foo', 'bar');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should preserve timeout across redirects
done => {
      request
        .get(`${base}/movies/random`)
        .timeout(250)
        .end((err, res) => {
          try {
            assert(err instanceof Error, 'expected an error');
            err.should.have.property('timeout', 250);
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should successfully redirect after retry on error
done => {
      const id = Math.random() * 1000000 * Date.now();
      request
        .get(`${base}/error/redirect/${id}`)
        .retry(2)
        .end((err, res) => {
          assert(res.ok, 'response should be ok');
          assert(res.text, 'first movie page');
          done();
        });
    }
should preserve retries across redirects
done => {
      const id = Math.random() * 1000000 * Date.now();
      request
        .get(`${base}/error/redirect-error${id}`)
        .retry(2)
        .end((err, res) => {
          assert(err, 'expected an error');
          assert.equal(2, err.retries, 'expected an error with .retries');
          assert.equal(500, err.status, 'expected an error status of 500');
          done();
        });
    }

on 303

should redirect with same method
done => {
      request
        .put(`${base}/redirect-303`)
        .send({ msg: 'hello' })
        .redirects(1)
        .on('redirect', res => {
          res.headers.location.should.equal('/reply-method');
        })
        .end((err, res) => {
          if (err) {
            done(err);
            return;
          }
          res.text.should.equal('method=get');
          done();
        });
    }

on 307

should redirect with same method
done => {
      if (isMSIE) return done(); // IE9 broken
      request
        .put(`${base}/redirect-307`)
        .send({ msg: 'hello' })
        .redirects(1)
        .on('redirect', res => {
          res.headers.location.should.equal('/reply-method');
        })
        .end((err, res) => {
          if (err) {
            done(err);
            return;
          }
          res.text.should.equal('method=put');
          done();
        });
    }

on 308

should redirect with same method
done => {
      if (isMSIE) return done(); // IE9 broken
      request
        .put(`${base}/redirect-308`)
        .send({ msg: 'hello' })
        .redirects(1)
        .on('redirect', res => {
          res.headers.location.should.equal('/reply-method');
        })
        .end((err, res) => {
          if (err) {
            done(err);
            return;
          }
          res.text.should.equal('method=put');
          done();
        });
    }

request

Request inheritance
assert(request.get(`${uri}/`) instanceof request.Request);
request() simple GET without callback
next => {
    request('GET', 'test/test.request.js').end();
    next();
  }
request() simple GET
next => {
    request('GET', `${uri}/ok`).end((err, res) => {
      try {
        assert(res instanceof request.Response, 'respond with Response');
        assert(res.ok, 'response should be ok');
        assert(res.text, 'res.text');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() simple HEAD
next => {
    request.head(`${uri}/ok`).end((err, res) => {
      try {
        assert(res instanceof request.Response, 'respond with Response');
        assert(res.ok, 'response should be ok');
        assert(!res.text, 'res.text');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() GET 5xx
next => {
    request('GET', `${uri}/error`).end((err, res) => {
      try {
        assert(err);
        assert.equal(err.message, 'Internal Server Error');
        assert(!res.ok, 'response should not be ok');
        assert(res.error, 'response should be an error');
        assert(!res.clientError, 'response should not be a client error');
        assert(res.serverError, 'response should be a server error');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() GET 4xx
next => {
    request('GET', `${uri}/notfound`).end((err, res) => {
      try {
        assert(err);
        assert.equal(err.message, 'Not Found');
        assert(!res.ok, 'response should not be ok');
        assert(res.error, 'response should be an error');
        assert(res.clientError, 'response should be a client error');
        assert(!res.serverError, 'response should not be a server error');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() GET 404 Not Found
next => {
    request('GET', `${uri}/notfound`).end((err, res) => {
      try {
        assert(err);
        assert(res.notFound, 'response should be .notFound');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() GET 400 Bad Request
next => {
    request('GET', `${uri}/bad-request`).end((err, res) => {
      try {
        assert(err);
        assert(res.badRequest, 'response should be .badRequest');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() GET 401 Bad Request
next => {
    request('GET', `${uri}/unauthorized`).end((err, res) => {
      try {
        assert(err);
        assert(res.unauthorized, 'response should be .unauthorized');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() GET 406 Not Acceptable
next => {
    request('GET', `${uri}/not-acceptable`).end((err, res) => {
      try {
        assert(err);
        assert(res.notAcceptable, 'response should be .notAcceptable');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() GET 204 No Content
next => {
    request('GET', `${uri}/no-content`).end((err, res) => {
      try {
        assert.ifError(err);
        assert(res.noContent, 'response should be .noContent');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() DELETE 204 No Content
next => {
    request('DELETE', `${uri}/no-content`).end((err, res) => {
      try {
        assert.ifError(err);
        assert(res.noContent, 'response should be .noContent');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() header parsing
next => {
    request('GET', `${uri}/notfound`).end((err, res) => {
      try {
        assert(err);
        assert.equal('text/html; charset=utf-8', res.header['content-type']);
        assert.equal('Express', res.header['x-powered-by']);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request() .status
next => {
    request('GET', `${uri}/notfound`).end((err, res) => {
      try {
        assert(err);
        assert.equal(404, res.status, 'response .status');
        assert.equal(4, res.statusType, 'response .statusType');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
get()
next => {
    request.get(`${uri}/notfound`).end((err, res) => {
      try {
        assert(err);
        assert.equal(404, res.status, 'response .status');
        assert.equal(4, res.statusType, 'response .statusType');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
put()
next => {
    request.put(`${uri}/user/12`).end((err, res) => {
      try {
        assert.equal('updated', res.text, 'response text');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
put().send()
next => {
    request
      .put(`${uri}/user/13/body`)
      .send({ user: 'new' })
      .end((err, res) => {
        try {
          assert.equal('received new', res.text, 'response text');
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
post()
next => {
    request.post(`${uri}/user`).end((err, res) => {
      try {
        assert.equal('created', res.text, 'response text');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
del()
next => {
    request.del(`${uri}/user/12`).end((err, res) => {
      try {
        assert.equal('deleted', res.text, 'response text');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
delete()
next => {
    request.delete(`${uri}/user/12`).end((err, res) => {
      try {
        assert.equal('deleted', res.text, 'response text');
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
post() data
next => {
    request
      .post(`${uri}/todo/item`)
      .type('application/octet-stream')
      .send('tobi')
      .end((err, res) => {
        try {
          assert.equal('added "tobi"', res.text, 'response text');
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .type()
next => {
    request
      .post(`${uri}/user/12/pet`)
      .type('urlencoded')
      .send('pet=tobi')
      .end((err, res) => {
        try {
          assert.equal('added pet "tobi"', res.text, 'response text');
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .type() with alias
next => {
    request
      .post(`${uri}/user/12/pet`)
      .type('application/x-www-form-urlencoded')
      .send('pet=tobi')
      .end((err, res) => {
        try {
          assert.equal('added pet "tobi"', res.text, 'response text');
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .get() with no data or callback
next => {
    request.get(`${uri}/echo-header/content-type`);
    next();
  }
request .send() with no data only
next => {
    request
      .post(`${uri}/user/5/pet`)
      .type('urlencoded')
      .send('pet=tobi');
    next();
  }
request .send() with callback only
next => {
    request
      .get(`${uri}/echo-header/accept`)
      .set('Accept', 'foo/bar')
      .end((err, res) => {
        try {
          assert.equal('foo/bar', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .accept() with json
next => {
    request
      .get(`${uri}/echo-header/accept`)
      .accept('json')
      .end((err, res) => {
        try {
          assert.equal('application/json', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .accept() with application/json
next => {
    request
      .get(`${uri}/echo-header/accept`)
      .accept('application/json')
      .end((err, res) => {
        try {
          assert.equal('application/json', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .accept() with xml
next => {
    request
      .get(`${uri}/echo-header/accept`)
      .accept('xml')
      .end((err, res) => {
        try {
          // We can't depend on mime module to be consistent with this
          assert(res.text == 'application/xml' || res.text == 'text/xml');
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .accept() with application/xml
next => {
    request
      .get(`${uri}/echo-header/accept`)
      .accept('application/xml')
      .end((err, res) => {
        try {
          assert.equal('application/xml', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .end()
next => {
    request
      .put(`${uri}/echo-header/content-type`)
      .set('Content-Type', 'text/plain')
      .send('wahoo')
      .end((err, res) => {
        try {
          assert.equal('text/plain', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .send()
next => {
    request
      .put(`${uri}/echo-header/content-type`)
      .set('Content-Type', 'text/plain')
      .send('wahoo')
      .end((err, res) => {
        try {
          assert.equal('text/plain', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .set()
next => {
    request
      .put(`${uri}/echo-header/content-type`)
      .set('Content-Type', 'text/plain')
      .send('wahoo')
      .end((err, res) => {
        try {
          assert.equal('text/plain', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
request .set(object)
next => {
    request
      .put(`${uri}/echo-header/content-type`)
      .set({ 'Content-Type': 'text/plain' })
      .send('wahoo')
      .end((err, res) => {
        try {
          assert.equal('text/plain', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
POST urlencoded
next => {
    request
      .post(`${uri}/pet`)
      .type('urlencoded')
      .send({ name: 'Manny', species: 'cat' })
      .end((err, res) => {
        try {
          assert.equal('added Manny the cat', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
POST json
next => {
    request
      .post(`${uri}/pet`)
      .type('json')
      .send({ name: 'Manny', species: 'cat' })
      .end((err, res) => {
        try {
          assert.equal('added Manny the cat', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
POST json array
next => {
    request
      .post(`${uri}/echo`)
      .send([1, 2, 3])
      .end((err, res) => {
        try {
          assert.equal(
            'application/json',
            res.header['content-type'].split(';')[0]
          );
          assert.equal('[1,2,3]', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
POST json default
next => {
    request
      .post(`${uri}/pet`)
      .send({ name: 'Manny', species: 'cat' })
      .end((err, res) => {
        try {
          assert.equal('added Manny the cat', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
POST json contentType charset
next => {
    request
      .post(`${uri}/echo`)
      .set('Content-Type', 'application/json; charset=UTF-8')
      .send({ data: ['data1', 'data2'] })
      .end((err, res) => {
        try {
          assert.equal('{"data":["data1","data2"]}', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
POST json contentType vendor
next => {
    request
      .post(`${uri}/echo`)
      .set('Content-Type', 'application/vnd.example+json')
      .send({ data: ['data1', 'data2'] })
      .end((err, res) => {
        try {
          assert.equal('{"data":["data1","data2"]}', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
POST multiple .send() calls
next => {
    request
      .post(`${uri}/pet`)
      .send({ name: 'Manny' })
      .send({ species: 'cat' })
      .end((err, res) => {
        try {
          assert.equal('added Manny the cat', res.text);
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
POST multiple .send() strings
next => {
    request
      .post(`${uri}/echo`)
      .send('user[name]=tj')
      .send('user[email]=tj@vision-media.ca')
      .end((err, res) => {
        try {
          assert.equal(
            'application/x-www-form-urlencoded',
            res.header['content-type'].split(';')[0]
          );
          assert.equal(
            res.text,
            'user[name]=tj&user[email]=tj@vision-media.ca'
          );
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
POST with no data
next => {
    request
      .post(`${uri}/empty-body`)
      .send()
      .end((err, res) => {
        try {
          assert.ifError(err);
          assert(res.noContent, 'response should be .noContent');
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET .type
next => {
    request.get(`${uri}/pets`).end((err, res) => {
      try {
        assert.equal('application/json', res.type);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
GET Content-Type params
next => {
    request.get(`${uri}/text`).end((err, res) => {
      try {
        assert.equal('utf-8', res.charset);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
GET json
next => {
    request.get(`${uri}/pets`).end((err, res) => {
      try {
        assert.deepEqual(res.body, ['tobi', 'loki', 'jane']);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
GET json-seq
next => {
    request
      .get(`${uri}/json-seq`)
      .buffer()
      .end((err, res) => {
        try {
          assert.ifError(err);
          assert.deepEqual(res.text, '\u001E{"id":1}\n\u001E{"id":2}\n');
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET x-www-form-urlencoded
next => {
    request.get(`${uri}/foo`).end((err, res) => {
      try {
        assert.deepEqual(res.body, { foo: 'bar' });
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
GET shorthand
next => {
    request.get(`${uri}/foo`, (err, res) => {
      try {
        assert.equal('foo=bar', res.text);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
POST shorthand
next => {
    request.post(`${uri}/user/0/pet`, { pet: 'tobi' }, (err, res) => {
      try {
        assert.equal('added pet "tobi"', res.text);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
POST shorthand without callback
next => {
    request.post(`${uri}/user/0/pet`, { pet: 'tobi' }).end((err, res) => {
      try {
        assert.equal('added pet "tobi"', res.text);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
GET querystring object with array
next => {
    request
      .get(`${uri}/querystring`)
      .query({ val: ['a', 'b', 'c'] })
      .end((err, res) => {
        try {
          assert.deepEqual(res.body, { val: ['a', 'b', 'c'] });
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET querystring object with array and primitives
next => {
    request
      .get(`${uri}/querystring`)
      .query({ array: ['a', 'b', 'c'], string: 'foo', number: 10 })
      .end((err, res) => {
        try {
          assert.deepEqual(res.body, {
            array: ['a', 'b', 'c'],
            string: 'foo',
            number: 10
          });
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET querystring object with two arrays
next => {
    request
      .get(`${uri}/querystring`)
      .query({ array1: ['a', 'b', 'c'], array2: [1, 2, 3] })
      .end((err, res) => {
        try {
          assert.deepEqual(res.body, {
            array1: ['a', 'b', 'c'],
            array2: [1, 2, 3]
          });
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET querystring object
next => {
    request
      .get(`${uri}/querystring`)
      .query({ search: 'Manny' })
      .end((err, res) => {
        try {
          assert.deepEqual(res.body, { search: 'Manny' });
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET querystring append original
next => {
    request
      .get(`${uri}/querystring?search=Manny`)
      .query({ range: '1..5' })
      .end((err, res) => {
        try {
          assert.deepEqual(res.body, { search: 'Manny', range: '1..5' });
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET querystring multiple objects
next => {
    request
      .get(`${uri}/querystring`)
      .query({ search: 'Manny' })
      .query({ range: '1..5' })
      .query({ order: 'desc' })
      .end((err, res) => {
        try {
          assert.deepEqual(res.body, {
            search: 'Manny',
            range: '1..5',
            order: 'desc'
          });
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET querystring with strings
next => {
    request
      .get(`${uri}/querystring`)
      .query('search=Manny')
      .query('range=1..5')
      .query('order=desc')
      .end((err, res) => {
        try {
          assert.deepEqual(res.body, {
            search: 'Manny',
            range: '1..5',
            order: 'desc'
          });
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET querystring with strings and objects
next => {
    request
      .get(`${uri}/querystring`)
      .query('search=Manny')
      .query({ order: 'desc', range: '1..5' })
      .end((err, res) => {
        try {
          assert.deepEqual(res.body, {
            search: 'Manny',
            range: '1..5',
            order: 'desc'
          });
          next();
        } catch (err2) {
          next(err2);
        }
      });
  }
GET shorthand payload goes to querystring
next => {
    request.get(
      `${uri}/querystring`,
      { foo: 'FOO', bar: 'BAR' },
      (err, res) => {
        try {
          assert.deepEqual(res.body, { foo: 'FOO', bar: 'BAR' });
          next();
        } catch (err2) {
          next(err2);
        }
      }
    );
  }
HEAD shorthand payload goes to querystring
next => {
    request.head(
      `${uri}/querystring-in-header`,
      { foo: 'FOO', bar: 'BAR' },
      (err, res) => {
        try {
          assert.deepEqual(JSON.parse(res.headers.query), {
            foo: 'FOO',
            bar: 'BAR'
          });
          next();
        } catch (err2) {
          next(err2);
        }
      }
    );
  }
request(method, url)
next => {
    request('GET', `${uri}/foo`).end((err, res) => {
      try {
        assert.equal('bar', res.body.foo);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request(url)
next => {
    request(`${uri}/foo`).end((err, res) => {
      try {
        assert.equal('bar', res.body.foo);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request(url, fn)
next => {
    request(`${uri}/foo`, (err, res) => {
      try {
        assert.equal('bar', res.body.foo);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
req.timeout(ms)
next => {
    const req = request.get(`${uri}/delay/3000`).timeout(1000);
    req.end((err, res) => {
      try {
        assert(err, 'error missing');
        assert.equal(1000, err.timeout, 'err.timeout missing');
        assert.equal(
          'Timeout of 1000ms exceeded',
          err.message,
          'err.message incorrect'
        );
        assert.equal(null, res);
        assert(req.timedout, true);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
req.timeout(ms) with redirect
next => {
    const req = request.get(`${uri}/delay/const`).timeout(1000);
    req.end((err, res) => {
      try {
        assert(err, 'error missing');
        assert.equal(1000, err.timeout, 'err.timeout missing');
        assert.equal(
          'Timeout of 1000ms exceeded',
          err.message,
          'err.message incorrect'
        );
        assert.equal(null, res);
        assert(req.timedout, true);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
request event
next => {
    request
      .get(`${uri}/foo`)
      .on('request', req => {
        try {
          assert.equal(`${uri}/foo`, req.url);
          next();
        } catch (err) {
          next(err);
        }
      })
      .end();
  }
response event
next => {
    request
      .get(`${uri}/foo`)
      .on('response', res => {
        try {
          assert.equal('bar', res.body.foo);
          next();
        } catch (err) {
          next(err);
        }
      })
      .end();
  }
response should set statusCode
next => {
    request.get(`${uri}/ok`, (err, res) => {
      try {
        assert.strictEqual(res.statusCode, 200);
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }
req.toJSON()
next => {
    request.get(`${uri}/ok`).end((err, res) => {
      try {
        const j = (res.request || res.req).toJSON();
        ['url', 'method', 'data', 'headers'].forEach(prop => {
          assert(j.hasOwnProperty(prop));
        });
        next();
      } catch (err2) {
        next(err2);
      }
    });
  }

.retry(count)

should not retry if passed "0"
done => {
    request
      .get(`${base}/error`)
      .retry(0)
      .end((err, res) => {
        try {
          assert(err, 'expected an error');
          assert.equal(
            undefined,
            err.retries,
            'expected an error without .retries'
          );
          assert.equal(500, err.status, 'expected an error status of 500');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should not retry if passed an invalid number
done => {
    request
      .get(`${base}/error`)
      .retry(-2)
      .end((err, res) => {
        try {
          assert(err, 'expected an error');
          assert.equal(
            undefined,
            err.retries,
            'expected an error without .retries'
          );
          assert.equal(500, err.status, 'expected an error status of 500');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should not retry if passed undefined
done => {
    request
      .get(`${base}/error`)
      .retry(undefined)
      .end((err, res) => {
        try {
          assert(err, 'expected an error');
          assert.equal(
            undefined,
            err.retries,
            'expected an error without .retries'
          );
          assert.equal(500, err.status, 'expected an error status of 500');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should handle server error after repeat attempt
done => {
    request
      .get(`${base}/error`)
      .retry(2)
      .end((err, res) => {
        try {
          assert(err, 'expected an error');
          assert.equal(2, err.retries, 'expected an error with .retries');
          assert.equal(500, err.status, 'expected an error status of 500');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should retry if passed nothing
done => {
    request
      .get(`${base}/error`)
      .retry()
      .end((err, res) => {
        try {
          assert(err, 'expected an error');
          assert.equal(1, err.retries, 'expected an error with .retries');
          assert.equal(500, err.status, 'expected an error status of 500');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should retry if passed "true"
done => {
    request
      .get(`${base}/error`)
      .retry(true)
      .end((err, res) => {
        try {
          assert(err, 'expected an error');
          assert.equal(1, err.retries, 'expected an error with .retries');
          assert.equal(500, err.status, 'expected an error status of 500');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should handle successful request after repeat attempt from server error
done => {
    request
      .get(`${base}/error/ok/${uniqid()}`)
      .query({ qs: 'present' })
      .retry(2)
      .end((err, res) => {
        try {
          assert.ifError(err);
          assert(res.ok, 'response should be ok');
          assert(res.text, 'res.text');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should handle server timeout error after repeat attempt
done => {
    request
      .get(`${base}/delay/400`)
      .timeout(200)
      .retry(2)
      .end((err, res) => {
        try {
          assert(err, 'expected an error');
          assert.equal(2, err.retries, 'expected an error with .retries');
          assert.equal(
            'number',
            typeof err.timeout,
            'expected an error with .timeout'
          );
          assert.equal('ECONNABORTED', err.code, 'expected abort error code');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should handle successful request after repeat attempt from server timeout
done => {
    const url = `/delay/1200/ok/${uniqid()}?built=in`;
    request
      .get(base + url)
      .query('string=ified')
      .query({ json: 'ed' })
      .timeout(600)
      .retry(2)
      .end((err, res) => {
        try {
          assert.ifError(err);
          assert(res.ok, 'response should be ok');
          assert.equal(res.text, `ok = ${url}&string=ified&json=ed`);
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should correctly abort a retry attempt
done => {
    let aborted = false;
    const req = request
      .get(`${base}/delay/400`)
      .timeout(200)
      .retry(2);
    req.end((err, res) => {
      try {
        assert(false, 'should not complete the request');
      } catch (err2) {
        done(err2);
      }
    });
    req.on('abort', () => {
      aborted = true;
    });
    setTimeout(() => {
      req.abort();
      setTimeout(() => {
        try {
          assert(aborted, 'should be aborted');
          done();
        } catch (err) {
          done(err);
        }
      }, 150);
    }, 150);
  }
should correctly retain header fields
done => {
    request
      .get(`${base}/error/ok/${uniqid()}`)
      .query({ qs: 'present' })
      .retry(2)
      .set('X-Foo', 'bar')
      .end((err, res) => {
        try {
          assert.ifError(err);
          assert(res.body);
          res.body.should.have.property('x-foo', 'bar');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should not retry on 4xx responses
done => {
    request
      .get(`${base}/bad-request`)
      .retry(2)
      .end((err, res) => {
        try {
          assert(err, 'expected an error');
          assert.equal(0, err.retries, 'expected an error with 0 .retries');
          assert.equal(400, err.status, 'expected an error status of 400');
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should execute callback on retry if passed
done => {
    let callbackCallCount = 0;
    function retryCallback(request) {
      callbackCallCount++;
    }
    request
      .get(`${base}/error`)
      .retry(2, retryCallback)
      .end((err, res) => {
        try {
          assert(err, 'expected an error');
          assert.equal(2, err.retries, 'expected an error with .retries');
          assert.equal(500, err.status, 'expected an error status of 500');
          assert.equal(
            2,
            callbackCallCount,
            'expected the callback to be called on each retry'
          );
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }

.timeout(ms)

when timeout is exceeded

should error
done => {
      request
        .get(`${base}/delay/500`)
        .timeout(150)
        .end((err, res) => {
          assert(err, 'expected an error');
          assert.equal(
            'number',
            typeof err.timeout,
            'expected an error with .timeout'
          );
          assert.equal('ECONNABORTED', err.code, 'expected abort error code');
          done();
        });
    }
should handle gzip timeout
done => {
      request
        .get(`${base}/delay/zip`)
        .timeout(150)
        .end((err, res) => {
          assert(err, 'expected an error');
          assert.equal(
            'number',
            typeof err.timeout,
            'expected an error with .timeout'
          );
          assert.equal('ECONNABORTED', err.code, 'expected abort error code');
          done();
        });
    }
should handle buffer timeout
done => {
      request
        .get(`${base}/delay/json`)
        .buffer(true)
        .timeout(150)
        .end((err, res) => {
          assert(err, 'expected an error');
          assert.equal(
            'number',
            typeof err.timeout,
            'expected an error with .timeout'
          );
          assert.equal('ECONNABORTED', err.code, 'expected abort error code');
          done();
        });
    }
should error on deadline
done => {
      request
        .get(`${base}/delay/500`)
        .timeout({ deadline: 150 })
        .end((err, res) => {
          assert(err, 'expected an error');
          assert.equal(
            'number',
            typeof err.timeout,
            'expected an error with .timeout'
          );
          assert.equal('ECONNABORTED', err.code, 'expected abort error code');
          done();
        });
    }
should support setting individual options
done => {
      request
        .get(`${base}/delay/500`)
        .timeout({ deadline: 10 })
        .timeout({ response: 99999 })
        .end((err, res) => {
          assert(err, 'expected an error');
          assert.equal('ECONNABORTED', err.code, 'expected abort error code');
          assert.equal('ETIME', err.errno);
          done();
        });
    }
should error on response
done => {
      request
        .get(`${base}/delay/500`)
        .timeout({ response: 150 })
        .end((err, res) => {
          assert(err, 'expected an error');
          assert.equal(
            'number',
            typeof err.timeout,
            'expected an error with .timeout'
          );
          assert.equal('ECONNABORTED', err.code, 'expected abort error code');
          assert.equal('ETIMEDOUT', err.errno);
          done();
        });
    }
should accept slow body with fast response
done => {
      request
        .get(`${base}/delay/slowbody`)
        .timeout({ response: 1000 })
        .on('progress', () => {
          // This only makes the test faster without relying on arbitrary timeouts
          request.get(`${base}/delay/slowbody/finish`).end();
        })
        .end(done);
    }

request

use

should use plugin success
done => {
      const now = `${Date.now()}`;
      function uuid(req) {
        req.set('X-UUID', now);
        return req;
      }
      function prefix(req) {
        req.url = uri + req.url;
        return req;
      }
      request
        .get('/echo')
        .use(uuid)
        .use(prefix)
        .end((err, res) => {
          assert.strictEqual(res.statusCode, 200);
          assert.equal(res.get('X-UUID'), now);
          done();
        });
    }

subclass

should be an instance of Request
const req = request.get('/');
assert(req instanceof request.Request);
should use patched subclass
assert(OriginalRequest);
let constructorCalled;
let sendCalled;
function NewRequest(...args) {
  constructorCalled = true;
  OriginalRequest.apply(this, args);
}
NewRequest.prototype = Object.create(OriginalRequest.prototype);
NewRequest.prototype.send = function() {
  sendCalled = true;
  return this;
};
request.Request = NewRequest;
const req = request.get('/').send();
assert(constructorCalled);
assert(sendCalled);
assert(req instanceof NewRequest);
assert(req instanceof OriginalRequest);
should use patched subclass in agent too
if (!request.agent) return; // Node-only
function NewRequest(...args) {
  OriginalRequest.apply(this, args);
}
NewRequest.prototype = Object.create(OriginalRequest.prototype);
request.Request = NewRequest;
const req = request.agent().del('/');
assert(req instanceof NewRequest);
assert(req instanceof OriginalRequest);

request

persistent agent

should gain a session on POST
agent3.post(`${base}/signin`).then(res => {
        res.should.have.status(200);
        should.not.exist(res.headers['set-cookie']);
        res.text.should.containEql('dashboard');
      })
should start with empty session (set cookies)
done => {
      agent1.get(`${base}/dashboard`).end((err, res) => {
        should.exist(err);
        res.should.have.status(401);
        should.exist(res.headers['set-cookie']);
        done();
      });
    }
should gain a session (cookies already set)
agent1.post(`${base}/signin`).then(res => {
        res.should.have.status(200);
        should.not.exist(res.headers['set-cookie']);
        res.text.should.containEql('dashboard');
      })
should persist cookies across requests
agent1.get(`${base}/dashboard`).then(res => {
        res.should.have.status(200);
      })
should have the cookie set in the end callback
agent4
        .post(`${base}/setcookie`)
        .then(() => agent4.get(`${base}/getcookie`))
        .then(res => {
          res.should.have.status(200);
          assert.strictEqual(res.text, 'jar');
        })
should not share cookies
done => {
      agent2.get(`${base}/dashboard`).end((err, res) => {
        should.exist(err);
        res.should.have.status(401);
        done();
      });
    }
should not lose cookies between agents
agent1.get(`${base}/dashboard`).then(res => {
        res.should.have.status(200);
      })
should be able to follow redirects
agent1.get(base).then(res => {
        res.should.have.status(200);
        res.text.should.containEql('dashboard');
      })
should be able to post redirects
agent1
        .post(`${base}/redirect`)
        .send({ foo: 'bar', baz: 'blaaah' })
        .then(res => {
          res.should.have.status(200);
          res.text.should.containEql('simple');
          res.redirects.should.eql([`${base}/simple`]);
        })
should be able to limit redirects
done => {
      agent1
        .get(base)
        .redirects(0)
        .end((err, res) => {
          should.exist(err);
          res.should.have.status(302);
          res.redirects.should.eql([]);
          res.header.location.should.equal('/dashboard');
          done();
        });
    }
should be able to create a new session (clear cookie)
agent1.post(`${base}/signout`).then(res => {
        res.should.have.status(200);
        should.exist(res.headers['set-cookie']);
      })
should regenerate with an empty session
done => {
      agent1.get(`${base}/dashboard`).end((err, res) => {
        should.exist(err);
        res.should.have.status(401);
        should.not.exist(res.headers['set-cookie']);
        done();
      });
    }

Basic auth

when credentials are present in url

should set Authorization
done => {
      const new_url = URL.parse(base);
      new_url.auth = 'tobi:learnboost';
      new_url.pathname = '/basic-auth';
      request.get(URL.format(new_url)).end((err, res) => {
        res.status.should.equal(200);
        done();
      });
    }

req.auth(user, pass)

should set Authorization
done => {
      request
        .get(`${base}/basic-auth`)
        .auth('tobi', 'learnboost')
        .end((err, res) => {
          res.status.should.equal(200);
          done();
        });
    }

req.auth(user + ":" + pass)

should set authorization
done => {
      request
        .get(`${base}/basic-auth/again`)
        .auth('tobi')
        .end((err, res) => {
          res.status.should.eql(200);
          done();
        });
    }

[node] request

should send body with .get().send()
next => {
      request
        .get(`${base}/echo`)
        .set('Content-Type', 'text/plain')
        .send('wahoo')
        .end((err, res) => {
          try {
            assert.equal('wahoo', res.text);
            next();
          } catch (err2) {
            next(err2);
          }
        });
    }

with an url

should preserve the encoding of the url
done => {
      request.get(`${base}/url?a=(b%29`).end((err, res) => {
        assert.equal('/url?a=(b%29', res.text);
        done();
      });
    }

with an object

should format the url
request.get(url.parse(`${base}/login`)).then(res => {
        assert(res.ok);
      })

without a schema

should default to http
request.get('localhost:5000/login').then(res => {
        assert.equal(res.status, 200);
      })

res.toJSON()

should describe the response
request
        .post(`${base}/echo`)
        .send({ foo: 'baz' })
        .then(res => {
          const obj = res.toJSON();
          assert.equal('object', typeof obj.header);
          assert.equal('object', typeof obj.req);
          assert.equal(200, obj.status);
          assert.equal('{"foo":"baz"}', obj.text);
        })

res.links

should default to an empty object
request.get(`${base}/login`).then(res => {
        res.links.should.eql({});
      })
should parse the Link header field
done => {
      request.get(`${base}/links`).end((err, res) => {
        res.links.next.should.equal(
          'https://api.github.com/repos/visionmedia/mocha/issues?page=2'
        );
        done();
      });
    }

req.unset(field)

should remove the header field
done => {
      request
        .post(`${base}/echo`)
        .unset('User-Agent')
        .end((err, res) => {
          assert.equal(void 0, res.header['user-agent']);
          done();
        });
    }

case-insensitive

should set/get header fields case-insensitively
const r = request.post(`${base}/echo`);
r.set('MiXeD', 'helloes');
assert.strictEqual(r.get('mixed'), 'helloes');
should unset header fields case-insensitively
const r = request.post(`${base}/echo`);
r.set('MiXeD', 'helloes');
r.unset('MIXED');
assert.strictEqual(r.get('mixed'), undefined);

req.write(str)

should write the given data
done => {
      const req = request.post(`${base}/echo`);
      req.set('Content-Type', 'application/json');
      assert.equal('boolean', typeof req.write('{"name"'));
      assert.equal('boolean', typeof req.write(':"tobi"}'));
      req.end((err, res) => {
        res.text.should.equal('{"name":"tobi"}');
        done();
      });
    }

req.pipe(stream)

should pipe the response to the given stream
done => {
      const stream = new EventEmitter();
      stream.buf = '';
      stream.writable = true;
      stream.write = function(chunk) {
        this.buf += chunk;
      };
      stream.end = function() {
        this.buf.should.equal('{"name":"tobi"}');
        done();
      };
      request
        .post(`${base}/echo`)
        .send('{"name":"tobi"}')
        .pipe(stream);
    }

.buffer()

should enable buffering
done => {
      request
        .get(`${base}/custom`)
        .buffer()
        .end((err, res) => {
          assert.ifError(err);
          assert.equal('custom stuff', res.text);
          assert(res.buffered);
          done();
        });
    }
should take precedence over request.buffer['someMimeType'] = false
done => {
      const type = 'application/barbaz';
      const send = 'some text';
      request.buffer[type] = false;
      request
        .post(`${base}/echo`)
        .type(type)
        .send(send)
        .buffer()
        .end((err, res) => {
          delete request.buffer[type];
          assert.ifError(err);
          assert.equal(res.type, type);
          assert.equal(send, res.text);
          assert(res.buffered);
          done();
        });
    }

.buffer(false)

should disable buffering
done => {
      request
        .post(`${base}/echo`)
        .type('application/x-dog')
        .send('hello this is dog')
        .buffer(false)
        .end((err, res) => {
          assert.ifError(err);
          assert.equal(null, res.text);
          res.body.should.eql({});
          let buf = '';
          res.setEncoding('utf8');
          res.on('data', chunk => {
            buf += chunk;
          });
          res.on('end', () => {
            buf.should.equal('hello this is dog');
            done();
          });
        });
    }
should take precedence over request.buffer['someMimeType'] = true
done => {
      const type = 'application/foobar';
      const send = 'hello this is a dog';
      request.buffer[type] = true;
      request
        .post(`${base}/echo`)
        .type(type)
        .send(send)
        .buffer(false)
        .end((err, res) => {
          delete request.buffer[type];
          assert.ifError(err);
          assert.equal(null, res.text);
          assert.equal(res.type, type);
          assert(!res.buffered);
          res.body.should.eql({});
          let buf = '';
          res.setEncoding('utf8');
          res.on('data', chunk => {
            buf += chunk;
          });
          res.on('end', () => {
            buf.should.equal(send);
            done();
          });
        });
    }

.withCredentials()

should not throw an error when using the client-side "withCredentials" method
done => {
      request
        .get(`${base}/custom`)
        .withCredentials()
        .end((err, res) => {
          assert.ifError(err);
          done();
        });
    }

.agent()

should return the defaut agent
done => {
      const req = request.post(`${base}/echo`);
      req.agent().should.equal(false);
      done();
    }

.agent(undefined)

should set an agent to undefined and ensure it is chainable
done => {
      const req = request.get(`${base}/echo`);
      const ret = req.agent(undefined);
      ret.should.equal(req);
      assert.strictEqual(req.agent(), undefined);
      done();
    }

.agent(new http.Agent())

should set passed agent
done => {
      const http = require('http');
      const req = request.get(`${base}/echo`);
      const agent = new http.Agent();
      const ret = req.agent(agent);
      ret.should.equal(req);
      req.agent().should.equal(agent);
      done();
    }

with a content type other than application/json or text/*

should still use buffering
return request
  .post(`${base}/echo`)
  .type('application/x-dog')
  .send('hello this is dog')
  .then(res => {
    assert.equal(null, res.text);
    assert.equal(res.body.toString(), 'hello this is dog');
    res.buffered.should.be.true;
  });

content-length

should be set to the byte length of a non-buffer object
done => {
      const decoder = new StringDecoder('utf8');
      let img = fs.readFileSync(`${__dirname}/fixtures/test.png`);
      img = decoder.write(img);
      request
        .post(`${base}/echo`)
        .type('application/x-image')
        .send(img)
        .buffer(false)
        .end((err, res) => {
          assert.ifError(err);
          assert(!res.buffered);
          assert.equal(res.header['content-length'], Buffer.byteLength(img));
          done();
        });
    }
should be set to the length of a buffer object
done => {
      const img = fs.readFileSync(`${__dirname}/fixtures/test.png`);
      request
        .post(`${base}/echo`)
        .type('application/x-image')
        .send(img)
        .buffer(true)
        .end((err, res) => {
          assert.ifError(err);
          assert(res.buffered);
          assert.equal(res.header['content-length'], img.length);
          done();
        });
    }

req.buffer['someMimeType']

should respect that agent.buffer(true) takes precedent
done => {
    const agent = request.agent();
    agent.buffer(true);
    const type = 'application/somerandomtype';
    const send = 'somerandomtext';
    request.buffer[type] = false;
    agent
      .post(`${base}/echo`)
      .type(type)
      .send(send)
      .end((err, res) => {
        delete request.buffer[type];
        assert.ifError(err);
        assert.equal(res.type, type);
        assert.equal(send, res.text);
        assert(res.buffered);
        done();
      });
  }
should respect that agent.buffer(false) takes precedent
done => {
    const agent = request.agent();
    agent.buffer(false);
    const type = 'application/barrr';
    const send = 'some random text2';
    request.buffer[type] = true;
    agent
      .post(`${base}/echo`)
      .type(type)
      .send(send)
      .end((err, res) => {
        delete request.buffer[type];
        assert.ifError(err);
        assert.equal(null, res.text);
        assert.equal(res.type, type);
        assert(!res.buffered);
        res.body.should.eql({});
        let buf = '';
        res.setEncoding('utf8');
        res.on('data', chunk => {
          buf += chunk;
        });
        res.on('end', () => {
          buf.should.equal(send);
          done();
        });
      });
  }
should disable buffering for that mimetype when false
done => {
    const type = 'application/bar';
    const send = 'some random text';
    request.buffer[type] = false;
    request
      .post(`${base}/echo`)
      .type(type)
      .send(send)
      .end((err, res) => {
        delete request.buffer[type];
        assert.ifError(err);
        assert.equal(null, res.text);
        assert.equal(res.type, type);
        assert(!res.buffered);
        res.body.should.eql({});
        let buf = '';
        res.setEncoding('utf8');
        res.on('data', chunk => {
          buf += chunk;
        });
        res.on('end', () => {
          buf.should.equal(send);
          done();
        });
      });
  }
should enable buffering for that mimetype when true
done => {
    const type = 'application/baz';
    const send = 'woooo';
    request.buffer[type] = true;
    request
      .post(`${base}/echo`)
      .type(type)
      .send(send)
      .end((err, res) => {
        delete request.buffer[type];
        assert.ifError(err);
        assert.equal(res.type, type);
        assert.equal(send, res.text);
        assert(res.buffered);
        done();
      });
  }
should fallback to default handling for that mimetype when undefined
const type = 'application/bazzz';
const send = 'woooooo';
return request
  .post(`${base}/echo`)
  .type(type)
  .send(send)
  .then(res => {
    assert.equal(res.type, type);
    assert.equal(send, res.body.toString());
    assert(res.buffered);
  });

exports

should expose .protocols
Object.keys(request.protocols).should.eql(['http:', 'https:', 'http2:']);
should expose .serialize
Object.keys(request.serialize).should.eql([
  'application/x-www-form-urlencoded',
  'application/json'
]);
should expose .parse
Object.keys(request.parse).should.eql([
  'application/x-www-form-urlencoded',
  'application/json',
  'text',
  'application/octet-stream',
  'application/pdf',
  'image'
]);
should export .buffer
Object.keys(request.buffer).should.eql([]);

flags

with 4xx response

should set res.error and res.clientError
done => {
      request.get(`${base}/notfound`).end((err, res) => {
        assert(err);
        assert(!res.ok, 'response should not be ok');
        assert(res.error, 'response should be an error');
        assert(res.clientError, 'response should be a client error');
        assert(!res.serverError, 'response should not be a server error');
        done();
      });
    }

with 5xx response

should set res.error and res.serverError
done => {
      request.get(`${base}/error`).end((err, res) => {
        assert(err);
        assert(!res.ok, 'response should not be ok');
        assert(!res.notFound, 'response should not be notFound');
        assert(res.error, 'response should be an error');
        assert(!res.clientError, 'response should not be a client error');
        assert(res.serverError, 'response should be a server error');
        done();
      });
    }

with 404 Not Found

should res.notFound
done => {
      request.get(`${base}/notfound`).end((err, res) => {
        assert(err);
        assert(res.notFound, 'response should be .notFound');
        done();
      });
    }

with 400 Bad Request

should set req.badRequest
done => {
      request.get(`${base}/bad-request`).end((err, res) => {
        assert(err);
        assert(res.badRequest, 'response should be .badRequest');
        done();
      });
    }

with 401 Bad Request

should set res.unauthorized
done => {
      request.get(`${base}/unauthorized`).end((err, res) => {
        assert(err);
        assert(res.unauthorized, 'response should be .unauthorized');
        done();
      });
    }

with 406 Not Acceptable

should set res.notAcceptable
done => {
      request.get(`${base}/not-acceptable`).end((err, res) => {
        assert(err);
        assert(res.notAcceptable, 'response should be .notAcceptable');
        done();
      });
    }

with 204 No Content

should set res.noContent
done => {
      request.get(`${base}/no-content`).end((err, res) => {
        assert(!err);
        assert(res.noContent, 'response should be .noContent');
        done();
      });
    }

with 201 Created

should set res.created
done => {
      request.post(`${base}/created`).end((err, res) => {
        assert(!err);
        assert(res.created, 'response should be .created');
        done();
      });
    }

with 422 Unprocessable Entity

should set res.unprocessableEntity
done => {
      request.post(`${base}/unprocessable-entity`).end((err, res) => {
        assert(err);
        assert(
          res.unprocessableEntity,
          'response should be .unprocessableEntity'
        );
        done();
      });
    }

Merging objects

Don't mix Buffer and JSON
assert.throws(() => {
  request
    .post('/echo')
    .send(Buffer.from('some buffer'))
    .send({ allowed: false });
});

req.send(String)

should default to "form"
done => {
    request
      .post(`${base}/echo`)
      .send('user[name]=tj')
      .send('user[email]=tj@vision-media.ca')
      .end((err, res) => {
        res.header['content-type'].should.equal(
          'application/x-www-form-urlencoded'
        );
        res.body.should.eql({
          user: { name: 'tj', email: 'tj@vision-media.ca' }
        });
        done();
      });
  }

res.body

application/x-www-form-urlencoded

should parse the body
done => {
      request.get(`${base}/form-data`).end((err, res) => {
        res.text.should.equal('pet[name]=manny');
        res.body.should.eql({ pet: { name: 'manny' } });
        done();
      });
    }

https

certificate authority

request

should give a good response
done => {
        request
          .get(testEndpoint)
          .ca(ca)
          .end((err, res) => {
            assert.ifError(err);
            assert(res.ok);
            assert.strictEqual('Safe and secure!', res.text);
            done();
          });
      }
should reject unauthorized response
return request
  .get(testEndpoint)
  .trustLocalhost(false)
  .then(
    () => {
      throw new Error('Allows MITM');
    },
    () => {}
  );
should trust localhost unauthorized response
return request.get(testEndpoint).trustLocalhost(true);
should trust overriden localhost unauthorized response
return request
  .get(`https://example.com:${server.address().port}`)
  .connect('127.0.0.1')
  .trustLocalhost();

.agent

should be able to make multiple requests without redefining the certificate
done => {
        const agent = request.agent({ ca });
        agent.get(testEndpoint).end((err, res) => {
          assert.ifError(err);
          assert(res.ok);
          assert.strictEqual('Safe and secure!', res.text);
          agent.get(url.parse(testEndpoint)).end((err, res) => {
            assert.ifError(err);
            assert(res.ok);
            assert.strictEqual('Safe and secure!', res.text);
            done();
          });
        });
      }

client certificates

request

.agent

res.body

image/png

should parse the body
done => {
      request.get(`${base}/image`).end((err, res) => {
        res.type.should.equal('image/png');
        Buffer.isBuffer(res.body).should.be.true();
        (res.body.length - img.length).should.equal(0);
        done();
      });
    }

application/octet-stream

should parse the body
done => {
      request
        .get(`${base}/image-as-octets`)
        .buffer(true) // that's tech debt :(
        .end((err, res) => {
          res.type.should.equal('application/octet-stream');
          Buffer.isBuffer(res.body).should.be.true();
          (res.body.length - img.length).should.equal(0);
          done();
        });
    }

application/octet-stream

should parse the body (using responseType)
done => {
      request
        .get(`${base}/image-as-octets`)
        .responseType('blob')
        .end((err, res) => {
          res.type.should.equal('application/octet-stream');
          Buffer.isBuffer(res.body).should.be.true();
          (res.body.length - img.length).should.equal(0);
          done();
        });
    }

zlib

should deflate the content
done => {
    request.get(base).end((err, res) => {
      res.should.have.status(200);
      res.text.should.equal(subject);
      res.headers['content-length'].should.be.below(subject.length);
      done();
    });
  }
should protect from zip bombs
done => {
    request
      .get(base)
      .buffer(true)
      .maxResponseSize(1)
      .end((err, res) => {
        try {
          assert.equal('Maximum response size reached', err && err.message);
          done();
        } catch (err2) {
          done(err2);
        }
      });
  }
should ignore trailing junk
done => {
    request.get(`${base}/junk`).end((err, res) => {
      res.should.have.status(200);
      res.text.should.equal(subject);
      done();
    });
  }
should ignore missing data
done => {
    request.get(`${base}/chopped`).end((err, res) => {
      assert.equal(undefined, err);
      res.should.have.status(200);
      res.text.should.startWith(subject);
      done();
    });
  }
should handle corrupted responses
done => {
    request.get(`${base}/corrupt`).end((err, res) => {
      assert(err, 'missing error');
      assert(!res, 'response should not be defined');
      done();
    });
  }
should handle no content with gzip header
done => {
    request.get(`${base}/nocontent`).end((err, res) => {
      assert.ifError(err);
      assert(res);
      res.should.have.status(204);
      res.text.should.equal('');
      res.headers.should.not.have.property('content-length');
      done();
    });
  }

without encoding set

should buffer if asked
return request
  .get(`${base}/binary`)
  .buffer(true)
  .then(res => {
    res.should.have.status(200);
    assert(res.headers['content-length']);
    assert(res.body.byteLength);
    assert.equal(subject, res.body.toString());
  });
should emit buffers
done => {
      request.get(`${base}/binary`).end((err, res) => {
        res.should.have.status(200);
        res.headers['content-length'].should.be.below(subject.length);
        res.on('data', chunk => {
          chunk.should.have.length(subject.length);
        });
        res.on('end', done);
      });
    }

Multipart

#field(name, value)

should set a multipart field value
const req = request.post(`${base}/echo`);
req.field('user[name]', 'tobi');
req.field('user[age]', '2');
req.field('user[species]', 'ferret');
return req.then(res => {
  res.body['user[name]'].should.equal('tobi');
  res.body['user[age]'].should.equal('2');
  res.body['user[species]'].should.equal('ferret');
});
should work with file attachments
const req = request.post(`${base}/echo`);
req.field('name', 'Tobi');
req.attach('document', 'test/node/fixtures/user.html');
req.field('species', 'ferret');
return req.then(res => {
  res.body.name.should.equal('Tobi');
  res.body.species.should.equal('ferret');
  const html = res.files.document;
  html.name.should.equal('user.html');
  html.type.should.equal('text/html');
  read(html.path).should.equal('<h1>name</h1>');
});

#attach(name, path)

should attach a file
const req = request.post(`${base}/echo`);
req.attach('one', 'test/node/fixtures/user.html');
req.attach('two', 'test/node/fixtures/user.json');
req.attach('three', 'test/node/fixtures/user.txt');
return req.then(res => {
  const html = res.files.one;
  const json = res.files.two;
  const text = res.files.three;
  html.name.should.equal('user.html');
  html.type.should.equal('text/html');
  read(html.path).should.equal('<h1>name</h1>');
  json.name.should.equal('user.json');
  json.type.should.equal('application/json');
  read(json.path).should.equal('{"name":"tobi"}');
  text.name.should.equal('user.txt');
  text.type.should.equal('text/plain');
  read(text.path).should.equal('Tobi');
});

when a file does not exist

should fail the request with an error
done => {
        const req = request.post(`${base}/echo`);
        req.attach('name', 'foo');
        req.attach('name2', 'bar');
        req.attach('name3', 'baz');
        req.end((err, res) => {
          assert.ok(Boolean(err), 'Request should have failed.');
          err.code.should.equal('ENOENT');
          err.message.should.containEql('ENOENT');
          err.path.should.equal('foo');
          done();
        });
      }
promise should fail
return request
  .post(`${base}/echo`)
  .field({ a: 1, b: 2 })
  .attach('c', 'does-not-exist.txt')
  .then(
    res => assert.fail('It should not allow this'),
    err => {
      err.code.should.equal('ENOENT');
      err.path.should.equal('does-not-exist.txt');
    }
  );
should report ECONNREFUSED via the callback
done => {
        request
          .post('http://127.0.0.1:1') // nobody is listening there
          .attach('name', 'file-does-not-exist')
          .end((err, res) => {
            assert.ok(Boolean(err), 'Request should have failed');
            err.code.should.equal('ECONNREFUSED');
            done();
          });
      }
should report ECONNREFUSED via Promise
return request
  .post('http://127.0.0.1:1') // nobody is listening there
  .attach('name', 'file-does-not-exist')
  .then(
    res => assert.fail('Request should have failed'),
    err => err.code.should.equal('ECONNREFUSED')
  );

#attach(name, path, filename)

should use the custom filename
request
        .post(`${base}/echo`)
        .attach('document', 'test/node/fixtures/user.html', 'doc.html')
        .then(res => {
          const html = res.files.document;
          html.name.should.equal('doc.html');
          html.type.should.equal('text/html');
          read(html.path).should.equal('<h1>name</h1>');
        })
should fire progress event
done => {
      let loaded = 0;
      let total = 0;
      let uploadEventWasFired = false;
      request
        .post(`${base}/echo`)
        .attach('document', 'test/node/fixtures/user.html')
        .on('progress', event => {
          total = event.total;
          loaded = event.loaded;
          if (event.direction === 'upload') {
            uploadEventWasFired = true;
          }
        })
        .end((err, res) => {
          if (err) return done(err);
          const html = res.files.document;
          html.name.should.equal('user.html');
          html.type.should.equal('text/html');
          read(html.path).should.equal('<h1>name</h1>');
          total.should.equal(223);
          loaded.should.equal(223);
          uploadEventWasFired.should.equal(true);
          done();
        });
    }
filesystem errors should be caught
done => {
      request
        .post(`${base}/echo`)
        .attach('filedata', 'test/node/fixtures/non-existent-file.ext')
        .end((err, res) => {
          assert.ok(Boolean(err), 'Request should have failed.');
          err.code.should.equal('ENOENT');
          err.path.should.equal('test/node/fixtures/non-existent-file.ext');
          done();
        });
    }

#field(name, val)

should set a multipart field value
done => {
      request
        .post(`${base}/echo`)
        .field('first-name', 'foo')
        .field('last-name', 'bar')
        .end((err, res) => {
          if (err) done(err);
          res.should.be.ok();
          res.body['first-name'].should.equal('foo');
          res.body['last-name'].should.equal('bar');
          done();
        });
    }

#field(object)

should set multiple multipart fields
done => {
      request
        .post(`${base}/echo`)
        .field({ 'first-name': 'foo', 'last-name': 'bar' })
        .end((err, res) => {
          if (err) done(err);
          res.should.be.ok();
          res.body['first-name'].should.equal('foo');
          res.body['last-name'].should.equal('bar');
          done();
        });
    }

with network error

should error
request.get(`http://localhost:${this.port}/`).end((err, res) => {
  assert(err, 'expected an error');
  done();
});

request

not modified

should start with 200
done => {
      request.get(`${base}/if-mod`).end((err, res) => {
        res.should.have.status(200);
        res.text.should.match(/^\d+$/);
        ts = Number(res.text);
        done();
      });
    }
should then be 304
done => {
      request
        .get(`${base}/if-mod`)
        .set('If-Modified-Since', new Date(ts).toUTCString())
        .end((err, res) => {
          res.should.have.status(304);
          // res.text.should.be.empty
          done();
        });
    }

req.parse(fn)

should take precedence over default parsers
done => {
    request
      .get(`${base}/manny`)
      .parse(request.parse['application/json'])
      .end((err, res) => {
        assert(res.ok);
        assert.equal('{"name":"manny"}', res.text);
        assert.equal('manny', res.body.name);
        done();
      });
  }
should be the only parser
request
      .get(`${base}/image`)
      .buffer(false)
      .parse((res, fn) => {
        res.on('data', () => {});
      })
      .then(res => {
        assert(res.ok);
        assert.strictEqual(res.text, undefined);
        res.body.should.eql({});
      })
should emit error if parser throws
done => {
    request
      .get(`${base}/manny`)
      .parse(() => {
        throw new Error('I am broken');
      })
      .on('error', err => {
        err.message.should.equal('I am broken');
        done();
      })
      .end();
  }
should emit error if parser returns an error
done => {
    request
      .get(`${base}/manny`)
      .parse((res, fn) => {
        fn(new Error('I am broken'));
      })
      .on('error', err => {
        err.message.should.equal('I am broken');
        done();
      })
      .end();
  }
should not emit error on chunked json
done => {
      request.get(`${base}/chunked-json`).end(err => {
        assert.ifError(err);
        done();
      });
    }
should not emit error on aborted chunked json
done => {
      const req = request.get(`${base}/chunked-json`);
      req.end(err => {
        assert.ifError(err);
        done();
      });
      setTimeout(() => {
        req.abort();
      }, 50);
    }

pipe on redirect

should follow Location
done => {
    const stream = fs.createWriteStream(destPath);
    const redirects = [];
    const req = request
      .get(base)
      .on('redirect', res => {
        redirects.push(res.headers.location);
      })
      .connect({
        inapplicable: 'should be ignored'
      });
    stream.on('finish', () => {
      redirects.should.eql(['/movies', '/movies/all', '/movies/all/0']);
      fs.readFileSync(destPath, 'utf8').should.eql('first movie page');
      done();
    });
    req.pipe(stream);
  }

request pipe

should act as a writable stream
done => {
    const req = request.post(base);
    const stream = fs.createReadStream('test/node/fixtures/user.json');
    req.type('json');
    req.on('response', res => {
      res.body.should.eql({ name: 'tobi' });
      done();
    });
    stream.pipe(req);
  }
end() stops piping
done => {
    const stream = fs.createWriteStream(destPath);
    request.get(base).end((err, res) => {
      try {
        res.pipe(stream);
        return done(new Error('Did not prevent nonsense pipe'));
      } catch (err2) {
        /* expected error */
      }
      done();
    });
  }
should act as a readable stream
done => {
    const stream = fs.createWriteStream(destPath);
    let responseCalled = false;
    const req = request.get(base);
    req.type('json');
    req.on('response', res => {
      res.status.should.eql(200);
      responseCalled = true;
    });
    stream.on('finish', () => {
      JSON.parse(fs.readFileSync(destPath, 'utf8')).should.eql({
        name: 'tobi'
      });
      responseCalled.should.be.true();
      done();
    });
    req.pipe(stream);
  }

req.query(String)

should support passing in a string
done => {
    request
      .del(base)
      .query('name=t%F6bi')
      .end((err, res) => {
        res.body.should.eql({ name: 't%F6bi' });
        done();
      });
  }
should work with url query-string and string for query
done => {
    request
      .del(`${base}/?name=tobi`)
      .query('age=2%20')
      .end((err, res) => {
        res.body.should.eql({ name: 'tobi', age: '2 ' });
        done();
      });
  }
should support compound elements in a string
done => {
    request
      .del(base)
      .query('name=t%F6bi&age=2')
      .end((err, res) => {
        res.body.should.eql({ name: 't%F6bi', age: '2' });
        done();
      });
  }
should work when called multiple times with a string
done => {
    request
      .del(base)
      .query('name=t%F6bi')
      .query('age=2%F6')
      .end((err, res) => {
        res.body.should.eql({ name: 't%F6bi', age: '2%F6' });
        done();
      });
  }
should work with normal `query` object and query string
done => {
    request
      .del(base)
      .query('name=t%F6bi')
      .query({ age: '2' })
      .end((err, res) => {
        res.body.should.eql({ name: 't%F6bi', age: '2' });
        done();
      });
  }
should not encode raw backticks, but leave encoded ones as is
return Promise.all([
  request
    .get(`${base}/raw-query`)
    .query('name=`t%60bi`&age`=2')
    .then(res => {
      res.text.should.eql('name=`t%60bi`&age`=2');
    }),
  request.get(base + '/raw-query?`age%60`=2%60`').then(res => {
    res.text.should.eql('`age%60`=2%60`');
  }),
  request
    .get(`${base}/raw-query`)
    .query('name=`t%60bi`')
    .query('age`=2')
    .then(res => {
      res.text.should.eql('name=`t%60bi`&age`=2');
    })
]);

req.query(Object)

should construct the query-string
done => {
    request
      .del(base)
      .query({ name: 'tobi' })
      .query({ order: 'asc' })
      .query({ limit: ['1', '2'] })
      .end((err, res) => {
        res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
        done();
      });
  }
should encode raw backticks
done => {
    request
      .get(`${base}/raw-query`)
      .query({ name: '`tobi`' })
      .query({ 'orde%60r': null })
      .query({ '`limit`': ['%602`'] })
      .end((err, res) => {
        res.text.should.eql('name=%60tobi%60&orde%2560r&%60limit%60=%25602%60');
        done();
      });
  }
should not error on dates
done => {
    const date = new Date(0);
    request
      .del(base)
      .query({ at: date })
      .end((err, res) => {
        assert.equal(date.toISOString(), res.body.at);
        done();
      });
  }
should work after setting header fields
done => {
    request
      .del(base)
      .set('Foo', 'bar')
      .set('Bar', 'baz')
      .query({ name: 'tobi' })
      .query({ order: 'asc' })
      .query({ limit: ['1', '2'] })
      .end((err, res) => {
        res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] });
        done();
      });
  }
should append to the original query-string
done => {
    request
      .del(`${base}/?name=tobi`)
      .query({ order: 'asc' })
      .end((err, res) => {
        res.body.should.eql({ name: 'tobi', order: 'asc' });
        done();
      });
  }
should retain the original query-string
done => {
    request.del(`${base}/?name=tobi`).end((err, res) => {
      res.body.should.eql({ name: 'tobi' });
      done();
    });
  }
should keep only keys with null querystring values
done => {
    request
      .del(`${base}/url`)
      .query({ nil: null })
      .end((err, res) => {
        res.text.should.equal('/url?nil');
        done();
      });
  }
query-string should be sent on pipe
done => {
    const req = request.put(`${base}/?name=tobi`);
    const stream = fs.createReadStream('test/node/fixtures/user.json');
    req.on('response', res => {
      res.body.should.eql({ name: 'tobi' });
      done();
    });
    stream.pipe(req);
  }

request.get

on 301 redirect

should follow Location with a GET request
done => {
      const req = request.get(`${base}/test-301`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('GET');
        done();
      });
    }

on 302 redirect

should follow Location with a GET request
done => {
      const req = request.get(`${base}/test-302`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('GET');
        done();
      });
    }

on 303 redirect

should follow Location with a GET request
done => {
      const req = request.get(`${base}/test-303`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('GET');
        done();
      });
    }

on 307 redirect

should follow Location with a GET request
done => {
      const req = request.get(`${base}/test-307`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('GET');
        done();
      });
    }

on 308 redirect

should follow Location with a GET request
done => {
      const req = request.get(`${base}/test-308`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('GET');
        done();
      });
    }

request.post

on 301 redirect

should follow Location with a GET request
done => {
      const req = request.post(`${base}/test-301`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('GET');
        done();
      });
    }

on 302 redirect

should follow Location with a GET request
done => {
      const req = request.post(`${base}/test-302`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('GET');
        done();
      });
    }

on 303 redirect

should follow Location with a GET request
done => {
      const req = request.post(`${base}/test-303`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('GET');
        done();
      });
    }

on 307 redirect

should follow Location with a POST request
done => {
      const req = request.post(`${base}/test-307`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('POST');
        done();
      });
    }

on 308 redirect

should follow Location with a POST request
done => {
      const req = request.post(`${base}/test-308`).redirects(1);
      req.end((err, res) => {
        req.req._headers.host.should.eql(`localhost:${server2.address().port}`);
        res.status.should.eql(200);
        res.text.should.eql('POST');
        done();
      });
    }

request

on redirect

should merge cookies if agent is used
done => {
      request
        .agent()
        .get(`${base}/cookie-redirect`)
        .set('Cookie', 'orig=1; replaced=not')
        .end((err, res) => {
          try {
            assert.ifError(err);
            assert(/orig=1/.test(res.text), 'orig=1/.test');
            assert(/replaced=yes/.test(res.text), 'replaced=yes/.test');
            assert(/from-redir=1/.test(res.text), 'from-redir=1');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should not merge cookies if agent is not used
done => {
      request
        .get(`${base}/cookie-redirect`)
        .set('Cookie', 'orig=1; replaced=not')
        .end((err, res) => {
          try {
            assert.ifError(err);
            assert(/orig=1/.test(res.text), '/orig=1');
            assert(/replaced=not/.test(res.text), '/replaced=not');
            assert(!/replaced=yes/.test(res.text), '!/replaced=yes');
            assert(!/from-redir/.test(res.text), '!/from-redir');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should have previously set cookie for subsquent requests when agent is used
done => {
      const agent = request.agent();
      agent.get(`${base}/set-cookie`).end(err => {
        assert.ifError(err);
        agent
          .get(`${base}/show-cookies`)
          .set({ Cookie: 'orig=1' })
          .end((err, res) => {
            try {
              assert.ifError(err);
              assert(/orig=1/.test(res.text), 'orig=1/.test');
              assert(/persist=123/.test(res.text), 'persist=123');
              done();
            } catch (err2) {
              done(err2);
            }
          });
      });
    }
should follow Location
done => {
      const redirects = [];
      request
        .get(base)
        .on('redirect', res => {
          redirects.push(res.headers.location);
        })
        .end((err, res) => {
          try {
            const arr = ['/movies', '/movies/all', '/movies/all/0'];
            redirects.should.eql(arr);
            res.text.should.equal('first movie page');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should follow Location with IP override
const redirects = [];
const url = URL.parse(base);
return request
  .get(`http://redir.example.com:${url.port || '80'}${url.pathname}`)
  .connect({
    '*': url.hostname
  })
  .on('redirect', res => {
    redirects.push(res.headers.location);
  })
  .then(res => {
    const arr = ['/movies', '/movies/all', '/movies/all/0'];
    redirects.should.eql(arr);
    res.text.should.equal('first movie page');
  });
should not follow on HEAD by default
const redirects = [];
return request
  .head(base)
  .ok(() => true)
  .on('redirect', res => {
    redirects.push(res.headers.location);
  })
  .then(res => {
    redirects.should.eql([]);
    res.status.should.equal(302);
  });
should follow on HEAD when redirects are set
done => {
      const redirects = [];
      request
        .head(base)
        .redirects(10)
        .on('redirect', res => {
          redirects.push(res.headers.location);
        })
        .end((err, res) => {
          try {
            const arr = [];
            arr.push('/movies');
            arr.push('/movies/all');
            arr.push('/movies/all/0');
            redirects.should.eql(arr);
            assert(!res.text);
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should remove Content-* fields
done => {
      request
        .post(`${base}/header`)
        .type('txt')
        .set('X-Foo', 'bar')
        .set('X-Bar', 'baz')
        .send('hey')
        .end((err, res) => {
          try {
            assert(res.body);
            res.body.should.have.property('x-foo', 'bar');
            res.body.should.have.property('x-bar', 'baz');
            res.body.should.not.have.property('content-type');
            res.body.should.not.have.property('content-length');
            res.body.should.not.have.property('transfer-encoding');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should retain cookies
done => {
      request
        .get(`${base}/header`)
        .set('Cookie', 'foo=bar;')
        .end((err, res) => {
          try {
            assert(res.body);
            res.body.should.have.property('cookie', 'foo=bar;');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should not resend query parameters
done => {
      const redirects = [];
      const query = [];
      request
        .get(`${base}/?foo=bar`)
        .on('redirect', res => {
          query.push(res.headers.query);
          redirects.push(res.headers.location);
        })
        .end((err, res) => {
          try {
            const arr = [];
            arr.push('/movies');
            arr.push('/movies/all');
            arr.push('/movies/all/0');
            redirects.should.eql(arr);
            res.text.should.equal('first movie page');
            query.should.eql(['{"foo":"bar"}', '{}', '{}']);
            res.headers.query.should.eql('{}');
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }
should handle no location header
done => {
      request.get(`${base}/bad-redirect`).end((err, res) => {
        try {
          err.message.should.equal('No location header for redirect');
          done();
        } catch (err2) {
          done(err2);
        }
      });
    }

when relative

should redirect to a sibling path
done => {
        const redirects = [];
        request
          .get(`${base}/relative`)
          .on('redirect', res => {
            redirects.push(res.headers.location);
          })
          .end((err, res) => {
            try {
              redirects.should.eql(['tobi']);
              res.text.should.equal('tobi');
              done();
            } catch (err2) {
              done(err2);
            }
          });
      }
should redirect to a parent path
done => {
        const redirects = [];
        request
          .get(`${base}/relative/sub`)
          .on('redirect', res => {
            redirects.push(res.headers.location);
          })
          .end((err, res) => {
            try {
              redirects.should.eql(['../tobi']);
              res.text.should.equal('tobi');
              done();
            } catch (err2) {
              done(err2);
            }
          });
      }

req.redirects(n)

should alter the default number of redirects to follow
done => {
      const redirects = [];
      request
        .get(base)
        .redirects(2)
        .on('redirect', res => {
          redirects.push(res.headers.location);
        })
        .end((err, res) => {
          try {
            const arr = [];
            assert(res.redirect, 'res.redirect');
            arr.push('/movies');
            arr.push('/movies/all');
            redirects.should.eql(arr);
            res.text.should.match(/Moved Temporarily|Found/);
            done();
          } catch (err2) {
            done(err2);
          }
        });
    }

on POST

should redirect as GET
const redirects = [];
return request
  .post(`${base}/movie`)
  .send({ name: 'Tobi' })
  .redirects(2)
  .on('redirect', res => {
    redirects.push(res.headers.location);
  })
  .then(res => {
    redirects.should.eql(['/movies/all/0']);
    res.text.should.equal('first movie page');
  });
using multipart/form-data should redirect as GET
const redirects = [];
request
  .post(`${base}/movie`)
  .type('form')
  .field('name', 'Tobi')
  .redirects(2)
  .on('redirect', res => {
    redirects.push(res.headers.location);
  })
  .then(res => {
    redirects.should.eql(['/movies/all/0']);
    res.text.should.equal('first movie page');
  });

response

should act as a readable stream
done => {
    const req = request.get(base).buffer(false);
    req.end((err, res) => {
      if (err) return done(err);
      let trackEndEvent = 0;
      let trackCloseEvent = 0;
      res.on('end', () => {
        trackEndEvent++;
        trackEndEvent.should.equal(1);
        if (!process.env.HTTP2_TEST) {
          trackCloseEvent.should.equal(0); // close should not have been called
        }
        done();
      });
      res.on('close', () => {
        trackCloseEvent++;
      });
      (() => {
        res.pause();
      }).should.not.throw();
      (() => {
        res.resume();
      }).should.not.throw();
      (() => {
        res.destroy();
      }).should.not.throw();
    });
  }

req.serialize(fn)

should take precedence over default parsers
done => {
    request
      .post(`${base}/echo`)
      .send({ foo: 123 })
      .serialize(data => '{"bar":456}')
      .end((err, res) => {
        assert.ifError(err);
        assert.equal('{"bar":456}', res.text);
        assert.equal(456, res.body.bar);
        done();
      });
  }

request.get().set()

should set host header after get()
done => {
    app.get('/', (req, res) => {
      assert.equal(req.hostname, 'example.com');
      res.end();
    });
    server = http.createServer(app);
    server.listen(0, function listening() {
      request
        .get(`http://localhost:${server.address().port}`)
        .set('host', 'example.com')
        .then(() => {
          return request
            .get(`http://example.com:${server.address().port}`)
            .connect({
              'example.com': 'localhost',
              '*': 'fail'
            });
        })
        .then(() => done(), done);
    });
  }

res.toError()

should return an Error
done => {
    request.get(base).end((err, res) => {
      var err = res.toError();
      assert.equal(err.status, 400);
      assert.equal(err.method, 'GET');
      assert.equal(err.path, '/');
      assert.equal(err.message, 'cannot GET / (400)');
      assert.equal(err.text, 'invalid json');
      done();
    });
  }

[unix-sockets] http

request

path: / (root)
done => {
      request.get(`${base}/`).end((err, res) => {
        assert(res.ok);
        assert.strictEqual('root ok!', res.text);
        done();
      });
    }
path: /request/path
done => {
      request.get(`${base}/request/path`).end((err, res) => {
        assert(res.ok);
        assert.strictEqual('request path ok!', res.text);
        done();
      });
    }

[unix-sockets] https

request

path: / (root)
done => {
      request
        .get(`${base}/`)
        .ca(cacert)
        .end((err, res) => {
          assert.ifError(err);
          assert(res.ok);
          assert.strictEqual('root ok!', res.text);
          done();
        });
    }
path: /request/path
done => {
      request
        .get(`${base}/request/path`)
        .ca(cacert)
        .end((err, res) => {
          assert.ifError(err);
          assert(res.ok);
          assert.strictEqual('request path ok!', res.text);
          done();
        });
    }

req.get()

should set a default user-agent
request.get(`${base}/ua`).then(res => {
      assert(res.headers);
      assert(res.headers['user-agent']);
      assert(
        /^node-superagent\/\d+\.\d+\.\d+(?:-[a-z]+\.\d+|$)/.test(
          res.headers['user-agent']
        )
      );
    })
should be able to override user-agent
request
      .get(`${base}/ua`)
      .set('User-Agent', 'foo/bar')
      .then(res => {
        assert(res.headers);
        assert.equal(res.headers['user-agent'], 'foo/bar');
      })
should be able to wipe user-agent
request
      .get(`${base}/ua`)
      .unset('User-Agent')
      .then(res => {
        assert(res.headers);
        assert.equal(res.headers['user-agent'], void 0);
      })

utils.type(str)

should return the mime type
utils
  .type('application/json; charset=utf-8')
  .should.equal('application/json');
utils.type('application/json').should.equal('application/json');

utils.params(str)

should return the field parameters
const obj = utils.params('application/json; charset=utf-8; foo  = bar');
obj.charset.should.equal('utf-8');
obj.foo.should.equal('bar');
utils.params('application/json').should.eql({});

utils.parseLinks(str)

should parse links
const str =
  '<https://api.github.com/repos/visionmedia/mocha/issues?page=2>; rel="next", <https://api.github.com/repos/visionmedia/mocha/issues?page=5>; rel="last"';
const ret = utils.parseLinks(str);
ret.next.should.equal(
  'https://api.github.com/repos/visionmedia/mocha/issues?page=2'
);
ret.last.should.equal(
  'https://api.github.com/repos/visionmedia/mocha/issues?page=5'
);
Fork me on GitHub superagent-5.2.2/examples/000077500000000000000000000000001362257374000155245ustar00rootroot00000000000000superagent-5.2.2/examples/simple-get.js000066400000000000000000000004441362257374000201320ustar00rootroot00000000000000/** * Module dependencies. */ const request = require('..'); const url = 'https://gist.githubusercontent.com/reinaldo13/cdbb4d663ba23410a77b/raw/0345267767d50790051951ddc460e2699649de2b/it-works.txt'; request.get(url, (err, res) => { if (err) throw err; console.log(res.text); }); superagent-5.2.2/index.html000066400000000000000000000036211362257374000157050ustar00rootroot00000000000000 SuperAgent — elegant API for AJAX in Node and browsers
Fork me on GitHub superagent-5.2.2/package.json000066400000000000000000000134531362257374000162020ustar00rootroot00000000000000{ "name": "superagent", "description": "elegant & feature rich browser / node HTTP with a fluent API", "version": "5.2.2", "author": "TJ Holowaychuk ", "browser": { "./src/node/index.js": "./src/client.js", "./lib/node/index.js": "./lib/client.js", "./test/support/server.js": "./test/support/blank.js" }, "bugs": { "url": "https://github.com/visionmedia/superagent/issues" }, "commitlint": { "extends": [ "@commitlint/config-conventional" ] }, "contributors": [ "Kornel Lesiński ", "Peter Lyons ", "Hunter Loftis ", "Nick Baugh " ], "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.2", "debug": "^4.1.1", "fast-safe-stringify": "^2.0.7", "form-data": "^3.0.0", "formidable": "^1.2.1", "methods": "^1.1.2", "mime": "^2.4.4", "qs": "^6.9.1", "readable-stream": "^3.4.0", "semver": "^6.3.0" }, "devDependencies": { "@babel/cli": "^7.7.4", "@babel/core": "^7.7.4", "@babel/preset-env": "^7.7.4", "@commitlint/cli": "^8.2.0", "@commitlint/config-conventional": "^8.2.0", "Base64": "^1.1.0", "babelify": "^10.0.0", "basic-auth-connect": "^1.0.0", "body-parser": "^1.19.0", "browserify": "^16.5.0", "codecov": "^3.6.1", "cookie-parser": "^1.4.4", "cross-env": "^6.0.3", "eslint": "^6.7.2", "eslint-config-xo-lass": "^1.0.3", "eslint-plugin-compat": "^3.3.0", "eslint-plugin-node": "^10.0.0", "express": "^4.17.1", "express-session": "^1.17.0", "fixpack": "^2.3.1", "husky": "^3.1.0", "lint-staged": "^9.5.0", "marked": "^0.7.0", "mocha": "3.5.3", "multer": "^1.4.2", "nyc": "^14.1.1", "remark-cli": "^7.0.1", "remark-preset-github": "^0.0.16", "rimraf": "^3.0.0", "should": "^13.2.3", "should-http": "^0.1.1", "tinyify": "^2.5.2", "uglify-js": "^3.7.1", "xo": "0.25.3", "zuul": "^3.12.0" }, "engines": { "node": ">= 7.0.0" }, "homepage": "https://github.com/visionmedia/superagent", "husky": { "hooks": { "pre-commit": "npm test", "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, "jsdelivr": "dist/superagent.min.js", "keywords": [ "agent", "ajax", "ajax", "api", "async", "await", "axios", "cancel", "client", "frisbee", "got", "http", "http", "https", "ky", "promise", "promise", "promises", "request", "request", "requests", "response", "rest", "retry", "super", "superagent", "timeout", "transform", "xhr", "xmlhttprequest" ], "license": "MIT", "lint-staged": { "linters": { "*.js": [ "xo --fix", "git add" ], "*.md": [ "remark . -qfo", "git add" ], "package.json": [ "fixpack", "git add" ] } }, "main": "lib/node/index.js", "prettier": { "singleQuote": true, "bracketSpacing": true, "trailingComma": "none" }, "remarkConfig": { "plugins": [ "preset-github" ] }, "repository": { "type": "git", "url": "git://github.com/visionmedia/superagent.git" }, "scripts": { "browserify": "browserify src/node/index.js -o dist/superagent.js -s superagent -g [ babelify --configFile ./.dist.babelrc ]", "build": "npm run build:clean && npm run build:lib && npm run build:dist", "build:clean": "rimraf lib dist", "build:dist": "npm run browserify && npm run minify", "build:lib": "babel --config-file ./.lib.babelrc src --out-dir lib", "coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov", "lint": "xo && remark . -qfo && eslint -c .lib.eslintrc lib && eslint -c .dist.eslintrc dist", "minify": "cross-env NODE_ENV=production browserify src/node/index.js -o dist/superagent.min.js -s superagent -g [ babelify --configFile ./.dist.babelrc ] -p tinyify", "nyc": "cross-env NODE_ENV=test nyc ava", "test": "npm run build && npm run lint && make test", "test-http2": "npm run build && npm run lint && make test-node-http2" }, "unpkg": "dist/superagent.min.js", "xo": { "prettier": true, "space": true, "extends": [ "xo-lass" ], "env": [ "node", "browser" ], "overrides": [ { "files": "test/**/*.js", "env": [ "mocha" ], "rules": { "block-scoped-var": "off", "complexity": "off", "default-case": "off", "eqeqeq": "off", "func-name-matching": "off", "func-names": "off", "guard-for-in": "off", "handle-callback-err": "off", "import/no-extraneous-dependencies": "off", "import/no-unassigned-import": "off", "import/order": "off", "max-nested-callbacks": "off", "new-cap": "off", "no-eq-null": "off", "no-extend-native": "off", "no-implicit-coercion": "off", "no-multi-assign": "off", "no-negated-condition": "off", "no-prototype-builtins": "off", "no-redeclare": "off", "no-undef": "off", "no-unused-expressions": "off", "no-unused-vars": "off", "no-use-extend-native/no-use-extend-native": "off", "no-useless-escape": "off", "no-var": "off", "no-void": "off", "node/no-deprecated-api": "off", "prefer-rest-params": "off", "prefer-spread": "off", "promise/prefer-await-to-then": "off", "promise/valid-params": "off", "unicorn/filename-case": "off", "valid-jsdoc": "off" } } ], "globals": [ "ActiveXObject" ] } } superagent-5.2.2/src/000077500000000000000000000000001362257374000144755ustar00rootroot00000000000000superagent-5.2.2/src/agent-base.js000066400000000000000000000011661362257374000170450ustar00rootroot00000000000000function Agent() { this._defaults = []; } [ 'use', 'on', 'once', 'set', 'query', 'type', 'accept', 'auth', 'withCredentials', 'sortQuery', 'retry', 'ok', 'redirects', 'timeout', 'buffer', 'serialize', 'parse', 'ca', 'key', 'pfx', 'cert', 'disableTLSCerts' ].forEach(fn => { // Default setting for all requests from this agent Agent.prototype[fn] = function(...args) { this._defaults.push({ fn, args }); return this; }; }); Agent.prototype._setDefaults = function(req) { this._defaults.forEach(def => { req[def.fn](...def.args); }); }; module.exports = Agent; superagent-5.2.2/src/client.js000066400000000000000000000551331362257374000163200ustar00rootroot00000000000000/** * Root reference for iframes. */ let root; if (typeof window !== 'undefined') { // Browser window root = window; } else if (typeof self === 'undefined') { // Other environments console.warn( 'Using browser-only version of superagent in non-browser environment' ); root = this; } else { // Web Worker root = self; } const Emitter = require('component-emitter'); const safeStringify = require('fast-safe-stringify'); const RequestBase = require('./request-base'); const isObject = require('./is-object'); const ResponseBase = require('./response-base'); const Agent = require('./agent-base'); /** * Noop. */ function noop() {} /** * Expose `request`. */ module.exports = function(method, url) { // callback if (typeof url === 'function') { return new exports.Request('GET', method).end(url); } // url first if (arguments.length === 1) { return new exports.Request('GET', method); } return new exports.Request(method, url); }; exports = module.exports; const request = exports; exports.Request = Request; /** * Determine XHR. */ request.getXHR = () => { if ( root.XMLHttpRequest && (!root.location || root.location.protocol !== 'file:' || !root.ActiveXObject) ) { return new XMLHttpRequest(); } try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch {} try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch {} try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch {} try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch {} throw new Error('Browser-only version of superagent could not find XHR'); }; /** * Removes leading and trailing whitespace, added to support IE. * * @param {String} s * @return {String} * @api private */ const trim = ''.trim ? s => s.trim() : s => s.replace(/(^\s*|\s*$)/g, ''); /** * Serialize the given `obj`. * * @param {Object} obj * @return {String} * @api private */ function serialize(obj) { if (!isObject(obj)) return obj; const pairs = []; for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) pushEncodedKeyValuePair(pairs, key, obj[key]); } return pairs.join('&'); } /** * Helps 'serialize' with serializing arrays. * Mutates the pairs array. * * @param {Array} pairs * @param {String} key * @param {Mixed} val */ function pushEncodedKeyValuePair(pairs, key, val) { if (val === undefined) return; if (val === null) { pairs.push(encodeURI(key)); return; } if (Array.isArray(val)) { val.forEach(v => { pushEncodedKeyValuePair(pairs, key, v); }); } else if (isObject(val)) { for (const subkey in val) { if (Object.prototype.hasOwnProperty.call(val, subkey)) pushEncodedKeyValuePair(pairs, `${key}[${subkey}]`, val[subkey]); } } else { pairs.push(encodeURI(key) + '=' + encodeURIComponent(val)); } } /** * Expose serialization method. */ request.serializeObject = serialize; /** * Parse the given x-www-form-urlencoded `str`. * * @param {String} str * @return {Object} * @api private */ function parseString(str) { const obj = {}; const pairs = str.split('&'); let pair; let pos; for (let i = 0, len = pairs.length; i < len; ++i) { pair = pairs[i]; pos = pair.indexOf('='); if (pos === -1) { obj[decodeURIComponent(pair)] = ''; } else { obj[decodeURIComponent(pair.slice(0, pos))] = decodeURIComponent( pair.slice(pos + 1) ); } } return obj; } /** * Expose parser. */ request.parseString = parseString; /** * Default MIME type map. * * superagent.types.xml = 'application/xml'; * */ request.types = { html: 'text/html', json: 'application/json', xml: 'text/xml', urlencoded: 'application/x-www-form-urlencoded', form: 'application/x-www-form-urlencoded', 'form-data': 'application/x-www-form-urlencoded' }; /** * Default serialization map. * * superagent.serialize['application/xml'] = function(obj){ * return 'generated xml here'; * }; * */ request.serialize = { 'application/x-www-form-urlencoded': serialize, 'application/json': safeStringify }; /** * Default parsers. * * superagent.parse['application/xml'] = function(str){ * return { object parsed from str }; * }; * */ request.parse = { 'application/x-www-form-urlencoded': parseString, 'application/json': JSON.parse }; /** * Parse the given header `str` into * an object containing the mapped fields. * * @param {String} str * @return {Object} * @api private */ function parseHeader(str) { const lines = str.split(/\r?\n/); const fields = {}; let index; let line; let field; let val; for (let i = 0, len = lines.length; i < len; ++i) { line = lines[i]; index = line.indexOf(':'); if (index === -1) { // could be empty line, just skip it continue; } field = line.slice(0, index).toLowerCase(); val = trim(line.slice(index + 1)); fields[field] = val; } return fields; } /** * Check if `mime` is json or has +json structured syntax suffix. * * @param {String} mime * @return {Boolean} * @api private */ function isJSON(mime) { // should match /json or +json // but not /json-seq return /[/+]json($|[^-\w])/.test(mime); } /** * Initialize a new `Response` with the given `xhr`. * * - set flags (.ok, .error, etc) * - parse header * * Examples: * * Aliasing `superagent` as `request` is nice: * * request = superagent; * * We can use the promise-like API, or pass callbacks: * * request.get('/').end(function(res){}); * request.get('/', function(res){}); * * Sending data can be chained: * * request * .post('/user') * .send({ name: 'tj' }) * .end(function(res){}); * * Or passed to `.send()`: * * request * .post('/user') * .send({ name: 'tj' }, function(res){}); * * Or passed to `.post()`: * * request * .post('/user', { name: 'tj' }) * .end(function(res){}); * * Or further reduced to a single call for simple cases: * * request * .post('/user', { name: 'tj' }, function(res){}); * * @param {XMLHTTPRequest} xhr * @param {Object} options * @api private */ function Response(req) { this.req = req; this.xhr = this.req.xhr; // responseText is accessible only if responseType is '' or 'text' and on older browsers this.text = (this.req.method !== 'HEAD' && (this.xhr.responseType === '' || this.xhr.responseType === 'text')) || typeof this.xhr.responseType === 'undefined' ? this.xhr.responseText : null; this.statusText = this.req.xhr.statusText; let { status } = this.xhr; // handle IE9 bug: http://stackoverflow.com/questions/10046972/msie-returns-status-code-of-1223-for-ajax-request if (status === 1223) { status = 204; } this._setStatusProperties(status); this.headers = parseHeader(this.xhr.getAllResponseHeaders()); this.header = this.headers; // getAllResponseHeaders sometimes falsely returns "" for CORS requests, but // getResponseHeader still works. so we get content-type even if getting // other headers fails. this.header['content-type'] = this.xhr.getResponseHeader('content-type'); this._setHeaderProperties(this.header); if (this.text === null && req._responseType) { this.body = this.xhr.response; } else { this.body = this.req.method === 'HEAD' ? null : this._parseBody(this.text ? this.text : this.xhr.response); } } // eslint-disable-next-line new-cap ResponseBase(Response.prototype); /** * Parse the given body `str`. * * Used for auto-parsing of bodies. Parsers * are defined on the `superagent.parse` object. * * @param {String} str * @return {Mixed} * @api private */ Response.prototype._parseBody = function(str) { let parse = request.parse[this.type]; if (this.req._parser) { return this.req._parser(this, str); } if (!parse && isJSON(this.type)) { parse = request.parse['application/json']; } return parse && str && (str.length > 0 || str instanceof Object) ? parse(str) : null; }; /** * Return an `Error` representative of this response. * * @return {Error} * @api public */ Response.prototype.toError = function() { const { req } = this; const { method } = req; const { url } = req; const msg = `cannot ${method} ${url} (${this.status})`; const err = new Error(msg); err.status = this.status; err.method = method; err.url = url; return err; }; /** * Expose `Response`. */ request.Response = Response; /** * Initialize a new `Request` with the given `method` and `url`. * * @param {String} method * @param {String} url * @api public */ function Request(method, url) { const self = this; this._query = this._query || []; this.method = method; this.url = url; this.header = {}; // preserves header name case this._header = {}; // coerces header names to lowercase this.on('end', () => { let err = null; let res = null; try { res = new Response(self); } catch (err_) { err = new Error('Parser is unable to parse the response'); err.parse = true; err.original = err_; // issue #675: return the raw response if the response parsing fails if (self.xhr) { // ie9 doesn't have 'response' property err.rawResponse = typeof self.xhr.responseType === 'undefined' ? self.xhr.responseText : self.xhr.response; // issue #876: return the http status code if the response parsing fails err.status = self.xhr.status ? self.xhr.status : null; err.statusCode = err.status; // backwards-compat only } else { err.rawResponse = null; err.status = null; } return self.callback(err); } self.emit('response', res); let new_err; try { if (!self._isResponseOK(res)) { new_err = new Error( res.statusText || res.text || 'Unsuccessful HTTP response' ); } } catch (err_) { new_err = err_; // ok() callback can throw } // #1000 don't catch errors from the callback to avoid double calling it if (new_err) { new_err.original = err; new_err.response = res; new_err.status = res.status; self.callback(new_err, res); } else { self.callback(null, res); } }); } /** * Mixin `Emitter` and `RequestBase`. */ // eslint-disable-next-line new-cap Emitter(Request.prototype); // eslint-disable-next-line new-cap RequestBase(Request.prototype); /** * Set Content-Type to `type`, mapping values from `request.types`. * * Examples: * * superagent.types.xml = 'application/xml'; * * request.post('/') * .type('xml') * .send(xmlstring) * .end(callback); * * request.post('/') * .type('application/xml') * .send(xmlstring) * .end(callback); * * @param {String} type * @return {Request} for chaining * @api public */ Request.prototype.type = function(type) { this.set('Content-Type', request.types[type] || type); return this; }; /** * Set Accept to `type`, mapping values from `request.types`. * * Examples: * * superagent.types.json = 'application/json'; * * request.get('/agent') * .accept('json') * .end(callback); * * request.get('/agent') * .accept('application/json') * .end(callback); * * @param {String} accept * @return {Request} for chaining * @api public */ Request.prototype.accept = function(type) { this.set('Accept', request.types[type] || type); return this; }; /** * Set Authorization field value with `user` and `pass`. * * @param {String} user * @param {String} [pass] optional in case of using 'bearer' as type * @param {Object} options with 'type' property 'auto', 'basic' or 'bearer' (default 'basic') * @return {Request} for chaining * @api public */ Request.prototype.auth = function(user, pass, options) { if (arguments.length === 1) pass = ''; if (typeof pass === 'object' && pass !== null) { // pass is optional and can be replaced with options options = pass; pass = ''; } if (!options) { options = { type: typeof btoa === 'function' ? 'basic' : 'auto' }; } const encoder = string => { if (typeof btoa === 'function') { return btoa(string); } throw new Error('Cannot use basic auth, btoa is not a function'); }; return this._auth(user, pass, options, encoder); }; /** * Add query-string `val`. * * Examples: * * request.get('/shoes') * .query('size=10') * .query({ color: 'blue' }) * * @param {Object|String} val * @return {Request} for chaining * @api public */ Request.prototype.query = function(val) { if (typeof val !== 'string') val = serialize(val); if (val) this._query.push(val); return this; }; /** * Queue the given `file` as an attachment to the specified `field`, * with optional `options` (or filename). * * ``` js * request.post('/upload') * .attach('content', new Blob(['hey!'], { type: "text/html"})) * .end(callback); * ``` * * @param {String} field * @param {Blob|File} file * @param {String|Object} options * @return {Request} for chaining * @api public */ Request.prototype.attach = function(field, file, options) { if (file) { if (this._data) { throw new Error("superagent can't mix .send() and .attach()"); } this._getFormData().append(field, file, options || file.name); } return this; }; Request.prototype._getFormData = function() { if (!this._formData) { this._formData = new root.FormData(); } return this._formData; }; /** * Invoke the callback with `err` and `res` * and handle arity check. * * @param {Error} err * @param {Response} res * @api private */ Request.prototype.callback = function(err, res) { if (this._shouldRetry(err, res)) { return this._retry(); } const fn = this._callback; this.clearTimeout(); if (err) { if (this._maxRetries) err.retries = this._retries - 1; this.emit('error', err); } fn(err, res); }; /** * Invoke callback with x-domain error. * * @api private */ Request.prototype.crossDomainError = function() { const err = new Error( 'Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.' ); err.crossDomain = true; err.status = this.status; err.method = this.method; err.url = this.url; this.callback(err); }; // This only warns, because the request is still likely to work Request.prototype.agent = function() { console.warn('This is not supported in browser version of superagent'); return this; }; Request.prototype.ca = Request.prototype.agent; Request.prototype.buffer = Request.prototype.ca; // This throws, because it can't send/receive data as expected Request.prototype.write = () => { throw new Error( 'Streaming is not supported in browser version of superagent' ); }; Request.prototype.pipe = Request.prototype.write; /** * Check if `obj` is a host object, * we don't want to serialize these :) * * @param {Object} obj host object * @return {Boolean} is a host object * @api private */ Request.prototype._isHost = function(obj) { // Native objects stringify to [object File], [object Blob], [object FormData], etc. return ( obj && typeof obj === 'object' && !Array.isArray(obj) && Object.prototype.toString.call(obj) !== '[object Object]' ); }; /** * Initiate request, invoking callback `fn(res)` * with an instanceof `Response`. * * @param {Function} fn * @return {Request} for chaining * @api public */ Request.prototype.end = function(fn) { if (this._endCalled) { console.warn( 'Warning: .end() was called twice. This is not supported in superagent' ); } this._endCalled = true; // store callback this._callback = fn || noop; // querystring this._finalizeQueryString(); this._end(); }; Request.prototype._setUploadTimeout = function() { const self = this; // upload timeout it's wokrs only if deadline timeout is off if (this._uploadTimeout && !this._uploadTimeoutTimer) { this._uploadTimeoutTimer = setTimeout(() => { self._timeoutError( 'Upload timeout of ', self._uploadTimeout, 'ETIMEDOUT' ); }, this._uploadTimeout); } }; // eslint-disable-next-line complexity Request.prototype._end = function() { if (this._aborted) return this.callback( new Error('The request has been aborted even before .end() was called') ); const self = this; this.xhr = request.getXHR(); const { xhr } = this; let data = this._formData || this._data; this._setTimeouts(); // state change xhr.onreadystatechange = () => { const { readyState } = xhr; if (readyState >= 2 && self._responseTimeoutTimer) { clearTimeout(self._responseTimeoutTimer); } if (readyState !== 4) { return; } // In IE9, reads to any property (e.g. status) off of an aborted XHR will // result in the error "Could not complete the operation due to error c00c023f" let status; try { status = xhr.status; } catch { status = 0; } if (!status) { if (self.timedout || self._aborted) return; return self.crossDomainError(); } self.emit('end'); }; // progress const handleProgress = (direction, e) => { if (e.total > 0) { e.percent = (e.loaded / e.total) * 100; if (e.percent === 100) { clearTimeout(self._uploadTimeoutTimer); } } e.direction = direction; self.emit('progress', e); }; if (this.hasListeners('progress')) { try { xhr.addEventListener('progress', handleProgress.bind(null, 'download')); if (xhr.upload) { xhr.upload.addEventListener( 'progress', handleProgress.bind(null, 'upload') ); } } catch { // Accessing xhr.upload fails in IE from a web worker, so just pretend it doesn't exist. // Reported here: // https://connect.microsoft.com/IE/feedback/details/837245/xmlhttprequest-upload-throws-invalid-argument-when-used-from-web-worker-context } } if (xhr.upload) { this._setUploadTimeout(); } // initiate request try { if (this.username && this.password) { xhr.open(this.method, this.url, true, this.username, this.password); } else { xhr.open(this.method, this.url, true); } } catch (err) { // see #1149 return this.callback(err); } // CORS if (this._withCredentials) xhr.withCredentials = true; // body if ( !this._formData && this.method !== 'GET' && this.method !== 'HEAD' && typeof data !== 'string' && !this._isHost(data) ) { // serialize stuff const contentType = this._header['content-type']; let serialize = this._serializer || request.serialize[contentType ? contentType.split(';')[0] : '']; if (!serialize && isJSON(contentType)) { serialize = request.serialize['application/json']; } if (serialize) data = serialize(data); } // set header fields for (const field in this.header) { if (this.header[field] === null) continue; if (Object.prototype.hasOwnProperty.call(this.header, field)) xhr.setRequestHeader(field, this.header[field]); } if (this._responseType) { xhr.responseType = this._responseType; } // send stuff this.emit('request', this); // IE11 xhr.send(undefined) sends 'undefined' string as POST payload (instead of nothing) // We need null here if data is undefined xhr.send(typeof data === 'undefined' ? null : data); }; request.agent = () => new Agent(); ['GET', 'POST', 'OPTIONS', 'PATCH', 'PUT', 'DELETE'].forEach(method => { Agent.prototype[method.toLowerCase()] = function(url, fn) { const req = new request.Request(method, url); this._setDefaults(req); if (fn) { req.end(fn); } return req; }; }); Agent.prototype.del = Agent.prototype.delete; /** * GET `url` with optional callback `fn(res)`. * * @param {String} url * @param {Mixed|Function} [data] or fn * @param {Function} [fn] * @return {Request} * @api public */ request.get = (url, data, fn) => { const req = request('GET', url); if (typeof data === 'function') { fn = data; data = null; } if (data) req.query(data); if (fn) req.end(fn); return req; }; /** * HEAD `url` with optional callback `fn(res)`. * * @param {String} url * @param {Mixed|Function} [data] or fn * @param {Function} [fn] * @return {Request} * @api public */ request.head = (url, data, fn) => { const req = request('HEAD', url); if (typeof data === 'function') { fn = data; data = null; } if (data) req.query(data); if (fn) req.end(fn); return req; }; /** * OPTIONS query to `url` with optional callback `fn(res)`. * * @param {String} url * @param {Mixed|Function} [data] or fn * @param {Function} [fn] * @return {Request} * @api public */ request.options = (url, data, fn) => { const req = request('OPTIONS', url); if (typeof data === 'function') { fn = data; data = null; } if (data) req.send(data); if (fn) req.end(fn); return req; }; /** * DELETE `url` with optional `data` and callback `fn(res)`. * * @param {String} url * @param {Mixed} [data] * @param {Function} [fn] * @return {Request} * @api public */ function del(url, data, fn) { const req = request('DELETE', url); if (typeof data === 'function') { fn = data; data = null; } if (data) req.send(data); if (fn) req.end(fn); return req; } request.del = del; request.delete = del; /** * PATCH `url` with optional `data` and callback `fn(res)`. * * @param {String} url * @param {Mixed} [data] * @param {Function} [fn] * @return {Request} * @api public */ request.patch = (url, data, fn) => { const req = request('PATCH', url); if (typeof data === 'function') { fn = data; data = null; } if (data) req.send(data); if (fn) req.end(fn); return req; }; /** * POST `url` with optional `data` and callback `fn(res)`. * * @param {String} url * @param {Mixed} [data] * @param {Function} [fn] * @return {Request} * @api public */ request.post = (url, data, fn) => { const req = request('POST', url); if (typeof data === 'function') { fn = data; data = null; } if (data) req.send(data); if (fn) req.end(fn); return req; }; /** * PUT `url` with optional `data` and callback `fn(res)`. * * @param {String} url * @param {Mixed|Function} [data] or fn * @param {Function} [fn] * @return {Request} * @api public */ request.put = (url, data, fn) => { const req = request('PUT', url); if (typeof data === 'function') { fn = data; data = null; } if (data) req.send(data); if (fn) req.end(fn); return req; }; superagent-5.2.2/src/is-object.js000066400000000000000000000003211362257374000167060ustar00rootroot00000000000000/** * Check if `obj` is an object. * * @param {Object} obj * @return {Boolean} * @api private */ function isObject(obj) { return obj !== null && typeof obj === 'object'; } module.exports = isObject; superagent-5.2.2/src/node/000077500000000000000000000000001362257374000154225ustar00rootroot00000000000000superagent-5.2.2/src/node/agent.js000066400000000000000000000041501362257374000170560ustar00rootroot00000000000000/** * Module dependencies. */ // eslint-disable-next-line node/no-deprecated-api const { parse } = require('url'); const { CookieJar } = require('cookiejar'); const { CookieAccessInfo } = require('cookiejar'); const methods = require('methods'); const request = require('../..'); const AgentBase = require('../agent-base'); /** * Expose `Agent`. */ module.exports = Agent; /** * Initialize a new `Agent`. * * @api public */ function Agent(options) { if (!(this instanceof Agent)) { return new Agent(options); } AgentBase.call(this); this.jar = new CookieJar(); if (options) { if (options.ca) { this.ca(options.ca); } if (options.key) { this.key(options.key); } if (options.pfx) { this.pfx(options.pfx); } if (options.cert) { this.cert(options.cert); } if (options.rejectUnauthorized === false) { this.disableTLSCerts(); } } } Agent.prototype = Object.create(AgentBase.prototype); /** * Save the cookies in the given `res` to * the agent's cookie jar for persistence. * * @param {Response} res * @api private */ Agent.prototype._saveCookies = function(res) { const cookies = res.headers['set-cookie']; if (cookies) this.jar.setCookies(cookies); }; /** * Attach cookies when available to the given `req`. * * @param {Request} req * @api private */ Agent.prototype._attachCookies = function(req) { const url = parse(req.url); const access = new CookieAccessInfo( url.hostname, url.pathname, url.protocol === 'https:' ); const cookies = this.jar.getCookies(access).toValueString(); req.cookies = cookies; }; methods.forEach(name => { const method = name.toUpperCase(); Agent.prototype[name] = function(url, fn) { const req = new request.Request(method, url); req.on('response', this._saveCookies.bind(this)); req.on('redirect', this._saveCookies.bind(this)); req.on('redirect', this._attachCookies.bind(this, req)); this._attachCookies(req); this._setDefaults(req); if (fn) { req.end(fn); } return req; }; }); Agent.prototype.del = Agent.prototype.delete; superagent-5.2.2/src/node/http2wrapper.js000066400000000000000000000116051362257374000204250ustar00rootroot00000000000000const Stream = require('stream'); const util = require('util'); const net = require('net'); const tls = require('tls'); // eslint-disable-next-line node/no-deprecated-api const { parse } = require('url'); const semver = require('semver'); let http2; if (semver.gte(process.version, 'v10.10.0')) http2 = require('http2'); else throw new Error('superagent: this version of Node.js does not support http2'); const { HTTP2_HEADER_PATH, HTTP2_HEADER_STATUS, HTTP2_HEADER_METHOD, HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_HOST, HTTP2_HEADER_SET_COOKIE, NGHTTP2_CANCEL } = http2.constants; function setProtocol(protocol) { return { request(options) { return new Request(protocol, options); } }; } function Request(protocol, options) { Stream.call(this); const defaultPort = protocol === 'https:' ? 443 : 80; const defaultHost = 'localhost'; const port = options.port || defaultPort; const host = options.host || defaultHost; delete options.port; delete options.host; this.method = options.method; this.path = options.path; this.protocol = protocol; this.host = host; delete options.method; delete options.path; const sessionOptions = { ...options }; if (options.socketPath) { sessionOptions.socketPath = options.socketPath; sessionOptions.createConnection = this.createUnixConnection.bind(this); } this._headers = {}; const session = http2.connect(`${protocol}//${host}:${port}`, sessionOptions); this.setHeader('host', `${host}:${port}`); session.on('error', err => this.emit('error', err)); this.session = session; } /** * Inherit from `Stream` (which inherits from `EventEmitter`). */ util.inherits(Request, Stream); Request.prototype.createUnixConnection = function(authority, options) { switch (this.protocol) { case 'http:': return net.connect(options.socketPath); case 'https:': options.ALPNProtocols = ['h2']; options.servername = this.host; options.allowHalfOpen = true; return tls.connect(options.socketPath, options); default: throw new Error('Unsupported protocol', this.protocol); } }; // eslint-disable-next-line no-unused-vars Request.prototype.setNoDelay = function(bool) { // We can not use setNoDelay with HTTP/2. // Node 10 limits http2session.socket methods to ones safe to use with HTTP/2. // See also https://nodejs.org/api/http2.html#http2_http2session_socket }; Request.prototype.getFrame = function() { if (this.frame) { return this.frame; } const method = { [HTTP2_HEADER_PATH]: this.path, [HTTP2_HEADER_METHOD]: this.method }; let headers = this.mapToHttp2Header(this._headers); headers = Object.assign(headers, method); const frame = this.session.request(headers); // eslint-disable-next-line no-unused-vars frame.once('response', (headers, flags) => { headers = this.mapToHttpHeader(headers); frame.headers = headers; frame.statusCode = headers[HTTP2_HEADER_STATUS]; frame.status = frame.statusCode; this.emit('response', frame); }); this._headerSent = true; frame.once('drain', () => this.emit('drain')); frame.on('error', err => this.emit('error', err)); frame.on('close', () => this.session.close()); this.frame = frame; return frame; }; Request.prototype.mapToHttpHeader = function(headers) { const keys = Object.keys(headers); const http2Headers = {}; for (let key of keys) { let value = headers[key]; key = key.toLowerCase(); switch (key) { case HTTP2_HEADER_SET_COOKIE: value = Array.isArray(value) ? value : [value]; break; default: break; } http2Headers[key] = value; } return http2Headers; }; Request.prototype.mapToHttp2Header = function(headers) { const keys = Object.keys(headers); const http2Headers = {}; for (let key of keys) { let value = headers[key]; key = key.toLowerCase(); switch (key) { case HTTP2_HEADER_HOST: key = HTTP2_HEADER_AUTHORITY; value = /^http:\/\/|^https:\/\//.test(value) ? parse(value).host : value; break; default: break; } http2Headers[key] = value; } return http2Headers; }; Request.prototype.setHeader = function(name, value) { this._headers[name.toLowerCase()] = value; }; Request.prototype.getHeader = function(name) { return this._headers[name.toLowerCase()]; }; Request.prototype.write = function(data, encoding) { const frame = this.getFrame(); return frame.write(data, encoding); }; Request.prototype.pipe = function(stream, options) { const frame = this.getFrame(); return frame.pipe(stream, options); }; Request.prototype.end = function(data) { const frame = this.getFrame(); frame.end(data); }; // eslint-disable-next-line no-unused-vars Request.prototype.abort = function(data) { const frame = this.getFrame(); frame.close(NGHTTP2_CANCEL); this.session.destroy(); }; exports.setProtocol = setProtocol; superagent-5.2.2/src/node/index.js000066400000000000000000000770531362257374000171030ustar00rootroot00000000000000/** * Module dependencies. */ // eslint-disable-next-line node/no-deprecated-api const { parse, format, resolve } = require('url'); const Stream = require('stream'); const https = require('https'); const http = require('http'); const fs = require('fs'); const zlib = require('zlib'); const util = require('util'); const qs = require('qs'); const mime = require('mime'); let methods = require('methods'); const FormData = require('form-data'); const formidable = require('formidable'); const debug = require('debug')('superagent'); const CookieJar = require('cookiejar'); const semver = require('semver'); const safeStringify = require('fast-safe-stringify'); const utils = require('../utils'); const RequestBase = require('../request-base'); const { unzip } = require('./unzip'); const Response = require('./response'); let http2; if (semver.gte(process.version, 'v10.10.0')) http2 = require('./http2wrapper'); function request(method, url) { // callback if (typeof url === 'function') { return new exports.Request('GET', method).end(url); } // url first if (arguments.length === 1) { return new exports.Request('GET', method); } return new exports.Request(method, url); } module.exports = request; exports = module.exports; /** * Expose `Request`. */ exports.Request = Request; /** * Expose the agent function */ exports.agent = require('./agent'); /** * Noop. */ function noop() {} /** * Expose `Response`. */ exports.Response = Response; /** * Define "form" mime type. */ mime.define( { 'application/x-www-form-urlencoded': ['form', 'urlencoded', 'form-data'] }, true ); /** * Protocol map. */ exports.protocols = { 'http:': http, 'https:': https, 'http2:': http2 }; /** * Default serialization map. * * superagent.serialize['application/xml'] = function(obj){ * return 'generated xml here'; * }; * */ exports.serialize = { 'application/x-www-form-urlencoded': qs.stringify, 'application/json': safeStringify }; /** * Default parsers. * * superagent.parse['application/xml'] = function(res, fn){ * fn(null, res); * }; * */ exports.parse = require('./parsers'); /** * Default buffering map. Can be used to set certain * response types to buffer/not buffer. * * superagent.buffer['application/xml'] = true; */ exports.buffer = {}; /** * Initialize internal header tracking properties on a request instance. * * @param {Object} req the instance * @api private */ function _initHeaders(req) { req._header = { // coerces header names to lowercase }; req.header = { // preserves header name case }; } /** * Initialize a new `Request` with the given `method` and `url`. * * @param {String} method * @param {String|Object} url * @api public */ function Request(method, url) { Stream.call(this); if (typeof url !== 'string') url = format(url); this._enableHttp2 = Boolean(process.env.HTTP2_TEST); // internal only this._agent = false; this._formData = null; this.method = method; this.url = url; _initHeaders(this); this.writable = true; this._redirects = 0; this.redirects(method === 'HEAD' ? 0 : 5); this.cookies = ''; this.qs = {}; this._query = []; this.qsRaw = this._query; // Unused, for backwards compatibility only this._redirectList = []; this._streamRequest = false; this.once('end', this.clearTimeout.bind(this)); } /** * Inherit from `Stream` (which inherits from `EventEmitter`). * Mixin `RequestBase`. */ util.inherits(Request, Stream); // eslint-disable-next-line new-cap RequestBase(Request.prototype); /** * Enable or Disable http2. * * Enable http2. * * ``` js * request.get('http://localhost/') * .http2() * .end(callback); * * request.get('http://localhost/') * .http2(true) * .end(callback); * ``` * * Disable http2. * * ``` js * request = request.http2(); * request.get('http://localhost/') * .http2(false) * .end(callback); * ``` * * @param {Boolean} enable * @return {Request} for chaining * @api public */ Request.prototype.http2 = function(bool) { if (exports.protocols['http2:'] === undefined) { throw new Error( 'superagent: this version of Node.js does not support http2' ); } this._enableHttp2 = bool === undefined ? true : bool; return this; }; /** * Queue the given `file` as an attachment to the specified `field`, * with optional `options` (or filename). * * ``` js * request.post('http://localhost/upload') * .attach('field', Buffer.from('Hello world'), 'hello.html') * .end(callback); * ``` * * A filename may also be used: * * ``` js * request.post('http://localhost/upload') * .attach('files', 'image.jpg') * .end(callback); * ``` * * @param {String} field * @param {String|fs.ReadStream|Buffer} file * @param {String|Object} options * @return {Request} for chaining * @api public */ Request.prototype.attach = function(field, file, options) { if (file) { if (this._data) { throw new Error("superagent can't mix .send() and .attach()"); } let o = options || {}; if (typeof options === 'string') { o = { filename: options }; } if (typeof file === 'string') { if (!o.filename) o.filename = file; debug('creating `fs.ReadStream` instance for file: %s', file); file = fs.createReadStream(file); } else if (!o.filename && file.path) { o.filename = file.path; } this._getFormData().append(field, file, o); } return this; }; Request.prototype._getFormData = function() { if (!this._formData) { this._formData = new FormData(); this._formData.on('error', err => { debug('FormData error', err); if (this.called) { // The request has already finished and the callback was called. // Silently ignore the error. return; } this.callback(err); this.abort(); }); } return this._formData; }; /** * Gets/sets the `Agent` to use for this HTTP request. The default (if this * function is not called) is to opt out of connection pooling (`agent: false`). * * @param {http.Agent} agent * @return {http.Agent} * @api public */ Request.prototype.agent = function(agent) { if (arguments.length === 0) return this._agent; this._agent = agent; return this; }; /** * Set _Content-Type_ response header passed through `mime.getType()`. * * Examples: * * request.post('/') * .type('xml') * .send(xmlstring) * .end(callback); * * request.post('/') * .type('json') * .send(jsonstring) * .end(callback); * * request.post('/') * .type('application/json') * .send(jsonstring) * .end(callback); * * @param {String} type * @return {Request} for chaining * @api public */ Request.prototype.type = function(type) { return this.set( 'Content-Type', type.includes('/') ? type : mime.getType(type) ); }; /** * Set _Accept_ response header passed through `mime.getType()`. * * Examples: * * superagent.types.json = 'application/json'; * * request.get('/agent') * .accept('json') * .end(callback); * * request.get('/agent') * .accept('application/json') * .end(callback); * * @param {String} accept * @return {Request} for chaining * @api public */ Request.prototype.accept = function(type) { return this.set('Accept', type.includes('/') ? type : mime.getType(type)); }; /** * Add query-string `val`. * * Examples: * * request.get('/shoes') * .query('size=10') * .query({ color: 'blue' }) * * @param {Object|String} val * @return {Request} for chaining * @api public */ Request.prototype.query = function(val) { if (typeof val === 'string') { this._query.push(val); } else { Object.assign(this.qs, val); } return this; }; /** * Write raw `data` / `encoding` to the socket. * * @param {Buffer|String} data * @param {String} encoding * @return {Boolean} * @api public */ Request.prototype.write = function(data, encoding) { const req = this.request(); if (!this._streamRequest) { this._streamRequest = true; } return req.write(data, encoding); }; /** * Pipe the request body to `stream`. * * @param {Stream} stream * @param {Object} options * @return {Stream} * @api public */ Request.prototype.pipe = function(stream, options) { this.piped = true; // HACK... this.buffer(false); this.end(); return this._pipeContinue(stream, options); }; Request.prototype._pipeContinue = function(stream, options) { this.req.once('response', res => { // redirect if ( isRedirect(res.statusCode) && this._redirects++ !== this._maxRedirects ) { return this._redirect(res) === this ? this._pipeContinue(stream, options) : undefined; } this.res = res; this._emitResponse(); if (this._aborted) return; if (this._shouldUnzip(res)) { const unzipObj = zlib.createUnzip(); unzipObj.on('error', err => { if (err && err.code === 'Z_BUF_ERROR') { // unexpected end of file is ignored by browsers and curl stream.emit('end'); return; } stream.emit('error', err); }); res.pipe(unzipObj).pipe(stream, options); } else { res.pipe(stream, options); } res.once('end', () => { this.emit('end'); }); }); return stream; }; /** * Enable / disable buffering. * * @return {Boolean} [val] * @return {Request} for chaining * @api public */ Request.prototype.buffer = function(val) { this._buffer = val !== false; return this; }; /** * Redirect to `url * * @param {IncomingMessage} res * @return {Request} for chaining * @api private */ Request.prototype._redirect = function(res) { let url = res.headers.location; if (!url) { return this.callback(new Error('No location header for redirect'), res); } debug('redirect %s -> %s', this.url, url); // location url = resolve(this.url, url); // ensure the response is being consumed // this is required for Node v0.10+ res.resume(); let headers = this.req.getHeaders ? this.req.getHeaders() : this.req._headers; const changesOrigin = parse(url).host !== parse(this.url).host; // implementation of 302 following defacto standard if (res.statusCode === 301 || res.statusCode === 302) { // strip Content-* related fields // in case of POST etc headers = utils.cleanHeader(headers, changesOrigin); // force GET this.method = this.method === 'HEAD' ? 'HEAD' : 'GET'; // clear data this._data = null; } // 303 is always GET if (res.statusCode === 303) { // strip Content-* related fields // in case of POST etc headers = utils.cleanHeader(headers, changesOrigin); // force method this.method = 'GET'; // clear data this._data = null; } // 307 preserves method // 308 preserves method delete headers.host; delete this.req; delete this._formData; // remove all add header except User-Agent _initHeaders(this); // redirect this._endCalled = false; this.url = url; this.qs = {}; this._query.length = 0; this.set(headers); this.emit('redirect', res); this._redirectList.push(this.url); this.end(this._callback); return this; }; /** * Set Authorization field value with `user` and `pass`. * * Examples: * * .auth('tobi', 'learnboost') * .auth('tobi:learnboost') * .auth('tobi') * .auth(accessToken, { type: 'bearer' }) * * @param {String} user * @param {String} [pass] * @param {Object} [options] options with authorization type 'basic' or 'bearer' ('basic' is default) * @return {Request} for chaining * @api public */ Request.prototype.auth = function(user, pass, options) { if (arguments.length === 1) pass = ''; if (typeof pass === 'object' && pass !== null) { // pass is optional and can be replaced with options options = pass; pass = ''; } if (!options) { options = { type: 'basic' }; } const encoder = string => Buffer.from(string).toString('base64'); return this._auth(user, pass, options, encoder); }; /** * Set the certificate authority option for https request. * * @param {Buffer | Array} cert * @return {Request} for chaining * @api public */ Request.prototype.ca = function(cert) { this._ca = cert; return this; }; /** * Set the client certificate key option for https request. * * @param {Buffer | String} cert * @return {Request} for chaining * @api public */ Request.prototype.key = function(cert) { this._key = cert; return this; }; /** * Set the key, certificate, and CA certs of the client in PFX or PKCS12 format. * * @param {Buffer | String} cert * @return {Request} for chaining * @api public */ Request.prototype.pfx = function(cert) { if (typeof cert === 'object' && !Buffer.isBuffer(cert)) { this._pfx = cert.pfx; this._passphrase = cert.passphrase; } else { this._pfx = cert; } return this; }; /** * Set the client certificate option for https request. * * @param {Buffer | String} cert * @return {Request} for chaining * @api public */ Request.prototype.cert = function(cert) { this._cert = cert; return this; }; /** * Do not reject expired or invalid TLS certs. * sets `rejectUnauthorized=true`. Be warned that this allows MITM attacks. * * @return {Request} for chaining * @api public */ Request.prototype.disableTLSCerts = function() { this._disableTLSCerts = true; return this; }; /** * Return an http[s] request. * * @return {OutgoingMessage} * @api private */ // eslint-disable-next-line complexity Request.prototype.request = function() { if (this.req) return this.req; const options = {}; try { const query = qs.stringify(this.qs, { indices: false, strictNullHandling: true }); if (query) { this.qs = {}; this._query.push(query); } this._finalizeQueryString(); } catch (err) { return this.emit('error', err); } let { url } = this; const retries = this._retries; // Capture backticks as-is from the final query string built above. // Note: this'll only find backticks entered in req.query(String) // calls, because qs.stringify unconditionally encodes backticks. let queryStringBackticks; if (url.includes('`')) { const queryStartIndex = url.indexOf('?'); if (queryStartIndex !== -1) { const queryString = url.slice(queryStartIndex + 1); queryStringBackticks = queryString.match(/`|%60/g); } } // default to http:// if (url.indexOf('http') !== 0) url = `http://${url}`; url = parse(url); // See https://github.com/visionmedia/superagent/issues/1367 if (queryStringBackticks) { let i = 0; url.query = url.query.replace(/%60/g, () => queryStringBackticks[i++]); url.search = `?${url.query}`; url.path = url.pathname + url.search; } // support unix sockets if (/^https?\+unix:/.test(url.protocol) === true) { // get the protocol url.protocol = `${url.protocol.split('+')[0]}:`; // get the socket, path const unixParts = url.path.match(/^([^/]+)(.+)$/); options.socketPath = unixParts[1].replace(/%2F/g, '/'); url.path = unixParts[2]; } // Override IP address of a hostname if (this._connectOverride) { const { hostname } = url; const match = hostname in this._connectOverride ? this._connectOverride[hostname] : this._connectOverride['*']; if (match) { // backup the real host if (!this._header.host) { this.set('host', url.host); } // wrap [ipv6] url.host = /:/.test(match) ? `[${match}]` : match; if (url.port) { url.host += `:${url.port}`; } url.hostname = match; } } // options options.method = this.method; options.port = url.port; options.path = url.path; options.host = url.hostname; options.ca = this._ca; options.key = this._key; options.pfx = this._pfx; options.cert = this._cert; options.passphrase = this._passphrase; options.agent = this._agent; options.rejectUnauthorized = typeof this._disableTLSCerts === 'boolean' ? !this._disableTLSCerts : process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0'; // Allows request.get('https://1.2.3.4/').set('Host', 'example.com') if (this._header.host) { options.servername = this._header.host.replace(/:\d+$/, ''); } if ( this._trustLocalhost && /^(?:localhost|127\.0\.0\.\d+|(0*:)+:0*1)$/.test(url.hostname) ) { options.rejectUnauthorized = false; } // initiate request const mod = this._enableHttp2 ? exports.protocols['http2:'].setProtocol(url.protocol) : exports.protocols[url.protocol]; // request this.req = mod.request(options); const { req } = this; // set tcp no delay req.setNoDelay(true); if (options.method !== 'HEAD') { req.setHeader('Accept-Encoding', 'gzip, deflate'); } this.protocol = url.protocol; this.host = url.host; // expose events req.once('drain', () => { this.emit('drain'); }); req.on('error', err => { // flag abortion here for out timeouts // because node will emit a faux-error "socket hang up" // when request is aborted before a connection is made if (this._aborted) return; // if not the same, we are in the **old** (cancelled) request, // so need to continue (same as for above) if (this._retries !== retries) return; // if we've received a response then we don't want to let // an error in the request blow up the response if (this.response) return; this.callback(err); }); // auth if (url.auth) { const auth = url.auth.split(':'); this.auth(auth[0], auth[1]); } if (this.username && this.password) { this.auth(this.username, this.password); } for (const key in this.header) { if (Object.prototype.hasOwnProperty.call(this.header, key)) req.setHeader(key, this.header[key]); } // add cookies if (this.cookies) { if (Object.prototype.hasOwnProperty.call(this._header, 'cookie')) { // merge const tmpJar = new CookieJar.CookieJar(); tmpJar.setCookies(this._header.cookie.split(';')); tmpJar.setCookies(this.cookies.split(';')); req.setHeader( 'Cookie', tmpJar.getCookies(CookieJar.CookieAccessInfo.All).toValueString() ); } else { req.setHeader('Cookie', this.cookies); } } return req; }; /** * Invoke the callback with `err` and `res` * and handle arity check. * * @param {Error} err * @param {Response} res * @api private */ Request.prototype.callback = function(err, res) { if (this._shouldRetry(err, res)) { return this._retry(); } // Avoid the error which is emitted from 'socket hang up' to cause the fn undefined error on JS runtime. const fn = this._callback || noop; this.clearTimeout(); if (this.called) return console.warn('superagent: double callback bug'); this.called = true; if (!err) { try { if (!this._isResponseOK(res)) { let msg = 'Unsuccessful HTTP response'; if (res) { msg = http.STATUS_CODES[res.status] || msg; } err = new Error(msg); err.status = res ? res.status : undefined; } } catch (err_) { err = err_; } } // It's important that the callback is called outside try/catch // to avoid double callback if (!err) { return fn(null, res); } err.response = res; if (this._maxRetries) err.retries = this._retries - 1; // only emit error event if there is a listener // otherwise we assume the callback to `.end()` will get the error if (err && this.listeners('error').length > 0) { this.emit('error', err); } fn(err, res); }; /** * Check if `obj` is a host object, * * @param {Object} obj host object * @return {Boolean} is a host object * @api private */ Request.prototype._isHost = function(obj) { return ( Buffer.isBuffer(obj) || obj instanceof Stream || obj instanceof FormData ); }; /** * Initiate request, invoking callback `fn(err, res)` * with an instanceof `Response`. * * @param {Function} fn * @return {Request} for chaining * @api public */ Request.prototype._emitResponse = function(body, files) { const response = new Response(this); this.response = response; response.redirects = this._redirectList; if (undefined !== body) { response.body = body; } response.files = files; if (this._endCalled) { response.pipe = function() { throw new Error( "end() has already been called, so it's too late to start piping" ); }; } this.emit('response', response); return response; }; Request.prototype.end = function(fn) { this.request(); debug('%s %s', this.method, this.url); if (this._endCalled) { throw new Error( '.end() was called twice. This is not supported in superagent' ); } this._endCalled = true; // store callback this._callback = fn || noop; this._end(); }; Request.prototype._end = function() { if (this._aborted) return this.callback( new Error('The request has been aborted even before .end() was called') ); let data = this._data; const { req } = this; const { method } = this; this._setTimeouts(); // body if (method !== 'HEAD' && !req._headerSent) { // serialize stuff if (typeof data !== 'string') { let contentType = req.getHeader('Content-Type'); // Parse out just the content type from the header (ignore the charset) if (contentType) contentType = contentType.split(';')[0]; let serialize = this._serializer || exports.serialize[contentType]; if (!serialize && isJSON(contentType)) { serialize = exports.serialize['application/json']; } if (serialize) data = serialize(data); } // content-length if (data && !req.getHeader('Content-Length')) { req.setHeader( 'Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data) ); } } // response // eslint-disable-next-line complexity req.once('response', res => { debug('%s %s -> %s', this.method, this.url, res.statusCode); if (this._responseTimeoutTimer) { clearTimeout(this._responseTimeoutTimer); } if (this.piped) { return; } const max = this._maxRedirects; const mime = utils.type(res.headers['content-type'] || '') || 'text/plain'; const type = mime.split('/')[0]; const multipart = type === 'multipart'; const redirect = isRedirect(res.statusCode); const responseType = this._responseType; this.res = res; // redirect if (redirect && this._redirects++ !== max) { return this._redirect(res); } if (this.method === 'HEAD') { this.emit('end'); this.callback(null, this._emitResponse()); return; } // zlib support if (this._shouldUnzip(res)) { unzip(req, res); } let buffer = this._buffer; if (buffer === undefined && mime in exports.buffer) { buffer = Boolean(exports.buffer[mime]); } let parser = this._parser; if (undefined === buffer) { if (parser) { console.warn( "A custom superagent parser has been set, but buffering strategy for the parser hasn't been configured. Call `req.buffer(true or false)` or set `superagent.buffer[mime] = true or false`" ); buffer = true; } } if (!parser) { if (responseType) { parser = exports.parse.image; // It's actually a generic Buffer buffer = true; } else if (multipart) { const form = new formidable.IncomingForm(); parser = form.parse.bind(form); buffer = true; } else if (isImageOrVideo(mime)) { parser = exports.parse.image; buffer = true; // For backwards-compatibility buffering default is ad-hoc MIME-dependent } else if (exports.parse[mime]) { parser = exports.parse[mime]; } else if (type === 'text') { parser = exports.parse.text; buffer = buffer !== false; // everyone wants their own white-labeled json } else if (isJSON(mime)) { parser = exports.parse['application/json']; buffer = buffer !== false; } else if (buffer) { parser = exports.parse.text; } else if (undefined === buffer) { parser = exports.parse.image; // It's actually a generic Buffer buffer = true; } } // by default only buffer text/*, json and messed up thing from hell if ((undefined === buffer && isText(mime)) || isJSON(mime)) { buffer = true; } this._resBuffered = buffer; let parserHandlesEnd = false; if (buffer) { // Protectiona against zip bombs and other nuisance let responseBytesLeft = this._maxResponseSize || 200000000; res.on('data', buf => { responseBytesLeft -= buf.byteLength || buf.length; if (responseBytesLeft < 0) { // This will propagate through error event const err = new Error('Maximum response size reached'); err.code = 'ETOOLARGE'; // Parsers aren't required to observe error event, // so would incorrectly report success parserHandlesEnd = false; // Will emit error event res.destroy(err); } }); } if (parser) { try { // Unbuffered parsers are supposed to emit response early, // which is weird BTW, because response.body won't be there. parserHandlesEnd = buffer; parser(res, (err, obj, files) => { if (this.timedout) { // Timeout has already handled all callbacks return; } // Intentional (non-timeout) abort is supposed to preserve partial response, // even if it doesn't parse. if (err && !this._aborted) { return this.callback(err); } if (parserHandlesEnd) { this.emit('end'); this.callback(null, this._emitResponse(obj, files)); } }); } catch (err) { this.callback(err); return; } } this.res = res; // unbuffered if (!buffer) { debug('unbuffered %s %s', this.method, this.url); this.callback(null, this._emitResponse()); if (multipart) return; // allow multipart to handle end event res.once('end', () => { debug('end %s %s', this.method, this.url); this.emit('end'); }); return; } // terminating events res.once('error', err => { parserHandlesEnd = false; this.callback(err, null); }); if (!parserHandlesEnd) res.once('end', () => { debug('end %s %s', this.method, this.url); // TODO: unless buffering emit earlier to stream this.emit('end'); this.callback(null, this._emitResponse()); }); }); this.emit('request', this); const getProgressMonitor = () => { const lengthComputable = true; const total = req.getHeader('Content-Length'); let loaded = 0; const progress = new Stream.Transform(); progress._transform = (chunk, encoding, cb) => { loaded += chunk.length; this.emit('progress', { direction: 'upload', lengthComputable, loaded, total }); cb(null, chunk); }; return progress; }; const bufferToChunks = buffer => { const chunkSize = 16 * 1024; // default highWaterMark value const chunking = new Stream.Readable(); const totalLength = buffer.length; const remainder = totalLength % chunkSize; const cutoff = totalLength - remainder; for (let i = 0; i < cutoff; i += chunkSize) { const chunk = buffer.slice(i, i + chunkSize); chunking.push(chunk); } if (remainder > 0) { const remainderBuffer = buffer.slice(-remainder); chunking.push(remainderBuffer); } chunking.push(null); // no more data return chunking; }; // if a FormData instance got created, then we send that as the request body const formData = this._formData; if (formData) { // set headers const headers = formData.getHeaders(); for (const i in headers) { if (Object.prototype.hasOwnProperty.call(headers, i)) { debug('setting FormData header: "%s: %s"', i, headers[i]); req.setHeader(i, headers[i]); } } // attempt to get "Content-Length" header // eslint-disable-next-line handle-callback-err formData.getLength((err, length) => { // TODO: Add chunked encoding when no length (if err) debug('got FormData Content-Length: %s', length); if (typeof length === 'number') { req.setHeader('Content-Length', length); } formData.pipe(getProgressMonitor()).pipe(req); }); } else if (Buffer.isBuffer(data)) { bufferToChunks(data) .pipe(getProgressMonitor()) .pipe(req); } else { req.end(data); } }; // Check whether response has a non-0-sized gzip-encoded body Request.prototype._shouldUnzip = res => { if (res.statusCode === 204 || res.statusCode === 304) { // These aren't supposed to have any body return false; } // header content is a string, and distinction between 0 and no information is crucial if (res.headers['content-length'] === '0') { // We know that the body is empty (unfortunately, this check does not cover chunked encoding) return false; } // console.log(res); return /^\s*(?:deflate|gzip)\s*$/.test(res.headers['content-encoding']); }; /** * Overrides DNS for selected hostnames. Takes object mapping hostnames to IP addresses. * * When making a request to a URL with a hostname exactly matching a key in the object, * use the given IP address to connect, instead of using DNS to resolve the hostname. * * A special host `*` matches every hostname (keep redirects in mind!) * * request.connect({ * 'test.example.com': '127.0.0.1', * 'ipv6.example.com': '::1', * }) */ Request.prototype.connect = function(connectOverride) { if (typeof connectOverride === 'string') { this._connectOverride = { '*': connectOverride }; } else if (typeof connectOverride === 'object') { this._connectOverride = connectOverride; } else { this._connectOverride = undefined; } return this; }; Request.prototype.trustLocalhost = function(toggle) { this._trustLocalhost = toggle === undefined ? true : toggle; return this; }; // generate HTTP verb methods if (!methods.includes('del')) { // create a copy so we don't cause conflicts with // other packages using the methods package and // npm 3.x methods = methods.slice(0); methods.push('del'); } methods.forEach(method => { const name = method; method = method === 'del' ? 'delete' : method; method = method.toUpperCase(); request[name] = (url, data, fn) => { const req = request(method, url); if (typeof data === 'function') { fn = data; data = null; } if (data) { if (method === 'GET' || method === 'HEAD') { req.query(data); } else { req.send(data); } } if (fn) req.end(fn); return req; }; }); /** * Check if `mime` is text and should be buffered. * * @param {String} mime * @return {Boolean} * @api public */ function isText(mime) { const parts = mime.split('/'); const type = parts[0]; const subtype = parts[1]; return type === 'text' || subtype === 'x-www-form-urlencoded'; } function isImageOrVideo(mime) { const type = mime.split('/')[0]; return type === 'image' || type === 'video'; } /** * Check if `mime` is json or has +json structured syntax suffix. * * @param {String} mime * @return {Boolean} * @api private */ function isJSON(mime) { // should match /json or +json // but not /json-seq return /[/+]json($|[^-\w])/.test(mime); } /** * Check if we should follow the redirect `code`. * * @param {Number} code * @return {Boolean} * @api private */ function isRedirect(code) { return [301, 302, 303, 305, 307, 308].includes(code); } superagent-5.2.2/src/node/parsers/000077500000000000000000000000001362257374000171015ustar00rootroot00000000000000superagent-5.2.2/src/node/parsers/image.js000066400000000000000000000003241362257374000205200ustar00rootroot00000000000000module.exports = (res, fn) => { const data = []; // Binary data needs binary storage res.on('data', chunk => { data.push(chunk); }); res.on('end', () => { fn(null, Buffer.concat(data)); }); }; superagent-5.2.2/src/node/parsers/index.js000066400000000000000000000004531362257374000205500ustar00rootroot00000000000000exports['application/x-www-form-urlencoded'] = require('./urlencoded'); exports['application/json'] = require('./json'); exports.text = require('./text'); const binary = require('./image'); exports['application/octet-stream'] = binary; exports['application/pdf'] = binary; exports.image = binary; superagent-5.2.2/src/node/parsers/json.js000066400000000000000000000010741362257374000204120ustar00rootroot00000000000000module.exports = function(res, fn) { res.text = ''; res.setEncoding('utf8'); res.on('data', chunk => { res.text += chunk; }); res.on('end', () => { let body; let err; try { body = res.text && JSON.parse(res.text); } catch (err_) { err = err_; // issue #675: return the raw response if the response parsing fails err.rawResponse = res.text || null; // issue #876: return the http status code if the response parsing fails err.statusCode = res.statusCode; } finally { fn(err, body); } }); }; superagent-5.2.2/src/node/parsers/text.js000066400000000000000000000002351362257374000204230ustar00rootroot00000000000000module.exports = (res, fn) => { res.text = ''; res.setEncoding('utf8'); res.on('data', chunk => { res.text += chunk; }); res.on('end', fn); }; superagent-5.2.2/src/node/parsers/urlencoded.js000066400000000000000000000004721362257374000215660ustar00rootroot00000000000000/** * Module dependencies. */ const qs = require('qs'); module.exports = (res, fn) => { res.text = ''; res.setEncoding('ascii'); res.on('data', chunk => { res.text += chunk; }); res.on('end', () => { try { fn(null, qs.parse(res.text)); } catch (err) { fn(err); } }); }; superagent-5.2.2/src/node/response.js000066400000000000000000000045371362257374000176270ustar00rootroot00000000000000/** * Module dependencies. */ const util = require('util'); const Stream = require('stream'); const ResponseBase = require('../response-base'); /** * Expose `Response`. */ module.exports = Response; /** * Initialize a new `Response` with the given `xhr`. * * - set flags (.ok, .error, etc) * - parse header * * @param {Request} req * @param {Object} options * @constructor * @extends {Stream} * @implements {ReadableStream} * @api private */ function Response(req) { Stream.call(this); this.res = req.res; const { res } = this; this.request = req; this.req = req.req; this.text = res.text; this.body = res.body === undefined ? {} : res.body; this.files = res.files || {}; this.buffered = req._resBuffered; this.headers = res.headers; this.header = this.headers; this._setStatusProperties(res.statusCode); this._setHeaderProperties(this.header); this.setEncoding = res.setEncoding.bind(res); res.on('data', this.emit.bind(this, 'data')); res.on('end', this.emit.bind(this, 'end')); res.on('close', this.emit.bind(this, 'close')); res.on('error', this.emit.bind(this, 'error')); } /** * Inherit from `Stream`. */ util.inherits(Response, Stream); // eslint-disable-next-line new-cap ResponseBase(Response.prototype); /** * Implements methods of a `ReadableStream` */ Response.prototype.destroy = function(err) { this.res.destroy(err); }; /** * Pause. */ Response.prototype.pause = function() { this.res.pause(); }; /** * Resume. */ Response.prototype.resume = function() { this.res.resume(); }; /** * Return an `Error` representative of this response. * * @return {Error} * @api public */ Response.prototype.toError = function() { const { req } = this; const { method } = req; const { path } = req; const msg = `cannot ${method} ${path} (${this.status})`; const err = new Error(msg); err.status = this.status; err.text = this.text; err.method = method; err.path = path; return err; }; Response.prototype.setStatusProperties = function(status) { console.warn('In superagent 2.x setStatusProperties is a private method'); return this._setStatusProperties(status); }; /** * To json. * * @return {Object} * @api public */ Response.prototype.toJSON = function() { return { req: this.request.toJSON(), header: this.header, status: this.status, text: this.text }; }; superagent-5.2.2/src/node/unzip.js000066400000000000000000000027601362257374000171320ustar00rootroot00000000000000/** * Module dependencies. */ const { StringDecoder } = require('string_decoder'); const Stream = require('stream'); const zlib = require('zlib'); /** * Buffers response data events and re-emits when they're unzipped. * * @param {Request} req * @param {Response} res * @api private */ exports.unzip = (req, res) => { const unzip = zlib.createUnzip(); const stream = new Stream(); let decoder; // make node responseOnEnd() happy stream.req = req; unzip.on('error', err => { if (err && err.code === 'Z_BUF_ERROR') { // unexpected end of file is ignored by browsers and curl stream.emit('end'); return; } stream.emit('error', err); }); // pipe to unzip res.pipe(unzip); // override `setEncoding` to capture encoding res.setEncoding = type => { decoder = new StringDecoder(type); }; // decode upon decompressing with captured encoding unzip.on('data', buf => { if (decoder) { const str = decoder.write(buf); if (str.length > 0) stream.emit('data', str); } else { stream.emit('data', buf); } }); unzip.on('end', () => { stream.emit('end'); }); // override `on` to capture data listeners const _on = res.on; res.on = function(type, fn) { if (type === 'data' || type === 'end') { stream.on(type, fn.bind(res)); } else if (type === 'error') { stream.on(type, fn.bind(res)); _on.call(res, type, fn); } else { _on.call(res, type, fn); } return this; }; }; superagent-5.2.2/src/request-base.js000066400000000000000000000412211362257374000174330ustar00rootroot00000000000000/** * Module of mixed-in functions shared between node and client code */ const isObject = require('./is-object'); /** * Expose `RequestBase`. */ module.exports = RequestBase; /** * Initialize a new `RequestBase`. * * @api public */ function RequestBase(obj) { if (obj) return mixin(obj); } /** * Mixin the prototype properties. * * @param {Object} obj * @return {Object} * @api private */ function mixin(obj) { for (const key in RequestBase.prototype) { if (Object.prototype.hasOwnProperty.call(RequestBase.prototype, key)) obj[key] = RequestBase.prototype[key]; } return obj; } /** * Clear previous timeout. * * @return {Request} for chaining * @api public */ RequestBase.prototype.clearTimeout = function() { clearTimeout(this._timer); clearTimeout(this._responseTimeoutTimer); clearTimeout(this._uploadTimeoutTimer); delete this._timer; delete this._responseTimeoutTimer; delete this._uploadTimeoutTimer; return this; }; /** * Override default response body parser * * This function will be called to convert incoming data into request.body * * @param {Function} * @api public */ RequestBase.prototype.parse = function(fn) { this._parser = fn; return this; }; /** * Set format of binary response body. * In browser valid formats are 'blob' and 'arraybuffer', * which return Blob and ArrayBuffer, respectively. * * In Node all values result in Buffer. * * Examples: * * req.get('/') * .responseType('blob') * .end(callback); * * @param {String} val * @return {Request} for chaining * @api public */ RequestBase.prototype.responseType = function(val) { this._responseType = val; return this; }; /** * Override default request body serializer * * This function will be called to convert data set via .send or .attach into payload to send * * @param {Function} * @api public */ RequestBase.prototype.serialize = function(fn) { this._serializer = fn; return this; }; /** * Set timeouts. * * - response timeout is time between sending request and receiving the first byte of the response. Includes DNS and connection time. * - deadline is the time from start of the request to receiving response body in full. If the deadline is too short large files may not load at all on slow connections. * - upload is the time since last bit of data was sent or received. This timeout works only if deadline timeout is off * * Value of 0 or false means no timeout. * * @param {Number|Object} ms or {response, deadline} * @return {Request} for chaining * @api public */ RequestBase.prototype.timeout = function(options) { if (!options || typeof options !== 'object') { this._timeout = options; this._responseTimeout = 0; this._uploadTimeout = 0; return this; } for (const option in options) { if (Object.prototype.hasOwnProperty.call(options, option)) { switch (option) { case 'deadline': this._timeout = options.deadline; break; case 'response': this._responseTimeout = options.response; break; case 'upload': this._uploadTimeout = options.upload; break; default: console.warn('Unknown timeout option', option); } } } return this; }; /** * Set number of retry attempts on error. * * Failed requests will be retried 'count' times if timeout or err.code >= 500. * * @param {Number} count * @param {Function} [fn] * @return {Request} for chaining * @api public */ RequestBase.prototype.retry = function(count, fn) { // Default to 1 if no count passed or true if (arguments.length === 0 || count === true) count = 1; if (count <= 0) count = 0; this._maxRetries = count; this._retries = 0; this._retryCallback = fn; return this; }; const ERROR_CODES = ['ECONNRESET', 'ETIMEDOUT', 'EADDRINFO', 'ESOCKETTIMEDOUT']; /** * Determine if a request should be retried. * (Borrowed from segmentio/superagent-retry) * * @param {Error} err an error * @param {Response} [res] response * @returns {Boolean} if segment should be retried */ RequestBase.prototype._shouldRetry = function(err, res) { if (!this._maxRetries || this._retries++ >= this._maxRetries) { return false; } if (this._retryCallback) { try { const override = this._retryCallback(err, res); if (override === true) return true; if (override === false) return false; // undefined falls back to defaults } catch (err_) { console.error(err_); } } if (res && res.status && res.status >= 500 && res.status !== 501) return true; if (err) { if (err.code && ERROR_CODES.includes(err.code)) return true; // Superagent timeout if (err.timeout && err.code === 'ECONNABORTED') return true; if (err.crossDomain) return true; } return false; }; /** * Retry request * * @return {Request} for chaining * @api private */ RequestBase.prototype._retry = function() { this.clearTimeout(); // node if (this.req) { this.req = null; this.req = this.request(); } this._aborted = false; this.timedout = false; this.timedoutError = null; return this._end(); }; /** * Promise support * * @param {Function} resolve * @param {Function} [reject] * @return {Request} */ RequestBase.prototype.then = function(resolve, reject) { if (!this._fullfilledPromise) { const self = this; if (this._endCalled) { console.warn( 'Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises' ); } this._fullfilledPromise = new Promise((resolve, reject) => { self.on('abort', () => { if (this.timedout && this.timedoutError) { reject(this.timedoutError); return; } const err = new Error('Aborted'); err.code = 'ABORTED'; err.status = this.status; err.method = this.method; err.url = this.url; reject(err); }); self.end((err, res) => { if (err) reject(err); else resolve(res); }); }); } return this._fullfilledPromise.then(resolve, reject); }; RequestBase.prototype.catch = function(cb) { return this.then(undefined, cb); }; /** * Allow for extension */ RequestBase.prototype.use = function(fn) { fn(this); return this; }; RequestBase.prototype.ok = function(cb) { if (typeof cb !== 'function') throw new Error('Callback required'); this._okCallback = cb; return this; }; RequestBase.prototype._isResponseOK = function(res) { if (!res) { return false; } if (this._okCallback) { return this._okCallback(res); } return res.status >= 200 && res.status < 300; }; /** * Get request header `field`. * Case-insensitive. * * @param {String} field * @return {String} * @api public */ RequestBase.prototype.get = function(field) { return this._header[field.toLowerCase()]; }; /** * Get case-insensitive header `field` value. * This is a deprecated internal API. Use `.get(field)` instead. * * (getHeader is no longer used internally by the superagent code base) * * @param {String} field * @return {String} * @api private * @deprecated */ RequestBase.prototype.getHeader = RequestBase.prototype.get; /** * Set header `field` to `val`, or multiple fields with one object. * Case-insensitive. * * Examples: * * req.get('/') * .set('Accept', 'application/json') * .set('X-API-Key', 'foobar') * .end(callback); * * req.get('/') * .set({ Accept: 'application/json', 'X-API-Key': 'foobar' }) * .end(callback); * * @param {String|Object} field * @param {String} val * @return {Request} for chaining * @api public */ RequestBase.prototype.set = function(field, val) { if (isObject(field)) { for (const key in field) { if (Object.prototype.hasOwnProperty.call(field, key)) this.set(key, field[key]); } return this; } this._header[field.toLowerCase()] = val; this.header[field] = val; return this; }; /** * Remove header `field`. * Case-insensitive. * * Example: * * req.get('/') * .unset('User-Agent') * .end(callback); * * @param {String} field field name */ RequestBase.prototype.unset = function(field) { delete this._header[field.toLowerCase()]; delete this.header[field]; return this; }; /** * Write the field `name` and `val`, or multiple fields with one object * for "multipart/form-data" request bodies. * * ``` js * request.post('/upload') * .field('foo', 'bar') * .end(callback); * * request.post('/upload') * .field({ foo: 'bar', baz: 'qux' }) * .end(callback); * ``` * * @param {String|Object} name name of field * @param {String|Blob|File|Buffer|fs.ReadStream} val value of field * @return {Request} for chaining * @api public */ RequestBase.prototype.field = function(name, val) { // name should be either a string or an object. if (name === null || undefined === name) { throw new Error('.field(name, val) name can not be empty'); } if (this._data) { throw new Error( ".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()" ); } if (isObject(name)) { for (const key in name) { if (Object.prototype.hasOwnProperty.call(name, key)) this.field(key, name[key]); } return this; } if (Array.isArray(val)) { for (const i in val) { if (Object.prototype.hasOwnProperty.call(val, i)) this.field(name, val[i]); } return this; } // val should be defined now if (val === null || undefined === val) { throw new Error('.field(name, val) val can not be empty'); } if (typeof val === 'boolean') { val = String(val); } this._getFormData().append(name, val); return this; }; /** * Abort the request, and clear potential timeout. * * @return {Request} request * @api public */ RequestBase.prototype.abort = function() { if (this._aborted) { return this; } this._aborted = true; if (this.xhr) this.xhr.abort(); // browser if (this.req) this.req.abort(); // node this.clearTimeout(); this.emit('abort'); return this; }; RequestBase.prototype._auth = function(user, pass, options, base64Encoder) { switch (options.type) { case 'basic': this.set('Authorization', `Basic ${base64Encoder(`${user}:${pass}`)}`); break; case 'auto': this.username = user; this.password = pass; break; case 'bearer': // usage would be .auth(accessToken, { type: 'bearer' }) this.set('Authorization', `Bearer ${user}`); break; default: break; } return this; }; /** * Enable transmission of cookies with x-domain requests. * * Note that for this to work the origin must not be * using "Access-Control-Allow-Origin" with a wildcard, * and also must set "Access-Control-Allow-Credentials" * to "true". * * @api public */ RequestBase.prototype.withCredentials = function(on) { // This is browser-only functionality. Node side is no-op. if (on === undefined) on = true; this._withCredentials = on; return this; }; /** * Set the max redirects to `n`. Does nothing in browser XHR implementation. * * @param {Number} n * @return {Request} for chaining * @api public */ RequestBase.prototype.redirects = function(n) { this._maxRedirects = n; return this; }; /** * Maximum size of buffered response body, in bytes. Counts uncompressed size. * Default 200MB. * * @param {Number} n number of bytes * @return {Request} for chaining */ RequestBase.prototype.maxResponseSize = function(n) { if (typeof n !== 'number') { throw new TypeError('Invalid argument'); } this._maxResponseSize = n; return this; }; /** * Convert to a plain javascript object (not JSON string) of scalar properties. * Note as this method is designed to return a useful non-this value, * it cannot be chained. * * @return {Object} describing method, url, and data of this request * @api public */ RequestBase.prototype.toJSON = function() { return { method: this.method, url: this.url, data: this._data, headers: this._header }; }; /** * Send `data` as the request body, defaulting the `.type()` to "json" when * an object is given. * * Examples: * * // manual json * request.post('/user') * .type('json') * .send('{"name":"tj"}') * .end(callback) * * // auto json * request.post('/user') * .send({ name: 'tj' }) * .end(callback) * * // manual x-www-form-urlencoded * request.post('/user') * .type('form') * .send('name=tj') * .end(callback) * * // auto x-www-form-urlencoded * request.post('/user') * .type('form') * .send({ name: 'tj' }) * .end(callback) * * // defaults to x-www-form-urlencoded * request.post('/user') * .send('name=tobi') * .send('species=ferret') * .end(callback) * * @param {String|Object} data * @return {Request} for chaining * @api public */ // eslint-disable-next-line complexity RequestBase.prototype.send = function(data) { const isObj = isObject(data); let type = this._header['content-type']; if (this._formData) { throw new Error( ".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()" ); } if (isObj && !this._data) { if (Array.isArray(data)) { this._data = []; } else if (!this._isHost(data)) { this._data = {}; } } else if (data && this._data && this._isHost(this._data)) { throw new Error("Can't merge these send calls"); } // merge if (isObj && isObject(this._data)) { for (const key in data) { if (Object.prototype.hasOwnProperty.call(data, key)) this._data[key] = data[key]; } } else if (typeof data === 'string') { // default to x-www-form-urlencoded if (!type) this.type('form'); type = this._header['content-type']; if (type === 'application/x-www-form-urlencoded') { this._data = this._data ? `${this._data}&${data}` : data; } else { this._data = (this._data || '') + data; } } else { this._data = data; } if (!isObj || this._isHost(data)) { return this; } // default to json if (!type) this.type('json'); return this; }; /** * Sort `querystring` by the sort function * * * Examples: * * // default order * request.get('/user') * .query('name=Nick') * .query('search=Manny') * .sortQuery() * .end(callback) * * // customized sort function * request.get('/user') * .query('name=Nick') * .query('search=Manny') * .sortQuery(function(a, b){ * return a.length - b.length; * }) * .end(callback) * * * @param {Function} sort * @return {Request} for chaining * @api public */ RequestBase.prototype.sortQuery = function(sort) { // _sort default to true but otherwise can be a function or boolean this._sort = typeof sort === 'undefined' ? true : sort; return this; }; /** * Compose querystring to append to req.url * * @api private */ RequestBase.prototype._finalizeQueryString = function() { const query = this._query.join('&'); if (query) { this.url += (this.url.includes('?') ? '&' : '?') + query; } this._query.length = 0; // Makes the call idempotent if (this._sort) { const index = this.url.indexOf('?'); if (index >= 0) { const queryArr = this.url.slice(index + 1).split('&'); if (typeof this._sort === 'function') { queryArr.sort(this._sort); } else { queryArr.sort(); } this.url = this.url.slice(0, index) + '?' + queryArr.join('&'); } } }; // For backwards compat only RequestBase.prototype._appendQueryString = () => { console.warn('Unsupported'); }; /** * Invoke callback with timeout error. * * @api private */ RequestBase.prototype._timeoutError = function(reason, timeout, errno) { if (this._aborted) { return; } const err = new Error(`${reason + timeout}ms exceeded`); err.timeout = timeout; err.code = 'ECONNABORTED'; err.errno = errno; this.timedout = true; this.timedoutError = err; this.abort(); this.callback(err); }; RequestBase.prototype._setTimeouts = function() { const self = this; // deadline if (this._timeout && !this._timer) { this._timer = setTimeout(() => { self._timeoutError('Timeout of ', self._timeout, 'ETIME'); }, this._timeout); } // response timeout if (this._responseTimeout && !this._responseTimeoutTimer) { this._responseTimeoutTimer = setTimeout(() => { self._timeoutError( 'Response timeout of ', self._responseTimeout, 'ETIMEDOUT' ); }, this._responseTimeout); } }; superagent-5.2.2/src/response-base.js000066400000000000000000000056001362257374000176020ustar00rootroot00000000000000/** * Module dependencies. */ const utils = require('./utils'); /** * Expose `ResponseBase`. */ module.exports = ResponseBase; /** * Initialize a new `ResponseBase`. * * @api public */ function ResponseBase(obj) { if (obj) return mixin(obj); } /** * Mixin the prototype properties. * * @param {Object} obj * @return {Object} * @api private */ function mixin(obj) { for (const key in ResponseBase.prototype) { if (Object.prototype.hasOwnProperty.call(ResponseBase.prototype, key)) obj[key] = ResponseBase.prototype[key]; } return obj; } /** * Get case-insensitive `field` value. * * @param {String} field * @return {String} * @api public */ ResponseBase.prototype.get = function(field) { return this.header[field.toLowerCase()]; }; /** * Set header related properties: * * - `.type` the content type without params * * A response of "Content-Type: text/plain; charset=utf-8" * will provide you with a `.type` of "text/plain". * * @param {Object} header * @api private */ ResponseBase.prototype._setHeaderProperties = function(header) { // TODO: moar! // TODO: make this a util // content-type const ct = header['content-type'] || ''; this.type = utils.type(ct); // params const params = utils.params(ct); for (const key in params) { if (Object.prototype.hasOwnProperty.call(params, key)) this[key] = params[key]; } this.links = {}; // links try { if (header.link) { this.links = utils.parseLinks(header.link); } } catch { // ignore } }; /** * Set flags such as `.ok` based on `status`. * * For example a 2xx response will give you a `.ok` of __true__ * whereas 5xx will be __false__ and `.error` will be __true__. The * `.clientError` and `.serverError` are also available to be more * specific, and `.statusType` is the class of error ranging from 1..5 * sometimes useful for mapping respond colors etc. * * "sugar" properties are also defined for common cases. Currently providing: * * - .noContent * - .badRequest * - .unauthorized * - .notAcceptable * - .notFound * * @param {Number} status * @api private */ ResponseBase.prototype._setStatusProperties = function(status) { const type = (status / 100) | 0; // status / class this.statusCode = status; this.status = this.statusCode; this.statusType = type; // basics this.info = type === 1; this.ok = type === 2; this.redirect = type === 3; this.clientError = type === 4; this.serverError = type === 5; this.error = type === 4 || type === 5 ? this.toError() : false; // sugar this.created = status === 201; this.accepted = status === 202; this.noContent = status === 204; this.badRequest = status === 400; this.unauthorized = status === 401; this.notAcceptable = status === 406; this.forbidden = status === 403; this.notFound = status === 404; this.unprocessableEntity = status === 422; }; superagent-5.2.2/src/utils.js000066400000000000000000000024061362257374000161750ustar00rootroot00000000000000/** * Return the mime type for the given `str`. * * @param {String} str * @return {String} * @api private */ exports.type = str => str.split(/ *; */).shift(); /** * Return header field parameters. * * @param {String} str * @return {Object} * @api private */ exports.params = str => str.split(/ *; */).reduce((obj, str) => { const parts = str.split(/ *= */); const key = parts.shift(); const val = parts.shift(); if (key && val) obj[key] = val; return obj; }, {}); /** * Parse Link header fields. * * @param {String} str * @return {Object} * @api private */ exports.parseLinks = str => str.split(/ *, */).reduce((obj, str) => { const parts = str.split(/ *; */); const url = parts[0].slice(1, -1); const rel = parts[1].split(/ *= */)[1].slice(1, -1); obj[rel] = url; return obj; }, {}); /** * Strip content related fields from `header`. * * @param {Object} header * @return {Object} header * @api private */ exports.cleanHeader = (header, changesOrigin) => { delete header['content-type']; delete header['content-length']; delete header['transfer-encoding']; delete header.host; // secuirty if (changesOrigin) { delete header.authorization; delete header.cookie; } return header; }; superagent-5.2.2/test/000077500000000000000000000000001362257374000146655ustar00rootroot00000000000000superagent-5.2.2/test/agent-base.js000066400000000000000000000021261362257374000172320ustar00rootroot00000000000000const setup = require('./support/setup'); const base = setup.uri; const assert = require('assert'); const request = require('./support/client'); describe('Agent', () => { it('should remember defaults', () => { if (typeof Promise === 'undefined') { return; } let called = 0; let event_called = 0; const agent = request .agent() .accept('json') .use(() => { called++; }) .once('request', () => { event_called++; }) .query({ hello: 'world' }) .set('X-test', 'testing'); assert.equal(0, called); assert.equal(0, event_called); return agent .get(`${base}/echo`) .then(res => { assert.equal(1, called); assert.equal(1, event_called); assert.equal('application/json', res.headers.accept); assert.equal('testing', res.headers['x-test']); return agent.get(`${base}/querystring`); }) .then(res => { assert.equal(2, called); assert.equal(2, event_called); assert.deepEqual({ hello: 'world' }, res.body); }); }); }); superagent-5.2.2/test/basic.js000066400000000000000000000432671362257374000163200ustar00rootroot00000000000000const setup = require('./support/setup'); const { NODE } = setup; const { uri } = setup; const assert = require('assert'); const request = require('./support/client'); describe('request', function() { this.timeout(20000); describe('res.statusCode', () => { it('should set statusCode', done => { request.get(`${uri}/login`, (err, res) => { try { assert.strictEqual(res.statusCode, 200); done(); } catch (err_) { done(err_); } }); }); }); describe('should allow the send shorthand', () => { it('with callback in the method call', done => { request.get(`${uri}/login`, (err, res) => { assert.equal(res.status, 200); done(); }); }); it('with data in the method call', done => { request.post(`${uri}/echo`, { foo: 'bar' }).end((err, res) => { assert.equal('{"foo":"bar"}', res.text); done(); }); }); it('with callback and data in the method call', done => { request.post(`${uri}/echo`, { foo: 'bar' }, (err, res) => { assert.equal('{"foo":"bar"}', res.text); done(); }); }); }); describe('with a callback', () => { it('should invoke .end()', done => { request.get(`${uri}/login`, (err, res) => { try { assert.equal(res.status, 200); done(); } catch (err_) { done(err_); } }); }); }); describe('.end()', () => { it('should issue a request', done => { request.get(`${uri}/login`).end((err, res) => { try { assert.equal(res.status, 200); done(); } catch (err_) { done(err_); } }); }); it('is optional with a promise', () => { if (typeof Promise === 'undefined') { return; } return request .get(`${uri}/login`) .then(res => res.status) .then() .then(status => { assert.equal(200, status, 'Real promises pass results through'); }); }); it('called only once with a promise', () => { if (typeof Promise === 'undefined') { return; } const req = request.get(`${uri}/unique`); return Promise.all([req, req, req]).then(results => { results.forEach(item => { assert.equal( item.body, results[0].body, 'It should keep returning the same result after being called once' ); }); }); }); }); describe('res.error', () => { it('ok', done => { let calledErrorEvent = false; let calledOKHandler = false; request .get(`${uri}/error`) .ok(res => { assert.strictEqual(500, res.status); calledOKHandler = true; return true; }) .on('error', err => { calledErrorEvent = true; }) .end((err, res) => { try { assert.ifError(err); assert.strictEqual(res.status, 500); assert(!calledErrorEvent); assert(calledOKHandler); done(); } catch (err_) { done(err_); } }); }); it('should should be an Error object', done => { let calledErrorEvent = false; request .get(`${uri}/error`) .on('error', err => { assert.strictEqual(err.status, 500); calledErrorEvent = true; }) .end((err, res) => { try { if (NODE) { res.error.message.should.equal('cannot GET /error (500)'); } else { res.error.message.should.equal(`cannot GET ${uri}/error (500)`); } assert.strictEqual(res.error.status, 500); assert(err, 'should have an error for 500'); assert.equal(err.message, 'Internal Server Error'); assert(calledErrorEvent); done(); } catch (err_) { done(err_); } }); }); it('with .then() promise', () => { if (typeof Promise === 'undefined') { return; } return request.get(`${uri}/error`).then( () => { assert.fail(); }, err => { assert.equal(err.message, 'Internal Server Error'); } ); }); it('with .ok() returning false', () => { if (typeof Promise === 'undefined') { return; } return request .get(`${uri}/echo`) .ok(() => false) .then( () => { assert.fail(); }, err => { assert.equal(200, err.response.status); assert.equal(err.message, 'OK'); } ); }); it('with .ok() throwing an Error', () => { if (typeof Promise === 'undefined') { return; } return request .get(`${uri}/echo`) .ok(() => { throw new Error('boom'); }) .then( () => { assert.fail(); }, err => { assert.equal(200, err.response.status); assert.equal(err.message, 'boom'); } ); }); }); describe('res.header', () => { it('should be an object', done => { request.get(`${uri}/login`).end((err, res) => { try { assert.equal('Express', res.header['x-powered-by']); done(); } catch (err_) { done(err_); } }); }); }); describe('set headers', () => { before(() => { Object.prototype.invalid = 'invalid'; }); after(() => { delete Object.prototype.invalid; }); it('should only set headers for ownProperties of header', done => { try { request .get(`${uri}/echo-headers`) .set('valid', 'ok') .end((err, res) => { if ( !err && res.body && res.body.valid && !res.body.hasOwnProperty('invalid') ) { return done(); } done(err || new Error('fail')); }); } catch (err) { done(err); } }); }); describe('res.charset', () => { it('should be set when present', done => { request.get(`${uri}/login`).end((err, res) => { try { res.charset.should.equal('utf-8'); done(); } catch (err_) { done(err_); } }); }); }); describe('res.statusType', () => { it('should provide the first digit', done => { request.get(`${uri}/login`).end((err, res) => { try { assert(!err, 'should not have an error for success responses'); assert.equal(200, res.status); assert.equal(2, res.statusType); done(); } catch (err_) { done(err_); } }); }); }); describe('res.type', () => { it('should provide the mime-type void of params', done => { request.get(`${uri}/login`).end((err, res) => { try { res.type.should.equal('text/html'); res.charset.should.equal('utf-8'); done(); } catch (err_) { done(err_); } }); }); }); describe('req.set(field, val)', () => { it('should set the header field', done => { request .post(`${uri}/echo`) .set('X-Foo', 'bar') .set('X-Bar', 'baz') .end((err, res) => { try { assert.equal('bar', res.header['x-foo']); assert.equal('baz', res.header['x-bar']); done(); } catch (err_) { done(err_); } }); }); }); describe('req.set(obj)', () => { it('should set the header fields', done => { request .post(`${uri}/echo`) .set({ 'X-Foo': 'bar', 'X-Bar': 'baz' }) .end((err, res) => { try { assert.equal('bar', res.header['x-foo']); assert.equal('baz', res.header['x-bar']); done(); } catch (err_) { done(err_); } }); }); }); describe('req.type(str)', () => { it('should set the Content-Type', done => { request .post(`${uri}/echo`) .type('text/x-foo') .end((err, res) => { try { res.header['content-type'].should.equal('text/x-foo'); done(); } catch (err_) { done(err_); } }); }); it('should map "json"', done => { request .post(`${uri}/echo`) .type('json') .send('{"a": 1}') .end((err, res) => { try { res.should.be.json(); done(); } catch (err_) { done(err_); } }); }); it('should map "html"', done => { request .post(`${uri}/echo`) .type('html') .end((err, res) => { try { res.header['content-type'].should.equal('text/html'); done(); } catch (err_) { done(err_); } }); }); }); describe('req.accept(str)', () => { it('should set Accept', done => { request .get(`${uri}/echo`) .accept('text/x-foo') .end((err, res) => { try { res.header.accept.should.equal('text/x-foo'); done(); } catch (err_) { done(err_); } }); }); it('should map "json"', done => { request .get(`${uri}/echo`) .accept('json') .end((err, res) => { try { res.header.accept.should.equal('application/json'); done(); } catch (err_) { done(err_); } }); }); it('should map "xml"', done => { request .get(`${uri}/echo`) .accept('xml') .end((err, res) => { try { // Mime module keeps changing this :( assert( res.header.accept == 'application/xml' || res.header.accept == 'text/xml' ); done(); } catch (err_) { done(err_); } }); }); it('should map "html"', done => { request .get(`${uri}/echo`) .accept('html') .end((err, res) => { try { res.header.accept.should.equal('text/html'); done(); } catch (err_) { done(err_); } }); }); }); describe('req.send(str)', () => { it('should write the string', done => { request .post(`${uri}/echo`) .type('json') .send('{"name":"tobi"}') .end((err, res) => { try { res.text.should.equal('{"name":"tobi"}'); done(); } catch (err_) { done(err_); } }); }); }); describe('req.send(Object)', () => { it('should default to json', done => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .end((err, res) => { try { res.should.be.json(); res.text.should.equal('{"name":"tobi"}'); done(); } catch (err_) { done(err_); } }); }); describe('when called several times', () => { it('should merge the objects', done => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .send({ age: 1 }) .end((err, res) => { try { res.should.be.json(); if (NODE) { res.buffered.should.be.true(); } res.text.should.equal('{"name":"tobi","age":1}'); done(); } catch (err_) { done(err_); } }); }); }); }); describe('.end(fn)', () => { it('should check arity', done => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .end((err, res) => { try { assert.ifError(err); res.text.should.equal('{"name":"tobi"}'); done(); } catch (err_) { done(err_); } }); }); it('should emit request', done => { const req = request.post(`${uri}/echo`); req.on('request', request => { assert.equal(req, request); done(); }); req.end(); }); it('should emit response', done => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .on('response', res => { res.text.should.equal('{"name":"tobi"}'); done(); }) .end(); }); }); describe('.then(fulfill, reject)', () => { it('should support successful fulfills with .then(fulfill)', done => { if (typeof Promise === 'undefined') { return done(); } request .post(`${uri}/echo`) .send({ name: 'tobi' }) .then(res => { res.type.should.equal('application/json'); res.text.should.equal('{"name":"tobi"}'); done(); }); }); it('should reject an error with .then(null, reject)', done => { if (typeof Promise === 'undefined') { return done(); } request.get(`${uri}/error`).then(null, err => { assert.equal(err.status, 500); assert.equal(err.response.text, 'boom'); done(); }); }); }); describe('.catch(reject)', () => { it('should reject an error with .catch(reject)', done => { if (typeof Promise === 'undefined') { return done(); } request.get(`${uri}/error`).catch(err => { assert.equal(err.status, 500); assert.equal(err.response.text, 'boom'); done(); }); }); }); describe('.abort()', () => { it('should abort the request', done => { const req = request.get(`${uri}/delay/3000`); req.end((err, res) => { try { assert(false, 'should not complete the request'); } catch (err_) { done(err_); } }); req.on('error', error => { done(error); }); req.on('abort', done); setTimeout(() => { req.abort(); }, 500); }); it('should abort the promise', () => { const req = request.get(`${uri}/delay/3000`); setTimeout(() => { req.abort(); }, 10); return req.then( () => { assert.fail('should not complete the request'); }, err => { assert.equal('ABORTED', err.code); } ); }); it('should allow chaining .abort() several times', done => { const req = request.get(`${uri}/delay/3000`); req.end((err, res) => { try { assert(false, 'should not complete the request'); } catch (err_) { done(err_); } }); // This also verifies only a single 'done' event is emitted req.on('abort', done); setTimeout(() => { req .abort() .abort() .abort(); }, 1000); }); it('should not allow abort then end', done => { request .get(`${uri}/delay/3000`) .abort() .end((err, res) => { done(err ? undefined : new Error('Expected abort error')); }); }); }); describe('req.toJSON()', () => { it('should describe the request', done => { const req = request.post(`${uri}/echo`).send({ foo: 'baz' }); req.end((err, res) => { try { const json = req.toJSON(); assert.equal('POST', json.method); assert(/\/echo$/.test(json.url)); assert.equal('baz', json.data.foo); done(); } catch (err_) { done(err_); } }); }); }); describe('req.options()', () => { it('should allow request body', done => { request .options(`${uri}/options/echo/body`) .send({ foo: 'baz' }) .end((err, res) => { try { assert.equal(err, null); assert.strictEqual(res.body.foo, 'baz'); done(); } catch (err_) { done(err_); } }); }); }); describe('req.sortQuery()', () => { it('nop with no querystring', done => { request .get(`${uri}/url`) .sortQuery() .end((err, res) => { try { assert.equal(res.text, '/url'); done(); } catch (err_) { done(err_); } }); }); it('should sort the request querystring', done => { request .get(`${uri}/url`) .query('search=Manny') .query('order=desc') .sortQuery() .end((err, res) => { try { assert.equal(res.text, '/url?order=desc&search=Manny'); done(); } catch (err_) { done(err_); } }); }); it('should allow disabling sorting', done => { request .get(`${uri}/url`) .query('search=Manny') .query('order=desc') .sortQuery() // take default of true .sortQuery(false) // override it in later call .end((err, res) => { try { assert.equal(res.text, '/url?search=Manny&order=desc'); done(); } catch (err_) { done(err_); } }); }); it('should sort the request querystring using customized function', done => { request .get(`${uri}/url`) .query('name=Nick') .query('search=Manny') .query('order=desc') .sortQuery((a, b) => a.length - b.length) .end((err, res) => { try { assert.equal(res.text, '/url?name=Nick&order=desc&search=Manny'); done(); } catch (err_) { done(err_); } }); }); }); }); superagent-5.2.2/test/client/000077500000000000000000000000001362257374000161435ustar00rootroot00000000000000superagent-5.2.2/test/client/request.js000066400000000000000000000200201362257374000201630ustar00rootroot00000000000000const assert = require('assert'); const request = require('../support/client'); describe('request', function() { this.timeout(20000); it('request() error object', next => { request('GET', '/error').end((err, res) => { assert(err); assert(res.error, 'response should be an error'); assert.equal(res.error.message, 'cannot GET /error (500)'); assert.equal(res.error.status, 500); assert.equal(res.error.method, 'GET'); assert.equal(res.error.url, '/error'); next(); }); }); // This test results in a weird Jetty error on IE9 and IE11 saying PATCH is not a supported method. Looks like something's up with SauceLabs const isIE11 = Boolean(navigator.userAgent.match(/Trident.*rv[ :]*11\./)); const isIE9OrOlder = !window.atob; if (!isIE9OrOlder && !isIE11) { // Don't run on IE9 or older, or IE11 it('patch()', next => { request.patch('/user/12').end((err, res) => { assert.equal('updated', res.text); next(); }); }); } it('POST native FormData', next => { if (!window.FormData) { // Skip test if FormData is not supported by browser return next(); } const data = new FormData(); data.append('foo', 'bar'); request .post('/echo') .send(data) .end((err, res) => { assert.equal('multipart/form-data', res.type); next(); }); }); it('defaults attached files to original file names', next => { if (!window.FormData) { // Skip test if FormData is are not supported by browser return next(); } try { var file = new File([''], 'image.jpg', { type: 'image/jpeg' }); } catch (err) { // Skip if file constructor not supported. return next(); } request .post('/echo') .attach('image', file) .end((err, res) => { const regx = new RegExp(`filename="${file.name}"`); assert.notEqual(res.text.match(regx), null); next(); }); }); it('attach() cannot be mixed with send()', () => { if (!window.FormData || !window.File) { // Skip test if FormData is are not supported by browser return; } assert.throws(() => { const file = new File([''], 'image.jpg', { type: 'image/jpeg' }); request .post('/echo') .attach('image', file) .send('hi'); }); assert.throws(() => { const file = new File([''], 'image.jpg', { type: 'image/jpeg' }); request .post('/echo') .send('hi') .attach('image', file); }); }); it('GET invalid json', next => { request.get('/invalid-json').end((err, res) => { assert(err.parse); assert.deepEqual( err.rawResponse, ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}" ); next(); }); }); it('GET querystring empty objects', next => { const req = request.get('/querystring').query({}); req.end((err, res) => { assert.deepEqual(req._query, []); assert.deepEqual(res.body, {}); next(); }); }); it('GET querystring object .get(uri, obj)', next => { request.get('/querystring', { search: 'Manny' }).end((err, res) => { assert.deepEqual(res.body, { search: 'Manny' }); next(); }); }); it('GET querystring object .get(uri, obj, fn)', next => { request.get('/querystring', { search: 'Manny' }, (err, res) => { assert.deepEqual(res.body, { search: 'Manny' }); next(); }); }); it('GET querystring object with null value', next => { request.get('/url', { nil: null }).end((err, res) => { assert.equal(res.text, '/url?nil'); next(); }); }); it('GET blob object', next => { if (typeof Blob === 'undefined') { return next(); } request .get('/blob', { foo: 'bar' }) .responseType('blob') .end((err, res) => { assert(res.xhr.response instanceof Blob); assert(res.body instanceof Blob); next(); }); }); it('Reject node-only function', () => { assert.throws(() => { request.get().write(); }); assert.throws(() => { request.get().pipe(); }); }); window.btoa = window.btoa || null; it('basic auth', next => { window.btoa = window.btoa || require('Base64').btoa; request .post('/auth') .auth('foo', 'bar') .end((err, res) => { assert.equal('foo', res.body.user); assert.equal('bar', res.body.pass); next(); }); }); it('auth type "basic"', next => { window.btoa = window.btoa || require('Base64').btoa; request .post('/auth') .auth('foo', 'bar', { type: 'basic' }) .end((err, res) => { assert.equal('foo', res.body.user); assert.equal('bar', res.body.pass); next(); }); }); it('auth type "auto"', next => { window.btoa = window.btoa || require('Base64').btoa; request .post('/auth') .auth('foo', 'bar', { type: 'auto' }) .end((err, res) => { assert.equal('foo', res.body.user); assert.equal('bar', res.body.pass); next(); }); }); it('progress event listener on xhr object registered when some on the request', () => { const req = request.get('/foo').on('progress', data => {}); req.end(); if (req.xhr.upload) { // Only run assertion on capable browsers assert.notEqual(null, req.xhr.upload.onprogress); } }); it('no progress event listener on xhr object when none registered on request', () => { const req = request.get('/foo'); req.end(); if (req.xhr.upload) { // Only run assertion on capable browsers assert.strictEqual(null, req.xhr.upload.onprogress); } }); it('Request#parse overrides body parser no matter Content-Type', done => { let runParser = false; function testParser(data) { runParser = true; return JSON.stringify(data); } request .post('/user') .serialize(testParser) .type('json') .send({ foo: 123 }) .end(err => { if (err) return done(err); assert(runParser); done(); }); }); // Don't run on browsers without xhr2 support if ('FormData' in window) { it('xhr2 download file old hack', next => { request.parse['application/vnd.superagent'] = obj => obj; request .get('/arraybuffer') .on('request', function() { this.xhr.responseType = 'arraybuffer'; }) .on('response', res => { assert(res.body instanceof ArrayBuffer); next(); }) .end(); }); it('xhr2 download file responseType', next => { request.parse['application/vnd.superagent'] = obj => obj; request .get('/arraybuffer') .responseType('arraybuffer') .on('response', res => { assert(res.body instanceof ArrayBuffer); next(); }) .end(); }); it('get error status code and rawResponse on file download', next => { request .get('/arraybuffer-unauthorized') .responseType('arraybuffer') .end((err, res) => { assert.equal(err.status, 401); assert(res.body instanceof ArrayBuffer); assert(err.response.body instanceof ArrayBuffer); const decodedString = String.fromCharCode.apply( null, new Uint8Array(res.body) ); assert( decodedString, '{"message":"Authorization has been denied for this request."}' ); next(); }); }); } it('parse should take precedence over default parse', done => { request .get('/foo') .parse((res, text) => `customText: ${res.status}`) .end((err, res) => { assert(res.ok); assert(res.body === 'customText: 200'); done(); }); }); it('handles `xhr.open()` errors', done => { request .get('http://foo\0.com') // throws "Failed to execute 'open' on 'XMLHttpRequest': Invalid URL" .end((err, res) => { assert(err); done(); }); }); }); superagent-5.2.2/test/client/serialize.js000066400000000000000000000042761362257374000205010ustar00rootroot00000000000000const assert = require('assert'); const request = require('../support/client'); function serialize(obj, res) { const val = request.serializeObject(obj); assert.equal( val, res, `${JSON.stringify(obj)} to "${res}" serialization failed. got: "${val}"` ); } function parse(str, obj) { const val = request.parseString(str); assert.deepEqual( val, obj, `"${str}" to ${JSON.stringify(obj)} parse failed. got: ${JSON.stringify( val )}` ); } describe('request.serializeObject()', () => { it('should serialize', () => { serialize('test', 'test'); serialize('foo=bar', 'foo=bar'); serialize({ foo: 'bar' }, 'foo=bar'); serialize({ foo: null }, 'foo'); serialize({ foo: 'null' }, 'foo=null'); serialize({ foo: undefined }, ''); serialize({ foo: 'undefined' }, 'foo=undefined'); serialize({ name: 'tj', age: 24 }, 'name=tj&age=24'); serialize({ name: '&tj&' }, 'name=%26tj%26'); serialize({ '&name&': 'tj' }, '%26name%26=tj'); serialize({ hello: '`test`' }, 'hello=%60test%60'); serialize({ $hello: 'test' }, '$hello=test'); }); }); describe('request.parseString()', () => { it('should parse', () => { parse('name=tj', { name: 'tj' }); parse('name=Manny&species=cat', { name: 'Manny', species: 'cat' }); parse('redirect=/&ok', { redirect: '/', ok: '' }); parse('%26name=tj', { '&name': 'tj' }); parse('name=tj%26', { name: 'tj&' }); parse('%60', { '`': '' }); }); }); describe('Merging objects', () => { it("Don't mix FormData and JSON", () => { if (!window.FormData) { // Skip test if FormData is not supported by browser return; } const data = new FormData(); data.append('foo', 'bar'); assert.throws(() => { request .post('/echo') .send(data) .send({ allowed: false }); }); }); it("Don't mix Blob and JSON", () => { if (!window.Blob) { return; } request .post('/echo') .send(new Blob(['will be cleared'])) .send(false) .send({ allowed: true }); assert.throws(() => { request .post('/echo') .send(new Blob(['hello'])) .send({ allowed: false }); }); }); }); superagent-5.2.2/test/client/xdomain.js000066400000000000000000000030121362257374000201340ustar00rootroot00000000000000const assert = require('assert'); const request = require('../support/client'); describe('xdomain', function() { this.timeout(20000); // TODO (defunctzombie) I am not certain this actually forces xdomain request // use localtunnel.me and tunnel127.com alias instead it('should support req.withCredentials()', next => { request .get(`//${window.location.host}/xdomain`) .withCredentials() .end((err, res) => { assert.equal(200, res.status); assert.equal('tobi', res.text); next(); }); }); // xdomain not supported in old IE and IE11 gives weird Jetty errors (looks like a SauceLabs issue) const isIE11 = Boolean(navigator.userAgent.match(/Trident.*rv[ :]*11\./)); const isIE9OrOlder = !window.atob; if (!isIE9OrOlder && !isIE11) { // Don't run on IE9 or older, or IE11 it('should handle x-domain failure', next => { request.get('//tunne127.com').end((err, res) => { assert(err, 'error missing'); assert(err.crossDomain, 'not .crossDomain'); next(); }); }); it('should handle x-domain failure after repeat attempts', next => { request .get('//tunne127.com') .retry(2) .end((err, res) => { try { assert(err, 'error missing'); assert(err.crossDomain, 'not .crossDomain'); assert.equal(2, err.retries, 'expected an error with .retries'); next(); } catch (err_) { next(err_); } }); }); } }); superagent-5.2.2/test/content-type.js000066400000000000000000000014021362257374000176510ustar00rootroot00000000000000const setup = require('./support/setup'); const { uri } = setup; const assert = require('assert'); const request = require('./support/client'); describe('req.set("Content-Type", contentType)', function() { this.timeout(20000); it('should work with just the contentType component', done => { request .post(`${uri}/echo`) .set('Content-Type', 'application/json') .send({ name: 'tobi' }) .end((err, res) => { assert(!err); done(); }); }); it('should work with the charset component', done => { request .post(`${uri}/echo`) .set('Content-Type', 'application/json; charset=utf-8') .send({ name: 'tobi' }) .end((err, res) => { assert(!err); done(); }); }); }); superagent-5.2.2/test/form.js000066400000000000000000000067061362257374000161770ustar00rootroot00000000000000const setup = require('./support/setup'); const base = setup.uri; const should = require('should'); const request = require('./support/client'); const assert = require('assert'); if (!assert.deepStrictEqual) assert.deepStrictEqual = assert.deepEqual; const formDataSupported = setup.NODE || FormData !== 'undefined'; describe('req.send(Object) as "form"', () => { describe('with req.type() set to form', () => { it('should send x-www-form-urlencoded data', done => { request .post(`${base}/echo`) .type('form') .send({ name: 'tobi' }) .end((err, res) => { res.header['content-type'].should.equal( 'application/x-www-form-urlencoded' ); res.text.should.equal('name=tobi'); done(); }); }); }); describe('when called several times', () => { it('should merge the objects', done => { request .post(`${base}/echo`) .type('form') .send({ name: { first: 'tobi', last: 'holowaychuk' } }) .send({ age: '1' }) .end((err, res) => { res.header['content-type'].should.equal( 'application/x-www-form-urlencoded' ); res.text.should.equal( 'name%5Bfirst%5D=tobi&name%5Blast%5D=holowaychuk&age=1' ); done(); }); }); }); }); describe('req.attach', () => { it('ignores null file', done => { request .post('/echo') .attach('image', null) .end((err, res) => { done(); }); }); }); describe('req.field', function() { this.timeout(5000); it('allow bools', done => { if (!formDataSupported) { return done(); } request .post(`${base}/formecho`) .field('bools', true) .field('strings', 'true') .end((err, res) => { assert.ifError(err); assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' }); done(); }); }); it('allow objects', done => { if (!formDataSupported) { return done(); } request .post(`${base}/formecho`) .field({ bools: true, strings: 'true' }) .end((err, res) => { assert.ifError(err); assert.deepStrictEqual(res.body, { bools: 'true', strings: 'true' }); done(); }); }); it('works with arrays in objects', done => { if (!formDataSupported) { return done(); } request .post(`${base}/formecho`) .field({ numbers: [1, 2, 3] }) .end((err, res) => { assert.ifError(err); assert.deepStrictEqual(res.body, { numbers: ['1', '2', '3'] }); done(); }); }); it('works with arrays', done => { if (!formDataSupported) { return done(); } request .post(`${base}/formecho`) .field('letters', ['a', 'b', 'c']) .end((err, res) => { assert.ifError(err); assert.deepStrictEqual(res.body, { letters: ['a', 'b', 'c'] }); done(); }); }); it('throw when empty', () => { should.throws(() => { request.post(`${base}/echo`).field(); }, /name/); should.throws(() => { request.post(`${base}/echo`).field('name'); }, /val/); }); it('cannot be mixed with send()', () => { assert.throws(() => { request .post('/echo') .field('form', 'data') .send('hi'); }); assert.throws(() => { request .post('/echo') .send('hi') .field('form', 'data'); }); }); }); superagent-5.2.2/test/json.js000066400000000000000000000130311362257374000161720ustar00rootroot00000000000000const setup = require('./support/setup'); const { uri } = setup; const doesntWorkInBrowserYet = setup.NODE; const doesntWorkInHttp2 = !process.env.HTTP2_TEST; const assert = require('assert'); const request = require('./support/client'); describe('req.send(Object) as "json"', function() { this.timeout(20000); it('should default to json', done => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .end((err, res) => { res.should.be.json(); res.text.should.equal('{"name":"tobi"}'); done(); }); }); it('should work with arrays', done => { request .post(`${uri}/echo`) .send([1, 2, 3]) .end((err, res) => { res.should.be.json(); res.text.should.equal('[1,2,3]'); done(); }); }); it('should work with value null', done => { request .post(`${uri}/echo`) .type('json') .send('null') .end((err, res) => { res.should.be.json(); assert.strictEqual(res.body, null); done(); }); }); it('should work with value false', done => { request .post(`${uri}/echo`) .type('json') .send('false') .end((err, res) => { res.should.be.json(); res.body.should.equal(false); done(); }); }); if (doesntWorkInBrowserYet) it('should work with value 0', done => { // fails in IE9 request .post(`${uri}/echo`) .type('json') .send('0') .end((err, res) => { res.should.be.json(); res.body.should.equal(0); done(); }); }); it('should work with empty string value', done => { request .post(`${uri}/echo`) .type('json') .send('""') .end((err, res) => { res.should.be.json(); res.body.should.equal(''); done(); }); }); if (doesntWorkInBrowserYet && doesntWorkInHttp2) it('should work with GET', done => { request .get(`${uri}/echo`) .send({ tobi: 'ferret' }) .end((err, res) => { try { res.should.be.json(); res.text.should.equal('{"tobi":"ferret"}'); ({ tobi: 'ferret' }.should.eql(res.body)); done(); } catch (err_) { done(err_); } }); }); it('should work with vendor MIME type', done => { request .post(`${uri}/echo`) .set('Content-Type', 'application/vnd.example+json') .send({ name: 'vendor' }) .end((err, res) => { res.text.should.equal('{"name":"vendor"}'); ({ name: 'vendor' }.should.eql(res.body)); done(); }); }); describe('when called several times', () => { it('should merge the objects', done => { request .post(`${uri}/echo`) .send({ name: 'tobi' }) .send({ age: 1 }) .end((err, res) => { res.should.be.json(); res.text.should.equal('{"name":"tobi","age":1}'); ({ name: 'tobi', age: 1 }.should.eql(res.body)); done(); }); }); }); }); describe('res.body', function() { this.timeout(20000); describe('application/json', () => { it('should parse the body', done => { request.get(`${uri}/json`).end((err, res) => { res.text.should.equal('{"name":"manny"}'); res.body.should.eql({ name: 'manny' }); done(); }); }); }); if (doesntWorkInBrowserYet) describe('HEAD requests', () => { it('should not throw a parse error', done => { request.head(`${uri}/json`).end((err, res) => { try { assert.strictEqual(err, null); assert.strictEqual(res.text, undefined); assert.strictEqual(Object.keys(res.body).length, 0); done(); } catch (err_) { done(err_); } }); }); }); describe('Invalid JSON response', () => { it('should return the raw response', done => { request.get(`${uri}/invalid-json`).end((err, res) => { assert.deepEqual( err.rawResponse, ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}" ); done(); }); }); it('should return the http status code', done => { request.get(`${uri}/invalid-json-forbidden`).end((err, res) => { assert.equal(err.statusCode, 403); done(); }); }); }); if (doesntWorkInBrowserYet) describe('No content', () => { it('should not throw a parse error', done => { request.get(`${uri}/no-content`).end((err, res) => { try { assert.strictEqual(err, null); assert.strictEqual(res.text, ''); assert.strictEqual(Object.keys(res.body).length, 0); done(); } catch (err_) { done(err_); } }); }); }); if (doesntWorkInBrowserYet) describe('application/json+hal', () => { it('should parse the body', done => { request.get(`${uri}/json-hal`).end((err, res) => { if (err) return done(err); res.text.should.equal('{"name":"hal 5000"}'); res.body.should.eql({ name: 'hal 5000' }); done(); }); }); }); if (doesntWorkInBrowserYet) describe('vnd.collection+json', () => { it('should parse the body', done => { request.get(`${uri}/collection-json`).end((err, res) => { res.text.should.equal('{"name":"chewbacca"}'); res.body.should.eql({ name: 'chewbacca' }); done(); }); }); }); }); superagent-5.2.2/test/node/000077500000000000000000000000001362257374000156125ustar00rootroot00000000000000superagent-5.2.2/test/node/agency.js000066400000000000000000000111701362257374000174160ustar00rootroot00000000000000'use strict'; require('should-http'); const express = require('../support/express'); const app = express(); const request = require('../support/client'); const assert = require('assert'); const should = require('should'); const cookieParser = require('cookie-parser'); const session = require('express-session'); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); } app.use(cookieParser()); app.use( session({ secret: 'secret', resave: true, saveUninitialized: true }) ); app.post('/signin', (req, res) => { req.session.user = 'hunter@hunterloftis.com'; res.redirect('/dashboard'); }); app.post('/setcookie', (req, res) => { res.cookie('cookie', 'jar'); res.sendStatus(200); }); app.get('/getcookie', (req, res) => { res.status(200).send(req.cookies.cookie); }); app.get('/dashboard', (req, res) => { if (req.session.user) return res.status(200).send('dashboard'); res.status(401).send('dashboard'); }); app.all('/signout', (req, res) => { req.session.regenerate(() => { res.status(200).send('signout'); }); }); app.get('/', (req, res) => { if (req.session.user) return res.redirect('/dashboard'); res.status(200).send('home'); }); app.post('/redirect', (req, res) => { res.redirect('/simple'); }); app.get('/simple', (req, res) => { res.status(200).send('simple'); }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('request', () => { describe('persistent agent', () => { const agent1 = request.agent(); const agent2 = request.agent(); const agent3 = request.agent(); const agent4 = request.agent(); it('should gain a session on POST', () => agent3.post(`${base}/signin`).then(res => { res.should.have.status(200); should.not.exist(res.headers['set-cookie']); res.text.should.containEql('dashboard'); })); it('should start with empty session (set cookies)', done => { agent1.get(`${base}/dashboard`).end((err, res) => { should.exist(err); res.should.have.status(401); should.exist(res.headers['set-cookie']); done(); }); }); it('should gain a session (cookies already set)', () => agent1.post(`${base}/signin`).then(res => { res.should.have.status(200); should.not.exist(res.headers['set-cookie']); res.text.should.containEql('dashboard'); })); it('should persist cookies across requests', () => agent1.get(`${base}/dashboard`).then(res => { res.should.have.status(200); })); it('should have the cookie set in the end callback', () => agent4 .post(`${base}/setcookie`) .then(() => agent4.get(`${base}/getcookie`)) .then(res => { res.should.have.status(200); assert.strictEqual(res.text, 'jar'); })); it('should not share cookies', done => { agent2.get(`${base}/dashboard`).end((err, res) => { should.exist(err); res.should.have.status(401); done(); }); }); it('should not lose cookies between agents', () => agent1.get(`${base}/dashboard`).then(res => { res.should.have.status(200); })); it('should be able to follow redirects', () => agent1.get(base).then(res => { res.should.have.status(200); res.text.should.containEql('dashboard'); })); it('should be able to post redirects', () => agent1 .post(`${base}/redirect`) .send({ foo: 'bar', baz: 'blaaah' }) .then(res => { res.should.have.status(200); res.text.should.containEql('simple'); res.redirects.should.eql([`${base}/simple`]); })); it('should be able to limit redirects', done => { agent1 .get(base) .redirects(0) .end((err, res) => { should.exist(err); res.should.have.status(302); res.redirects.should.eql([]); res.header.location.should.equal('/dashboard'); done(); }); }); it('should be able to create a new session (clear cookie)', () => agent1.post(`${base}/signout`).then(res => { res.should.have.status(200); should.exist(res.headers['set-cookie']); })); it('should regenerate with an empty session', done => { agent1.get(`${base}/dashboard`).end((err, res) => { should.exist(err); res.should.have.status(401); should.not.exist(res.headers['set-cookie']); done(); }); }); }); }); superagent-5.2.2/test/node/basic-auth.js000066400000000000000000000021431362257374000201700ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; const URL = require('url'); describe('Basic auth', () => { describe('when credentials are present in url', () => { it('should set Authorization', done => { const new_url = URL.parse(base); new_url.auth = 'tobi:learnboost'; new_url.pathname = '/basic-auth'; request.get(URL.format(new_url)).end((err, res) => { res.status.should.equal(200); done(); }); }); }); describe('req.auth(user, pass)', () => { it('should set Authorization', done => { request .get(`${base}/basic-auth`) .auth('tobi', 'learnboost') .end((err, res) => { res.status.should.equal(200); done(); }); }); }); describe('req.auth(user + ":" + pass)', () => { it('should set authorization', done => { request .get(`${base}/basic-auth/again`) .auth('tobi') .end((err, res) => { res.status.should.eql(200); done(); }); }); }); }); superagent-5.2.2/test/node/basic.js000066400000000000000000000214121362257374000172310ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const fs = require('fs'); const { EventEmitter } = require('events'); const { StringDecoder } = require('string_decoder'); const url = require('url'); const setup = require('../support/setup'); const request = require('../support/client'); const base = setup.uri; const doesntWorkInHttp2 = !process.env.HTTP2_TEST; describe('[node] request', () => { describe('with an url', () => { it('should preserve the encoding of the url', done => { request.get(`${base}/url?a=(b%29`).end((err, res) => { assert.equal('/url?a=(b%29', res.text); done(); }); }); }); describe('with an object', () => { it('should format the url', () => request.get(url.parse(`${base}/login`)).then(res => { assert(res.ok); })); }); describe('without a schema', () => { it('should default to http', () => request.get('localhost:5000/login').then(res => { assert.equal(res.status, 200); })); }); describe('res.toJSON()', () => { it('should describe the response', () => request .post(`${base}/echo`) .send({ foo: 'baz' }) .then(res => { const obj = res.toJSON(); assert.equal('object', typeof obj.header); assert.equal('object', typeof obj.req); assert.equal(200, obj.status); assert.equal('{"foo":"baz"}', obj.text); })); }); describe('res.links', () => { it('should default to an empty object', () => request.get(`${base}/login`).then(res => { res.links.should.eql({}); })); it('should parse the Link header field', done => { request.get(`${base}/links`).end((err, res) => { res.links.next.should.equal( 'https://api.github.com/repos/visionmedia/mocha/issues?page=2' ); done(); }); }); }); describe('req.unset(field)', () => { it('should remove the header field', done => { request .post(`${base}/echo`) .unset('User-Agent') .end((err, res) => { assert.equal(void 0, res.header['user-agent']); done(); }); }); }); describe('case-insensitive', () => { it('should set/get header fields case-insensitively', () => { const r = request.post(`${base}/echo`); r.set('MiXeD', 'helloes'); assert.strictEqual(r.get('mixed'), 'helloes'); }); it('should unset header fields case-insensitively', () => { const r = request.post(`${base}/echo`); r.set('MiXeD', 'helloes'); r.unset('MIXED'); assert.strictEqual(r.get('mixed'), undefined); }); }); describe('req.write(str)', () => { it('should write the given data', done => { const req = request.post(`${base}/echo`); req.set('Content-Type', 'application/json'); assert.equal('boolean', typeof req.write('{"name"')); assert.equal('boolean', typeof req.write(':"tobi"}')); req.end((err, res) => { res.text.should.equal('{"name":"tobi"}'); done(); }); }); }); describe('req.pipe(stream)', () => { it('should pipe the response to the given stream', done => { const stream = new EventEmitter(); stream.buf = ''; stream.writable = true; stream.write = function(chunk) { this.buf += chunk; }; stream.end = function() { this.buf.should.equal('{"name":"tobi"}'); done(); }; request .post(`${base}/echo`) .send('{"name":"tobi"}') .pipe(stream); }); }); describe('.buffer()', () => { it('should enable buffering', done => { request .get(`${base}/custom`) .buffer() .end((err, res) => { assert.ifError(err); assert.equal('custom stuff', res.text); assert(res.buffered); done(); }); }); it("should take precedence over request.buffer['someMimeType'] = false", done => { const type = 'application/barbaz'; const send = 'some text'; request.buffer[type] = false; request .post(`${base}/echo`) .type(type) .send(send) .buffer() .end((err, res) => { delete request.buffer[type]; assert.ifError(err); assert.equal(res.type, type); assert.equal(send, res.text); assert(res.buffered); done(); }); }); }); describe('.buffer(false)', () => { it('should disable buffering', done => { request .post(`${base}/echo`) .type('application/x-dog') .send('hello this is dog') .buffer(false) .end((err, res) => { assert.ifError(err); assert.equal(null, res.text); res.body.should.eql({}); let buf = ''; res.setEncoding('utf8'); res.on('data', chunk => { buf += chunk; }); res.on('end', () => { buf.should.equal('hello this is dog'); done(); }); }); }); it("should take precedence over request.buffer['someMimeType'] = true", done => { const type = 'application/foobar'; const send = 'hello this is a dog'; request.buffer[type] = true; request .post(`${base}/echo`) .type(type) .send(send) .buffer(false) .end((err, res) => { delete request.buffer[type]; assert.ifError(err); assert.equal(null, res.text); assert.equal(res.type, type); assert(!res.buffered); res.body.should.eql({}); let buf = ''; res.setEncoding('utf8'); res.on('data', chunk => { buf += chunk; }); res.on('end', () => { buf.should.equal(send); done(); }); }); }); }); describe('.withCredentials()', () => { it('should not throw an error when using the client-side "withCredentials" method', done => { request .get(`${base}/custom`) .withCredentials() .end((err, res) => { assert.ifError(err); done(); }); }); }); describe('.agent()', () => { it('should return the defaut agent', done => { const req = request.post(`${base}/echo`); req.agent().should.equal(false); done(); }); }); describe('.agent(undefined)', () => { it('should set an agent to undefined and ensure it is chainable', done => { const req = request.get(`${base}/echo`); const ret = req.agent(undefined); ret.should.equal(req); assert.strictEqual(req.agent(), undefined); done(); }); }); describe('.agent(new http.Agent())', () => { it('should set passed agent', done => { const http = require('http'); const req = request.get(`${base}/echo`); const agent = new http.Agent(); const ret = req.agent(agent); ret.should.equal(req); req.agent().should.equal(agent); done(); }); }); describe('with a content type other than application/json or text/*', () => { it('should still use buffering', () => { return request .post(`${base}/echo`) .type('application/x-dog') .send('hello this is dog') .then(res => { assert.equal(null, res.text); assert.equal(res.body.toString(), 'hello this is dog'); res.buffered.should.be.true; }); }); }); describe('content-length', () => { it('should be set to the byte length of a non-buffer object', done => { const decoder = new StringDecoder('utf8'); let img = fs.readFileSync(`${__dirname}/fixtures/test.png`); img = decoder.write(img); request .post(`${base}/echo`) .type('application/x-image') .send(img) .buffer(false) .end((err, res) => { assert.ifError(err); assert(!res.buffered); assert.equal(res.header['content-length'], Buffer.byteLength(img)); done(); }); }); it('should be set to the length of a buffer object', done => { const img = fs.readFileSync(`${__dirname}/fixtures/test.png`); request .post(`${base}/echo`) .type('application/x-image') .send(img) .buffer(true) .end((err, res) => { assert.ifError(err); assert(res.buffered); assert.equal(res.header['content-length'], img.length); done(); }); }); }); if (doesntWorkInHttp2) it('should send body with .get().send()', next => { request .get(`${base}/echo`) .set('Content-Type', 'text/plain') .send('wahoo') .end((err, res) => { try { assert.equal('wahoo', res.text); next(); } catch (err_) { next(err_); } }); }); }); superagent-5.2.2/test/node/buffers.js000066400000000000000000000061011362257374000176020ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; describe("req.buffer['someMimeType']", () => { it('should respect that agent.buffer(true) takes precedent', done => { const agent = request.agent(); agent.buffer(true); const type = 'application/somerandomtype'; const send = 'somerandomtext'; request.buffer[type] = false; agent .post(`${base}/echo`) .type(type) .send(send) .end((err, res) => { delete request.buffer[type]; assert.ifError(err); assert.equal(res.type, type); assert.equal(send, res.text); assert(res.buffered); done(); }); }); it('should respect that agent.buffer(false) takes precedent', done => { const agent = request.agent(); agent.buffer(false); const type = 'application/barrr'; const send = 'some random text2'; request.buffer[type] = true; agent .post(`${base}/echo`) .type(type) .send(send) .end((err, res) => { delete request.buffer[type]; assert.ifError(err); assert.equal(null, res.text); assert.equal(res.type, type); assert(!res.buffered); res.body.should.eql({}); let buf = ''; res.setEncoding('utf8'); res.on('data', chunk => { buf += chunk; }); res.on('end', () => { buf.should.equal(send); done(); }); }); }); it('should disable buffering for that mimetype when false', done => { const type = 'application/bar'; const send = 'some random text'; request.buffer[type] = false; request .post(`${base}/echo`) .type(type) .send(send) .end((err, res) => { delete request.buffer[type]; assert.ifError(err); assert.equal(null, res.text); assert.equal(res.type, type); assert(!res.buffered); res.body.should.eql({}); let buf = ''; res.setEncoding('utf8'); res.on('data', chunk => { buf += chunk; }); res.on('end', () => { buf.should.equal(send); done(); }); }); }); it('should enable buffering for that mimetype when true', done => { const type = 'application/baz'; const send = 'woooo'; request.buffer[type] = true; request .post(`${base}/echo`) .type(type) .send(send) .end((err, res) => { delete request.buffer[type]; assert.ifError(err); assert.equal(res.type, type); assert.equal(send, res.text); assert(res.buffered); done(); }); }); it('should fallback to default handling for that mimetype when undefined', () => { const type = 'application/bazzz'; const send = 'woooooo'; return request .post(`${base}/echo`) .type(type) .send(send) .then(res => { assert.equal(res.type, type); assert.equal(send, res.body.toString()); assert(res.buffered); }); }); }); superagent-5.2.2/test/node/exports.js000066400000000000000000000013371362257374000176600ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); describe('exports', () => { it('should expose .protocols', () => { Object.keys(request.protocols).should.eql(['http:', 'https:', 'http2:']); }); it('should expose .serialize', () => { Object.keys(request.serialize).should.eql([ 'application/x-www-form-urlencoded', 'application/json' ]); }); it('should expose .parse', () => { Object.keys(request.parse).should.eql([ 'application/x-www-form-urlencoded', 'application/json', 'text', 'application/octet-stream', 'application/pdf', 'image' ]); }); it('should export .buffer', () => { Object.keys(request.buffer).should.eql([]); }); }); superagent-5.2.2/test/node/fixtures/000077500000000000000000000000001362257374000174635ustar00rootroot00000000000000superagent-5.2.2/test/node/fixtures/ca.cert.pem000066400000000000000000000016741362257374000215150ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICljCCAX4CCQDnGz3+qH/zGzANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJD QTAeFw0xODEyMDIxNjIyMThaFw0zMjA4MTAxNjIyMThaMA0xCzAJBgNVBAMMAkNB MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtgUDcB7R94A22I0D8Iba c000ZBINtvnyvoPP5U2hRsxI9tcW/LLm0GhzM5XJJNQ0jSv0ixIFKomtFBSjKMq/ NH156SqKqyDGU1fPnGjzcJulxceODIokAqNCbZ7Bys6nqUdilNfLQ4bBBWYsEUWT vgbUeDRHvQGycou/pLpYGLCJ4tpc4n6ybox1uPi0qlvFI7aWvQFjOxxR0VeRixXf qXjVCDIr9OJIWiXLrJYDlYqG2gRF/yTDZ4qmQxbZzJ6AXMpaRUiHUO0FHu7baEux ylIc0KVcAmYMGdhFlmDrMNRsmnADKPX9DIMh92XWyE10oNK50I1rIhpvN4XfQx6E UwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQCIXj1vfTVRB4ea/udjazPHaLAeocbg d8babbDItOm1ApAoUhNuxPVxyISSFrowCVlaWxB+1ztfeUAB/Axfj0mbXk1hgo2D 4+rft8hOtdg91bU+gHPd/7QGkpPIs5PC+TsnVj0mNqZ5o8qZsLhgoXp3Dl5yMhEs sRegLkmBQHzEsKFU2cSxVD7BXXGLDJxcoR4friGOXdIZeYwqHTZsuR3O7JOVbLew dURqD70jPuf9v1tBnkJPbUECMlL7BCw6ZQtglSvjPP/waWir9TMsDk+xwPK8NPbv DGi+w++cImBbxcnIMBTk4XtlFcOnCCAYUfkaxZMw2jNhYbjiEZOGUG8m -----END CERTIFICATE----- superagent-5.2.2/test/node/fixtures/ca.key.pem000066400000000000000000000032131362257374000213370ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAtgUDcB7R94A22I0D8Ibac000ZBINtvnyvoPP5U2hRsxI9tcW /LLm0GhzM5XJJNQ0jSv0ixIFKomtFBSjKMq/NH156SqKqyDGU1fPnGjzcJulxceO DIokAqNCbZ7Bys6nqUdilNfLQ4bBBWYsEUWTvgbUeDRHvQGycou/pLpYGLCJ4tpc 4n6ybox1uPi0qlvFI7aWvQFjOxxR0VeRixXfqXjVCDIr9OJIWiXLrJYDlYqG2gRF /yTDZ4qmQxbZzJ6AXMpaRUiHUO0FHu7baEuxylIc0KVcAmYMGdhFlmDrMNRsmnAD KPX9DIMh92XWyE10oNK50I1rIhpvN4XfQx6EUwIDAQABAoIBAAomAWkQ7tgD2Ar+ 4cdZXXisR02FDCq1iOlCZCb+yw0teqv4lhmEyAW6rSGlKk/ZXQy59KqEWLFkd7f0 5pvxofOFQ3TSoGSmMSiYbsTjvR78LqP2Wl8snJFhFOUTwu5R01tG1aJC3dxn+P8a ET7tSC2CJ/qDv7Q0EgT88bR3h03pAc2PJAGWJ2QwutAwV+6Ilyt3hcz29f7JGQac Da0jY/7RIpvZL20gsecb/6Q0a50VEbkuJ+OF5QyIQNT9qtfvsqavtsjHgBWs3iFG yKaDCey4X7D+NsyJBKNCuDqWXzq/4+mQ3atBIvYq2mcIpIbaku7TEWHvpxfzsT/F SzLncMECgYEA4qR1GU38UxZ/8x6Cc4Z3DKUuCLBqvv69IHPcfSkhrtTeApdsv14U KE66/Z3g4FXeV018GYUzGODfjBt4VnDCutz9tmiHFH+T2zDpgC7hvODC8rJ+D21b G3Q5eyA+XRao1XHjc2UD/Ev6iJPjgCT23Lur2bhAqCKkV4g2EAWCgyMCgYEAzZjY 5M7Jw+0g5b6ILnFX66JbESrw87OtiIpiQh5XUQssKsmfONzbXUp6ch/MRTFVHVDZ XmG35Xyg6vy1FYg9HTALl1tnkh9UIhKrH7jx+6euhc0HyWCCqSp/3CpJqVjdoxtS vtZigSaxwTDaOYc8r54cWhHIIrpTrcqY4mxdZRECgYBpGWhv9pkXEqz82d4Wonlc dNDXGLA3p7uea/wIUmWbRH07aGr2hzMDyhaue2MHxOoZRAZTc1BRrh4cQ7TXKO00 aDyDNQ/G8q5nC9SMK7FkvDnK//izQLvqDEiHj1k8I8DhUjHulh52BenFIgdyqjGM BL9ZdDcPgRkCuliPr25pTwKBgG8rf9QxEJ51oT05Sk+6j+zk7FMbIhDUjjfvg/P2 jgZPgUFdpk/L9H28YPtGwGCFrV1dszu6oQJg4m5N2OjcsxcOPKZKEXXMpOSLraZI jegiolbNJ7G3Es/AIET/RLdiSu4APzzblYX6U1GARe+ndaQMXY5CYTKOB+NIUmTU bafRAoGAV8PptnjWf9ehJvt96Rz0FdfpN7leqdweK2JrGZwJQ9BRcKwUO758lmyN nC62Sd0mwHivxRqI6e2u7OSvGj9e7iLnHMl4qYie7VvsWAWmztH2ntEI0iWA3V3N M3T9+sz+nslfhWKgIA80EqOWB1AF0EmbmmqK0igWEbYynAr6v0Q= -----END RSA PRIVATE KEY----- superagent-5.2.2/test/node/fixtures/ca.srl000066400000000000000000000000211362257374000205610ustar00rootroot00000000000000B23299143E26EFC5 superagent-5.2.2/test/node/fixtures/cert.csr000066400000000000000000000015731362257374000211370ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIICWTCCAUECAQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAsjNYMUk1HzBLM4fL/8c6Z86X/b13V1bMXrrcV28w jmvQv4lADlghZGt/zbinyvZrASp8v1btR9gLaNTdrxxnz5FWu1bY947ljgadudh0 STLNs4jWI2wcjgguA8B2rDtvap0bn9JkpjQGcFuqEdJRlr26OwsC5SNCtFxQmTrb sneFMWK3JsL1riCrV9Cw0L3joki/YKYTTwRZJ2TXrrHvOLQCIUacwCU4oJg19D0F KU/rDtdUFFojnTio0RFU4/OpjxKzwqjSJE80nPSRHAqXtSgmphrRk4ZVeTxKEGKC oAt/RBwqvxPFjNlbr1EWY9S7SpFu06V35jXJYD9CWD/WcQIDAQABoAAwDQYJKoZI hvcNAQELBQADggEBACia2hDAe1YqzVn/P2KSX+/9yDrjOhU20hKF1CTZr3Zfjep9 R86ldz1aFc2N2yqDjUYpj0+DODEXlEfNaYcD2nn93qgy/gAmfQUvCejBh6vsGiIW qc41lzEGHa9/ErxQ7yvETeuY8OozjDAoUs5NUbFL6OmwJFqX9VzLbQ8uQxNU3z3l AKVkWBWIubqpSa8tDn/+wf8vW/xtOCZ/Zd5YBQdTCwb5BdS3vpBkwpJbPBvR97Mc 2d+2a5qyNqZdb1CuATS2MJC35zp62FErhcnnVqtaAcaE/C/in1OO3wLJvXa5/LKp 1riBUJLHscGbIhe+KjlLoosXuOcUNvBkNbt8MFQ= -----END CERTIFICATE REQUEST----- superagent-5.2.2/test/node/fixtures/cert.pem000066400000000000000000000017111362257374000211230ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICnTCCAYUCCQCyMpkUPibvxTANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJD QTAeFw0xODEyMDIxNjIzNTBaFw0zMjA4MTAxNjIzNTBaMBQxEjAQBgNVBAMMCWxv Y2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALIzWDFJNR8w SzOHy//HOmfOl/29d1dWzF663FdvMI5r0L+JQA5YIWRrf824p8r2awEqfL9W7UfY C2jU3a8cZ8+RVrtW2PeO5Y4GnbnYdEkyzbOI1iNsHI4ILgPAdqw7b2qdG5/SZKY0 BnBbqhHSUZa9ujsLAuUjQrRcUJk627J3hTFitybC9a4gq1fQsNC946JIv2CmE08E WSdk166x7zi0AiFGnMAlOKCYNfQ9BSlP6w7XVBRaI504qNERVOPzqY8Ss8Ko0iRP NJz0kRwKl7UoJqYa0ZOGVXk8ShBigqALf0QcKr8TxYzZW69RFmPUu0qRbtOld+Y1 yWA/Qlg/1nECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAWYlRC8e5flZED/JDP0VG aNENVwv0bFbbzp1urgQeq1TVBDHGKuMJM9klVMBQiMT9q+nPjEgfynSiLVuY7FWs yD/hFjQMLV2cz7tdBY6l+IV1sAtBdX3ZRmmzttaAs4xmFXCLXdTm4KJ5bPcRnRLA klMKOsvNY90mRteXvhQy04J2TJVpIld05+yjnYVWoODyX9A/Xda+33qjZECLTnj4 c5L3mamPZEo4nwY+329d7dNvEu+ETp4UzwkzwPFHSGLD01YEJIu83TTi1WDBZygz dxPUkLKYzRkpYVp3hbZsvkCQVtruY/e6DADZTKAlhL41V6VdH35Es0uw7JrbPf7z jQ== -----END CERTIFICATE----- superagent-5.2.2/test/node/fixtures/cert.pfx000066400000000000000000000043451362257374000211450ustar00rootroot0000000000000000 *H 00G *H 8040- *H 0 *H  0(R*exZ}.F|7dCx) 2 Ðf@BLA{ɋcHEb奋b-Fk^c nCI`ФԎaE!}s]\KAe-yH((M6 r9I'Ζ%^JŽM;޸ڕǺ09R+wJZdx.u?9 Na+-GC>YCZPYtQS&RJO7zg7*ISlN:mi܏T-d[ p;hQ7h2CKys0=/NO29D`FѼ&Xb *kU\HʧXvpX(PX~"ujoE|C#BWS A}l|?8|{aJ Y30U]kE!3rWk,} :-Ef 2]jK;R8`fhܬkv_ObAz3}Լ::36[EYToռ!n1@Zy R؁Z˅1%t?t͔H1'=Q, q,pЏ8>9Y(oo( ',CsS9jbfR56?!h.P04d+aV(~4~ 0Yu!Ug+Xp^&xvU0A *H 2.0*0& *H  00 *H  0$b|NrZ>7-7 Ym&nmM 1 V[ ƺzsKPj0:J$)>lMb-dL@6X;xao_|_X B͐(-8aZη9 `U Z r! KNJH*C,lf473"7_EX犤g*F|2eZJ.S{#x!F@_BӭiNm`%*]OLDܣ&c>J.tz\ugdGvűe:  %b}tZ撱 [:ІmE i'r3H=J?ƿ~9(eG5vVE*3A0]B?ǦRmGLr+(5'e(ߌgW?K]w~|&*FJb 0݈2!!Z1 zfǵm# u< duF򜷡@ $23{_^_ߕaMcÍb.2t5pQc[nOs~·?IB\cftLJ*=%]Ni b YH:C|6 4bVNA姬-3B;Sw2'd̲%L-$E#E|TJOYy.9yjYAnp ,SmHWj ]~%G/8SJFyIwAs" *0TH]~m>IqZbyب:L^ &bwR Qdq*la}xV;&$!lـB ^'$oFe+I|ݠJMr ?J_N&Zag vcqٳ27/f} "] ^"&{1cT|I>iCO!.L ㈽` Gkm@!Qh08О!1Ur!Ԍ\./AۚrXoV \BN].4Jݷz@2 k-o㲔ESP6WyD3$NMϭF |x=cSʇ3H4ZN.n̽?PUwUZR٭pPZL+u/*֍fՍ<ִd&>Lw>8l !훐897 U<['uWmpU͇XpS[-Q.LgiI{ fڝpLxؚcC(f(aL)4Y锛! 坦%:)4 t)i9pVJV܊Gd\E]%{UQj} q[JZ6 ԱIat{kH _ah{HzUS^2N,jrR)~通 F Cԗ2T$D LZ֬QLϚ۵52KX>y?={f(@ucjdoX)d0A *H 2.0*0& *H  00 *H  0Džu衺ȆE"KK\(맓 ;(r|:!۹*q9fIY \ז'9PvyJ+o;eb'ku*MdJۀZ}'W++rO_3s%Y ,Aש'͊Y!b^^YT)c[US(PۨbQVwwBz}-߈د<Γaʹ 3c] 'u5(n 4 Rmcq*,%*l9n'Ho۞v KyF~CnM[krW$F4drZ+W5H@Woi̫n謿Ǐ{Qhl`C@ώxH ?o#8< 0y=9^:!xZ fS1%0# *H  17$)ej5y010!0 +LjdXxr:-찃:h2superagent-5.2.2/test/node/fixtures/test.png000066400000000000000000000002371362257374000211520ustar00rootroot00000000000000PNG  IHDR PX pHYs  tIME 4=iTXtCommentCreated with GIMPd.eIDATcd_Ā01#UvIENDB`superagent-5.2.2/test/node/fixtures/user.html000066400000000000000000000000151362257374000213230ustar00rootroot00000000000000

name

superagent-5.2.2/test/node/fixtures/user.json000066400000000000000000000000171362257374000213320ustar00rootroot00000000000000{"name":"tobi"}superagent-5.2.2/test/node/fixtures/user.txt000066400000000000000000000000041362257374000211740ustar00rootroot00000000000000Tobisuperagent-5.2.2/test/node/flags.js000066400000000000000000000062261362257374000172520ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; const assert = require('assert'); describe('flags', () => { describe('with 4xx response', () => { it('should set res.error and res.clientError', done => { request.get(`${base}/notfound`).end((err, res) => { assert(err); assert(!res.ok, 'response should not be ok'); assert(res.error, 'response should be an error'); assert(res.clientError, 'response should be a client error'); assert(!res.serverError, 'response should not be a server error'); done(); }); }); }); describe('with 5xx response', () => { it('should set res.error and res.serverError', done => { request.get(`${base}/error`).end((err, res) => { assert(err); assert(!res.ok, 'response should not be ok'); assert(!res.notFound, 'response should not be notFound'); assert(res.error, 'response should be an error'); assert(!res.clientError, 'response should not be a client error'); assert(res.serverError, 'response should be a server error'); done(); }); }); }); describe('with 404 Not Found', () => { it('should res.notFound', done => { request.get(`${base}/notfound`).end((err, res) => { assert(err); assert(res.notFound, 'response should be .notFound'); done(); }); }); }); describe('with 400 Bad Request', () => { it('should set req.badRequest', done => { request.get(`${base}/bad-request`).end((err, res) => { assert(err); assert(res.badRequest, 'response should be .badRequest'); done(); }); }); }); describe('with 401 Bad Request', () => { it('should set res.unauthorized', done => { request.get(`${base}/unauthorized`).end((err, res) => { assert(err); assert(res.unauthorized, 'response should be .unauthorized'); done(); }); }); }); describe('with 406 Not Acceptable', () => { it('should set res.notAcceptable', done => { request.get(`${base}/not-acceptable`).end((err, res) => { assert(err); assert(res.notAcceptable, 'response should be .notAcceptable'); done(); }); }); }); describe('with 204 No Content', () => { it('should set res.noContent', done => { request.get(`${base}/no-content`).end((err, res) => { assert(!err); assert(res.noContent, 'response should be .noContent'); done(); }); }); }); describe('with 201 Created', () => { it('should set res.created', done => { request.post(`${base}/created`).end((err, res) => { assert(!err); assert(res.created, 'response should be .created'); done(); }); }); }); describe('with 422 Unprocessable Entity', () => { it('should set res.unprocessableEntity', done => { request.post(`${base}/unprocessable-entity`).end((err, res) => { assert(err); assert( res.unprocessableEntity, 'response should be .unprocessableEntity' ); done(); }); }); }); }); superagent-5.2.2/test/node/form.js000066400000000000000000000022651362257374000171200ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; const assert = require('assert'); describe('Merging objects', () => { it("Don't mix Buffer and JSON", () => { assert.throws(() => { request .post('/echo') .send(Buffer.from('some buffer')) .send({ allowed: false }); }); }); }); describe('req.send(String)', () => { it('should default to "form"', done => { request .post(`${base}/echo`) .send('user[name]=tj') .send('user[email]=tj@vision-media.ca') .end((err, res) => { res.header['content-type'].should.equal( 'application/x-www-form-urlencoded' ); res.body.should.eql({ user: { name: 'tj', email: 'tj@vision-media.ca' } }); done(); }); }); }); describe('res.body', () => { describe('application/x-www-form-urlencoded', () => { it('should parse the body', done => { request.get(`${base}/form-data`).end((err, res) => { res.text.should.equal('pet[name]=manny'); res.body.should.eql({ pet: { name: 'manny' } }); done(); }); }); }); }); superagent-5.2.2/test/node/http2.js000066400000000000000000000014711362257374000172140ustar00rootroot00000000000000'use strict'; if (!process.env.HTTP2_TEST) { return; } const assert = require('assert'); const url = require('url'); const request = require('../..'); const setup = require('../support/setup'); const base = setup.uri; describe('request.get().http2()', () => { it('should preserve the encoding of the url', done => { request .get(`${base}/url?a=(b%29`) .http2() .end((err, res) => { assert.equal('/url?a=(b%29', res.text); done(); }); }); it('should format the url', () => request .get(url.parse(`${base}/login`)) .http2() .then(res => { assert(res.ok); })); it('should default to http', () => request .get('localhost:5000/login') .http2() .then(res => { assert.equal(res.status, 200); })); }); superagent-5.2.2/test/node/https.js000066400000000000000000000155371362257374000173250ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const url = require('url'); const https = require('https'); const fs = require('fs'); const express = require('../support/express'); const request = require('../support/client'); const app = express(); const ca = fs.readFileSync(`${__dirname}/fixtures/ca.cert.pem`); const key = fs.readFileSync(`${__dirname}/fixtures/key.pem`); const pfx = fs.readFileSync(`${__dirname}/fixtures/cert.pfx`); const cert = fs.readFileSync(`${__dirname}/fixtures/cert.pem`); const passpfx = fs.readFileSync(`${__dirname}/fixtures/passcert.pfx`); /* openssl genrsa -out ca.key.pem 2048 openssl req -x509 -new -nodes -key ca.key.pem -sha256 -days 5000 -out ca.cert.pem # specify CN = CA openssl genrsa -out key.pem 2048 openssl req -new -key key.pem -out cert.csr # specify CN = localhost openssl x509 -req -in cert.csr -CA ca.cert.pem -CAkey ca.key.pem -CAcreateserial -out cert.pem -days 5000 -sha256 openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.pfx # empty password openssl pkcs12 -export -in cert.pem -inkey key.pem -out passcert.pfx # password test */ let http2; if (process.env.HTTP2_TEST) { http2 = require('http2'); } let server; app.get('/', (req, res) => { res.send('Safe and secure!'); }); // WARNING: this .listen() boilerplate is slightly different from most tests // due to HTTPS. Do not copy/paste without examination. const base = 'https://localhost'; let testEndpoint; describe('https', () => { describe('certificate authority', () => { before(function listen(done) { if (process.env.HTTP2_TEST) { server = http2.createSecureServer( { key, cert }, app ); } else { server = https.createServer( { key, cert }, app ); } server.listen(0, function listening() { testEndpoint = `${base}:${server.address().port}`; done(); }); }); after(() => { if (server) server.close(); }); describe('request', () => { it('should give a good response', done => { request .get(testEndpoint) .ca(ca) .end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); it('should reject unauthorized response', () => { return request .get(testEndpoint) .trustLocalhost(false) .then( () => { throw new Error('Allows MITM'); }, () => {} ); }); it('should not reject unauthorized response', () => { return request .get(testEndpoint) .disableTLSCerts() .then(({ status }) => { assert.strictEqual(status, 200); }); }); it('should trust localhost unauthorized response', () => { return request.get(testEndpoint).trustLocalhost(true); }); it('should trust overriden localhost unauthorized response', () => { return request .get(`https://example.com:${server.address().port}`) .connect('127.0.0.1') .trustLocalhost(); }); }); describe('.agent', () => { it('should be able to make multiple requests without redefining the certificate', done => { const agent = request.agent({ ca }); agent.get(testEndpoint).end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); agent.get(url.parse(testEndpoint)).end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); }); }); }); describe.skip('client certificates', () => { before(function listen(done) { if (process.env.HTTP2_TEST) { server = http2.createSecureServer( { ca, key, cert, requestCert: true, rejectUnauthorized: true }, app ); } else { server = https.createServer( { ca, key, cert, requestCert: true, rejectUnauthorized: true }, app ); } server.listen(0, function listening() { testEndpoint = `${base}:${server.address().port}`; done(); }); }); after(() => { if (server) server.close(); }); describe('request', () => { it('should give a good response with client certificates and CA', done => { request .get(testEndpoint) .ca(ca) .key(key) .cert(cert) .end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); it('should give a good response with client pfx', done => { request .get(testEndpoint) .pfx(pfx) .end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); it('should give a good response with client pfx with passphrase', done => { request .get(testEndpoint) .pfx({ pfx: passpfx, passphrase: 'test' }) .end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); }); describe('.agent', () => { it('should be able to make multiple requests without redefining the certificates', done => { const agent = request.agent({ ca, key, cert }); agent.get(testEndpoint).end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); agent.get(url.parse(testEndpoint)).end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); }); it('should be able to make multiple requests without redefining pfx', done => { const agent = request.agent({ pfx }); agent.get(testEndpoint).end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); agent.get(url.parse(testEndpoint)).end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('Safe and secure!', res.text); done(); }); }); }); }); }); }); superagent-5.2.2/test/node/image.js000066400000000000000000000026501362257374000172350ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; const fs = require('fs'); const img = fs.readFileSync(`${__dirname}/fixtures/test.png`); describe('res.body', () => { describe('image/png', () => { it('should parse the body', done => { request.get(`${base}/image`).end((err, res) => { res.type.should.equal('image/png'); Buffer.isBuffer(res.body).should.be.true(); (res.body.length - img.length).should.equal(0); done(); }); }); }); describe('application/octet-stream', () => { it('should parse the body', done => { request .get(`${base}/image-as-octets`) .buffer(true) // that's tech debt :( .end((err, res) => { res.type.should.equal('application/octet-stream'); Buffer.isBuffer(res.body).should.be.true(); (res.body.length - img.length).should.equal(0); done(); }); }); }); describe('application/octet-stream', () => { it('should parse the body (using responseType)', done => { request .get(`${base}/image-as-octets`) .responseType('blob') .end((err, res) => { res.type.should.equal('application/octet-stream'); Buffer.isBuffer(res.body).should.be.true(); (res.body.length - img.length).should.equal(0); done(); }); }); }); }); superagent-5.2.2/test/node/incoming-multipart.js000066400000000000000000000032121362257374000217700ustar00rootroot00000000000000// var request = require('../support/client') // , express = require('express') // , assert = require('assert') // , app = express() // , fs = require('fs'); // app.get('/', function(req, res){ // res.set('Content-Type', 'multipart/form-data; boundary=awesome'); // // res.write('\r\n'); TODO: formidable bug // res.write('--awesome\r\n'); // res.write('Content-Disposition: attachment; name="image"; filename="something.png"\r\n'); // res.write('Content-Type: image/png\r\n'); // res.write('\r\n'); // res.write('some data'); // res.write('\r\n--awesome\r\n'); // res.write('Content-Disposition: form-data; name="name"\r\n'); // res.write('Content-Type: text/plain\r\n'); // res.write('\r\n'); // res.write('tobi'); // res.write('\r\n--awesome--'); // setTimeout(function(){ // TODO: lolnode... // res.end(); // }, 1000); // }); // var base = 'http://localhost' // var server; // before(function listen(done) { // server = app.listen(0, function listening() { // base += ':' + server.address().port; // done(); // }); // }); // describe('request multipart/form-data', function(){ // describe('req.body', function(){ // it('should be populated with fields', function(done){ // request.get(base, function(err, res){ // if (err) return done(err); // res.status.should.equal(200); // res.body.should.eql({ name: 'tobi' }); // res.files.image.name.should.equal('something.png'); // res.files.image.type.should.equal('image/png'); // assert.equal(null, res.text, 'res.text should be empty for multipart'); // done(); // }); // }) // }) // }) superagent-5.2.2/test/node/inflate.js000066400000000000000000000076161362257374000176040ustar00rootroot00000000000000'use strict'; require('should'); require('should-http'); const assert = require('assert'); const zlib = require('zlib'); let http = require('http'); const express = require('../support/express'); const request = require('../support/client'); if (process.env.HTTP2_TEST) { http = require('http2'); } const app = express(); const subject = 'some long long long long string'; let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); app.get('/binary', (req, res) => { zlib.deflate(subject, (err, buf) => { res.set('Content-Encoding', 'gzip'); res.send(buf); }); }); app.get('/corrupt', (req, res) => { res.set('Content-Encoding', 'gzip'); res.send('blah'); }); app.get('/nocontent', (req, res, next) => { res.statusCode = 204; res.set('Content-Type', 'text/plain'); res.set('Content-Encoding', 'gzip'); res.send(''); }); app.get('/', (req, res, next) => { zlib.deflate(subject, (err, buf) => { res.set('Content-Type', 'text/plain'); res.set('Content-Encoding', 'gzip'); res.send(buf); }); }); app.get('/junk', (req, res) => { zlib.deflate(subject, (err, buf) => { res.set('Content-Type', 'text/plain'); res.set('Content-Encoding', 'gzip'); res.write(buf); res.end(' 0 junk'); }); }); app.get('/chopped', (req, res) => { zlib.deflate(`${subject}123456`, (err, buf) => { res.set('Content-Type', 'text/plain'); res.set('Content-Encoding', 'gzip'); res.send(buf.slice(0, -1)); }); }); describe('zlib', () => { it('should deflate the content', done => { request.get(base).end((err, res) => { res.should.have.status(200); res.text.should.equal(subject); res.headers['content-length'].should.be.below(subject.length); done(); }); }); it('should protect from zip bombs', done => { request .get(base) .buffer(true) .maxResponseSize(1) .end((err, res) => { try { assert.equal('Maximum response size reached', err && err.message); done(); } catch (err_) { done(err_); } }); }); it('should ignore trailing junk', done => { request.get(`${base}/junk`).end((err, res) => { res.should.have.status(200); res.text.should.equal(subject); done(); }); }); it('should ignore missing data', done => { request.get(`${base}/chopped`).end((err, res) => { assert.equal(undefined, err); res.should.have.status(200); res.text.should.startWith(subject); done(); }); }); it('should handle corrupted responses', done => { request.get(`${base}/corrupt`).end((err, res) => { assert(err, 'missing error'); assert(!res, 'response should not be defined'); done(); }); }); it('should handle no content with gzip header', done => { request.get(`${base}/nocontent`).end((err, res) => { assert.ifError(err); assert(res); res.should.have.status(204); res.text.should.equal(''); res.headers.should.not.have.property('content-length'); done(); }); }); describe('without encoding set', () => { it('should buffer if asked', () => { return request .get(`${base}/binary`) .buffer(true) .then(res => { res.should.have.status(200); assert(res.headers['content-length']); assert(res.body.byteLength); assert.equal(subject, res.body.toString()); }); }); it('should emit buffers', done => { request.get(`${base}/binary`).end((err, res) => { res.should.have.status(200); res.headers['content-length'].should.be.below(subject.length); res.on('data', chunk => { chunk.should.have.length(subject.length); }); res.on('end', done); }); }); }); }); superagent-5.2.2/test/node/multipart.js000066400000000000000000000146631362257374000202030ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; const assert = require('assert'); const fs = require('fs'); function read(file) { return fs.readFileSync(file, 'utf8'); } describe('Multipart', () => { describe('#field(name, value)', () => { it('should set a multipart field value', () => { const req = request.post(`${base}/echo`); req.field('user[name]', 'tobi'); req.field('user[age]', '2'); req.field('user[species]', 'ferret'); return req.then(res => { res.body['user[name]'].should.equal('tobi'); res.body['user[age]'].should.equal('2'); res.body['user[species]'].should.equal('ferret'); }); }); it('should work with file attachments', () => { const req = request.post(`${base}/echo`); req.field('name', 'Tobi'); req.attach('document', 'test/node/fixtures/user.html'); req.field('species', 'ferret'); return req.then(res => { res.body.name.should.equal('Tobi'); res.body.species.should.equal('ferret'); const html = res.files.document; html.name.should.equal('user.html'); html.type.should.equal('text/html'); read(html.path).should.equal('

name

'); }); }); }); describe('#attach(name, path)', () => { it('should attach a file', () => { const req = request.post(`${base}/echo`); req.attach('one', 'test/node/fixtures/user.html'); req.attach('two', 'test/node/fixtures/user.json'); req.attach('three', 'test/node/fixtures/user.txt'); return req.then(res => { const html = res.files.one; const json = res.files.two; const text = res.files.three; html.name.should.equal('user.html'); html.type.should.equal('text/html'); read(html.path).should.equal('

name

'); json.name.should.equal('user.json'); json.type.should.equal('application/json'); read(json.path).should.equal('{"name":"tobi"}'); text.name.should.equal('user.txt'); text.type.should.equal('text/plain'); read(text.path).should.equal('Tobi'); }); }); describe('when a file does not exist', () => { it('should fail the request with an error', done => { const req = request.post(`${base}/echo`); req.attach('name', 'foo'); req.attach('name2', 'bar'); req.attach('name3', 'baz'); req.end((err, res) => { assert.ok(Boolean(err), 'Request should have failed.'); err.code.should.equal('ENOENT'); err.message.should.containEql('ENOENT'); err.path.should.equal('foo'); done(); }); }); it('promise should fail', () => { return request .post(`${base}/echo`) .field({ a: 1, b: 2 }) .attach('c', 'does-not-exist.txt') .then( res => assert.fail('It should not allow this'), err => { err.code.should.equal('ENOENT'); err.path.should.equal('does-not-exist.txt'); } ); }); it('should report ECONNREFUSED via the callback', done => { request .post('http://127.0.0.1:1') // nobody is listening there .attach('name', 'file-does-not-exist') .end((err, res) => { assert.ok(Boolean(err), 'Request should have failed'); err.code.should.equal('ECONNREFUSED'); done(); }); }); it('should report ECONNREFUSED via Promise', () => { return request .post('http://127.0.0.1:1') // nobody is listening there .attach('name', 'file-does-not-exist') .then( res => assert.fail('Request should have failed'), err => err.code.should.equal('ECONNREFUSED') ); }); }); }); describe('#attach(name, path, filename)', () => { it('should use the custom filename', () => request .post(`${base}/echo`) .attach('document', 'test/node/fixtures/user.html', 'doc.html') .then(res => { const html = res.files.document; html.name.should.equal('doc.html'); html.type.should.equal('text/html'); read(html.path).should.equal('

name

'); })); it('should fire progress event', done => { let loaded = 0; let total = 0; let uploadEventWasFired = false; request .post(`${base}/echo`) .attach('document', 'test/node/fixtures/user.html') .on('progress', event => { total = event.total; loaded = event.loaded; if (event.direction === 'upload') { uploadEventWasFired = true; } }) .end((err, res) => { if (err) return done(err); const html = res.files.document; html.name.should.equal('user.html'); html.type.should.equal('text/html'); read(html.path).should.equal('

name

'); total.should.equal(223); loaded.should.equal(223); uploadEventWasFired.should.equal(true); done(); }); }); it('filesystem errors should be caught', done => { request .post(`${base}/echo`) .attach('filedata', 'test/node/fixtures/non-existent-file.ext') .end((err, res) => { assert.ok(Boolean(err), 'Request should have failed.'); err.code.should.equal('ENOENT'); err.path.should.equal('test/node/fixtures/non-existent-file.ext'); done(); }); }); }); describe('#field(name, val)', () => { it('should set a multipart field value', done => { request .post(`${base}/echo`) .field('first-name', 'foo') .field('last-name', 'bar') .end((err, res) => { if (err) done(err); res.should.be.ok(); res.body['first-name'].should.equal('foo'); res.body['last-name'].should.equal('bar'); done(); }); }); }); describe('#field(object)', () => { it('should set multiple multipart fields', done => { request .post(`${base}/echo`) .field({ 'first-name': 'foo', 'last-name': 'bar' }) .end((err, res) => { if (err) done(err); res.should.be.ok(); res.body['first-name'].should.equal('foo'); res.body['last-name'].should.equal('bar'); done(); }); }); }); }); superagent-5.2.2/test/node/network-error.js000066400000000000000000000013641362257374000207740ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const net = require('net'); const request = require('../support/client'); const express = require('../support/express'); function getFreePort(fn) { const server = net.createServer(); server.listen(0, () => { const { port } = server.address(); server.close(() => { fn(port); }); }); } describe('with network error', () => { before(function(done) { // connecting to a free port // will trigger a connection refused getFreePort(port => { this.port = port; done(); }); }); it('should error', function(done) { request.get(`http://localhost:${this.port}/`).end((err, res) => { assert(err, 'expected an error'); done(); }); }); }); superagent-5.2.2/test/node/not-modified.js000066400000000000000000000013511362257374000205260ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; describe('request', () => { describe('not modified', () => { let ts; it('should start with 200', done => { request.get(`${base}/if-mod`).end((err, res) => { res.should.have.status(200); res.text.should.match(/^\d+$/); ts = Number(res.text); done(); }); }); it('should then be 304', done => { request .get(`${base}/if-mod`) .set('If-Modified-Since', new Date(ts).toUTCString()) .end((err, res) => { res.should.have.status(304); // res.text.should.be.empty done(); }); }); }); }); superagent-5.2.2/test/node/parsers.js000066400000000000000000000036711362257374000176360ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; const doesntWorkInHttp2 = !process.env.HTTP2_TEST; describe('req.parse(fn)', () => { it('should take precedence over default parsers', done => { request .get(`${base}/manny`) .parse(request.parse['application/json']) .end((err, res) => { assert(res.ok); assert.equal('{"name":"manny"}', res.text); assert.equal('manny', res.body.name); done(); }); }); it('should be the only parser', () => request .get(`${base}/image`) .buffer(false) .parse((res, fn) => { res.on('data', () => {}); }) .then(res => { assert(res.ok); assert.strictEqual(res.text, undefined); res.body.should.eql({}); })); it('should emit error if parser throws', done => { request .get(`${base}/manny`) .parse(() => { throw new Error('I am broken'); }) .on('error', err => { err.message.should.equal('I am broken'); done(); }) .end(); }); it('should emit error if parser returns an error', done => { request .get(`${base}/manny`) .parse((res, fn) => { fn(new Error('I am broken')); }) .on('error', err => { err.message.should.equal('I am broken'); done(); }) .end(); }); if (doesntWorkInHttp2) it('should not emit error on chunked json', done => { request.get(`${base}/chunked-json`).end(err => { assert.ifError(err); done(); }); }); if (doesntWorkInHttp2) it('should not emit error on aborted chunked json', done => { const req = request.get(`${base}/chunked-json`); req.end(err => { assert.ifError(err); done(); }); setTimeout(() => { req.abort(); }, 50); }); }); superagent-5.2.2/test/node/pipe-redirect.js000066400000000000000000000015411362257374000207050ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; const fs = require('fs'); describe('pipe on redirect', () => { const destPath = 'test/node/fixtures/pipe.txt'; after(function removeTmpfile(done) { fs.unlink(destPath, done); }); it('should follow Location', done => { const stream = fs.createWriteStream(destPath); const redirects = []; const req = request .get(base) .on('redirect', res => { redirects.push(res.headers.location); }) .connect({ inapplicable: 'should be ignored' }); stream.on('finish', () => { redirects.should.eql(['/movies', '/movies/all', '/movies/all/0']); fs.readFileSync(destPath, 'utf8').should.eql('first movie page'); done(); }); req.pipe(stream); }); }); superagent-5.2.2/test/node/pipe.js000066400000000000000000000067531362257374000171200ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const express = require('../support/express'); const app = express(); const fs = require('fs'); const bodyParser = require('body-parser'); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); } app.use(bodyParser.json()); app.get('/', (req, res) => { fs.createReadStream('test/node/fixtures/user.json').pipe(res); }); app.get('/redirect', (req, res) => { res.set('Location', '/').sendStatus(302); }); app.get('/badRedirectNoLocation', (req, res) => { res.set('Location', '').sendStatus(302); }); app.post('/', (req, res) => { if (process.env.HTTP2_TEST) { // body-parser does not support http2 yet. // This section can be remove after body-parser supporting http2. res.set('content-type', 'application/json'); req.pipe(res); } else { res.send(req.body); } }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('request pipe', () => { const destPath = 'test/node/fixtures/tmp.json'; after(function removeTmpfile(done) { fs.unlink(destPath, done); }); it('should act as a writable stream', done => { const req = request.post(base); const stream = fs.createReadStream('test/node/fixtures/user.json'); req.type('json'); req.on('response', res => { res.body.should.eql({ name: 'tobi' }); done(); }); stream.pipe(req); }); it('end() stops piping', done => { const stream = fs.createWriteStream(destPath); request.get(base).end((err, res) => { try { res.pipe(stream); return done(new Error('Did not prevent nonsense pipe')); } catch (err_) { /* expected error */ } done(); }); }); it('should act as a readable stream', done => { const stream = fs.createWriteStream(destPath); let responseCalled = false; const req = request.get(base); req.type('json'); req.on('response', res => { res.status.should.eql(200); responseCalled = true; }); stream.on('finish', () => { JSON.parse(fs.readFileSync(destPath, 'utf8')).should.eql({ name: 'tobi' }); responseCalled.should.be.true(); done(); }); req.pipe(stream); }); it('should follow redirects', done => { const stream = fs.createWriteStream(destPath); let responseCalled = false; const req = request.get(base + '/redirect'); req.type('json'); req.on('response', res => { res.status.should.eql(200); responseCalled = true; }); stream.on('finish', () => { JSON.parse(fs.readFileSync(destPath, 'utf8')).should.eql({ name: 'tobi' }); responseCalled.should.be.true(); done(); }); req.pipe(stream); }); it('should not throw on bad redirects', done => { const stream = fs.createWriteStream(destPath); let responseCalled = false; let errorCalled = false; const req = request.get(base + '/badRedirectNoLocation'); req.type('json'); req.on('response', res => { responseCalled = true; }); req.on('error', err => { err.message.should.eql('No location header for redirect'); errorCalled = true; stream.end(); }); stream.on('finish', () => { responseCalled.should.be.false(); errorCalled.should.be.true(); done(); }); req.pipe(stream); }); }); superagent-5.2.2/test/node/query.js000066400000000000000000000123771362257374000173270ustar00rootroot00000000000000'use strict'; let http = require('http'); const assert = require('assert'); const fs = require('fs'); const request = require('../support/client'); const express = require('../support/express'); const app = express(); if (process.env.HTTP2_TEST) { http = require('http2'); } app.get('/raw-query', (req, res) => { res.status(200).send(req.url.slice(req.url.indexOf('?') + 1)); }); app.get('/', (req, res) => { res.status(200).send(req.query); }); app.delete('/url', (req, res) => { res.status(200).send(req.url); }); app.delete('/', (req, res) => { res.status(200).send(req.query); }); app.put('/', (req, res) => { res.status(200).send(req.query); }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('req.query(String)', () => { // This is no longer true as of qs v3.0.0 (https://github.com/ljharb/qs/commit/0c6f2a6318c94f6226d3cf7fe36094e9685042b6) // it('should supply uri malformed error to the callback') it('should support passing in a string', done => { request .del(base) .query('name=t%F6bi') .end((err, res) => { res.body.should.eql({ name: 't%F6bi' }); done(); }); }); it('should work with url query-string and string for query', done => { request .del(`${base}/?name=tobi`) .query('age=2%20') .end((err, res) => { res.body.should.eql({ name: 'tobi', age: '2 ' }); done(); }); }); it('should support compound elements in a string', done => { request .del(base) .query('name=t%F6bi&age=2') .end((err, res) => { res.body.should.eql({ name: 't%F6bi', age: '2' }); done(); }); }); it('should work when called multiple times with a string', done => { request .del(base) .query('name=t%F6bi') .query('age=2%F6') .end((err, res) => { res.body.should.eql({ name: 't%F6bi', age: '2%F6' }); done(); }); }); it('should work with normal `query` object and query string', done => { request .del(base) .query('name=t%F6bi') .query({ age: '2' }) .end((err, res) => { res.body.should.eql({ name: 't%F6bi', age: '2' }); done(); }); }); it('should not encode raw backticks, but leave encoded ones as is', () => { return Promise.all([ request .get(`${base}/raw-query`) .query('name=`t%60bi`&age`=2') .then(res => { res.text.should.eql('name=`t%60bi`&age`=2'); }), request.get(base + '/raw-query?`age%60`=2%60`').then(res => { res.text.should.eql('`age%60`=2%60`'); }), request .get(`${base}/raw-query`) .query('name=`t%60bi`') .query('age`=2') .then(res => { res.text.should.eql('name=`t%60bi`&age`=2'); }) ]); }); }); describe('req.query(Object)', () => { it('should construct the query-string', done => { request .del(base) .query({ name: 'tobi' }) .query({ order: 'asc' }) .query({ limit: ['1', '2'] }) .end((err, res) => { res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] }); done(); }); }); // See commit message for the reasoning here. it('should encode raw backticks', done => { request .get(`${base}/raw-query`) .query({ name: '`tobi`' }) .query({ 'orde%60r': null }) .query({ '`limit`': ['%602`'] }) .end((err, res) => { res.text.should.eql('name=%60tobi%60&orde%2560r&%60limit%60=%25602%60'); done(); }); }); it('should not error on dates', done => { const date = new Date(0); request .del(base) .query({ at: date }) .end((err, res) => { assert.equal(date.toISOString(), res.body.at); done(); }); }); it('should work after setting header fields', done => { request .del(base) .set('Foo', 'bar') .set('Bar', 'baz') .query({ name: 'tobi' }) .query({ order: 'asc' }) .query({ limit: ['1', '2'] }) .end((err, res) => { res.body.should.eql({ name: 'tobi', order: 'asc', limit: ['1', '2'] }); done(); }); }); it('should append to the original query-string', done => { request .del(`${base}/?name=tobi`) .query({ order: 'asc' }) .end((err, res) => { res.body.should.eql({ name: 'tobi', order: 'asc' }); done(); }); }); it('should retain the original query-string', done => { request.del(`${base}/?name=tobi`).end((err, res) => { res.body.should.eql({ name: 'tobi' }); done(); }); }); it('should keep only keys with null querystring values', done => { request .del(`${base}/url`) .query({ nil: null }) .end((err, res) => { res.text.should.equal('/url?nil'); done(); }); }); it('query-string should be sent on pipe', done => { const req = request.put(`${base}/?name=tobi`); const stream = fs.createReadStream('test/node/fixtures/user.json'); req.on('response', res => { res.body.should.eql({ name: 'tobi' }); done(); }); stream.pipe(req); }); }); superagent-5.2.2/test/node/redirects-other-host.js000066400000000000000000000136461362257374000222400ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const express = require('../support/express'); const app = express(); const app2 = express(); const should = require('should'); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); } let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); let base2 = 'http://localhost'; let server2; before(function listen(done) { server2 = http.createServer(app2); server2 = server2.listen(0, function listening() { base2 += `:${server2.address().port}`; done(); }); }); app.all('/test-301', (req, res) => { res.redirect(301, `${base2}/`); }); app.all('/test-302', (req, res) => { res.redirect(302, `${base2}/`); }); app.all('/test-303', (req, res) => { res.redirect(303, `${base2}/`); }); app.all('/test-307', (req, res) => { res.redirect(307, `${base2}/`); }); app.all('/test-308', (req, res) => { res.redirect(308, `${base2}/`); }); app2.all('/', (req, res) => { res.send(req.method); }); describe('request.get', () => { describe('on 301 redirect', () => { it('should follow Location with a GET request', done => { const req = request.get(`${base}/test-301`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 302 redirect', () => { it('should follow Location with a GET request', done => { const req = request.get(`${base}/test-302`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 303 redirect', () => { it('should follow Location with a GET request', done => { const req = request.get(`${base}/test-303`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 307 redirect', () => { it('should follow Location with a GET request', done => { const req = request.get(`${base}/test-307`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 308 redirect', () => { it('should follow Location with a GET request', done => { const req = request.get(`${base}/test-308`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); }); describe('request.post', () => { describe('on 301 redirect', () => { it('should follow Location with a GET request', done => { const req = request.post(`${base}/test-301`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 302 redirect', () => { it('should follow Location with a GET request', done => { const req = request.post(`${base}/test-302`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 303 redirect', () => { it('should follow Location with a GET request', done => { const req = request.post(`${base}/test-303`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('GET'); done(); }); }); }); describe('on 307 redirect', () => { it('should follow Location with a POST request', done => { const req = request.post(`${base}/test-307`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('POST'); done(); }); }); }); describe('on 308 redirect', () => { it('should follow Location with a POST request', done => { const req = request.post(`${base}/test-308`).redirects(1); req.end((err, res) => { const headers = req.req.getHeaders ? req.req.getHeaders() : req.req._headers; headers.host.should.eql(`localhost:${server2.address().port}`); res.status.should.eql(200); res.text.should.eql('POST'); done(); }); }); }); }); superagent-5.2.2/test/node/redirects.js000066400000000000000000000212541362257374000201400ustar00rootroot00000000000000'use strict'; const URL = require('url'); const assert = require('assert'); const setup = require('../support/setup'); const request = require('../support/client'); const base = setup.uri; describe('request', () => { describe('on redirect', () => { it('should merge cookies if agent is used', done => { request .agent() .get(`${base}/cookie-redirect`) .set('Cookie', 'orig=1; replaced=not') .end((err, res) => { try { assert.ifError(err); assert(/orig=1/.test(res.text), 'orig=1/.test'); assert(/replaced=yes/.test(res.text), 'replaced=yes/.test'); assert(/from-redir=1/.test(res.text), 'from-redir=1'); done(); } catch (err_) { done(err_); } }); }); it('should not merge cookies if agent is not used', done => { request .get(`${base}/cookie-redirect`) .set('Cookie', 'orig=1; replaced=not') .end((err, res) => { try { assert.ifError(err); assert(/orig=1/.test(res.text), '/orig=1'); assert(/replaced=not/.test(res.text), '/replaced=not'); assert(!/replaced=yes/.test(res.text), '!/replaced=yes'); assert(!/from-redir/.test(res.text), '!/from-redir'); done(); } catch (err_) { done(err_); } }); }); it('should have previously set cookie for subsquent requests when agent is used', done => { const agent = request.agent(); agent.get(`${base}/set-cookie`).end(err => { assert.ifError(err); agent .get(`${base}/show-cookies`) .set({ Cookie: 'orig=1' }) .end((err, res) => { try { assert.ifError(err); assert(/orig=1/.test(res.text), 'orig=1/.test'); assert(/persist=123/.test(res.text), 'persist=123'); done(); } catch (err_) { done(err_); } }); }); }); it('should follow Location', done => { const redirects = []; request .get(base) .on('redirect', res => { redirects.push(res.headers.location); }) .end((err, res) => { try { const arr = ['/movies', '/movies/all', '/movies/all/0']; redirects.should.eql(arr); res.text.should.equal('first movie page'); done(); } catch (err_) { done(err_); } }); }); it('should follow Location with IP override', () => { const redirects = []; const url = URL.parse(base); return request .get(`http://redir.example.com:${url.port || '80'}${url.pathname}`) .connect({ '*': url.hostname }) .on('redirect', res => { redirects.push(res.headers.location); }) .then(res => { const arr = ['/movies', '/movies/all', '/movies/all/0']; redirects.should.eql(arr); res.text.should.equal('first movie page'); }); }); it('should not follow on HEAD by default', () => { const redirects = []; return request .head(base) .ok(() => true) .on('redirect', res => { redirects.push(res.headers.location); }) .then(res => { redirects.should.eql([]); res.status.should.equal(302); }); }); it('should follow on HEAD when redirects are set', done => { const redirects = []; request .head(base) .redirects(10) .on('redirect', res => { redirects.push(res.headers.location); }) .end((err, res) => { try { const arr = []; arr.push('/movies'); arr.push('/movies/all'); arr.push('/movies/all/0'); redirects.should.eql(arr); assert(!res.text); done(); } catch (err_) { done(err_); } }); }); it('should remove Content-* fields', done => { request .post(`${base}/header`) .type('txt') .set('X-Foo', 'bar') .set('X-Bar', 'baz') .send('hey') .end((err, res) => { try { assert(res.body); res.body.should.have.property('x-foo', 'bar'); res.body.should.have.property('x-bar', 'baz'); res.body.should.not.have.property('content-type'); res.body.should.not.have.property('content-length'); res.body.should.not.have.property('transfer-encoding'); done(); } catch (err_) { done(err_); } }); }); it('should retain cookies', done => { request .get(`${base}/header`) .set('Cookie', 'foo=bar;') .end((err, res) => { try { assert(res.body); res.body.should.have.property('cookie', 'foo=bar;'); done(); } catch (err_) { done(err_); } }); }); it('should not resend query parameters', done => { const redirects = []; const query = []; request .get(`${base}/?foo=bar`) .on('redirect', res => { query.push(res.headers.query); redirects.push(res.headers.location); }) .end((err, res) => { try { const arr = []; arr.push('/movies'); arr.push('/movies/all'); arr.push('/movies/all/0'); redirects.should.eql(arr); res.text.should.equal('first movie page'); query.should.eql(['{"foo":"bar"}', '{}', '{}']); res.headers.query.should.eql('{}'); done(); } catch (err_) { done(err_); } }); }); it('should handle no location header', done => { request.get(`${base}/bad-redirect`).end((err, res) => { try { err.message.should.equal('No location header for redirect'); done(); } catch (err_) { done(err_); } }); }); describe('when relative', () => { it('should redirect to a sibling path', done => { const redirects = []; request .get(`${base}/relative`) .on('redirect', res => { redirects.push(res.headers.location); }) .end((err, res) => { try { redirects.should.eql(['tobi']); res.text.should.equal('tobi'); done(); } catch (err_) { done(err_); } }); }); it('should redirect to a parent path', done => { const redirects = []; request .get(`${base}/relative/sub`) .on('redirect', res => { redirects.push(res.headers.location); }) .end((err, res) => { try { redirects.should.eql(['../tobi']); res.text.should.equal('tobi'); done(); } catch (err_) { done(err_); } }); }); }); }); describe('req.redirects(n)', () => { it('should alter the default number of redirects to follow', done => { const redirects = []; request .get(base) .redirects(2) .on('redirect', res => { redirects.push(res.headers.location); }) .end((err, res) => { try { const arr = []; assert(res.redirect, 'res.redirect'); arr.push('/movies'); arr.push('/movies/all'); redirects.should.eql(arr); res.text.should.match(/Moved Temporarily|Found/); done(); } catch (err_) { done(err_); } }); }); }); describe('on POST', () => { it('should redirect as GET', () => { const redirects = []; return request .post(`${base}/movie`) .send({ name: 'Tobi' }) .redirects(2) .on('redirect', res => { redirects.push(res.headers.location); }) .then(res => { redirects.should.eql(['/movies/all/0']); res.text.should.equal('first movie page'); }); }); it('using multipart/form-data should redirect as GET', () => { const redirects = []; request .post(`${base}/movie`) .type('form') .field('name', 'Tobi') .redirects(2) .on('redirect', res => { redirects.push(res.headers.location); }) .then(res => { redirects.should.eql(['/movies/all/0']); res.text.should.equal('first movie page'); }); }); }); }); superagent-5.2.2/test/node/response-readable-stream.js000066400000000000000000000025111362257374000230330ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const express = require('../support/express'); const app = express(); const fs = require('fs'); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); } app.get('/', (req, res) => { fs.createReadStream('test/node/fixtures/user.json').pipe(res); }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('response', () => { it('should act as a readable stream', done => { const req = request.get(base).buffer(false); req.end((err, res) => { if (err) return done(err); let trackEndEvent = 0; let trackCloseEvent = 0; res.on('end', () => { trackEndEvent++; trackEndEvent.should.equal(1); if (!process.env.HTTP2_TEST) { trackCloseEvent.should.equal(0); // close should not have been called } done(); }); res.on('close', () => { trackCloseEvent++; }); (() => { res.pause(); }).should.not.throw(); (() => { res.resume(); }).should.not.throw(); (() => { res.destroy(); }).should.not.throw(); }); }); }); superagent-5.2.2/test/node/serialize.js000066400000000000000000000010461362257374000201400ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; const assert = require('assert'); describe('req.serialize(fn)', () => { it('should take precedence over default parsers', done => { request .post(`${base}/echo`) .send({ foo: 123 }) .serialize(data => '{"bar":456}') .end((err, res) => { assert.ifError(err); assert.equal('{"bar":456}', res.text); assert.equal(456, res.body.bar); done(); }); }); }); superagent-5.2.2/test/node/set-host.js000066400000000000000000000021421362257374000177150ustar00rootroot00000000000000'use strict'; const request = require('../support/client'); const express = require('../support/express'); const app = express(); const http = require('http'); const assert = require('assert'); describe('request.get().set()', () => { if (process.env.HTTP2_TEST) { return; // request object doesn't look the same } let server; after(function exitServer() { if (typeof server.close === 'function') { server.close(); } else { server.destroy(); } }); it('should set host header after get()', done => { app.get('/', (req, res) => { assert.equal(req.hostname, 'example.com'); res.end(); }); server = http.createServer(app); server.listen(0, function listening() { request .get(`http://localhost:${server.address().port}`) .set('host', 'example.com') .then(() => { return request .get(`http://example.com:${server.address().port}`) .connect({ 'example.com': 'localhost', '*': 'fail' }); }) .then(() => done(), done); }); }); }); superagent-5.2.2/test/node/toError.js000066400000000000000000000016601362257374000176070ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const express = require('../support/express'); const app = express(); let http = require('http'); if (process.env.HTTP2_TEST) { http = require('http2'); } app.get('/', (req, res) => { res.status(400).send('invalid json'); }); let base = 'http://localhost'; let server; before(function listen(done) { server = http.createServer(app); server = server.listen(0, function listening() { base += `:${server.address().port}`; done(); }); }); describe('res.toError()', () => { it('should return an Error', done => { request.get(base).end((err, res) => { var err = res.toError(); assert.equal(err.status, 400); assert.equal(err.method, 'GET'); assert.equal(err.path, '/'); assert.equal(err.message, 'cannot GET / (400)'); assert.equal(err.text, 'invalid json'); done(); }); }); }); superagent-5.2.2/test/node/unix-sockets.js000066400000000000000000000057531362257374000206160ustar00rootroot00000000000000'use strict'; const assert = require('assert'); let http = require('http'); let https = require('https'); const os = require('os'); const fs = require('fs'); const express = require('../support/express'); const request = require('../support/client'); const app = express(); const key = fs.readFileSync(`${__dirname}/fixtures/key.pem`); const cert = fs.readFileSync(`${__dirname}/fixtures/cert.pem`); const cacert = fs.readFileSync(`${__dirname}/fixtures/ca.cert.pem`); const httpSockPath = [os.tmpdir(), 'superagent-http.sock'].join('/'); const httpsSockPath = [os.tmpdir(), 'superagent-https.sock'].join('/'); let httpServer; let httpsServer; if (process.env.HTTP2_TEST) { http = https = require('http2'); } app.get('/', (req, res) => { res.send('root ok!'); }); app.get('/request/path', (req, res) => { res.send('request path ok!'); }); describe('[unix-sockets] http', () => { if (process.platform === 'win32') { return; } before(done => { if (fs.existsSync(httpSockPath) === true) { // try unlink if sock file exists fs.unlinkSync(httpSockPath); } httpServer = http.createServer(app); httpServer.listen(httpSockPath, done); }); const base = `http+unix://${httpSockPath.replace(/\//g, '%2F')}`; describe('request', () => { it('path: / (root)', done => { request.get(`${base}/`).end((err, res) => { assert(res.ok); assert.strictEqual('root ok!', res.text); done(); }); }); it('path: /request/path', done => { request.get(`${base}/request/path`).end((err, res) => { assert(res.ok); assert.strictEqual('request path ok!', res.text); done(); }); }); }); after(() => { if (typeof httpServer.close === 'function') { httpServer.close(); } else httpServer.destroy(); }); }); describe('[unix-sockets] https', () => { if (process.platform === 'win32') { return; } before(done => { if (fs.existsSync(httpsSockPath) === true) { // try unlink if sock file exists fs.unlinkSync(httpsSockPath); } if (process.env.HTTP2_TEST) { httpsServer = https.createSecureServer({ key, cert }, app); } else { httpsServer = https.createServer({ key, cert }, app); } httpsServer.listen(httpsSockPath, done); }); const base = `https+unix://${httpsSockPath.replace(/\//g, '%2F')}`; describe('request', () => { it('path: / (root)', done => { request .get(`${base}/`) .ca(cacert) .end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('root ok!', res.text); done(); }); }); it('path: /request/path', done => { request .get(`${base}/request/path`) .ca(cacert) .end((err, res) => { assert.ifError(err); assert(res.ok); assert.strictEqual('request path ok!', res.text); done(); }); }); }); after(done => { httpsServer.close(done); }); }); superagent-5.2.2/test/node/user-agent.js000066400000000000000000000005611362257374000202240ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const request = require('../support/client'); const setup = require('../support/setup'); const base = setup.uri; describe('req.get()', () => { it('should not set a default user-agent', () => request.get(`${base}/ua`).then(res => { assert(res.headers); assert(!res.headers['user-agent']); })); }); superagent-5.2.2/test/node/utils.js000066400000000000000000000022111362257374000173040ustar00rootroot00000000000000'use strict'; const assert = require('assert'); const utils = require('../../lib/utils'); describe('utils.type(str)', () => { it('should return the mime type', () => { utils .type('application/json; charset=utf-8') .should.equal('application/json'); utils.type('application/json').should.equal('application/json'); }); }); describe('utils.params(str)', () => { it('should return the field parameters', () => { const obj = utils.params('application/json; charset=utf-8; foo = bar'); obj.charset.should.equal('utf-8'); obj.foo.should.equal('bar'); utils.params('application/json').should.eql({}); }); }); describe('utils.parseLinks(str)', () => { it('should parse links', () => { const str = '; rel="next", ; rel="last"'; const ret = utils.parseLinks(str); ret.next.should.equal( 'https://api.github.com/repos/visionmedia/mocha/issues?page=2' ); ret.last.should.equal( 'https://api.github.com/repos/visionmedia/mocha/issues?page=5' ); }); }); superagent-5.2.2/test/redirects.js000066400000000000000000000066241362257374000172170ustar00rootroot00000000000000const setup = require('./support/setup'); const base = setup.uri; const isMSIE = !setup.NODE && /Trident\//.test(navigator.userAgent); const assert = require('assert'); const request = require('./support/client'); describe('request', function() { this.timeout(20000); describe('on redirect', () => { it('should retain header fields', done => { request .get(`${base}/header`) .set('X-Foo', 'bar') .end((err, res) => { try { assert(res.body); res.body.should.have.property('x-foo', 'bar'); done(); } catch (err_) { done(err_); } }); }); it('should preserve timeout across redirects', done => { request .get(`${base}/movies/random`) .timeout(250) .end((err, res) => { try { assert(err instanceof Error, 'expected an error'); err.should.have.property('timeout', 250); done(); } catch (err_) { done(err_); } }); }); it('should successfully redirect after retry on error', done => { const id = Math.random() * 1000000 * Date.now(); request .get(`${base}/error/redirect/${id}`) .retry(2) .end((err, res) => { assert(res.ok, 'response should be ok'); assert(res.text, 'first movie page'); done(); }); }); it('should preserve retries across redirects', done => { const id = Math.random() * 1000000 * Date.now(); request .get(`${base}/error/redirect-error${id}`) .retry(2) .end((err, res) => { assert(err, 'expected an error'); assert.equal(2, err.retries, 'expected an error with .retries'); assert.equal(500, err.status, 'expected an error status of 500'); done(); }); }); }); describe('on 303', () => { it('should redirect with same method', done => { request .put(`${base}/redirect-303`) .send({ msg: 'hello' }) .redirects(1) .on('redirect', res => { res.headers.location.should.equal('/reply-method'); }) .end((err, res) => { if (err) { done(err); return; } res.text.should.equal('method=get'); done(); }); }); }); describe('on 307', () => { it('should redirect with same method', done => { if (isMSIE) return done(); // IE9 broken request .put(`${base}/redirect-307`) .send({ msg: 'hello' }) .redirects(1) .on('redirect', res => { res.headers.location.should.equal('/reply-method'); }) .end((err, res) => { if (err) { done(err); return; } res.text.should.equal('method=put'); done(); }); }); }); describe('on 308', () => { it('should redirect with same method', done => { if (isMSIE) return done(); // IE9 broken request .put(`${base}/redirect-308`) .send({ msg: 'hello' }) .redirects(1) .on('redirect', res => { res.headers.location.should.equal('/reply-method'); }) .end((err, res) => { if (err) { done(err); return; } res.text.should.equal('method=put'); done(); }); }); }); }); superagent-5.2.2/test/request.js000066400000000000000000000543631362257374000167260ustar00rootroot00000000000000const setup = require('./support/setup'); const { uri } = setup; const assert = require('assert'); const request = require('./support/client'); describe('request', function() { this.timeout(20000); it('Request inheritance', () => { assert(request.get(`${uri}/`) instanceof request.Request); }); it('request() simple GET without callback', next => { request('GET', 'test/test.request.js').end(); next(); }); it('request() simple GET', next => { request('GET', `${uri}/ok`).end((err, res) => { try { assert(res instanceof request.Response, 'respond with Response'); assert(res.ok, 'response should be ok'); assert(res.text, 'res.text'); next(); } catch (err_) { next(err_); } }); }); it('request() simple HEAD', next => { request.head(`${uri}/ok`).end((err, res) => { try { assert(res instanceof request.Response, 'respond with Response'); assert(res.ok, 'response should be ok'); assert(!res.text, 'res.text'); next(); } catch (err_) { next(err_); } }); }); it('request() GET 5xx', next => { request('GET', `${uri}/error`).end((err, res) => { try { assert(err); assert.equal(err.message, 'Internal Server Error'); assert(!res.ok, 'response should not be ok'); assert(res.error, 'response should be an error'); assert(!res.clientError, 'response should not be a client error'); assert(res.serverError, 'response should be a server error'); next(); } catch (err_) { next(err_); } }); }); it('request() GET 4xx', next => { request('GET', `${uri}/notfound`).end((err, res) => { try { assert(err); assert.equal(err.message, 'Not Found'); assert(!res.ok, 'response should not be ok'); assert(res.error, 'response should be an error'); assert(res.clientError, 'response should be a client error'); assert(!res.serverError, 'response should not be a server error'); next(); } catch (err_) { next(err_); } }); }); it('request() GET 404 Not Found', next => { request('GET', `${uri}/notfound`).end((err, res) => { try { assert(err); assert(res.notFound, 'response should be .notFound'); next(); } catch (err_) { next(err_); } }); }); it('request() GET 400 Bad Request', next => { request('GET', `${uri}/bad-request`).end((err, res) => { try { assert(err); assert(res.badRequest, 'response should be .badRequest'); next(); } catch (err_) { next(err_); } }); }); it('request() GET 401 Bad Request', next => { request('GET', `${uri}/unauthorized`).end((err, res) => { try { assert(err); assert(res.unauthorized, 'response should be .unauthorized'); next(); } catch (err_) { next(err_); } }); }); it('request() GET 406 Not Acceptable', next => { request('GET', `${uri}/not-acceptable`).end((err, res) => { try { assert(err); assert(res.notAcceptable, 'response should be .notAcceptable'); next(); } catch (err_) { next(err_); } }); }); it('request() GET 204 No Content', next => { request('GET', `${uri}/no-content`).end((err, res) => { try { assert.ifError(err); assert(res.noContent, 'response should be .noContent'); next(); } catch (err_) { next(err_); } }); }); it('request() DELETE 204 No Content', next => { request('DELETE', `${uri}/no-content`).end((err, res) => { try { assert.ifError(err); assert(res.noContent, 'response should be .noContent'); next(); } catch (err_) { next(err_); } }); }); it('request() header parsing', next => { request('GET', `${uri}/notfound`).end((err, res) => { try { assert(err); assert.equal('text/html; charset=utf-8', res.header['content-type']); assert.equal('Express', res.header['x-powered-by']); next(); } catch (err_) { next(err_); } }); }); it('request() .status', next => { request('GET', `${uri}/notfound`).end((err, res) => { try { assert(err); assert.equal(404, res.status, 'response .status'); assert.equal(4, res.statusType, 'response .statusType'); next(); } catch (err_) { next(err_); } }); }); it('get()', next => { request.get(`${uri}/notfound`).end((err, res) => { try { assert(err); assert.equal(404, res.status, 'response .status'); assert.equal(4, res.statusType, 'response .statusType'); next(); } catch (err_) { next(err_); } }); }); it('put()', next => { request.put(`${uri}/user/12`).end((err, res) => { try { assert.equal('updated', res.text, 'response text'); next(); } catch (err_) { next(err_); } }); }); it('put().send()', next => { request .put(`${uri}/user/13/body`) .send({ user: 'new' }) .end((err, res) => { try { assert.equal('received new', res.text, 'response text'); next(); } catch (err_) { next(err_); } }); }); it('post()', next => { request.post(`${uri}/user`).end((err, res) => { try { assert.equal('created', res.text, 'response text'); next(); } catch (err_) { next(err_); } }); }); it('del()', next => { request.del(`${uri}/user/12`).end((err, res) => { try { assert.equal('deleted', res.text, 'response text'); next(); } catch (err_) { next(err_); } }); }); it('delete()', next => { request.delete(`${uri}/user/12`).end((err, res) => { try { assert.equal('deleted', res.text, 'response text'); next(); } catch (err_) { next(err_); } }); }); it('post() data', next => { request .post(`${uri}/todo/item`) .type('application/octet-stream') .send('tobi') .end((err, res) => { try { assert.equal('added "tobi"', res.text, 'response text'); next(); } catch (err_) { next(err_); } }); }); it('request .type()', next => { request .post(`${uri}/user/12/pet`) .type('urlencoded') .send('pet=tobi') .end((err, res) => { try { assert.equal('added pet "tobi"', res.text, 'response text'); next(); } catch (err_) { next(err_); } }); }); it('request .type() with alias', next => { request .post(`${uri}/user/12/pet`) .type('application/x-www-form-urlencoded') .send('pet=tobi') .end((err, res) => { try { assert.equal('added pet "tobi"', res.text, 'response text'); next(); } catch (err_) { next(err_); } }); }); it('request .get() with no data or callback', next => { request.get(`${uri}/echo-header/content-type`); next(); }); it('request .send() with no data only', next => { request .post(`${uri}/user/5/pet`) .type('urlencoded') .send('pet=tobi'); next(); }); it('request .send() with callback only', next => { request .get(`${uri}/echo-header/accept`) .set('Accept', 'foo/bar') .end((err, res) => { try { assert.equal('foo/bar', res.text); next(); } catch (err_) { next(err_); } }); }); it('request .accept() with json', next => { request .get(`${uri}/echo-header/accept`) .accept('json') .end((err, res) => { try { assert.equal('application/json', res.text); next(); } catch (err_) { next(err_); } }); }); it('request .accept() with application/json', next => { request .get(`${uri}/echo-header/accept`) .accept('application/json') .end((err, res) => { try { assert.equal('application/json', res.text); next(); } catch (err_) { next(err_); } }); }); it('request .accept() with xml', next => { request .get(`${uri}/echo-header/accept`) .accept('xml') .end((err, res) => { try { // We can't depend on mime module to be consistent with this assert(res.text == 'application/xml' || res.text == 'text/xml'); next(); } catch (err_) { next(err_); } }); }); it('request .accept() with application/xml', next => { request .get(`${uri}/echo-header/accept`) .accept('application/xml') .end((err, res) => { try { assert.equal('application/xml', res.text); next(); } catch (err_) { next(err_); } }); }); // FIXME: ie6 will POST rather than GET here due to data(), // but I'm not 100% sure why. Newer IEs are OK. it('request .end()', next => { request .put(`${uri}/echo-header/content-type`) .set('Content-Type', 'text/plain') .send('wahoo') .end((err, res) => { try { assert.equal('text/plain', res.text); next(); } catch (err_) { next(err_); } }); }); it('request .send()', next => { request .put(`${uri}/echo-header/content-type`) .set('Content-Type', 'text/plain') .send('wahoo') .end((err, res) => { try { assert.equal('text/plain', res.text); next(); } catch (err_) { next(err_); } }); }); it('request .set()', next => { request .put(`${uri}/echo-header/content-type`) .set('Content-Type', 'text/plain') .send('wahoo') .end((err, res) => { try { assert.equal('text/plain', res.text); next(); } catch (err_) { next(err_); } }); }); it('request .set(object)', next => { request .put(`${uri}/echo-header/content-type`) .set({ 'Content-Type': 'text/plain' }) .send('wahoo') .end((err, res) => { try { assert.equal('text/plain', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST urlencoded', next => { request .post(`${uri}/pet`) .type('urlencoded') .send({ name: 'Manny', species: 'cat' }) .end((err, res) => { try { assert.equal('added Manny the cat', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST json', next => { request .post(`${uri}/pet`) .type('json') .send({ name: 'Manny', species: 'cat' }) .end((err, res) => { try { assert.equal('added Manny the cat', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST json array', next => { request .post(`${uri}/echo`) .send([1, 2, 3]) .end((err, res) => { try { assert.equal( 'application/json', res.header['content-type'].split(';')[0] ); assert.equal('[1,2,3]', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST json default', next => { request .post(`${uri}/pet`) .send({ name: 'Manny', species: 'cat' }) .end((err, res) => { try { assert.equal('added Manny the cat', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST json contentType charset', next => { request .post(`${uri}/echo`) .set('Content-Type', 'application/json; charset=UTF-8') .send({ data: ['data1', 'data2'] }) .end((err, res) => { try { assert.equal('{"data":["data1","data2"]}', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST json contentType vendor', next => { request .post(`${uri}/echo`) .set('Content-Type', 'application/vnd.example+json') .send({ data: ['data1', 'data2'] }) .end((err, res) => { try { assert.equal('{"data":["data1","data2"]}', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST multiple .send() calls', next => { request .post(`${uri}/pet`) .send({ name: 'Manny' }) .send({ species: 'cat' }) .end((err, res) => { try { assert.equal('added Manny the cat', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST multiple .send() strings', next => { request .post(`${uri}/echo`) .send('user[name]=tj') .send('user[email]=tj@vision-media.ca') .end((err, res) => { try { assert.equal( 'application/x-www-form-urlencoded', res.header['content-type'].split(';')[0] ); assert.equal( res.text, 'user[name]=tj&user[email]=tj@vision-media.ca' ); next(); } catch (err_) { next(err_); } }); }); it('POST with no data', next => { request .post(`${uri}/empty-body`) .send() .end((err, res) => { try { assert.ifError(err); assert(res.noContent, 'response should be .noContent'); next(); } catch (err_) { next(err_); } }); }); it('GET .type', next => { request.get(`${uri}/pets`).end((err, res) => { try { assert.equal('application/json', res.type); next(); } catch (err_) { next(err_); } }); }); it('GET Content-Type params', next => { request.get(`${uri}/text`).end((err, res) => { try { assert.equal('utf-8', res.charset); next(); } catch (err_) { next(err_); } }); }); it('GET json', next => { request.get(`${uri}/pets`).end((err, res) => { try { assert.deepEqual(res.body, ['tobi', 'loki', 'jane']); next(); } catch (err_) { next(err_); } }); }); it('GET json-seq', next => { request .get(`${uri}/json-seq`) .buffer() .end((err, res) => { try { assert.ifError(err); assert.deepEqual(res.text, '\u001E{"id":1}\n\u001E{"id":2}\n'); next(); } catch (err_) { next(err_); } }); }); it('GET x-www-form-urlencoded', next => { request.get(`${uri}/foo`).end((err, res) => { try { assert.deepEqual(res.body, { foo: 'bar' }); next(); } catch (err_) { next(err_); } }); }); it('GET shorthand', next => { request.get(`${uri}/foo`, (err, res) => { try { assert.equal('foo=bar', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST shorthand', next => { request.post(`${uri}/user/0/pet`, { pet: 'tobi' }, (err, res) => { try { assert.equal('added pet "tobi"', res.text); next(); } catch (err_) { next(err_); } }); }); it('POST shorthand without callback', next => { request.post(`${uri}/user/0/pet`, { pet: 'tobi' }).end((err, res) => { try { assert.equal('added pet "tobi"', res.text); next(); } catch (err_) { next(err_); } }); }); it('GET querystring object with array', next => { request .get(`${uri}/querystring`) .query({ val: ['a', 'b', 'c'] }) .end((err, res) => { try { assert.deepEqual(res.body, { val: ['a', 'b', 'c'] }); next(); } catch (err_) { next(err_); } }); }); it('GET querystring object with array and primitives', next => { request .get(`${uri}/querystring`) .query({ array: ['a', 'b', 'c'], string: 'foo', number: 10 }) .end((err, res) => { try { assert.deepEqual(res.body, { array: ['a', 'b', 'c'], string: 'foo', number: 10 }); next(); } catch (err_) { next(err_); } }); }); it('GET querystring object with two arrays', next => { request .get(`${uri}/querystring`) .query({ array1: ['a', 'b', 'c'], array2: [1, 2, 3] }) .end((err, res) => { try { assert.deepEqual(res.body, { array1: ['a', 'b', 'c'], array2: [1, 2, 3] }); next(); } catch (err_) { next(err_); } }); }); it('GET querystring object', next => { request .get(`${uri}/querystring`) .query({ search: 'Manny' }) .end((err, res) => { try { assert.deepEqual(res.body, { search: 'Manny' }); next(); } catch (err_) { next(err_); } }); }); it('GET querystring append original', next => { request .get(`${uri}/querystring?search=Manny`) .query({ range: '1..5' }) .end((err, res) => { try { assert.deepEqual(res.body, { search: 'Manny', range: '1..5' }); next(); } catch (err_) { next(err_); } }); }); it('GET querystring multiple objects', next => { request .get(`${uri}/querystring`) .query({ search: 'Manny' }) .query({ range: '1..5' }) .query({ order: 'desc' }) .end((err, res) => { try { assert.deepEqual(res.body, { search: 'Manny', range: '1..5', order: 'desc' }); next(); } catch (err_) { next(err_); } }); }); it('GET querystring with strings', next => { request .get(`${uri}/querystring`) .query('search=Manny') .query('range=1..5') .query('order=desc') .end((err, res) => { try { assert.deepEqual(res.body, { search: 'Manny', range: '1..5', order: 'desc' }); next(); } catch (err_) { next(err_); } }); }); it('GET querystring with strings and objects', next => { request .get(`${uri}/querystring`) .query('search=Manny') .query({ order: 'desc', range: '1..5' }) .end((err, res) => { try { assert.deepEqual(res.body, { search: 'Manny', range: '1..5', order: 'desc' }); next(); } catch (err_) { next(err_); } }); }); it('GET shorthand payload goes to querystring', next => { request.get( `${uri}/querystring`, { foo: 'FOO', bar: 'BAR' }, (err, res) => { try { assert.deepEqual(res.body, { foo: 'FOO', bar: 'BAR' }); next(); } catch (err_) { next(err_); } } ); }); it('HEAD shorthand payload goes to querystring', next => { request.head( `${uri}/querystring-in-header`, { foo: 'FOO', bar: 'BAR' }, (err, res) => { try { assert.deepEqual(JSON.parse(res.headers.query), { foo: 'FOO', bar: 'BAR' }); next(); } catch (err_) { next(err_); } } ); }); it('request(method, url)', next => { request('GET', `${uri}/foo`).end((err, res) => { try { assert.equal('bar', res.body.foo); next(); } catch (err_) { next(err_); } }); }); it('request(url)', next => { request(`${uri}/foo`).end((err, res) => { try { assert.equal('bar', res.body.foo); next(); } catch (err_) { next(err_); } }); }); it('request(url, fn)', next => { request(`${uri}/foo`, (err, res) => { try { assert.equal('bar', res.body.foo); next(); } catch (err_) { next(err_); } }); }); it('req.timeout(ms)', next => { const req = request.get(`${uri}/delay/3000`).timeout(1000); req.end((err, res) => { try { assert(err, 'error missing'); assert.equal(1000, err.timeout, 'err.timeout missing'); assert.equal( 'Timeout of 1000ms exceeded', err.message, 'err.message incorrect' ); assert.equal(null, res); assert(req.timedout, true); next(); } catch (err_) { next(err_); } }); }); it('req.timeout(ms) with redirect', next => { const req = request.get(`${uri}/delay/const`).timeout(1000); req.end((err, res) => { try { assert(err, 'error missing'); assert.equal(1000, err.timeout, 'err.timeout missing'); assert.equal( 'Timeout of 1000ms exceeded', err.message, 'err.message incorrect' ); assert.equal(null, res); assert(req.timedout, true); next(); } catch (err_) { next(err_); } }); }); it('request event', next => { request .get(`${uri}/foo`) .on('request', req => { try { assert.equal(`${uri}/foo`, req.url); next(); } catch (err) { next(err); } }) .end(); }); it('response event', next => { request .get(`${uri}/foo`) .on('response', res => { try { assert.equal('bar', res.body.foo); next(); } catch (err) { next(err); } }) .end(); }); it('response should set statusCode', next => { request.get(`${uri}/ok`, (err, res) => { try { assert.strictEqual(res.statusCode, 200); next(); } catch (err_) { next(err_); } }); }); it('req.toJSON()', next => { request.get(`${uri}/ok`).end((err, res) => { try { const j = (res.request || res.req).toJSON(); ['url', 'method', 'data', 'headers'].forEach(prop => { assert(j.hasOwnProperty(prop)); }); next(); } catch (err_) { next(err_); } }); }); }); superagent-5.2.2/test/retry.js000066400000000000000000000154351362257374000164000ustar00rootroot00000000000000const setup = require('./support/setup'); const base = setup.uri; const assert = require('assert'); const request = require('./support/client'); function uniqid() { return Math.random() * 10000000; } describe('.retry(count)', function() { this.timeout(15000); it('should not retry if passed "0"', done => { request .get(`${base}/error`) .retry(0) .end((err, res) => { try { assert(err, 'expected an error'); assert.equal( undefined, err.retries, 'expected an error without .retries' ); assert.equal(500, err.status, 'expected an error status of 500'); done(); } catch (err_) { done(err_); } }); }); it('should not retry if passed an invalid number', done => { request .get(`${base}/error`) .retry(-2) .end((err, res) => { try { assert(err, 'expected an error'); assert.equal( undefined, err.retries, 'expected an error without .retries' ); assert.equal(500, err.status, 'expected an error status of 500'); done(); } catch (err_) { done(err_); } }); }); it('should not retry if passed undefined', done => { request .get(`${base}/error`) .retry(undefined) .end((err, res) => { try { assert(err, 'expected an error'); assert.equal( undefined, err.retries, 'expected an error without .retries' ); assert.equal(500, err.status, 'expected an error status of 500'); done(); } catch (err_) { done(err_); } }); }); it('should handle server error after repeat attempt', done => { request .get(`${base}/error`) .retry(2) .end((err, res) => { try { assert(err, 'expected an error'); assert.equal(2, err.retries, 'expected an error with .retries'); assert.equal(500, err.status, 'expected an error status of 500'); done(); } catch (err_) { done(err_); } }); }); it('should retry if passed nothing', done => { request .get(`${base}/error`) .retry() .end((err, res) => { try { assert(err, 'expected an error'); assert.equal(1, err.retries, 'expected an error with .retries'); assert.equal(500, err.status, 'expected an error status of 500'); done(); } catch (err_) { done(err_); } }); }); it('should retry if passed "true"', done => { request .get(`${base}/error`) .retry(true) .end((err, res) => { try { assert(err, 'expected an error'); assert.equal(1, err.retries, 'expected an error with .retries'); assert.equal(500, err.status, 'expected an error status of 500'); done(); } catch (err_) { done(err_); } }); }); it('should handle successful request after repeat attempt from server error', done => { request .get(`${base}/error/ok/${uniqid()}`) .query({ qs: 'present' }) .retry(2) .end((err, res) => { try { assert.ifError(err); assert(res.ok, 'response should be ok'); assert(res.text, 'res.text'); done(); } catch (err_) { done(err_); } }); }); it('should handle server timeout error after repeat attempt', done => { request .get(`${base}/delay/400`) .timeout(200) .retry(2) .end((err, res) => { try { assert(err, 'expected an error'); assert.equal(2, err.retries, 'expected an error with .retries'); assert.equal( 'number', typeof err.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', err.code, 'expected abort error code'); done(); } catch (err_) { done(err_); } }); }); it('should handle successful request after repeat attempt from server timeout', done => { const url = `/delay/1200/ok/${uniqid()}?built=in`; request .get(base + url) .query('string=ified') .query({ json: 'ed' }) .timeout(600) .retry(2) .end((err, res) => { try { assert.ifError(err); assert(res.ok, 'response should be ok'); assert.equal(res.text, `ok = ${url}&string=ified&json=ed`); done(); } catch (err_) { done(err_); } }); }); it('should correctly abort a retry attempt', done => { let aborted = false; const req = request .get(`${base}/delay/400`) .timeout(200) .retry(2); req.end((err, res) => { try { assert(false, 'should not complete the request'); } catch (err_) { done(err_); } }); req.on('abort', () => { aborted = true; }); setTimeout(() => { req.abort(); setTimeout(() => { try { assert(aborted, 'should be aborted'); done(); } catch (err) { done(err); } }, 150); }, 150); }); it('should correctly retain header fields', done => { request .get(`${base}/error/ok/${uniqid()}`) .query({ qs: 'present' }) .retry(2) .set('X-Foo', 'bar') .end((err, res) => { try { assert.ifError(err); assert(res.body); res.body.should.have.property('x-foo', 'bar'); done(); } catch (err_) { done(err_); } }); }); it('should not retry on 4xx responses', done => { request .get(`${base}/bad-request`) .retry(2) .end((err, res) => { try { assert(err, 'expected an error'); assert.equal(0, err.retries, 'expected an error with 0 .retries'); assert.equal(400, err.status, 'expected an error status of 400'); done(); } catch (err_) { done(err_); } }); }); it('should execute callback on retry if passed', done => { let callbackCallCount = 0; function retryCallback(request) { callbackCallCount++; } request .get(`${base}/error`) .retry(2, retryCallback) .end((err, res) => { try { assert(err, 'expected an error'); assert.equal(2, err.retries, 'expected an error with .retries'); assert.equal(500, err.status, 'expected an error status of 500'); assert.equal( 2, callbackCallCount, 'expected the callback to be called on each retry' ); done(); } catch (err_) { done(err_); } }); }); }); superagent-5.2.2/test/support/000077500000000000000000000000001362257374000164015ustar00rootroot00000000000000superagent-5.2.2/test/support/blank.js000066400000000000000000000000001362257374000200140ustar00rootroot00000000000000superagent-5.2.2/test/support/client.js000066400000000000000000000002001362257374000202050ustar00rootroot00000000000000const request = require('../..'); if (process.env.HTTP2_TEST) { request.http2 = true; } exports = module.exports = request; superagent-5.2.2/test/support/express/000077500000000000000000000000001362257374000200725ustar00rootroot00000000000000superagent-5.2.2/test/support/express/index.js000066400000000000000000000014311362257374000215360ustar00rootroot00000000000000const express = require('express'); let http2Req; let http2Res; if (process.env.HTTP2_TEST) { const http2 = require('http2'); const reqDecorator = require('./requestDecorator'); const resDecorator = require('./responseDecorator'); http2Req = reqDecorator(Object.create(http2.Http2ServerRequest.prototype)); http2Res = resDecorator(Object.create(http2.Http2ServerResponse.prototype)); } function createApp() { const app = express(); if (process.env.HTTP2_TEST) { app.request = Object.create(http2Req, { app: { configurable: true, enumerable: true, writable: true, value: app } }); app.response = Object.create(http2Res, { app: { configurable: true, enumerable: true, writable: true, value: app } }); } return app; } module.exports = createApp; superagent-5.2.2/test/support/express/requestDecorator.js000066400000000000000000000277661362257374000240050ustar00rootroot00000000000000/*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ 'use strict'; /** * Module dependencies. * @private */ const accepts = require('accepts'); const { isIP } = require('net'); const typeis = require('type-is'); const fresh = require('fresh'); const parseRange = require('range-parser'); const parse = require('parseurl'); const proxyaddr = require('proxy-addr'); /** * Request prototype. * @public */ /** * Module exports. * @public */ module.exports = setMethods; function setMethods(req) { /** * Return request header. * * The `Referrer` header field is special-cased, * both `Referrer` and `Referer` are interchangeable. * * Examples: * * req.get('Content-Type'); * // => "text/plain" * * req.get('content-type'); * // => "text/plain" * * req.get('Something'); * // => undefined * * Aliased as `req.header()`. * * @param {String} name * @return {String} * @public */ req.get = req.header = function header(name) { if (!name) { throw new TypeError('name argument is required to req.get'); } if (typeof name !== 'string') { throw new TypeError('name must be a string to req.get'); } const lc = name.toLowerCase(); switch (lc) { case 'referer': case 'referrer': return this.headers.referrer || this.headers.referer; default: return this.headers[lc]; } }; /** * To do: update docs. * * Check if the given `type(s)` is acceptable, returning * the best match when true, otherwise `undefined`, in which * case you should respond with 406 "Not Acceptable". * * The `type` value may be a single MIME type string * such as "application/json", an extension name * such as "json", a comma-delimited list such as "json, html, text/plain", * an argument list such as `"json", "html", "text/plain"`, * or an array `["json", "html", "text/plain"]`. When a list * or array is given, the _best_ match, if any is returned. * * Examples: * * // Accept: text/html * req.accepts('html'); * // => "html" * * // Accept: text/*, application/json * req.accepts('html'); * // => "html" * req.accepts('text/html'); * // => "text/html" * req.accepts('json, text'); * // => "json" * req.accepts('application/json'); * // => "application/json" * * // Accept: text/*, application/json * req.accepts('image/png'); * req.accepts('png'); * // => undefined * * // Accept: text/*;q=.5, application/json * req.accepts(['html', 'json']); * req.accepts('html', 'json'); * req.accepts('html, json'); * // => "json" * * @param {String|Array} type(s) * @return {String|Array|Boolean} * @public */ req.accepts = function() { const accept = accepts(this); return accept.types.apply(accept, arguments); }; /** * Check if the given `encoding`s are accepted. * * @param {String} ...encoding * @return {String|Array} * @public */ req.acceptsEncodings = function() { const accept = accepts(this); return accept.encodings.apply(accept, arguments); }; /** * Check if the given `charset`s are acceptable, * otherwise you should respond with 406 "Not Acceptable". * * @param {String} ...charset * @return {String|Array} * @public */ req.acceptsCharsets = function() { const accept = accepts(this); return accept.charsets.apply(accept, arguments); }; /** * Check if the given `lang`s are acceptable, * otherwise you should respond with 406 "Not Acceptable". * * @param {String} ...lang * @return {String|Array} * @public */ req.acceptsLanguages = function() { const accept = accepts(this); return accept.languages.apply(accept, arguments); }; /** * Parse Range header field, capping to the given `size`. * * Unspecified ranges such as "0-" require knowledge of your resource length. In * the case of a byte range this is of course the total number of bytes. If the * Range header field is not given `undefined` is returned, `-1` when unsatisfiable, * and `-2` when syntactically invalid. * * When ranges are returned, the array has a "type" property which is the type of * range that is required (most commonly, "bytes"). Each array element is an object * with a "start" and "end" property for the portion of the range. * * The "combine" option can be set to `true` and overlapping & adjacent ranges * will be combined into a single range. * * NOTE: remember that ranges are inclusive, so for example "Range: users=0-3" * should respond with 4 users when available, not 3. * * @param {number} size * @param {object} [options] * @param {boolean} [options.combine=false] * @return {number|array} * @public */ req.range = function range(size, options) { const range = this.get('Range'); if (!range) return; return parseRange(size, range, options); }; /** * Parse the query string of `req.url`. * * This uses the "query parser" setting to parse the raw * string into an object. * * @return {String} * @api public */ defineGetter(req, 'query', function query() { const queryparse = this.app.get('query parser fn'); if (!queryparse) { // parsing is disabled return Object.create(null); } const querystring = parse(this).query; return queryparse(querystring); }); /** * Check if the incoming request contains the "Content-Type" * header field, and it contains the give mime `type`. * * Examples: * * // With Content-Type: text/html; charset=utf-8 * req.is('html'); * req.is('text/html'); * req.is('text/*'); * // => true * * // When Content-Type is application/json * req.is('json'); * req.is('application/json'); * req.is('application/*'); * // => true * * req.is('html'); * // => false * * @param {String|Array} types... * @return {String|false|null} * @public */ req.is = function is(types) { let arr = types; // support flattened arguments if (!Array.isArray(types)) { arr = new Array(arguments.length); for (let i = 0; i < arr.length; i++) { arr[i] = arguments[i]; } } return typeis(this, arr); }; /** * Return the protocol string "http" or "https" * when requested with TLS. When the "trust proxy" * setting trusts the socket address, the * "X-Forwarded-Proto" header field will be trusted * and used if present. * * If you're running behind a reverse proxy that * supplies https for you this may be enabled. * * @return {String} * @public */ defineGetter(req, 'protocol', function protocol() { const proto = this.connection.encrypted ? 'https' : 'http'; const trust = this.app.get('trust proxy fn'); if (!trust(this.connection.remoteAddress, 0)) { return proto; } // Note: X-Forwarded-Proto is normally only ever a // single value, but this is to be safe. const header = this.get('X-Forwarded-Proto') || proto; const index = header.indexOf(','); return index !== -1 ? header.slice(0, index).trim() : header.trim(); }); /** * Short-hand for: * * req.protocol === 'https' * * @return {Boolean} * @public */ defineGetter(req, 'secure', function secure() { return this.protocol === 'https'; }); /** * Return the remote address from the trusted proxy. * * The is the remote address on the socket unless * "trust proxy" is set. * * @return {String} * @public */ defineGetter(req, 'ip', function ip() { const trust = this.app.get('trust proxy fn'); return proxyaddr(this, trust); }); /** * When "trust proxy" is set, trusted proxy addresses + client. * * For example if the value were "client, proxy1, proxy2" * you would receive the array `["client", "proxy1", "proxy2"]` * where "proxy2" is the furthest down-stream and "proxy1" and * "proxy2" were trusted. * * @return {Array} * @public */ defineGetter(req, 'ips', function ips() { const trust = this.app.get('trust proxy fn'); const addrs = proxyaddr.all(this, trust); // reverse the order (to farthest -> closest) // and remove socket address addrs.reverse().pop(); return addrs; }); /** * Return subdomains as an array. * * Subdomains are the dot-separated parts of the host before the main domain of * the app. By default, the domain of the app is assumed to be the last two * parts of the host. This can be changed by setting "subdomain offset". * * For example, if the domain is "tobi.ferrets.example.com": * If "subdomain offset" is not set, req.subdomains is `["ferrets", "tobi"]`. * If "subdomain offset" is 3, req.subdomains is `["tobi"]`. * * @return {Array} * @public */ defineGetter(req, 'subdomains', function subdomains() { const { hostname } = this; if (!hostname) return []; const offset = this.app.get('subdomain offset'); const subdomains = !isIP(hostname) ? hostname.split('.').reverse() : [hostname]; return subdomains.slice(offset); }); /** * Short-hand for `url.parse(req.url).pathname`. * * @return {String} * @public */ defineGetter(req, 'path', function path() { return parse(this).pathname; }); /** * Parse the "Host" header field to a host. * * When the "trust proxy" setting trusts the socket * address, the "X-Forwarded-Host" header field will * be trusted. * * @return {String} * @public */ defineGetter(req, 'host', function host() { const trust = this.app.get('trust proxy fn'); let val = this.get('X-Forwarded-Host'); if (!val || !trust(this.connection.remoteAddress, 0)) { val = this.get('Host'); } return val || undefined; }); /** * Parse the "Host" header field to a hostname. * * When the "trust proxy" setting trusts the socket * address, the "X-Forwarded-Host" header field will * be trusted. * * @return {String} * @api public */ defineGetter(req, 'hostname', function hostname() { const { host } = this; if (!host) return; // IPv6 literal support const offset = host[0] === '[' ? host.indexOf(']') + 1 : 0; const index = host.indexOf(':', offset); return index !== -1 ? host.slice(0, index) : host; }); /** * Check if the request is fresh, aka * Last-Modified and/or the ETag * still match. * * @return {Boolean} * @public */ defineGetter(req, 'fresh', function() { const { method } = this; const { res } = this; const status = res.statusCode; // GET or HEAD for weak freshness validation only if (method !== 'GET' && method !== 'HEAD') return false; // 2xx or 304 as per rfc2616 14.26 if ((status >= 200 && status < 300) || status === 304) { return fresh(this.headers, { etag: res.get('ETag'), 'last-modified': res.get('Last-Modified') }); } return false; }); /** * Check if the request is stale, aka * "Last-Modified" and / or the "ETag" for the * resource has changed. * * @return {Boolean} * @public */ defineGetter(req, 'stale', function stale() { return !this.fresh; }); /** * Check if the request was an _XMLHttpRequest_. * * @return {Boolean} * @public */ defineGetter(req, 'xhr', function xhr() { const val = this.get('X-Requested-With') || ''; return val.toLowerCase() === 'xmlhttprequest'; }); return req; } /** * Helper function for creating a getter on an object. * * @param {Object} obj * @param {String} name * @param {Function} getter * @private */ function defineGetter(obj, name, getter) { Object.defineProperty(obj, name, { configurable: true, enumerable: true, get: getter }); } superagent-5.2.2/test/support/express/responseDecorator.js000066400000000000000000000574441362257374000241470ustar00rootroot00000000000000/*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ 'use strict'; /** * Module dependencies. * @private */ const { Buffer } = require('safe-buffer'); const contentDisposition = require('content-disposition'); const encodeUrl = require('encodeurl'); const escapeHtml = require('escape-html'); const onFinished = require('on-finished'); const path = require('path'); const pathIsAbsolute = require('path-is-absolute'); const statuses = require('statuses'); const merge = require('utils-merge'); const { sign } = require('cookie-signature'); const { normalizeType } = require('./utils'); const { normalizeTypes } = require('./utils'); const { setCharset } = require('./utils'); const cookie = require('cookie'); const send = require('send'); const { extname } = path; const { mime } = send; const { resolve } = path; const vary = require('vary'); /** * Module exports. * @public */ module.exports = setMethods; function setMethods(res) { /** * Module variables. * @private */ const charsetRegExp = /;\s*charset\s*=/; /** * Set status `code`. * * @param {Number} code * @return {ServerResponse} * @public */ res.status = function status(code) { this.statusCode = code; return this; }; /** * Set Link header field with the given `links`. * * Examples: * * res.links({ * next: 'http://api.example.com/users?page=2', * last: 'http://api.example.com/users?page=5' * }); * * @param {Object} links * @return {ServerResponse} * @public */ res.links = function(links) { let link = this.get('Link') || ''; if (link) link += ', '; return this.set( 'Link', link + Object.keys(links) .map(rel => { return '<' + links[rel] + '>; rel="' + rel + '"'; }) .join(', ') ); }; /** * Send a response. * * Examples: * * res.send(Buffer.from('wahoo')); * res.send({ some: 'json' }); * res.send('

some html

'); * * @param {string|number|boolean|object|Buffer} body * @public */ res.send = function send(body) { let chunk = body; let encoding; const { req } = this; let type; // settings const { app } = this; switch (typeof chunk) { // string defaulting to html case 'string': if (!this.get('Content-Type')) { this.type('html'); } break; case 'boolean': case 'number': case 'object': if (chunk === null) { chunk = ''; } else if (Buffer.isBuffer(chunk)) { if (!this.get('Content-Type')) { this.type('bin'); } } else { return this.json(chunk); } break; } // write strings in utf-8 if (typeof chunk === 'string') { encoding = 'utf8'; type = this.get('Content-Type'); // reflect this in content-type if (typeof type === 'string') { this.set('Content-Type', setCharset(type, 'utf-8')); } } // determine if ETag should be generated const etagFn = app.get('etag fn'); const generateETag = !this.get('ETag') && typeof etagFn === 'function'; // populate Content-Length let len; if (chunk !== undefined) { if (Buffer.isBuffer(chunk)) { // get length of Buffer len = chunk.length; } else if (!generateETag && chunk.length < 1000) { // just calculate length when no ETag + small chunk len = Buffer.byteLength(chunk, encoding); } else { // convert chunk to Buffer and calculate chunk = Buffer.from(chunk, encoding); encoding = undefined; len = chunk.length; } this.set('Content-Length', len); } // populate ETag let etag; if (generateETag && len !== undefined) { if ((etag = etagFn(chunk, encoding))) { this.set('ETag', etag); } } // freshness if (req.fresh) this.statusCode = 304; // strip irrelevant headers if (this.statusCode === 204 || this.statusCode === 304) { this.removeHeader('Content-Type'); this.removeHeader('Content-Length'); this.removeHeader('Transfer-Encoding'); chunk = ''; } if (req.method === 'HEAD') { // skip body for HEAD this.end(); } else { // respond this.end(chunk, encoding); } return this; }; /** * Send JSON response. * * Examples: * * res.json(null); * res.json({ user: 'tj' }); * * @param {string|number|boolean|object} obj * @public */ res.json = function json(obj) { // settings const { app } = this; const escape = app.get('json escape'); const replacer = app.get('json replacer'); const spaces = app.get('json spaces'); const body = stringify(obj, replacer, spaces, escape); // content-type if (!this.get('Content-Type')) { this.set('Content-Type', 'application/json'); } return this.send(body); }; /** * Send JSON response with JSONP callback support. * * Examples: * * res.jsonp(null); * res.jsonp({ user: 'tj' }); * * @param {string|number|boolean|object} obj * @public */ res.jsonp = function jsonp(obj) { // settings const { app } = this; const escape = app.get('json escape'); const replacer = app.get('json replacer'); const spaces = app.get('json spaces'); let body = stringify(obj, replacer, spaces, escape); let callback = this.req.query[app.get('jsonp callback name')]; // content-type if (!this.get('Content-Type')) { this.set('X-Content-Type-Options', 'nosniff'); this.set('Content-Type', 'application/json'); } // fixup callback if (Array.isArray(callback)) { callback = callback[0]; } // jsonp if (typeof callback === 'string' && callback.length !== 0) { this.set('X-Content-Type-Options', 'nosniff'); this.set('Content-Type', 'text/javascript'); // restrict callback charset callback = callback.replace(/[^\[\]\w$.]/g, ''); // replace chars not allowed in JavaScript that are in JSON body = body.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); // the /**/ is a specific security mitigation for "Rosetta Flash JSONP abuse" // the typeof check is just to reduce client error noise body = '/**/ typeof ' + callback + " === 'function' && " + callback + '(' + body + ');'; } return this.send(body); }; /** * Send given HTTP status code. * * Sets the response status to `statusCode` and the body of the * response to the standard description from node's http.STATUS_CODES * or the statusCode number if no description. * * Examples: * * res.sendStatus(200); * * @param {number} statusCode * @public */ res.sendStatus = function sendStatus(statusCode) { const body = statuses[statusCode] || String(statusCode); this.statusCode = statusCode; this.type('txt'); return this.send(body); }; /** * Transfer the file at the given `path`. * * Automatically sets the _Content-Type_ response header field. * The callback `callback(err)` is invoked when the transfer is complete * or when an error occurs. Be sure to check `res.sentHeader` * if you wish to attempt responding, as the header and some data * may have already been transferred. * * Options: * * - `maxAge` defaulting to 0 (can be string converted by `ms`) * - `root` root directory for relative filenames * - `headers` object of headers to serve with file * - `dotfiles` serve dotfiles, defaulting to false; can be `"allow"` to send them * * Other options are passed along to `send`. * * Examples: * * The following example illustrates how `res.sendFile()` may * be used as an alternative for the `static()` middleware for * dynamic situations. The code backing `res.sendFile()` is actually * the same code, so HTTP cache support etc is identical. * * app.get('/user/:uid/photos/:file', function(req, res){ * var uid = req.params.uid * , file = req.params.file; * * req.user.mayViewFilesFrom(uid, function(yes){ * if (yes) { * res.sendFile('/uploads/' + uid + '/' + file); * } else { * res.send(403, 'Sorry! you cant see that.'); * } * }); * }); * * @public */ res.sendFile = function sendFile(path, options, callback) { let done = callback; const { req } = this; const res = this; const { next } = req; let opts = options || {}; if (!path) { throw new TypeError('path argument is required to res.sendFile'); } // support function as second arg if (typeof options === 'function') { done = options; opts = {}; } if (!opts.root && !pathIsAbsolute(path)) { throw new TypeError( 'path must be absolute or specify root to res.sendFile' ); } // create file stream const pathname = encodeURI(path); const file = send(req, pathname, opts); // transfer sendfile(res, file, opts, err => { if (done) return done(err); if (err && err.code === 'EISDIR') return next(); // next() all but write errors if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') { next(err); } }); }; /** * Transfer the file at the given `path` as an attachment. * * Optionally providing an alternate attachment `filename`, * and optional callback `callback(err)`. The callback is invoked * when the data transfer is complete, or when an error has * ocurred. Be sure to check `res.headersSent` if you plan to respond. * * Optionally providing an `options` object to use with `res.sendFile()`. * This function will set the `Content-Disposition` header, overriding * any `Content-Disposition` header passed as header options in order * to set the attachment and filename. * * This method uses `res.sendFile()`. * * @public */ res.download = function download(path, filename, options, callback) { let done = callback; let name = filename; let opts = options || null; // support function as second or third arg if (typeof filename === 'function') { done = filename; name = null; opts = null; } else if (typeof options === 'function') { done = options; opts = null; } // set Content-Disposition when file is sent const headers = { 'Content-Disposition': contentDisposition(name || path) }; // merge user-provided headers if (opts && opts.headers) { const keys = Object.keys(opts.headers); for (const key of keys) { if (key.toLowerCase() !== 'content-disposition') { headers[key] = opts.headers[key]; } } } // merge user-provided options opts = Object.create(opts); opts.headers = headers; // Resolve the full path for sendFile const fullPath = resolve(path); // send file return this.sendFile(fullPath, opts, done); }; /** * Set _Content-Type_ response header with `type` through `mime.lookup()` * when it does not contain "/", or set the Content-Type to `type` otherwise. * * Examples: * * res.type('.html'); * res.type('html'); * res.type('json'); * res.type('application/json'); * res.type('png'); * * @param {String} type * @return {ServerResponse} for chaining * @public */ res.contentType = res.type = function contentType(type) { const ct = !type.includes('/') ? mime.lookup(type) : type; return this.set('Content-Type', ct); }; /** * Respond to the Acceptable formats using an `obj` * of mime-type callbacks. * * This method uses `req.accepted`, an array of * acceptable types ordered by their quality values. * When "Accept" is not present the _first_ callback * is invoked, otherwise the first match is used. When * no match is performed the server responds with * 406 "Not Acceptable". * * Content-Type is set for you, however if you choose * you may alter this within the callback using `res.type()` * or `res.set('Content-Type', ...)`. * * res.format({ * 'text/plain': function(){ * res.send('hey'); * }, * * 'text/html': function(){ * res.send('

hey

'); * }, * * 'appliation/json': function(){ * res.send({ message: 'hey' }); * } * }); * * In addition to canonicalized MIME types you may * also use extnames mapped to these types: * * res.format({ * text: function(){ * res.send('hey'); * }, * * html: function(){ * res.send('

hey

'); * }, * * json: function(){ * res.send({ message: 'hey' }); * } * }); * * By default Express passes an `Error` * with a `.status` of 406 to `next(err)` * if a match is not made. If you provide * a `.default` callback it will be invoked * instead. * * @param {Object} obj * @return {ServerResponse} for chaining * @public */ res.format = function(obj) { const { req } = this; const { next } = req; const fn = obj.default; if (fn) delete obj.default; const keys = Object.keys(obj); const key = keys.length > 0 ? req.accepts(keys) : false; this.vary('Accept'); if (key) { this.set('Content-Type', normalizeType(key).value); obj[key](req, this, next); } else if (fn) { fn(); } else { const err = new Error('Not Acceptable'); err.status = err.statusCode = 406; err.types = normalizeTypes(keys).map(o => { return o.value; }); next(err); } return this; }; /** * Set _Content-Disposition_ header to _attachment_ with optional `filename`. * * @param {String} filename * @return {ServerResponse} * @public */ res.attachment = function attachment(filename) { if (filename) { this.type(extname(filename)); } this.set('Content-Disposition', contentDisposition(filename)); return this; }; /** * Append additional header `field` with value `val`. * * Example: * * res.append('Link', ['', '']); * res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly'); * res.append('Warning', '199 Miscellaneous warning'); * * @param {String} field * @param {String|Array} val * @return {ServerResponse} for chaining * @public */ res.append = function append(field, val) { const prev = this.get(field); let value = val; if (prev) { // concat the new and prev vals value = Array.isArray(prev) ? prev.concat(val) : Array.isArray(val) ? [prev].concat(val) : [prev, val]; } return this.set(field, value); }; /** * Set header `field` to `val`, or pass * an object of header fields. * * Examples: * * res.set('Foo', ['bar', 'baz']); * res.set('Accept', 'application/json'); * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' }); * * Aliased as `res.header()`. * * @param {String|Object} field * @param {String|Array} val * @return {ServerResponse} for chaining * @public */ res.set = res.header = function header(field, val) { if (arguments.length === 2) { let value = Array.isArray(val) ? val.map(String) : String(val); // add charset to content-type if (field.toLowerCase() === 'content-type') { if (Array.isArray(value)) { throw new TypeError('Content-Type cannot be set to an Array'); } if (!charsetRegExp.test(value)) { const charset = mime.charsets.lookup(value.split(';')[0]); if (charset) value += '; charset=' + charset.toLowerCase(); } } this.setHeader(field, value); } else { for (const key in field) { this.set(key, field[key]); } } return this; }; /** * Get value for header `field`. * * @param {String} field * @return {String} * @public */ res.get = function(field) { return this.getHeader(field); }; /** * Clear cookie `name`. * * @param {String} name * @param {Object} [options] * @return {ServerResponse} for chaining * @public */ res.clearCookie = function clearCookie(name, options) { const opts = merge({ expires: new Date(1), path: '/' }, options); return this.cookie(name, '', opts); }; /** * Set cookie `name` to `value`, with the given `options`. * * Options: * * - `maxAge` max-age in milliseconds, converted to `expires` * - `signed` sign the cookie * - `path` defaults to "/" * * Examples: * * // "Remember Me" for 15 minutes * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); * * // save as above * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) * * @param {String} name * @param {String|Object} value * @param {Object} [options] * @return {ServerResponse} for chaining * @public */ res.cookie = function(name, value, options) { const opts = merge({}, options); const { secret } = this.req; const { signed } = opts; if (signed && !secret) { throw new Error('cookieParser("secret") required for signed cookies'); } let val = typeof value === 'object' ? 'j:' + JSON.stringify(value) : String(value); if (signed) { val = 's:' + sign(val, secret); } if ('maxAge' in opts) { opts.expires = new Date(Date.now() + opts.maxAge); opts.maxAge /= 1000; } if (opts.path == null) { opts.path = '/'; } this.append('Set-Cookie', cookie.serialize(name, String(val), opts)); return this; }; /** * Set the location header to `url`. * * The given `url` can also be "back", which redirects * to the _Referrer_ or _Referer_ headers or "/". * * Examples: * * res.location('/foo/bar').; * res.location('http://example.com'); * res.location('../login'); * * @param {String} url * @return {ServerResponse} for chaining * @public */ res.location = function location(url) { let loc = url; // "back" is an alias for the referrer if (url === 'back') { loc = this.req.get('Referrer') || '/'; } // set location return this.set('Location', encodeUrl(loc)); }; /** * Redirect to the given `url` with optional response `status` * defaulting to 302. * * The resulting `url` is determined by `res.location()`, so * it will play nicely with mounted apps, relative paths, * `"back"` etc. * * Examples: * * res.redirect('/foo/bar'); * res.redirect('http://example.com'); * res.redirect(301, 'http://example.com'); * res.redirect('../login'); // /blog/post/1 -> /blog/login * * @public */ res.redirect = function redirect(url) { let address = url; let body; let status = 302; // allow status / url if (arguments.length === 2) { status = arguments[0]; address = arguments[1]; } // Set location header address = this.location(address).get('Location'); // Support text/{plain,html} by default this.format({ text() { body = statuses[status] + '. Redirecting to ' + address; }, html() { const u = escapeHtml(address); body = '

' + statuses[status] + '. Redirecting to ' + u + '

'; }, default() { body = ''; } }); // Respond this.statusCode = status; this.set('Content-Length', Buffer.byteLength(body)); if (this.req.method === 'HEAD') { this.end(); } else { this.end(body); } }; /** * Add `field` to Vary. If already present in the Vary set, then * this call is simply ignored. * * @param {Array|String} field * @return {ServerResponse} for chaining * @public */ res.vary = function(field) { vary(this, field); return this; }; /** * Render `view` with the given `options` and optional callback `fn`. * When a callback function is given a response will _not_ be made * automatically, otherwise a response of _200_ and _text/html_ is given. * * Options: * * - `cache` boolean hinting to the engine it should cache * - `filename` filename of the view being rendered * * @public */ res.render = function render(view, options, callback) { const { app } = this.req; let done = callback; let opts = options || {}; const { req } = this; const self = this; // support callback function as second arg if (typeof options === 'function') { done = options; opts = {}; } // merge res.locals opts._locals = self.locals; // default callback to respond done = done || function(err, str) { if (err) return req.next(err); self.send(str); }; // render app.render(view, opts, done); }; // pipe the send file stream function sendfile(res, file, options, callback) { let done = false; let streaming; // request aborted function onaborted() { if (done) return; done = true; const err = new Error('Request aborted'); err.code = 'ECONNABORTED'; callback(err); } // directory function ondirectory() { if (done) return; done = true; const err = new Error('EISDIR, read'); err.code = 'EISDIR'; callback(err); } // errors function onerror(err) { if (done) return; done = true; callback(err); } // ended function onend() { if (done) return; done = true; callback(); } // file function onfile() { streaming = false; } // finished function onfinish(err) { if (err && err.code === 'ECONNRESET') return onaborted(); if (err) return onerror(err); if (done) return; setImmediate(() => { if (streaming !== false && !done) { onaborted(); return; } if (done) return; done = true; callback(); }); } // streaming function onstream() { streaming = true; } file.on('directory', ondirectory); file.on('end', onend); file.on('error', onerror); file.on('file', onfile); file.on('stream', onstream); if (options.headers) { // set headers on successful transfer file.on('headers', function headers(res) { const obj = options.headers; const keys = Object.keys(obj); for (const k of keys) { res.setHeader(k, obj[k]); } }); } // pipe file.pipe(res); onFinished(res, onfinish); } return res; } /** * Stringify JSON, like JSON.stringify, but v8 optimized, with the * ability to escape characters that can trigger HTML sniffing. * * @param {*} value * @param {function} replaces * @param {number} spaces * @param {boolean} escape * @returns {string} * @private */ function stringify(value, replacer, spaces, escape) { // v8 checks arguments.length for optimizing simple call // https://bugs.chromium.org/p/v8/issues/detail?id=4730 let json = replacer || spaces ? JSON.stringify(value, replacer, spaces) : JSON.stringify(value); if (escape) { json = json.replace(/[<>&]/g, c => { switch (c.charCodeAt(0)) { case 0x3c: return '\\u003c'; case 0x3e: return '\\u003e'; case 0x26: return '\\u0026'; default: return c; } }); } return json; } superagent-5.2.2/test/support/express/utils.js000066400000000000000000000116351362257374000215760ustar00rootroot00000000000000/*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ 'use strict'; /** * Module dependencies. * @api private */ const { Buffer } = require('safe-buffer'); const contentType = require('content-type'); const { mime } = require('send'); const etag = require('etag'); const proxyaddr = require('proxy-addr'); const qs = require('qs'); const querystring = require('querystring'); let isHttp2Supported = true; /** * Test for http2 support * @api private */ try { require('http2'); } catch (_) { isHttp2Supported = false; } /** * Return strong ETag for `body`. * * @param {String|Buffer} body * @param {String} [encoding] * @return {String} * @api private */ exports.etag = createETagGenerator({ weak: false }); /** * Return weak ETag for `body`. * * @param {String|Buffer} body * @param {String} [encoding] * @return {String} * @api private */ exports.wetag = createETagGenerator({ weak: true }); /** * Normalize the given `type`, for example "html" becomes "text/html". * * @param {String} type * @return {Object} * @api private */ exports.normalizeType = function(type) { return ~type.indexOf('/') ? acceptParams(type) : { value: mime.lookup(type), params: {} }; }; /** * Normalize `types`, for example "html" becomes "text/html". * * @param {Array} types * @return {Array} * @api private */ exports.normalizeTypes = function(types) { const ret = []; for (const element of types) { ret.push(exports.normalizeType(element)); } return ret; }; /** * Parse accept params `str` returning an * object with `.value`, `.quality` and `.params`. * also includes `.originalIndex` for stable sorting * * @param {String} str * @return {Object} * @api private */ function acceptParams(str, index) { const parts = str.split(/ *; */); const ret = { value: parts[0], quality: 1, params: {}, originalIndex: index }; for (let i = 1; i < parts.length; ++i) { const pms = parts[i].split(/ *= */); if (pms[0] === 'q') { ret.quality = parseFloat(pms[1]); } else { ret.params[pms[0]] = pms[1]; } } return ret; } /** * Compile "etag" value to function. * * @param {Boolean|String|Function} val * @return {Function} * @api private */ exports.compileETag = function(val) { let fn; if (typeof val === 'function') { return val; } switch (val) { case true: fn = exports.wetag; break; case false: break; case 'strong': fn = exports.etag; break; case 'weak': fn = exports.wetag; break; default: throw new TypeError('unknown value for etag function: ' + val); } return fn; }; /** * Compile "query parser" value to function. * * @param {String|Function} val * @return {Function} * @api private */ exports.compileQueryParser = function compileQueryParser(val) { let fn; if (typeof val === 'function') { return val; } switch (val) { case true: fn = querystring.parse; break; case false: break; case 'extended': fn = parseExtendedQueryString; break; case 'simple': fn = querystring.parse; break; default: throw new TypeError('unknown value for query parser function: ' + val); } return fn; }; /** * Compile "proxy trust" value to function. * * @param {Boolean|String|Number|Array|Function} val * @return {Function} * @api private */ exports.compileTrust = function(val) { if (typeof val === 'function') return val; if (val === true) { // Support plain true/false return function() { return true; }; } if (typeof val === 'number') { // Support trusting hop count return function(a, i) { return i < val; }; } if (typeof val === 'string') { // Support comma-separated values val = val.split(/ *, */); } return proxyaddr.compile(val || []); }; /** * Flag for http2 support */ exports.isHttp2Supported = isHttp2Supported; /** * Set the charset in a given Content-Type string. * * @param {String} type * @param {String} charset * @return {String} * @api private */ exports.setCharset = function setCharset(type, charset) { if (!type || !charset) { return type; } // parse type const parsed = contentType.parse(type); // set charset parsed.parameters.charset = charset; // format type return contentType.format(parsed); }; /** * Create an ETag generator function, generating ETags with * the given options. * * @param {object} options * @return {function} * @private */ function createETagGenerator(options) { return function generateETag(body, encoding) { const buf = !Buffer.isBuffer(body) ? Buffer.from(body, encoding) : body; return etag(buf, options); }; } /** * Parse an extended query string with qs. * * @return {Object} * @private */ function parseExtendedQueryString(str) { return qs.parse(str, { allowPrototypes: true }); } superagent-5.2.2/test/support/server.js000066400000000000000000000320441362257374000202500ustar00rootroot00000000000000const fs = require('fs'); let http = require('http'); const multer = require('multer'); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); const basicAuth = require('basic-auth-connect'); const express = require('./express'); let isPseudoHeader; if (process.env.HTTP2_TEST) { http = require('http2'); const { HTTP2_HEADER_AUTHORITY, HTTP2_HEADER_METHOD, HTTP2_HEADER_PATH, HTTP2_HEADER_SCHEME, HTTP2_HEADER_STATUS } = http.constants; isPseudoHeader = function(name) { switch (name) { case HTTP2_HEADER_STATUS: // :status case HTTP2_HEADER_METHOD: // :method case HTTP2_HEADER_PATH: // :path case HTTP2_HEADER_AUTHORITY: // :authority case HTTP2_HEADER_SCHEME: // :scheme return true; default: return false; } }; } const app = express(); app.use((req, res, next) => { res.set('Cache-Control', 'no-cache, no-store'); next(); }); app.all('/url', (req, res) => { res.send(req.url); }); app.all('/echo', (req, res) => { const { headers } = req; if (process.env.HTTP2_TEST) { Object.keys(headers).forEach(name => { if (isPseudoHeader(name)) { delete headers[name]; } }); } res.writeHead(200, headers); req.pipe(res); }); let uniq = 0; app.all('/unique', (req, res) => { res.send(`never the same ${uniq++}`); }); app.use(bodyParser.urlencoded({ extended: true })); app.use(multer().none()); app.all('/formecho', (req, res) => { if ( !/application\/x-www-form-urlencoded|multipart\/form-data/.test( req.headers['content-type'] ) ) { return res.status(400).end('wrong type'); } res.json(req.body); }); app.use(bodyParser.json()); app.use(cookieParser()); app.use('/xdomain', (req, res, next) => { if (!req.get('Origin')) return next(); res.set('Access-Control-Allow-Origin', req.get('Origin')); res.set('Access-Control-Allow-Credentials', 'true'); res.set('Access-Control-Allow-Methods', 'POST'); res.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type'); if (req.method == 'OPTIONS') return res.send(200); next(); }); app.get('/xdomain', (req, res) => { res.send('tobi'); }); app.get('/login', (req, res) => { res.status(200).send('
'); }); app.get('/json', (req, res) => { res.status(200).json({ name: 'manny' }); }); app.get('/json-hal', (req, res) => { res.set('content-type', 'application/hal+json'); res.send({ name: 'hal 5000' }); }); app.get('/ok', (req, res) => { res.send('ok'); }); app.get('/foo', (req, res) => { res .header('Content-Type', 'application/x-www-form-urlencoded') .send('foo=bar'); }); app.get('/form-data', (req, res) => { res.header('Content-Type', 'application/x-www-form-urlencoded'); res.send('pet[name]=manny'); }); app.post('/movie', (req, res) => { res.redirect('/movies/all/0'); }); app.get('/', (req, res) => { res.set('QUERY', JSON.stringify(req.query)); res.redirect('/movies'); }); app.get('/movies', (req, res) => { res.set('QUERY', JSON.stringify(req.query)); res.redirect('/movies/all'); }); app.get('/movies/all', (req, res) => { res.set('QUERY', JSON.stringify(req.query)); res.redirect('/movies/all/0'); }); app.get('/movies/all/0', (req, res) => { res.set('QUERY', JSON.stringify(req.query)); res.status(200).send('first movie page'); }); app.get('/movies/random', (req, res) => { res.redirect('/movie/4'); }); app.get('/movie/4', (req, res) => { setTimeout(() => { res.send('not-so-random movie'); }, 1000); }); app.get('/links', (req, res) => { res.header( 'Link', '; rel="next"' ); res.end(); }); app.get('/xml', (req, res) => { res.type('xml'); res.status(200).send(''); }); app.get('/custom', (req, res) => { res.type('application/x-custom'); res.status(200).send('custom stuff'); }); app.put('/user/:id', (req, res) => { res.send('updated'); }); app.put('/user/:id/body', (req, res) => { res.send(`received ${req.body.user}`); }); app.patch('/user/:id', (req, res) => { res.send('updated'); }); app.post('/user/:id/pet', (req, res) => { res.send(`added pet "${req.body.pet}"`); }); app.post('/user', (req, res) => { res.send('created'); }); app.delete('/user/:id', (req, res) => { res.send('deleted'); }); app.post('/todo/item', (req, res) => { let buf = ''; req.on('data', chunk => { buf += chunk; }); req.on('end', () => { res.send(`added "${buf}"`); }); }); app.get('/delay/const', (req, res) => { res.redirect('/delay/3000'); }); app.get('/delay/zip', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain', 'Content-Encoding': 'gzip' }); setTimeout(() => { res.end(); }, 10000); }); app.get('/delay/json', (req, res) => { res.writeHead(200, { 'Content-Type': 'application/json' }); setTimeout(() => { res.end(); }, 10000); }); let slowBodyCallback; app.get('/delay/slowbody', (req, res) => { res.writeHead(200, { 'Content-Type': 'application/octet-stream' }); // Send lots of garbage data to overflow all buffers along the way, // so that the browser gets some data before the request is done const initialDataSent = new Promise(resolve => { res.write(new Buffer.alloc(4000), () => { res.write(new Buffer.alloc(16000)); resolve(); }); }); // Make sure sending of request body takes over 1s, // so that the test can't pass by accident. const minimumTime = new Promise(resolve => { setTimeout(resolve, 1001); }); new Promise(resolve => { // Waiting full 10 seconds for the test would be too annoying, // so the remote callback is a hack to push the test forward slowBodyCallback = resolve; setTimeout(resolve, 10000); }) .then(() => Promise.all([initialDataSent, minimumTime])) .then(() => { res.end('bye'); }); }); app.get('/delay/slowbody/finish', (req, res) => { if (slowBodyCallback) slowBodyCallback(); res.sendStatus(204); }); app.get('/delay/:ms', (req, res) => { const ms = ~~req.params.ms; setTimeout(() => { res.sendStatus(200); }, ms); }); app.get('/querystring', (req, res) => { res.send(req.query); }); app.get('/querystring-in-header', (req, res) => { res.set('query', JSON.stringify(req.query)); res.send(); }); app.all('/echo-header/:field', (req, res) => { res.send(req.headers[req.params.field]); }); app.get('/echo-headers', (req, res) => { res.json(req.headers); }); app.post('/pet', (req, res) => { res.send(`added ${req.body.name} the ${req.body.species}`); }); app.get('/pets', (req, res) => { res.send(['tobi', 'loki', 'jane']); }); app.get('/json-seq', (req, res) => { res .set('content-type', 'application/json-seq') .send('\u001E{"id":1}\n\u001E{"id":2}\n'); }); app.get('/invalid-json', (req, res) => { res.set('content-type', 'application/json'); // sample invalid json taken from https://github.com/swagger-api/swagger-ui/issues/1354 res.send( ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}" ); }); app.get('/invalid-json-forbidden', (req, res) => { res.set('content-type', 'application/json'); res.status(403).send('Forbidden'); }); app.get('/text', (req, res) => { res.send('just some text'); }); app.get('/basic-auth', basicAuth('tobi', 'learnboost'), (req, res) => { res.end('you win!'); }); app.get('/basic-auth/again', basicAuth('tobi', ''), (req, res) => { res.end('you win again!'); }); app.post('/auth', basicAuth('foo', 'bar'), (req, res) => { const auth = req.headers.authorization; const parts = auth.split(' '); const credentials = Buffer.from(parts[1], 'base64') .toString() .split(':'); const user = credentials[0]; const pass = credentials[1]; res.send({ user, pass }); }); app.get('/error', (req, res) => { res.status(500).send('boom'); }); app.get('/unauthorized', (req, res) => { res.sendStatus(401); }); app.get('/bad-request', (req, res) => { res.sendStatus(400); }); app.get('/not-acceptable', (req, res) => { res.sendStatus(406); }); app.get('/no-content', (req, res) => { res.sendStatus(204); }); app.delete('/no-content', (req, res) => { res.set('content-type', 'application/json'); res.sendStatus(204); }); app.post('/created', (req, res) => { res.status(201).send('created'); }); app.post('/unprocessable-entity', (req, res) => { res.status(422).send('unprocessable entity'); }); app.get('/arraybuffer', (req, res) => { const content = new ArrayBuffer(1000); res.set('Content-Type', 'application/vnd.superagent'); res.send(content); }); app.get('/arraybuffer-unauthorized', (req, res) => { res.set('Content-Type', 'application/json'); res .status(401) .send('{"message":"Authorization has been denied for this request."}'); }); app.post('/empty-body', bodyParser.text(), (req, res) => { if (typeof req.body === 'object' && Object.keys(req.body).length === 0) { res.sendStatus(204); } else { res.sendStatus(400); } }); app.get('/collection-json', (req, res) => { res.set('content-type', 'application/vnd.collection+json'); res.send({ name: 'chewbacca' }); }); app.get('/invalid-json', (req, res) => { res.set('content-type', 'application/json'); // sample invalid json taken from https://github.com/swagger-api/swagger-ui/issues/1354 res.send( ")]}', {'header':{'code':200,'text':'OK','version':'1.0'},'data':'some data'}" ); }); app.options('/options/echo/body', bodyParser.json(), (req, res) => { res.send(req.body); }); app.get('/cookie-redirect', (req, res) => { res.set('Set-Cookie', 'replaced=yes'); res.append('Set-Cookie', 'from-redir=1', true); res.redirect(303, '/show-cookies'); }); app.get('/set-cookie', (req, res) => { res.cookie('persist', '123'); res.send('ok'); }); app.get('/show-cookies', (req, res) => { res.set('content-type', 'text/plain'); res.send(req.headers.cookie); }); app.put('/redirect-303', (req, res) => { res.redirect(303, '/reply-method'); }); app.put('/redirect-307', (req, res) => { res.redirect(307, '/reply-method'); }); app.put('/redirect-308', (req, res) => { res.redirect(308, '/reply-method'); }); app.all('/reply-method', (req, res) => { res.send(`method=${req.method.toLowerCase()}`); }); app.get('/tobi', (req, res) => { res.send('tobi'); }); app.get('/relative', (req, res) => { res.redirect('tobi'); }); app.get('/relative/sub', (req, res) => { res.redirect('../tobi'); }); app.get('/header', (req, res) => { res.redirect('/header/2'); }); app.post('/header', (req, res) => { res.redirect('/header/2'); }); app.get('/header/2', (req, res) => { res.send(req.headers); }); app.get('/bad-redirect', (req, res) => { res.status(307).end(); }); app.all('/ua', (req, res) => { const { headers } = req; if (process.env.HTTP2_TEST) { Object.keys(headers).forEach(name => { if (isPseudoHeader(name)) { delete headers[name]; } }); } res.writeHead(200, headers); req.pipe(res); }); app.get('/manny', (req, res) => { res.status(200).json({ name: 'manny' }); }); function serveImageWithType(res, type) { const img = fs.readFileSync(`${__dirname}/../node/fixtures/test.png`); res.writeHead(200, { 'Content-Type': type }); res.end(img, 'binary'); } app.get('/image', (req, res) => { serveImageWithType(res, 'image/png'); }); app.get('/image-as-octets', (req, res) => { serveImageWithType(res, 'application/octet-stream'); }); app.get('/chunked-json', (req, res) => { res.set('content-type', 'application/json'); res.set('Transfer-Encoding', 'chunked'); let chunk = 0; const interval = setInterval(() => { chunk++; if (chunk === 1) res.write(`{ "name_${chunk}": "`); if (chunk > 1) res.write(`value_${chunk}", "name_${chunk}": "`); if (chunk === 10) { clearInterval(interval); res.write(`value_${chunk}"}`); res.end(); } }, 10); }); app.get('/if-mod', (req, res) => { if (req.header('if-modified-since')) { res.status(304).end(); } else { res.send(`${Date.now()}`); } }); const called = {}; app.get('/error/ok/:id', (req, res) => { if (req.query.qs != 'present') { return res.status(400).end('query string lost'); } const { id } = req.params; if (!called[id]) { called[id] = true; res.status(500).send('boom'); } else { res.send(req.headers); delete called[id]; } }); app.get('/delay/:ms/ok/:id', (req, res) => { const { id } = req.params; if (!called[id]) { called[id] = true; const ms = ~~req.params.ms; setTimeout(() => { res.sendStatus(200); }, ms); } else { res.send(`ok = ${req.url}`); delete called[id]; } }); app.get('/error/redirect/:id', (req, res) => { const { id } = req.params; if (!called[id]) { called[id] = true; res.status(500).send('boom'); } else { res.redirect('/movies'); delete called[id]; } }); app.get('/error/redirect-error:id', (req, res) => { const { id } = req.params; if (!called[id]) { called[id] = true; res.status(500).send('boom'); } else { res.redirect('/error'); delete called[id]; } }); const server = http.createServer(app); server.listen(process.env.ZUUL_PORT); superagent-5.2.2/test/support/setup.js000066400000000000000000000004451362257374000201020ustar00rootroot00000000000000require('should'); require('should-http'); let NODE = true; let uri = 'http://localhost:5000'; if (typeof window !== 'undefined') { NODE = false; uri = `//${window.location.host}`; } else { process.env.ZUUL_PORT = 5000; require('./server'); } exports.NODE = NODE; exports.uri = uri; superagent-5.2.2/test/timeout.js000066400000000000000000000073411362257374000167160ustar00rootroot00000000000000const setup = require('./support/setup'); const base = setup.uri; const assert = require('assert'); const request = require('./support/client'); describe('.timeout(ms)', function() { this.timeout(15000); describe('when timeout is exceeded', () => { it('should error', done => { request .get(`${base}/delay/500`) .timeout(150) .end((err, res) => { assert(err, 'expected an error'); assert.equal( 'number', typeof err.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', err.code, 'expected abort error code'); done(); }); }); it('should error in promise interface ', done => { request .get(`${base}/delay/500`) .timeout(150) .catch(err => { assert(err, 'expected an error'); assert.equal( 'number', typeof err.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', err.code, 'expected abort error code'); done(); }); }); it('should handle gzip timeout', done => { request .get(`${base}/delay/zip`) .timeout(150) .end((err, res) => { assert(err, 'expected an error'); assert.equal( 'number', typeof err.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', err.code, 'expected abort error code'); done(); }); }); it('should handle buffer timeout', done => { request .get(`${base}/delay/json`) .buffer(true) .timeout(150) .end((err, res) => { assert(err, 'expected an error'); assert.equal( 'number', typeof err.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', err.code, 'expected abort error code'); done(); }); }); it('should error on deadline', done => { request .get(`${base}/delay/500`) .timeout({ deadline: 150 }) .end((err, res) => { assert(err, 'expected an error'); assert.equal( 'number', typeof err.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', err.code, 'expected abort error code'); done(); }); }); it('should support setting individual options', done => { request .get(`${base}/delay/500`) .timeout({ deadline: 10 }) .timeout({ response: 99999 }) .end((err, res) => { assert(err, 'expected an error'); assert.equal('ECONNABORTED', err.code, 'expected abort error code'); assert.equal('ETIME', err.errno); done(); }); }); it('should error on response', done => { request .get(`${base}/delay/500`) .timeout({ response: 150 }) .end((err, res) => { assert(err, 'expected an error'); assert.equal( 'number', typeof err.timeout, 'expected an error with .timeout' ); assert.equal('ECONNABORTED', err.code, 'expected abort error code'); assert.equal('ETIMEDOUT', err.errno); done(); }); }); it('should accept slow body with fast response', done => { request .get(`${base}/delay/slowbody`) .timeout({ response: 1000 }) .on('progress', () => { // This only makes the test faster without relying on arbitrary timeouts request.get(`${base}/delay/slowbody/finish`).end(); }) .end(done); }); }); }); superagent-5.2.2/test/use.js000066400000000000000000000040741362257374000160240ustar00rootroot00000000000000const setup = require('./support/setup'); const { uri } = setup; const assert = require('assert'); const request = require('./support/client'); describe('request', function() { this.timeout(20000); describe('use', () => { it('should use plugin success', done => { const now = `${Date.now()}`; function uuid(req) { req.set('X-UUID', now); return req; } function prefix(req) { req.url = uri + req.url; return req; } request .get('/echo') .use(uuid) .use(prefix) .end((err, res) => { assert.strictEqual(res.statusCode, 200); assert.equal(res.get('X-UUID'), now); done(); }); }); }); }); describe('subclass', () => { let OriginalRequest; beforeEach(() => { OriginalRequest = request.Request; }); afterEach(() => { request.Request = OriginalRequest; }); it('should be an instance of Request', () => { const req = request.get('/'); assert(req instanceof request.Request); }); it('should use patched subclass', () => { assert(OriginalRequest); let constructorCalled; let sendCalled; function NewRequest(...args) { constructorCalled = true; OriginalRequest.apply(this, args); } NewRequest.prototype = Object.create(OriginalRequest.prototype); NewRequest.prototype.send = function() { sendCalled = true; return this; }; request.Request = NewRequest; const req = request.get('/').send(); assert(constructorCalled); assert(sendCalled); assert(req instanceof NewRequest); assert(req instanceof OriginalRequest); }); it('should use patched subclass in agent too', () => { if (!request.agent) return; // Node-only function NewRequest(...args) { OriginalRequest.apply(this, args); } NewRequest.prototype = Object.create(OriginalRequest.prototype); request.Request = NewRequest; const req = request.agent().del('/'); assert(req instanceof NewRequest); assert(req instanceof OriginalRequest); }); }); superagent-5.2.2/yarn.lock000066400000000000000000016470021362257374000155430ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 "@babel/cli@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.7.4.tgz#38804334c8db40209f88c69a5c90998e60cca18b" integrity sha512-O7mmzaWdm+VabWQmxuM8hqNrWGGihN83KfhPUzp2lAW4kzIMwBxujXkZbD4fMwKMYY9FXTbDvXsJqU+5XHXi4A== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" glob "^7.0.0" lodash "^4.17.13" make-dir "^2.1.0" slash "^2.0.0" source-map "^0.5.0" optionalDependencies: chokidar "^2.1.8" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== dependencies: "@babel/highlight" "^7.0.0" "@babel/core@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.4.tgz#37e864532200cb6b50ee9a4045f5f817840166ab" integrity sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ== dependencies: "@babel/code-frame" "^7.5.5" "@babel/generator" "^7.7.4" "@babel/helpers" "^7.7.4" "@babel/parser" "^7.7.4" "@babel/template" "^7.7.4" "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" convert-source-map "^1.7.0" debug "^4.1.0" json5 "^2.1.0" lodash "^4.17.13" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" "@babel/generator@^7.4.0", "@babel/generator@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== dependencies: "@babel/types" "^7.7.4" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" "@babel/helper-annotate-as-pure@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== dependencies: "@babel/types" "^7.7.4" "@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== dependencies: "@babel/helper-explode-assignable-expression" "^7.7.4" "@babel/types" "^7.7.4" "@babel/helper-call-delegate@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== dependencies: "@babel/helper-hoist-variables" "^7.7.4" "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" "@babel/helper-create-regexp-features-plugin@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== dependencies: "@babel/helper-regex" "^7.4.4" regexpu-core "^4.6.0" "@babel/helper-define-map@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== dependencies: "@babel/helper-function-name" "^7.7.4" "@babel/types" "^7.7.4" lodash "^4.17.13" "@babel/helper-explode-assignable-expression@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== dependencies: "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" "@babel/helper-function-name@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== dependencies: "@babel/helper-get-function-arity" "^7.7.4" "@babel/template" "^7.7.4" "@babel/types" "^7.7.4" "@babel/helper-get-function-arity@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== dependencies: "@babel/types" "^7.7.4" "@babel/helper-hoist-variables@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== dependencies: "@babel/types" "^7.7.4" "@babel/helper-member-expression-to-functions@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== dependencies: "@babel/types" "^7.7.4" "@babel/helper-module-imports@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== dependencies: "@babel/types" "^7.7.4" "@babel/helper-module-transforms@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.4.tgz#8d7cdb1e1f8ea3d8c38b067345924ac4f8e0879a" integrity sha512-ehGBu4mXrhs0FxAqN8tWkzF8GSIGAiEumu4ONZ/hD9M88uHcD+Yu2ttKfOCgwzoesJOJrtQh7trI5YPbRtMmnA== dependencies: "@babel/helper-module-imports" "^7.7.4" "@babel/helper-simple-access" "^7.7.4" "@babel/helper-split-export-declaration" "^7.7.4" "@babel/template" "^7.7.4" "@babel/types" "^7.7.4" lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== dependencies: "@babel/types" "^7.7.4" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== "@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== dependencies: lodash "^4.17.13" "@babel/helper-remap-async-to-generator@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== dependencies: "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-wrap-function" "^7.7.4" "@babel/template" "^7.7.4" "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" "@babel/helper-replace-supers@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== dependencies: "@babel/helper-member-expression-to-functions" "^7.7.4" "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" "@babel/helper-simple-access@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== dependencies: "@babel/template" "^7.7.4" "@babel/types" "^7.7.4" "@babel/helper-split-export-declaration@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== dependencies: "@babel/types" "^7.7.4" "@babel/helper-wrap-function@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== dependencies: "@babel/helper-function-name" "^7.7.4" "@babel/template" "^7.7.4" "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" "@babel/helpers@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== dependencies: "@babel/template" "^7.7.4" "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" "@babel/highlight@^7.0.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^4.0.0" "@babel/parser@^7.4.3", "@babel/parser@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb" integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g== "@babel/plugin-proposal-async-generator-functions@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.7.4" "@babel/plugin-syntax-async-generators" "^7.7.4" "@babel/plugin-proposal-dynamic-import@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-dynamic-import" "^7.7.4" "@babel/plugin-proposal-json-strings@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings" "^7.7.4" "@babel/plugin-proposal-object-rest-spread@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71" integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.7.4" "@babel/plugin-proposal-optional-catch-binding@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" "@babel/plugin-proposal-unicode-property-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz#7c239ccaf09470dbe1d453d50057460e84517ebb" integrity sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-async-generators@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-dynamic-import@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-top-level-await@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-arrow-functions@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-async-to-generator@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== dependencies: "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.7.4" "@babel/plugin-transform-block-scoped-functions@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-block-scoping@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" "@babel/plugin-transform-classes@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== dependencies: "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-define-map" "^7.7.4" "@babel/helper-function-name" "^7.7.4" "@babel/helper-optimise-call-expression" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.7.4" "@babel/helper-split-export-declaration" "^7.7.4" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-destructuring@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-dotall-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz#f7ccda61118c5b7a2599a72d5e3210884a021e96" integrity sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-duplicate-keys@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-exponentiation-operator@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-for-of@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-function-name@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== dependencies: "@babel/helper-function-name" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-literals@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-member-expression-literals@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-modules-amd@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.4.tgz#276b3845ca2b228f2995e453adc2e6f54d72fb71" integrity sha512-/542/5LNA18YDtg1F+QHvvUSlxdvjZoD/aldQwkq+E3WCkbEjNSN9zdrOXaSlfg3IfGi22ijzecklF/A7kVZFQ== dependencies: "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" "@babel/plugin-transform-modules-commonjs@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.4.tgz#bee4386e550446343dd52a571eda47851ff857a3" integrity sha512-k8iVS7Jhc367IcNF53KCwIXtKAH7czev866ThsTgy8CwlXjnKZna2VHwChglzLleYrcHz1eQEIJlGRQxB53nqA== dependencies: "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.7.4" babel-plugin-dynamic-import-node "^2.3.0" "@babel/plugin-transform-modules-systemjs@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== dependencies: "@babel/helper-hoist-variables" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" "@babel/plugin-transform-modules-umd@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== dependencies: "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/plugin-transform-new-target@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-object-super@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.7.4" "@babel/plugin-transform-parameters@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce" integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw== dependencies: "@babel/helper-call-delegate" "^7.7.4" "@babel/helper-get-function-arity" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-property-literals@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-regenerator@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.4.tgz#d18eac0312a70152d7d914cbed2dc3999601cfc0" integrity sha512-e7MWl5UJvmPEwFJTwkBlPmqixCtr9yAASBqff4ggXTNicZiwbF8Eefzm6NVgfiBp7JdAGItecnctKTgH44q2Jw== dependencies: regenerator-transform "^0.14.0" "@babel/plugin-transform-reserved-words@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-shorthand-properties@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-spread@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-sticky-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" "@babel/plugin-transform-template-literals@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== dependencies: "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typeof-symbol@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-unicode-regex@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/preset-env@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.4.tgz#ccaf309ae8d1ee2409c85a4e2b5e280ceee830f8" integrity sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g== dependencies: "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.7.4" "@babel/plugin-proposal-dynamic-import" "^7.7.4" "@babel/plugin-proposal-json-strings" "^7.7.4" "@babel/plugin-proposal-object-rest-spread" "^7.7.4" "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" "@babel/plugin-syntax-async-generators" "^7.7.4" "@babel/plugin-syntax-dynamic-import" "^7.7.4" "@babel/plugin-syntax-json-strings" "^7.7.4" "@babel/plugin-syntax-object-rest-spread" "^7.7.4" "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" "@babel/plugin-syntax-top-level-await" "^7.7.4" "@babel/plugin-transform-arrow-functions" "^7.7.4" "@babel/plugin-transform-async-to-generator" "^7.7.4" "@babel/plugin-transform-block-scoped-functions" "^7.7.4" "@babel/plugin-transform-block-scoping" "^7.7.4" "@babel/plugin-transform-classes" "^7.7.4" "@babel/plugin-transform-computed-properties" "^7.7.4" "@babel/plugin-transform-destructuring" "^7.7.4" "@babel/plugin-transform-dotall-regex" "^7.7.4" "@babel/plugin-transform-duplicate-keys" "^7.7.4" "@babel/plugin-transform-exponentiation-operator" "^7.7.4" "@babel/plugin-transform-for-of" "^7.7.4" "@babel/plugin-transform-function-name" "^7.7.4" "@babel/plugin-transform-literals" "^7.7.4" "@babel/plugin-transform-member-expression-literals" "^7.7.4" "@babel/plugin-transform-modules-amd" "^7.7.4" "@babel/plugin-transform-modules-commonjs" "^7.7.4" "@babel/plugin-transform-modules-systemjs" "^7.7.4" "@babel/plugin-transform-modules-umd" "^7.7.4" "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" "@babel/plugin-transform-new-target" "^7.7.4" "@babel/plugin-transform-object-super" "^7.7.4" "@babel/plugin-transform-parameters" "^7.7.4" "@babel/plugin-transform-property-literals" "^7.7.4" "@babel/plugin-transform-regenerator" "^7.7.4" "@babel/plugin-transform-reserved-words" "^7.7.4" "@babel/plugin-transform-shorthand-properties" "^7.7.4" "@babel/plugin-transform-spread" "^7.7.4" "@babel/plugin-transform-sticky-regex" "^7.7.4" "@babel/plugin-transform-template-literals" "^7.7.4" "@babel/plugin-transform-typeof-symbol" "^7.7.4" "@babel/plugin-transform-unicode-regex" "^7.7.4" "@babel/types" "^7.7.4" browserslist "^4.6.0" core-js-compat "^3.1.1" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" "@babel/runtime@^7.4.5": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.4.tgz#b23a856751e4bf099262f867767889c0e3fe175b" integrity sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw== dependencies: regenerator-runtime "^0.13.2" "@babel/template@^7.4.0", "@babel/template@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== dependencies: "@babel/code-frame" "^7.0.0" "@babel/parser" "^7.7.4" "@babel/types" "^7.7.4" "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== dependencies: "@babel/code-frame" "^7.5.5" "@babel/generator" "^7.7.4" "@babel/helper-function-name" "^7.7.4" "@babel/helper-split-export-declaration" "^7.7.4" "@babel/parser" "^7.7.4" "@babel/types" "^7.7.4" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" "@babel/types@^7.4.0", "@babel/types@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== dependencies: esutils "^2.0.2" lodash "^4.17.13" to-fast-properties "^2.0.0" "@commitlint/cli@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-8.2.0.tgz#fbf9969e04e2162d985eaa644fdad6ce807aadb6" integrity sha512-8fJ5pmytc38yw2QWbTTJmXLfSiWPwMkHH4govo9zJ/+ERPBF2jvlxD/dQvk24ezcizjKc6LFka2edYC4OQ+Dgw== dependencies: "@commitlint/format" "^8.2.0" "@commitlint/lint" "^8.2.0" "@commitlint/load" "^8.2.0" "@commitlint/read" "^8.2.0" babel-polyfill "6.26.0" chalk "2.4.2" get-stdin "7.0.0" lodash "4.17.14" meow "5.0.0" resolve-from "5.0.0" resolve-global "1.0.0" "@commitlint/config-conventional@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-8.2.0.tgz#886a5538e3708e017ec2871e0cbce00f635d3102" integrity sha512-HuwlHQ3DyVhpK9GHgTMhJXD8Zp8PGIQVpQGYh/iTrEU6TVxdRC61BxIDZvfWatCaiG617Z/U8maRAFrqFM4TqA== "@commitlint/ensure@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-8.2.0.tgz#fad0c81c3d3bd09aa5fbcbcc483ae1f39bc8af8f" integrity sha512-XZZih/kcRrqK7lEORbSYCfqQw6byfsFbLygRGVdJMlCPGu9E2MjpwCtoj5z7y/lKfUB3MJaBhzn2muJqS1gC6A== dependencies: lodash "4.17.14" "@commitlint/execute-rule@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.2.0.tgz#aefb3744e22613660adefb7ebcccaa60bd24e78d" integrity sha512-9MBRthHaulbWTa8ReG2Oii2qc117NuvzhZdnkuKuYLhker7sUXGFcVhLanuWUKGyfyI2o9zVr/NHsNbCCsTzAA== "@commitlint/format@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-8.2.0.tgz#0a2447fadac7c0421ce8a8d7e27dfa2172c737d4" integrity sha512-sA77agkDEMsEMrlGhrLtAg8vRexkOofEEv/CZX+4xlANyAz2kNwJvMg33lcL65CBhqKEnRRJRxfZ1ZqcujdKcQ== dependencies: chalk "^2.0.1" "@commitlint/is-ignored@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-8.2.0.tgz#b6409ab28bf5a80f25e14da17da3916adb230a89" integrity sha512-ADaGnKfbfV6KD1pETp0Qf7XAyc75xTy3WJlbvPbwZ4oPdBMsXF0oXEEGMis6qABfU2IXan5/KAJgAFX3vdd0jA== dependencies: "@types/semver" "^6.0.1" semver "6.2.0" "@commitlint/lint@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-8.2.0.tgz#aadc606379f3550eb877f16d4f5b103639cbf92a" integrity sha512-ch9JN8aR37ufdjoWv50jLfvFz9rWMgLW5HEkMGLsM/51gjekmQYS5NJg8S2+6F5+jmralAO7VkUMI6FukXKX0A== dependencies: "@commitlint/is-ignored" "^8.2.0" "@commitlint/parse" "^8.2.0" "@commitlint/rules" "^8.2.0" babel-runtime "^6.23.0" lodash "4.17.14" "@commitlint/load@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.2.0.tgz#9ca53a0c795e4f63d796b4d42279e856549add1a" integrity sha512-EV6PfAY/p83QynNd1llHxJiNxKmp43g8+7dZbyfHFbsGOdokrCnoelAVZ+WGgktXwLN/uXyfkcIAxwac015UYw== dependencies: "@commitlint/execute-rule" "^8.2.0" "@commitlint/resolve-extends" "^8.2.0" babel-runtime "^6.23.0" chalk "2.4.2" cosmiconfig "^5.2.0" lodash "4.17.14" resolve-from "^5.0.0" "@commitlint/message@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-8.2.0.tgz#bdc0388183f6bc6006c7e7e197a721683011907a" integrity sha512-LNsSwDLIFgE3nb/Sb1PIluYNy4Q8igdf4tpJCdv5JJDf7CZCZt3ZTglj0YutZZorpRRuHJsVIB2+dI4bVH3bFw== "@commitlint/parse@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-8.2.0.tgz#de80137e89ee5a2d3029656c9b33e90c88c6f56c" integrity sha512-vzouqroTXG6QXApkrps0gbeSYW6w5drpUk7QAeZIcaCSPsQXDM8eqqt98ZzlzLJHo5oPNXPX1AAVSTrssvHemA== dependencies: conventional-changelog-angular "^1.3.3" conventional-commits-parser "^2.1.0" lodash "^4.17.11" "@commitlint/read@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-8.2.0.tgz#54c6549723d532c74434ee0d74e0459032dc9159" integrity sha512-1tBai1VuSQmsOTsvJr3Fi/GZqX3zdxRqYe/yN4i3cLA5S2Y4QGJ5I3l6nGZlKgm/sSelTCVKHltrfWU8s5H7SA== dependencies: "@commitlint/top-level" "^8.2.0" "@marionebl/sander" "^0.6.0" babel-runtime "^6.23.0" git-raw-commits "^1.3.0" "@commitlint/resolve-extends@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.2.0.tgz#b7f2f0c71c10f24b98a199ed11d2c14cfd7a318f" integrity sha512-cwi0HUsDcD502HBP8huXfTkVuWmeo1Fiz3GKxNwMBBsJV4+bKa7QrtxbNpXhVuarX7QjWfNTvmW6KmFS7YK9uw== dependencies: "@types/node" "^12.0.2" import-fresh "^3.0.0" lodash "4.17.14" resolve-from "^5.0.0" resolve-global "^1.0.0" "@commitlint/rules@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-8.2.0.tgz#4cd6a323ca1a3f3d33ae6dc723f8c88f3dcde347" integrity sha512-FlqSBBP2Gxt5Ibw+bxdYpzqYR6HI8NIBpaTBhAjSEAduQtdWFMOhF0zsgkwH7lHN7opaLcnY2fXxAhbzTmJQQA== dependencies: "@commitlint/ensure" "^8.2.0" "@commitlint/message" "^8.2.0" "@commitlint/to-lines" "^8.2.0" babel-runtime "^6.23.0" "@commitlint/to-lines@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-8.2.0.tgz#dddb5916a457e1a79e437115a9b8eac7bf9ad52a" integrity sha512-LXTYG3sMenlN5qwyTZ6czOULVcx46uMy+MEVqpvCgptqr/MZcV/C2J+S2o1DGwj1gOEFMpqrZaE3/1R2Q+N8ng== "@commitlint/top-level@^8.2.0": version "8.2.0" resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-8.2.0.tgz#206e7cbc54dbe9494190677f887dd60943fed5b0" integrity sha512-Yaw4KmYNy31/HhRUuZ+fupFcDalnfpdu4JGBgGAqS9aBHdMSSWdWqtAaDaxdtWjTZeN3O0sA2gOhXwvKwiDwvw== dependencies: find-up "^4.0.0" "@goto-bus-stop/common-shake@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@goto-bus-stop/common-shake/-/common-shake-2.3.0.tgz#a749e4254e193cb1b10b6672442eeae3413a3661" integrity sha512-c1kyQGNRNbklB+Gm9oZtuIdNkVJLYSU32S4IXe5LgJJwyeyBQoATZb5y0HwjMx9v9tBe9G02DZfTj4NkOllNJA== dependencies: acorn "^5.7.3" debug "^3.2.6" escope "^3.6.0" "@marionebl/sander@^0.6.0": version "0.6.1" resolved "https://registry.yarnpkg.com/@marionebl/sander/-/sander-0.6.1.tgz#1958965874f24bc51be48875feb50d642fc41f7b" integrity sha1-GViWWHTyS8Ub5Ih1/rUNZC/EH3s= dependencies: graceful-fs "^4.1.3" mkdirp "^0.5.1" rimraf "^2.5.2" "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== dependencies: call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" "@nodelib/fs.scandir@2.1.3": version "2.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== dependencies: "@nodelib/fs.stat" "2.0.3" run-parallel "^1.1.9" "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== "@nodelib/fs.walk@^1.2.3": version "1.2.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== dependencies: "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== dependencies: any-observable "^0.3.0" "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== dependencies: defer-to-connect "^1.0.1" "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== "@types/glob@^7.1.1": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== dependencies: "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" "@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*", "@types/node@^12.0.2": version "12.12.14" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.14.tgz#1c1d6e3c75dba466e0326948d56e8bd72a1903d2" integrity sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA== "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/semver@^6.0.1": version "6.2.0" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.0.tgz#d688d574400d96c5b0114968705366f431831e1a" integrity sha512-1OzrNb4RuAzIT7wHSsgZRlMBlNsJl+do6UblR7JMW4oB7bbR+uBEYtUh7gEc/jM84GGilh68lSOokyM/zNUlBA== "@types/unist@^2.0.0", "@types/unist@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== Base64@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/Base64/-/Base64-1.1.0.tgz#810ef21afa8357df92ad7b5389188c446b9cb956" integrity sha512-qeacf8dvGpf+XAT27ESHMh7z84uRzj/ua2pQdJg483m3bEXv/kVFtDnMgvf70BQGqzbZhR9t6BmASzKvqfJf3Q== JSON2@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/JSON2/-/JSON2-0.1.0.tgz#8d7493040a63d5835af75f47decb83ab6c8c0790" integrity sha1-jXSTBApj1YNa919H3suDq2yMB5A= JSONStream@^1.0.3, JSONStream@^1.0.4, JSONStream@^1.3.2: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= accepts@~1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" integrity sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo= dependencies: mime-types "~2.1.6" negotiator "0.5.3" accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: mime-types "~2.1.24" negotiator "0.6.2" acorn-jsx@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1, acorn-node@^1.8.2: version "1.8.2" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== dependencies: acorn "^7.0.0" acorn-walk "^7.0.0" xtend "^4.0.2" acorn-walk@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.0.0.tgz#c8ba6f0f1aac4b0a9e32d1f0af12be769528f36b" integrity sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg== acorn@^5.0.0, acorn@^5.1.0, acorn@^5.2.1, acorn@^5.7.3: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== acorn@^7.0.0, acorn@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== adm-zip@~0.4.3: version "0.4.13" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a" integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw== agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: es6-promisify "^5.0.0" aggregate-error@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" ajv@^6.10.0, ajv@^6.10.2: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" alce@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/alce/-/alce-1.0.0.tgz#426184c98ee288d0eeac77fd63fed680b667cab6" integrity sha1-QmGEyY7iiNDurHf9Y/7WgLZnyrY= dependencies: esprima "~1.0.4" estraverse "~1.3.0" amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= ansi-align@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== dependencies: string-width "^3.0.0" ansi-escapes@^3.0.0, ansi-escapes@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-escapes@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== dependencies: type-fest "^0.8.1" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== dependencies: micromatch "^2.1.5" normalize-path "^2.0.0" anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" append-field@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY= append-transform@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== dependencies: default-require-extensions "^2.0.0" aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== archiver@0.14.x: version "0.14.4" resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.14.4.tgz#5b9ddb9f5ee1ceef21cb8f3b020e6240ecb4315c" integrity sha1-W53bn17hzu8hy487Ag5iQOy0MVw= dependencies: async "~0.9.0" buffer-crc32 "~0.2.1" glob "~4.3.0" lazystream "~0.1.0" lodash "~3.2.0" readable-stream "~1.0.26" tar-stream "~1.1.0" zip-stream "~0.5.0" archiver@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.12.0.tgz#b8ccde2508cab9092bb7106630139c0f39a280cc" integrity sha1-uMzeJQjKuQkrtxBmMBOcDzmigMw= dependencies: async "~0.9.0" buffer-crc32 "~0.2.1" glob "~4.0.6" lazystream "~0.1.0" lodash "~2.4.1" readable-stream "~1.0.26" tar-stream "~1.0.0" zip-stream "~0.4.0" archiver@~0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/archiver/-/archiver-0.7.1.tgz#cf152d794f86bbd93f9858da60d36aaeabad9bbf" integrity sha1-zxUteU+Gu9k/mFjaYNNqrqutm78= dependencies: file-utils "~0.1.5" lazystream "~0.1.0" lodash "~2.4.1" readable-stream "~1.0.24" zip-stream "~0.2.0" archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" integrity sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas= arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= dependencies: arr-flatten "^1.0.1" arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== array-filter@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= array-from@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-includes@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= dependencies: define-properties "^1.1.2" es-abstract "^1.7.0" array-iterate@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.3.tgz#b116bdb1e37f3c3fec13acdfb91ac829f122543c" integrity sha512-7MIv7HE9MuzfK6B2UnWv07oSHBLOaY1UUXAxZ07bIeRM+4IkPTlveMDs9MY//qvxPZPSvCn2XV4bmtQgSkVodg== array-map@0.0.0, array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= array-reduce@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-uniq@^1.0.1, array-uniq@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" asn1@0.1.11: version "0.1.11" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" integrity sha1-VZvhg3bQik7E2+gId9J4GGObLfc= assert-plus@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" integrity sha1-7nQAlBMALYTOxyGcasgRgS5yMWA= assert@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: object-assign "^4.1.1" util "0.10.3" assert@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.3.0.tgz#03939a622582a812cc202320a0b9a56c9b815849" integrity sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk= dependencies: util "0.10.3" assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= ast-metadata-inferer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ast-metadata-inferer/-/ast-metadata-inferer-0.1.1.tgz#66e24fae9d30ca961fac4880b7fc466f09b25165" integrity sha512-hc9w8Qrgg9Lf9iFcZVhNjUnhrd2BBpTlyCnegPVvCe6O0yMrF57a6Cmh7k+xUsfUOMh9wajOL5AsGOBNEyTCcw== astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== async-each@^1.0.0, async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async@0.9.x, async@~0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= async@~0.2.6, async@~0.2.7, async@~0.2.9: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= asyncreduce@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/asyncreduce/-/asyncreduce-0.1.4.tgz#18210e01978bfdcba043955497a5cd315c0a6a41" integrity sha1-GCEOAZeL/cugQ5VUl6XNMVwKakE= dependencies: runnel "~0.5.0" atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== author-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" integrity sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA= aws-sign2@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" integrity sha1-xXED96F/wDfwLXwuZLYC6iI/fWM= babel-plugin-dynamic-import-node@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== dependencies: object.assign "^4.1.0" babel-polyfill@6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= dependencies: babel-runtime "^6.26.0" core-js "^2.5.0" regenerator-runtime "^0.10.5" babel-runtime@^6.23.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" babelify@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/babelify/-/babelify-10.0.0.tgz#fe73b1a22583f06680d8d072e25a1e0d1d1d7fb5" integrity sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg== bail@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b" integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww== balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" component-emitter "^1.2.1" define-property "^1.0.0" isobject "^3.0.1" mixin-deep "^1.2.0" pascalcase "^0.1.1" basic-auth-connect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" integrity sha1-/bC0OWLKe0BFanwrtI/hc9otISI= batch@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.0.tgz#fd2e05a7a5d696b4db9314013e285d8ff3557ec3" integrity sha1-/S4Fp6XWlrTbkxQBPihdj/NVfsM= binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== bl@^0.9.0, bl@~0.9.0: version "0.9.5" resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054" integrity sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ= dependencies: readable-stream "~1.0.26" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== body-parser@1.19.0, body-parser@^1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== dependencies: bytes "3.1.0" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" http-errors "1.7.2" iconv-lite "0.4.24" on-finished "~2.3.0" qs "6.7.0" raw-body "2.4.0" type-is "~1.6.17" body-parser@~1.12.3: version "1.12.4" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.12.4.tgz#090700c4ba28862a8520ef378395fdee5f61c229" integrity sha1-CQcAxLoohiqFIO83g5X97l9hwik= dependencies: bytes "1.0.0" content-type "~1.0.1" debug "~2.2.0" depd "~1.0.1" iconv-lite "0.4.8" on-finished "~2.2.1" qs "2.4.2" raw-body "~2.0.1" type-is "~1.6.2" boom@0.4.x: version "0.4.2" resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" integrity sha1-emNune1O/O+xnO9JR6PGffrukRs= dependencies: hoek "0.9.x" boxen@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-3.2.0.tgz#fbdff0de93636ab4450886b6ff45b92d098f45eb" integrity sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A== dependencies: ansi-align "^3.0.0" camelcase "^5.3.1" chalk "^2.4.2" cli-boxes "^2.2.0" string-width "^3.0.0" term-size "^1.2.0" type-fest "^0.3.0" widest-line "^2.0.0" brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= dependencies: expand-range "^1.8.1" preserve "^0.2.0" repeat-element "^1.1.2" braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" extend-shallow "^2.0.1" fill-range "^4.0.0" isobject "^3.0.1" repeat-element "^1.1.2" snapdragon "^0.8.1" snapdragon-node "^2.0.1" split-string "^3.0.2" to-regex "^3.0.1" braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browser-pack-flat@^3.0.9: version "3.4.2" resolved "https://registry.yarnpkg.com/browser-pack-flat/-/browser-pack-flat-3.4.2.tgz#aa3bee87ad1aab8f7de34d4704610a5981c6cf24" integrity sha512-TrUo6n2fGSOCYFAKkt/EkgenytAuuCI88fmXFA60aNFVHvz3CZEBTXYSvvXVpU6xpjM8lj/6vkC6Exn8KPjtPw== dependencies: JSONStream "^1.3.2" combine-source-map "^0.8.0" convert-source-map "^1.5.1" count-lines "^0.1.2" dedent "^0.7.0" estree-is-member-expression "^1.0.0" estree-is-require "^1.0.0" esutils "^2.0.2" path-parse "^1.0.5" scope-analyzer "^2.0.0" stream-combiner "^0.2.2" through2 "^2.0.3" transform-ast "^2.4.2" umd "^3.0.3" wrap-comment "^1.0.0" browser-pack@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-5.0.1.tgz#4197719b20c6e0aaa09451c5111e53efb6fbc18d" integrity sha1-QZdxmyDG4KqglFHFER5T77b7wY0= dependencies: JSONStream "^1.0.3" combine-source-map "~0.6.1" defined "^1.0.0" through2 "^1.0.0" umd "^3.0.0" browser-pack@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== dependencies: JSONStream "^1.0.3" combine-source-map "~0.8.0" defined "^1.0.0" safe-buffer "^5.1.1" through2 "^2.0.0" umd "^3.0.0" browser-process-hrtime@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== browser-resolve@^1.11.0, browser-resolve@^1.7.0: version "1.11.3" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== dependencies: resolve "1.1.7" browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= browser-unpack@^1.1.0: version "1.4.2" resolved "https://registry.yarnpkg.com/browser-unpack/-/browser-unpack-1.4.2.tgz#7a708774dc7448df1c24a735d65d409708b95ce2" integrity sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA== dependencies: acorn-node "^1.5.2" concat-stream "^1.5.0" minimist "^1.1.1" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" create-hash "^1.1.0" evp_bytestokey "^1.0.3" inherits "^2.0.1" safe-buffer "^5.0.1" browserify-cipher@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" evp_bytestokey "^1.0.0" browserify-des@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" safe-buffer "^5.1.2" browserify-istanbul@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/browserify-istanbul/-/browserify-istanbul-0.1.5.tgz#01c8e31d6a358ee5150f4321c3f28995a964c39f" integrity sha1-AcjjHWo1juUVD0Mhw/KJlalkw58= dependencies: istanbul "^0.2.8" minimatch "^0.2.14" through "^2.3.4" browserify-rsa@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= dependencies: bn.js "^4.1.0" randombytes "^2.0.1" browserify-sign@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" create-hash "^1.1.0" create-hmac "^1.1.2" elliptic "^6.0.0" inherits "^2.0.1" parse-asn1 "^5.0.0" browserify-zlib@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0= dependencies: pako "~0.2.0" browserify-zlib@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" browserify@13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.0.0.tgz#8f223bb24ff4ee4335e6bea9671de294e43ba6a3" integrity sha1-jyI7sk/07kM15r6pZx3ilOQ7pqM= dependencies: JSONStream "^1.0.3" assert "~1.3.0" browser-pack "^6.0.1" browser-resolve "^1.11.0" browserify-zlib "~0.1.2" buffer "^4.1.0" concat-stream "~1.5.1" console-browserify "^1.1.0" constants-browserify "~1.0.0" crypto-browserify "^3.0.0" defined "^1.0.0" deps-sort "^2.0.0" domain-browser "~1.1.0" duplexer2 "~0.1.2" events "~1.1.0" glob "^5.0.15" has "^1.0.0" htmlescape "^1.1.0" https-browserify "~0.0.0" inherits "~2.0.1" insert-module-globals "^7.0.0" isarray "0.0.1" labeled-stream-splicer "^2.0.0" module-deps "^4.0.2" os-browserify "~0.1.1" parents "^1.0.1" path-browserify "~0.0.0" process "~0.11.0" punycode "^1.3.2" querystring-es3 "~0.2.0" read-only-stream "^2.0.0" readable-stream "^2.0.2" resolve "^1.1.4" shasum "^1.0.0" shell-quote "^1.4.3" stream-browserify "^2.0.0" stream-http "^2.0.0" string_decoder "~0.10.0" subarg "^1.0.0" syntax-error "^1.1.1" through2 "^2.0.0" timers-browserify "^1.0.1" tty-browserify "~0.0.0" url "~0.11.0" util "~0.10.1" vm-browserify "~0.0.1" xtend "^4.0.0" browserify@^13.0.0: version "13.3.0" resolved "https://registry.yarnpkg.com/browserify/-/browserify-13.3.0.tgz#b5a9c9020243f0c70e4675bec8223bc627e415ce" integrity sha1-tanJAgJD8McORnW+yCI7xifkFc4= dependencies: JSONStream "^1.0.3" assert "^1.4.0" browser-pack "^6.0.1" browser-resolve "^1.11.0" browserify-zlib "~0.1.2" buffer "^4.1.0" cached-path-relative "^1.0.0" concat-stream "~1.5.1" console-browserify "^1.1.0" constants-browserify "~1.0.0" crypto-browserify "^3.0.0" defined "^1.0.0" deps-sort "^2.0.0" domain-browser "~1.1.0" duplexer2 "~0.1.2" events "~1.1.0" glob "^7.1.0" has "^1.0.0" htmlescape "^1.1.0" https-browserify "~0.0.0" inherits "~2.0.1" insert-module-globals "^7.0.0" labeled-stream-splicer "^2.0.0" module-deps "^4.0.8" os-browserify "~0.1.1" parents "^1.0.1" path-browserify "~0.0.0" process "~0.11.0" punycode "^1.3.2" querystring-es3 "~0.2.0" read-only-stream "^2.0.0" readable-stream "^2.0.2" resolve "^1.1.4" shasum "^1.0.0" shell-quote "^1.6.1" stream-browserify "^2.0.0" stream-http "^2.0.0" string_decoder "~0.10.0" subarg "^1.0.0" syntax-error "^1.1.1" through2 "^2.0.0" timers-browserify "^1.0.1" tty-browserify "~0.0.0" url "~0.11.0" util "~0.10.1" vm-browserify "~0.0.1" xtend "^4.0.0" browserify@^16.5.0: version "16.5.0" resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.0.tgz#a1c2bc0431bec11fd29151941582e3f645ede881" integrity sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw== dependencies: JSONStream "^1.0.3" assert "^1.4.0" browser-pack "^6.0.1" browser-resolve "^1.11.0" browserify-zlib "~0.2.0" buffer "^5.0.2" cached-path-relative "^1.0.0" concat-stream "^1.6.0" console-browserify "^1.1.0" constants-browserify "~1.0.0" crypto-browserify "^3.0.0" defined "^1.0.0" deps-sort "^2.0.0" domain-browser "^1.2.0" duplexer2 "~0.1.2" events "^2.0.0" glob "^7.1.0" has "^1.0.0" htmlescape "^1.1.0" https-browserify "^1.0.0" inherits "~2.0.1" insert-module-globals "^7.0.0" labeled-stream-splicer "^2.0.0" mkdirp "^0.5.0" module-deps "^6.0.0" os-browserify "~0.3.0" parents "^1.0.1" path-browserify "~0.0.0" process "~0.11.0" punycode "^1.3.2" querystring-es3 "~0.2.0" read-only-stream "^2.0.0" readable-stream "^2.0.2" resolve "^1.1.4" shasum "^1.0.0" shell-quote "^1.6.1" stream-browserify "^2.0.0" stream-http "^3.0.0" string_decoder "^1.1.1" subarg "^1.0.0" syntax-error "^1.1.1" through2 "^2.0.0" timers-browserify "^1.0.1" tty-browserify "0.0.1" url "~0.11.0" util "~0.10.1" vm-browserify "^1.0.0" xtend "^4.0.0" browserslist@^4.6.0, browserslist@^4.6.3, browserslist@^4.7.3: version "4.8.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.0.tgz#6f06b0f974a7cc3a84babc2ccc56493668e3c789" integrity sha512-HYnxc/oLRWvJ3TsGegR0SRL/UDnknGq2s/a8dYYEO+kOQ9m9apKoS5oiathLKZdh/e9uE+/J3j92qPlGD/vTqA== dependencies: caniuse-lite "^1.0.30001012" electron-to-chromium "^1.3.317" node-releases "^1.1.41" buf-compare@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a" integrity sha1-/vKNqLgROgoNtEMLC2Rntpcws0o= buffer-crc32@0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.1.tgz#be3e5382fc02b6d6324956ac1af98aa98b08534c" integrity sha1-vj5TgvwCttYySVasGvmKqYsIU0w= buffer-crc32@~0.2.1: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.1.0: version "4.9.2" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" isarray "^1.0.0" buffer@^5.0.2: version "5.4.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= bundle-collapser@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/bundle-collapser/-/bundle-collapser-1.3.0.tgz#f4b4ff58b2f22ee7701b20fa76306e23f53a3fb6" integrity sha1-9LT/WLLyLudwGyD6djBuI/U6P7Y= dependencies: browser-pack "^5.0.1" browser-unpack "^1.1.0" concat-stream "^1.5.0" falafel "^2.1.0" minimist "^1.1.1" through2 "^2.0.0" busboy@^0.2.11: version "0.2.14" resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" integrity sha1-bCpiLvz0fFe7vh4qnDetNseSVFM= dependencies: dicer "0.2.5" readable-stream "1.1.x" bytes@0.2.1, bytes@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/bytes/-/bytes-0.2.1.tgz#555b08abcb063f8975905302523e4cd4ffdfdf31" integrity sha1-VVsIq8sGP4l1kFMCUj5M1P/f3zE= bytes@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= bytes@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" integrity sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q= bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" get-value "^2.0.6" has-value "^1.0.0" isobject "^3.0.1" set-value "^2.0.0" to-object-path "^0.3.0" union-value "^1.0.0" unset-value "^1.0.0" cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" http-cache-semantics "^4.0.0" keyv "^3.0.0" lowercase-keys "^2.0.0" normalize-url "^4.1.0" responselike "^1.0.2" cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== caching-transform@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-3.0.2.tgz#601d46b91eca87687a281e71cef99791b0efca70" integrity sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w== dependencies: hasha "^3.0.0" make-dir "^2.0.0" package-hash "^3.0.0" write-file-atomic "^2.4.2" call-matcher@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-2.0.0.tgz#a38bee4e9ddbeec76aa31cc20311085a34dd395b" integrity sha512-CIDC5wZZfZ2VjZu849WQckS58Z3pJXFfRaSjNjgo/q3in5zxkhTwVL83vttgtmvyLG7TuDlLlBya7SKP6CjDIA== dependencies: deep-equal "^1.0.0" espurify "^2.0.0" estraverse "^4.0.0" call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= dependencies: caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= dependencies: camelcase "^4.1.0" map-obj "^2.0.0" quick-lru "^1.0.0" camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-db@^1.0.30000977: version "1.0.30001012" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001012.tgz#a792225f33a49068c9c2f5c44f759151f2111d61" integrity sha512-fm4VZQo0F1WYTmJcaTsqGhRuqcbkUW1/1hx8n5xdkbJSyaJV3jZ1vPXHYNcn376cAcuhxUIcE9TpHlSAYtN6bA== caniuse-lite@^1.0.30001012: version "1.0.30001012" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001012.tgz#653ec635e815b9e0fb801890923b0c2079eb34ec" integrity sha512-7RR4Uh04t9K1uYRWzOJmzplgEOAXbfK72oVNokCdMzA67trrhPzy93ahKk1AWHiA0c58tD2P+NHqxrA8FZ+Trg== caseless@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.6.0.tgz#8167c1ab8397fb5bb95f96d28e5a81c50f247ac4" integrity sha1-gWfBq4OX+1u5X5bSjlqBxQ8kesQ= ccount@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386" integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w== chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" has-ansi "^2.0.0" strip-ansi "^3.0.0" supports-color "^2.0.0" char-split@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/char-split/-/char-split-0.2.0.tgz#8755eda641e5db277dd0f509b517c827e50a8edf" integrity sha1-h1XtpkHl2yd90PUJtRfIJ+UKjt8= dependencies: through "2.3.4" character-entities-html4@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef" integrity sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg== character-entities-legacy@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== character-entities@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== character-reference-invalid@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chokidar@^1.0.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= dependencies: anymatch "^1.3.0" async-each "^1.0.0" glob-parent "^2.0.0" inherits "^2.0.1" is-binary-path "^1.0.0" is-glob "^2.0.0" path-is-absolute "^1.0.0" readdirp "^2.0.0" optionalDependencies: fsevents "^1.0.0" chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: anymatch "^2.0.0" async-each "^1.0.1" braces "^2.3.2" glob-parent "^3.1.0" inherits "^2.0.3" is-binary-path "^1.0.0" is-glob "^4.0.0" normalize-path "^3.0.0" path-is-absolute "^1.0.0" readdirp "^2.2.1" upath "^1.1.1" optionalDependencies: fsevents "^1.2.7" chokidar@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== dependencies: anymatch "~3.1.1" braces "~3.0.2" glob-parent "~5.1.0" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" readdirp "~3.2.0" optionalDependencies: fsevents "~2.1.1" chownr@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" isobject "^3.0.0" static-extend "^0.1.1" clean-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" integrity sha1-jffHquUf02h06PjQW5GAvBGj/tc= dependencies: escape-string-regexp "^1.0.5" clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-boxes@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= dependencies: slice-ansi "0.0.4" string-width "^1.0.1" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: string-width "^3.1.0" strip-ansi "^5.2.0" wrap-ansi "^5.1.0" clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: mimic-response "^1.0.0" co@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78" integrity sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g= code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= codecov@^3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.6.1.tgz#f39fc49413445555f81f8e3ca5730992843b4517" integrity sha512-IUJB6WG47nWK7o50etF8jBadxdMw7DmoQg05yIljstXFBGB6clOZsIj6iD4P82T2YaIU3qq+FFu8K9pxgkCJDQ== dependencies: argv "^0.0.2" ignore-walk "^3.0.1" js-yaml "^3.13.1" teeny-request "^3.11.3" urlgrey "^0.4.4" collapse-white-space@^1.0.2, collapse-white-space@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a" integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ== collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= colors@*: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== colors@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w= combine-source-map@^0.8.0, combine-source-map@~0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= dependencies: convert-source-map "~1.1.0" inline-source-map "~0.6.0" lodash.memoize "~3.0.3" source-map "~0.5.3" combine-source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.6.1.tgz#9b4a09c316033d768e0f11e029fa2730e079ad96" integrity sha1-m0oJwxYDPXaODxHgKfonMOB5rZY= dependencies: convert-source-map "~1.1.0" inline-source-map "~0.5.0" lodash.memoize "~3.0.3" source-map "~0.4.2" combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" combined-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" integrity sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8= dependencies: delayed-stream "0.0.5" commander@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/commander/-/commander-1.3.2.tgz#8a8f30ec670a6fdd64af52f1914b907d79ead5b5" integrity sha1-io8w7GcKb91kr1LxkUuQfXnq1bU= dependencies: keypress "0.1.x" commander@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" integrity sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E= commander@2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= dependencies: graceful-readlink ">= 1.0.0" commander@^2.19.0, commander@^2.20.0, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.0.1.tgz#b67622721785993182e807f4883633e6401ba53c" integrity sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA== commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== common-shakeify@^0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/common-shakeify/-/common-shakeify-0.6.2.tgz#4663fe5ccda665d11ee4c77368b079a7df033d29" integrity sha512-vxlXr26fqxm8ZJ0jh8MlvpeN6IbyUKqsVmgb4rAjDM/0f4nKebiHaAXpF/Mm86W9ENR5iSI7UOnUTylpVyplUA== dependencies: "@goto-bus-stop/common-shake" "^2.2.0" convert-source-map "^1.5.1" through2 "^2.0.3" transform-ast "^2.4.3" wrap-comment "^1.0.1" commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= compare-func@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= dependencies: array-ify "^1.0.0" dot-prop "^3.0.0" component-emitter@^1.2.1, component-emitter@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== compress-commons@~0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-0.1.6.tgz#0c740870fde58cba516f0ac0c822e33a0b85dfa3" integrity sha1-DHQIcP3ljLpRbwrAyCLjOguF36M= dependencies: buffer-crc32 "~0.2.1" crc32-stream "~0.3.1" readable-stream "~1.0.26" compress-commons@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-0.2.9.tgz#422d927430c01abd06cd455b6dfc04cb4cf8003c" integrity sha1-Qi2SdDDAGr0GzUVbbfwEy0z4ADw= dependencies: buffer-crc32 "~0.2.1" crc32-stream "~0.3.1" node-int64 "~0.3.0" readable-stream "~1.0.26" compressible@~2.0.3: version "2.0.17" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== dependencies: mime-db ">= 1.40.0 < 2" compression@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.0.tgz#ccc1a54788da1b3ad7729c49f6a00b3ac9adf47f" integrity sha1-zMGlR4jaGzrXcpxJ9qALOsmt9H8= dependencies: accepts "~1.2.9" bytes "2.1.0" compressible "~2.0.3" debug "~2.2.0" on-headers "~1.0.0" vary "~1.0.0" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" inherits "^2.0.3" readable-stream "^2.2.2" typedarray "^0.0.6" concat-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== dependencies: buffer-from "^1.0.0" inherits "^2.0.3" readable-stream "^3.0.2" typedarray "^0.0.6" concat-stream@~1.5.0, concat-stream@~1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY= dependencies: inherits "~2.0.1" readable-stream "~2.0.0" typedarray "~0.0.5" configstore@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ== dependencies: dot-prop "^4.1.0" graceful-fs "^4.1.2" make-dir "^1.0.0" unique-string "^1.0.0" write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" connect@2.12.0: version "2.12.0" resolved "https://registry.yarnpkg.com/connect/-/connect-2.12.0.tgz#31d8fa0dcacdf1908d822bd2923be8a2d2a7ed9a" integrity sha1-Mdj6DcrN8ZCNgivSkjvootKn7Zo= dependencies: batch "0.5.0" buffer-crc32 "0.2.1" bytes "0.2.1" cookie "0.1.0" cookie-signature "1.0.1" debug ">= 0.7.3 < 1" fresh "0.2.0" methods "0.1.0" multiparty "2.2.0" negotiator "0.3.0" pause "0.0.1" qs "0.6.6" raw-body "1.1.2" send "0.1.4" uid2 "0.0.3" console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= constants-browserify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== dependencies: safe-buffer "5.1.2" content-type@^1.0.2, content-type@~1.0.1, content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== conventional-changelog-angular@^1.3.3: version "1.6.6" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f" integrity sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg== dependencies: compare-func "^1.3.1" q "^1.5.1" conventional-commits-parser@^2.1.0: version "2.1.7" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e" integrity sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.0" lodash "^4.2.1" meow "^4.0.0" split2 "^2.0.0" through2 "^2.0.0" trim-off-newlines "^1.0.0" convert-source-map@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.0.0.tgz#dbdcb69523d3af582f7b5c94b3c25ecf2f3b7355" integrity sha1-29y2lSPTr1gve1yUs8Jezy87c1U= convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" convert-source-map@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= cookie-parser@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.4.tgz#e6363de4ea98c3def9697b93421c09f30cf5d188" integrity sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw== dependencies: cookie "0.3.1" cookie-signature "1.0.6" cookie-signature@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.1.tgz#44e072148af01e6e8e24afbf12690d68ae698ecb" integrity sha1-ROByFIrwHm6OJK+/EmkNaK5pjss= cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= cookie@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.0.tgz#90eb469ddce905c866de687efc43131d8801f9d0" integrity sha1-kOtGndzpBchm3mh+/EMTHYgB+dA= cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== cookiejar@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-1.3.0.tgz#dd00b35679021e99cbd4e855b9ad041913474765" integrity sha1-3QCzVnkCHpnL1OhVua0EGRNHR2U= cookiejar@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-assert@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f" integrity sha1-+F4s+b/tKPdzzIs/pcW2m9wC/j8= dependencies: buf-compare "^1.0.0" is-error "^2.2.0" core-js-compat@^3.1.1: version "3.4.5" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.5.tgz#f072059c0b98ad490eacac082296cfe241af1b58" integrity sha512-rYVvzvKJDKoefdAC+q6VP63vp5hMmeVONCi9pVUbU1qRrtVrmAk/nPhnRg+i+XFd775m1hpG2Yd5RY3X45ccuw== dependencies: browserslist "^4.7.3" semver "^6.3.0" core-js@^2.4.0, core-js@^2.5.0: version "2.6.10" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^5.2.0, cosmiconfig@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== dependencies: import-fresh "^2.0.0" is-directory "^0.3.1" js-yaml "^3.13.1" parse-json "^4.0.0" count-lines@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/count-lines/-/count-lines-0.1.2.tgz#e33493fb6860a82f7159d8237843fbfaefee5962" integrity sha1-4zST+2hgqC9xWdgjeEP7+u/uWWI= cp-file@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.2.0.tgz#40d5ea4a1def2a9acdd07ba5c0b0246ef73dc10d" integrity sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA== dependencies: graceful-fs "^4.1.2" make-dir "^2.0.0" nested-error-stacks "^2.0.0" pify "^4.0.1" safe-buffer "^5.0.1" crc32-stream@~0.3.1: version "0.3.4" resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-0.3.4.tgz#73bc25b45fac1db6632231a7bfce8927e9f06552" integrity sha1-c7wltF+sHbZjIjGnv86JJ+nwZVI= dependencies: buffer-crc32 "~0.2.1" readable-stream "~1.0.24" create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== dependencies: bn.js "^4.1.0" elliptic "^6.0.0" create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" md5.js "^1.3.4" ripemd160 "^2.0.1" sha.js "^2.4.0" create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" inherits "^2.0.1" ripemd160 "^2.0.0" safe-buffer "^5.0.1" sha.js "^2.4.8" cross-env@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941" integrity sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag== dependencies: cross-spawn "^7.0.0" cross-spawn@^4: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= dependencies: lru-cache "^4.0.1" which "^1.2.9" cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" semver "^5.5.0" shebang-command "^1.2.0" which "^1.2.9" cross-spawn@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" cryptiles@0.2.x: version "0.2.2" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" integrity sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw= dependencies: boom "0.4.x" crypto-browserify@^3.0.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" create-ecdh "^4.0.0" create-hash "^1.1.0" create-hmac "^1.1.0" diffie-hellman "^5.0.0" inherits "^2.0.1" pbkdf2 "^3.0.3" public-encrypt "^4.0.0" randombytes "^2.0.0" randomfill "^1.0.3" crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= ctype@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" integrity sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8= currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= dependencies: array-find-index "^1.0.1" d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== dependencies: es5-ext "^0.10.50" type "^1.0.1" dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= dependencies: number-is-nan "^1.0.0" dash-ast@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== date-fns@^1.27.2: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== debug@*, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" debug@0.7.4, debug@~0.7.2, debug@~0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" integrity sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk= debug@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.1.0.tgz#33ab915659d8c2cc8a41443d94d6ebd37697ed21" integrity sha1-M6uRVlnYwsyKQUQ9lNbr03aX7SE= dependencies: ms "0.6.2" debug@2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw= dependencies: ms "2.0.0" debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" "debug@>= 0.7.3 < 1": version "0.8.1" resolved "https://registry.yarnpkg.com/debug/-/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130" integrity sha1-IP9NJvXkIstoobrLu2EDmtjBwTA= debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo= dependencies: ms "0.7.1" decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: decamelize "^1.1.0" map-obj "^1.0.0" decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= dependencies: mimic-response "^1.0.0" dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-equal@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== dependencies: is-arguments "^1.0.4" is-date-object "^1.0.1" is-regex "^1.0.4" object-is "^1.0.1" object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-extend@~0.2.5: version "0.2.11" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.2.11.tgz#7a16ba69729132340506170494bc83f7076fe08f" integrity sha1-eha6aXKRMjQFBhcElLyD9wdv4I8= deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= deep-strict-equal@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz#4a078147a8ab57f6a0d4f5547243cd22f44eb4e4" integrity sha1-SgeBR6irV/ag1PVUckPNIvROtOQ= dependencies: core-assert "^0.2.0" default-require-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= dependencies: strip-bom "^3.0.0" defer-to-connect@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.0.tgz#b41bd7efa8508cef13f8456975f7a278c72833fd" integrity sha512-WE2sZoctWm/v4smfCAdjYbrfS55JiMRdlY9ZubFhsYbteCK9+BvAx4YV7nPjYM6ZnX5BcoVKwfmyx9sIFTgQMQ== define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= del@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== dependencies: globby "^10.0.1" graceful-fs "^4.2.2" is-glob "^4.0.1" is-path-cwd "^2.2.0" is-path-inside "^3.0.1" p-map "^3.0.0" rimraf "^3.0.0" slash "^3.0.0" delayed-stream@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" integrity sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8= delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= depd@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" integrity sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo= depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== deps-sort@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== dependencies: JSONStream "^1.0.3" shasum-object "^1.0.0" subarg "^1.0.0" through2 "^2.0.0" des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= detective@^4.0.0: version "4.7.1" resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== dependencies: acorn "^5.2.1" defined "^1.0.0" detective@^5.0.2: version "5.2.0" resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== dependencies: acorn-node "^1.6.1" defined "^1.0.0" minimist "^1.1.1" dicer@0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" integrity sha1-WZbAhrszIYyBLAkL3cCc0S+stw8= dependencies: readable-stream "1.1.x" streamsearch "0.1.2" diff@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k= diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" randombytes "^2.0.0" dir-glob@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== dependencies: path-type "^3.0.0" dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" isarray "^1.0.0" doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== domain-browser@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" integrity sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw= dot-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= dependencies: is-obj "^1.0.0" dot-prop@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== dependencies: is-obj "^1.0.0" duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= dependencies: readable-stream "^2.0.2" duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= duplexify@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== dependencies: end-of-stream "^1.4.1" inherits "^2.0.3" readable-stream "^3.1.1" stream-shift "^1.0.0" ee-first@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.0.tgz#6a0d7c6221e490feefd92ec3f441c9ce8cd097f4" integrity sha1-ag18YiHkkP7v2S7D9EHJzozQl/Q= ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.317: version "1.3.318" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.318.tgz#267ce297062fe25c229698827f3229b0ac11c0cf" integrity sha512-1RHv5OZGuVKvWYMVR6g1QVQVrsJRaujry04R/6t/7JVs68Ra4V8ewv63fiwcq0uiT302lyTocc1rbNcRuj/HLA== elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= elliptic@^6.0.0: version "6.5.2" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== dependencies: bn.js "^4.4.0" brorand "^1.0.1" hash.js "^1.0.0" hmac-drbg "^1.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" emitter-component@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.0.0.tgz#f04dd18fc3dc3e9a74cbc0f310b088666e4c016f" integrity sha1-8E3Rj8PcPpp0y8DzELCIZm5MAW8= "emoji-regex@>=6.0.0 <=6.1.1": version "6.1.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" enhance-visitors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/enhance-visitors/-/enhance-visitors-1.0.0.tgz#aa945d05da465672a1ebd38fee2ed3da8518e95a" integrity sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo= dependencies: lodash "^4.13.1" env-editor@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.1.tgz#77011e08ce45f46e404e8d996b465c684ca57502" integrity sha512-suh+Vm00GnPQgXpmONTkcUT9LgBSL6sJrRnJxbykT0j+ONjzmIS+1U3ne467ArdZN/42/npp+GnhtwkLQ+vUjw== error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error-stack-parser@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292" integrity sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI= dependencies: stackframe "^0.3.1" es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.16.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.2.tgz#4e874331645e9925edef141e74fc4bd144669d34" integrity sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" is-callable "^1.1.4" is-regex "^1.0.4" object-inspect "^1.7.0" object-keys "^1.1.1" string.prototype.trimleft "^2.1.0" string.prototype.trimright "^2.1.0" es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== dependencies: es6-iterator "~2.0.3" es6-symbol "~3.1.3" next-tick "~1.0.0" es6-error@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= dependencies: d "1" es5-ext "^0.10.35" es6-symbol "^3.1.1" es6-map@^0.1.3, es6-map@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= dependencies: d "1" es5-ext "~0.10.14" es6-iterator "~2.0.1" es6-set "~0.1.5" es6-symbol "~3.1.1" event-emitter "~0.3.5" es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== es6-promisify@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: es6-promise "^4.0.3" es6-set@^0.1.5, es6-set@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= dependencies: d "1" es5-ext "~0.10.14" es6-iterator "~2.0.1" es6-symbol "3.1.1" event-emitter "~0.3.5" es6-symbol@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= dependencies: d "1" es5-ext "~0.10.14" es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== dependencies: d "^1.0.1" ext "^1.1.2" es6-weak-map@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== dependencies: d "1" es5-ext "^0.10.46" es6-iterator "^2.0.3" es6-symbol "^3.1.1" escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@1.3.x: version "1.3.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.3.3.tgz#f024016f5a88e046fd12005055e939802e6c5f23" integrity sha1-8CQBb1qI4Eb9EgBQVek5gC5sXyM= dependencies: esprima "~1.1.1" estraverse "~1.5.0" esutils "~1.0.0" optionalDependencies: source-map "~0.1.33" escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= dependencies: esprima "^2.7.1" estraverse "^1.9.1" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: source-map "~0.2.0" escodegen@^1.6.1: version "1.12.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== dependencies: esprima "^3.1.3" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" escope@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= dependencies: es6-map "^0.1.3" es6-weak-map "^2.0.1" esrecurse "^4.1.0" estraverse "^4.1.1" eslint-ast-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz#3d58ba557801cfb1c941d68131ee9f8c34bd1586" integrity sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA== dependencies: lodash.get "^4.4.2" lodash.zip "^4.2.0" eslint-config-prettier@^6.3.0: version "6.7.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz#9a876952e12df2b284adbd3440994bf1f39dfbb9" integrity sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ== dependencies: get-stdin "^6.0.0" eslint-config-xo-lass@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/eslint-config-xo-lass/-/eslint-config-xo-lass-1.0.3.tgz#2259fed4d18ef18ec00560360358aba538fb5ac6" integrity sha512-hnry5qIMaVXAIt0QJwoTcRbny8E9x7K1GKW790ZLnAOWS42PK5BL5POpIG/NuumjwL/J5ThVgZpeVn8tFevhzw== eslint-config-xo@^0.27.1: version "0.27.2" resolved "https://registry.yarnpkg.com/eslint-config-xo/-/eslint-config-xo-0.27.2.tgz#71aff3d5b5554e9e5b5e1853e21da7799bb53f1f" integrity sha512-qEuZP0zNQkWpOdNZvWnfY2GNp1AZ33uXgeOXl4DN5YVLHFvekHbeSM2FFZ8A489fp1rCCColVRlJsYMf28o4DA== eslint-formatter-pretty@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/eslint-formatter-pretty/-/eslint-formatter-pretty-2.1.1.tgz#0794a1009195d14e448053fe99667413b7d02e44" integrity sha512-gWfagucSWBn82WxzwFloBTLAcwYDgnpAfiV5pQfyAV5YpZikuLflRU8nc3Ts9wnNvLhwk4blzb42/C495Yw7BA== dependencies: ansi-escapes "^3.1.0" chalk "^2.1.0" eslint-rule-docs "^1.1.5" log-symbols "^2.0.0" plur "^3.0.1" string-width "^2.0.0" supports-hyperlinks "^1.0.1" eslint-import-resolver-node@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== dependencies: debug "^2.6.9" resolve "^1.5.0" eslint-module-utils@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== dependencies: debug "^2.6.8" pkg-dir "^2.0.0" eslint-plugin-ava@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-ava/-/eslint-plugin-ava-9.0.0.tgz#a8d569ae7127aa640e344c46d1f288976543b1bd" integrity sha512-mJqQ1wQ9pxBi5Pu+grrqjfuSLxiSSgnpa5p5vMdEpBqA9n9cUzSCv0xMZ/NkTMAj5ieOB3TWF8j+7C30Yiv4RA== dependencies: deep-strict-equal "^0.2.0" enhance-visitors "^1.0.0" espree "^6.0.0" espurify "^2.0.0" import-modules "^1.1.0" pkg-dir "^4.2.0" resolve-from "^5.0.0" eslint-plugin-compat@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-compat/-/eslint-plugin-compat-3.3.0.tgz#ece063f53793e6859243ce6cb9634865f745b72e" integrity sha512-QCgYy3pZ+zH10dkBJus1xER0359h1UhJjufhQRqp9Owm6BEoLZeSqxf2zINwL1OGao9Yc96xPYIW3nQj5HUryg== dependencies: "@babel/runtime" "^7.4.5" ast-metadata-inferer "^0.1.1" browserslist "^4.6.3" caniuse-db "^1.0.30000977" lodash.memoize "4.1.2" mdn-browser-compat-data "^0.0.84" semver "^6.1.2" eslint-plugin-es@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== dependencies: eslint-utils "^1.4.2" regexpp "^3.0.0" eslint-plugin-eslint-comments@^3.0.1: version "3.1.2" resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz#4ef6c488dbe06aa1627fea107b3e5d059fc8a395" integrity sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ== dependencies: escape-string-regexp "^1.0.5" ignore "^5.0.5" eslint-plugin-import@^2.18.2: version "2.18.2" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== dependencies: array-includes "^3.0.3" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" eslint-import-resolver-node "^0.3.2" eslint-module-utils "^2.4.0" has "^1.0.3" minimatch "^3.0.4" object.values "^1.1.0" read-pkg-up "^2.0.0" resolve "^1.11.0" eslint-plugin-no-use-extend-native@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.4.1.tgz#b2a631219b6a2e91b4370ef6559a754356560a40" integrity sha512-tDkHM0kvxU0M2TpLRKGfFrpWXctFdTDY7VkiDTLYDaX90hMSJKkr/FiWThEXvKV0Dvffut2Z0B9Y7+h/k6suiA== dependencies: is-get-set-prop "^1.0.0" is-js-type "^2.0.0" is-obj-prop "^1.0.0" is-proto-prop "^2.0.0" eslint-plugin-node@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== dependencies: eslint-plugin-es "^2.0.0" eslint-utils "^1.4.2" ignore "^5.1.1" minimatch "^3.0.4" resolve "^1.10.1" semver "^6.1.0" eslint-plugin-prettier@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba" integrity sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA== dependencies: prettier-linter-helpers "^1.0.0" eslint-plugin-promise@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== eslint-plugin-unicorn@^12.0.0: version "12.1.0" resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-12.1.0.tgz#6ebff6c90ecf4df7ce1615e18928d10bb50c2ff5" integrity sha512-DkPRrjaZaKa8GDjEyWGms/sqp2DcmVCcbwVi9WQXwN6+Sn0/joTC14SfA+BsCuxTaGPRm/7wa8NC8o5mNDyZpQ== dependencies: ci-info "^2.0.0" clean-regexp "^1.0.0" eslint-ast-utils "^1.1.0" eslint-template-visitor "^1.0.0" import-modules "^2.0.0" lodash.camelcase "^4.3.0" lodash.defaultsdeep "^4.6.1" lodash.kebabcase "^4.1.1" lodash.snakecase "^4.1.1" lodash.topairs "^4.3.0" lodash.upperfirst "^4.3.1" read-pkg-up "^7.0.0" regexpp "^3.0.0" reserved-words "^0.1.2" safe-regex "^2.0.2" semver "^6.3.0" eslint-rule-docs@^1.1.5: version "1.1.168" resolved "https://registry.yarnpkg.com/eslint-rule-docs/-/eslint-rule-docs-1.1.168.tgz#e74a1f656a60c73e81a88c98b127014a4e7dcc6a" integrity sha512-vOVvI12rdns1TBiPIHkS7T52J13UMIN2B6f3+DZW+GlzMML+zK/SJbBBIWUDQ5fykiTDyYxlWDxKAYLWXsUUbw== eslint-scope@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" eslint-template-visitor@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-template-visitor/-/eslint-template-visitor-1.1.0.tgz#f090d124d1a52e05552149fc50468ed59608b166" integrity sha512-Lmy6QVlmFiIGl5fPi+8ACnov3sare+0Ouf7deJAGGhmUfeWJ5fVarELUxZRpsZ9sHejiJUq8626d0dn9uvcZTw== dependencies: eslint-visitor-keys "^1.1.0" espree "^6.1.1" multimap "^1.0.2" eslint-utils@^1.4.2, eslint-utils@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== eslint@^6.4.0, eslint@^6.7.2: version "6.7.2" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1" integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" chalk "^2.1.0" cross-spawn "^6.0.5" debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" eslint-utils "^1.4.3" eslint-visitor-keys "^1.1.0" espree "^6.1.2" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" globals "^12.1.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" lodash "^4.17.14" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.3" progress "^2.0.0" regexpp "^2.0.1" semver "^6.1.2" strip-ansi "^5.2.0" strip-json-comments "^3.0.1" table "^5.2.3" text-table "^0.2.0" v8-compile-cache "^2.0.3" espree@^6.0.0, espree@^6.1.1, espree@^6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== dependencies: acorn "^7.1.0" acorn-jsx "^5.1.0" eslint-visitor-keys "^1.1.0" esprima@1.2.x: version "1.2.5" resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" integrity sha1-CZNQL+r2aBODJXVvMPmlH+7sEek= esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esprima@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0= esprima@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.1.1.tgz#5b6f1547f4d102e670e140c509be6771d6aeb549" integrity sha1-W28VR/TRAuZw4UDFCb5ncdautUk= espurify@^2.0.0, espurify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/espurify/-/espurify-2.0.1.tgz#c25b3bb613863daa142edcca052370a1a459f41d" integrity sha512-7w/dUrReI/QbJFHRwfomTlkQOXaB1NuCrBRn5Y26HXn5gvh18/19AgLbayVrNxXQfkckvgrJloWyvZDuJ7dhEA== esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: estraverse "^4.1.0" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@~1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.3.2.tgz#37c2b893ef13d723f276d878d60d8535152a6c42" integrity sha1-N8K4k+8T1yPydth41g2FNRUqbEI= estraverse@~1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" integrity sha1-hno+jlip+EYYr7bC3bzZFrfLr3E= estree-is-function@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/estree-is-function/-/estree-is-function-1.0.0.tgz#c0adc29806d7f18a74db7df0f3b2666702e37ad2" integrity sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA== estree-is-identifier@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz#50433fa88d3d00a1bf7a1d7df6e4e67f36aa89f7" integrity sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ== estree-is-member-expression@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz#e724721e0a14949d363915fd71448eaa6312f590" integrity sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg== estree-is-require@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/estree-is-require/-/estree-is-require-1.0.0.tgz#fce2c6126d141d1f9316e8c07799d7f0a55bb69b" integrity sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA== dependencies: estree-is-identifier "^1.0.0" esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== esutils@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" integrity sha1-gVHTWOIMisx/t0XnRywAJf5JZXA= etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= event-emitter@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= dependencies: d "1" es5-ext "~0.10.14" eventemitter3@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" integrity sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg= events@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== events@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" signal-exit "^3.0.0" strip-eof "^1.0.0" execa@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA== dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" signal-exit "^3.0.0" strip-eof "^1.0.0" execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" get-stream "^4.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" signal-exit "^3.0.0" strip-eof "^1.0.0" execa@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" is-stream "^2.0.0" merge-stream "^2.0.0" npm-run-path "^3.0.0" onetime "^5.1.0" p-finally "^2.0.0" signal-exit "^3.0.2" strip-final-newline "^2.0.0" expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= dependencies: is-posix-bracket "^0.1.0" expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" extend-shallow "^2.0.1" posix-character-classes "^0.1.0" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.1" expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= dependencies: fill-range "^2.1.0" express-session@^1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.0.tgz#9b50dbb5e8a03c3537368138f072736150b7f9b3" integrity sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg== dependencies: cookie "0.4.0" cookie-signature "1.0.6" debug "2.6.9" depd "~2.0.0" on-headers "~1.0.2" parseurl "~1.3.3" safe-buffer "5.2.0" uid-safe "~2.1.5" express-state@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/express-state/-/express-state-1.0.3.tgz#b6f368743a95d8a91b7683adf593d02b1577ec02" integrity sha1-tvNodDqV2KkbdoOt9ZPQKxV37AI= express@3.4.8: version "3.4.8" resolved "https://registry.yarnpkg.com/express/-/express-3.4.8.tgz#aa7a8986de07053337f4bc5ed9a6453d9cc8e2e1" integrity sha1-qnqJht4HBTM39Lxe2aZFPZzI4uE= dependencies: buffer-crc32 "0.2.1" commander "1.3.2" connect "2.12.0" cookie "0.1.0" cookie-signature "1.0.1" debug ">= 0.7.3 < 1" fresh "0.2.0" merge-descriptors "0.0.1" methods "0.1.0" mkdirp "0.3.5" range-parser "0.0.4" send "0.1.4" express@4.x, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: accepts "~1.3.7" array-flatten "1.1.1" body-parser "1.19.0" content-disposition "0.5.3" content-type "~1.0.4" cookie "0.4.0" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" finalhandler "~1.1.2" fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.3" path-to-regexp "0.1.7" proxy-addr "~2.0.5" qs "6.7.0" range-parser "~1.2.1" safe-buffer "5.1.2" send "0.17.1" serve-static "1.14.1" setprototypeof "1.1.1" statuses "~1.5.0" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" ext@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== dependencies: type "^2.0.0" extend-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/extend-object/-/extend-object-1.0.0.tgz#42514f84015d1356caf5187969dfb2bc1bda0823" integrity sha1-QlFPhAFdE1bK9Rh5ad+yvBvaCCM= extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" extend@3.0.2, extend@^3.0.0, extend@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= dependencies: is-extglob "^1.0.0" extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" expand-brackets "^2.1.4" extend-shallow "^2.0.1" fragment-cache "^0.2.1" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.1" falafel@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.1.0.tgz#96bb17761daba94f46d001738b3cedf3a67fe06c" integrity sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw= dependencies: acorn "^5.0.0" foreach "^2.0.5" isarray "0.0.1" object-keys "^1.0.6" fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-diff@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" "@nodelib/fs.stat" "^1.1.2" glob-parent "^3.1.0" is-glob "^4.0.0" merge2 "^1.2.3" micromatch "^3.1.10" fast-glob@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.1.0.tgz#77375a7e3e6f6fc9b18f061cddd28b8d1eec75ae" integrity sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.0" merge2 "^1.3.0" micromatch "^4.0.2" fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fast-safe-stringify@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== fastq@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== dependencies: reusify "^1.0.0" fault@^1.0.0, fault@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.3.tgz#4da88cf979b6b792b4e13c7ec836767725170b7e" integrity sha512-sfFuP4X0hzrbGKjAUNXYvNqsZ5F6ohx/dZ9I0KQud/aiZNwg263r5L9yGB0clvXHCkzXh5W3t7RSHchggYIFmA== dependencies: format "^0.2.2" figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= dependencies: escape-string-regexp "^1.0.5" object-assign "^4.1.0" figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" figures@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: flat-cache "^2.0.1" file-utils@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/file-utils/-/file-utils-0.1.5.tgz#dc8153c855387cb4dacb0a1725531fa444a6b48c" integrity sha1-3IFTyFU4fLTaywoXJVMfpESmtIw= dependencies: findup-sync "~0.1.2" glob "~3.2.6" iconv-lite "~0.2.11" isbinaryfile "~0.1.9" lodash "~2.1.0" minimatch "~0.2.12" rimraf "~2.2.2" filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= fileset@0.1.x: version "0.1.8" resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.1.8.tgz#506b91a9396eaa7e32fb42a84077c7a0c736b741" integrity sha1-UGuRqTluqn4y+0KoQHfHoMc2t0E= dependencies: glob "3.x" minimatch "0.x" fill-range@^2.1.0: version "2.2.4" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: is-number "^2.1.0" isobject "^2.0.0" randomatic "^3.0.0" repeat-element "^1.1.2" repeat-string "^1.5.2" fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range "^2.1.0" fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" parseurl "~1.3.3" statuses "~1.5.0" unpipe "~1.0.0" find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" make-dir "^2.0.0" pkg-dir "^3.0.0" find-cache-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.1.0.tgz#9935894999debef4cf9f677fdf646d002c4cdecb" integrity sha512-zw+EFiNBNPgI2NTrKkDd1xd7q0cs6wr/iWnr/oUkI0yF9K9GqQ+riIt4aiyFaaqpaWbxPrJXHI+QvmNUQbX+0Q== dependencies: commondir "^1.0.1" make-dir "^3.0.0" pkg-dir "^4.1.0" find-nearest-file@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-nearest-file/-/find-nearest-file-1.0.0.tgz#bf539d7d0f02996631fa2196680f6776762b9f70" integrity sha1-v1OdfQ8CmWYx+iGWaA9ndnYrn3A= find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" findup-sync@~0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.1.3.tgz#7f3e7a97b82392c653bf06589bd85190e93c3683" integrity sha1-fz56l7gjksZTvwZYm9hRkOk8NoM= dependencies: glob "~3.2.9" lodash "~2.4.1" firefox-profile@0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/firefox-profile/-/firefox-profile-0.2.7.tgz#fe46afc2ed6a96f62c5c3bd446fa259f6014a909" integrity sha1-/kavwu1qlvYsXDvURvoln2AUqQk= dependencies: adm-zip "~0.4.3" archiver "~0.7.1" async "~0.2.9" fs-extra "~0.8.1" lazystream "~0.1.0" node-uuid "~1.4.1" wrench "~1.5.1" xml2js "~0.4.0" fixpack@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/fixpack/-/fixpack-2.3.1.tgz#53f03d88aab7d5123259282f0088a9a3b19836c2" integrity sha1-U/A9iKq31RIyWSgvAIipo7GYNsI= dependencies: alce "1.0.0" colors "*" extend-object "^1.0.0" rc "^0.6.0" flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== dependencies: flatted "^2.0.0" rimraf "2.6.3" write "1.0.3" flatted@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== fn-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= dependencies: for-in "^1.0.1" forEachAsync@~2.2: version "2.2.1" resolved "https://registry.yarnpkg.com/forEachAsync/-/forEachAsync-2.2.1.tgz#e3723f00903910e1eb4b1db3ad51b5c64a319fec" integrity sha1-43I/AJA5EOHrSx2zrVG1xkoxn+w= dependencies: sequence "2.x" foreach-shim@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/foreach-shim/-/foreach-shim-0.1.1.tgz#be61d75f46abb7176f5abd295e35885751b71d94" integrity sha1-vmHXX0artxdvWr0pXjWIV1G3HZQ= foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= foreground-child@^1.5.6: version "1.5.6" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= dependencies: cross-spawn "^4" signal-exit "^3.0.0" forever-agent@~0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" integrity sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA= form-data@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" mime-types "^2.1.12" form-data@~0.0.3: version "0.0.10" resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.0.10.tgz#db345a5378d86aeeb1ed5d553b869ac192d2f5ed" integrity sha1-2zRaU3jYau6x7V1VO4aawZLS9e0= dependencies: async "~0.2.7" combined-stream "~0.0.4" mime "~1.2.2" form-data@~0.1.0: version "0.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" integrity sha1-kavXiKupcCsaq/qLwBAxoqyeOxI= dependencies: async "~0.9.0" combined-stream "~0.0.4" mime "~1.2.11" format@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= formidable@1.0.14: version "1.0.14" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.14.tgz#2b3f4c411cbb5fdd695c44843e2a23514a43231a" integrity sha1-Kz9MQRy7X91pXESEPiojUUpDIxo= formidable@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" integrity sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg== forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fresh@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.0.tgz#bfd9402cf3df12c4a4c310c79f99a3dde13d34a7" integrity sha1-v9lALPPfEsSkwxDHn5mj3eE9NKc= fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= from2-string@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/from2-string/-/from2-string-1.1.0.tgz#18282b27d08a267cb3030cd2b8b4b0f212af752a" integrity sha1-GCgrJ9CKJnyzAwzSuLSw8hKvdSo= dependencies: from2 "^2.0.3" from2@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: inherits "^2.0.1" readable-stream "^2.0.0" fs-extra@~0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.8.1.tgz#0e5779ffbfedf511bc755595c7f03c06d4b43e8d" integrity sha1-Dld5/7/t9RG8dVWVx/A8BtS0Po0= dependencies: jsonfile "~1.1.0" mkdirp "0.3.x" ncp "~0.4.2" rimraf "~2.2.0" fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: minipass "^2.6.0" fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.0.0, fsevents@^1.2.7: version "1.2.9" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== dependencies: nan "^2.12.1" node-pre-gyp "^0.12.0" fsevents@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" has-unicode "^2.0.0" object-assign "^4.1.0" signal-exit "^3.0.0" string-width "^1.0.1" strip-ansi "^3.0.1" wide-align "^1.1.0" get-assigned-identifiers@^1.1.0, get-assigned-identifiers@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-own-enumerable-property-symbols@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz#6f7764f88ea11e0b514bd9bd860a132259992ca4" integrity sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA== get-set-props@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-set-props/-/get-set-props-0.1.0.tgz#998475c178445686d0b32246da5df8dbcfbe8ea3" integrity sha1-mYR1wXhEVobQsyJG2l3428++jqM= get-stdin@7.0.0, get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^5.0.0, get-stream@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== dependencies: pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= git-raw-commits@^1.3.0: version "1.3.6" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff" integrity sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg== dependencies: dargs "^4.0.1" lodash.template "^4.0.2" meow "^4.0.0" split2 "^2.0.0" through2 "^2.0.0" github-slugger@^1.2.0, github-slugger@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.1.tgz#47e904e70bf2dccd0014748142d31126cfd49508" integrity sha512-SsZUjg/P03KPzQBt7OxJPasGw6NRO5uOgiZ5RGXVud5iSIZ0eNZeNp5rTwCxtavrRUa/A77j8mePVc5lEvk0KQ== dependencies: emoji-regex ">=6.0.0 <=6.1.1" glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= dependencies: is-glob "^2.0.0" glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== dependencies: is-glob "^4.0.1" glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= glob@3.x, glob@~3.2.6, glob@~3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" integrity sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0= dependencies: inherits "2" minimatch "0.3" glob@7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg= dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.2" once "^1.3.0" path-is-absolute "^1.0.0" glob@^5.0.10, glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= dependencies: inflight "^1.0.4" inherits "2" minimatch "2 || 3" once "^1.3.0" path-is-absolute "^1.0.0" glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" glob@~4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/glob/-/glob-4.0.6.tgz#695c50bdd4e2fb5c5d370b091f388d3707e291a7" integrity sha1-aVxQvdTi+1xdNwsJHziNNwfikac= dependencies: graceful-fs "^3.0.2" inherits "2" minimatch "^1.0.0" once "^1.3.0" glob@~4.3.0: version "4.3.5" resolved "https://registry.yarnpkg.com/glob/-/glob-4.3.5.tgz#80fbb08ca540f238acce5d11d1e9bc41e75173d3" integrity sha1-gPuwjKVA8jiszl0R0em8QedRc9M= dependencies: inflight "^1.0.4" inherits "2" minimatch "^2.0.1" once "^1.3.0" global-dirs@^0.1.0, global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= dependencies: ini "^1.3.4" globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^12.1.0: version "12.3.0" resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== dependencies: type-fest "^0.8.1" globby@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== dependencies: "@types/glob" "^7.1.1" array-union "^2.1.0" dir-glob "^3.0.1" fast-glob "^3.0.3" glob "^7.1.3" ignore "^5.1.1" merge2 "^1.2.3" slash "^3.0.0" globby@^9.0.0: version "9.2.0" resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== dependencies: "@types/glob" "^7.1.1" array-union "^1.0.2" dir-glob "^2.2.2" fast-glob "^2.2.6" glob "^7.1.3" ignore "^4.0.3" pify "^4.0.1" slash "^2.0.0" globs-to-files@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/globs-to-files/-/globs-to-files-1.0.0.tgz#54490f6d1f4b9fd2de9d99445146ffb37550380d" integrity sha1-VEkPbR9Ln9LenZlEUUb/s3VQOA0= dependencies: array-uniq "~1.0.2" asyncreduce "~0.1.4" glob "^5.0.10" xtend "^4.0.0" got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== dependencies: "@sindresorhus/is" "^0.14.0" "@szmarczak/http-timer" "^1.1.2" cacheable-request "^6.0.0" decompress-response "^3.3.0" duplexer3 "^0.1.4" get-stream "^4.1.0" lowercase-keys "^1.0.1" mimic-response "^1.0.1" p-cancelable "^1.0.0" to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" graceful-fs@^3.0.2: version "3.0.12" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.12.tgz#0034947ce9ed695ec8ab0b854bc919e82b1ffaef" integrity sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg== dependencies: natives "^1.1.3" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= growl@1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= handlebars@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-1.0.12.tgz#18c6d3440c35e91b19b3ff582b9151ab4985d4fc" integrity sha1-GMbTRAw16RsZs/9YK5FRq0mF1Pw= dependencies: optimist "~0.3" uglify-js "~2.3" handlebars@1.3.x: version "1.3.0" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-1.3.0.tgz#9e9b130a93e389491322d975cf3ec1818c37ce34" integrity sha1-npsTCpPjiUkTItl1zz7BgYw3zjQ= dependencies: optimist "~0.3" optionalDependencies: uglify-js "~2.3" handlebars@^4.0.1, handlebars@^4.1.2: version "4.5.3" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" source-map "^0.6.1" optionalDependencies: uglify-js "^3.1.4" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" isobject "^2.0.0" has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" isobject "^3.0.0" has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" has-yarn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-1.0.0.tgz#89e25db604b725c8f5976fff0addc921b828a5a7" integrity sha1-ieJdtgS3Jcj1l2//Ct3JIbgopac= has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== has@^1.0.0, has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" hasha@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/hasha/-/hasha-3.0.0.tgz#52a32fab8569d41ca69a61ff1a214f8eb7c8bd39" integrity sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk= dependencies: is-stream "^1.0.1" hawk@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" integrity sha1-h81JH5tG5OKurKM1QWdmiF0tHtk= dependencies: boom "0.4.x" cryptiles "0.2.x" hoek "0.9.x" sntp "0.2.x" hbs@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/hbs/-/hbs-2.4.0.tgz#f4c956cb660d6974dc61214b7c49a21f6aaa3f51" integrity sha1-9MlWy2YNaXTcYSFLfEmiH2qqP1E= dependencies: handlebars "1.0.12" walk "2.2.1" he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= highlight.js@7.5.0: version "7.5.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-7.5.0.tgz#0052595eef15845d842e02a03313afadc3ebd6cc" integrity sha1-AFJZXu8VhF2ELgKgMxOvrcPr1sw= hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" hoek@0.9.x: version "0.9.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" integrity sha1-PTIkYrrfB3Fup+uFuviAec3c5QU= hosted-git-info@^2.1.4, hosted-git-info@^2.5.0: version "2.8.5" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== htmlescape@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= http-cache-semantics@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5" integrity sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew== http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== dependencies: depd "~1.1.2" inherits "2.0.3" setprototypeof "1.1.1" statuses ">= 1.5.0 < 2" toidentifier "1.0.0" http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== dependencies: depd "~1.1.2" inherits "2.0.4" setprototypeof "1.1.1" statuses ">= 1.5.0 < 2" toidentifier "1.0.0" http-proxy@1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.11.2.tgz#c50d2fb06eca79d4238e66fd94393d2e41e63740" integrity sha1-xQ0vsG7KedQjjmb9lDk9LkHmN0A= dependencies: eventemitter3 "1.x.x" requires-port "0.x.x" http-signature@~0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" integrity sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY= dependencies: asn1 "0.1.11" assert-plus "^0.1.5" ctype "0.5.3" https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= https-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI= https-proxy-agent@^2.2.1: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== dependencies: agent-base "^4.3.0" debug "^3.1.0" humanize-duration@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-2.4.0.tgz#04da89e6784af1c881b06ebc9f494dda07b08a17" integrity sha1-BNqJ5nhK8ciBsG68n0lN2gewihc= husky@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/husky/-/husky-3.1.0.tgz#5faad520ab860582ed94f0c1a77f0f04c90b57c0" integrity sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ== dependencies: chalk "^2.4.2" ci-info "^2.0.0" cosmiconfig "^5.2.1" execa "^1.0.0" get-stdin "^7.0.0" opencollective-postinstall "^2.0.2" pkg-dir "^4.2.0" please-upgrade-node "^3.2.0" read-pkg "^5.2.0" run-node "^1.0.0" slash "^3.0.0" iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@0.4.8: version "0.4.8" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.8.tgz#c6019a7595f2cefca702eab694a010bcd9298d20" integrity sha1-xgGadZXyzvynAuq2lKAQvNkpjSA= iconv-lite@~0.2.11: version "0.2.11" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" integrity sha1-HOYKOleGSiktEyH/RgnKS7llrcg= ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.0.0, ignore@^5.0.5, ignore@^5.1.1: version "5.1.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" import-fresh@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= import-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-1.1.0.tgz#748db79c5cc42bb9701efab424f894e72600e9dc" integrity sha1-dI23nFzEK7lwHvq0JPiU5yYA6dw= import-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-2.0.0.tgz#9c1e13b4e7a15682f70a6e3fa29534e4540cfc5d" integrity sha512-iczM/v9drffdNnABOKwj0f9G3cFDon99VcG1mxeBsdqnbd+vnQ5c2uAiCHNQITqFTOPaEvwg3VjoWCur0uHLEw== imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== inline-source-map@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.5.0.tgz#4a4c5dd8e4fb5e9b3cda60c822dfadcaee66e0af" integrity sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8= dependencies: source-map "~0.4.0" inline-source-map@~0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= dependencies: source-map "~0.5.3" inquirer@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== dependencies: ansi-escapes "^4.2.1" chalk "^2.4.2" cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" figures "^3.0.0" lodash "^4.17.15" mute-stream "0.0.8" run-async "^2.2.0" rxjs "^6.4.0" string-width "^4.1.0" strip-ansi "^5.1.0" through "^2.3.6" insert-module-globals@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" integrity sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw== dependencies: JSONStream "^1.0.3" acorn-node "^1.5.2" combine-source-map "^0.8.0" concat-stream "^1.6.1" is-buffer "^1.1.0" path-is-absolute "^1.0.1" process "~0.11.0" through2 "^2.0.0" undeclared-identifiers "^1.1.2" xtend "^4.0.0" invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= ipaddr.js@1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== irregular-plurals@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-2.0.0.tgz#39d40f05b00f656d0b7fa471230dd3b714af2872" integrity sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw== is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-alphabetical@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== is-alphanumeric@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= is-alphanumerical@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-buffer@^1.1.0, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-buffer@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= is-decimal@^1.0.0, is-decimal@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" kind-of "^5.0.0" is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" kind-of "^6.0.2" is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= is-empty@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b" integrity sha1-3pu1snhzigWgsJpX4ftNSjQan2s= is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= dependencies: is-primitive "^2.0.0" is-error@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-get-set-prop@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz#2731877e4d78a6a69edcce6bb9d68b0779e76312" integrity sha1-JzGHfk14pqae3M5rudaLB3nnYxI= dependencies: get-set-props "^0.1.0" lowercase-keys "^1.0.0" is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= dependencies: is-extglob "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" is-hexadecimal@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== is-hidden@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/is-hidden/-/is-hidden-1.1.2.tgz#6497d48ec5affc7da0f11a3c0dadceb6752e8edd" integrity sha512-kytBeNVW2QTIqZdJBDKIjP+EkUTzDT07rsc111w/gxqR6wK3ODkOswcpxgED6HU6t7fEhOxqojVZ2a2kU9rj+A== is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= dependencies: global-dirs "^0.1.0" is-path-inside "^1.0.0" is-js-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-js-type/-/is-js-type-2.0.0.tgz#73617006d659b4eb4729bba747d28782df0f7e22" integrity sha1-c2FwBtZZtOtHKbunR9KHgt8PfiI= dependencies: js-types "^1.0.0" is-npm@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-3.0.0.tgz#ec9147bfb629c43f494cf67936a961edec7e8053" integrity sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA== is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= dependencies: kind-of "^3.0.2" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj-prop@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-obj-prop/-/is-obj-prop-1.0.0.tgz#b34de79c450b8d7c73ab2cdf67dc875adb85f80e" integrity sha1-s03nnEULjXxzqyzfZ9yHWtuF+A4= dependencies: lowercase-keys "^1.0.0" obj-props "^1.0.0" is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= is-observable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== dependencies: symbol-observable "^1.1.0" is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" is-path-inside@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.0.0.tgz#7fd1a7f1b69e160cde9181d2313f445c68aa2679" integrity sha512-EYisGhpgSCwspmIuRHGjROWTon2Xp8Z7U03Wubk/bTL5TTRC5R1rGVgyjzBrk9+ULdH6cRD06KRcw/xfqhVYKQ== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-proto-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-proto-prop/-/is-proto-prop-2.0.0.tgz#99ab2863462e44090fd083efd1929058f9d935e1" integrity sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg== dependencies: lowercase-keys "^1.0.0" proto-props "^2.0.0" is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: has "^1.0.1" is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" is-text-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: text-extensions "^1.0.0" is-url@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== is-whitespace-character@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac" integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ== is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-word-character@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa" integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A== is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= is-yarn-global@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isbinaryfile@~0.1.9: version "0.1.9" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-0.1.9.tgz#15eece35c4ab708d8924da99fb874f2b5cc0b6c4" integrity sha1-Fe7ONcSrcI2JJNqZ+4dPK1zAtsQ= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= istanbul-lib-coverage@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== istanbul-lib-hook@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== dependencies: append-transform "^1.0.0" istanbul-lib-instrument@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== dependencies: "@babel/generator" "^7.4.0" "@babel/parser" "^7.4.3" "@babel/template" "^7.4.0" "@babel/traverse" "^7.4.3" "@babel/types" "^7.4.0" istanbul-lib-coverage "^2.0.5" semver "^6.0.0" istanbul-lib-report@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== dependencies: istanbul-lib-coverage "^2.0.5" make-dir "^2.1.0" supports-color "^6.1.0" istanbul-lib-source-maps@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== dependencies: debug "^4.1.1" istanbul-lib-coverage "^2.0.5" make-dir "^2.1.0" rimraf "^2.6.3" source-map "^0.6.1" istanbul-middleware@0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/istanbul-middleware/-/istanbul-middleware-0.2.2.tgz#83c4c13c128e1a0d6a147792391af3c15a8ab8e0" integrity sha1-g8TBPBKOGg1qFHeSORrzwVqKuOA= dependencies: archiver "0.14.x" body-parser "~1.12.3" express "4.x" istanbul "0.4.x" istanbul-reports@^2.2.4: version "2.2.6" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== dependencies: handlebars "^4.1.2" istanbul@0.4.x: version "0.4.5" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= dependencies: abbrev "1.0.x" async "1.x" escodegen "1.8.x" esprima "2.7.x" glob "^5.0.15" handlebars "^4.0.1" js-yaml "3.x" mkdirp "0.5.x" nopt "3.x" once "1.x" resolve "1.1.x" supports-color "^3.1.0" which "^1.1.1" wordwrap "^1.0.0" istanbul@^0.2.8: version "0.2.16" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.2.16.tgz#870545a0d4f4b4ce161039e9e805a98c2c700bd9" integrity sha1-hwVFoNT0tM4WEDnp6AWpjCxwC9k= dependencies: abbrev "1.0.x" async "0.9.x" escodegen "1.3.x" esprima "1.2.x" fileset "0.1.x" handlebars "1.3.x" js-yaml "3.x" mkdirp "0.5.x" nopt "3.x" resolve "0.7.x" which "1.0.x" wordwrap "0.0.x" js-levenshtein@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-types@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/js-types/-/js-types-1.0.0.tgz#d242e6494ed572ad3c92809fc8bed7f7687cbf03" integrity sha1-0kLmSU7Vcq08koCfyL7X92h8vwM= js-yaml@3.x, js-yaml@^3.13.1, js-yaml@^3.6.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json-stable-stringify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= dependencies: jsonify "~0.0.0" json-stringify-safe@~5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= json5@^2.0.0, json5@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== dependencies: minimist "^1.2.0" jsonfile@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-1.1.1.tgz#da4fd6ad77f1a255203ea63c7bc32dc31ef64433" integrity sha1-2k/WrXfxolUgPqY8e8Mtwx72RDM= jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= keypress@0.1.x: version "0.1.0" resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" integrity sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo= keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== dependencies: json-buffer "3.0.0" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== labeled-stream-splicer@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== dependencies: inherits "^2.0.1" stream-splicer "^2.0.0" latest-version@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== dependencies: package-json "^6.3.0" lazystream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-0.1.0.tgz#1b25d63c772a4c20f0a5ed0a9d77f484b6e16920" integrity sha1-GyXWPHcqTCDwpe0KnXf0hLbhaSA= dependencies: readable-stream "~1.0.2" levenshtein-edit-distance@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/levenshtein-edit-distance/-/levenshtein-edit-distance-1.0.0.tgz#895baf478cce8b5c1a0d27e45d7c1d978a661e49" integrity sha1-iVuvR4zOi1waDSfkXXwdl4pmHkk= levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" line-column-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/line-column-path/-/line-column-path-2.0.0.tgz#439aff48ef80d74c475801a25b560d021acf1288" integrity sha512-nz3A+vi4bElhwd62E9+Qk/f9BDYLSzD/4Hy1rir0I4GnMxSTezSymzANyph5N1PgRZ3sSbA+yR5hOuXxc71a0Q== dependencies: type-fest "^0.4.1" lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= lint-staged@^9.5.0: version "9.5.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.5.0.tgz#290ec605252af646d9b74d73a0fa118362b05a33" integrity sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA== dependencies: chalk "^2.4.2" commander "^2.20.0" cosmiconfig "^5.2.1" debug "^4.1.1" dedent "^0.7.0" del "^5.0.0" execa "^2.0.3" listr "^0.14.3" log-symbols "^3.0.0" micromatch "^4.0.2" normalize-path "^3.0.0" please-upgrade-node "^3.1.1" string-argv "^0.3.0" stringify-object "^3.3.0" listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= listr-update-renderer@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" elegant-spinner "^1.0.1" figures "^1.7.0" indent-string "^3.0.0" log-symbols "^1.0.2" log-update "^2.3.0" strip-ansi "^3.0.1" listr-verbose-renderer@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== dependencies: chalk "^2.4.1" cli-cursor "^2.1.0" date-fns "^1.27.2" figures "^2.0.0" listr@^0.14.3: version "0.14.3" resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== dependencies: "@samverschueren/stream-to-observable" "^0.3.0" is-observable "^1.1.0" is-promise "^2.1.0" is-stream "^1.1.0" listr-silent-renderer "^1.1.1" listr-update-renderer "^0.5.0" listr-verbose-renderer "^0.5.0" p-map "^2.0.0" rxjs "^6.3.3" load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" pify "^2.0.0" strip-bom "^3.0.0" load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" pify "^3.0.0" strip-bom "^3.0.0" load-json-file@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== dependencies: graceful-fs "^4.1.15" parse-json "^4.0.0" pify "^4.0.1" strip-bom "^3.0.0" type-fest "^0.3.0" load-plugin@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-2.3.1.tgz#8024739afb4aa04de1e602e15e5b1a678c443d00" integrity sha512-dYB1lbwqHgPTrruy9glukCu8Ya9vzj6TMfouCtj2H/GuJ+8syioisgKTBPxnCi6m8K8jINKfTOxOHngFkUYqHw== dependencies: npm-prefix "^1.2.0" resolve-from "^5.0.0" load-script@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/load-script/-/load-script-0.0.5.tgz#cbd54b27cd7309902b749640c70e996f4c643b63" integrity sha1-y9VLJ81zCZArdJZAxw6Zb0xkO2M= localtunnel@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.5.0.tgz#5be949779325e9f3273021a3f38d2e7a8dcd7c4f" integrity sha1-W+lJd5Ml6fMnMCGj840ueo3NfE8= dependencies: debug "0.7.4" optimist "0.3.4" request "2.11.4" locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= dependencies: lodash._basecopy "^3.0.0" lodash.keys "^3.0.0" lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= lodash._basecreate@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" integrity sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE= lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= lodash._isnative@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c" integrity sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw= lodash._objecttypes@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11" integrity sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE= lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= lodash._shimkeys@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203" integrity sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM= dependencies: lodash._objecttypes "~2.4.1" lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= lodash.create@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" integrity sha1-1/KEnw29p+BGgruM1yqwIkYd6+c= dependencies: lodash._baseassign "^3.0.0" lodash._basecreate "^3.0.0" lodash._isiterateecall "^3.0.0" lodash.defaults@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54" integrity sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ= dependencies: lodash._objecttypes "~2.4.1" lodash.keys "~2.4.1" lodash.defaultsdeep@^4.6.1: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= lodash.isobject@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5" integrity sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU= dependencies: lodash._objecttypes "~2.4.1" lodash.kebabcase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= dependencies: lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" lodash.keys@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727" integrity sha1-SN6kbfj/djKxDXBrissmWR4rNyc= dependencies: lodash._isnative "~2.4.1" lodash._shimkeys "~2.4.1" lodash.isobject "~2.4.1" lodash.memoize@4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= lodash.memoize@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= lodash.mergewith@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== lodash.snakecase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= lodash.template@^4.0.2: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== dependencies: lodash._reinterpolate "^3.0.0" lodash.templatesettings "^4.0.0" lodash.templatesettings@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== dependencies: lodash._reinterpolate "^3.0.0" lodash.topairs@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.topairs/-/lodash.topairs-4.3.0.tgz#3b6deaa37d60fb116713c46c5f17ea190ec48d64" integrity sha1-O23qo31g+xFnE8RsXxfqGQ7EjWQ= lodash.upperfirst@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984= lodash.zip@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.zip/-/lodash.zip-4.2.0.tgz#ec6662e4896408ed4ab6c542a3990b72cc080020" integrity sha1-7GZi5IlkCO1KtsVCo5kLcswIACA= lodash@3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= lodash@4.17.14: version "4.17.14" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== lodash@^4.13.1, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== lodash@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.1.0.tgz#0637eaaa36a8a1cfc865c3adfb942189bfb0998d" integrity sha1-Bjfqqjaooc/IZcOt+5Qhib+wmY0= lodash@~2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" integrity sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4= lodash@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.2.0.tgz#4bf50a3243f9aeb0bac41a55d3d5990675a462fb" integrity sha1-S/UKMkP5rrC6xBpV09WZBnWkYvs= log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= dependencies: chalk "^1.0.0" log-symbols@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" log-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== dependencies: chalk "^2.4.2" log-update@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= dependencies: ansi-escapes "^3.0.0" cli-cursor "^2.0.0" wrap-ansi "^3.0.1" longest-streak@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105" integrity sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw== loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" magic-string@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.23.2.tgz#204d7c3ea36c7d940209fcc54c39b9f243f13369" integrity sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA== dependencies: sourcemap-codec "^1.4.1" make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" semver "^5.6.0" make-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== dependencies: semver "^6.0.0" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" markdown-escapes@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw== markdown-extensions@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3" integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q== markdown-table@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== marked@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== match-casing@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/match-casing/-/match-casing-1.0.2.tgz#30b1073b9a98ef2afcd5a7058c5c3cda5a62b3a8" integrity sha512-NH4X/9dxkjgl08sGHg0M15YJH8xk49kPpeSsVqr+5Ct4Qd8gaBn41ubSBd+nEzMZt5iJDdoeSnKXV57UVeyK2w== math-random@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" inherits "^2.0.1" safe-buffer "^5.1.2" mdast-comment-marker@^1.0.0, mdast-comment-marker@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/mdast-comment-marker/-/mdast-comment-marker-1.1.1.tgz#9c9c18e1ed57feafc1965d92b028f37c3c8da70d" integrity sha512-TWZDaUtPLwKX1pzDIY48MkSUQRDwX/HqbTB4m3iYdL/zosi/Z6Xqfdv0C0hNVKvzrPjZENrpWDt4p4odeVO0Iw== mdast-util-compact@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" integrity sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg== dependencies: unist-util-visit "^1.1.0" mdast-util-heading-range@^2.0.0, mdast-util-heading-range@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/mdast-util-heading-range/-/mdast-util-heading-range-2.1.3.tgz#a9d3e203fe7011fcce89fb7595353b52692d5b93" integrity sha512-ypaAuI6mWC37CQt3YsngWR/+y2LK3xx1+7SfgrG/URyVDgMu+i91O2ulyhNOzAXqB7kf9hGZY3twNK5eaEKX6A== dependencies: mdast-util-to-string "^1.0.0" mdast-util-heading-style@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/mdast-util-heading-style/-/mdast-util-heading-style-1.0.5.tgz#81b2e60d76754198687db0e8f044e42376db0426" integrity sha512-8zQkb3IUwiwOdUw6jIhnwM6DPyib+mgzQuHAe7j2Hy1rIarU4VUxe472bp9oktqULW3xqZE+Kz6OD4Gi7IA3vw== mdast-util-to-nlcst@^3.2.0: version "3.2.3" resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-3.2.3.tgz#dcd0f51b59515b11a0700aeb40f168ed7ba9ed3d" integrity sha512-hPIsgEg7zCvdU6/qvjcR6lCmJeRuIEpZGY5xBV+pqzuMOvQajyyF8b6f24f8k3Rw8u40GwkI3aAxUXr3bB2xag== dependencies: nlcst-to-string "^2.0.0" repeat-string "^1.5.2" unist-util-position "^3.0.0" vfile-location "^2.0.0" mdast-util-to-string@^1.0.0, mdast-util-to-string@^1.0.1, mdast-util-to-string@^1.0.2, mdast-util-to-string@^1.0.4, mdast-util-to-string@^1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.7.tgz#62d8e9c6b2113070d8b497c7dc35bf12796f06ee" integrity sha512-P+gdtssCoHOX+eJUrrC30Sixqao86ZPlVjR5NEAoy0U79Pfxb1Y0Gntei0+GrnQD4T04X9xA8tcugp90cSmNow== mdast-util-toc@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-4.2.0.tgz#9085c4313359c981e4c1d22efe02f8ce01072da4" integrity sha512-BEbxg3GtAsvswmV9bMAV/WJA7v0CsG5tYk90xnTlIeCnnBKD6Cof3KEg/K3xQ1O2FRyJKMWkgKZB2mpnOjA0tg== dependencies: extend "^3.0.2" github-slugger "^1.2.1" mdast-util-to-string "^1.0.5" unist-util-is "^3.0.0" unist-util-visit "^1.1.0" mdn-browser-compat-data@^0.0.84: version "0.0.84" resolved "https://registry.yarnpkg.com/mdn-browser-compat-data/-/mdn-browser-compat-data-0.0.84.tgz#791d0e238cff5779fae589f99f5b2c7b84ea44b5" integrity sha512-fAznuGNaQMQiWLVf+gyp33FaABTglYWqMT7JqvH+4RZn2UQPD12gbMqxwP9m0lj8AAbNpu5/kD6n4Ox1SOffpw== dependencies: extend "3.0.2" media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= meow@5.0.0, meow@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== dependencies: camelcase-keys "^4.0.0" decamelize-keys "^1.0.0" loud-rejection "^1.0.0" minimist-options "^3.0.1" normalize-package-data "^2.3.4" read-pkg-up "^3.0.0" redent "^2.0.0" trim-newlines "^2.0.0" yargs-parser "^10.0.0" meow@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== dependencies: camelcase-keys "^4.0.0" decamelize-keys "^1.0.0" loud-rejection "^1.0.0" minimist "^1.1.3" minimist-options "^3.0.1" normalize-package-data "^2.3.4" read-pkg-up "^3.0.0" redent "^2.0.0" trim-newlines "^2.0.0" merge-descriptors@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-0.0.1.tgz#2ff0980c924cf81d0b5d1fb601177cb8bb56c0d0" integrity sha1-L/CYDJJM+B0LXR+2ARd8uLtWwNA= merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= merge-source-map@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f" integrity sha1-pd5GU42uhNQRTMXqArR3KmNGcB8= dependencies: source-map "^0.5.6" merge-source-map@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== dependencies: source-map "^0.6.1" merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.2.3, merge2@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== methods@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/methods/-/methods-0.0.1.tgz#277c90f8bef39709645a8371c51c3b6c648e068c" integrity sha1-J3yQ+L7zlwlkWoNxxRw7bGSOBow= methods@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/methods/-/methods-0.1.0.tgz#335d429eefd21b7bacf2e9c922a8d2bd14a30e4f" integrity sha1-M11Cnu/SG3us8unJIqjSvRSjDk8= methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= micromatch@^2.1.5: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" braces "^1.8.2" expand-brackets "^0.1.4" extglob "^0.3.1" filename-regex "^2.0.0" is-extglob "^1.0.0" is-glob "^2.0.1" kind-of "^3.0.2" normalize-path "^2.0.1" object.omit "^2.0.0" parse-glob "^3.0.4" regex-cache "^0.4.2" micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" braces "^2.3.1" define-property "^2.0.2" extend-shallow "^3.0.2" extglob "^2.0.4" fragment-cache "^0.2.1" kind-of "^6.0.2" nanomatch "^1.2.9" object.pick "^1.3.0" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.2" micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== dependencies: braces "^3.0.1" picomatch "^2.0.5" miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" mime-db@1.42.0, "mime-db@>= 1.40.0 < 2": version "1.42.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.6: version "2.1.25" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== dependencies: mime-db "1.42.0" mime-types@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" integrity sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4= mime@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.5.tgz#9eed073022a8bf5e16c8566c6867b8832bfbfa13" integrity sha1-nu0HMCKov14WyFZsaGe4gyv7+hM= mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.4: version "2.4.4" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== mime@~1.2.11, mime@~1.2.2, mime@~1.2.7, mime@~1.2.9: version "1.2.11" resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" integrity sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA= mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== minify-stream@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/minify-stream/-/minify-stream-1.2.1.tgz#e65336ead34bd8e62109f35f268f87bb8b1e3eb8" integrity sha512-C6CESrYf8sncwbvS5rAb2kjKmWDswoZxoTN2agmAGKygdC/VqB1kDwpv19ZRMFvd7assj9lNgZcBGhh6PVByrg== dependencies: concat-stream "^2.0.0" convert-source-map "^1.5.0" duplexify "^4.1.1" from2-string "^1.1.0" terser "3.16.1" xtend "^4.0.1" minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= minimatch@0.3: version "0.3.0" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" integrity sha1-J12O2qxPG7MyZHIInnlJyDlGmd0= dependencies: lru-cache "2" sigmund "~1.0.0" minimatch@0.x: version "0.4.0" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.4.0.tgz#bd2c7d060d2c8c8fd7cde7f1f2ed2d5b270fdb1b" integrity sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs= dependencies: lru-cache "2" sigmund "~1.0.0" "minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimatch@^0.2.14, minimatch@~0.2.12: version "0.2.14" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" integrity sha1-x054BXT2PG+aCQ6Q775u9TpqdWo= dependencies: lru-cache "2" sigmund "~1.0.0" minimatch@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-1.0.0.tgz#e0dd2120b49e1b724ce8d714c520822a9438576d" integrity sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20= dependencies: lru-cache "2" sigmund "~1.0.0" minimatch@^2.0.1: version "2.0.10" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" integrity sha1-jQh8OcazjAAbl/ynzm0OHoCvusc= dependencies: brace-expansion "^1.0.0" minimist-options@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce" integrity sha1-Tf/lJdriuGTGbC4jxicdev3s784= minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= minimist@~0.0.1, minimist@~0.0.7: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: minipass "^2.9.0" mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" mkdirp@0.3.5, mkdirp@0.3.x: version "0.3.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" integrity sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" mocha@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" integrity sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg== dependencies: browser-stdout "1.3.0" commander "2.9.0" debug "2.6.8" diff "3.2.0" escape-string-regexp "1.0.5" glob "7.1.1" growl "1.9.2" he "1.1.1" json3 "3.3.2" lodash.create "3.1.1" mkdirp "0.5.1" supports-color "3.1.2" module-deps@^4.0.2, module-deps@^4.0.8: version "4.1.1" resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd" integrity sha1-IyFYM/HaE/1gbMuAh7RIUty4If0= dependencies: JSONStream "^1.0.3" browser-resolve "^1.7.0" cached-path-relative "^1.0.0" concat-stream "~1.5.0" defined "^1.0.0" detective "^4.0.0" duplexer2 "^0.1.2" inherits "^2.0.1" parents "^1.0.0" readable-stream "^2.0.2" resolve "^1.1.3" stream-combiner2 "^1.1.1" subarg "^1.0.0" through2 "^2.0.0" xtend "^4.0.0" module-deps@^6.0.0: version "6.2.1" resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.1.tgz#cfe558784060e926824f474b4e647287837cda50" integrity sha512-UnEn6Ah36Tu4jFiBbJVUtt0h+iXqxpLqDvPS8nllbw5RZFmNJ1+Mz5BjYnM9ieH80zyxHkARGLnMIHlPK5bu6A== dependencies: JSONStream "^1.0.3" browser-resolve "^1.7.0" cached-path-relative "^1.0.2" concat-stream "~1.6.0" defined "^1.0.0" detective "^5.0.2" duplexer2 "^0.1.2" inherits "^2.0.1" parents "^1.0.0" readable-stream "^2.0.2" resolve "^1.4.0" stream-combiner2 "^1.1.1" subarg "^1.0.0" through2 "^2.0.0" xtend "^4.0.0" ms@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c" integrity sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw= ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg= ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== multer@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.2.tgz#2f1f4d12dbaeeba74cb37e623f234bf4d3d2057a" integrity sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg== dependencies: append-field "^1.0.0" busboy "^0.2.11" concat-stream "^1.5.2" mkdirp "^0.5.1" object-assign "^4.1.1" on-finished "^2.3.0" type-is "^1.6.4" xtend "^4.0.0" multi-stage-sourcemap@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz#b09fc8586eaa17f81d575c4ad02e0f7a3f6b1105" integrity sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU= dependencies: source-map "^0.1.34" multimap@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/multimap/-/multimap-1.1.0.tgz#5263febc085a1791c33b59bb3afc6a76a2a10ca8" integrity sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw== multimatch@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== dependencies: "@types/minimatch" "^3.0.3" array-differ "^3.0.0" array-union "^2.1.0" arrify "^2.0.1" minimatch "^3.0.4" multiparty@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-2.2.0.tgz#a567c2af000ad22dc8f2a653d91978ae1f5316f4" integrity sha1-pWfCrwAK0i3I8qZT2Rl4rh9TFvQ= dependencies: readable-stream "~1.1.9" stream-counter "~0.2.0" multisplice@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/multisplice/-/multisplice-1.0.0.tgz#e74cf2948dcb51a6c317fc5e22980a652f7830e9" integrity sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA== mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== mutexify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mutexify/-/mutexify-1.2.0.tgz#45597975a2b035f56dcf61ff15cc8d73c28e7639" integrity sha512-oprzxd2zhfrJqEuB98qc1dRMMonClBQ57UPDjnbcrah4orEMTq1jq3+AcdFe5ePzdbJXI7zmdhfftIdMnhYFoQ== nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== nanobench@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nanobench/-/nanobench-2.1.1.tgz#c2f23fcce116d50b4998b1954ba114674c137269" integrity sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A== dependencies: browser-process-hrtime "^0.1.2" chalk "^1.1.3" mutexify "^1.1.0" pretty-hrtime "^1.0.2" nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.1" natives@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= ncp@~0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" integrity sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ= needle@^2.2.1: version "2.4.0" resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== dependencies: debug "^3.2.6" iconv-lite "^0.4.4" sax "^1.2.4" negotiator@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.3.0.tgz#706d692efeddf574d57ea9fb1ab89a4fa7ee8f60" integrity sha1-cG1pLv7d9XTVfqn7GriaT6fuj2A= negotiator@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" integrity sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g= negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== neo-async@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== nested-error-stacks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== nlcst-is-literal@^1.0.0, nlcst-is-literal@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/nlcst-is-literal/-/nlcst-is-literal-1.2.0.tgz#bc0ce369df552945a696634ab2808535fd5fbb32" integrity sha512-0f7SKVXHdQvXvibPzLL90Lp8KXbhO0ktZGvythpwyoc7mmXKGe2VtDjnPRailPWBO8TgzHRzvQzkPIz81PSyBA== dependencies: nlcst-to-string "^2.0.0" nlcst-normalize@^2.0.0, nlcst-normalize@^2.1.0: version "2.1.3" resolved "https://registry.yarnpkg.com/nlcst-normalize/-/nlcst-normalize-2.1.3.tgz#9aecee8032e7d561eed8767eaf80a0c93bb9840b" integrity sha512-TtAmaUsjZPU6zH+yksmLwTezMti5Db8R+kdViCmWv44pWGxNr4C90p7X33YbiULxDfA7i7J7gUutDX4fT9pn7g== dependencies: nlcst-to-string "^2.0.0" nlcst-search@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/nlcst-search/-/nlcst-search-1.5.1.tgz#86791990b9b8785bb6d5a910d49b9ec4a7e81801" integrity sha512-G3ws0fgNlVsUvHvA2G1PTjyxzGOJ0caI0+WOvlZzev5iSUTX+R1q4lnlL4Y7E+he4ZMUW/0FMn9rYwdYon/13g== dependencies: nlcst-is-literal "^1.1.0" nlcst-normalize "^2.1.0" unist-util-visit "^1.0.0" nlcst-to-string@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.3.tgz#b7913bb1305263b0561a86de68e179f17f7febe3" integrity sha512-OY2QhGdf6jpYfHqS4vJwqF7aIBZkaMjMUkcHcskMPitvXLuYNGdQvgVWI/5yKwkmIdmhft3ounSJv+Re2yydng== node-fetch@^2.2.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== node-int64@~0.3.0: version "0.3.3" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.3.3.tgz#2d6e6b2ece5de8588b43d88d1bc41b26cd1fa84d" integrity sha1-LW5rLs5d6FiLQ9iNG8QbJs0fqE0= node-pre-gyp@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" needle "^2.2.1" nopt "^4.0.1" npm-packlist "^1.1.6" npmlog "^4.0.2" rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" tar "^4" node-releases@^1.1.41: version "1.1.41" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.41.tgz#57674a82a37f812d18e3b26118aefaf53a00afed" integrity sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg== dependencies: semver "^6.3.0" node-uuid@~1.4.0, node-uuid@~1.4.1: version "1.4.8" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc= nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= dependencies: abbrev "1" nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^4.1.0: version "4.5.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== npm-packlist@^1.1.6: version "1.4.6" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" npm-prefix@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/npm-prefix/-/npm-prefix-1.2.0.tgz#e619455f7074ba54cc66d6d0d37dd9f1be6bcbc0" integrity sha1-5hlFX3B0ulTMZtbQ033Z8b5ry8A= dependencies: rc "^1.1.0" shellsubstitute "^1.1.0" untildify "^2.1.0" npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" npm-run-path@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg== dependencies: path-key "^3.0.0" npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" gauge "~2.7.3" set-blocking "~2.0.0" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= number-to-words@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/number-to-words/-/number-to-words-1.2.4.tgz#e0f124de9628f8d86c4eeb89bac6c07699264501" integrity sha512-/fYevVkXRcyBiZDg6yzZbm0RuaD6i0qRfn8yr+6D0KgBMOndFPxuW10qCHpzs50nN8qKuv78k8MuotZhcVX6Pw== nyc@^14.1.1: version "14.1.1" resolved "https://registry.yarnpkg.com/nyc/-/nyc-14.1.1.tgz#151d64a6a9f9f5908a1b73233931e4a0a3075eeb" integrity sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw== dependencies: archy "^1.0.0" caching-transform "^3.0.2" convert-source-map "^1.6.0" cp-file "^6.2.0" find-cache-dir "^2.1.0" find-up "^3.0.0" foreground-child "^1.5.6" glob "^7.1.3" istanbul-lib-coverage "^2.0.5" istanbul-lib-hook "^2.0.7" istanbul-lib-instrument "^3.3.0" istanbul-lib-report "^2.0.8" istanbul-lib-source-maps "^3.0.6" istanbul-reports "^2.2.4" js-yaml "^3.13.1" make-dir "^2.1.0" merge-source-map "^1.1.0" resolve-from "^4.0.0" rimraf "^2.6.3" signal-exit "^3.0.2" spawn-wrap "^1.4.2" test-exclude "^5.2.3" uuid "^3.3.2" yargs "^13.2.2" yargs-parser "^13.0.0" oauth-sign@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.4.0.tgz#f22956f31ea7151a821e5f2fb32c113cad8b9f69" integrity sha1-8ilW8x6nFRqCHl8vsywRPK2Ln2k= obj-props@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/obj-props/-/obj-props-1.2.0.tgz#3dbaa849f30238d84206c8b7192e1ce54d0d43b2" integrity sha512-ZYpJyCe7O4rhNxB/2SZy8ADJww8RSRBdG36a4MWWq7JwILGJ1m61B90QJtxwDDNA0KzyR8V12Wikpjuux7Gl9Q== object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" object-inspect@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: define-properties "^1.1.2" function-bind "^1.1.1" has-symbols "^1.0.0" object-keys "^1.0.11" object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= dependencies: define-properties "^1.1.2" es-abstract "^1.5.1" object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= dependencies: for-own "^0.1.4" is-extendable "^0.1.1" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" object.values@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== dependencies: define-properties "^1.1.3" es-abstract "^1.12.0" function-bind "^1.1.1" has "^1.0.3" on-finished@^2.3.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" on-finished@~2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.2.1.tgz#5c85c1cc36299f78029653f667f27b6b99ebc029" integrity sha1-XIXBzDYpn3gCllP2Z/J7a5nrwCk= dependencies: ee-first "1.1.0" on-headers@~1.0.0, on-headers@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" onetime@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: mimic-fn "^2.1.0" open-editor@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/open-editor/-/open-editor-2.0.1.tgz#d001055770fbf6f6ee73c18f224915f444be863c" integrity sha512-B3KdD7Pl8jYdpBSBBbdYaqVUI3whQjLl1G1+CvhNc8+d7GzKRUq+VuCIx1thxGiqD2oBGRvsZz7QWrBsFP2yVA== dependencies: env-editor "^0.4.0" line-column-path "^2.0.0" open "^6.2.0" open@^6.2.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== dependencies: is-wsl "^1.1.0" opencollective-postinstall@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" integrity sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw== opener@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.0.tgz#d11f86eeeb076883735c9d509f538fe82d10b941" integrity sha1-0R+G7usHaINzXJ1Qn1OP6C0QuUE= optimist@0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.4.tgz#4d6d0bd71ffad0da4ba4f6d876d5eeb04e07480b" integrity sha1-TW0L1x/60NpLpPbYdtXusE4HSAs= dependencies: wordwrap "~0.0.2" optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" optimist@~0.3, optimist@~0.3.5: version "0.3.7" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" integrity sha1-yQlBrVnkJzMokjB00s8ufLxuwNk= dependencies: wordwrap "~0.0.2" optionator@^0.8.1, optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.6" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" word-wrap "~1.2.3" os-browserify@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" integrity sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ= os-browserify@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.0.3.tgz#cd6ad8ddb290915ad9e22765576025d411f29cb6" integrity sha1-zWrY3bKQkVrZ4idlV2Al1BHynLY= osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" outpipe@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" integrity sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I= dependencies: shell-quote "^1.4.2" p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-finally@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== dependencies: p-try "^2.0.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-map@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== dependencies: aggregate-error "^3.0.0" p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== package-hash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-3.0.0.tgz#50183f2d36c9e3e528ea0a8605dff57ce976f88e" integrity sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA== dependencies: graceful-fs "^4.1.15" hasha "^3.0.0" lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" package-json@^6.3.0: version "6.5.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== dependencies: got "^9.6.0" registry-auth-token "^4.0.0" registry-url "^5.0.0" semver "^6.2.0" pako@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parents@^1.0.0, parents@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= dependencies: path-platform "~0.11.15" parse-asn1@^5.0.0: version "5.1.5" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" safe-buffer "^5.1.1" parse-author@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" integrity sha1-00YL8d3Q367tQtp1QkLmX7aEqB8= dependencies: author-regex "^1.0.0" parse-english@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.1.2.tgz#6710d426caa76db327ef7066991cd1b9f602db9f" integrity sha512-+PBf+1ifxqJlOpisODiKX4A8wBEgWm4goMvDB5O9zx/cQI58vzHTZeWFbAgCF9fUXRl8/YdINv1cfmfIRR1acg== dependencies: nlcst-to-string "^2.0.0" parse-latin "^4.0.0" unist-util-modify-children "^1.0.0" unist-util-visit-children "^1.0.0" parse-entities@^1.0.2, parse-entities@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" character-reference-invalid "^1.0.0" is-alphanumerical "^1.0.0" is-decimal "^1.0.0" is-hexadecimal "^1.0.0" parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" is-extglob "^1.0.0" is-glob "^2.0.0" parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" parse-json@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" parse-latin@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.2.0.tgz#b0b107a26ecbe8670f9ed0d20eb491c7780f99d1" integrity sha512-b8PvsA1Ohh7hIQwDDy6kSjx3EbcuR3oKYm5lC1/l/zIB6mVVV5ESEoS1+Qr5+QgEGmp+aEZzc+D145FIPJUszw== dependencies: nlcst-to-string "^2.0.0" unist-util-modify-children "^1.0.0" unist-util-visit-children "^1.0.0" parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-platform@~0.11.15: version "0.11.15" resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pause@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10= pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" ripemd160 "^2.0.1" safe-buffer "^5.0.1" sha.js "^2.4.8" picomatch@^2.0.4, picomatch@^2.0.5: version "2.1.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pkg-conf@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== dependencies: find-up "^3.0.0" load-json-file "^5.2.0" pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: find-up "^2.1.0" pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: find-up "^3.0.0" pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" please-upgrade-node@^3.1.1, please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== dependencies: semver-compare "^1.0.0" plur@^3.0.0, plur@^3.0.1: version "3.1.1" resolved "https://registry.yarnpkg.com/plur/-/plur-3.1.1.tgz#60267967866a8d811504fe58f2faaba237546a5b" integrity sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w== dependencies: irregular-plurals "^2.0.0" pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" prettier@^1.15.2: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== pretty-hrtime@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process@~0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== propose@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/propose/-/propose-0.0.5.tgz#48a065d9ec7d4c8667f4050b15c4a2d85dbca56b" integrity sha1-SKBl2ex9TIZn9AULFcSi2F28pWs= dependencies: levenshtein-edit-distance "^1.0.0" proto-props@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/proto-props/-/proto-props-2.0.0.tgz#8ac6e6dec658545815c623a3bc81580deda9a181" integrity sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ== proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== dependencies: forwarded "~0.1.2" ipaddr.js "1.9.0" pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.28: version "1.5.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.5.0.tgz#47fd1292def7fdb1e138cd78afa8814cebcf7b13" integrity sha512-4vqUjKi2huMu1OJiLhi3jN6jeeKvMZdI1tYgi/njW5zV52jNLgSAZSdN16m9bJFe61/cT8ulmw4qFitV9QRsEA== public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" create-hash "^1.1.0" parse-asn1 "^5.0.0" randombytes "^2.0.1" safe-buffer "^5.1.2" pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= q@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/q/-/q-1.0.1.tgz#11872aeedee89268110b10a718448ffb10112a14" integrity sha1-EYcq7t7okmgRCxCnGESP+xARKhQ= qs@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.5.tgz#294b268e4b0d4250f6dde19b3b8b34935dff14ef" integrity sha1-KUsmjksNQlD23eGbO4s0k13/FO8= qs@0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz#6e015098ff51968b8a3c819001d5f2c89bc4b107" integrity sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc= qs@2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/qs/-/qs-2.4.2.tgz#f7ce788e5777df0b5010da7f7c4e73ba32470f5a" integrity sha1-9854jld33wtQENp/fE5zujJHD1o= qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@^6.9.1: version "6.9.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== qs@~1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/qs/-/qs-1.2.2.tgz#19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88" integrity sha1-GbV/8k3CqZzh+L32r82ln472H4g= querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= quotation@^1.0.0, quotation@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/quotation/-/quotation-1.1.2.tgz#fc178192e524359e36b8832b27586817bb94bf2e" integrity sha512-96iP6AudZyiOQWEY8hOUjliGaRMNj4yiC22vCSSFMNDdvpp/5/MyfsHSwFcFswWjDVxdBdzQS7MqA3rYglizOQ== random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" integrity sha1-T2ih3Arli9P7lYSMMDJNt11kNgs= randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== dependencies: is-number "^4.0.0" kind-of "^6.0.0" math-random "^1.0.1" randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" range-parser@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-0.0.4.tgz#c0427ffef51c10acba0782a46c9602e744ff620b" integrity sha1-wEJ//vUcEKy6B4KkbJYC50T/Ygs= range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.2.tgz#c74b3004dea5defd1696171106ac740ec31d62be" integrity sha1-x0swBN6l3v0WlhcRBqx0DsMdYr4= dependencies: bytes "~0.2.1" raw-body@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== dependencies: bytes "3.1.0" http-errors "1.7.2" iconv-lite "0.4.24" unpipe "1.0.0" raw-body@~2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.0.2.tgz#a2c2f98c8531cee99c63d8d238b7de97bb659fca" integrity sha1-osL5jIUxzumcY9jSOLfel7tln8o= dependencies: bytes "2.1.0" iconv-lite "0.4.8" rc@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/rc/-/rc-0.6.0.tgz#e1c930059af831c85413fe275ae2f40f4e3c5371" integrity sha1-4ckwBZr4MchUE/4nWuL0D048U3E= dependencies: deep-extend "~0.2.5" ini "~1.3.0" minimist "~0.0.7" strip-json-comments "0.1.x" rc@^1.1.0, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" read-only-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= dependencies: readable-stream "^2.0.2" read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: find-up "^2.0.0" read-pkg "^2.0.0" read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" read-pkg "^3.0.0" read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== dependencies: find-up "^3.0.0" read-pkg "^3.0.0" read-pkg-up@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.0.tgz#3f3e53858ec5ae5e6fe14bc479da0a7c98f85ff3" integrity sha512-t2ODkS/vTTcRlKwZiZsaLGb5iwfx9Urp924aGzVyboU6+7Z2i6eGr/G1Z4mjvwLLQV3uFOBKobNRGM3ux2PD/w== dependencies: find-up "^4.1.0" read-pkg "^5.2.0" type-fest "^0.8.1" read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" path-type "^2.0.0" read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" path-type "^3.0.0" read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" normalize-package-data "^2.5.0" parse-json "^5.0.0" type-fest "^0.6.0" readable-stream@1.1.x, "readable-stream@>=1.1.13-1 <1.2.0-0", readable-stream@^1.0.27-1, readable-stream@~1.1.11, readable-stream@~1.1.8, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" "readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~2.0.0" safe-buffer "~5.1.1" string_decoder "~1.1.1" util-deprecate "~1.0.1" readable-stream@~1.0.2, readable-stream@~1.0.24, readable-stream@~1.0.26, readable-stream@~1.0.33: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" readable-stream@~2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" process-nextick-args "~1.0.6" string_decoder "~0.10.x" util-deprecate "~1.0.1" readdirp@^2.0.0, readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: graceful-fs "^4.1.11" micromatch "^3.1.10" readable-stream "^2.0.2" readdirp@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== dependencies: picomatch "^2.0.4" redent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= dependencies: indent-string "^3.0.0" strip-indent "^2.0.0" reduce-component@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da" integrity sha1-4Mk1QsV0UhvqE98PlIjtgqt3xdo= regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== dependencies: regenerate "^1.4.0" regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regenerator-runtime@^0.13.2: version "0.13.3" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== regenerator-transform@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== dependencies: private "^0.1.6" regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== dependencies: is-equal-shallow "^0.1.3" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" regexp-tree@~0.1.1: version "0.1.16" resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.16.tgz#0715feadb6f766aad7eac5ef4287d2c39acf2fc5" integrity sha512-nXWhGJLTWLNdhWF1uqoXQgAOgv8mQGpgXTOk8BWp08YMOKCtn74VoyOJ+AXZ68Dj50Myd+msYs+aGRBzWJ5dJA== regexp.prototype.flags@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== dependencies: define-properties "^1.1.2" regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== regexpp@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== regexpu-core@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.1.0" regjsgen "^0.5.0" regjsparser "^0.6.0" unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" registry-auth-token@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be" integrity sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw== dependencies: rc "^1.2.8" safe-buffer "^5.0.1" registry-url@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: rc "^1.2.8" regjsgen@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== dependencies: jsesc "~0.5.0" release-zalgo@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= dependencies: es6-error "^4.0.1" remark-cli@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/remark-cli/-/remark-cli-7.0.1.tgz#2d19d77674e20ea20a3f8ae31694ac30fddb1f52" integrity sha512-CUjBLLSbEay0mNwOO+pptnLIoS8UB6cHlhZVpTRKbtbIcw6YEzEfD7jGjW1HCA8lZK87IfY3/DuWE6DlXu+hfg== dependencies: markdown-extensions "^1.1.0" remark "^11.0.0" unified-args "^7.0.0" remark-comment-config@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/remark-comment-config/-/remark-comment-config-5.1.0.tgz#2ba61d8a5260f6b27390c6b6d86e8a4ce822c26e" integrity sha512-DNKNnH1OEFhvVxoAssJNArul1O4gi5iM8BY4C3lZ5R62LqXw6oyRkYOIL7b+YVCM3rEKuJvU7p8vtFBtHEZ1aQ== dependencies: mdast-comment-marker "^1.0.1" remark-contributors@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/remark-contributors/-/remark-contributors-4.0.1.tgz#f28269adb91f7ca6c95bb14ce1e08a9822ac9dad" integrity sha512-5G76tKfpRl/TrOljvD1KZvA53S+jm0DeL2HDwFgdkxTexUdv8A0EG2JQNxGWXEVmOhch3yJ4tF2QlsiRf8SXWg== dependencies: is-url "^1.2.2" mdast-util-heading-range "^2.1.2" parse-author "^2.0.0" unist-builder "^1.0.3" remark-github@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/remark-github/-/remark-github-8.0.0.tgz#f1b2189adaf1b7ffd377dcbef8bbaf36837eaf8c" integrity sha512-N1gWYcvYguZesBGMwfNXBCJEquuWSlb1sSINWiun8fg5k/ea6H9FL/t5I6M4eIgeXLrz3vN8RjJUxkyGdyJQZQ== dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" is-hexadecimal "^1.0.0" mdast-util-to-string "^1.0.1" unist-util-visit "^1.0.0" remark-heading-gap@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/remark-heading-gap/-/remark-heading-gap-3.1.1.tgz#0f7d4463e17135814be962b437c481121c81f136" integrity sha512-/4Mfa+Yy2ST5Ql/FXuaGL072arymKbaRSN1IN0k2i7NXZJHDrnDeWo9df8NsTZlLuRRC0EaXpt37mrmWvJ46fg== remark-license@niftylettuce/remark-license: version "4.0.1" resolved "https://codeload.github.com/niftylettuce/remark-license/tar.gz/17ecb8f64f8f6082414d14f9267a12764e6ddbfb" dependencies: mdast-util-heading-range "^2.0.0" parse-author "^2.0.0" spdx-license-list "^3.0.1" remark-lint-blockquote-indentation@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-1.0.3.tgz#9c35235dd0e904ad6c085e9f66d94b3f13968d1f" integrity sha512-qK4C1l2VmeOVWEAkDYP0CaDtSFoaEBEo5l4oyz1kTkY7YB0Jh7llW2KjuhJz5IzMLmloKJzIyGwlu/odcwaHpg== dependencies: mdast-util-to-string "^1.0.2" plur "^3.0.0" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-checkbox-character-style@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-1.0.3.tgz#d92301fbcea0ba0670bd2190c7eefa7784be0e5b" integrity sha512-bQGrGHLlguTxOzuywHtYxNcg58TYhNgeEAMCTvdAggt5bYZIwmh/otx51JsQ0a96qxd/6/G0Ri2xzgyxf9wB8w== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" vfile-location "^2.0.1" remark-lint-checkbox-content-indent@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-1.0.3.tgz#55771f9e57224fa119f53a57ab331c30c16d0e05" integrity sha512-YaM1yy8RdnM0DUaP0r2X8kF+inUTmjkCpj5Xjn7QTOV1T5jqJMJnRRilirAWgOGa1QBZBUew7uj0L1Je9SJIZw== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" vfile-location "^2.0.1" remark-lint-code-block-style@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-code-block-style/-/remark-lint-code-block-style-1.0.3.tgz#236d8a5558041decf2b275e9d9eb5868950375ec" integrity sha512-DL+rudnd9ILP5YXm74tLpMzfWZLqziX7NwIwUhqRefaOyWwxgPPy7hbT59FJqcFc6E/zvDz+Oq4nR1BSV5kEdw== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-definition-case@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-definition-case/-/remark-lint-definition-case-1.0.4.tgz#54d2a112794f1a070a5e8aa7c8090e8ae9aa3e11" integrity sha512-ebl8vYOab9iy1Mr29Wo/9CmqcYGRjCfBievIZts08efrxIElWz+jB8/n7C17fh8k0djiiS/Of6W+bfRD+kMXLA== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.4.0" remark-lint-definition-spacing@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-definition-spacing/-/remark-lint-definition-spacing-1.0.4.tgz#c322ff110c168449d8217773a23352c4174ffeba" integrity sha512-UderghITmru72OXB5ErCFhVsY7up2wK/m1bUD3E2dm/TFn73/7WpykENt5UirCDT/aeyoHYl8QXUVL20rAc3XQ== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.4.0" remark-lint-emphasis-marker@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-1.0.3.tgz#6dc4e7df13e5092c1222110f826f68b4b3920550" integrity sha512-ea2tEVyhZvYxwj6AHsW2qzgEDLljcnzq5taZ3FJFL0KMZYZHfWaIU90H43jrW4seGEtmaP1bmoqJaTavJ2x5Jw== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-fenced-code-flag@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-1.0.3.tgz#349caf7c6dd153d0b6ffb57cbcc67c8277569d2a" integrity sha512-X8Oi6dhfqV9NI3cVg29myvT/NATDHVgRGCpnNz76w7VXwzhBvQtJr1MxZzuPxfWLox+ARCXF2rY9n9hbYFHYTg== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-fenced-code-marker@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-1.0.3.tgz#9df1d16d535856f41b3c17a7d309385475cbec04" integrity sha512-JKnojSQ8JkwpIpbNm6wtKEfx8iiv8QIwNHFM06iTCHExMhXa4pJ3wb5M5f0wsWNHtoND3lrw6AcVPoZxEPnflg== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-file-extension@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-file-extension/-/remark-lint-file-extension-1.0.3.tgz#a7fc78fbf041e513c618b2cca0f2160ee37daa13" integrity sha512-P5gzsxKmuAVPN7Kq1W0f8Ss0cFKfu+OlezYJWXf+5qOa+9Y5GqHEUOobPnsmNFZrVMiM7JoqJN2C9ZjrUx3N6Q== dependencies: unified-lint-rule "^1.0.0" remark-lint-final-definition@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-final-definition/-/remark-lint-final-definition-1.0.3.tgz#4fd7bbf5a028f6e32645460965099689485508ae" integrity sha512-QhbBYy99enfQDeUTElioCHrhgg+SgjMNRlru7/JlOguOufP6wn7AXgn2EVTrLZRoByY0VsNS2jCayXxUTzQ8KA== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-final-newline@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-final-newline/-/remark-lint-final-newline-1.0.3.tgz#06c3d71ec7b97c16cde31543cd41a16b36c30f79" integrity sha512-ETAadktv75EwUS3XDhyZUVstXKxfPAEn7SmfN9kZ4+Jb4qo4hHE9gtTOzhE6HxLUxxl9BBhpC5mMO3JcL8UZ5A== dependencies: unified-lint-rule "^1.0.0" remark-lint-first-heading-level@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/remark-lint-first-heading-level/-/remark-lint-first-heading-level-1.1.4.tgz#43d463f5d0f5109f889e2dd7797abd6d7fc12f16" integrity sha512-iU5G4ZmGx8/2p/U2rPc6qhjyQ/BCcOuj07KzI7XxapYfJqZF6Xxz2rC2b/5xsDJAz2vXG74U4iG3c9vmbyH9WQ== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.4.0" remark-lint-hard-break-spaces@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.4.tgz#200e1dae849a6bc2f8fdb3b843faf23c70942530" integrity sha512-YM82UpgliZCZhGNmFxEe7ArfhqR5CplFf2bc0k0+8w3rKWKx7EJcGMar2NK410tIi40gGeWtH/pIEypPJFCCiA== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-heading-style@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-heading-style/-/remark-lint-heading-style-1.0.3.tgz#de7377996cb9c7e501ec1ba7b7767709a68b824b" integrity sha512-ZUhMav0HHUxo5gzLqxQsOf2ZpP/I3m6EEK8q25/kqpCYnwm1uRJ5CQ40PDQx46pmKtVibIMzDmraYovxNG3ovw== dependencies: mdast-util-heading-style "^1.0.2" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.1.1" remark-lint-list-item-bullet-indent@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-1.0.3.tgz#3b12b7360694508402e0056c7ecd0eedab2aaac1" integrity sha512-iVxQbrgzLpMHG3C6o6wRta/+Bc96etOiBYJnh2zm/aWz6DJ7cGLDykngblP/C4he7LYSeWOD/8Y57HbXZwM2Og== dependencies: plur "^3.0.0" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-list-item-indent@1.0.4, remark-lint-list-item-indent@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.4.tgz#7a1ef6283f9a928f4940e02ec37099935f2783e6" integrity sha512-Sv0gVH6qP1/nFpbJuyyguB9sAD2o42StD2WbEZeUcEexXwRO4u/YaX0Pm5pMtCiEHyN+qyL6ShKBQMtgol9BeA== dependencies: plur "^3.0.0" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-no-auto-link-without-protocol@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.3.tgz#f97aed92af24e6c07023a7a7dc2c147f7eb7927f" integrity sha512-k+hg2mXnO4Q9WV+UShPLen5oThvFxcRVWkx2hviVd/nu3eiszBKH3o38csBwjeJoMG3l2ZhdUW8dlOBhq8670Q== dependencies: mdast-util-to-string "^1.0.2" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-no-blockquote-without-marker@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.3.tgz#7eb431fcb742412e3bc66faa7f58531245ad952f" integrity sha512-faDzKrA6aKidsRXG6gcIlCO8TexLxIxe+n9B3mdnl8mhZGgE0FfWTkIWVMj0IYps/xVsVMf45KxhXgc1wU9kwg== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" vfile-location "^2.0.1" remark-lint-no-consecutive-blank-lines@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-1.0.3.tgz#4fa3b2cf2939c978a3fe7978f726f6142e7dd567" integrity sha512-2Ef7fPxrfLditA7sTo2Qfqd+xwh/luWl8GzILE5vcWIxLDqKk3dTLJkB5nP+7Cr4kqWJAwXnRkEDd77ehrRV3A== dependencies: plur "^3.0.0" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-no-duplicate-definitions@^1.0.0, remark-lint-no-duplicate-definitions@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-1.0.5.tgz#b0347f3bae7f8870a9f04a27157ff658fbde28a4" integrity sha512-zKXmfNUODXhJsGQdqfguMG9Nl9v1sLaDsQgMjUtmOSoQRnNud9ThQAZl62eX5jBn5HKcpOifG80tgkyBvU5eEw== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-stringify-position "^2.0.0" unist-util-visit "^1.4.0" remark-lint-no-emphasis-as-heading@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-1.0.3.tgz#9d837d4c5635a784ef0e983cfb402da15672050d" integrity sha512-HEmyeyKciUz95+CgpAH98RPR73jq5u5CZb2FOMSqgNl9B6FZXqVpq9F3txPqUw3nAqFYOAEnfiaoRgcqtioh0Q== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.1.1" remark-lint-no-file-name-articles@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.3.tgz#c712d06a24e24b0c4c3666cf3084a0052a2c2c17" integrity sha512-YZDJDKUWZEmhrO6tHB0u0K0K2qJKxyg/kryr14OaRMvWLS62RgMn97sXPZ38XOSN7mOcCnl0k7/bClghJXx0sg== dependencies: unified-lint-rule "^1.0.0" remark-lint-no-file-name-consecutive-dashes@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.3.tgz#6a96ddf60e18dcdb004533733f3ccbfd8ab076ae" integrity sha512-7f4vyXn/ca5lAguWWC3eu5hi8oZ7etX7aQlnTSgQZeslnJCbVJm6V6prFJKAzrqbBzMicUXr5pZLBDoXyTvHHw== dependencies: unified-lint-rule "^1.0.0" remark-lint-no-file-name-irregular-characters@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.3.tgz#6dcd8b51e00e10094585918cb8e7fc999df776c3" integrity sha512-b4xIy1Yi8qZpM2vnMN+6gEujagPGxUBAs1judv6xJQngkl5d5zT8VQZsYsTGHku4NWHjjh3b7vK5mr0/yp4JSg== dependencies: unified-lint-rule "^1.0.0" remark-lint-no-file-name-mixed-case@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.3.tgz#0ebe5eedd0191507d27ad6ac5eed1778cb33c2de" integrity sha512-d7rJ4c8CzDbEbGafw2lllOY8k7pvnsO77t8cV4PHFylwQ3hmCdTHLuDvK87G3DaWCeKclp0PMyamfOgJWKMkPA== dependencies: unified-lint-rule "^1.0.0" remark-lint-no-file-name-outer-dashes@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.4.tgz#c6e22a5cc64df4e12fc31712a927e8039854a666" integrity sha512-+bZvvme2Bm3Vp5L2iKuvGHYVmHKrTkkRt8JqJPGepuhvBvT4Q7+CgfKyMtC/hIjyl+IcuJQ2H0qPRzdicjy1wQ== dependencies: unified-lint-rule "^1.0.0" remark-lint-no-heading-content-indent@^1.0.0, remark-lint-no-heading-content-indent@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-1.0.3.tgz#2f1f23b3e9f0c1e3c3abca5e2de1587cc3178d6b" integrity sha512-7xM6X5E/dt8OXOHdejH+sfYb139a3kMr8ZSSkcp90Ab1y+ZQBNaWsR3mYh8FRKkYPTN5eyd+KjhNpLWyqqCbgg== dependencies: mdast-util-heading-style "^1.0.2" plur "^3.0.0" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-no-heading-indent@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-1.0.3.tgz#bc6feffd1cc6228d2a3938025c3eab7cb74fdbc5" integrity sha512-RTvsFfiXjHZOxU+t7DtNPk9M9EqGe82MZbo+VOJEUBkQKf17qp4EZkJEvl4h9pn+hJmoKHLb7Vfge8Bxe42gcQ== dependencies: plur "^3.0.0" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-no-heading-punctuation@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-1.0.3.tgz#7357b0b6e668bb6b32338fe280cde9fe4388b547" integrity sha512-JQD05RjLS99ePBQ4Bed1uWsQTlIMBTcGgIgF6jFXSCEqhwnrIUDwk6S3MG1RZsKd3TLw2xuT/i+POpfBc2+1kQ== dependencies: mdast-util-to-string "^1.0.2" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.1.1" remark-lint-no-inline-padding@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.4.tgz#eedb4ca2691d30f3f05b4e5e33967bd64a34daa4" integrity sha512-u5rgbDkcfVv645YxxOwoGBBJbsHEwWm/XqnO8EhfKTxkfKOF4ZItG7Ajhj89EDaeXMkvCcB/avBl4bj50eJH3g== dependencies: mdast-util-to-string "^1.0.2" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.4.0" remark-lint-no-literal-urls@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.3.tgz#1b5374e416d1b595ee1902587dc37f34c0d6244a" integrity sha512-H5quyMzl2kaewK+jYD1FI0G1SIinIsIp4DEyOUwIR+vYUoKwo0B4vvW0cmPpD1dgqqxHYx0B2B0JQQKFVWzGiw== dependencies: mdast-util-to-string "^1.0.2" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-no-missing-blank-lines@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-missing-blank-lines/-/remark-lint-no-missing-blank-lines-1.0.3.tgz#534c5fa81accc482ef215b4f5baa8154e078736c" integrity sha512-zUmvDO9xYG5ZZerhdgir7wU+xQ0+2gg1qZjPG+O9Yb5yfQl+D7ACO3iGDfiTTPssZE1nPplCJgWH1MPJmf8HLg== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-no-multiple-toplevel-headings@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-1.0.4.tgz#0cfd8575e5576d7678802eac56fda894afee3817" integrity sha512-0wDddx6htN5sL9/rofesiQF0oEgwN5224UmueiDx0ZUlYrn6VS0/SS0X3WWxtXmyeqlExfWF3D/g89tNs7dcjw== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-stringify-position "^2.0.0" unist-util-visit "^1.1.1" remark-lint-no-shell-dollars@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-1.0.3.tgz#07e99fc3843c665440f9a1d894ee518b2ad23958" integrity sha512-fT3lQMTjEkPryL+63qDP1NfrohP3tG5i3SkNWSSR4VLU6OSsSSXlHGQGjo0ag//+EPKHB5/9frB/YQ0gDEPRGQ== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.1.1" remark-lint-no-shortcut-reference-image@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.3.tgz#ab4fa15fd8aff251cb8db1f3aed4853e293aff41" integrity sha512-CGm27X54kXp/5ehXejDTsZjqzK4uIhLGcrFzN3k/KjdwunQouEY92AARGrLSEuJ1hQx0bJsmnvr/hvQyWAfNJg== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.1.1" remark-lint-no-shortcut-reference-link@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.4.tgz#92af34b939c0341eacdb2fc2ede855f742dc1779" integrity sha512-FXdMJYqspZBhPlxYqfVgVluVXjxStg0RHJzqrk8G9wS8fCS62AE3reoaoiCahwoH1tfKcA+poktbKqDAmZo7Jg== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.1.1" remark-lint-no-table-indentation@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-1.0.4.tgz#6681a26198ee86c4fbbba382a42254125bc5807b" integrity sha512-H4VGHcg1k8sTIbwazFYLNbDqpPR+M0aHHKDf+93b/xyd27Dp0ODQrMnQbls1Cls5qOAQnwAQbx+75wcpFxP3OQ== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.4.0" remark-lint-no-tabs@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-no-tabs/-/remark-lint-no-tabs-1.0.3.tgz#df37102f7aeed1d1c1f02d1c1455f29e67e08a7a" integrity sha512-GxmG1LLxYoVjKnQ39On4mFEiVwpLfR3BPTXyaC9UCBUj9fnDQ7ANXceeCsPAyxamr0UM4r2tk/hB9mNT4rLskQ== dependencies: unified-lint-rule "^1.0.0" vfile-location "^2.0.1" remark-lint-no-undefined-references@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-1.1.1.tgz#b9fa2caec896df41a3c47169d9c6dd0cee3a2075" integrity sha512-b1eIjWFaCu6m16Ax2uG33o1v+eRYqDTQRUqU6UeQ76JXmDmVtVO75ZuyRpqqE7VTZRW8YLVurXfJPDXfIa5Wng== dependencies: collapse-white-space "^1.0.4" unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.4.0" remark-lint-no-unused-definitions@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-1.0.5.tgz#183a0de2e55295f52ff888f99f9830eae35eaddf" integrity sha512-Bo22e0RNzc1QMW317KTuStGFDG7uTDUQhm/TrW6Qzud0WXnNnqUyvts+e7wTYoj8VnwhhjyjyoA9lKA3uXMdAQ== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-visit "^1.4.0" remark-lint-ordered-list-marker-style@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.3.tgz#3fc6b9e254a641036e275269254365c42b7c62a1" integrity sha512-24TmW1eUa/2JlwprZg9jJ8LKLxNGKnlKiI5YOhN4taUp2yv8daqlV9vR54yfn/ZZQh6EQvbIX0jeVY9NYgQUtw== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-ordered-list-marker-value@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-1.0.3.tgz#417afe3849b9926e06f8a6f62445541c63f0e97f" integrity sha512-WQ9yLD8cI9DSk/CE+APKUT6ZeXp0/RzOnsYqzMxEa8n1QHSqRSF7hVEiisqNTG9+gV64OEE66e+m4c7RVSUADw== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-rule-style@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-rule-style/-/remark-lint-rule-style-1.0.3.tgz#859aef4d2e2180ecf9db56360497372b90a04aab" integrity sha512-SJe7IFORYRdo8JUhMSdcTktVAUVNVp36YYl1ZD9CfHqQHWlFD+3vWYzJXOZfog/i+CyWf7Yi0WVYmQes+167dA== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-strong-marker@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-strong-marker/-/remark-lint-strong-marker-1.0.3.tgz#028e05b046ef260e8d40b342900061f1d09c8131" integrity sha512-PFkH282dCwfRsVEw9IxbYbaZBY4UcTuT2SN+lA3R0cBeocWnOySVw8YEm4sv9JfV8BLcQA5gc4tj66/U3KCScw== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-table-cell-padding@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-1.0.4.tgz#be2b020a3985c414abb59cc5d88fda1993f8f2e8" integrity sha512-AQWWtV1yca1PN27QaFRJbBK6Ro/bopv1XnVKxj/iMebhOU2D2FBJ8rXmMZXVMC3G9OB2WSzGgqH3nP6QY12LoA== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.4.0" remark-lint-table-pipe-alignment@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-1.0.3.tgz#8c6d0c93e417706a4083dc7fa279c537d4ed886c" integrity sha512-5fhEMcKqNjK6S/y7cVG0+iVqhmhXFW+awIuN7vOBhmDbZ3HF9rCCy20XiHoaG6FzrPJ+zfkjK/QZAbq2Vf58HA== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-table-pipes@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-table-pipes/-/remark-lint-table-pipes-1.0.3.tgz#e34f91de4371f98c5e16701bd2302928468cbd8a" integrity sha512-K9NnGZp6i0m/CaOH7ZT4Ymt2seyiRPcBIlNMMGXBm6gpy34KJDDxYqsNUrh+j7dR+Zg4rYAQLnr3BiSHvj+rbQ== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint-unordered-list-marker-style@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-1.0.3.tgz#72f9ec8cd54950753593b3b727fd28e48fa197d5" integrity sha512-0nn/Yscy5ImO4fqByrk/Ua02UwGx8LRu+0kdCbkVz4IxPO5qxTEfyccUQZR71zTdMJp1d2OeqyD9XtMaO4X7Ww== dependencies: unified-lint-rule "^1.0.0" unist-util-generated "^1.1.0" unist-util-position "^3.0.0" unist-util-visit "^1.1.1" remark-lint@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/remark-lint/-/remark-lint-6.0.5.tgz#fbb864d56bf83d2e5d23ea7e346ca5e36710fda3" integrity sha512-o1I3ddm+KNsTxk60wWGI+p2yU1jB1gcm8jo2Sy6VhJ4ab2TrQIp1oQbp5xeLoFXYSh/NAqCpKjHkCM/BYpkFdQ== dependencies: remark-message-control "^4.0.0" remark-message-control@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/remark-message-control/-/remark-message-control-4.2.0.tgz#184c4a69ce6c4c707a5633fa35b0ce3dbf81f22c" integrity sha512-WXH2t5ljTyhsXlK1zPBLF3iPHbXl58R94phPMreS1xcHWBZJt6Oiu8RtNjy1poZFb3PqKnbYLJeR/CWcZ1bTFw== dependencies: mdast-comment-marker "^1.0.0" unified-message-control "^1.0.0" xtend "^4.0.1" remark-parse@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf" integrity sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA== dependencies: collapse-white-space "^1.0.2" is-alphabetical "^1.0.0" is-decimal "^1.0.0" is-whitespace-character "^1.0.0" is-word-character "^1.0.0" markdown-escapes "^1.0.0" parse-entities "^1.1.0" repeat-string "^1.5.4" state-toggle "^1.0.0" trim "0.0.1" trim-trailing-lines "^1.0.0" unherit "^1.0.4" unist-util-remove-position "^1.0.0" vfile-location "^2.0.0" xtend "^4.0.1" remark-preset-github@^0.0.16: version "0.0.16" resolved "https://registry.yarnpkg.com/remark-preset-github/-/remark-preset-github-0.0.16.tgz#e4244df34e2f019a1befbc8c6270417c78d3d36e" integrity sha512-W7Dmvhzj5WeRrju3jW1CtQRkz//10RyeiP78NEtTW9fC62+Ubv3+ZDFlBb2b7JZ/6v1GRN1PGeKCK6t/LjpQRw== dependencies: remark-comment-config "^5.1.0" remark-contributors "^4.0.1" remark-github "^8.0.0" remark-heading-gap "^3.1.1" remark-license niftylettuce/remark-license remark-lint-blockquote-indentation "^1.0.3" remark-lint-checkbox-character-style "^1.0.3" remark-lint-checkbox-content-indent "^1.0.3" remark-lint-code-block-style "^1.0.3" remark-lint-definition-case "^1.0.4" remark-lint-definition-spacing "^1.0.4" remark-lint-emphasis-marker "^1.0.3" remark-lint-fenced-code-flag "^1.0.3" remark-lint-fenced-code-marker "^1.0.3" remark-lint-file-extension "^1.0.3" remark-lint-final-definition "^1.0.3" remark-lint-first-heading-level "^1.1.4" remark-lint-heading-style "^1.0.3" remark-lint-list-item-indent "1.0.4" remark-lint-no-consecutive-blank-lines "^1.0.3" remark-lint-no-duplicate-definitions "^1.0.5" remark-lint-no-emphasis-as-heading "^1.0.3" remark-lint-no-file-name-articles "^1.0.3" remark-lint-no-file-name-consecutive-dashes "^1.0.3" remark-lint-no-file-name-irregular-characters "^1.0.3" remark-lint-no-file-name-mixed-case "^1.0.3" remark-lint-no-file-name-outer-dashes "^1.0.4" remark-lint-no-heading-content-indent "^1.0.3" remark-lint-no-heading-indent "^1.0.3" remark-lint-no-heading-punctuation "^1.0.3" remark-lint-no-missing-blank-lines "^1.0.3" remark-lint-no-multiple-toplevel-headings "^1.0.4" remark-lint-no-shell-dollars "^1.0.3" remark-lint-no-table-indentation "^1.0.4" remark-lint-no-tabs "^1.0.3" remark-lint-ordered-list-marker-value "^1.0.3" remark-lint-rule-style "^1.0.3" remark-lint-strong-marker "^1.0.3" remark-lint-table-cell-padding "^1.0.4" remark-lint-table-pipe-alignment "^1.0.3" remark-lint-table-pipes "^1.0.3" remark-lint-unordered-list-marker-style "^1.0.3" remark-preset-lint-recommended "^3.0.3" remark-retext "^3.1.3" remark-toc "^6.0.0" remark-validate-links "^9.0.1" retext-english "^3.0.3" retext-preset-github "^0.0.6" unified "^8.3.2" remark-preset-lint-recommended@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/remark-preset-lint-recommended/-/remark-preset-lint-recommended-3.0.3.tgz#1322af0e49801278057f8f275ed1b6ed60328b40" integrity sha512-5sQ34j1Irlsj6Tt4WWRylZ7UU+1jD5es/LfDZBZp/LXDwC4ldGqKpMmCCR6Z00x1jYM1phmS4M+eGqTdah0qkQ== dependencies: remark-lint "^6.0.0" remark-lint-final-newline "^1.0.0" remark-lint-hard-break-spaces "^1.0.0" remark-lint-list-item-bullet-indent "^1.0.0" remark-lint-list-item-indent "^1.0.0" remark-lint-no-auto-link-without-protocol "^1.0.0" remark-lint-no-blockquote-without-marker "^2.0.0" remark-lint-no-duplicate-definitions "^1.0.0" remark-lint-no-heading-content-indent "^1.0.0" remark-lint-no-inline-padding "^1.0.0" remark-lint-no-literal-urls "^1.0.0" remark-lint-no-shortcut-reference-image "^1.0.0" remark-lint-no-shortcut-reference-link "^1.0.0" remark-lint-no-undefined-references "^1.0.0" remark-lint-no-unused-definitions "^1.0.0" remark-lint-ordered-list-marker-style "^1.0.0" remark-retext@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-3.1.3.tgz#77173b1d9d13dab15ce5b38d996195fea522ee7f" integrity sha512-UujXAm28u4lnUvtOZQFYfRIhxX+auKI9PuA2QpQVTT7gYk1OgX6o0OUrSo1KOa6GNrFX+OODOtS5PWIHPxM7qw== dependencies: mdast-util-to-nlcst "^3.2.0" remark-stringify@^7.0.0: version "7.0.4" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-7.0.4.tgz#3de1e3f93853288d3407da1cd44f2212321dd548" integrity sha512-qck+8NeA1D0utk1ttKcWAoHRrJxERYQzkHDyn+pF5Z4whX1ug98uCNPPSeFgLSaNERRxnD6oxIug6DzZQth6Pg== dependencies: ccount "^1.0.0" is-alphanumeric "^1.0.0" is-decimal "^1.0.0" is-whitespace-character "^1.0.0" longest-streak "^2.0.1" markdown-escapes "^1.0.0" markdown-table "^1.1.0" mdast-util-compact "^1.0.0" parse-entities "^1.0.2" repeat-string "^1.5.4" state-toggle "^1.0.0" stringify-entities "^2.0.0" unherit "^1.0.4" xtend "^4.0.1" remark-toc@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/remark-toc/-/remark-toc-6.0.0.tgz#32210839ab74a8ac3696aa78a178338989c5a76f" integrity sha512-h3I79AOiza+/JzfeWPOfKE13ISVsgX7/huHvhYQG5Xe4Pe2U/CTXDSl0Dqr5O2hBub+gBS1kM1lEALk4jv7qBA== dependencies: mdast-util-toc "^4.0.0" remark-validate-links@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/remark-validate-links/-/remark-validate-links-9.0.1.tgz#9d0b667832f2ef325694ef0539d23c0ee3e423ba" integrity sha512-+ZW2xzqDEujM+oPkutHm5LiTkMXeE7ldzruwi1xYVYq5xOE+zbPf0UMpc14ek2yn10T9Vvc+xLF5njZILqyAFw== dependencies: github-slugger "^1.2.0" hosted-git-info "^2.5.0" mdast-util-to-string "^1.0.4" propose "0.0.5" to-vfile "^6.0.0" trough "^1.0.0" unist-util-visit "^1.0.0" xtend "^4.0.0" remark@^11.0.0: version "11.0.2" resolved "https://registry.yarnpkg.com/remark/-/remark-11.0.2.tgz#12b90ea100ac3362b1976fa87a6e4e0ab5968202" integrity sha512-bh+eJgn8wgmbHmIBOuwJFdTVRVpl3fcVP6HxmpPWO0ULGP9Qkh6INJh0N5Uy7GqlV7DQYGoqaKiEIpM5LLvJ8w== dependencies: remark-parse "^7.0.0" remark-stringify "^7.0.0" unified "^8.2.0" remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= request@2.11.4: version "2.11.4" resolved "https://registry.yarnpkg.com/request/-/request-2.11.4.tgz#6347d7d44e52dc588108cc1ce5cee975fc8926de" integrity sha1-Y0fX1E5S3FiBCMwc5c7pdfyJJt4= dependencies: form-data "~0.0.3" mime "~1.2.7" request@~2.46.0: version "2.46.0" resolved "https://registry.yarnpkg.com/request/-/request-2.46.0.tgz#359195d52eaf720bc69742579d04ad6d265a8274" integrity sha1-NZGV1S6vcgvGl0JXnQStbSZagnQ= dependencies: aws-sign2 "~0.5.0" bl "~0.9.0" caseless "~0.6.0" forever-agent "~0.5.0" form-data "~0.1.0" hawk "1.1.1" http-signature "~0.10.0" json-stringify-safe "~5.0.0" mime-types "~1.0.1" node-uuid "~1.4.0" oauth-sign "~0.4.0" qs "~1.2.0" stringstream "~0.0.4" tough-cookie ">=0.12.0" tunnel-agent "~0.4.0" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== requires-port@0.x.x: version "0.0.1" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-0.0.1.tgz#4b4414411d9df7c855995dd899a8c78a2951c16d" integrity sha1-S0QUQR2d98hVmV3YmajHiilRwW0= reserved-words@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@5.0.0, resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-global@1.0.0, resolve-global@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== dependencies: global-dirs "^0.1.1" resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@0.7.x: version "0.7.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.7.4.tgz#395a9ef9e873fbfe12bd14408bd91bb936003d69" integrity sha1-OVqe+ehz+/4SvRRAi9kbuTYAPWk= resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= resolve@^1.1.3, resolve@^1.1.4, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0: version "1.13.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== dependencies: path-parse "^1.0.6" responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: lowercase-keys "^1.0.0" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retext-contractions@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/retext-contractions/-/retext-contractions-3.0.0.tgz#01fa2d0864340cf79bf4c86637c87dd4f9eab767" integrity sha512-Wn95agseXHTsoXvhavuTcnwUEb9TbL7QtnYkHeFMh8L53jdQbbooLX68cbpKyaaPbxYiomrgJpu7eB3arcr2rw== dependencies: nlcst-is-literal "^1.0.0" nlcst-to-string "^2.0.0" unist-util-visit "^1.1.0" retext-diacritics@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/retext-diacritics/-/retext-diacritics-2.0.0.tgz#db4f6da81d42acae34fb149500421dec1f26af78" integrity sha512-wr3mqJ9whlIG/q6vP601qR+/C7AMgc7O60kebs9kvN/HtTX7CpvFsKF68+yw86drMOMVCBJP8JB1Qlnj8CkY5A== dependencies: match-casing "^1.0.0" nlcst-search "^1.0.0" nlcst-to-string "^2.0.0" quotation "^1.0.1" unist-util-position "^3.0.0" retext-english@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.4.tgz#f978828d51fbcee842bc3807a45b7f709822ea8d" integrity sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw== dependencies: parse-english "^4.0.0" unherit "^1.0.4" retext-indefinite-article@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/retext-indefinite-article/-/retext-indefinite-article-1.1.7.tgz#a9de7cca8c24a11cb8fcd5c68e54d8e38e5ab525" integrity sha512-pqvEfEHL8uoeonbEjk8+d/hmyA3ozIeNTl4t3uurMcBpoIqN3+nbuMCFQrfDy2wjaKZ40KsLmEi+Zjv7m1ejLQ== dependencies: format "^0.2.2" nlcst-to-string "^2.0.0" number-to-words "^1.2.3" unist-util-is "^3.0.0" unist-util-visit "^1.1.0" retext-preset-github@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/retext-preset-github/-/retext-preset-github-0.0.6.tgz#708f9d6d693d0e5913aa2b0354dd28f33a8bf092" integrity sha512-6YGaTBK7YJBYTrHOeorIqJUtm72/y1rWV0zKB8ba1Kb0gs57YigLaWjuKnRzULSmhP1i1uXUx2xcsEh6lwgNvw== dependencies: retext-contractions "^3.0.0" retext-diacritics "^2.0.0" retext-indefinite-article "^1.1.7" retext-quotes "^3.0.0" retext-redundant-acronyms "^2.0.0" retext-repeated-words "^2.0.0" retext-sentence-spacing "^3.0.0" retext-quotes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/retext-quotes/-/retext-quotes-3.0.0.tgz#47f772e886b9b513dc6f1b97c482e15b1446b84a" integrity sha512-2htggeOFsrorhXrQvb4BI1O/r7CGVQZx/TysAT7wlVMsRUTZooiIGkBcLrcySa4sbqjsVgg1RjMy8K5O+gCQlg== dependencies: nlcst-to-string "^2.0.0" unist-util-is "^3.0.0" unist-util-visit "^1.1.0" retext-redundant-acronyms@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/retext-redundant-acronyms/-/retext-redundant-acronyms-2.0.0.tgz#e4fb92a97b0db76dfa20192e0d3915470458e80c" integrity sha512-9E62yXkDKYItNZO+lT4Pp0rAP8e/H7ppjYP681L0fk74xyItoE6okl0BMNVOa0W4XidLoGX2uWdlwWpCUeqQiw== dependencies: nlcst-normalize "^2.0.0" nlcst-search "^1.0.0" nlcst-to-string "^2.0.0" pluralize "^8.0.0" quotation "^1.0.0" unist-util-find-after "^2.0.0" unist-util-position "^3.0.0" retext-repeated-words@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/retext-repeated-words/-/retext-repeated-words-2.0.0.tgz#93e8f5b81b76388910b1453a0d9c527460e95637" integrity sha512-CGqM88ViAKtSgdWGObTU974AdmfxyiyB19MvuQTBBW3crWYIS7p21m0sJH/pCnp11gVa0YOU+vqdNaSvRiLTFA== dependencies: nlcst-to-string "^2.0.0" unist-util-is "^3.0.0" unist-util-visit "^1.1.0" retext-sentence-spacing@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/retext-sentence-spacing/-/retext-sentence-spacing-3.0.0.tgz#bfdfc4fc5990f816cc79a6caa335046878208300" integrity sha512-UWltTXZNh6kBwJJc0js3nOmbqze3LqhJg68jaRErNIPZQHtZ5hMn7h7f8kVY5OrbEL9XiY88m5DRPbFz16eTkQ== dependencies: nlcst-to-string "^2.0.0" unist-util-is "^3.0.0" unist-util-visit "^1.1.0" reusify@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" rimraf@^2.5.2, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rimraf@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== dependencies: glob "^7.1.3" rimraf@~2.2.0, rimraf@~2.2.2: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: is-promise "^2.1.0" run-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== run-parallel@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== runnel@~0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/runnel/-/runnel-0.5.3.tgz#f9362b165a05fc6f5e46e458f77a1f7ecdc0daec" integrity sha1-+TYrFloF/G9eRuRY93offs3A2uw= rxjs@^6.3.3, rxjs@^6.4.0: version "6.5.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== dependencies: tslib "^1.9.0" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@5.2.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" safe-regex@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== dependencies: regexp-tree "~0.1.1" "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== scope-analyzer@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/scope-analyzer/-/scope-analyzer-2.0.5.tgz#72c9c6770c3e66984f84c7d3c7045998a1a7db8a" integrity sha512-+U5H0417mnTEstCD5VwOYO7V4vYuSqwqjFap40ythe67bhMFL5C3UgPwyBv7KDJsqUBIKafOD57xMlh1rN7eaw== dependencies: array-from "^2.1.1" es6-map "^0.1.5" es6-set "^0.1.5" es6-symbol "^3.1.1" estree-is-function "^1.0.0" get-assigned-identifiers "^1.1.0" semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= dependencies: semver "^5.0.3" "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== send@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/send/-/send-0.1.4.tgz#be70d8d1be01de61821af13780b50345a4f71abd" integrity sha1-vnDY0b4B3mGCGvE3gLUDRaT3Gr0= dependencies: debug "*" fresh "0.2.0" mime "~1.2.9" range-parser "0.0.4" send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: debug "2.6.9" depd "~1.1.2" destroy "~1.0.4" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" http-errors "~1.7.2" mime "1.6.0" ms "2.1.1" on-finished "~2.3.0" range-parser "~1.2.1" statuses "~1.5.0" sequence@2.x: version "2.2.1" resolved "https://registry.yarnpkg.com/sequence/-/sequence-2.2.1.tgz#7f5617895d44351c0a047e764467690490a16b03" integrity sha1-f1YXiV1ENRwKBH52RGdpBJChawM= serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" send "0.17.1" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" is-plain-object "^2.0.3" split-string "^3.0.1" setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" shallow-copy@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= shasum-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== dependencies: fast-safe-stringify "^2.0.7" shasum@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= dependencies: json-stable-stringify "~0.0.0" sha.js "~2.4.4" shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.4.1.tgz#ae18442b536a08c720239b079d2f228acbedee40" integrity sha1-rhhEK1NqCMcgI5sHnS8iisvt7kA= dependencies: array-filter "~0.0.0" array-map "~0.0.0" array-reduce "~0.0.0" jsonify "~0.0.0" shell-quote@^1.4.2, shell-quote@^1.4.3, shell-quote@^1.6.1: version "1.7.2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== shellsubstitute@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shellsubstitute/-/shellsubstitute-1.2.0.tgz#e4f702a50c518b0f6fe98451890d705af29b6b70" integrity sha1-5PcCpQxRiw9v6YRRiQ1wWvKba3A= should-equal@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== dependencies: should-type "^1.4.0" should-format@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" integrity sha1-m/yPdPo5IFxT04w01xcwPidxJPE= dependencies: should-type "^1.3.0" should-type-adaptors "^1.0.1" should-http@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/should-http/-/should-http-0.1.1.tgz#9b793843f4024885781eb6abacc4030e1e9f21f0" integrity sha1-m3k4Q/QCSIV4HrarrMQDDh6fIfA= dependencies: content-type "^1.0.2" should-type-adaptors@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== dependencies: should-type "^1.3.0" should-util "^1.0.0" should-type@^1.3.0, should-type@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" integrity sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM= should-util@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== should@^13.2.3: version "13.2.3" resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== dependencies: should-equal "^2.0.0" should-format "^3.0.3" should-type "^1.4.0" should-type-adaptors "^1.0.1" should-util "^1.0.0" sigmund@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= simple-concat@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== dependencies: ansi-styles "^3.2.0" astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" sliced@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" snapdragon-util "^3.0.1" snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" define-property "^0.2.5" extend-shallow "^2.0.1" map-cache "^0.2.2" source-map "^0.5.6" source-map-resolve "^0.5.0" use "^3.1.0" sntp@0.2.x: version "0.2.4" resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" integrity sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA= dependencies: hoek "0.9.x" sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= dependencies: is-plain-obj "^1.0.0" source-map-cjs@~0.1.31: version "0.1.32" resolved "https://registry.yarnpkg.com/source-map-cjs/-/source-map-cjs-0.1.32.tgz#b113f00065b484f4d3a1123ef084046a56228ce7" integrity sha1-sRPwAGW0hPTToRI+8IQEalYijOc= source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== dependencies: atob "^2.1.1" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" source-map-support@~0.5.10, source-map-support@~0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= source-map@^0.1.34, source-map@~0.1.33, source-map@~0.1.7: version "0.1.43" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= dependencies: amdefine ">=0.0.4" source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= dependencies: amdefine ">=0.0.4" source-map@~0.4.0, source-map@~0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" integrity sha1-66T12pwNyZneaAMti092FzZSA2s= dependencies: amdefine ">=0.0.4" sourcemap-codec@^1.4.1: version "1.4.6" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== spawn-wrap@^1.4.2: version "1.4.3" resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.3.tgz#81b7670e170cca247d80bf5faf0cfb713bdcf848" integrity sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw== dependencies: foreground-child "^1.5.6" mkdirp "^0.5.0" os-homedir "^1.0.1" rimraf "^2.6.2" signal-exit "^3.0.2" which "^1.3.0" spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== spdx-expression-parse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: version "3.0.5" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== spdx-license-list@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-license-list/-/spdx-license-list-3.0.1.tgz#163d72123e00f4f8bd6e18125696b009f1248ff5" integrity sha1-Fj1yEj4A9Pi9bhgSVpawCfEkj/U= split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" split2@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== dependencies: through2 "^2.0.2" split@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/split/-/split-0.1.2.tgz#f0710744c453d551fc7143ead983da6014e336cc" integrity sha1-8HEHRMRT1VH8cUPq2YPaYBTjNsw= dependencies: through "1" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= stack-generator@^1.0.7: version "1.1.0" resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-1.1.0.tgz#36f6a920751a6c10f499a13c32cbb5f51a0b8b25" integrity sha1-NvapIHUabBD0maE8Msu19RoLiyU= dependencies: stackframe "^1.0.2" stack-mapper@0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/stack-mapper/-/stack-mapper-0.2.2.tgz#789029054937b7d47c1b5b67612cbb1e7cfe7071" integrity sha1-eJApBUk3t9R8G1tnYSy7Hnz+cHE= dependencies: array-map "0.0.0" foreach-shim "~0.1.1" isarray "0.0.1" source-map-cjs "~0.1.31" stackframe@^0.3.1, stackframe@~0.3: version "0.3.1" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" integrity sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ= stackframe@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.1.0.tgz#e3fc2eb912259479c9822f7d1f1ff365bd5cbc83" integrity sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg== stacktrace-gps@^2.4.3: version "2.4.4" resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-2.4.4.tgz#69c827e9d6d6f41cf438d7f195e2e3cbfcf28c44" integrity sha1-acgn6dbW9Bz0ONfxleLjy/zyjEQ= dependencies: source-map "0.5.6" stackframe "~0.3" stacktrace-js@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-1.3.1.tgz#67cab2589af5c417b962f7369940277bb3b6a18b" integrity sha1-Z8qyWJr1xBe5Yvc2mUAne7O2oYs= dependencies: error-stack-parser "^1.3.6" stack-generator "^1.0.7" stacktrace-gps "^2.4.3" state-toggle@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc" integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw== static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= stream-browserify@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: inherits "~2.0.1" readable-stream "^2.0.2" stream-combiner2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= dependencies: duplexer2 "~0.1.0" readable-stream "^2.0.2" stream-combiner@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858" integrity sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg= dependencies: duplexer "~0.1.1" through "~2.3.4" stream-counter@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" integrity sha1-3tJmVWMZyLDiIoErnPOyb6fZR94= dependencies: readable-stream "~1.1.8" stream-http@^2.0.0: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" readable-stream "^2.3.6" to-arraybuffer "^1.0.0" xtend "^4.0.0" stream-http@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.0.tgz#22fb33fe9b4056b4eccf58bd8f400c4b993ffe57" integrity sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" readable-stream "^3.0.6" xtend "^4.0.0" stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= stream-splicer@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== dependencies: inherits "^2.0.1" readable-stream "^2.0.2" streamsearch@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= string-argv@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: emoji-regex "^7.0.1" is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" string-width@^4.0.0, string-width@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" string.prototype.trimleft@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== dependencies: define-properties "^1.1.3" function-bind "^1.1.1" string.prototype.trimright@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== dependencies: define-properties "^1.1.3" function-bind "^1.1.1" string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~0.10.0, string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" stringify-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-2.0.0.tgz#fa7ca6614b355fb6c28448140a20c4ede7462827" integrity sha512-fqqhZzXyAM6pGD9lky/GOPq6V4X0SeTAFBl0iXb/BzOegl40gpf/bV3QQP7zULNYvjr6+Dx8SCaDULjVoOru0A== dependencies: character-entities-html4 "^1.0.0" character-entities-legacy "^1.0.0" is-alphanumerical "^1.0.0" is-decimal "^1.0.2" is-hexadecimal "^1.0.0" stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== dependencies: get-own-enumerable-property-symbols "^3.0.0" is-obj "^1.0.1" is-regexp "^1.0.0" stringstream@~0.0.4: version "0.0.6" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: ansi-regex "^5.0.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= strip-json-comments@0.1.x: version "0.1.3" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-0.1.3.tgz#164c64e370a8a3cc00c9e01b539e569823f0ee54" integrity sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ= strip-json-comments@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= subarg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= dependencies: minimist "^1.1.0" superagent@0.15.7: version "0.15.7" resolved "https://registry.yarnpkg.com/superagent/-/superagent-0.15.7.tgz#095c70b8afffbc072f1458f39684d4854d6333a3" integrity sha1-CVxwuK//vAcvFFjzloTUhU1jM6M= dependencies: cookiejar "1.3.0" debug "~0.7.2" emitter-component "1.0.0" formidable "1.0.14" methods "0.0.1" mime "1.2.5" qs "0.6.5" reduce-component "1.0.1" supports-color@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU= dependencies: has-flag "^1.0.0" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^3.1.0: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= dependencies: has-flag "^1.0.0" supports-color@^5.0.0, supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^6.0.0, supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" supports-hyperlinks@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== dependencies: has-flag "^2.0.0" supports-color "^5.0.0" symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== syntax-error@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== dependencies: acorn-node "^1.2.0" table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== dependencies: ajv "^6.10.2" lodash "^4.17.14" slice-ansi "^2.1.0" string-width "^3.0.0" tap-finished@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tap-finished/-/tap-finished-0.0.1.tgz#08b5b543fdc04830290c6c561279552e71c4bd67" integrity sha1-CLW1Q/3ASDApDGxWEnlVLnHEvWc= dependencies: tap-parser "~0.2.0" through "~2.3.4" tap-parser@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-0.7.0.tgz#728a61d64680a5b48d5dbd9dbd0a4d48f5c35bcb" integrity sha1-coph1kaApbSNXb2dvQpNSPXDW8s= dependencies: inherits "~2.0.1" minimist "^0.2.0" readable-stream "~1.1.11" tap-parser@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-0.2.1.tgz#8e1e823f2114ee21d032e2f31e4fb642a296f50b" integrity sha1-jh6CPyEU7iHQMuLzHk+2QqKW9Qs= dependencies: split "~0.1.2" tar-stream@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.0.2.tgz#fd19b4a17900fa704f6a133e3045aead0562ab95" integrity sha1-/Rm0oXkA+nBPahM+MEWurQViq5U= dependencies: bl "^0.9.0" end-of-stream "^1.0.0" readable-stream "^1.0.27-1" xtend "^4.0.0" tar-stream@~1.1.0: version "1.1.5" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.1.5.tgz#be9218c130c20029e107b0f967fb23de0579d13c" integrity sha1-vpIYwTDCACnhB7D5Z/sj3gV50Tw= dependencies: bl "^0.9.0" end-of-stream "^1.0.0" readable-stream "~1.0.33" xtend "^4.0.0" tar@^4: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" minipass "^2.8.6" minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" yallist "^3.0.3" teeny-request@^3.11.3: version "3.11.3" resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-3.11.3.tgz#335c629f7645e5d6599362df2f3230c4cbc23a55" integrity sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw== dependencies: https-proxy-agent "^2.2.1" node-fetch "^2.2.0" uuid "^3.3.2" term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= dependencies: execa "^0.7.0" terser@3.16.1: version "3.16.1" resolved "https://registry.yarnpkg.com/terser/-/terser-3.16.1.tgz#5b0dd4fa1ffd0b0b43c2493b2c364fd179160493" integrity sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow== dependencies: commander "~2.17.1" source-map "~0.6.1" source-map-support "~0.5.9" terser@^3.7.5: version "3.17.0" resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== dependencies: commander "^2.19.0" source-map "~0.6.1" source-map-support "~0.5.10" test-exclude@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== dependencies: glob "^7.1.3" minimatch "^3.0.4" read-pkg-up "^4.0.0" require-main-filename "^2.0.0" text-extensions@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= the-argv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/the-argv/-/the-argv-1.0.0.tgz#0084705005730dd84db755253c931ae398db9522" integrity sha1-AIRwUAVzDdhNt1UlPJMa45jblSI= through2@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/through2/-/through2-1.1.1.tgz#0847cbc4449f3405574dbdccd9bb841b83ac3545" integrity sha1-CEfLxESfNAVXTb3M2buEG4OsNUU= dependencies: readable-stream ">=1.1.13-1 <1.2.0-0" xtend ">=4.0.0 <4.1.0-0" through2@^2.0.0, through2@^2.0.2, through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" through2@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== dependencies: readable-stream "2 || 3" through@1: version "1.1.2" resolved "https://registry.yarnpkg.com/through/-/through-1.1.2.tgz#344a5425a3773314ca7e0eb6512fbafaf76c0bfe" integrity sha1-NEpUJaN3MxTKfg62US+6+vdsC/4= through@2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/through/-/through-2.3.4.tgz#495e40e8d8a8eaebc7c275ea88c2b8fc14c56455" integrity sha1-SV5A6Nio6uvHwnXqiMK4/BTFZFU= "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.7, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= timers-browserify@^1.0.1: version "1.4.2" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= dependencies: process "~0.11.0" tinyify@^2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/tinyify/-/tinyify-2.5.2.tgz#355824496d06c49833d4c4ab566509b7b794a25c" integrity sha512-vFQ3nClAXbIw1nlJ9G9GNcS8CCS9Fb73MIj9JrsIvCZoQ0axfB7Hp3BcHsSnjPmazsZmt7GC6tPuMbvm+KHSYw== dependencies: acorn-node "^1.8.2" browser-pack-flat "^3.0.9" bundle-collapser "^1.3.0" common-shakeify "^0.6.0" dash-ast "^1.0.0" minify-stream "^1.2.1" multisplice "^1.0.0" through2 "^3.0.1" uglifyify "^5.0.0" unassertify "^2.1.1" tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" regex-not "^1.0.2" safe-regex "^1.1.0" to-vfile@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/to-vfile/-/to-vfile-6.0.0.tgz#96c4aa0ee09c51dd4e8fd0b9c11da040d7dba9ea" integrity sha512-i9fwXXSsHLu7mzgixc1WjgnqSe6pGpjnzCYoFmrASvEueLfyKf09QAe+XQYu8OAJ62aFqHpe2EKXojeRVvEzqA== dependencies: is-buffer "^2.0.0" vfile "^4.0.0" toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== tough-cookie@>=0.12.0: version "3.0.1" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== dependencies: ip-regex "^2.1.0" psl "^1.1.28" punycode "^2.1.1" transform-ast@^2.4.2, transform-ast@^2.4.3: version "2.4.4" resolved "https://registry.yarnpkg.com/transform-ast/-/transform-ast-2.4.4.tgz#bebf494e2e73f024746f76348bc86a5992851d00" integrity sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ== dependencies: acorn-node "^1.3.0" convert-source-map "^1.5.1" dash-ast "^1.0.0" is-buffer "^2.0.0" magic-string "^0.23.2" merge-source-map "1.0.4" nanobench "^2.1.1" trim-newlines@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= trim-trailing-lines@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a" integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q== trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= trough@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e" integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q== tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tty-browserify@0.0.1, tty-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== tunnel-agent@~0.4.0: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" type-fest@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== type-fest@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18, type-is@~1.6.2: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" mime-types "~2.1.24" type@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= uglify-js@^3.1.4, uglify-js@^3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.1.tgz#35c7de17971a4aa7689cd2eae0a5b39bb838c0c5" integrity sha512-pnOF7jY82wdIhATVn87uUY/FHU+MDUdPLkmGFvGoclQmeu229eTkbG5gjGGBi3R7UuYYSEeYXY/TTY5j2aym2g== dependencies: commander "~2.20.3" source-map "~0.6.1" uglify-js@~2.3: version "2.3.6" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" integrity sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo= dependencies: async "~0.2.6" optimist "~0.3.5" source-map "~0.1.7" uglifyify@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/uglifyify/-/uglifyify-5.0.2.tgz#7d0269885e09faa963208a9ec6721afcaf45fc50" integrity sha512-NcSk6pgoC+IgwZZ2tVLVHq+VNKSvLPlLkF5oUiHPVOJI0s/OlSVYEGXG9PCAH0hcyFZLyvt4KBdPAQBRlVDn1Q== dependencies: convert-source-map "~1.1.0" minimatch "^3.0.2" terser "^3.7.5" through "~2.3.4" xtend "^4.0.1" uid-safe@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== dependencies: random-bytes "~1.0.0" uid2@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" integrity sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I= umd@^3.0.0, umd@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== unassert@^1.3.1: version "1.6.0" resolved "https://registry.yarnpkg.com/unassert/-/unassert-1.6.0.tgz#ceb6d39ce47c6d2bfa9cb3cab407352cbfb60a19" integrity sha512-GoMtWTwGSxSFuRD0NKmbjlx3VJkgvSogzDzMPpJXYmBZv6MIWButsyMqEYhMx3NI4osXACcZA9mXiBteXyJtRw== dependencies: acorn "^7.0.0" call-matcher "^2.0.0" deep-equal "^1.0.0" espurify "^2.0.1" estraverse "^4.1.0" esutils "^2.0.2" object-assign "^4.1.0" unassertify@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/unassertify/-/unassertify-2.1.1.tgz#23772d76c136fb3d5df7dad4911c737d952357d3" integrity sha512-YIAaIlc6/KC9Oib8cVZLlpDDhK1UTEuaDyx9BwD97xqxDZC0cJOqwFcs/Y6K3m73B5VzHsRTBLXNO0dxS/GkTw== dependencies: acorn "^5.1.0" convert-source-map "^1.1.1" escodegen "^1.6.1" multi-stage-sourcemap "^0.2.1" through "^2.3.7" unassert "^1.3.1" undeclared-identifiers@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== dependencies: acorn-node "^1.3.0" dash-ast "^1.0.0" get-assigned-identifiers "^1.2.0" simple-concat "^1.0.0" xtend "^4.0.1" underscore.string@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d" integrity sha1-ccCL9rQosRM/N+ePo6Icgvcymw0= unherit@^1.0.4: version "1.1.2" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449" integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w== dependencies: inherits "^2.0.1" xtend "^4.0.1" unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== dependencies: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" unicode-match-property-value-ecmascript@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== unicode-property-aliases-ecmascript@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== unified-args@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-7.1.0.tgz#cd87a0ee54aa88d2308b5e0616dc1d289f1c351d" integrity sha512-soi9Rn7l5c1g0RfElSCHMwaxeiclSI0EsS3uZmMPUOfwMeeeZjLpNmHAowV9iSlQh59iiZhSMyQu9lB8WnIz5g== dependencies: camelcase "^5.0.0" chalk "^2.0.0" chokidar "^3.0.0" fault "^1.0.2" json5 "^2.0.0" minimist "^1.2.0" text-table "^0.2.0" unified-engine "^7.0.0" unified-engine@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-7.0.0.tgz#37df3a0369d94435fa5a233d8cb40de23f89e476" integrity sha512-zH/MvcISpWg3JZtCoY/GYBw1WnVHkhnPoMBWpmuvAifCPSS9mzT9EbtimesJp6t2nnr/ojI0mg3TmkO1CjIwVA== dependencies: concat-stream "^2.0.0" debug "^4.0.0" fault "^1.0.0" figures "^3.0.0" fn-name "^2.0.1" glob "^7.0.3" ignore "^5.0.0" is-empty "^1.0.0" is-hidden "^1.0.1" is-object "^1.0.1" js-yaml "^3.6.1" load-plugin "^2.0.0" parse-json "^4.0.0" to-vfile "^6.0.0" trough "^1.0.0" unist-util-inspect "^4.1.2" vfile-reporter "^6.0.0" vfile-statistics "^1.1.0" x-is-string "^0.1.0" xtend "^4.0.1" unified-lint-rule@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-1.0.4.tgz#be432d316db7ad801166041727b023ba18963e24" integrity sha512-q9wY6S+d38xRAuWQVOMjBQYi7zGyKkY23ciNafB8JFVmDroyKjtytXHCg94JnhBCXrNqpfojo3+8D+gmF4zxJQ== dependencies: wrapped "^1.0.1" unified-message-control@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/unified-message-control/-/unified-message-control-1.0.4.tgz#a5e02c07112f78c6687b83a10392c2fba86dc09b" integrity sha512-e1dEtN4Z/TvLn/qHm+xeZpzqhJTtfZusFErk336kkZVpqrJYiV9ptxq+SbRPFMlN0OkjDYHmVJ929KYjsMTo3g== dependencies: trim "0.0.1" unist-util-visit "^1.0.0" vfile-location "^2.0.0" unified@^8.2.0, unified@^8.3.2: version "8.4.2" resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== dependencies: bail "^1.0.0" extend "^3.0.0" is-plain-obj "^2.0.0" trough "^1.0.0" vfile "^4.0.0" union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" is-extendable "^0.1.1" set-value "^2.0.1" unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= dependencies: crypto-random-string "^1.0.0" unist-builder@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.4.tgz#e1808aed30bd72adc3607f25afecebef4dd59e17" integrity sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg== dependencies: object-assign "^4.1.0" unist-util-find-after@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-2.0.4.tgz#3fcccf0df3a2e7291fa119224c0f22158357cc10" integrity sha512-zo0ShIr+E/aU9xSK7JC9Kb+WP9seTFCuqVYdo5+HJSjN009XMfhiA1FIExEKzdDP1UsgvKGleGlB/pSdTSqZww== dependencies: unist-util-is "^3.0.0" unist-util-generated@^1.1.0: version "1.1.5" resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42" integrity sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw== unist-util-inspect@^4.1.2: version "4.1.4" resolved "https://registry.yarnpkg.com/unist-util-inspect/-/unist-util-inspect-4.1.4.tgz#fefc4794445d0f79bffea7a2421c6f556e73a37c" integrity sha512-7xxyvKiZ1SC9vL5qrMqKub1T31gRHfau4242F69CcaOrXt//5PmRVOmDZ36UAEgiT+tZWzmQmbNZn+mVtnR9HQ== dependencies: is-empty "^1.0.0" unist-util-is@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== unist-util-modify-children@^1.0.0: version "1.1.5" resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.5.tgz#3cac9a5aea60b33395226eac4e37f15e0f04a7af" integrity sha512-XeL5qqyoS3TEueCKEzHusWXE9JBDJPE4rl6LmcLOwlzv0RIZrcMNqKx02GSK3Ms4v45ldu+ltPxG42FBMVdPZw== dependencies: array-iterate "^1.0.0" unist-util-position@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.0.4.tgz#5872be7aec38629b971fdb758051f78817b0040a" integrity sha512-tWvIbV8goayTjobxDIr4zVTyG+Q7ragMSMeKC3xnPl9xzIc0+she8mxXLM3JVNDDsfARPbCd3XdzkyLdo7fF3g== unist-util-remove-position@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== dependencies: unist-util-visit "^1.1.0" unist-util-stringify-position@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz#5a3866e7138d55974b640ec69a94bc19e0f3fa12" integrity sha512-nK5n8OGhZ7ZgUwoUbL8uiVRwAbZyzBsB/Ddrlbu6jwwubFza4oe15KlyEaLNMXQW1svOQq4xesUeqA85YrIUQA== dependencies: "@types/unist" "^2.0.2" unist-util-visit-children@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.3.tgz#92ba5807e3f54637be5de950263f9468942e7503" integrity sha512-/GQ8KNRrG+qD30H76FZNc6Ok+8XTu8lxJByN5LnQ4eQfqxda2gP0CPsCX63BRB26ZRMNf6i1c+jlvNlqysEoFg== unist-util-visit-parents@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== dependencies: unist-util-is "^3.0.0" unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.1.1, unist-util-visit@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== dependencies: unist-util-visit-parents "^2.0.0" unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" untildify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0" integrity sha1-F+soB5h/dpUunASF/DEdBqgmouA= dependencies: os-homedir "^1.0.0" upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== update-notifier@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-3.0.1.tgz#78ecb68b915e2fd1be9f767f6e298ce87b736250" integrity sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ== dependencies: boxen "^3.0.0" chalk "^2.0.1" configstore "^4.0.0" has-yarn "^2.1.0" import-lazy "^2.1.0" is-ci "^2.0.0" is-installed-globally "^0.1.0" is-npm "^3.0.0" is-yarn-global "^0.3.0" latest-version "^5.0.0" semver-diff "^2.0.0" xdg-basedir "^3.0.0" uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: prepend-http "^2.0.0" url@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" urlgrey@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" integrity sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8= use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== dependencies: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: inherits "2.0.1" util@~0.10.1: version "0.10.4" resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== dependencies: inherits "2.0.3" utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== v8-compile-cache@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" vargs@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff" integrity sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8= vary@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" integrity sha1-meSYFWaihhGN+yuBc1ffeZM3bRA= vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= vfile-location@^2.0.0, vfile-location@^2.0.1: version "2.0.6" resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== vfile-message@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.2.tgz#75ba05090ec758fa8420f2c11ce049bcddd8cf3e" integrity sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA== dependencies: "@types/unist" "^2.0.0" unist-util-stringify-position "^2.0.0" vfile-reporter@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-6.0.0.tgz#753119f51dec9289b7508b457afc0cddf5e07f2e" integrity sha512-8Is0XxFxWJUhPJdOg3CyZTqd3ICCWg6r304PuBl818ZG91h4FMS3Q+lrOPS+cs5/DZK3H0+AkJdH0J8JEwKtDA== dependencies: repeat-string "^1.5.0" string-width "^4.0.0" supports-color "^6.0.0" unist-util-stringify-position "^2.0.0" vfile-sort "^2.1.2" vfile-statistics "^1.1.0" vfile-sort@^2.1.2: version "2.2.1" resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-2.2.1.tgz#74e714f9175618cdae96bcaedf1a3dc711d87567" integrity sha512-5dt7xEhC44h0uRQKhbM2JAe0z/naHphIZlMOygtMBM9Nn0pZdaX5fshhwWit9wvsuP8t/wp43nTDRRErO1WK8g== vfile-statistics@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.3.tgz#e9c87071997fbcb4243764d2c3805e0bb0820c60" integrity sha512-CstaK/ebTz1W3Qp41Bt9Lj/2DmumFsCwC2sKahDNSPh0mPh7/UyMLCoU8ZBX34CRU0d61B4W41yIFsV0NKMZeA== vfile@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.0.2.tgz#71af004d4a710b0e6be99c894655bc56126d5d56" integrity sha512-yhoTU5cDMSsaeaMfJ5g0bUKYkYmZhAh9fn9TZicxqn+Cw4Z439il2v3oT9S0yjlpqlI74aFOQCt3nOV+pxzlkw== dependencies: "@types/unist" "^2.0.0" is-buffer "^2.0.0" replace-ext "1.0.0" unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" vm-browserify@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== vm-browserify@~0.0.1: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= dependencies: indexof "0.0.1" walk@2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/walk/-/walk-2.2.1.tgz#5ada1f8e49e47d4b7445d8be7a2e1e631ab43016" integrity sha1-WtofjknkfUt0Rdi+ei4eYxq0MBY= dependencies: forEachAsync "~2.2" watchify@3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.7.0.tgz#ee2f2c5c8c37312303f998b818b2b3450eefe648" integrity sha1-7i8sXIw3MSMD+Zi4GLKzRQ7v5kg= dependencies: anymatch "^1.3.0" browserify "^13.0.0" chokidar "^1.0.0" defined "^1.0.0" outpipe "^1.1.0" through2 "^2.0.0" xtend "^4.0.0" wd@0.3.11: version "0.3.11" resolved "https://registry.yarnpkg.com/wd/-/wd-0.3.11.tgz#522716c79a7a10e781acbb2c6cafe588f701fcc0" integrity sha1-UicWx5p6EOeBrLssbK/liPcB/MA= dependencies: archiver "~0.12.0" async "~0.9.0" lodash "~2.4.1" q "~1.0.1" request "~2.46.0" underscore.string "~2.3.3" vargs "~0.1.0" which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" integrity sha1-RgwdoPgQED0DIam2M6+eV15kSG8= which@^1.1.1, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: string-width "^1.0.2 || 2" widest-line@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== dependencies: string-width "^2.1.1" word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@0.0.x, wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= wrap-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: ansi-styles "^3.2.0" string-width "^3.0.0" strip-ansi "^5.0.0" wrap-comment@^1.0.0, wrap-comment@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wrap-comment/-/wrap-comment-1.0.1.tgz#941bb1400b9b590bc007599e79cacc0bb3ea62f3" integrity sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ== wrapped@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wrapped/-/wrapped-1.0.1.tgz#c783d9d807b273e9b01e851680a938c87c907242" integrity sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI= dependencies: co "3.1.0" sliced "^1.0.1" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= wrench@~1.5.1: version "1.5.9" resolved "https://registry.yarnpkg.com/wrench/-/wrench-1.5.9.tgz#411691c63a9b2531b1700267279bdeca23b2142a" integrity sha1-QRaRxjqbJTGxcAJnJ5veyiOyFCo= write-file-atomic@^2.0.0, write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" signal-exit "^3.0.2" write-json-file@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= dependencies: detect-indent "^5.0.0" graceful-fs "^4.1.2" make-dir "^1.0.0" pify "^3.0.0" sort-keys "^2.0.0" write-file-atomic "^2.0.0" write-pkg@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== dependencies: sort-keys "^2.0.0" write-json-file "^2.2.0" write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: mkdirp "^0.5.1" x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= xml2js@~0.4.0: version "0.4.22" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw== dependencies: sax ">=0.6.0" util.promisify "~1.0.0" xmlbuilder "~11.0.0" xmlbuilder@~11.0.0: version "11.0.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xo-init@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/xo-init/-/xo-init-0.7.0.tgz#634b4789e366b4f87f747ef0cee1a99ce273aa15" integrity sha512-mrrCKMu52vz0u2tiOl8DoG709pBtnSp58bb4/j58a4jeXjrb1gV7dxfOBjOlXitYtfW2QnlxxxfAojoFcpynDg== dependencies: arrify "^1.0.0" execa "^0.9.0" has-yarn "^1.0.0" minimist "^1.1.3" path-exists "^3.0.0" read-pkg-up "^3.0.0" the-argv "^1.0.0" write-pkg "^3.1.0" xo@0.25.3: version "0.25.3" resolved "https://registry.yarnpkg.com/xo/-/xo-0.25.3.tgz#feb624c35943f3575ad4668cd0b7b74a1d4884d2" integrity sha512-125on+kPp6oi+EfoAajJ58cGLxIurZqWrehhdqoApWXpano9GL5D0ElcSlbG7UeYAfmNSwKJGTxHoLsHLhrZqg== dependencies: arrify "^2.0.1" debug "^4.1.0" eslint "^6.4.0" eslint-config-prettier "^6.3.0" eslint-config-xo "^0.27.1" eslint-formatter-pretty "^2.0.0" eslint-plugin-ava "^9.0.0" eslint-plugin-eslint-comments "^3.0.1" eslint-plugin-import "^2.18.2" eslint-plugin-no-use-extend-native "^0.4.0" eslint-plugin-node "^10.0.0" eslint-plugin-prettier "^3.1.1" eslint-plugin-promise "^4.0.0" eslint-plugin-unicorn "^12.0.0" find-cache-dir "^3.0.0" get-stdin "^7.0.0" globby "^9.0.0" has-flag "^4.0.0" lodash.isequal "^4.5.0" lodash.mergewith "^4.6.2" meow "^5.0.0" multimatch "^4.0.0" open-editor "^2.0.1" path-exists "^4.0.0" pkg-conf "^3.1.0" prettier "^1.15.2" resolve-cwd "^3.0.0" resolve-from "^5.0.0" semver "^6.3.0" slash "^3.0.0" update-notifier "^3.0.1" xo-init "^0.7.0" xtend@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= dependencies: object-keys "~0.4.0" "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^3.0.0, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yamljs@0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.2.8.tgz#ef23fb006e62f6ae07b406aa2a949561f336ea5c" integrity sha1-7yP7AG5i9q4HtAaqKpSVYfM26lw= dependencies: argparse "^1.0.7" glob "^7.0.5" yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== dependencies: camelcase "^4.1.0" yargs-parser@^13.0.0, yargs-parser@^13.1.1: version "13.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" yargs@^13.2.2: version "13.3.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== dependencies: cliui "^5.0.0" find-up "^3.0.0" get-caller-file "^2.0.1" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^13.1.1" zip-stream@~0.2.0: version "0.2.3" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.2.3.tgz#aef095376cfe138959a81341981d26338b46d8d3" integrity sha1-rvCVN2z+E4lZqBNBmB0mM4tG2NM= dependencies: debug "~0.7.4" lodash.defaults "~2.4.1" readable-stream "~1.0.24" zip-stream@~0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.4.1.tgz#4ea795a8ce19e9fab49a31d1d0877214159f03a3" integrity sha1-TqeVqM4Z6fq0mjHR0IdyFBWfA6M= dependencies: compress-commons "~0.1.0" lodash "~2.4.1" readable-stream "~1.0.26" zip-stream@~0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-0.5.2.tgz#32dcbc506d0dab4d21372625bd7ebaac3c2fff56" integrity sha1-Mty8UG0Nq00hNyYlvX66rDwv/1Y= dependencies: compress-commons "~0.2.0" lodash "~3.2.0" readable-stream "~1.0.26" zuul-localtunnel@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/zuul-localtunnel/-/zuul-localtunnel-1.1.0.tgz#70ad27fb0a6af968a2151fc5d5e895daa1aed15d" integrity sha1-cK0n+wpq+WiiFR/F1eiV2qGu0V0= dependencies: localtunnel "1.5.0" zuul@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/zuul/-/zuul-3.12.0.tgz#2ba48310588e173d74e61a9e51cf01e7cfe53e4d" integrity sha512-ABOM+J+get8DsLXmFmCUjJOwxZILsedXZ0+bJnG9ajmDhVmtLqaUPJ9NEardYzSHxq6Vxi5qXf4mluA7PePq/A== dependencies: JSON2 "0.1.0" batch "0.5.0" browserify "13.0.0" browserify-istanbul "0.1.5" char-split "0.2.0" colors "0.6.2" commander "2.1.0" compression "1.5.0" convert-source-map "1.0.0" debug "2.1.0" express "3.4.8" express-state "1.0.3" find-nearest-file "1.0.0" firefox-profile "0.2.7" globs-to-files "1.0.0" hbs "2.4.0" highlight.js "7.5.0" http-proxy "1.11.2" humanize-duration "2.4.0" istanbul-middleware "0.2.2" load-script "0.0.5" lodash "3.10.1" opener "1.4.0" osenv "0.0.3" shallow-copy "0.0.1" shell-quote "1.4.1" stack-mapper "0.2.2" stacktrace-js "1.3.1" superagent "0.15.7" tap-finished "0.0.1" tap-parser "0.7.0" watchify "3.7.0" wd "0.3.11" xtend "2.1.2" yamljs "0.2.8" zuul-localtunnel "1.1.0"