core-js 3.48.0 → 3.50.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 (179) hide show
  1. package/README.md +2 -2
  2. package/actual/iterator/chunks.js +8 -0
  3. package/actual/iterator/concat.js +4 -0
  4. package/actual/iterator/from.js +4 -0
  5. package/actual/iterator/includes.js +8 -0
  6. package/actual/iterator/index.js +4 -1
  7. package/actual/iterator/join.js +8 -0
  8. package/actual/iterator/windows.js +8 -0
  9. package/actual/iterator/zip-keyed.js +6 -21
  10. package/actual/iterator/zip.js +6 -19
  11. package/actual/promise/all-keyed.js +16 -0
  12. package/actual/promise/all-settled-keyed.js +16 -0
  13. package/actual/promise/index.js +4 -0
  14. package/configurator.js +1 -1
  15. package/es/index.js +2 -0
  16. package/es/iterator/index.js +4 -0
  17. package/es/iterator/zip-keyed.js +24 -0
  18. package/es/iterator/zip.js +22 -0
  19. package/es/object/define-properties.js +2 -2
  20. package/es/object/define-property.js +2 -2
  21. package/es/object/get-own-property-descriptor.js +2 -2
  22. package/es/promise/try.js +2 -2
  23. package/features/iterator/includes.js +2 -0
  24. package/features/iterator/join.js +2 -0
  25. package/features/promise/all-keyed.js +2 -0
  26. package/features/promise/all-settled-keyed.js +2 -0
  27. package/full/index.js +6 -0
  28. package/full/iterator/chunks.js +2 -6
  29. package/full/iterator/concat.js +0 -2
  30. package/full/iterator/from.js +0 -2
  31. package/full/iterator/includes.js +4 -0
  32. package/full/iterator/index.js +0 -2
  33. package/full/iterator/join.js +4 -0
  34. package/full/iterator/range.js +3 -1
  35. package/full/iterator/windows.js +2 -6
  36. package/full/iterator/zip-keyed.js +0 -2
  37. package/full/iterator/zip.js +0 -2
  38. package/full/promise/all-keyed.js +4 -0
  39. package/full/promise/all-settled-keyed.js +4 -0
  40. package/internals/add-disposable-resource.js +1 -1
  41. package/internals/advance-string-index.js +1 -1
  42. package/internals/array-buffer-transfer.js +4 -1
  43. package/internals/array-buffer-view-core.js +1 -1
  44. package/internals/array-buffer.js +1 -2
  45. package/internals/array-fill.js +2 -1
  46. package/internals/array-from-async.js +7 -9
  47. package/internals/array-from.js +15 -4
  48. package/internals/async-from-sync-iterator.js +28 -4
  49. package/internals/async-iterator-close.js +11 -3
  50. package/internals/async-iterator-create-proxy.js +61 -22
  51. package/internals/async-iterator-iteration.js +7 -4
  52. package/internals/async-iterator-map.js +20 -18
  53. package/internals/does-not-exceed-safe-integer.js +1 -1
  54. package/internals/environment-is-ios.js +1 -2
  55. package/internals/error-stack-clear.js +1 -1
  56. package/internals/function-bind-native.js +1 -1
  57. package/internals/function-name.js +1 -1
  58. package/internals/get-async-iterator-flattenable.js +1 -1
  59. package/internals/get-async-iterator.js +1 -1
  60. package/internals/get-internal-iterator.js +1 -0
  61. package/internals/get-iterator-flattenable.js +1 -1
  62. package/internals/get-iterator-internal.js +14 -0
  63. package/internals/get-iterator-method-internal.js +14 -0
  64. package/internals/get-iterator-method.js +4 -7
  65. package/internals/get-iterator-record.js +1 -1
  66. package/internals/get-iterator.js +4 -5
  67. package/internals/is-iterable.js +4 -10
  68. package/internals/iterate.js +10 -5
  69. package/internals/iterator-chunk-size-validation.js +17 -0
  70. package/internals/iterator-cleanup-state.js +6 -0
  71. package/internals/iterator-create-proxy.js +14 -5
  72. package/internals/iterator-window.js +4 -6
  73. package/internals/iterator-zip.js +4 -3
  74. package/internals/iterators.js +1 -1
  75. package/internals/math-log1p.js +3 -1
  76. package/internals/numeric-range-iterator.js +9 -4
  77. package/internals/regexp-exec.js +20 -13
  78. package/internals/set-difference.js +1 -1
  79. package/internals/set-is-disjoint-from.js +1 -1
  80. package/internals/set-is-superset-of.js +1 -1
  81. package/internals/shared-store.js +2 -2
  82. package/internals/shared.js +3 -1
  83. package/internals/string-pad.js +2 -1
  84. package/internals/string-parse.js +1 -1
  85. package/internals/string-repeat.js +2 -1
  86. package/internals/to-uint8-clamped.js +11 -3
  87. package/internals/typed-array-constructor.js +1 -2
  88. package/internals/typed-array-from.js +5 -3
  89. package/internals/uint8-from-base64.js +4 -2
  90. package/internals/uint8-from-hex.js +10 -10
  91. package/internals/url-percent-coding.js +171 -0
  92. package/modules/es.array.flat.js +2 -1
  93. package/modules/es.array.from-async.js +1 -1
  94. package/modules/es.array.includes.js +7 -1
  95. package/modules/es.array.sort.js +3 -1
  96. package/modules/es.data-view.get-float16.js +1 -1
  97. package/modules/es.data-view.set-float16.js +2 -1
  98. package/modules/es.date.set-year.js +4 -1
  99. package/modules/es.date.to-json.js +1 -1
  100. package/modules/es.error.is-error.js +1 -1
  101. package/modules/es.escape.js +10 -8
  102. package/modules/es.iterator.concat.js +5 -4
  103. package/modules/es.iterator.drop.js +16 -1
  104. package/modules/es.iterator.flat-map.js +12 -14
  105. package/modules/es.iterator.take.js +22 -2
  106. package/modules/es.iterator.zip-keyed.js +70 -0
  107. package/modules/es.iterator.zip.js +92 -0
  108. package/modules/es.json.parse.js +14 -2
  109. package/modules/es.json.stringify.js +157 -38
  110. package/modules/es.map.get-or-insert-computed.js +3 -4
  111. package/modules/es.map.get-or-insert.js +2 -3
  112. package/modules/es.map.group-by.js +2 -0
  113. package/modules/es.math.asinh.js +6 -1
  114. package/modules/es.math.atanh.js +2 -2
  115. package/modules/es.math.cbrt.js +3 -1
  116. package/modules/es.math.sum-precise.js +3 -3
  117. package/modules/es.number.to-exponential.js +15 -6
  118. package/modules/es.object.group-by.js +2 -0
  119. package/modules/es.object.proto.js +2 -1
  120. package/modules/es.promise.try.js +16 -8
  121. package/modules/es.reflect.construct.js +1 -1
  122. package/modules/es.reflect.define-property.js +10 -0
  123. package/modules/es.reflect.delete-property.js +5 -2
  124. package/modules/es.reflect.get.js +9 -7
  125. package/modules/es.reflect.set.js +14 -9
  126. package/modules/es.regexp.constructor.js +16 -5
  127. package/modules/es.string.ends-with.js +1 -1
  128. package/modules/es.string.from-code-point.js +2 -2
  129. package/modules/es.string.match-all.js +1 -1
  130. package/modules/es.string.match.js +5 -3
  131. package/modules/es.string.replace.js +9 -8
  132. package/modules/es.string.search.js +3 -1
  133. package/modules/es.string.split.js +7 -5
  134. package/modules/es.string.starts-with.js +1 -1
  135. package/modules/es.string.substr.js +5 -7
  136. package/modules/es.symbol.constructor.js +3 -2
  137. package/modules/es.symbol.description.js +9 -0
  138. package/modules/es.typed-array.sort.js +3 -3
  139. package/modules/es.uint8-array.from-base64.js +1 -1
  140. package/modules/es.uint8-array.from-hex.js +1 -1
  141. package/modules/es.uint8-array.set-from-base64.js +1 -1
  142. package/modules/es.uint8-array.set-from-hex.js +1 -1
  143. package/modules/es.uint8-array.to-base64.js +23 -6
  144. package/modules/es.uint8-array.to-hex.js +6 -4
  145. package/modules/es.weak-map.get-or-insert-computed.js +2 -2
  146. package/modules/es.weak-map.get-or-insert.js +2 -3
  147. package/modules/esnext.array.is-template-object.js +1 -1
  148. package/modules/esnext.async-iterator.reduce.js +2 -2
  149. package/modules/esnext.async-iterator.take.js +4 -2
  150. package/modules/esnext.bigint.range.js +1 -1
  151. package/modules/esnext.iterator.chunks.js +6 -8
  152. package/modules/esnext.iterator.includes.js +44 -0
  153. package/modules/esnext.iterator.join.js +31 -0
  154. package/modules/esnext.iterator.range.js +1 -1
  155. package/modules/esnext.iterator.windows.js +2 -1
  156. package/modules/esnext.iterator.zip-keyed.js +2 -70
  157. package/modules/esnext.iterator.zip.js +2 -90
  158. package/modules/esnext.number.from-string.js +30 -3
  159. package/modules/esnext.number.range.js +1 -1
  160. package/modules/esnext.observable.from.js +6 -3
  161. package/modules/esnext.promise.all-keyed.js +57 -0
  162. package/modules/esnext.promise.all-settled-keyed.js +60 -0
  163. package/modules/esnext.string.dedent.js +1 -1
  164. package/modules/web.atob.js +15 -6
  165. package/modules/web.btoa.js +10 -3
  166. package/modules/web.structured-clone.js +2 -2
  167. package/modules/web.url-search-params.constructor.js +13 -130
  168. package/modules/web.url-search-params.delete.js +6 -9
  169. package/modules/web.url.constructor.js +154 -39
  170. package/modules/web.url.parse.js +1 -1
  171. package/modules/web.url.to-json.js +4 -1
  172. package/package.json +8 -1
  173. package/proposals/await-dictionary.js +4 -0
  174. package/proposals/iterator-includes.js +3 -0
  175. package/proposals/iterator-join.js +3 -0
  176. package/stable/index.js +2 -0
  177. package/stable/iterator/zip-keyed.js +5 -0
  178. package/stable/iterator/zip.js +5 -0
  179. package/stage/3.js +4 -0
@@ -9,32 +9,35 @@ var definePropertyModule = require('../internals/object-define-property');
9
9
  var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
10
10
  var getPrototypeOf = require('../internals/object-get-prototype-of');
11
11
  var createPropertyDescriptor = require('../internals/create-property-descriptor');
12
+ var toPropertyKey = require('../internals/to-property-key');
12
13
 
13
14
  // `Reflect.set` method
14
15
  // https://tc39.es/ecma262/#sec-reflect.set
15
- function set(target, propertyKey, V /* , receiver */) {
16
- var receiver = arguments.length < 4 ? target : arguments[3];
16
+ var $set = function (target, propertyKey, V, receiver) {
17
17
  var ownDescriptor = getOwnPropertyDescriptorModule.f(anObject(target), propertyKey);
18
18
  var existingDescriptor, prototype, setter;
19
19
  if (!ownDescriptor) {
20
20
  if (isObject(prototype = getPrototypeOf(target))) {
21
- return set(prototype, propertyKey, V, receiver);
21
+ return $set(prototype, propertyKey, V, receiver);
22
22
  }
23
23
  ownDescriptor = createPropertyDescriptor(0);
24
24
  }
25
25
  if (isDataDescriptor(ownDescriptor)) {
26
26
  if (ownDescriptor.writable === false || !isObject(receiver)) return false;
27
27
  if (existingDescriptor = getOwnPropertyDescriptorModule.f(receiver, propertyKey)) {
28
- if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;
29
- existingDescriptor.value = V;
30
- definePropertyModule.f(receiver, propertyKey, existingDescriptor);
31
- } else definePropertyModule.f(receiver, propertyKey, createPropertyDescriptor(0, V));
28
+ if (!isDataDescriptor(existingDescriptor) || existingDescriptor.writable === false) return false;
29
+ definePropertyModule.f(receiver, propertyKey, { value: V });
30
+ } else try {
31
+ definePropertyModule.f(receiver, propertyKey, createPropertyDescriptor(0, V));
32
+ } catch (error) {
33
+ return false;
34
+ }
32
35
  } else {
33
36
  setter = ownDescriptor.set;
34
37
  if (setter === undefined) return false;
35
38
  call(setter, receiver, V);
36
39
  } return true;
37
- }
40
+ };
38
41
 
39
42
  // MS Edge 17-18 Reflect.set allows setting the property to object
40
43
  // with non-writable property on the prototype
@@ -46,5 +49,7 @@ var MS_EDGE_BUG = fails(function () {
46
49
  });
47
50
 
48
51
  $({ target: 'Reflect', stat: true, forced: MS_EDGE_BUG }, {
49
- set: set
52
+ set: function set(target, propertyKey, V /* , receiver */) {
53
+ return $set(anObject(target), toPropertyKey(propertyKey), V, arguments.length < 4 ? target : arguments[3]);
54
+ }
50
55
  });
@@ -89,6 +89,11 @@ var handleNCG = function (string) {
89
89
  chr = charAt(string, index);
90
90
  if (chr === '\\') {
91
91
  chr += charAt(string, ++index);
92
+ // use `\x5c` for escaped backslash to avoid corruption by `\k<name>` to `\N` replacement below
93
+ if (!ncg && charAt(chr, 1) === '\\') {
94
+ result += '\\x5c';
95
+ continue;
96
+ }
92
97
  } else if (chr === ']') {
93
98
  brackets = false;
94
99
  } else if (!brackets) switch (true) {
@@ -97,15 +102,13 @@ var handleNCG = function (string) {
97
102
  break;
98
103
  case chr === '(':
99
104
  result += chr;
100
- // ignore non-capturing groups
101
- if (stringSlice(string, index + 1, index + 3) === '?:') {
102
- continue;
103
- }
104
105
  if (exec(IS_NCG, stringSlice(string, index + 1))) {
105
106
  index += 2;
106
107
  ncg = true;
108
+ groupid++;
109
+ } else if (charAt(string, index + 1) !== '?') {
110
+ groupid++;
107
111
  }
108
- groupid++;
109
112
  continue;
110
113
  case chr === '>' && ncg:
111
114
  if (groupname === '' || hasOwn(names, groupname)) {
@@ -119,6 +122,14 @@ var handleNCG = function (string) {
119
122
  }
120
123
  if (ncg) groupname += chr;
121
124
  else result += chr;
125
+ }
126
+ // convert `\k<name>` backreferences to numbered backreferences
127
+ for (var ni = 0; ni < named.length; ni++) {
128
+ var backref = '\\k<' + named[ni][0] + '>';
129
+ var numRef = '\\' + named[ni][1];
130
+ while (stringIndexOf(result, backref) > -1) {
131
+ result = replace(result, backref, numRef);
132
+ }
122
133
  } return [result, named];
123
134
  };
124
135
 
@@ -25,10 +25,10 @@ $({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGE
25
25
  endsWith: function endsWith(searchString /* , endPosition = @length */) {
26
26
  var that = toString(requireObjectCoercible(this));
27
27
  notARegExp(searchString);
28
+ var search = toString(searchString);
28
29
  var endPosition = arguments.length > 1 ? arguments[1] : undefined;
29
30
  var len = that.length;
30
31
  var end = endPosition === undefined ? len : min(toLength(endPosition), len);
31
- var search = toString(searchString);
32
32
  return slice(that, end - search.length, end) === search;
33
33
  }
34
34
  });
@@ -22,9 +22,9 @@ $({ target: 'String', stat: true, arity: 1, forced: INCORRECT_LENGTH }, {
22
22
  var i = 0;
23
23
  var code;
24
24
  while (length > i) {
25
- code = +arguments[i++];
25
+ code = +arguments[i];
26
26
  if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw new $RangeError(code + ' is not a valid code point');
27
- elements[i] = code < 0x10000
27
+ elements[i++] = code < 0x10000
28
28
  ? fromCharCode(code)
29
29
  : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);
30
30
  } return join(elements, '');
@@ -72,7 +72,7 @@ var $matchAll = function (string) {
72
72
  var matcher, $global, fullUnicode;
73
73
  matcher = new C(C === RegExp ? R.source : R, flags);
74
74
  $global = !!~stringIndexOf(flags, 'g');
75
- fullUnicode = !!~stringIndexOf(flags, 'u');
75
+ fullUnicode = !!~stringIndexOf(flags, 'u') || !!~stringIndexOf(flags, 'v');
76
76
  matcher.lastIndex = toLength(R.lastIndex);
77
77
  return new $RegExpStringIterator(matcher, S, $global, fullUnicode);
78
78
  };
@@ -22,7 +22,9 @@ fixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNa
22
22
  function match(regexp) {
23
23
  var O = requireObjectCoercible(this);
24
24
  var matcher = isObject(regexp) ? getMethod(regexp, MATCH) : undefined;
25
- return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));
25
+ if (matcher) return call(matcher, regexp, O);
26
+ var S = toString(O);
27
+ return new RegExp(regexp)[MATCH](S);
26
28
  },
27
29
  // `RegExp.prototype[@@match]` method
28
30
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
@@ -35,9 +37,9 @@ fixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNa
35
37
 
36
38
  var flags = toString(getRegExpFlags(rx));
37
39
 
38
- if (stringIndexOf(flags, 'g') === -1) return regExpExec(rx, S);
40
+ if (!~stringIndexOf(flags, 'g')) return regExpExec(rx, S);
39
41
 
40
- var fullUnicode = stringIndexOf(flags, 'u') !== -1;
42
+ var fullUnicode = !!~stringIndexOf(flags, 'u') || !!~stringIndexOf(flags, 'v');
41
43
  rx.lastIndex = 0;
42
44
  var A = [];
43
45
  var n = 0;
@@ -76,23 +76,24 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
76
76
  var rx = anObject(this);
77
77
  var S = toString(string);
78
78
 
79
+ var functionalReplace = isCallable(replaceValue);
80
+ if (!functionalReplace) replaceValue = toString(replaceValue);
81
+ var flags = toString(getRegExpFlags(rx));
82
+
79
83
  if (
80
84
  typeof replaceValue == 'string' &&
81
- stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&
82
- stringIndexOf(replaceValue, '$<') === -1
85
+ !~stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) &&
86
+ !~stringIndexOf(replaceValue, '$<') &&
87
+ !~stringIndexOf(flags, 'y')
83
88
  ) {
84
89
  var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
85
90
  if (res.done) return res.value;
86
91
  }
87
92
 
88
- var functionalReplace = isCallable(replaceValue);
89
- if (!functionalReplace) replaceValue = toString(replaceValue);
90
-
91
- var flags = toString(getRegExpFlags(rx));
92
- var global = stringIndexOf(flags, 'g') !== -1;
93
+ var global = !!~stringIndexOf(flags, 'g');
93
94
  var fullUnicode;
94
95
  if (global) {
95
- fullUnicode = stringIndexOf(flags, 'u') !== -1;
96
+ fullUnicode = !!~stringIndexOf(flags, 'u') || !!~stringIndexOf(flags, 'v');
96
97
  rx.lastIndex = 0;
97
98
  }
98
99
 
@@ -17,7 +17,9 @@ fixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCal
17
17
  function search(regexp) {
18
18
  var O = requireObjectCoercible(this);
19
19
  var searcher = isObject(regexp) ? getMethod(regexp, SEARCH) : undefined;
20
- return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O));
20
+ if (searcher) return call(searcher, regexp, O);
21
+ var S = toString(O);
22
+ return new RegExp(regexp)[SEARCH](S);
21
23
  },
22
24
  // `RegExp.prototype[@@search]` method
23
25
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@search
@@ -10,6 +10,7 @@ var advanceStringIndex = require('../internals/advance-string-index');
10
10
  var toLength = require('../internals/to-length');
11
11
  var toString = require('../internals/to-string');
12
12
  var getMethod = require('../internals/get-method');
13
+ var getRegExpFlags = require('../internals/regexp-get-flags');
13
14
  var regExpExec = require('../internals/regexp-exec-abstract');
14
15
  var stickyHelpers = require('../internals/regexp-sticky-helpers');
15
16
  var fails = require('../internals/fails');
@@ -19,6 +20,7 @@ var MAX_UINT32 = 0xFFFFFFFF;
19
20
  var min = Math.min;
20
21
  var push = uncurryThis([].push);
21
22
  var stringSlice = uncurryThis(''.slice);
23
+ var stringIndexOf = uncurryThis(''.indexOf);
22
24
 
23
25
  // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
24
26
  // Weex JS has frozen built-in prototypes, so use try / catch wrapper
@@ -71,11 +73,11 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
71
73
  }
72
74
 
73
75
  var C = speciesConstructor(rx, RegExp);
74
- var unicodeMatching = rx.unicode;
75
- var flags = (rx.ignoreCase ? 'i' : '') +
76
- (rx.multiline ? 'm' : '') +
77
- (rx.unicode ? 'u' : '') +
78
- (UNSUPPORTED_Y ? 'g' : 'y');
76
+ var flags = toString(getRegExpFlags(rx));
77
+ var unicodeMatching = !!~stringIndexOf(flags, 'u') || !!~stringIndexOf(flags, 'v');
78
+ if (UNSUPPORTED_Y) {
79
+ if (!~stringIndexOf(flags, 'g')) flags += 'g';
80
+ } else if (!~stringIndexOf(flags, 'y')) flags += 'y';
79
81
  // ^(? + rx + ) is needed, in combination with some S slicing, to
80
82
  // simulate the 'y' flag.
81
83
  var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);
@@ -25,8 +25,8 @@ $({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGE
25
25
  startsWith: function startsWith(searchString /* , position = 0 */) {
26
26
  var that = toString(requireObjectCoercible(this));
27
27
  notARegExp(searchString);
28
- var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));
29
28
  var search = toString(searchString);
29
+ var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));
30
30
  return stringSlice(that, index, index + search.length) === search;
31
31
  }
32
32
  });
@@ -19,12 +19,10 @@ $({ target: 'String', proto: true, forced: FORCED }, {
19
19
  var that = toString(requireObjectCoercible(this));
20
20
  var size = that.length;
21
21
  var intStart = toIntegerOrInfinity(start);
22
- var intLength, intEnd;
23
- if (intStart === Infinity) intStart = 0;
24
- if (intStart < 0) intStart = max(size + intStart, 0);
25
- intLength = length === undefined ? size : toIntegerOrInfinity(length);
26
- if (intLength <= 0 || intLength === Infinity) return '';
27
- intEnd = min(intStart + intLength, size);
28
- return intStart >= intEnd ? '' : stringSlice(that, intStart, intEnd);
22
+ var finalStart = intStart < 0 ? max(size + intStart, 0) : min(intStart, size);
23
+ var intLength = length === undefined ? size : toIntegerOrInfinity(length);
24
+ if (intLength <= 0) return '';
25
+ var intEnd = min(finalStart + intLength, size);
26
+ return finalStart >= intEnd ? '' : stringSlice(that, finalStart, intEnd);
29
27
  }
30
28
  });
@@ -70,7 +70,7 @@ var fallbackDefineProperty = function (O, P, Attributes) {
70
70
  nativeDefineProperty(O, P, Attributes);
71
71
  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
72
72
  nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
73
- }
73
+ } return O;
74
74
  };
75
75
 
76
76
  var setSymbolDescriptor = DESCRIPTORS && fails(function () {
@@ -96,7 +96,8 @@ var $defineProperty = function defineProperty(O, P, Attributes) {
96
96
  var key = toPropertyKey(P);
97
97
  anObject(Attributes);
98
98
  if (hasOwn(AllSymbols, key)) {
99
- if (!Attributes.enumerable) {
99
+ // first definition - default non-enumerable; redefinition - preserve existing state
100
+ if (!('enumerable' in Attributes) ? !hasOwn(O, key) || (hasOwn(O, HIDDEN) && O[HIDDEN][key]) : !Attributes.enumerable) {
100
101
  if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));
101
102
  O[HIDDEN][key] = true;
102
103
  } else {
@@ -4,6 +4,7 @@
4
4
  var $ = require('../internals/export');
5
5
  var DESCRIPTORS = require('../internals/descriptors');
6
6
  var globalThis = require('../internals/global-this');
7
+ var call = require('../internals/function-call');
7
8
  var uncurryThis = require('../internals/function-uncurry-this');
8
9
  var hasOwn = require('../internals/has-own-property');
9
10
  var isCallable = require('../internals/is-callable');
@@ -33,6 +34,14 @@ if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototy
33
34
  };
34
35
 
35
36
  copyConstructorProperties(SymbolWrapper, NativeSymbol);
37
+ // wrap Symbol.for for correct handling of empty string descriptions
38
+ var nativeFor = SymbolWrapper['for'];
39
+ SymbolWrapper['for'] = { 'for': function (key) {
40
+ var stringKey = toString(key);
41
+ var symbol = call(nativeFor, this, stringKey);
42
+ if (stringKey === '') EmptyStringDescriptionStore[symbol] = true;
43
+ return symbol;
44
+ } }['for'];
36
45
  SymbolWrapper.prototype = SymbolPrototype;
37
46
  SymbolPrototype.constructor = SymbolWrapper;
38
47
 
@@ -52,11 +52,11 @@ var getSortCompare = function (comparefn) {
52
52
  return function (x, y) {
53
53
  if (comparefn !== undefined) return +comparefn(x, y) || 0;
54
54
  // eslint-disable-next-line no-self-compare -- NaN check
55
- if (y !== y) return -1;
55
+ if (y !== y) return x !== x ? 0 : -1;
56
56
  // eslint-disable-next-line no-self-compare -- NaN check
57
57
  if (x !== x) return 1;
58
- if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;
59
- return x > y;
58
+ if (x === 0 && y === 0) return 1 / x > 0 ? (1 / y > 0 ? 0 : 1) : (1 / y > 0 ? -1 : 0);
59
+ return x > y ? 1 : x < y ? -1 : 0;
60
60
  };
61
61
  };
62
62
 
@@ -20,7 +20,7 @@ var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.fromBase64
20
20
  }();
21
21
 
22
22
  // `Uint8Array.fromBase64` method
23
- // https://github.com/tc39/proposal-arraybuffer-base64
23
+ // https://tc39.es/ecma262/#sec-uint8array.frombase64
24
24
  if (Uint8Array) $({ target: 'Uint8Array', stat: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {
25
25
  fromBase64: function fromBase64(string /* , options */) {
26
26
  var result = $fromBase64(string, arguments.length > 1 ? arguments[1] : undefined, null, 0x1FFFFFFFFFFFFF);
@@ -5,7 +5,7 @@ var aString = require('../internals/a-string');
5
5
  var $fromHex = require('../internals/uint8-from-hex');
6
6
 
7
7
  // `Uint8Array.fromHex` method
8
- // https://github.com/tc39/proposal-arraybuffer-base64
8
+ // https://tc39.es/ecma262/#sec-uint8array.fromhex
9
9
  if (globalThis.Uint8Array) $({ target: 'Uint8Array', stat: true }, {
10
10
  fromHex: function fromHex(string) {
11
11
  return $fromHex(aString(string)).bytes;
@@ -25,7 +25,7 @@ var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.s
25
25
  }();
26
26
 
27
27
  // `Uint8Array.prototype.setFromBase64` method
28
- // https://github.com/tc39/proposal-arraybuffer-base64
28
+ // https://tc39.es/ecma262/#sec-uint8array.prototype.setfrombase64
29
29
  if (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {
30
30
  setFromBase64: function setFromBase64(string /* , options */) {
31
31
  anUint8Array(this);
@@ -20,7 +20,7 @@ function throwsOnLengthTrackingView() {
20
20
  }
21
21
 
22
22
  // `Uint8Array.prototype.setFromHex` method
23
- // https://github.com/tc39/proposal-arraybuffer-base64
23
+ // https://tc39.es/ecma262/#sec-uint8array.prototype.setfromhex
24
24
  if (globalThis.Uint8Array) $({ target: 'Uint8Array', proto: true, forced: throwsOnLengthTrackingView() }, {
25
25
  setFromHex: function setFromHex(string) {
26
26
  anUint8Array(this);
@@ -1,4 +1,5 @@
1
1
  'use strict';
2
+ /* eslint-disable no-useless-assignment -- false positive for [index++] syntax */
2
3
  var $ = require('../internals/export');
3
4
  var globalThis = require('../internals/global-this');
4
5
  var uncurryThis = require('../internals/function-uncurry-this');
@@ -10,10 +11,14 @@ var getAlphabetOption = require('../internals/get-alphabet-option');
10
11
 
11
12
  var base64Alphabet = base64Map.i2c;
12
13
  var base64UrlAlphabet = base64Map.i2cUrl;
14
+ var $floor = Math.floor;
15
+ var $ceil = Math.ceil;
13
16
 
14
17
  var charAt = uncurryThis(''.charAt);
15
18
 
16
19
  var Uint8Array = globalThis.Uint8Array;
20
+ var $Array = globalThis.Array;
21
+ var join = uncurryThis([].join);
17
22
 
18
23
  var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.toBase64 || !function () {
19
24
  try {
@@ -25,7 +30,7 @@ var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.t
25
30
  }();
26
31
 
27
32
  // `Uint8Array.prototype.toBase64` method
28
- // https://github.com/tc39/proposal-arraybuffer-base64
33
+ // https://tc39.es/ecma262/#sec-uint8array.prototype.tobase64
29
34
  if (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {
30
35
  toBase64: function toBase64(/* options */) {
31
36
  var array = anUint8Array(this);
@@ -34,9 +39,10 @@ if (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIO
34
39
  var omitPadding = !!options && !!options.omitPadding;
35
40
  notDetached(this.buffer);
36
41
 
37
- var result = '';
38
42
  var i = 0;
39
43
  var length = array.length;
44
+ var result = $Array(omitPadding ? $floor(length / 3) * 4 + (length % 3 ? length % 3 + 1 : 0) : $ceil(length / 3) * 4);
45
+ var written = 0;
40
46
  var triplet;
41
47
 
42
48
  var at = function (shift) {
@@ -45,16 +51,27 @@ if (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIO
45
51
 
46
52
  for (; i + 2 < length; i += 3) {
47
53
  triplet = (array[i] << 16) + (array[i + 1] << 8) + array[i + 2];
48
- result += at(3) + at(2) + at(1) + at(0);
54
+ result[written++] = at(3);
55
+ result[written++] = at(2);
56
+ result[written++] = at(1);
57
+ result[written++] = at(0);
49
58
  }
50
59
  if (i + 2 === length) {
51
60
  triplet = (array[i] << 16) + (array[i + 1] << 8);
52
- result += at(3) + at(2) + at(1) + (omitPadding ? '' : '=');
61
+ result[written++] = at(3);
62
+ result[written++] = at(2);
63
+ result[written++] = at(1);
64
+ if (!omitPadding) result[written++] = '=';
53
65
  } else if (i + 1 === length) {
54
66
  triplet = array[i] << 16;
55
- result += at(3) + at(2) + (omitPadding ? '' : '==');
67
+ result[written++] = at(3);
68
+ result[written++] = at(2);
69
+ if (!omitPadding) {
70
+ result[written++] = '=';
71
+ result[written++] = '=';
72
+ }
56
73
  }
57
74
 
58
- return result;
75
+ return join(result, '');
59
76
  }
60
77
  });
@@ -6,6 +6,8 @@ var anUint8Array = require('../internals/an-uint8-array');
6
6
  var notDetached = require('../internals/array-buffer-not-detached');
7
7
 
8
8
  var numberToString = uncurryThis(1.1.toString);
9
+ var join = uncurryThis([].join);
10
+ var $Array = Array;
9
11
 
10
12
  var Uint8Array = globalThis.Uint8Array;
11
13
 
@@ -19,16 +21,16 @@ var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array || !Uint8Array.prototype.t
19
21
  })();
20
22
 
21
23
  // `Uint8Array.prototype.toHex` method
22
- // https://github.com/tc39/proposal-arraybuffer-base64
24
+ // https://tc39.es/ecma262/#sec-uint8array.prototype.tohex
23
25
  if (Uint8Array) $({ target: 'Uint8Array', proto: true, forced: INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS }, {
24
26
  toHex: function toHex() {
25
27
  anUint8Array(this);
26
28
  notDetached(this.buffer);
27
- var result = '';
29
+ var result = $Array(this.length);
28
30
  for (var i = 0, length = this.length; i < length; i++) {
29
31
  var hex = numberToString(this[i], 16);
30
- result += hex.length === 1 ? '0' + hex : hex;
32
+ result[i] = hex.length === 1 ? '0' + hex : hex;
31
33
  }
32
- return result;
34
+ return join(result, '');
33
35
  }
34
36
  });
@@ -22,10 +22,10 @@ var FORCED = IS_PURE || !function () {
22
22
  }();
23
23
 
24
24
  // `WeakMap.prototype.getOrInsertComputed` method
25
- // https://github.com/tc39/proposal-upsert
25
+ // https://tc39.es/ecma262/#sec-weakmap.prototype.getorinsertcomputed
26
26
  $({ target: 'WeakMap', proto: true, real: true, forced: FORCED }, {
27
27
  getOrInsertComputed: function getOrInsertComputed(key, callbackfn) {
28
- aWeakMap(this);
28
+ if (!IS_PURE) aWeakMap(this);
29
29
  aWeakKey(key);
30
30
  aCallable(callbackfn);
31
31
  if (has(this, key)) return get(this, key);
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
- var aWeakMap = require('../internals/a-weak-map');
4
3
  var WeakMapHelpers = require('../internals/weak-map-helpers');
5
4
  var IS_PURE = require('../internals/is-pure');
6
5
 
@@ -9,10 +8,10 @@ var has = WeakMapHelpers.has;
9
8
  var set = WeakMapHelpers.set;
10
9
 
11
10
  // `WeakMap.prototype.getOrInsert` method
12
- // https://github.com/tc39/proposal-upsert
11
+ // https://tc39.es/ecma262/#sec-weakmap.prototype.getorinsert
13
12
  $({ target: 'WeakMap', proto: true, real: true, forced: IS_PURE }, {
14
13
  getOrInsert: function getOrInsert(key, value) {
15
- if (has(aWeakMap(this), key)) return get(this, key);
14
+ if (has(this, key)) return get(this, key);
16
15
  set(this, key, value);
17
16
  return value;
18
17
  }
@@ -24,6 +24,6 @@ $({ target: 'Array', stat: true, sham: true, forced: true }, {
24
24
  isTemplateObject: function isTemplateObject(value) {
25
25
  if (!isFrozenStringArray(value, true)) return false;
26
26
  var raw = value.raw;
27
- return raw.length === value.length && isFrozenStringArray(raw, false);
27
+ return isFrozenStringArray(raw, false) && raw.length === value.length;
28
28
  }
29
29
  });
@@ -40,9 +40,10 @@ $({ target: 'AsyncIterator', proto: true, real: true, forced: true }, {
40
40
  if (noInitial) {
41
41
  noInitial = false;
42
42
  accumulator = value;
43
+ counter++;
43
44
  loop();
44
45
  } else try {
45
- var result = reducer(accumulator, value, counter);
46
+ var result = reducer(accumulator, value, counter++);
46
47
 
47
48
  var handler = function ($result) {
48
49
  accumulator = $result;
@@ -53,7 +54,6 @@ $({ target: 'AsyncIterator', proto: true, real: true, forced: true }, {
53
54
  else handler(result);
54
55
  } catch (error3) { ifAbruptCloseAsyncIterator(error3); }
55
56
  }
56
- counter++;
57
57
  } catch (error2) { reject(error2); }
58
58
  }, reject);
59
59
  } catch (error) { reject(error); }
@@ -3,6 +3,7 @@ var $ = require('../internals/export');
3
3
  var call = require('../internals/function-call');
4
4
  var anObject = require('../internals/an-object');
5
5
  var getIteratorDirect = require('../internals/get-iterator-direct');
6
+ var getMethod = require('../internals/get-method');
6
7
  var notANaN = require('../internals/not-a-nan');
7
8
  var toPositiveInteger = require('../internals/to-positive-integer');
8
9
  var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');
@@ -16,9 +17,10 @@ var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise) {
16
17
  if (!state.remaining--) {
17
18
  var resultDone = createIterResultObject(undefined, true);
18
19
  state.done = true;
19
- returnMethod = iterator['return'];
20
+ returnMethod = getMethod(iterator, 'return');
20
21
  if (returnMethod !== undefined) {
21
- return Promise.resolve(call(returnMethod, iterator, undefined)).then(function () {
22
+ return Promise.resolve(call(returnMethod, iterator)).then(function (result) {
23
+ anObject(result);
22
24
  return resultDone;
23
25
  });
24
26
  }
@@ -4,7 +4,7 @@ var $ = require('../internals/export');
4
4
  var NumericRangeIterator = require('../internals/numeric-range-iterator');
5
5
 
6
6
  // `BigInt.range` method
7
- // https://github.com/tc39/proposal-Number.range
7
+ // https://github.com/tc39/proposal-iterator.range
8
8
  // TODO: Remove from `core-js@4`
9
9
  if (typeof BigInt == 'function') {
10
10
  $({ target: 'BigInt', stat: true, forced: true }, {
@@ -4,10 +4,10 @@ var anObject = require('../internals/an-object');
4
4
  var call = require('../internals/function-call');
5
5
  var createIteratorProxy = require('../internals/iterator-create-proxy');
6
6
  var getIteratorDirect = require('../internals/get-iterator-direct');
7
- var iteratorClose = require('../internals/iterator-close');
7
+ var chunkSizeValidation = require('../internals/iterator-chunk-size-validation');
8
8
  var uncurryThis = require('../internals/function-uncurry-this');
9
+ var IS_PURE = require('../internals/is-pure');
9
10
 
10
- var $RangeError = RangeError;
11
11
  var push = uncurryThis([].push);
12
12
 
13
13
  var IteratorProxy = createIteratorProxy(function () {
@@ -31,13 +31,11 @@ var IteratorProxy = createIteratorProxy(function () {
31
31
 
32
32
  // `Iterator.prototype.chunks` method
33
33
  // https://github.com/tc39/proposal-iterator-chunking
34
- $({ target: 'Iterator', proto: true, real: true, forced: true }, {
34
+ $({ target: 'Iterator', proto: true, real: true, forced: IS_PURE }, {
35
35
  chunks: function chunks(chunkSize) {
36
- var O = anObject(this);
37
- if (typeof chunkSize != 'number' || !chunkSize || chunkSize >>> 0 !== chunkSize) {
38
- return iteratorClose(O, 'throw', new $RangeError('chunkSize must be integer in [1, 2^32-1]'));
39
- }
40
- return new IteratorProxy(getIteratorDirect(O), {
36
+ anObject(this);
37
+ chunkSizeValidation(chunkSize, this);
38
+ return new IteratorProxy(getIteratorDirect(this), {
41
39
  chunkSize: chunkSize
42
40
  });
43
41
  }