rollbar 2.25.1 → 2.26.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/dist/rollbar.js CHANGED
@@ -1018,7 +1018,7 @@ module.exports = {
1018
1018
  "use strict";
1019
1019
 
1020
1020
 
1021
- var ErrorStackParser = __webpack_require__(21);
1021
+ var ErrorStackParser = __webpack_require__(23);
1022
1022
 
1023
1023
  var UNKNOWN_FUNCTION = '?';
1024
1024
  var ERR_CLASS_REGEXP = new RegExp('^(([a-zA-Z0-9-_$ ]*): *)?(Uncaught )?([a-zA-Z0-9-_$ ]*): ');
@@ -1347,12 +1347,12 @@ module.exports = rollbar;
1347
1347
 
1348
1348
 
1349
1349
  var Rollbar = __webpack_require__(8);
1350
- var telemeter = __webpack_require__(28);
1351
- var instrumenter = __webpack_require__(29);
1352
- var polyfillJSON = __webpack_require__(31);
1353
- var wrapGlobals = __webpack_require__(33);
1350
+ var telemeter = __webpack_require__(30);
1351
+ var instrumenter = __webpack_require__(31);
1352
+ var polyfillJSON = __webpack_require__(34);
1353
+ var wrapGlobals = __webpack_require__(36);
1354
1354
  var scrub = __webpack_require__(4);
1355
- var truncation = __webpack_require__(34);
1355
+ var truncation = __webpack_require__(37);
1356
1356
 
1357
1357
  Rollbar.setComponents({
1358
1358
  telemeter: telemeter,
@@ -1382,10 +1382,10 @@ var globals = __webpack_require__(18);
1382
1382
  var Transport = __webpack_require__(19);
1383
1383
  var urllib = __webpack_require__(2);
1384
1384
 
1385
- var transforms = __webpack_require__(20);
1386
- var sharedTransforms = __webpack_require__(23);
1387
- var predicates = __webpack_require__(24);
1388
- var sharedPredicates = __webpack_require__(25);
1385
+ var transforms = __webpack_require__(22);
1386
+ var sharedTransforms = __webpack_require__(25);
1387
+ var predicates = __webpack_require__(26);
1388
+ var sharedPredicates = __webpack_require__(27);
1389
1389
  var errorParser = __webpack_require__(3);
1390
1390
 
1391
1391
  function Rollbar(options, client) {
@@ -1914,8 +1914,8 @@ function _gWindow() {
1914
1914
  return ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);
1915
1915
  }
1916
1916
 
1917
- var defaults = __webpack_require__(26);
1918
- var scrubFields = __webpack_require__(27);
1917
+ var defaults = __webpack_require__(28);
1918
+ var scrubFields = __webpack_require__(29);
1919
1919
 
1920
1920
  var defaultOptions = {
1921
1921
  version: defaults.version,
@@ -2991,6 +2991,7 @@ function getTransportFromOptions(options, defaults, url) {
2991
2991
  var path = defaults.path;
2992
2992
  var search = defaults.search;
2993
2993
  var timeout = options.timeout;
2994
+ var transport = detectTransport(options)
2994
2995
 
2995
2996
  var proxy = options.proxy;
2996
2997
  if (options.endpoint) {
@@ -3008,16 +3009,26 @@ function getTransportFromOptions(options, defaults, url) {
3008
3009
  port: port,
3009
3010
  path: path,
3010
3011
  search: search,
3011
- proxy: proxy
3012
+ proxy: proxy,
3013
+ transport: transport
3012
3014
  };
3013
3015
  }
3014
3016
 
3017
+ function detectTransport(options) {
3018
+ var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);
3019
+ var transport = options.defaultTransport || 'xhr';
3020
+ if (typeof gWindow.fetch === 'undefined') transport = 'xhr';
3021
+ if (typeof gWindow.XMLHttpRequest === 'undefined') transport = 'fetch';
3022
+ return transport;
3023
+ }
3024
+
3015
3025
  function transportOptions(transport, method) {
3016
3026
  var protocol = transport.protocol || 'https:';
3017
3027
  var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined);
3018
3028
  var hostname = transport.hostname;
3019
3029
  var path = transport.path;
3020
3030
  var timeout = transport.timeout;
3031
+ var transportAPI = transport.transport;
3021
3032
  if (transport.search) {
3022
3033
  path = path + transport.search;
3023
3034
  }
@@ -3033,7 +3044,8 @@ function transportOptions(transport, method) {
3033
3044
  hostname: hostname,
3034
3045
  path: path,
3035
3046
  port: port,
3036
- method: method
3047
+ method: method,
3048
+ transport: transportAPI
3037
3049
  };
3038
3050
  }
3039
3051
 
@@ -3235,10 +3247,9 @@ module.exports = {
3235
3247
  "use strict";
3236
3248
 
3237
3249
 
3238
- /*global XDomainRequest*/
3239
-
3240
3250
  var _ = __webpack_require__(0);
3241
- var logger = __webpack_require__(1);
3251
+ var makeFetchRequest = __webpack_require__(20);
3252
+ var makeXhrRequest = __webpack_require__(21);
3242
3253
 
3243
3254
  /*
3244
3255
  * accessToken may be embedded in payload but that should not
@@ -3250,6 +3261,7 @@ var logger = __webpack_require__(1);
3250
3261
  * path
3251
3262
  * port
3252
3263
  * method
3264
+ * transport ('xhr' | 'fetch')
3253
3265
  * }
3254
3266
  *
3255
3267
  * params is an object containing key/value pairs. These
@@ -3269,7 +3281,9 @@ Transport.prototype.get = function(accessToken, options, params, callback, reque
3269
3281
 
3270
3282
  var method = 'GET';
3271
3283
  var url = _.formatUrl(options);
3272
- _makeZoneRequest(accessToken, url, method, null, callback, requestFactory, options.timeout);
3284
+ this._makeZoneRequest(
3285
+ accessToken, url, method, null, callback, requestFactory, options.timeout, options.transport
3286
+ );
3273
3287
  }
3274
3288
 
3275
3289
  Transport.prototype.post = function(accessToken, options, payload, callback, requestFactory) {
@@ -3294,7 +3308,9 @@ Transport.prototype.post = function(accessToken, options, payload, callback, req
3294
3308
  var writeData = stringifyResult.value;
3295
3309
  var method = 'POST';
3296
3310
  var url = _.formatUrl(options);
3297
- _makeZoneRequest(accessToken, url, method, writeData, callback, requestFactory, options.timeout);
3311
+ this._makeZoneRequest(
3312
+ accessToken, url, method, writeData, callback, requestFactory, options.timeout, options.transport
3313
+ );
3298
3314
  }
3299
3315
 
3300
3316
  Transport.prototype.postJsonPayload = function (accessToken, options, jsonPayload, callback, requestFactory) {
@@ -3304,7 +3320,9 @@ Transport.prototype.postJsonPayload = function (accessToken, options, jsonPayloa
3304
3320
 
3305
3321
  var method = 'POST';
3306
3322
  var url = _.formatUrl(options);
3307
- _makeZoneRequest(accessToken, url, method, jsonPayload, callback, requestFactory, options.timeout);
3323
+ this._makeZoneRequest(
3324
+ accessToken, url, method, jsonPayload, callback, requestFactory, options.timeout, options.transport
3325
+ );
3308
3326
  }
3309
3327
 
3310
3328
 
@@ -3312,7 +3330,7 @@ Transport.prototype.postJsonPayload = function (accessToken, options, jsonPayloa
3312
3330
  // so Angular change detection isn't triggered on each API call.
3313
3331
  // This is the equivalent of runOutsideAngular().
3314
3332
  //
3315
- function _makeZoneRequest() {
3333
+ Transport.prototype._makeZoneRequest = function () {
3316
3334
  var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self);
3317
3335
  var currentZone = gWindow && gWindow.Zone && gWindow.Zone.current;
3318
3336
  var args = Array.prototype.slice.call(arguments);
@@ -3320,10 +3338,24 @@ function _makeZoneRequest() {
3320
3338
  if (currentZone && currentZone._name === 'angular') {
3321
3339
  var rootZone = currentZone._parent;
3322
3340
  rootZone.run(function () {
3323
- _makeRequest.apply(undefined, args);
3341
+ this._makeRequest.apply(undefined, args);
3324
3342
  });
3325
3343
  } else {
3326
- _makeRequest.apply(undefined, args);
3344
+ this._makeRequest.apply(undefined, args);
3345
+ }
3346
+ }
3347
+
3348
+ Transport.prototype._makeRequest = function (
3349
+ accessToken, url, method, data, callback, requestFactory, timeout, transport
3350
+ ) {
3351
+ if (typeof RollbarProxy !== 'undefined') {
3352
+ return _proxyRequest(data, callback);
3353
+ }
3354
+
3355
+ if (transport === 'fetch') {
3356
+ makeFetchRequest(accessToken, url, method, data, callback, timeout)
3357
+ } else {
3358
+ makeXhrRequest(accessToken, url, method, data, callback, requestFactory, timeout)
3327
3359
  }
3328
3360
  }
3329
3361
 
@@ -3339,11 +3371,66 @@ function _proxyRequest(json, callback) {
3339
3371
  );
3340
3372
  }
3341
3373
 
3342
- function _makeRequest(accessToken, url, method, data, callback, requestFactory, timeout) {
3343
- if (typeof RollbarProxy !== 'undefined') {
3344
- return _proxyRequest(data, callback);
3374
+ module.exports = Transport;
3375
+
3376
+
3377
+ /***/ }),
3378
+ /* 20 */
3379
+ /***/ (function(module, exports, __webpack_require__) {
3380
+
3381
+ "use strict";
3382
+
3383
+
3384
+ var logger = __webpack_require__(1);
3385
+ var _ = __webpack_require__(0);
3386
+
3387
+ function makeFetchRequest(accessToken, url, method, data, callback, timeout) {
3388
+ var controller;
3389
+ var timeoutId;
3390
+
3391
+ if(_.isFiniteNumber(timeout)) {
3392
+ controller = new AbortController();
3393
+ timeoutId = setTimeout(() => controller.abort(), timeout);
3345
3394
  }
3346
3395
 
3396
+ fetch(url, {
3397
+ method: method,
3398
+ headers: {
3399
+ 'Content-Type': 'application/json',
3400
+ 'X-Rollbar-Access-Token': accessToken,
3401
+ signal: controller && controller.signal
3402
+ },
3403
+ body: data,
3404
+ })
3405
+ .then((response) => {
3406
+ if (timeoutId) clearTimeout(timeoutId);
3407
+ return response.json();
3408
+ })
3409
+ .then((data) => {
3410
+ callback(null, data);
3411
+ })
3412
+ .catch((error) => {
3413
+ logger.error(error.message);
3414
+ callback(error);
3415
+ });
3416
+ }
3417
+
3418
+ module.exports = makeFetchRequest;
3419
+
3420
+
3421
+ /***/ }),
3422
+ /* 21 */
3423
+ /***/ (function(module, exports, __webpack_require__) {
3424
+
3425
+ "use strict";
3426
+
3427
+
3428
+ /*global XDomainRequest*/
3429
+
3430
+ var _ = __webpack_require__(0);
3431
+ var logger = __webpack_require__(1);
3432
+
3433
+ function makeXhrRequest(accessToken, url, method, data, callback, requestFactory, timeout) {
3347
3434
  var request;
3348
3435
  if (requestFactory) {
3349
3436
  request = requestFactory();
@@ -3496,11 +3583,11 @@ function _newRetriableError(message, code) {
3496
3583
  return err;
3497
3584
  }
3498
3585
 
3499
- module.exports = Transport;
3586
+ module.exports = makeXhrRequest;
3500
3587
 
3501
3588
 
3502
3589
  /***/ }),
3503
- /* 20 */
3590
+ /* 22 */
3504
3591
  /***/ (function(module, exports, __webpack_require__) {
3505
3592
 
3506
3593
  "use strict";
@@ -3587,20 +3674,25 @@ function addBaseInfo(item, options, callback) {
3587
3674
 
3588
3675
  function addRequestInfo(window) {
3589
3676
  return function(item, options, callback) {
3590
- if (!window || !window.location) {
3591
- return callback(null, item);
3677
+ var requestInfo = {};
3678
+
3679
+ if (window && window.location) {
3680
+ requestInfo.url = window.location.href;
3681
+ requestInfo.query_string = window.location.search;
3592
3682
  }
3683
+
3593
3684
  var remoteString = '$remote_ip';
3594
3685
  if (!options.captureIp) {
3595
3686
  remoteString = null;
3596
3687
  } else if (options.captureIp !== true) {
3597
3688
  remoteString += '_anonymize';
3598
3689
  }
3599
- _.set(item, 'data.request', {
3600
- url: window.location.href,
3601
- query_string: window.location.search,
3602
- user_ip: remoteString
3603
- });
3690
+ if (remoteString) requestInfo.user_ip = remoteString;
3691
+
3692
+ if (Object.keys(requestInfo).length > 0) {
3693
+ _.set(item, 'data.request', requestInfo);
3694
+ }
3695
+
3604
3696
  callback(null, item);
3605
3697
  };
3606
3698
  }
@@ -3842,7 +3934,7 @@ module.exports = {
3842
3934
 
3843
3935
 
3844
3936
  /***/ }),
3845
- /* 21 */
3937
+ /* 23 */
3846
3938
  /***/ (function(module, exports, __webpack_require__) {
3847
3939
 
3848
3940
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(root, factory) {
@@ -3851,7 +3943,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
3851
3943
 
3852
3944
  /* istanbul ignore next */
3853
3945
  if (true) {
3854
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(22)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
3946
+ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(24)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
3855
3947
  __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
3856
3948
  (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
3857
3949
  __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
@@ -3902,21 +3994,21 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
3902
3994
  return filtered.map(function(line) {
3903
3995
  if (line.indexOf('(eval ') > -1) {
3904
3996
  // Throw away eval information until we implement stacktrace.js/stackframe#8
3905
- line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^()]*)|(\),.*$)/g, '');
3997
+ line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^()]*)|(,.*$)/g, '');
3906
3998
  }
3907
- var sanitizedLine = line.replace(/^\s+/, '').replace(/\(eval code/g, '(');
3999
+ var sanitizedLine = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').replace(/^.*?\s+/, '');
3908
4000
 
3909
4001
  // capture and preseve the parenthesized location "(/foo/my bar.js:12:87)" in
3910
4002
  // case it has spaces in it, as the string is split on \s+ later on
3911
- var location = sanitizedLine.match(/ (\((.+):(\d+):(\d+)\)$)/);
4003
+ var location = sanitizedLine.match(/ (\(.+\)$)/);
3912
4004
 
3913
4005
  // remove the parenthesized location from the line, if it was matched
3914
4006
  sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;
3915
4007
 
3916
- var tokens = sanitizedLine.split(/\s+/).slice(1);
3917
- // if a location was matched, pass it to extractLocation() otherwise pop the last token
3918
- var locationParts = this.extractLocation(location ? location[1] : tokens.pop());
3919
- var functionName = tokens.join(' ') || undefined;
4008
+ // if a location was matched, pass it to extractLocation() otherwise pass all sanitizedLine
4009
+ // because this line doesn't have function name
4010
+ var locationParts = this.extractLocation(location ? location[1] : sanitizedLine);
4011
+ var functionName = location && sanitizedLine || undefined;
3920
4012
  var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];
3921
4013
 
3922
4014
  return new StackFrame({
@@ -4049,7 +4141,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
4049
4141
 
4050
4142
 
4051
4143
  /***/ }),
4052
- /* 22 */
4144
+ /* 24 */
4053
4145
  /***/ (function(module, exports, __webpack_require__) {
4054
4146
 
4055
4147
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(root, factory) {
@@ -4197,7 +4289,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
4197
4289
 
4198
4290
 
4199
4291
  /***/ }),
4200
- /* 23 */
4292
+ /* 25 */
4201
4293
  /***/ (function(module, exports, __webpack_require__) {
4202
4294
 
4203
4295
  "use strict";
@@ -4354,7 +4446,7 @@ module.exports = {
4354
4446
 
4355
4447
 
4356
4448
  /***/ }),
4357
- /* 24 */
4449
+ /* 26 */
4358
4450
  /***/ (function(module, exports, __webpack_require__) {
4359
4451
 
4360
4452
  "use strict";
@@ -4375,7 +4467,7 @@ module.exports = {
4375
4467
 
4376
4468
 
4377
4469
  /***/ }),
4378
- /* 25 */
4470
+ /* 27 */
4379
4471
  /***/ (function(module, exports, __webpack_require__) {
4380
4472
 
4381
4473
  "use strict";
@@ -4577,14 +4669,14 @@ module.exports = {
4577
4669
 
4578
4670
 
4579
4671
  /***/ }),
4580
- /* 26 */
4672
+ /* 28 */
4581
4673
  /***/ (function(module, exports, __webpack_require__) {
4582
4674
 
4583
4675
  "use strict";
4584
4676
 
4585
4677
 
4586
4678
  module.exports = {
4587
- version: '2.25.1',
4679
+ version: '2.26.0',
4588
4680
  endpoint: 'api.rollbar.com/api/1/item/',
4589
4681
  logLevel: 'debug',
4590
4682
  reportLevel: 'debug',
@@ -4595,7 +4687,7 @@ module.exports = {
4595
4687
 
4596
4688
 
4597
4689
  /***/ }),
4598
- /* 27 */
4690
+ /* 29 */
4599
4691
  /***/ (function(module, exports, __webpack_require__) {
4600
4692
 
4601
4693
  "use strict";
@@ -4663,7 +4755,7 @@ module.exports = {
4663
4755
 
4664
4756
 
4665
4757
  /***/ }),
4666
- /* 28 */
4758
+ /* 30 */
4667
4759
  /***/ (function(module, exports, __webpack_require__) {
4668
4760
 
4669
4761
  "use strict";
@@ -4849,16 +4941,17 @@ module.exports = Telemeter;
4849
4941
 
4850
4942
 
4851
4943
  /***/ }),
4852
- /* 29 */
4944
+ /* 31 */
4853
4945
  /***/ (function(module, exports, __webpack_require__) {
4854
4946
 
4855
4947
  "use strict";
4856
4948
 
4857
4949
 
4858
4950
  var _ = __webpack_require__(0);
4951
+ var headers = __webpack_require__(32);
4859
4952
  var scrub = __webpack_require__(4);
4860
4953
  var urlparser = __webpack_require__(2);
4861
- var domUtil = __webpack_require__(30);
4954
+ var domUtil = __webpack_require__(33);
4862
4955
 
4863
4956
  var defaults = {
4864
4957
  network: true,
@@ -5219,7 +5312,7 @@ Instrumenter.prototype.instrumentNetwork = function() {
5219
5312
  if (args[1] && args[1].headers) {
5220
5313
  // Argument may be a Headers object, or plain object. Ensure here that
5221
5314
  // we are working with a Headers object with case-insensitive keys.
5222
- var reqHeaders = new Headers(args[1].headers);
5315
+ var reqHeaders = headers(args[1].headers);
5223
5316
 
5224
5317
  metadata.request_content_type = reqHeaders.get('Content-Type');
5225
5318
 
@@ -5239,6 +5332,9 @@ Instrumenter.prototype.instrumentNetwork = function() {
5239
5332
  if (self.trackHttpErrors()) {
5240
5333
  metadata.stack = (new Error()).stack;
5241
5334
  }
5335
+
5336
+ // Start our handler before returning the promise. This allows resp.clone()
5337
+ // to execute before other handlers touch the response.
5242
5338
  return orig.apply(this, args).then(function (resp) {
5243
5339
  metadata.end_time_ms = _.now();
5244
5340
  metadata.status_code = resp.status;
@@ -5251,6 +5347,7 @@ Instrumenter.prototype.instrumentNetwork = function() {
5251
5347
  if (self.autoInstrument.networkResponseBody) {
5252
5348
  if (typeof resp.text === 'function') { // Response.text() is not implemented on some platforms
5253
5349
  // The response must be cloned to prevent reading (and locking) the original stream.
5350
+ // This must be done before other handlers touch the response.
5254
5351
  body = resp.clone().text(); //returns a Promise
5255
5352
  }
5256
5353
  }
@@ -5626,7 +5723,110 @@ module.exports = Instrumenter;
5626
5723
 
5627
5724
 
5628
5725
  /***/ }),
5629
- /* 30 */
5726
+ /* 32 */
5727
+ /***/ (function(module, exports, __webpack_require__) {
5728
+
5729
+ "use strict";
5730
+
5731
+
5732
+ /*
5733
+ * headers - Detect when fetch Headers are undefined and use a partial polyfill.
5734
+ *
5735
+ * A full polyfill is not used in order to keep package size as small as possible.
5736
+ * Since this is only used internally and is not added to the window object,
5737
+ * the full interface doesn't need to be supported.
5738
+ *
5739
+ * This implementation is modified from whatwg-fetch:
5740
+ * https://github.com/github/fetch
5741
+ */
5742
+ function headers(headers) {
5743
+ if (typeof Headers === 'undefined') {
5744
+ return new FetchHeaders(headers);
5745
+ }
5746
+
5747
+ return new Headers(headers);
5748
+ }
5749
+
5750
+ function normalizeName(name) {
5751
+ if (typeof name !== 'string') {
5752
+ name = String(name)
5753
+ }
5754
+ return name.toLowerCase()
5755
+ }
5756
+
5757
+ function normalizeValue(value) {
5758
+ if (typeof value !== 'string') {
5759
+ value = String(value)
5760
+ }
5761
+ return value
5762
+ }
5763
+
5764
+ function iteratorFor(items) {
5765
+ var iterator = {
5766
+ next: function() {
5767
+ var value = items.shift()
5768
+ return {done: value === undefined, value: value}
5769
+ }
5770
+ }
5771
+
5772
+ return iterator
5773
+ }
5774
+
5775
+ function FetchHeaders(headers) {
5776
+ this.map = {}
5777
+
5778
+ if (headers instanceof FetchHeaders) {
5779
+ headers.forEach(function(value, name) {
5780
+ this.append(name, value)
5781
+ }, this)
5782
+ } else if (Array.isArray(headers)) {
5783
+ headers.forEach(function(header) {
5784
+ this.append(header[0], header[1])
5785
+ }, this)
5786
+ } else if (headers) {
5787
+ Object.getOwnPropertyNames(headers).forEach(function(name) {
5788
+ this.append(name, headers[name])
5789
+ }, this)
5790
+ }
5791
+ }
5792
+
5793
+ FetchHeaders.prototype.append = function(name, value) {
5794
+ name = normalizeName(name)
5795
+ value = normalizeValue(value)
5796
+ var oldValue = this.map[name]
5797
+ this.map[name] = oldValue ? oldValue + ', ' + value : value
5798
+ }
5799
+
5800
+ FetchHeaders.prototype.get = function(name) {
5801
+ name = normalizeName(name)
5802
+ return this.has(name) ? this.map[name] : null
5803
+ }
5804
+
5805
+ FetchHeaders.prototype.has = function(name) {
5806
+ return this.map.hasOwnProperty(normalizeName(name))
5807
+ }
5808
+
5809
+ FetchHeaders.prototype.forEach = function(callback, thisArg) {
5810
+ for (var name in this.map) {
5811
+ if (this.map.hasOwnProperty(name)) {
5812
+ callback.call(thisArg, this.map[name], name, this)
5813
+ }
5814
+ }
5815
+ }
5816
+
5817
+ FetchHeaders.prototype.entries = function() {
5818
+ var items = []
5819
+ this.forEach(function(value, name) {
5820
+ items.push([name, value])
5821
+ })
5822
+ return iteratorFor(items)
5823
+ }
5824
+
5825
+ module.exports = headers;
5826
+
5827
+
5828
+ /***/ }),
5829
+ /* 33 */
5630
5830
  /***/ (function(module, exports, __webpack_require__) {
5631
5831
 
5632
5832
  "use strict";
@@ -5765,19 +5965,19 @@ module.exports = {
5765
5965
 
5766
5966
 
5767
5967
  /***/ }),
5768
- /* 31 */
5968
+ /* 34 */
5769
5969
  /***/ (function(module, exports, __webpack_require__) {
5770
5970
 
5771
5971
  "use strict";
5772
5972
 
5773
5973
 
5774
- var polyfillJSON = __webpack_require__(32);
5974
+ var polyfillJSON = __webpack_require__(35);
5775
5975
 
5776
5976
  module.exports = polyfillJSON;
5777
5977
 
5778
5978
 
5779
5979
  /***/ }),
5780
- /* 32 */
5980
+ /* 35 */
5781
5981
  /***/ (function(module, exports) {
5782
5982
 
5783
5983
  // json3.js
@@ -6546,7 +6746,7 @@ module.exports = setupCustomJSON;
6546
6746
 
6547
6747
 
6548
6748
  /***/ }),
6549
- /* 33 */
6749
+ /* 36 */
6550
6750
  /***/ (function(module, exports, __webpack_require__) {
6551
6751
 
6552
6752
  "use strict";
@@ -6596,7 +6796,7 @@ module.exports = wrapGlobals;
6596
6796
 
6597
6797
 
6598
6798
  /***/ }),
6599
- /* 34 */
6799
+ /* 37 */
6600
6800
  /***/ (function(module, exports, __webpack_require__) {
6601
6801
 
6602
6802
  "use strict";