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
@@ -1,38 +1,54 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
3
  var getBuiltIn = require('../internals/get-built-in');
4
- var apply = require('../internals/function-apply');
5
4
  var call = require('../internals/function-call');
6
5
  var uncurryThis = require('../internals/function-uncurry-this');
7
6
  var fails = require('../internals/fails');
8
7
  var isArray = require('../internals/is-array');
9
8
  var isCallable = require('../internals/is-callable');
9
+ var isObject = require('../internals/is-object');
10
+ var create = require('../internals/object-create');
10
11
  var isRawJSON = require('../internals/is-raw-json');
11
12
  var isSymbol = require('../internals/is-symbol');
12
13
  var classof = require('../internals/classof-raw');
14
+ var thisNumberValue = require('../internals/this-number-value');
15
+ var includes = require('../internals/array-includes').includes;
16
+ var hasOwn = require('../internals/has-own-property');
13
17
  var toString = require('../internals/to-string');
14
- var arraySlice = require('../internals/array-slice');
15
18
  var parseJSONString = require('../internals/parse-json-string');
16
19
  var uid = require('../internals/uid');
17
20
  var NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');
18
21
  var NATIVE_RAW_JSON = require('../internals/native-raw-json');
19
22
 
20
23
  var $String = String;
24
+ var $TypeError = TypeError;
21
25
  var $stringify = getBuiltIn('JSON', 'stringify');
26
+ var $BigInt = getBuiltIn('BigInt');
27
+ var stringValueOf = uncurryThis(''.valueOf);
28
+ var booleanValueOf = uncurryThis(true.valueOf);
29
+ var bigIntValueOf = $BigInt && uncurryThis($BigInt.prototype.valueOf);
22
30
  var exec = uncurryThis(/./.exec);
23
31
  var charAt = uncurryThis(''.charAt);
24
32
  var charCodeAt = uncurryThis(''.charCodeAt);
25
33
  var replace = uncurryThis(''.replace);
26
34
  var slice = uncurryThis(''.slice);
27
35
  var push = uncurryThis([].push);
36
+ var pop = uncurryThis([].pop);
28
37
  var numberToString = uncurryThis(1.1.toString);
29
38
 
30
39
  var surrogates = /[\uD800-\uDFFF]/g;
31
- var lowSurrogates = /^[\uD800-\uDBFF]$/;
32
- var hiSurrogates = /^[\uDC00-\uDFFF]$/;
33
-
34
- var MARK = uid();
35
- var MARK_LENGTH = MARK.length;
40
+ var leadingSurrogates = /^[\uD800-\uDBFF]$/;
41
+ var trailingSurrogates = /^[\uDC00-\uDFFF]$/;
42
+ var digits = /^\d+$/;
43
+
44
+ // a placeholder of a raw JSON value
45
+ var RAW_MARK = uid();
46
+ // a prefix of keys of a reordered object, see `createOrderedObject`
47
+ var KEY_MARK = uid();
48
+ // the last key of a reordered object, marks the end of its serialization
49
+ var END_MARK = uid();
50
+ var RAW_MARK_LENGTH = RAW_MARK.length;
51
+ var KEY_MARK_LENGTH = KEY_MARK.length;
36
52
 
37
53
  var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {
38
54
  var symbol = getBuiltIn('Symbol')('stringify detection');
@@ -50,67 +66,170 @@ var ILL_FORMED_UNICODE = fails(function () {
50
66
  || $stringify('\uDEAD') !== '"\\udead"';
51
67
  });
52
68
 
53
- var stringifyWithProperSymbolsConversion = WRONG_SYMBOLS_CONVERSION ? function (it, replacer) {
54
- var args = arraySlice(arguments);
55
- var $replacer = getReplacerFunction(replacer);
56
- if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined
57
- args[1] = function (key, value) {
58
- // some old implementations (like WebKit) could pass numbers as keys
59
- if (isCallable($replacer)) value = call($replacer, this, $String(key), value);
60
- if (!isSymbol(value)) return value;
61
- };
62
- return apply($stringify, null, args);
69
+ var isRawJSONValue = NATIVE_RAW_JSON ? getBuiltIn('JSON', 'isRawJSON') : isRawJSON;
70
+
71
+ var stringifyWithProperSymbolsConversion = WRONG_SYMBOLS_CONVERSION ? function (it, replacer, space) {
72
+ return $stringify(it, function (key, value) {
73
+ var replaced = call(replacer, this, key, value);
74
+ if (!isSymbol(replaced)) return replaced;
75
+ }, space);
63
76
  } : $stringify;
64
77
 
65
78
  var fixIllFormedJSON = function (match, offset, string) {
66
79
  var prev = charAt(string, offset - 1);
67
80
  var next = charAt(string, offset + 1);
68
- if ((exec(lowSurrogates, match) && !exec(hiSurrogates, next)) || (exec(hiSurrogates, match) && !exec(lowSurrogates, prev))) {
81
+ if (
82
+ (exec(leadingSurrogates, match) && !exec(trailingSurrogates, next)) ||
83
+ (exec(trailingSurrogates, match) && !exec(leadingSurrogates, prev))
84
+ ) {
69
85
  return '\\u' + numberToString(charCodeAt(match, 0), 16);
70
86
  } return match;
71
87
  };
72
88
 
73
- var getReplacerFunction = function (replacer) {
74
- if (isCallable(replacer)) return replacer;
89
+ // `PropertyList` of `JSON.stringify`
90
+ // https://tc39.es/ecma262/#sec-json.stringify
91
+ var getPropertyList = function (replacer) {
75
92
  if (!isArray(replacer)) return;
76
93
  var rawLength = replacer.length;
77
- var keys = [];
94
+ var propertyList = [];
95
+ // a null prototype object is used as a set of already added keys to keep the deduplication linear
96
+ var addedKeys = create(null);
78
97
  for (var i = 0; i < rawLength; i++) {
79
98
  var element = replacer[i];
80
- if (typeof element == 'string') push(keys, element);
81
- else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));
99
+ var key;
100
+ if (typeof element == 'string') key = element;
101
+ else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') key = toString(element);
102
+ else continue;
103
+ if (!hasOwn(addedKeys, key)) {
104
+ addedKeys[key] = true;
105
+ push(propertyList, key);
106
+ }
82
107
  }
83
- var keysLength = keys.length;
84
- var root = true;
85
- return function (key, value) {
86
- if (root) {
87
- root = false;
88
- return value;
108
+ return propertyList;
109
+ };
110
+
111
+ // values with such an internal slot are unwrapped by `SerializeJSONProperty` instead of being serialized as objects
112
+ var hasInternalSlot = function (valueOf, it) {
113
+ try {
114
+ valueOf(it);
115
+ return true;
116
+ } catch (error) {
117
+ return false;
118
+ }
119
+ };
120
+
121
+ // the slot check is expensive, so it's performed only for the kind reported by the value itself -
122
+ // a value lying about its kind via `Symbol.toStringTag` is serialized as an ordinary object
123
+ var isBoxedPrimitive = function (it) {
124
+ var kind = classof(it);
125
+ return (kind === 'Number' && hasInternalSlot(thisNumberValue, it))
126
+ || (kind === 'String' && hasInternalSlot(stringValueOf, it))
127
+ || (kind === 'Boolean' && hasInternalSlot(booleanValueOf, it))
128
+ || (!!bigIntValueOf && kind === 'BigInt' && hasInternalSlot(bigIntValueOf, it));
129
+ };
130
+
131
+ // only objects serialized by `SerializeJSONObject` are affected by the property list
132
+ var isSerializedAsObject = function (it) {
133
+ if (!isObject(it) || isCallable(it) || isArray(it)) return false;
134
+ try {
135
+ return !isBoxedPrimitive(it);
136
+ // `classof` reads `Symbol.toStringTag`, so a proxy could throw - it has no internal slots anyway
137
+ } catch (error) {
138
+ return true;
139
+ }
140
+ };
141
+
142
+ // the engine unwraps it in the same order as it would read the original property,
143
+ // so the property is read lazily and `toJSON` is called once and with the original key
144
+ var createElementHolder = function (holder, key) {
145
+ return {
146
+ toJSON: function () {
147
+ var element = holder[key];
148
+ if (isObject(element) || typeof element == 'bigint') {
149
+ var elementToJSON = element.toJSON;
150
+ if (isCallable(elementToJSON)) element = call(elementToJSON, element, key);
151
+ } return element;
89
152
  }
90
- if (isArray(this)) return value;
91
- for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;
92
153
  };
93
154
  };
94
155
 
156
+ // own keys of objects are sorted - integer-like keys are moved to the beginning,
157
+ // so such keys should be marked and restored in the serialized string
158
+ var getKeyPrefix = function (propertyList) {
159
+ for (var i = 0, length = propertyList.length; i < length; i++) {
160
+ if (exec(digits, propertyList[i])) return KEY_MARK;
161
+ } return '';
162
+ };
163
+
164
+ // `SerializeJSONObject` iterates the property list, so the value is replaced with an object with keys in this order
165
+ var createOrderedObject = function (value, propertyList, keyPrefix) {
166
+ // keys are not marked if the property list has no integer-like keys, so `Object.prototype`
167
+ // with a setter, a non-writable property or `__proto__` should not intercept the assignment
168
+ var ordered = create(null);
169
+ for (var i = 0, length = propertyList.length; i < length; i++) {
170
+ var key = propertyList[i];
171
+ ordered[keyPrefix + key] = createElementHolder(value, key);
172
+ }
173
+ ordered[END_MARK] = null;
174
+ return ordered;
175
+ };
176
+
95
177
  // `JSON.stringify` method
96
178
  // https://tc39.es/ecma262/#sec-json.stringify
97
179
  // https://github.com/tc39/proposal-json-parse-with-source
98
180
  if ($stringify) $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE || !NATIVE_RAW_JSON }, {
99
181
  stringify: function stringify(text, replacer, space) {
100
- var replacerFunction = getReplacerFunction(replacer);
182
+ var replacerFunction = isCallable(replacer) ? replacer : undefined;
183
+ var propertyList = replacerFunction ? undefined : getPropertyList(replacer);
184
+ var keyPrefix = propertyList && getKeyPrefix(propertyList);
101
185
  var rawStrings = [];
186
+ var openObjects = [];
187
+ var parentOrdered = [];
188
+ var currentOrdered;
189
+ var marked = false;
190
+ var root = true;
102
191
 
103
192
  var json = stringifyWithProperSymbolsConversion(text, function (key, value) {
104
193
  // some old implementations (like WebKit) could pass numbers as keys
105
- var v = isCallable(replacerFunction) ? call(replacerFunction, this, $String(key), value) : value;
106
- return !NATIVE_RAW_JSON && isRawJSON(v) ? MARK + (push(rawStrings, v.rawJSON) - 1) : v;
194
+ key = $String(key);
195
+
196
+ if (propertyList) {
197
+ if (key === END_MARK) {
198
+ pop(openObjects);
199
+ currentOrdered = pop(parentOrdered);
200
+ return;
201
+ }
202
+ if (root) root = false;
203
+ // the innermost reordered object already contains only keys of the property list and arrays are not
204
+ // affected by it, the rest of objects (like objects with a fake `Symbol.toStringTag`) are filtered here
205
+ else if (this !== currentOrdered && !isArray(this) && !includes(propertyList, key)) return;
206
+ } else if (replacerFunction) value = call(replacerFunction, this, key, value);
207
+
208
+ if (isRawJSONValue(value)) {
209
+ if (NATIVE_RAW_JSON) return value;
210
+ marked = true;
211
+ return RAW_MARK + (push(rawStrings, value.rawJSON) - 1);
212
+ }
213
+
214
+ if (propertyList && isSerializedAsObject(value)) {
215
+ // reordered objects are new each time, so cycles should be detected before the engine does it
216
+ if (includes(openObjects, value)) throw new $TypeError('Converting circular structure to JSON');
217
+ var ordered = createOrderedObject(value, propertyList, keyPrefix);
218
+ push(openObjects, value);
219
+ push(parentOrdered, currentOrdered);
220
+ currentOrdered = ordered;
221
+ if (keyPrefix) marked = true;
222
+ return ordered;
223
+ }
224
+
225
+ return value;
107
226
  }, space);
108
227
 
109
228
  if (typeof json != 'string') return json;
110
229
 
111
230
  if (ILL_FORMED_UNICODE) json = replace(json, surrogates, fixIllFormedJSON);
112
231
 
113
- if (NATIVE_RAW_JSON) return json;
232
+ if (!marked) return json;
114
233
 
115
234
  var result = '';
116
235
  var length = json.length;
@@ -120,9 +239,9 @@ if ($stringify) $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_
120
239
  if (chr === '"') {
121
240
  var end = parseJSONString(json, ++i).end - 1;
122
241
  var string = slice(json, i, end);
123
- result += slice(string, 0, MARK_LENGTH) === MARK
124
- ? rawStrings[slice(string, MARK_LENGTH)]
125
- : '"' + string + '"';
242
+ if (slice(string, 0, RAW_MARK_LENGTH) === RAW_MARK) result += rawStrings[slice(string, RAW_MARK_LENGTH)];
243
+ else if (slice(string, 0, KEY_MARK_LENGTH) === KEY_MARK) result += '"' + slice(string, KEY_MARK_LENGTH) + '"';
244
+ else result += '"' + string + '"';
126
245
  i = end;
127
246
  } else result += chr;
128
247
  }
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
3
  var aCallable = require('../internals/a-callable');
4
- var aMap = require('../internals/a-map');
5
4
  var MapHelpers = require('../internals/map-helpers');
6
5
  var IS_PURE = require('../internals/is-pure');
7
6
 
@@ -10,12 +9,12 @@ var has = MapHelpers.has;
10
9
  var set = MapHelpers.set;
11
10
 
12
11
  // `Map.prototype.getOrInsertComputed` method
13
- // https://github.com/tc39/proposal-upsert
12
+ // https://tc39.es/ecma262/#sec-map.prototype.getorinsertcomputed
14
13
  $({ target: 'Map', proto: true, real: true, forced: IS_PURE }, {
15
14
  getOrInsertComputed: function getOrInsertComputed(key, callbackfn) {
16
- aMap(this);
15
+ var hasKey = has(this, key);
17
16
  aCallable(callbackfn);
18
- if (has(this, key)) return get(this, key);
17
+ if (hasKey) return get(this, key);
19
18
  // CanonicalizeKeyedCollectionKey
20
19
  if (key === 0 && 1 / key === -Infinity) key = 0;
21
20
  var value = callbackfn(key);
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
- var aMap = require('../internals/a-map');
4
3
  var MapHelpers = require('../internals/map-helpers');
5
4
  var IS_PURE = require('../internals/is-pure');
6
5
 
@@ -9,10 +8,10 @@ var has = MapHelpers.has;
9
8
  var set = MapHelpers.set;
10
9
 
11
10
  // `Map.prototype.getOrInsert` method
12
- // https://github.com/tc39/proposal-upsert
11
+ // https://tc39.es/ecma262/#sec-map.prototype.getorinsert
13
12
  $({ target: 'Map', proto: true, real: true, forced: IS_PURE }, {
14
13
  getOrInsert: function getOrInsert(key, value) {
15
- if (has(aMap(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
  }
@@ -4,6 +4,7 @@ var uncurryThis = require('../internals/function-uncurry-this');
4
4
  var aCallable = require('../internals/a-callable');
5
5
  var requireObjectCoercible = require('../internals/require-object-coercible');
6
6
  var iterate = require('../internals/iterate');
7
+ var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');
7
8
  var MapHelpers = require('../internals/map-helpers');
8
9
  var IS_PURE = require('../internals/is-pure');
9
10
  var fails = require('../internals/fails');
@@ -30,6 +31,7 @@ $({ target: 'Map', stat: true, forced: IS_PURE || DOES_NOT_WORK_WITH_PRIMITIVES
30
31
  var map = new Map();
31
32
  var k = 0;
32
33
  iterate(items, function (value) {
34
+ doesNotExceedSafeInteger(k);
33
35
  var key = callbackfn(value, k++);
34
36
  if (!has(map, key)) set(map, key, [value]);
35
37
  else push(get(map, key), value);
@@ -1,14 +1,19 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
+ var log1p = require('../internals/math-log1p');
3
4
 
4
5
  // eslint-disable-next-line es/no-math-asinh -- required for testing
5
6
  var $asinh = Math.asinh;
6
7
  var log = Math.log;
7
8
  var sqrt = Math.sqrt;
9
+ var LN2 = Math.LN2;
10
+ // sqrt(2 ** 53) - prevent n * n overflow
11
+ var SQRT_2_POW_53 = 94906265.62425156;
8
12
 
9
13
  function asinh(x) {
10
14
  var n = +x;
11
- return !isFinite(n) || n === 0 ? n : n < 0 ? -asinh(-n) : log(n + sqrt(n * n + 1));
15
+ return !isFinite(n) || n === 0 ? n : n < 0 ? -asinh(-n) : n > SQRT_2_POW_53 ? log(n) + LN2
16
+ : n < 1e-8 ? n : log1p(n + n * n / (1 + sqrt(n * n + 1)));
12
17
  }
13
18
 
14
19
  var FORCED = !($asinh && 1 / $asinh(0) > 0);
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
+ var log1p = require('../internals/math-log1p');
3
4
 
4
5
  // eslint-disable-next-line es/no-math-atanh -- required for testing
5
6
  var $atanh = Math.atanh;
6
- var log = Math.log;
7
7
 
8
8
  var FORCED = !($atanh && 1 / $atanh(-0) < 0);
9
9
 
@@ -13,6 +13,6 @@ var FORCED = !($atanh && 1 / $atanh(-0) < 0);
13
13
  $({ target: 'Math', stat: true, forced: FORCED }, {
14
14
  atanh: function atanh(x) {
15
15
  var n = +x;
16
- return n === 0 ? n : log((1 + n) / (1 - n)) / 2;
16
+ return n === 0 ? n : log1p(2 * n / (1 - n)) / 2;
17
17
  }
18
18
  });
@@ -10,6 +10,8 @@ var pow = Math.pow;
10
10
  $({ target: 'Math', stat: true }, {
11
11
  cbrt: function cbrt(x) {
12
12
  var n = +x;
13
- return sign(n) * pow(abs(n), 1 / 3);
13
+ var y = sign(n) * pow(abs(n), 1 / 3);
14
+ // Newton-Raphson refinement for better precision
15
+ return n !== 0 && isFinite(n) ? (2 * y + n / (y * y)) / 3 : y;
14
16
  }
15
17
  });
@@ -14,7 +14,7 @@ var pow = Math.pow;
14
14
  var push = uncurryThis([].push);
15
15
 
16
16
  var POW_2_1023 = pow(2, 1023);
17
- var MAX_SAFE_INTEGER = pow(2, 53) - 1; // 2 ** 53 - 1 === 9007199254740992
17
+ var MAX_SAFE_INTEGER = pow(2, 53) - 1; // 2 ** 53 - 1 === 9007199254740991
18
18
  var MAX_DOUBLE = Number.MAX_VALUE; // 2 ** 1024 - 2 ** (1023 - 52) === 1.79769313486231570815e+308
19
19
  var MAX_ULP = pow(2, 971); // 2 ** (1023 - 52) === 1.99584030953471981166e+292
20
20
 
@@ -32,7 +32,7 @@ var twosum = function (x, y) {
32
32
  };
33
33
 
34
34
  // `Math.sumPrecise` method
35
- // https://github.com/tc39/proposal-math-sum
35
+ // https://tc39.es/ecma262/#sec-math.sumprecise
36
36
  $({ target: 'Math', stat: true }, {
37
37
  // eslint-disable-next-line max-statements -- ok
38
38
  sumPrecise: function sumPrecise(items) {
@@ -41,7 +41,7 @@ $({ target: 'Math', stat: true }, {
41
41
  var state = MINUS_ZERO;
42
42
 
43
43
  iterate(items, function (n) {
44
- if (++count >= MAX_SAFE_INTEGER) throw new $RangeError('Maximum allowed index exceeded');
44
+ if (++count > MAX_SAFE_INTEGER) throw new $RangeError('Maximum allowed index exceeded');
45
45
  if (typeof n != 'number') throw new $TypeError('Value is not a number');
46
46
  if (state !== NOT_A_NUMBER) {
47
47
  // eslint-disable-next-line no-self-compare -- NaN check
@@ -18,6 +18,8 @@ var nativeToExponential = uncurryThis(1.1.toExponential);
18
18
  var repeat = uncurryThis($repeat);
19
19
  var stringSlice = uncurryThis(''.slice);
20
20
 
21
+ var POW_10_308 = pow(10, 308);
22
+
21
23
  // Edge 17-
22
24
  var ROUNDS_PROPERLY = nativeToExponential(-6.9e-11, 4) === '-6.9000e-11'
23
25
  // IE11- && Edge 14-
@@ -58,7 +60,7 @@ $({ target: 'Number', proto: true, forced: FORCED }, {
58
60
  if (f < 0 || f > 20) throw new $RangeError('Incorrect fraction digits');
59
61
  if (ROUNDS_PROPERLY) return nativeToExponential(x, f);
60
62
  var s = '';
61
- var m, e, c, d;
63
+ var m, e, c, d, l, n, xScaled;
62
64
  if (x < 0) {
63
65
  s = '-';
64
66
  x = -x;
@@ -67,13 +69,20 @@ $({ target: 'Number', proto: true, forced: FORCED }, {
67
69
  e = 0;
68
70
  m = repeat('0', f + 1);
69
71
  } else {
70
- // this block is based on https://gist.github.com/SheetJSDev/1100ad56b9f856c95299ed0e068eea08
71
72
  // TODO: improve accuracy with big fraction digits
72
- var l = log10(x);
73
+ l = log10(x);
73
74
  e = floor(l);
74
- var w = pow(10, e - f);
75
- var n = round(x / w);
76
- if (2 * x >= (2 * n + 1) * w) {
75
+ // compute x / pow(10, e - f) and round, avoiding underflow/overflow
76
+ if (f - e >= 308) {
77
+ // pow(10, e - f) would underflow to a subnormal or zero; split computation
78
+ xScaled = x * POW_10_308 * pow(10, f - e - 308);
79
+ } else {
80
+ xScaled = x / pow(10, e - f);
81
+ }
82
+ n = round(xScaled);
83
+ // correct tie-breaking: round half up
84
+ // avoids `2 * x` overflow for values near MAX_VALUE
85
+ if (xScaled - n >= 0.5) {
77
86
  n += 1;
78
87
  }
79
88
  if (n >= pow(10, f + 1)) {
@@ -7,6 +7,7 @@ var aCallable = require('../internals/a-callable');
7
7
  var requireObjectCoercible = require('../internals/require-object-coercible');
8
8
  var toPropertyKey = require('../internals/to-property-key');
9
9
  var iterate = require('../internals/iterate');
10
+ var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');
10
11
  var fails = require('../internals/fails');
11
12
 
12
13
  // eslint-disable-next-line es/no-object-groupby -- testing
@@ -30,6 +31,7 @@ $({ target: 'Object', stat: true, forced: DOES_NOT_WORK_WITH_PRIMITIVES }, {
30
31
  var obj = create(null);
31
32
  var k = 0;
32
33
  iterate(items, function (value) {
34
+ doesNotExceedSafeInteger(k);
33
35
  var key = toPropertyKey(callbackfn(value, k++));
34
36
  // in some IE versions, `hasOwnProperty` returns incorrect result on integer keys
35
37
  // but since it's a `null` prototype object, we can safely use `in`
@@ -15,7 +15,8 @@ var PROTO = '__proto__';
15
15
 
16
16
  // `Object.prototype.__proto__` accessor
17
17
  // https://tc39.es/ecma262/#sec-object.prototype.__proto__
18
- if (DESCRIPTORS && getPrototypeOf && setPrototypeOf && !(PROTO in ObjectPrototype)) try {
18
+ // Deno 2.9+ patch this accessor, so we can't use `in` for feature detection
19
+ if (DESCRIPTORS && getPrototypeOf && setPrototypeOf && ({}[PROTO] !== ObjectPrototype)) try {
19
20
  defineBuiltInAccessor(ObjectPrototype, PROTO, {
20
21
  configurable: true,
21
22
  get: function __proto__() {
@@ -3,31 +3,39 @@ var $ = require('../internals/export');
3
3
  var globalThis = require('../internals/global-this');
4
4
  var apply = require('../internals/function-apply');
5
5
  var slice = require('../internals/array-slice');
6
+ var promiseResolve = require('../internals/promise-resolve');
6
7
  var newPromiseCapabilityModule = require('../internals/new-promise-capability');
7
8
  var aCallable = require('../internals/a-callable');
8
9
  var perform = require('../internals/perform');
10
+ var fails = require('../internals/fails');
9
11
 
10
12
  var Promise = globalThis.Promise;
11
13
 
12
14
  var ACCEPT_ARGUMENTS = false;
13
- // Avoiding the use of polyfills of the previous iteration of this proposal
14
- // that does not accept arguments of the callback
15
- var FORCED = !Promise || !Promise['try'] || perform(function () {
16
- Promise['try'](function (argument) {
15
+ var FORCED = !Promise || !Promise['try'] || fails(function () {
16
+ var p = Promise.resolve();
17
+ return Promise['try'](function (argument) {
18
+ // avoiding the use of polyfills of the previous iteration of this proposal
19
+ // that does not accept arguments of the callback
17
20
  ACCEPT_ARGUMENTS = argument === 8;
18
- }, 8);
19
- }).error || !ACCEPT_ARGUMENTS;
21
+ return p;
22
+ // it should use `PromiseResolve`
23
+ // https://github.com/tc39/ecma262/pull/3883
24
+ }, 8) !== p;
25
+ }) || !ACCEPT_ARGUMENTS;
20
26
 
21
27
  // `Promise.try` method
22
28
  // https://tc39.es/ecma262/#sec-promise.try
23
29
  $({ target: 'Promise', stat: true, forced: FORCED }, {
24
30
  'try': function (callbackfn /* , ...args */) {
25
31
  var args = arguments.length > 1 ? slice(arguments, 1) : [];
26
- var promiseCapability = newPromiseCapabilityModule.f(this);
27
32
  var result = perform(function () {
28
33
  return apply(aCallable(callbackfn), undefined, args);
29
34
  });
30
- (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);
35
+ if (!result.error) return promiseResolve(this, result.value);
36
+ var promiseCapability = newPromiseCapabilityModule.f(this);
37
+ var reject = promiseCapability.reject;
38
+ reject(result.value);
31
39
  return promiseCapability.promise;
32
40
  }
33
41
  });
@@ -31,8 +31,8 @@ var FORCED = NEW_TARGET_BUG || ARGS_BUG;
31
31
  $({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {
32
32
  construct: function construct(Target, args /* , newTarget */) {
33
33
  aConstructor(Target);
34
- anObject(args);
35
34
  var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);
35
+ anObject(args);
36
36
  if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);
37
37
  if (Target === newTarget) {
38
38
  // w/o altered newTarget, optimization for 0-4 arguments
@@ -4,8 +4,11 @@ var DESCRIPTORS = require('../internals/descriptors');
4
4
  var anObject = require('../internals/an-object');
5
5
  var toPropertyKey = require('../internals/to-property-key');
6
6
  var definePropertyModule = require('../internals/object-define-property');
7
+ var isCallable = require('../internals/is-callable');
7
8
  var fails = require('../internals/fails');
8
9
 
10
+ var $TypeError = TypeError;
11
+
9
12
  // MS Edge has broken Reflect.defineProperty - throwing instead of returning false
10
13
  var ERROR_INSTEAD_OF_FALSE = fails(function () {
11
14
  // eslint-disable-next-line es/no-reflect -- required for testing
@@ -18,7 +21,14 @@ $({ target: 'Reflect', stat: true, forced: ERROR_INSTEAD_OF_FALSE, sham: !DESCRI
18
21
  defineProperty: function defineProperty(target, propertyKey, attributes) {
19
22
  anObject(target);
20
23
  var key = toPropertyKey(propertyKey);
24
+ var get, set;
21
25
  anObject(attributes);
26
+ // propagate `ToPropertyDescriptor` errors instead of catching them
27
+ if (('get' in attributes || 'set' in attributes) && (
28
+ ('get' in attributes && !isCallable(get = attributes.get) && get !== undefined) ||
29
+ ('set' in attributes && !isCallable(set = attributes.set) && set !== undefined) ||
30
+ ('value' in attributes || 'writable' in attributes)
31
+ )) throw new $TypeError('Invalid property descriptor');
22
32
  try {
23
33
  definePropertyModule.f(target, key, attributes);
24
34
  return true;
@@ -2,12 +2,15 @@
2
2
  var $ = require('../internals/export');
3
3
  var anObject = require('../internals/an-object');
4
4
  var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;
5
+ var toPropertyKey = require('../internals/to-property-key');
5
6
 
6
7
  // `Reflect.deleteProperty` method
7
8
  // https://tc39.es/ecma262/#sec-reflect.deleteproperty
8
9
  $({ target: 'Reflect', stat: true }, {
9
10
  deleteProperty: function deleteProperty(target, propertyKey) {
10
- var descriptor = getOwnPropertyDescriptor(anObject(target), propertyKey);
11
- return descriptor && !descriptor.configurable ? false : delete target[propertyKey];
11
+ anObject(target);
12
+ var key = toPropertyKey(propertyKey);
13
+ var descriptor = getOwnPropertyDescriptor(target, key);
14
+ return descriptor && !descriptor.configurable ? false : delete target[key];
12
15
  }
13
16
  });
@@ -6,20 +6,22 @@ var anObject = require('../internals/an-object');
6
6
  var isDataDescriptor = require('../internals/is-data-descriptor');
7
7
  var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
8
8
  var getPrototypeOf = require('../internals/object-get-prototype-of');
9
+ var toPropertyKey = require('../internals/to-property-key');
9
10
 
10
11
  // `Reflect.get` method
11
12
  // https://tc39.es/ecma262/#sec-reflect.get
12
- function get(target, propertyKey /* , receiver */) {
13
- var receiver = arguments.length < 3 ? target : arguments[2];
14
- var descriptor, prototype;
13
+ var $get = function (target, propertyKey, receiver) {
15
14
  if (anObject(target) === receiver) return target[propertyKey];
16
- descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);
15
+ var descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);
17
16
  if (descriptor) return isDataDescriptor(descriptor)
18
17
  ? descriptor.value
19
18
  : descriptor.get === undefined ? undefined : call(descriptor.get, receiver);
20
- if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);
21
- }
19
+ var prototype = getPrototypeOf(target);
20
+ if (isObject(prototype)) return $get(prototype, propertyKey, receiver);
21
+ };
22
22
 
23
23
  $({ target: 'Reflect', stat: true }, {
24
- get: get
24
+ get: function get(target, propertyKey /* , receiver */) {
25
+ return $get(anObject(target), toPropertyKey(propertyKey), arguments.length < 3 ? target : arguments[2]);
26
+ }
25
27
  });