superagent 3.6.3 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.travis.yml CHANGED
@@ -12,5 +12,5 @@ env:
12
12
 
13
13
  matrix:
14
14
  include:
15
- - node_js: "6"
15
+ - node_js: "8"
16
16
  env: BROWSER=1
package/History.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 3.7.0 (2017-10-17)
2
+
3
+ * Limit maximum response size. Prevents zip bombs (Kornel)
4
+ * Catch and pass along errors in `.ok()` callback (Jeremy Ruppel)
5
+ * Fixed parsing of XHR headers without a newline (nsf)
6
+
1
7
  # 3.6.2 (2017-10-02)
2
8
 
3
9
  * Upgrade MIME type dependency to a newer, secure version
package/Makefile CHANGED
@@ -20,7 +20,7 @@ test-cov: lib-cov
20
20
  SUPERAGENT_COV=1 $(MAKE) test REPORTER=html-cov > coverage.html
21
21
 
22
22
  test-browser:
23
- SAUCE_APPIUM_VERSION=1.6 ./node_modules/.bin/zuul -- $(BROWSERTESTS)
23
+ SAUCE_APPIUM_VERSION=1.7 ./node_modules/.bin/zuul -- $(BROWSERTESTS)
24
24
 
25
25
  test-browser-local:
26
26
  ./node_modules/.bin/zuul --no-coverage --local 4000 -- $(BROWSERTESTS)
package/lib/client.js CHANGED
@@ -220,11 +220,12 @@ function parseHeader(str) {
220
220
  var field;
221
221
  var val;
222
222
 
223
- lines.pop(); // trailing CRLF
224
-
225
223
  for (var i = 0, len = lines.length; i < len; ++i) {
226
224
  line = lines[i];
227
225
  index = line.indexOf(':');
226
+ if (index === -1) { // could be empty line, just skip it
227
+ continue;
228
+ }
228
229
  field = line.slice(0, index).toLowerCase();
229
230
  val = trim(line.slice(index + 1));
230
231
  fields[field] = val;
@@ -420,16 +421,16 @@ function Request(method, url) {
420
421
  try {
421
422
  if (!self._isResponseOK(res)) {
422
423
  new_err = new Error(res.statusText || 'Unsuccessful HTTP response');
423
- new_err.original = err;
424
- new_err.response = res;
425
- new_err.status = res.status;
426
424
  }
427
- } catch(e) {
428
- new_err = e; // #985 touching res may cause INVALID_STATE_ERR on old Android
425
+ } catch(custom_err) {
426
+ new_err = custom_err; // ok() callback can throw
429
427
  }
430
428
 
431
429
  // #1000 don't catch errors from the callback to avoid double calling it
432
430
  if (new_err) {
431
+ new_err.original = err;
432
+ new_err.response = res;
433
+ new_err.status = res.status;
433
434
  self.callback(new_err, res);
434
435
  } else {
435
436
  self.callback(null, res);
package/lib/is-object.js CHANGED
@@ -1,3 +1,5 @@
1
+ 'use strict';
2
+
1
3
  /**
2
4
  * Check if `obj` is an object.
3
5
  *
package/lib/node/agent.js CHANGED
@@ -1,3 +1,4 @@
1
+ 'use strict';
1
2
 
2
3
  /**
3
4
  * Module dependencies.
package/lib/node/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ 'use strict';
1
2
 
2
3
  /**
3
4
  * Module dependencies.
@@ -675,16 +676,20 @@ Request.prototype.callback = function(err, res){
675
676
  this.called = true;
676
677
 
677
678
  if (!err) {
678
- if (this._isResponseOK(res)) {
679
- return fn(err, res);
680
- }
679
+ try {
680
+ if (this._isResponseOK(res)) {
681
+ return fn(err, res);
682
+ }
681
683
 
682
- var msg = 'Unsuccessful HTTP response';
683
- if (res) {
684
- msg = http.STATUS_CODES[res.status] || msg;
684
+ var msg = 'Unsuccessful HTTP response';
685
+ if (res) {
686
+ msg = http.STATUS_CODES[res.status] || msg;
687
+ }
688
+ err = new Error(msg);
689
+ err.status = res ? res.status : undefined;
690
+ } catch (new_err) {
691
+ err = new_err;
685
692
  }
686
- err = new Error(msg);
687
- err.status = res ? res.status : undefined;
688
693
  }
689
694
 
690
695
  err.response = res;
@@ -845,6 +850,24 @@ Request.prototype._end = function() {
845
850
  }
846
851
 
847
852
  var parserHandlesEnd = false;
853
+ if (buffer) {
854
+ // Protectiona against zip bombs and other nuisance
855
+ let responseBytesLeft = self._maxResponseSize || 200000000;
856
+ res.on('data', function(buf) {
857
+ responseBytesLeft -= buf.byteLength || buf.length;
858
+ if (responseBytesLeft < 0) {
859
+ // This will propagate through error event
860
+ const err = Error("Maximum response size reached");
861
+ err.code = "ETOOLARGE";
862
+ // Parsers aren't required to observe error event,
863
+ // so would incorrectly report success
864
+ parserHandlesEnd = false;
865
+ // Will emit error event
866
+ res.destroy(err);
867
+ }
868
+ });
869
+ }
870
+
848
871
  if (parser) {
849
872
  try {
850
873
  // Unbuffered parsers are supposed to emit response early,
@@ -890,6 +913,7 @@ Request.prototype._end = function() {
890
913
 
891
914
  // terminating events
892
915
  res.once('error', function(err){
916
+ parserHandlesEnd = false;
893
917
  self.callback(err, null);
894
918
  });
895
919
  if (!parserHandlesEnd) res.once('end', function(){
@@ -1,3 +1,5 @@
1
+ 'use strict';
2
+
1
3
  module.exports = function(res, fn){
2
4
  var data = []; // Binary data needs binary storage
3
5
 
@@ -7,4 +9,4 @@ module.exports = function(res, fn){
7
9
  res.on('end', function () {
8
10
  fn(null, Buffer.concat(data));
9
11
  });
10
- };
12
+ };
@@ -1,3 +1,4 @@
1
+ 'use strict';
1
2
 
2
3
  exports['application/x-www-form-urlencoded'] = require('./urlencoded');
3
4
  exports['application/json'] = require('./json');
@@ -1,3 +1,4 @@
1
+ 'use strict';
1
2
 
2
3
  module.exports = function parseJSON(res, fn){
3
4
  res.text = '';
@@ -1,7 +1,8 @@
1
+ 'use strict';
1
2
 
2
3
  module.exports = function(res, fn){
3
4
  res.text = '';
4
5
  res.setEncoding('utf8');
5
6
  res.on('data', function(chunk){ res.text += chunk; });
6
7
  res.on('end', fn);
7
- };
8
+ };
@@ -1,3 +1,4 @@
1
+ 'use strict';
1
2
 
2
3
  /**
3
4
  * Module dependencies.
@@ -16,4 +17,4 @@ module.exports = function(res, fn){
16
17
  fn(err);
17
18
  }
18
19
  });
19
- };
20
+ };
@@ -1,3 +1,4 @@
1
+ 'use strict';
1
2
 
2
3
  /**
3
4
  * Module dependencies.
package/lib/node/unzip.js CHANGED
@@ -1,3 +1,4 @@
1
+ 'use strict';
1
2
 
2
3
  /**
3
4
  * Module dependencies.
@@ -66,4 +67,4 @@ exports.unzip = function(req, res){
66
67
  }
67
68
  return this;
68
69
  };
69
- };
70
+ };
@@ -1,3 +1,5 @@
1
+ 'use strict';
2
+
1
3
  /**
2
4
  * Module of mixed-in functions shared between node and client code
3
5
  */
@@ -413,6 +415,21 @@ RequestBase.prototype.redirects = function(n){
413
415
  return this;
414
416
  };
415
417
 
418
+ /**
419
+ * Maximum size of buffered response body, in bytes. Counts uncompressed size.
420
+ * Default 200MB.
421
+ *
422
+ * @param {Number} n
423
+ * @return {Request} for chaining
424
+ */
425
+ RequestBase.prototype.maxResponseSize = function(n){
426
+ if ('number' !== typeof n) {
427
+ throw TypeError("Invalid argument");
428
+ }
429
+ this._maxResponseSize = n;
430
+ return this;
431
+ };
432
+
416
433
  /**
417
434
  * Convert to a plain javascript object (not JSON string) of scalar properties.
418
435
  * Note as this method is designed to return a useful non-this value,
@@ -1,3 +1,4 @@
1
+ 'use strict';
1
2
 
2
3
  /**
3
4
  * Module dependencies.
@@ -1,3 +1,5 @@
1
+ 'use strict';
2
+
1
3
  var ERROR_CODES = [
2
4
  'ECONNRESET',
3
5
  'ETIMEDOUT',
package/lib/utils.js CHANGED
@@ -1,3 +1,4 @@
1
+ 'use strict';
1
2
 
2
3
  /**
3
4
  * Return the mime type for the given `str`.
@@ -65,4 +66,4 @@ exports.cleanHeader = function(header, shouldStripCookie){
65
66
  delete header['cookie'];
66
67
  }
67
68
  return header;
68
- };
69
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superagent",
3
- "version": "3.6.3",
3
+ "version": "3.7.0",
4
4
  "description": "elegant & feature rich browser / node HTTP with a fluent API",
5
5
  "scripts": {
6
6
  "prepublish": "make all",
package/superagent.js CHANGED
@@ -1,4 +1,6 @@
1
1
  (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.superagent = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2
+ 'use strict';
3
+
2
4
  /**
3
5
  * Check if `obj` is an object.
4
6
  *
@@ -14,6 +16,8 @@ function isObject(obj) {
14
16
  module.exports = isObject;
15
17
 
16
18
  },{}],2:[function(require,module,exports){
19
+ 'use strict';
20
+
17
21
  /**
18
22
  * Module of mixed-in functions shared between node and client code
19
23
  */
@@ -429,6 +433,21 @@ RequestBase.prototype.redirects = function(n){
429
433
  return this;
430
434
  };
431
435
 
436
+ /**
437
+ * Maximum size of buffered response body, in bytes. Counts uncompressed size.
438
+ * Default 200MB.
439
+ *
440
+ * @param {Number} n
441
+ * @return {Request} for chaining
442
+ */
443
+ RequestBase.prototype.maxResponseSize = function(n){
444
+ if ('number' !== typeof n) {
445
+ throw TypeError("Invalid argument");
446
+ }
447
+ this._maxResponseSize = n;
448
+ return this;
449
+ };
450
+
432
451
  /**
433
452
  * Convert to a plain javascript object (not JSON string) of scalar properties.
434
453
  * Note as this method is designed to return a useful non-this value,
@@ -636,6 +655,7 @@ RequestBase.prototype._setTimeouts = function() {
636
655
  }
637
656
 
638
657
  },{"./is-object":1}],3:[function(require,module,exports){
658
+ 'use strict';
639
659
 
640
660
  /**
641
661
  * Module dependencies.
@@ -771,6 +791,8 @@ ResponseBase.prototype._setStatusProperties = function(status){
771
791
  };
772
792
 
773
793
  },{"./utils":5}],4:[function(require,module,exports){
794
+ 'use strict';
795
+
774
796
  var ERROR_CODES = [
775
797
  'ECONNRESET',
776
798
  'ETIMEDOUT',
@@ -796,6 +818,7 @@ module.exports = function shouldRetry(err, res) {
796
818
  };
797
819
 
798
820
  },{}],5:[function(require,module,exports){
821
+ 'use strict';
799
822
 
800
823
  /**
801
824
  * Return the mime type for the given `str`.
@@ -864,6 +887,7 @@ exports.cleanHeader = function(header, shouldStripCookie){
864
887
  }
865
888
  return header;
866
889
  };
890
+
867
891
  },{}],6:[function(require,module,exports){
868
892
 
869
893
  /**
@@ -1252,11 +1276,12 @@ function parseHeader(str) {
1252
1276
  var field;
1253
1277
  var val;
1254
1278
 
1255
- lines.pop(); // trailing CRLF
1256
-
1257
1279
  for (var i = 0, len = lines.length; i < len; ++i) {
1258
1280
  line = lines[i];
1259
1281
  index = line.indexOf(':');
1282
+ if (index === -1) { // could be empty line, just skip it
1283
+ continue;
1284
+ }
1260
1285
  field = line.slice(0, index).toLowerCase();
1261
1286
  val = trim(line.slice(index + 1));
1262
1287
  fields[field] = val;
@@ -1452,16 +1477,16 @@ function Request(method, url) {
1452
1477
  try {
1453
1478
  if (!self._isResponseOK(res)) {
1454
1479
  new_err = new Error(res.statusText || 'Unsuccessful HTTP response');
1455
- new_err.original = err;
1456
- new_err.response = res;
1457
- new_err.status = res.status;
1458
1480
  }
1459
- } catch(e) {
1460
- new_err = e; // #985 touching res may cause INVALID_STATE_ERR on old Android
1481
+ } catch(custom_err) {
1482
+ new_err = custom_err; // ok() callback can throw
1461
1483
  }
1462
1484
 
1463
1485
  // #1000 don't catch errors from the callback to avoid double calling it
1464
1486
  if (new_err) {
1487
+ new_err.original = err;
1488
+ new_err.response = res;
1489
+ new_err.status = res.status;
1465
1490
  self.callback(new_err, res);
1466
1491
  } else {
1467
1492
  self.callback(null, res);
package/yarn.lock CHANGED
@@ -46,10 +46,24 @@ accepts@~1.3.4:
46
46
  mime-types "~2.1.16"
47
47
  negotiator "0.6.1"
48
48
 
49
+ acorn-jsx@^3.0.0:
50
+ version "3.0.1"
51
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
52
+ dependencies:
53
+ acorn "^3.0.4"
54
+
55
+ acorn@^3.0.4:
56
+ version "3.3.0"
57
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
58
+
49
59
  acorn@^4.0.3:
50
60
  version "4.0.13"
51
61
  resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
52
62
 
63
+ acorn@^5.1.1:
64
+ version "5.1.2"
65
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7"
66
+
53
67
  adm-zip@~0.4.3:
54
68
  version "0.4.7"
55
69
  resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1"
@@ -222,6 +236,10 @@ assert@~1.3.0:
222
236
  dependencies:
223
237
  util "0.10.3"
224
238
 
239
+ ast-types@0.9.12:
240
+ version "0.9.12"
241
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.12.tgz#b136300d67026625ae15326982ca9918e5db73c9"
242
+
225
243
  astw@^2.0.0:
226
244
  version "2.2.0"
227
245
  resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917"
@@ -765,6 +783,10 @@ commander@2.9.0:
765
783
  dependencies:
766
784
  graceful-readlink ">= 1.0.0"
767
785
 
786
+ commander@^2.11.0:
787
+ version "2.11.0"
788
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
789
+
768
790
  component-emitter@^1.2.0:
769
791
  version "1.2.1"
770
792
  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
@@ -908,6 +930,10 @@ cookiejar@^2.1.0:
908
930
  version "2.1.1"
909
931
  resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a"
910
932
 
933
+ core-js@^2.4.1:
934
+ version "2.5.1"
935
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
936
+
911
937
  core-util-is@1.0.2, core-util-is@~1.0.0:
912
938
  version "1.0.2"
913
939
  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -981,6 +1007,12 @@ ctype@0.5.3:
981
1007
  version "0.5.3"
982
1008
  resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f"
983
1009
 
1010
+ d@1:
1011
+ version "1.0.0"
1012
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
1013
+ dependencies:
1014
+ es5-ext "^0.10.9"
1015
+
984
1016
  dashdash@^1.12.0:
985
1017
  version "1.14.1"
986
1018
  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@@ -1167,6 +1199,58 @@ end-of-stream@^1.0.0:
1167
1199
  dependencies:
1168
1200
  once "^1.4.0"
1169
1201
 
1202
+ es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
1203
+ version "0.10.31"
1204
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.31.tgz#7bb938c95a7f1b9f728092dc09c41edcc398eefe"
1205
+ dependencies:
1206
+ es6-iterator "~2.0.1"
1207
+ es6-symbol "~3.1.1"
1208
+
1209
+ es6-iterator@^2.0.1, es6-iterator@~2.0.1:
1210
+ version "2.0.1"
1211
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
1212
+ dependencies:
1213
+ d "1"
1214
+ es5-ext "^0.10.14"
1215
+ es6-symbol "^3.1"
1216
+
1217
+ es6-map@^0.1.3:
1218
+ version "0.1.5"
1219
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
1220
+ dependencies:
1221
+ d "1"
1222
+ es5-ext "~0.10.14"
1223
+ es6-iterator "~2.0.1"
1224
+ es6-set "~0.1.5"
1225
+ es6-symbol "~3.1.1"
1226
+ event-emitter "~0.3.5"
1227
+
1228
+ es6-set@~0.1.5:
1229
+ version "0.1.5"
1230
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
1231
+ dependencies:
1232
+ d "1"
1233
+ es5-ext "~0.10.14"
1234
+ es6-iterator "~2.0.1"
1235
+ es6-symbol "3.1.1"
1236
+ event-emitter "~0.3.5"
1237
+
1238
+ es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
1239
+ version "3.1.1"
1240
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
1241
+ dependencies:
1242
+ d "1"
1243
+ es5-ext "~0.10.14"
1244
+
1245
+ es6-weak-map@^2.0.1:
1246
+ version "2.0.2"
1247
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
1248
+ dependencies:
1249
+ d "1"
1250
+ es5-ext "^0.10.14"
1251
+ es6-iterator "^2.0.1"
1252
+ es6-symbol "^3.1.1"
1253
+
1170
1254
  escape-html@~1.0.3:
1171
1255
  version "1.0.3"
1172
1256
  resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
@@ -1196,6 +1280,22 @@ escodegen@1.8.x:
1196
1280
  optionalDependencies:
1197
1281
  source-map "~0.2.0"
1198
1282
 
1283
+ escope@^3.6.0:
1284
+ version "3.6.0"
1285
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
1286
+ dependencies:
1287
+ es6-map "^0.1.3"
1288
+ es6-weak-map "^2.0.1"
1289
+ esrecurse "^4.1.0"
1290
+ estraverse "^4.1.1"
1291
+
1292
+ espree@^3.4.3:
1293
+ version "3.5.1"
1294
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e"
1295
+ dependencies:
1296
+ acorn "^5.1.1"
1297
+ acorn-jsx "^3.0.0"
1298
+
1199
1299
  esprima@1.2.x:
1200
1300
  version "1.2.5"
1201
1301
  resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9"
@@ -1204,7 +1304,7 @@ esprima@2.7.x, esprima@^2.7.1:
1204
1304
  version "2.7.3"
1205
1305
  resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
1206
1306
 
1207
- esprima@^4.0.0:
1307
+ esprima@^4.0.0, esprima@~4.0.0:
1208
1308
  version "4.0.0"
1209
1309
  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
1210
1310
 
@@ -1212,10 +1312,21 @@ esprima@~1.1.1:
1212
1312
  version "1.1.1"
1213
1313
  resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.1.1.tgz#5b6f1547f4d102e670e140c509be6771d6aeb549"
1214
1314
 
1315
+ esrecurse@^4.1.0:
1316
+ version "4.2.0"
1317
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
1318
+ dependencies:
1319
+ estraverse "^4.1.0"
1320
+ object-assign "^4.0.1"
1321
+
1215
1322
  estraverse@^1.9.1:
1216
1323
  version "1.9.3"
1217
1324
  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
1218
1325
 
1326
+ estraverse@^4.1.0, estraverse@^4.1.1:
1327
+ version "4.2.0"
1328
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
1329
+
1219
1330
  estraverse@~1.5.0:
1220
1331
  version "1.5.1"
1221
1332
  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71"
@@ -1236,6 +1347,13 @@ etag@~1.8.1:
1236
1347
  version "1.8.1"
1237
1348
  resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
1238
1349
 
1350
+ event-emitter@~0.3.5:
1351
+ version "0.3.5"
1352
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
1353
+ dependencies:
1354
+ d "1"
1355
+ es5-ext "~0.10.14"
1356
+
1239
1357
  eventemitter3@1.x.x:
1240
1358
  version "1.2.0"
1241
1359
  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
@@ -1330,9 +1448,9 @@ express@4.x:
1330
1448
  utils-merge "1.0.0"
1331
1449
  vary "~1.1.1"
1332
1450
 
1333
- express@^4.16.1:
1334
- version "4.16.1"
1335
- resolved "https://registry.yarnpkg.com/express/-/express-4.16.1.tgz#6b33b560183c9b253b7b62144df33a4654ac9ed0"
1451
+ express@^4.16.0:
1452
+ version "4.16.2"
1453
+ resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
1336
1454
  dependencies:
1337
1455
  accepts "~1.3.4"
1338
1456
  array-flatten "1.1.1"
@@ -1653,7 +1771,7 @@ glob@^5.0.10, glob@^5.0.15:
1653
1771
  once "^1.3.0"
1654
1772
  path-is-absolute "^1.0.0"
1655
1773
 
1656
- glob@^7.0.5, glob@^7.1.0:
1774
+ glob@^7.0.5, glob@^7.1.0, glob@^7.1.2:
1657
1775
  version "7.1.2"
1658
1776
  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
1659
1777
  dependencies:
@@ -2176,6 +2294,18 @@ lazystream@~0.1.0:
2176
2294
  dependencies:
2177
2295
  readable-stream "~1.0.2"
2178
2296
 
2297
+ lebab@^2.7.7:
2298
+ version "2.7.7"
2299
+ resolved "https://registry.yarnpkg.com/lebab/-/lebab-2.7.7.tgz#979b243789ed12c085251382e4ecb62f56357252"
2300
+ dependencies:
2301
+ commander "^2.11.0"
2302
+ escope "^3.6.0"
2303
+ espree "^3.4.3"
2304
+ estraverse "^4.1.1"
2305
+ glob "^7.1.2"
2306
+ lodash "^4.17.4"
2307
+ recast "^0.12.6"
2308
+
2179
2309
  levn@~0.3.0:
2180
2310
  version "0.3.0"
2181
2311
  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@@ -2291,6 +2421,10 @@ lodash@3.10.1:
2291
2421
  version "3.10.1"
2292
2422
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
2293
2423
 
2424
+ lodash@^4.17.4:
2425
+ version "4.17.4"
2426
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
2427
+
2294
2428
  lodash@~2.1.0:
2295
2429
  version "2.1.0"
2296
2430
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.1.0.tgz#0637eaaa36a8a1cfc865c3adfb942189bfb0998d"
@@ -2637,7 +2771,7 @@ object-assign@^3.0.0:
2637
2771
  version "3.0.0"
2638
2772
  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
2639
2773
 
2640
- object-assign@^4.1.0:
2774
+ object-assign@^4.0.1, object-assign@^4.1.0:
2641
2775
  version "4.1.1"
2642
2776
  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
2643
2777
 
@@ -2820,6 +2954,10 @@ preserve@^0.2.0:
2820
2954
  version "0.2.0"
2821
2955
  resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
2822
2956
 
2957
+ private@~0.1.5:
2958
+ version "0.1.7"
2959
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
2960
+
2823
2961
  process-nextick-args@~1.0.6:
2824
2962
  version "1.0.7"
2825
2963
  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
@@ -3012,6 +3150,16 @@ readdirp@^2.0.0:
3012
3150
  readable-stream "^2.0.2"
3013
3151
  set-immediate-shim "^1.0.1"
3014
3152
 
3153
+ recast@^0.12.6:
3154
+ version "0.12.7"
3155
+ resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.7.tgz#6ec2ba1ae1d163cd12b5c17c3823458b299f3a0b"
3156
+ dependencies:
3157
+ ast-types "0.9.12"
3158
+ core-js "^2.4.1"
3159
+ esprima "~4.0.0"
3160
+ private "~0.1.5"
3161
+ source-map "~0.6.1"
3162
+
3015
3163
  reduce-component@1.0.1:
3016
3164
  version "1.0.1"
3017
3165
  resolved "https://registry.yarnpkg.com/reduce-component/-/reduce-component-1.0.1.tgz#e0c93542c574521bea13df0f9488ed82ab77c5da"
@@ -3354,6 +3502,10 @@ source-map@~0.5.1, source-map@~0.5.3:
3354
3502
  version "0.5.6"
3355
3503
  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
3356
3504
 
3505
+ source-map@~0.6.1:
3506
+ version "0.6.1"
3507
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
3508
+
3357
3509
  split@~0.1.2:
3358
3510
  version "0.1.2"
3359
3511
  resolved "https://registry.yarnpkg.com/split/-/split-0.1.2.tgz#f0710744c453d551fc7143ead983da6014e336cc"