core-js 3.18.2 → 3.19.2

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 (334) hide show
  1. package/es/date/to-primitive.js +2 -3
  2. package/es/date/to-string.js +2 -4
  3. package/es/instance/at.js +6 -5
  4. package/es/instance/bind.js +3 -2
  5. package/es/instance/code-point-at.js +4 -3
  6. package/es/instance/concat.js +3 -2
  7. package/es/instance/copy-within.js +3 -2
  8. package/es/instance/ends-with.js +4 -3
  9. package/es/instance/entries.js +3 -2
  10. package/es/instance/every.js +3 -2
  11. package/es/instance/fill.js +3 -2
  12. package/es/instance/filter.js +3 -2
  13. package/es/instance/find-index.js +3 -2
  14. package/es/instance/find.js +3 -2
  15. package/es/instance/flags.js +2 -1
  16. package/es/instance/flat-map.js +3 -2
  17. package/es/instance/flat.js +3 -2
  18. package/es/instance/for-each.js +3 -2
  19. package/es/instance/includes.js +6 -5
  20. package/es/instance/index-of.js +3 -2
  21. package/es/instance/keys.js +3 -2
  22. package/es/instance/last-index-of.js +3 -2
  23. package/es/instance/map.js +3 -2
  24. package/es/instance/match-all.js +4 -3
  25. package/es/instance/pad-end.js +4 -3
  26. package/es/instance/pad-start.js +4 -3
  27. package/es/instance/reduce-right.js +3 -2
  28. package/es/instance/reduce.js +3 -2
  29. package/es/instance/repeat.js +4 -3
  30. package/es/instance/replace-all.js +4 -3
  31. package/es/instance/reverse.js +3 -2
  32. package/es/instance/slice.js +3 -2
  33. package/es/instance/some.js +3 -2
  34. package/es/instance/sort.js +3 -2
  35. package/es/instance/splice.js +3 -2
  36. package/es/instance/starts-with.js +4 -3
  37. package/es/instance/trim-end.js +4 -3
  38. package/es/instance/trim-left.js +4 -3
  39. package/es/instance/trim-right.js +4 -3
  40. package/es/instance/trim-start.js +4 -3
  41. package/es/instance/trim.js +4 -3
  42. package/es/instance/values.js +3 -2
  43. package/es/json/stringify.js +4 -3
  44. package/es/promise/all-settled.js +2 -1
  45. package/es/promise/any.js +2 -1
  46. package/es/regexp/flags.js +3 -4
  47. package/es/regexp/match.js +2 -1
  48. package/es/regexp/replace.js +2 -1
  49. package/es/regexp/search.js +2 -1
  50. package/es/regexp/split.js +2 -1
  51. package/es/regexp/test.js +2 -3
  52. package/es/regexp/to-string.js +2 -3
  53. package/es/string/iterator.js +2 -5
  54. package/features/instance/at.js +6 -5
  55. package/features/instance/code-points.js +4 -3
  56. package/features/instance/filter-out.js +3 -2
  57. package/features/instance/filter-reject.js +3 -2
  58. package/features/instance/find-last-index.js +3 -2
  59. package/features/instance/find-last.js +3 -2
  60. package/features/instance/group-by.js +3 -2
  61. package/features/instance/unique-by.js +3 -2
  62. package/features/map/from.js +3 -2
  63. package/features/map/group-by.js +2 -1
  64. package/features/map/key-by.js +2 -1
  65. package/features/map/of.js +3 -2
  66. package/features/promise/try.js +2 -1
  67. package/features/set/from.js +3 -2
  68. package/features/set/of.js +3 -2
  69. package/features/weak-map/from.js +3 -2
  70. package/features/weak-map/of.js +3 -2
  71. package/features/weak-set/from.js +3 -2
  72. package/features/weak-set/of.js +3 -2
  73. package/internals/a-callable.js +3 -0
  74. package/internals/a-constructor.js +3 -0
  75. package/internals/a-possible-prototype.js +5 -1
  76. package/internals/an-instance.js +8 -3
  77. package/internals/an-object.js +4 -0
  78. package/internals/array-buffer-native.js +1 -1
  79. package/internals/array-buffer-non-extensible.js +10 -0
  80. package/internals/array-buffer-view-core.js +3 -2
  81. package/internals/array-buffer.js +29 -16
  82. package/internals/array-from-async.js +1 -1
  83. package/internals/array-from.js +6 -2
  84. package/internals/array-group-by.js +6 -3
  85. package/internals/array-iteration-from-last.js +1 -1
  86. package/internals/array-iteration.js +5 -4
  87. package/internals/array-last-index-of.js +2 -1
  88. package/internals/array-reduce.js +3 -0
  89. package/internals/array-slice-simple.js +17 -0
  90. package/internals/array-slice.js +3 -0
  91. package/internals/array-sort.js +10 -11
  92. package/internals/array-species-constructor.js +2 -0
  93. package/internals/array-unique-by.js +13 -9
  94. package/internals/async-from-sync-iterator.js +4 -3
  95. package/internals/async-iterator-create-proxy.js +4 -3
  96. package/internals/async-iterator-iteration.js +5 -2
  97. package/internals/classof-raw.js +5 -2
  98. package/internals/classof.js +3 -0
  99. package/internals/clear-error-stack.js +20 -0
  100. package/internals/collection-add-all.js +3 -2
  101. package/internals/collection-delete-all.js +3 -2
  102. package/internals/collection-from.js +7 -4
  103. package/internals/collection-of.js +3 -4
  104. package/internals/collection-strong.js +11 -9
  105. package/internals/collection-weak.js +10 -6
  106. package/internals/collection.js +8 -7
  107. package/internals/composite-key.js +9 -2
  108. package/internals/create-html.js +3 -1
  109. package/internals/date-to-iso-string.js +23 -13
  110. package/internals/date-to-primitive.js +3 -0
  111. package/internals/define-iterator.js +2 -1
  112. package/internals/engine-v8-version.js +10 -4
  113. package/internals/entry-unbind.js +3 -5
  114. package/internals/error-stack-installable.js +10 -0
  115. package/internals/export.js +1 -1
  116. package/internals/fix-regexp-well-known-symbol-logic.js +5 -3
  117. package/internals/flatten-into-array.js +4 -1
  118. package/internals/function-apply.js +9 -0
  119. package/internals/function-bind-context.js +5 -17
  120. package/internals/function-bind.js +15 -9
  121. package/internals/function-call.js +5 -0
  122. package/internals/function-uncurry-this.js +12 -0
  123. package/internals/get-async-iterator.js +2 -1
  124. package/internals/get-iterator.js +7 -2
  125. package/internals/get-map-iterator.js +3 -1
  126. package/internals/get-set-iterator.js +3 -1
  127. package/internals/get-substitution.js +10 -7
  128. package/internals/has-own-property.js +3 -2
  129. package/internals/host-report-errors.js +1 -1
  130. package/internals/ieee754.js +24 -6
  131. package/internals/indexed-object.js +5 -2
  132. package/internals/inspect-source.js +3 -2
  133. package/internals/install-error-cause.js +1 -1
  134. package/internals/internal-metadata.js +4 -7
  135. package/internals/internal-state.js +9 -7
  136. package/internals/is-callable.js +1 -1
  137. package/internals/is-constructor.js +6 -4
  138. package/internals/is-iterable.js +4 -2
  139. package/internals/is-object.js +1 -1
  140. package/internals/is-symbol.js +6 -2
  141. package/internals/iterate.js +14 -6
  142. package/internals/iterator-close.js +2 -1
  143. package/internals/iterator-create-proxy.js +4 -3
  144. package/internals/map-emplace.js +8 -3
  145. package/internals/map-upsert.js +12 -4
  146. package/internals/math-scale.js +9 -12
  147. package/internals/microtask.js +6 -4
  148. package/internals/normalize-string-argument.js +5 -0
  149. package/internals/not-a-regexp.js +3 -0
  150. package/internals/number-parse-float.js +8 -6
  151. package/internals/number-parse-int.js +4 -2
  152. package/internals/numeric-range-iterator.js +4 -0
  153. package/internals/object-assign.js +5 -2
  154. package/internals/object-define-properties.js +3 -1
  155. package/internals/object-define-property.js +2 -0
  156. package/internals/object-get-own-property-descriptor.js +2 -1
  157. package/internals/object-get-own-property-names-external.js +4 -4
  158. package/internals/object-get-prototype-of.js +2 -1
  159. package/internals/object-is-extensible.js +16 -0
  160. package/internals/object-is-prototype-of.js +3 -0
  161. package/internals/object-keys-internal.js +5 -2
  162. package/internals/object-set-prototype-of.js +4 -3
  163. package/internals/object-to-array.js +7 -3
  164. package/internals/ordinary-to-primitive.js +7 -3
  165. package/internals/own-keys.js +4 -1
  166. package/internals/reflect-metadata.js +9 -3
  167. package/internals/regexp-exec-abstract.js +6 -2
  168. package/internals/regexp-exec.js +20 -16
  169. package/internals/regexp-sticky-helpers.js +14 -2
  170. package/internals/require-object-coercible.js +4 -0
  171. package/internals/set-global.js +4 -2
  172. package/internals/shared.js +1 -1
  173. package/internals/string-multibyte.js +13 -4
  174. package/internals/string-pad.js +6 -3
  175. package/internals/string-punycode-to-ascii.js +34 -20
  176. package/internals/string-repeat.js +3 -0
  177. package/internals/string-trim.js +4 -2
  178. package/internals/task.js +11 -11
  179. package/internals/this-number-value.js +2 -4
  180. package/internals/to-index.js +3 -0
  181. package/internals/to-object.js +3 -0
  182. package/internals/to-offset.js +3 -0
  183. package/internals/to-positive-integer.js +3 -0
  184. package/internals/to-primitive.js +4 -1
  185. package/internals/to-property-key.js +1 -1
  186. package/internals/to-string.js +3 -0
  187. package/internals/try-to-string.js +4 -0
  188. package/internals/typed-array-constructor.js +10 -6
  189. package/internals/typed-array-from.js +4 -3
  190. package/internals/uid.js +4 -1
  191. package/internals/well-known-symbol.js +5 -1
  192. package/modules/es.aggregate-error.js +27 -11
  193. package/modules/es.array-buffer.slice.js +8 -4
  194. package/modules/es.array.concat.js +2 -0
  195. package/modules/es.array.index-of.js +7 -5
  196. package/modules/es.array.join.js +3 -2
  197. package/modules/es.array.of.js +3 -1
  198. package/modules/es.array.reduce.js +2 -1
  199. package/modules/es.array.reverse.js +3 -2
  200. package/modules/es.array.slice.js +4 -2
  201. package/modules/es.array.sort.js +7 -4
  202. package/modules/es.array.splice.js +2 -0
  203. package/modules/es.date.get-year.js +3 -2
  204. package/modules/es.date.now.js +6 -1
  205. package/modules/es.date.set-year.js +6 -4
  206. package/modules/es.date.to-primitive.js +2 -1
  207. package/modules/es.date.to-string.js +5 -4
  208. package/modules/es.escape.js +12 -5
  209. package/modules/es.function.has-instance.js +3 -2
  210. package/modules/es.function.name.js +5 -3
  211. package/modules/es.json.stringify.js +18 -7
  212. package/modules/es.map.js +1 -1
  213. package/modules/es.number.constructor.js +12 -7
  214. package/modules/es.number.to-fixed.js +19 -13
  215. package/modules/es.number.to-precision.js +6 -5
  216. package/modules/es.object.is-extensible.js +4 -10
  217. package/modules/es.object.is-frozen.js +6 -2
  218. package/modules/es.object.is-sealed.js +6 -2
  219. package/modules/es.promise.all-settled.js +2 -2
  220. package/modules/es.promise.any.js +5 -4
  221. package/modules/es.promise.js +22 -18
  222. package/modules/es.reflect.apply.js +4 -10
  223. package/modules/es.reflect.construct.js +10 -5
  224. package/modules/es.reflect.get.js +2 -1
  225. package/modules/es.reflect.is-extensible.js +2 -4
  226. package/modules/es.reflect.set.js +2 -1
  227. package/modules/es.regexp.constructor.js +26 -16
  228. package/modules/es.regexp.dot-all.js +5 -1
  229. package/modules/es.regexp.flags.js +4 -2
  230. package/modules/es.regexp.sticky.js +7 -3
  231. package/modules/es.regexp.test.js +7 -3
  232. package/modules/es.regexp.to-string.js +8 -5
  233. package/modules/es.set.js +1 -1
  234. package/modules/es.string.at-alternative.js +4 -1
  235. package/modules/es.string.ends-with.js +6 -4
  236. package/modules/es.string.from-code-point.js +7 -4
  237. package/modules/es.string.includes.js +8 -2
  238. package/modules/es.string.match-all.js +25 -19
  239. package/modules/es.string.match.js +2 -1
  240. package/modules/es.string.raw.js +6 -6
  241. package/modules/es.string.replace-all.js +19 -13
  242. package/modules/es.string.replace.js +19 -12
  243. package/modules/es.string.search.js +2 -1
  244. package/modules/es.string.split.js +23 -16
  245. package/modules/es.string.starts-with.js +6 -4
  246. package/modules/es.string.substr.js +3 -2
  247. package/modules/es.symbol.description.js +20 -12
  248. package/modules/es.symbol.js +34 -21
  249. package/modules/es.typed-array.copy-within.js +4 -2
  250. package/modules/es.typed-array.fill.js +9 -2
  251. package/modules/es.typed-array.iterator.js +7 -6
  252. package/modules/es.typed-array.join.js +3 -3
  253. package/modules/es.typed-array.last-index-of.js +3 -2
  254. package/modules/es.typed-array.reduce-right.js +2 -1
  255. package/modules/es.typed-array.reduce.js +2 -1
  256. package/modules/es.typed-array.set.js +2 -0
  257. package/modules/es.typed-array.slice.js +2 -2
  258. package/modules/es.typed-array.sort.js +13 -28
  259. package/modules/es.typed-array.to-locale-string.js +7 -2
  260. package/modules/es.typed-array.to-string.js +3 -2
  261. package/modules/es.unescape.js +14 -9
  262. package/modules/es.weak-map.js +15 -15
  263. package/modules/esnext.array.is-template-object.js +1 -1
  264. package/modules/esnext.async-iterator.as-indexed-pairs.js +2 -1
  265. package/modules/esnext.async-iterator.constructor.js +1 -1
  266. package/modules/esnext.async-iterator.drop.js +2 -1
  267. package/modules/esnext.async-iterator.filter.js +2 -1
  268. package/modules/esnext.async-iterator.flat-map.js +3 -2
  269. package/modules/esnext.async-iterator.from.js +4 -4
  270. package/modules/esnext.async-iterator.map.js +2 -1
  271. package/modules/esnext.async-iterator.reduce.js +4 -1
  272. package/modules/esnext.async-iterator.take.js +4 -2
  273. package/modules/esnext.composite-key.js +5 -1
  274. package/modules/esnext.composite-symbol.js +3 -2
  275. package/modules/esnext.iterator.as-indexed-pairs.js +2 -1
  276. package/modules/esnext.iterator.constructor.js +1 -1
  277. package/modules/esnext.iterator.drop.js +4 -2
  278. package/modules/esnext.iterator.filter.js +2 -1
  279. package/modules/esnext.iterator.flat-map.js +7 -3
  280. package/modules/esnext.iterator.from.js +4 -4
  281. package/modules/esnext.iterator.map.js +2 -1
  282. package/modules/esnext.iterator.reduce.js +3 -0
  283. package/modules/esnext.iterator.take.js +2 -1
  284. package/modules/esnext.map.delete-all.js +2 -4
  285. package/modules/esnext.map.emplace.js +2 -2
  286. package/modules/esnext.map.every.js +1 -1
  287. package/modules/esnext.map.filter.js +5 -4
  288. package/modules/esnext.map.find-key.js +1 -1
  289. package/modules/esnext.map.find.js +1 -1
  290. package/modules/esnext.map.group-by.js +6 -2
  291. package/modules/esnext.map.includes.js +1 -1
  292. package/modules/esnext.map.key-by.js +2 -1
  293. package/modules/esnext.map.map-keys.js +5 -4
  294. package/modules/esnext.map.map-values.js +5 -4
  295. package/modules/esnext.map.reduce.js +3 -0
  296. package/modules/esnext.map.some.js +1 -1
  297. package/modules/esnext.map.update-or-insert.js +2 -2
  298. package/modules/esnext.map.update.js +11 -4
  299. package/modules/esnext.map.upsert.js +2 -2
  300. package/modules/esnext.math.seeded-prng.js +3 -1
  301. package/modules/esnext.number.from-string.js +12 -3
  302. package/modules/esnext.observable.js +14 -9
  303. package/modules/esnext.reflect.get-metadata-keys.js +5 -10
  304. package/modules/esnext.set.add-all.js +2 -4
  305. package/modules/esnext.set.delete-all.js +2 -4
  306. package/modules/esnext.set.difference.js +3 -2
  307. package/modules/esnext.set.every.js +1 -1
  308. package/modules/esnext.set.filter.js +4 -3
  309. package/modules/esnext.set.find.js +1 -1
  310. package/modules/esnext.set.intersection.js +3 -2
  311. package/modules/esnext.set.is-disjoint-from.js +3 -2
  312. package/modules/esnext.set.is-subset-of.js +3 -2
  313. package/modules/esnext.set.is-superset-of.js +3 -2
  314. package/modules/esnext.set.join.js +9 -4
  315. package/modules/esnext.set.map.js +5 -4
  316. package/modules/esnext.set.reduce.js +3 -0
  317. package/modules/esnext.set.some.js +1 -1
  318. package/modules/esnext.set.symmetric-difference.js +3 -2
  319. package/modules/esnext.typed-array.from-async.js +0 -1
  320. package/modules/esnext.typed-array.unique-by.js +4 -2
  321. package/modules/esnext.weak-map.delete-all.js +2 -4
  322. package/modules/esnext.weak-map.emplace.js +2 -2
  323. package/modules/esnext.weak-map.upsert.js +2 -2
  324. package/modules/esnext.weak-set.add-all.js +2 -4
  325. package/modules/esnext.weak-set.delete-all.js +2 -4
  326. package/modules/web.timers.js +5 -4
  327. package/modules/web.url-search-params.js +122 -104
  328. package/modules/web.url.js +664 -628
  329. package/modules/web.url.to-json.js +2 -1
  330. package/package.json +2 -2
  331. package/stable/instance/entries.js +6 -4
  332. package/stable/instance/for-each.js +6 -4
  333. package/stable/instance/keys.js +6 -4
  334. package/stable/instance/values.js +6 -4
@@ -2,7 +2,10 @@
2
2
  // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
3
3
  require('../modules/es.array.iterator');
4
4
  var $ = require('../internals/export');
5
+ var global = require('../internals/global');
5
6
  var getBuiltIn = require('../internals/get-built-in');
7
+ var call = require('../internals/function-call');
8
+ var uncurryThis = require('../internals/function-uncurry-this');
6
9
  var USE_NATIVE_URL = require('../internals/native-url');
7
10
  var redefine = require('../internals/redefine');
8
11
  var redefineAll = require('../internals/redefine-all');
@@ -22,11 +25,8 @@ var createPropertyDescriptor = require('../internals/create-property-descriptor'
22
25
  var getIterator = require('../internals/get-iterator');
23
26
  var getIteratorMethod = require('../internals/get-iterator-method');
24
27
  var wellKnownSymbol = require('../internals/well-known-symbol');
28
+ var arraySort = require('../internals/array-sort');
25
29
 
26
- var nativeFetch = getBuiltIn('fetch');
27
- var NativeRequest = getBuiltIn('Request');
28
- var RequestPrototype = NativeRequest && NativeRequest.prototype;
29
- var Headers = getBuiltIn('Headers');
30
30
  var ITERATOR = wellKnownSymbol('iterator');
31
31
  var URL_SEARCH_PARAMS = 'URLSearchParams';
32
32
  var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';
@@ -34,6 +34,24 @@ var setInternalState = InternalStateModule.set;
34
34
  var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);
35
35
  var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);
36
36
 
37
+ var n$Fetch = getBuiltIn('fetch');
38
+ var N$Request = getBuiltIn('Request');
39
+ var Headers = getBuiltIn('Headers');
40
+ var RequestPrototype = N$Request && N$Request.prototype;
41
+ var HeadersPrototype = Headers && Headers.prototype;
42
+ var RegExp = global.RegExp;
43
+ var TypeError = global.TypeError;
44
+ var decodeURIComponent = global.decodeURIComponent;
45
+ var encodeURIComponent = global.encodeURIComponent;
46
+ var charAt = uncurryThis(''.charAt);
47
+ var join = uncurryThis([].join);
48
+ var push = uncurryThis([].push);
49
+ var replace = uncurryThis(''.replace);
50
+ var shift = uncurryThis([].shift);
51
+ var splice = uncurryThis([].splice);
52
+ var split = uncurryThis(''.split);
53
+ var stringSlice = uncurryThis(''.slice);
54
+
37
55
  var plus = /\+/g;
38
56
  var sequences = Array(4);
39
57
 
@@ -50,13 +68,13 @@ var percentDecode = function (sequence) {
50
68
  };
51
69
 
52
70
  var deserialize = function (it) {
53
- var result = it.replace(plus, ' ');
71
+ var result = replace(it, plus, ' ');
54
72
  var bytes = 4;
55
73
  try {
56
74
  return decodeURIComponent(result);
57
75
  } catch (error) {
58
76
  while (bytes) {
59
- result = result.replace(percentSequence(bytes--), percentDecode);
77
+ result = replace(result, percentSequence(bytes--), percentDecode);
60
78
  }
61
79
  return result;
62
80
  }
@@ -64,7 +82,7 @@ var deserialize = function (it) {
64
82
 
65
83
  var find = /[!'()~]|%20/g;
66
84
 
67
- var replace = {
85
+ var replacements = {
68
86
  '!': '%21',
69
87
  "'": '%27',
70
88
  '(': '%28',
@@ -74,34 +92,11 @@ var replace = {
74
92
  };
75
93
 
76
94
  var replacer = function (match) {
77
- return replace[match];
95
+ return replacements[match];
78
96
  };
79
97
 
80
98
  var serialize = function (it) {
81
- return encodeURIComponent(it).replace(find, replacer);
82
- };
83
-
84
- var parseSearchParams = function (result, query) {
85
- if (query) {
86
- var attributes = query.split('&');
87
- var index = 0;
88
- var attribute, entry;
89
- while (index < attributes.length) {
90
- attribute = attributes[index++];
91
- if (attribute.length) {
92
- entry = attribute.split('=');
93
- result.push({
94
- key: deserialize(entry.shift()),
95
- value: deserialize(entry.join('='))
96
- });
97
- }
98
- }
99
- }
100
- };
101
-
102
- var updateSearchParams = function (query) {
103
- this.entries.length = 0;
104
- parseSearchParams(this.entries, query);
99
+ return replace(encodeURIComponent(it), find, replacer);
105
100
  };
106
101
 
107
102
  var validateArgumentsLength = function (passed, required) {
@@ -124,48 +119,87 @@ var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params
124
119
  } return step;
125
120
  });
126
121
 
127
- // `URLSearchParams` constructor
128
- // https://url.spec.whatwg.org/#interface-urlsearchparams
129
- var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
130
- anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);
131
- var init = arguments.length > 0 ? arguments[0] : undefined;
132
- var that = this;
133
- var entries = [];
134
- var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;
135
-
136
- setInternalState(that, {
137
- type: URL_SEARCH_PARAMS,
138
- entries: entries,
139
- updateURL: function () { /* empty */ },
140
- updateSearchParams: updateSearchParams
141
- });
122
+ var URLSearchParamsState = function (init) {
123
+ this.entries = [];
124
+ this.url = null;
142
125
 
143
126
  if (init !== undefined) {
144
- if (isObject(init)) {
145
- iteratorMethod = getIteratorMethod(init);
146
- if (iteratorMethod) {
147
- iterator = getIterator(init, iteratorMethod);
148
- next = iterator.next;
149
- while (!(step = next.call(iterator)).done) {
150
- entryIterator = getIterator(anObject(step.value));
151
- entryNext = entryIterator.next;
152
- if (
153
- (first = entryNext.call(entryIterator)).done ||
154
- (second = entryNext.call(entryIterator)).done ||
155
- !entryNext.call(entryIterator).done
156
- ) throw TypeError('Expected sequence with length 2');
157
- entries.push({ key: $toString(first.value), value: $toString(second.value) });
127
+ if (isObject(init)) this.parseObject(init);
128
+ else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init));
129
+ }
130
+ };
131
+
132
+ URLSearchParamsState.prototype = {
133
+ type: URL_SEARCH_PARAMS,
134
+ bindURL: function (url) {
135
+ this.url = url;
136
+ this.update();
137
+ },
138
+ parseObject: function (object) {
139
+ var iteratorMethod = getIteratorMethod(object);
140
+ var iterator, next, step, entryIterator, entryNext, first, second;
141
+
142
+ if (iteratorMethod) {
143
+ iterator = getIterator(object, iteratorMethod);
144
+ next = iterator.next;
145
+ while (!(step = call(next, iterator)).done) {
146
+ entryIterator = getIterator(anObject(step.value));
147
+ entryNext = entryIterator.next;
148
+ if (
149
+ (first = call(entryNext, entryIterator)).done ||
150
+ (second = call(entryNext, entryIterator)).done ||
151
+ !call(entryNext, entryIterator).done
152
+ ) throw TypeError('Expected sequence with length 2');
153
+ push(this.entries, { key: $toString(first.value), value: $toString(second.value) });
154
+ }
155
+ } else for (var key in object) if (hasOwn(object, key)) {
156
+ push(this.entries, { key: key, value: $toString(object[key]) });
157
+ }
158
+ },
159
+ parseQuery: function (query) {
160
+ if (query) {
161
+ var attributes = split(query, '&');
162
+ var index = 0;
163
+ var attribute, entry;
164
+ while (index < attributes.length) {
165
+ attribute = attributes[index++];
166
+ if (attribute.length) {
167
+ entry = split(attribute, '=');
168
+ push(this.entries, {
169
+ key: deserialize(shift(entry)),
170
+ value: deserialize(join(entry, '='))
171
+ });
158
172
  }
159
- } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: $toString(init[key]) });
160
- } else {
161
- parseSearchParams(
162
- entries,
163
- typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : $toString(init)
164
- );
173
+ }
165
174
  }
175
+ },
176
+ serialize: function () {
177
+ var entries = this.entries;
178
+ var result = [];
179
+ var index = 0;
180
+ var entry;
181
+ while (index < entries.length) {
182
+ entry = entries[index++];
183
+ push(result, serialize(entry.key) + '=' + serialize(entry.value));
184
+ } return join(result, '&');
185
+ },
186
+ update: function () {
187
+ this.entries.length = 0;
188
+ this.parseQuery(this.url.query);
189
+ },
190
+ updateURL: function () {
191
+ if (this.url) this.url.update();
166
192
  }
167
193
  };
168
194
 
195
+ // `URLSearchParams` constructor
196
+ // https://url.spec.whatwg.org/#interface-urlsearchparams
197
+ var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
198
+ anInstance(this, URLSearchParamsPrototype);
199
+ var init = arguments.length > 0 ? arguments[0] : undefined;
200
+ setInternalState(this, new URLSearchParamsState(init));
201
+ };
202
+
169
203
  var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;
170
204
 
171
205
  redefineAll(URLSearchParamsPrototype, {
@@ -174,7 +208,7 @@ redefineAll(URLSearchParamsPrototype, {
174
208
  append: function append(name, value) {
175
209
  validateArgumentsLength(arguments.length, 2);
176
210
  var state = getInternalParamsState(this);
177
- state.entries.push({ key: $toString(name), value: $toString(value) });
211
+ push(state.entries, { key: $toString(name), value: $toString(value) });
178
212
  state.updateURL();
179
213
  },
180
214
  // `URLSearchParams.prototype.delete` method
@@ -186,7 +220,7 @@ redefineAll(URLSearchParamsPrototype, {
186
220
  var key = $toString(name);
187
221
  var index = 0;
188
222
  while (index < entries.length) {
189
- if (entries[index].key === key) entries.splice(index, 1);
223
+ if (entries[index].key === key) splice(entries, index, 1);
190
224
  else index++;
191
225
  }
192
226
  state.updateURL();
@@ -212,7 +246,7 @@ redefineAll(URLSearchParamsPrototype, {
212
246
  var result = [];
213
247
  var index = 0;
214
248
  for (; index < entries.length; index++) {
215
- if (entries[index].key === key) result.push(entries[index].value);
249
+ if (entries[index].key === key) push(result, entries[index].value);
216
250
  }
217
251
  return result;
218
252
  },
@@ -242,41 +276,29 @@ redefineAll(URLSearchParamsPrototype, {
242
276
  for (; index < entries.length; index++) {
243
277
  entry = entries[index];
244
278
  if (entry.key === key) {
245
- if (found) entries.splice(index--, 1);
279
+ if (found) splice(entries, index--, 1);
246
280
  else {
247
281
  found = true;
248
282
  entry.value = val;
249
283
  }
250
284
  }
251
285
  }
252
- if (!found) entries.push({ key: key, value: val });
286
+ if (!found) push(entries, { key: key, value: val });
253
287
  state.updateURL();
254
288
  },
255
289
  // `URLSearchParams.prototype.sort` method
256
290
  // https://url.spec.whatwg.org/#dom-urlsearchparams-sort
257
291
  sort: function sort() {
258
292
  var state = getInternalParamsState(this);
259
- var entries = state.entries;
260
- // Array#sort is not stable in some engines
261
- var slice = entries.slice();
262
- var entry, entriesIndex, sliceIndex;
263
- entries.length = 0;
264
- for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {
265
- entry = slice[sliceIndex];
266
- for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {
267
- if (entries[entriesIndex].key > entry.key) {
268
- entries.splice(entriesIndex, 0, entry);
269
- break;
270
- }
271
- }
272
- if (entriesIndex === sliceIndex) entries.push(entry);
273
- }
293
+ arraySort(state.entries, function (a, b) {
294
+ return a.key > b.key ? 1 : -1;
295
+ });
274
296
  state.updateURL();
275
297
  },
276
298
  // `URLSearchParams.prototype.forEach` method
277
299
  forEach: function forEach(callback /* , thisArg */) {
278
300
  var entries = getInternalParamsState(this).entries;
279
- var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);
301
+ var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined);
280
302
  var index = 0;
281
303
  var entry;
282
304
  while (index < entries.length) {
@@ -304,14 +326,7 @@ redefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, {
304
326
  // `URLSearchParams.prototype.toString` method
305
327
  // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
306
328
  redefine(URLSearchParamsPrototype, 'toString', function toString() {
307
- var entries = getInternalParamsState(this).entries;
308
- var result = [];
309
- var index = 0;
310
- var entry;
311
- while (index < entries.length) {
312
- entry = entries[index++];
313
- result.push(serialize(entry.key) + '=' + serialize(entry.value));
314
- } return result.join('&');
329
+ return getInternalParamsState(this).serialize();
315
330
  }, { enumerable: true });
316
331
 
317
332
  setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);
@@ -322,35 +337,38 @@ $({ global: true, forced: !USE_NATIVE_URL }, {
322
337
 
323
338
  // Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`
324
339
  if (!USE_NATIVE_URL && isCallable(Headers)) {
340
+ var headersHas = uncurryThis(HeadersPrototype.has);
341
+ var headersSet = uncurryThis(HeadersPrototype.set);
342
+
325
343
  var wrapRequestOptions = function (init) {
326
344
  if (isObject(init)) {
327
345
  var body = init.body;
328
346
  var headers;
329
347
  if (classof(body) === URL_SEARCH_PARAMS) {
330
348
  headers = init.headers ? new Headers(init.headers) : new Headers();
331
- if (!headers.has('content-type')) {
332
- headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
349
+ if (!headersHas(headers, 'content-type')) {
350
+ headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
333
351
  }
334
352
  return create(init, {
335
- body: createPropertyDescriptor(0, String(body)),
353
+ body: createPropertyDescriptor(0, $toString(body)),
336
354
  headers: createPropertyDescriptor(0, headers)
337
355
  });
338
356
  }
339
357
  } return init;
340
358
  };
341
359
 
342
- if (isCallable(nativeFetch)) {
360
+ if (isCallable(n$Fetch)) {
343
361
  $({ global: true, enumerable: true, forced: true }, {
344
362
  fetch: function fetch(input /* , init */) {
345
- return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
363
+ return n$Fetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
346
364
  }
347
365
  });
348
366
  }
349
367
 
350
- if (isCallable(NativeRequest)) {
368
+ if (isCallable(N$Request)) {
351
369
  var RequestConstructor = function Request(input /* , init */) {
352
- anInstance(this, RequestConstructor, 'Request');
353
- return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
370
+ anInstance(this, RequestPrototype);
371
+ return new N$Request(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
354
372
  };
355
373
 
356
374
  RequestPrototype.constructor = RequestConstructor;