core-js 3.17.0 → 3.18.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.
Files changed (171) hide show
  1. package/es/promise/all-settled.js +2 -1
  2. package/es/promise/any.js +2 -1
  3. package/features/array/from-async.js +8 -0
  4. package/features/array/index.js +2 -0
  5. package/features/index.js +2 -0
  6. package/features/map/from.js +2 -1
  7. package/features/map/group-by.js +2 -1
  8. package/features/map/key-by.js +2 -1
  9. package/features/map/of.js +2 -1
  10. package/features/promise/try.js +2 -1
  11. package/features/set/from.js +2 -1
  12. package/features/set/of.js +2 -1
  13. package/features/typed-array/from-async.js +1 -0
  14. package/features/typed-array/index.js +2 -0
  15. package/features/weak-map/from.js +2 -1
  16. package/features/weak-map/of.js +2 -1
  17. package/features/weak-set/from.js +2 -1
  18. package/features/weak-set/of.js +2 -1
  19. package/internals/a-callable.js +8 -0
  20. package/internals/a-constructor.js +8 -0
  21. package/internals/a-possible-prototype.js +4 -5
  22. package/internals/an-instance.js +2 -3
  23. package/internals/an-object.js +4 -4
  24. package/internals/array-buffer-view-core.js +5 -4
  25. package/internals/array-buffer.js +7 -1
  26. package/internals/array-from-async.js +32 -0
  27. package/internals/array-from.js +6 -5
  28. package/internals/array-reduce.js +2 -2
  29. package/internals/array-species-constructor.js +3 -2
  30. package/internals/array-unique-by.js +3 -3
  31. package/internals/async-from-sync-iterator.js +4 -4
  32. package/internals/async-iterator-create-proxy.js +9 -8
  33. package/internals/async-iterator-iteration.js +26 -15
  34. package/internals/async-iterator-prototype.js +16 -16
  35. package/internals/classof.js +2 -1
  36. package/internals/collection-add-all.js +2 -2
  37. package/internals/collection-delete-all.js +2 -2
  38. package/internals/collection-from.js +4 -3
  39. package/internals/collection.js +2 -1
  40. package/internals/define-iterator.js +21 -13
  41. package/internals/dom-token-list-prototype.js +7 -0
  42. package/internals/export.js +1 -0
  43. package/internals/function-bind-context.js +2 -2
  44. package/internals/function-bind.js +2 -2
  45. package/internals/function-name.js +17 -0
  46. package/internals/get-async-iterator.js +2 -5
  47. package/internals/get-built-in.js +3 -2
  48. package/internals/get-iterator-method.js +3 -2
  49. package/internals/get-iterator.js +5 -5
  50. package/internals/get-method.js +4 -3
  51. package/internals/inherit-if-required.js +2 -1
  52. package/internals/inspect-source.js +2 -1
  53. package/internals/is-array.js +2 -2
  54. package/internals/is-callable.js +5 -0
  55. package/internals/is-constructor.js +41 -0
  56. package/internals/is-forced.js +2 -1
  57. package/internals/is-object.js +3 -1
  58. package/internals/is-symbol.js +2 -1
  59. package/internals/iterate.js +1 -1
  60. package/internals/iterator-close.js +3 -2
  61. package/internals/iterator-create-proxy.js +12 -11
  62. package/internals/iterators-core.js +8 -6
  63. package/internals/map-upsert.js +4 -3
  64. package/internals/native-weak-map.js +2 -1
  65. package/internals/new-promise-capability.js +3 -3
  66. package/internals/number-parse-float.js +6 -1
  67. package/internals/number-parse-int.js +6 -1
  68. package/internals/object-get-prototype-of.js +7 -5
  69. package/internals/ordinary-to-primitive.js +4 -3
  70. package/internals/redefine.js +12 -6
  71. package/internals/regexp-exec-abstract.js +8 -13
  72. package/internals/regexp-unsupported-dot-all.js +1 -1
  73. package/internals/regexp-unsupported-ncg.js +1 -1
  74. package/internals/shared.js +1 -1
  75. package/internals/species-constructor.js +2 -2
  76. package/internals/string-trim-forced.js +4 -1
  77. package/internals/task.js +3 -2
  78. package/internals/this-number-value.js +2 -5
  79. package/internals/to-primitive.js +3 -2
  80. package/internals/to-string.js +2 -2
  81. package/internals/try-to-string.js +7 -0
  82. package/internals/typed-array-from.js +4 -2
  83. package/modules/es.array.flat-map.js +2 -2
  84. package/modules/es.array.of.js +2 -1
  85. package/modules/es.array.slice.js +3 -2
  86. package/modules/es.array.sort.js +2 -2
  87. package/modules/es.date.to-primitive.js +2 -2
  88. package/modules/es.function.has-instance.js +2 -1
  89. package/modules/es.function.name.js +2 -1
  90. package/modules/es.object.define-getter.js +2 -2
  91. package/modules/es.object.define-setter.js +2 -2
  92. package/modules/es.parse-float.js +3 -3
  93. package/modules/es.parse-int.js +3 -3
  94. package/modules/es.promise.all-settled.js +2 -2
  95. package/modules/es.promise.any.js +2 -2
  96. package/modules/es.promise.finally.js +3 -2
  97. package/modules/es.promise.js +10 -9
  98. package/modules/es.reflect.apply.js +2 -2
  99. package/modules/es.reflect.construct.js +3 -3
  100. package/modules/es.regexp.test.js +4 -4
  101. package/modules/es.regexp.to-string.js +2 -1
  102. package/modules/es.string.at-alternative.js +0 -1
  103. package/modules/es.string.match-all.js +6 -16
  104. package/modules/es.string.match.js +3 -2
  105. package/modules/es.string.raw.js +9 -4
  106. package/modules/es.string.replace-all.js +5 -3
  107. package/modules/es.string.replace.js +5 -3
  108. package/modules/es.string.search.js +3 -2
  109. package/modules/es.string.split.js +3 -2
  110. package/modules/es.string.trim-end.js +1 -1
  111. package/modules/es.string.trim-start.js +1 -1
  112. package/modules/es.symbol.description.js +2 -1
  113. package/modules/es.symbol.js +6 -3
  114. package/modules/es.typed-array.iterator.js +4 -4
  115. package/modules/es.typed-array.sort.js +2 -2
  116. package/modules/esnext.aggregate-error.js +1 -1
  117. package/modules/esnext.array.from-async.js +8 -0
  118. package/modules/esnext.async-iterator.constructor.js +1 -1
  119. package/modules/esnext.async-iterator.filter.js +2 -2
  120. package/modules/esnext.async-iterator.flat-map.js +3 -3
  121. package/modules/esnext.async-iterator.from.js +7 -9
  122. package/modules/esnext.async-iterator.map.js +2 -2
  123. package/modules/esnext.async-iterator.reduce.js +3 -3
  124. package/modules/esnext.async-iterator.to-array.js +1 -1
  125. package/modules/esnext.global-this.js +1 -1
  126. package/modules/esnext.iterator.constructor.js +2 -9
  127. package/modules/esnext.iterator.every.js +2 -2
  128. package/modules/esnext.iterator.filter.js +2 -2
  129. package/modules/esnext.iterator.find.js +2 -2
  130. package/modules/esnext.iterator.flat-map.js +4 -4
  131. package/modules/esnext.iterator.from.js +5 -7
  132. package/modules/esnext.iterator.map.js +2 -2
  133. package/modules/esnext.iterator.reduce.js +2 -2
  134. package/modules/esnext.iterator.some.js +2 -2
  135. package/modules/esnext.map.filter.js +2 -2
  136. package/modules/esnext.map.group-by.js +9 -7
  137. package/modules/esnext.map.key-by.js +3 -3
  138. package/modules/esnext.map.key-of.js +1 -1
  139. package/modules/esnext.map.map-keys.js +2 -2
  140. package/modules/esnext.map.map-values.js +2 -2
  141. package/modules/esnext.map.merge.js +2 -2
  142. package/modules/esnext.map.reduce.js +2 -2
  143. package/modules/esnext.map.update-or-insert.js +1 -1
  144. package/modules/esnext.map.update.js +3 -3
  145. package/modules/esnext.observable.js +16 -14
  146. package/modules/esnext.promise.all-settled.js +1 -1
  147. package/modules/esnext.promise.any.js +1 -1
  148. package/modules/esnext.set.difference.js +2 -2
  149. package/modules/esnext.set.filter.js +2 -2
  150. package/modules/esnext.set.intersection.js +3 -3
  151. package/modules/esnext.set.is-disjoint-from.js +2 -2
  152. package/modules/esnext.set.is-subset-of.js +4 -3
  153. package/modules/esnext.set.is-superset-of.js +2 -2
  154. package/modules/esnext.set.map.js +2 -2
  155. package/modules/esnext.set.reduce.js +2 -2
  156. package/modules/esnext.set.symmetric-difference.js +3 -3
  157. package/modules/esnext.set.union.js +2 -2
  158. package/modules/esnext.string.match-all.js +1 -1
  159. package/modules/esnext.string.replace-all.js +1 -1
  160. package/modules/esnext.typed-array.from-async.js +19 -0
  161. package/modules/web.dom-collections.for-each.js +8 -3
  162. package/modules/web.dom-collections.iterator.js +8 -3
  163. package/modules/web.timers.js +2 -1
  164. package/modules/web.url-search-params.js +6 -5
  165. package/modules/web.url.js +67 -67
  166. package/package.json +2 -2
  167. package/proposals/array-from-async.js +3 -0
  168. package/stage/1.js +1 -0
  169. package/stage/3.js +0 -2
  170. package/stage/4.js +2 -0
  171. package/internals/a-function.js +0 -5
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
3
  var IS_PURE = require('../internals/is-pure');
4
+ var aCallable = require('../internals/a-callable');
4
5
  var anObject = require('../internals/an-object');
5
- var aFunction = require('../internals/a-function');
6
6
  var iterate = require('../internals/iterate');
7
7
 
8
8
  // `Set.prototype.isDisjointFrom` method
@@ -10,7 +10,7 @@ var iterate = require('../internals/iterate');
10
10
  $({ target: 'Set', proto: true, real: true, forced: IS_PURE }, {
11
11
  isDisjointFrom: function isDisjointFrom(iterable) {
12
12
  var set = anObject(this);
13
- var hasCheck = aFunction(set.has);
13
+ var hasCheck = aCallable(set.has);
14
14
  return !iterate(iterable, function (value, stop) {
15
15
  if (hasCheck.call(set, value) === true) return stop();
16
16
  }, { INTERRUPTED: true }).stopped;
@@ -2,8 +2,9 @@
2
2
  var $ = require('../internals/export');
3
3
  var IS_PURE = require('../internals/is-pure');
4
4
  var getBuiltIn = require('../internals/get-built-in');
5
+ var aCallable = require('../internals/a-callable');
6
+ var isCallable = require('../internals/is-callable');
5
7
  var anObject = require('../internals/an-object');
6
- var aFunction = require('../internals/a-function');
7
8
  var getIterator = require('../internals/get-iterator');
8
9
  var iterate = require('../internals/iterate');
9
10
 
@@ -14,9 +15,9 @@ $({ target: 'Set', proto: true, real: true, forced: IS_PURE }, {
14
15
  var iterator = getIterator(this);
15
16
  var otherSet = anObject(iterable);
16
17
  var hasCheck = otherSet.has;
17
- if (typeof hasCheck != 'function') {
18
+ if (!isCallable(hasCheck)) {
18
19
  otherSet = new (getBuiltIn('Set'))(iterable);
19
- hasCheck = aFunction(otherSet.has);
20
+ hasCheck = aCallable(otherSet.has);
20
21
  }
21
22
  return !iterate(iterator, function (value, stop) {
22
23
  if (hasCheck.call(otherSet, value) === false) return stop();
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
3
  var IS_PURE = require('../internals/is-pure');
4
+ var aCallable = require('../internals/a-callable');
4
5
  var anObject = require('../internals/an-object');
5
- var aFunction = require('../internals/a-function');
6
6
  var iterate = require('../internals/iterate');
7
7
 
8
8
  // `Set.prototype.isSupersetOf` method
@@ -10,7 +10,7 @@ var iterate = require('../internals/iterate');
10
10
  $({ target: 'Set', proto: true, real: true, forced: IS_PURE }, {
11
11
  isSupersetOf: function isSupersetOf(iterable) {
12
12
  var set = anObject(this);
13
- var hasCheck = aFunction(set.has);
13
+ var hasCheck = aCallable(set.has);
14
14
  return !iterate(iterable, function (value, stop) {
15
15
  if (hasCheck.call(set, value) === false) return stop();
16
16
  }, { INTERRUPTED: true }).stopped;
@@ -2,8 +2,8 @@
2
2
  var $ = require('../internals/export');
3
3
  var IS_PURE = require('../internals/is-pure');
4
4
  var getBuiltIn = require('../internals/get-built-in');
5
+ var aCallable = require('../internals/a-callable');
5
6
  var anObject = require('../internals/an-object');
6
- var aFunction = require('../internals/a-function');
7
7
  var bind = require('../internals/function-bind-context');
8
8
  var speciesConstructor = require('../internals/species-constructor');
9
9
  var getSetIterator = require('../internals/get-set-iterator');
@@ -17,7 +17,7 @@ $({ target: 'Set', proto: true, real: true, forced: IS_PURE }, {
17
17
  var iterator = getSetIterator(set);
18
18
  var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
19
19
  var newSet = new (speciesConstructor(set, getBuiltIn('Set')))();
20
- var adder = aFunction(newSet.add);
20
+ var adder = aCallable(newSet.add);
21
21
  iterate(iterator, function (value) {
22
22
  adder.call(newSet, boundFunction(value, value, set));
23
23
  }, { IS_ITERATOR: true });
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
3
  var IS_PURE = require('../internals/is-pure');
4
+ var aCallable = require('../internals/a-callable');
4
5
  var anObject = require('../internals/an-object');
5
- var aFunction = require('../internals/a-function');
6
6
  var getSetIterator = require('../internals/get-set-iterator');
7
7
  var iterate = require('../internals/iterate');
8
8
 
@@ -14,7 +14,7 @@ $({ target: 'Set', proto: true, real: true, forced: IS_PURE }, {
14
14
  var iterator = getSetIterator(set);
15
15
  var noInitial = arguments.length < 2;
16
16
  var accumulator = noInitial ? undefined : arguments[1];
17
- aFunction(callbackfn);
17
+ aCallable(callbackfn);
18
18
  iterate(iterator, function (value) {
19
19
  if (noInitial) {
20
20
  noInitial = false;
@@ -2,8 +2,8 @@
2
2
  var $ = require('../internals/export');
3
3
  var IS_PURE = require('../internals/is-pure');
4
4
  var getBuiltIn = require('../internals/get-built-in');
5
+ var aCallable = require('../internals/a-callable');
5
6
  var anObject = require('../internals/an-object');
6
- var aFunction = require('../internals/a-function');
7
7
  var speciesConstructor = require('../internals/species-constructor');
8
8
  var iterate = require('../internals/iterate');
9
9
 
@@ -13,8 +13,8 @@ $({ target: 'Set', proto: true, real: true, forced: IS_PURE }, {
13
13
  symmetricDifference: function symmetricDifference(iterable) {
14
14
  var set = anObject(this);
15
15
  var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set);
16
- var remover = aFunction(newSet['delete']);
17
- var adder = aFunction(newSet.add);
16
+ var remover = aCallable(newSet['delete']);
17
+ var adder = aCallable(newSet.add);
18
18
  iterate(iterable, function (value) {
19
19
  remover.call(newSet, value) || adder.call(newSet, value);
20
20
  });
@@ -2,8 +2,8 @@
2
2
  var $ = require('../internals/export');
3
3
  var IS_PURE = require('../internals/is-pure');
4
4
  var getBuiltIn = require('../internals/get-built-in');
5
+ var aCallable = require('../internals/a-callable');
5
6
  var anObject = require('../internals/an-object');
6
- var aFunction = require('../internals/a-function');
7
7
  var speciesConstructor = require('../internals/species-constructor');
8
8
  var iterate = require('../internals/iterate');
9
9
 
@@ -13,7 +13,7 @@ $({ target: 'Set', proto: true, real: true, forced: IS_PURE }, {
13
13
  union: function union(iterable) {
14
14
  var set = anObject(this);
15
15
  var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set);
16
- iterate(iterable, aFunction(newSet.add), { that: newSet });
16
+ iterate(iterable, aCallable(newSet.add), { that: newSet });
17
17
  return newSet;
18
18
  }
19
19
  });
@@ -1,2 +1,2 @@
1
1
  // TODO: Remove from `core-js@4`
2
- require('./es.string.match-all');
2
+ require('../modules/es.string.match-all');
@@ -1,2 +1,2 @@
1
1
  // TODO: Remove from `core-js@4`
2
- require('./es.string.replace-all');
2
+ require('../modules/es.string.replace-all');
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+ var aConstructor = require('../internals/a-constructor');
3
+ var arrayFromAsync = require('../internals/array-from-async');
4
+ var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');
5
+ var ArrayBufferViewCore = require('../internals/array-buffer-view-core');
6
+ var arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');
7
+
8
+ var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
9
+ var exportTypedArrayStaticMethod = ArrayBufferViewCore.exportTypedArrayStaticMethod;
10
+
11
+ // `%TypedArray%.fromAsync` method
12
+ // https://github.com/tc39/proposal-array-from-async
13
+ // eslint-disable-next-line -- required for .length
14
+ exportTypedArrayStaticMethod('fromAsync', function fromAsync(asyncItems /* , mapfn = undefined, thisArg = undefined */) {
15
+ var C = aConstructor(this);
16
+ return arrayFromAsync.apply(Array, arguments).then(function (list) {
17
+ return arrayFromConstructorAndList(aTypedArrayConstructor(C), list);
18
+ });
19
+ }, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);
@@ -1,15 +1,20 @@
1
1
  var global = require('../internals/global');
2
2
  var DOMIterables = require('../internals/dom-iterables');
3
+ var DOMTokenListPrototype = require('../internals/dom-token-list-prototype');
3
4
  var forEach = require('../internals/array-for-each');
4
5
  var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
5
6
 
6
- for (var COLLECTION_NAME in DOMIterables) {
7
- var Collection = global[COLLECTION_NAME];
8
- var CollectionPrototype = Collection && Collection.prototype;
7
+ var handlePrototype = function (CollectionPrototype) {
9
8
  // some Chrome versions have non-configurable methods on DOMTokenList
10
9
  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {
11
10
  createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);
12
11
  } catch (error) {
13
12
  CollectionPrototype.forEach = forEach;
14
13
  }
14
+ };
15
+
16
+ for (var COLLECTION_NAME in DOMIterables) {
17
+ handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);
15
18
  }
19
+
20
+ handlePrototype(DOMTokenListPrototype);
@@ -1,5 +1,6 @@
1
1
  var global = require('../internals/global');
2
2
  var DOMIterables = require('../internals/dom-iterables');
3
+ var DOMTokenListPrototype = require('../internals/dom-token-list-prototype');
3
4
  var ArrayIteratorMethods = require('../modules/es.array.iterator');
4
5
  var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
5
6
  var wellKnownSymbol = require('../internals/well-known-symbol');
@@ -8,9 +9,7 @@ var ITERATOR = wellKnownSymbol('iterator');
8
9
  var TO_STRING_TAG = wellKnownSymbol('toStringTag');
9
10
  var ArrayValues = ArrayIteratorMethods.values;
10
11
 
11
- for (var COLLECTION_NAME in DOMIterables) {
12
- var Collection = global[COLLECTION_NAME];
13
- var CollectionPrototype = Collection && Collection.prototype;
12
+ var handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {
14
13
  if (CollectionPrototype) {
15
14
  // some Chrome versions have non-configurable methods on DOMTokenList
16
15
  if (CollectionPrototype[ITERATOR] !== ArrayValues) try {
@@ -30,4 +29,10 @@ for (var COLLECTION_NAME in DOMIterables) {
30
29
  }
31
30
  }
32
31
  }
32
+ };
33
+
34
+ for (var COLLECTION_NAME in DOMIterables) {
35
+ handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);
33
36
  }
37
+
38
+ handlePrototype(DOMTokenListPrototype, 'DOMTokenList');
@@ -1,5 +1,6 @@
1
1
  var $ = require('../internals/export');
2
2
  var global = require('../internals/global');
3
+ var isCallable = require('../internals/is-callable');
3
4
  var userAgent = require('../internals/engine-user-agent');
4
5
 
5
6
  var slice = [].slice;
@@ -11,7 +12,7 @@ var wrap = function (scheduler) {
11
12
  var args = boundArgs ? slice.call(arguments, 2) : undefined;
12
13
  return scheduler(boundArgs ? function () {
13
14
  // eslint-disable-next-line no-new-func -- spec requirement
14
- (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);
15
+ (isCallable(handler) ? handler : Function(handler)).apply(this, args);
15
16
  } : handler, timeout);
16
17
  };
17
18
  };
@@ -10,6 +10,7 @@ var setToStringTag = require('../internals/set-to-string-tag');
10
10
  var createIteratorConstructor = require('../internals/create-iterator-constructor');
11
11
  var InternalStateModule = require('../internals/internal-state');
12
12
  var anInstance = require('../internals/an-instance');
13
+ var isCallable = require('../internals/is-callable');
13
14
  var hasOwn = require('../internals/has');
14
15
  var bind = require('../internals/function-bind-context');
15
16
  var classof = require('../internals/classof');
@@ -142,7 +143,7 @@ var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
142
143
  if (init !== undefined) {
143
144
  if (isObject(init)) {
144
145
  iteratorMethod = getIteratorMethod(init);
145
- if (typeof iteratorMethod === 'function') {
146
+ if (iteratorMethod) {
146
147
  iterator = getIterator(init, iteratorMethod);
147
148
  next = iterator.next;
148
149
  while (!(step = next.call(iterator)).done) {
@@ -298,7 +299,7 @@ redefineAll(URLSearchParamsPrototype, {
298
299
  }, { enumerable: true });
299
300
 
300
301
  // `URLSearchParams.prototype[@@iterator]` method
301
- redefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);
302
+ redefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' });
302
303
 
303
304
  // `URLSearchParams.prototype.toString` method
304
305
  // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
@@ -320,7 +321,7 @@ $({ global: true, forced: !USE_NATIVE_URL }, {
320
321
  });
321
322
 
322
323
  // Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`
323
- if (!USE_NATIVE_URL && typeof Headers == 'function') {
324
+ if (!USE_NATIVE_URL && isCallable(Headers)) {
324
325
  var wrapRequestOptions = function (init) {
325
326
  if (isObject(init)) {
326
327
  var body = init.body;
@@ -338,7 +339,7 @@ if (!USE_NATIVE_URL && typeof Headers == 'function') {
338
339
  } return init;
339
340
  };
340
341
 
341
- if (typeof nativeFetch == 'function') {
342
+ if (isCallable(nativeFetch)) {
342
343
  $({ global: true, enumerable: true, forced: true }, {
343
344
  fetch: function fetch(input /* , init */) {
344
345
  return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
@@ -346,7 +347,7 @@ if (!USE_NATIVE_URL && typeof Headers == 'function') {
346
347
  });
347
348
  }
348
349
 
349
- if (typeof NativeRequest == 'function') {
350
+ if (isCallable(NativeRequest)) {
350
351
  var RequestConstructor = function Request(input /* , init */) {
351
352
  anInstance(this, RequestConstructor, 'Request');
352
353
  return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
@@ -252,9 +252,9 @@ var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {
252
252
  '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1
253
253
  });
254
254
 
255
- var percentEncode = function (char, set) {
256
- var code = codeAt(char, 0);
257
- return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);
255
+ var percentEncode = function (chr, set) {
256
+ var code = codeAt(chr, 0);
257
+ return code > 0x20 && code < 0x7F && !has(set, chr) ? chr : encodeURIComponent(chr);
258
258
  };
259
259
 
260
260
  var specialSchemes = {
@@ -340,7 +340,7 @@ var parseURL = function (url, input, stateOverride, base) {
340
340
  var seenAt = false;
341
341
  var seenBracket = false;
342
342
  var seenPasswordToken = false;
343
- var codePoints, char, bufferCodePoints, failure;
343
+ var codePoints, chr, bufferCodePoints, failure;
344
344
 
345
345
  if (!stateOverride) {
346
346
  url.scheme = '';
@@ -360,11 +360,11 @@ var parseURL = function (url, input, stateOverride, base) {
360
360
  codePoints = arrayFrom(input);
361
361
 
362
362
  while (pointer <= codePoints.length) {
363
- char = codePoints[pointer];
363
+ chr = codePoints[pointer];
364
364
  switch (state) {
365
365
  case SCHEME_START:
366
- if (char && ALPHA.test(char)) {
367
- buffer += char.toLowerCase();
366
+ if (chr && ALPHA.test(chr)) {
367
+ buffer += chr.toLowerCase();
368
368
  state = SCHEME;
369
369
  } else if (!stateOverride) {
370
370
  state = NO_SCHEME;
@@ -373,9 +373,9 @@ var parseURL = function (url, input, stateOverride, base) {
373
373
  break;
374
374
 
375
375
  case SCHEME:
376
- if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {
377
- buffer += char.toLowerCase();
378
- } else if (char == ':') {
376
+ if (chr && (ALPHANUMERIC.test(chr) || chr == '+' || chr == '-' || chr == '.')) {
377
+ buffer += chr.toLowerCase();
378
+ } else if (chr == ':') {
379
379
  if (stateOverride && (
380
380
  (isSpecial(url) != has(specialSchemes, buffer)) ||
381
381
  (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||
@@ -410,8 +410,8 @@ var parseURL = function (url, input, stateOverride, base) {
410
410
  break;
411
411
 
412
412
  case NO_SCHEME:
413
- if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;
414
- if (base.cannotBeABaseURL && char == '#') {
413
+ if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;
414
+ if (base.cannotBeABaseURL && chr == '#') {
415
415
  url.scheme = base.scheme;
416
416
  url.path = base.path.slice();
417
417
  url.query = base.query;
@@ -424,7 +424,7 @@ var parseURL = function (url, input, stateOverride, base) {
424
424
  continue;
425
425
 
426
426
  case SPECIAL_RELATIVE_OR_AUTHORITY:
427
- if (char == '/' && codePoints[pointer + 1] == '/') {
427
+ if (chr == '/' && codePoints[pointer + 1] == '/') {
428
428
  state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
429
429
  pointer++;
430
430
  } else {
@@ -433,7 +433,7 @@ var parseURL = function (url, input, stateOverride, base) {
433
433
  } break;
434
434
 
435
435
  case PATH_OR_AUTHORITY:
436
- if (char == '/') {
436
+ if (chr == '/') {
437
437
  state = AUTHORITY;
438
438
  break;
439
439
  } else {
@@ -443,16 +443,16 @@ var parseURL = function (url, input, stateOverride, base) {
443
443
 
444
444
  case RELATIVE:
445
445
  url.scheme = base.scheme;
446
- if (char == EOF) {
446
+ if (chr == EOF) {
447
447
  url.username = base.username;
448
448
  url.password = base.password;
449
449
  url.host = base.host;
450
450
  url.port = base.port;
451
451
  url.path = base.path.slice();
452
452
  url.query = base.query;
453
- } else if (char == '/' || (char == '\\' && isSpecial(url))) {
453
+ } else if (chr == '/' || (chr == '\\' && isSpecial(url))) {
454
454
  state = RELATIVE_SLASH;
455
- } else if (char == '?') {
455
+ } else if (chr == '?') {
456
456
  url.username = base.username;
457
457
  url.password = base.password;
458
458
  url.host = base.host;
@@ -460,7 +460,7 @@ var parseURL = function (url, input, stateOverride, base) {
460
460
  url.path = base.path.slice();
461
461
  url.query = '';
462
462
  state = QUERY;
463
- } else if (char == '#') {
463
+ } else if (chr == '#') {
464
464
  url.username = base.username;
465
465
  url.password = base.password;
466
466
  url.host = base.host;
@@ -481,9 +481,9 @@ var parseURL = function (url, input, stateOverride, base) {
481
481
  } break;
482
482
 
483
483
  case RELATIVE_SLASH:
484
- if (isSpecial(url) && (char == '/' || char == '\\')) {
484
+ if (isSpecial(url) && (chr == '/' || chr == '\\')) {
485
485
  state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
486
- } else if (char == '/') {
486
+ } else if (chr == '/') {
487
487
  state = AUTHORITY;
488
488
  } else {
489
489
  url.username = base.username;
@@ -496,18 +496,18 @@ var parseURL = function (url, input, stateOverride, base) {
496
496
 
497
497
  case SPECIAL_AUTHORITY_SLASHES:
498
498
  state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
499
- if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;
499
+ if (chr != '/' || buffer.charAt(pointer + 1) != '/') continue;
500
500
  pointer++;
501
501
  break;
502
502
 
503
503
  case SPECIAL_AUTHORITY_IGNORE_SLASHES:
504
- if (char != '/' && char != '\\') {
504
+ if (chr != '/' && chr != '\\') {
505
505
  state = AUTHORITY;
506
506
  continue;
507
507
  } break;
508
508
 
509
509
  case AUTHORITY:
510
- if (char == '@') {
510
+ if (chr == '@') {
511
511
  if (seenAt) buffer = '%40' + buffer;
512
512
  seenAt = true;
513
513
  bufferCodePoints = arrayFrom(buffer);
@@ -523,14 +523,14 @@ var parseURL = function (url, input, stateOverride, base) {
523
523
  }
524
524
  buffer = '';
525
525
  } else if (
526
- char == EOF || char == '/' || char == '?' || char == '#' ||
527
- (char == '\\' && isSpecial(url))
526
+ chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
527
+ (chr == '\\' && isSpecial(url))
528
528
  ) {
529
529
  if (seenAt && buffer == '') return INVALID_AUTHORITY;
530
530
  pointer -= arrayFrom(buffer).length + 1;
531
531
  buffer = '';
532
532
  state = HOST;
533
- } else buffer += char;
533
+ } else buffer += chr;
534
534
  break;
535
535
 
536
536
  case HOST:
@@ -538,7 +538,7 @@ var parseURL = function (url, input, stateOverride, base) {
538
538
  if (stateOverride && url.scheme == 'file') {
539
539
  state = FILE_HOST;
540
540
  continue;
541
- } else if (char == ':' && !seenBracket) {
541
+ } else if (chr == ':' && !seenBracket) {
542
542
  if (buffer == '') return INVALID_HOST;
543
543
  failure = parseHost(url, buffer);
544
544
  if (failure) return failure;
@@ -546,8 +546,8 @@ var parseURL = function (url, input, stateOverride, base) {
546
546
  state = PORT;
547
547
  if (stateOverride == HOSTNAME) return;
548
548
  } else if (
549
- char == EOF || char == '/' || char == '?' || char == '#' ||
550
- (char == '\\' && isSpecial(url))
549
+ chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
550
+ (chr == '\\' && isSpecial(url))
551
551
  ) {
552
552
  if (isSpecial(url) && buffer == '') return INVALID_HOST;
553
553
  if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;
@@ -558,17 +558,17 @@ var parseURL = function (url, input, stateOverride, base) {
558
558
  if (stateOverride) return;
559
559
  continue;
560
560
  } else {
561
- if (char == '[') seenBracket = true;
562
- else if (char == ']') seenBracket = false;
563
- buffer += char;
561
+ if (chr == '[') seenBracket = true;
562
+ else if (chr == ']') seenBracket = false;
563
+ buffer += chr;
564
564
  } break;
565
565
 
566
566
  case PORT:
567
- if (DIGIT.test(char)) {
568
- buffer += char;
567
+ if (DIGIT.test(chr)) {
568
+ buffer += chr;
569
569
  } else if (
570
- char == EOF || char == '/' || char == '?' || char == '#' ||
571
- (char == '\\' && isSpecial(url)) ||
570
+ chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
571
+ (chr == '\\' && isSpecial(url)) ||
572
572
  stateOverride
573
573
  ) {
574
574
  if (buffer != '') {
@@ -585,18 +585,18 @@ var parseURL = function (url, input, stateOverride, base) {
585
585
 
586
586
  case FILE:
587
587
  url.scheme = 'file';
588
- if (char == '/' || char == '\\') state = FILE_SLASH;
588
+ if (chr == '/' || chr == '\\') state = FILE_SLASH;
589
589
  else if (base && base.scheme == 'file') {
590
- if (char == EOF) {
590
+ if (chr == EOF) {
591
591
  url.host = base.host;
592
592
  url.path = base.path.slice();
593
593
  url.query = base.query;
594
- } else if (char == '?') {
594
+ } else if (chr == '?') {
595
595
  url.host = base.host;
596
596
  url.path = base.path.slice();
597
597
  url.query = '';
598
598
  state = QUERY;
599
- } else if (char == '#') {
599
+ } else if (chr == '#') {
600
600
  url.host = base.host;
601
601
  url.path = base.path.slice();
602
602
  url.query = base.query;
@@ -617,7 +617,7 @@ var parseURL = function (url, input, stateOverride, base) {
617
617
  } break;
618
618
 
619
619
  case FILE_SLASH:
620
- if (char == '/' || char == '\\') {
620
+ if (chr == '/' || chr == '\\') {
621
621
  state = FILE_HOST;
622
622
  break;
623
623
  }
@@ -629,7 +629,7 @@ var parseURL = function (url, input, stateOverride, base) {
629
629
  continue;
630
630
 
631
631
  case FILE_HOST:
632
- if (char == EOF || char == '/' || char == '\\' || char == '?' || char == '#') {
632
+ if (chr == EOF || chr == '/' || chr == '\\' || chr == '?' || chr == '#') {
633
633
  if (!stateOverride && isWindowsDriveLetter(buffer)) {
634
634
  state = PATH;
635
635
  } else if (buffer == '') {
@@ -644,37 +644,37 @@ var parseURL = function (url, input, stateOverride, base) {
644
644
  buffer = '';
645
645
  state = PATH_START;
646
646
  } continue;
647
- } else buffer += char;
647
+ } else buffer += chr;
648
648
  break;
649
649
 
650
650
  case PATH_START:
651
651
  if (isSpecial(url)) {
652
652
  state = PATH;
653
- if (char != '/' && char != '\\') continue;
654
- } else if (!stateOverride && char == '?') {
653
+ if (chr != '/' && chr != '\\') continue;
654
+ } else if (!stateOverride && chr == '?') {
655
655
  url.query = '';
656
656
  state = QUERY;
657
- } else if (!stateOverride && char == '#') {
657
+ } else if (!stateOverride && chr == '#') {
658
658
  url.fragment = '';
659
659
  state = FRAGMENT;
660
- } else if (char != EOF) {
660
+ } else if (chr != EOF) {
661
661
  state = PATH;
662
- if (char != '/') continue;
662
+ if (chr != '/') continue;
663
663
  } break;
664
664
 
665
665
  case PATH:
666
666
  if (
667
- char == EOF || char == '/' ||
668
- (char == '\\' && isSpecial(url)) ||
669
- (!stateOverride && (char == '?' || char == '#'))
667
+ chr == EOF || chr == '/' ||
668
+ (chr == '\\' && isSpecial(url)) ||
669
+ (!stateOverride && (chr == '?' || chr == '#'))
670
670
  ) {
671
671
  if (isDoubleDot(buffer)) {
672
672
  shortenURLsPath(url);
673
- if (char != '/' && !(char == '\\' && isSpecial(url))) {
673
+ if (chr != '/' && !(chr == '\\' && isSpecial(url))) {
674
674
  url.path.push('');
675
675
  }
676
676
  } else if (isSingleDot(buffer)) {
677
- if (char != '/' && !(char == '\\' && isSpecial(url))) {
677
+ if (chr != '/' && !(chr == '\\' && isSpecial(url))) {
678
678
  url.path.push('');
679
679
  }
680
680
  } else {
@@ -685,45 +685,45 @@ var parseURL = function (url, input, stateOverride, base) {
685
685
  url.path.push(buffer);
686
686
  }
687
687
  buffer = '';
688
- if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {
688
+ if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {
689
689
  while (url.path.length > 1 && url.path[0] === '') {
690
690
  url.path.shift();
691
691
  }
692
692
  }
693
- if (char == '?') {
693
+ if (chr == '?') {
694
694
  url.query = '';
695
695
  state = QUERY;
696
- } else if (char == '#') {
696
+ } else if (chr == '#') {
697
697
  url.fragment = '';
698
698
  state = FRAGMENT;
699
699
  }
700
700
  } else {
701
- buffer += percentEncode(char, pathPercentEncodeSet);
701
+ buffer += percentEncode(chr, pathPercentEncodeSet);
702
702
  } break;
703
703
 
704
704
  case CANNOT_BE_A_BASE_URL_PATH:
705
- if (char == '?') {
705
+ if (chr == '?') {
706
706
  url.query = '';
707
707
  state = QUERY;
708
- } else if (char == '#') {
708
+ } else if (chr == '#') {
709
709
  url.fragment = '';
710
710
  state = FRAGMENT;
711
- } else if (char != EOF) {
712
- url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);
711
+ } else if (chr != EOF) {
712
+ url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);
713
713
  } break;
714
714
 
715
715
  case QUERY:
716
- if (!stateOverride && char == '#') {
716
+ if (!stateOverride && chr == '#') {
717
717
  url.fragment = '';
718
718
  state = FRAGMENT;
719
- } else if (char != EOF) {
720
- if (char == "'" && isSpecial(url)) url.query += '%27';
721
- else if (char == '#') url.query += '%23';
722
- else url.query += percentEncode(char, C0ControlPercentEncodeSet);
719
+ } else if (chr != EOF) {
720
+ if (chr == "'" && isSpecial(url)) url.query += '%27';
721
+ else if (chr == '#') url.query += '%23';
722
+ else url.query += percentEncode(chr, C0ControlPercentEncodeSet);
723
723
  } break;
724
724
 
725
725
  case FRAGMENT:
726
- if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);
726
+ if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);
727
727
  break;
728
728
  }
729
729