core-js 3.47.0 → 3.49.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 (146) hide show
  1. package/LICENSE +2 -1
  2. package/README.md +2 -2
  3. package/actual/map/get-or-insert-computed.js +2 -3
  4. package/actual/map/get-or-insert.js +2 -3
  5. package/actual/map/group-by.js +2 -0
  6. package/actual/weak-map/get-or-insert-computed.js +2 -3
  7. package/actual/weak-map/get-or-insert.js +2 -3
  8. package/configurator.js +1 -1
  9. package/es/index.js +4 -0
  10. package/es/map/get-or-insert-computed.js +6 -0
  11. package/es/map/get-or-insert.js +6 -0
  12. package/es/map/group-by.js +2 -0
  13. package/es/map/index.js +2 -0
  14. package/es/object/define-properties.js +2 -2
  15. package/es/object/define-property.js +2 -2
  16. package/es/object/get-own-property-descriptor.js +2 -2
  17. package/es/promise/try.js +2 -2
  18. package/es/weak-map/get-or-insert-computed.js +6 -0
  19. package/es/weak-map/get-or-insert.js +6 -0
  20. package/es/weak-map/index.js +2 -0
  21. package/full/index.js +4 -0
  22. package/internals/advance-string-index.js +1 -1
  23. package/internals/array-buffer-transfer.js +4 -1
  24. package/internals/array-buffer-view-core.js +1 -1
  25. package/internals/array-buffer.js +1 -2
  26. package/internals/array-from-async.js +5 -7
  27. package/internals/array-from.js +9 -3
  28. package/internals/array-iteration.js +11 -13
  29. package/internals/array-unique-by.js +3 -3
  30. package/internals/async-from-sync-iterator.js +28 -4
  31. package/internals/async-iterator-close.js +11 -3
  32. package/internals/async-iterator-create-proxy.js +47 -20
  33. package/internals/async-iterator-iteration.js +11 -6
  34. package/internals/async-iterator-map.js +20 -18
  35. package/internals/does-not-exceed-safe-integer.js +1 -1
  36. package/internals/environment-is-ios.js +1 -2
  37. package/internals/flatten-into-array.js +2 -1
  38. package/internals/function-bind-native.js +1 -1
  39. package/internals/function-name.js +1 -1
  40. package/internals/iterate.js +8 -3
  41. package/internals/iterator-create-proxy.js +4 -1
  42. package/internals/iterator-window.js +2 -2
  43. package/internals/iterator-zip.js +4 -3
  44. package/internals/native-raw-json.js +2 -2
  45. package/internals/numeric-range-iterator.js +9 -4
  46. package/internals/regexp-exec.js +20 -13
  47. package/internals/set-difference.js +1 -1
  48. package/internals/set-is-disjoint-from.js +1 -1
  49. package/internals/set-is-superset-of.js +1 -1
  50. package/internals/shared-store.js +3 -3
  51. package/internals/string-pad.js +2 -1
  52. package/internals/string-parse.js +1 -1
  53. package/internals/string-repeat.js +2 -1
  54. package/internals/to-uint8-clamped.js +11 -3
  55. package/internals/typed-array-constructor.js +1 -2
  56. package/internals/typed-array-from.js +3 -1
  57. package/internals/uint8-from-hex.js +10 -10
  58. package/modules/es.array.concat.js +2 -1
  59. package/modules/es.array.flat-map.js +1 -1
  60. package/modules/es.array.flat.js +2 -1
  61. package/modules/es.array.from-async.js +1 -1
  62. package/modules/es.array.includes.js +7 -1
  63. package/modules/es.array.of.js +2 -1
  64. package/modules/es.array.slice.js +2 -1
  65. package/modules/es.array.sort.js +3 -1
  66. package/modules/es.array.splice.js +1 -1
  67. package/modules/es.array.to-reversed.js +8 -2
  68. package/modules/es.array.to-spliced.js +4 -3
  69. package/modules/es.array.with.js +13 -2
  70. package/modules/es.data-view.get-float16.js +1 -1
  71. package/modules/es.data-view.set-float16.js +2 -1
  72. package/modules/es.date.set-year.js +4 -1
  73. package/modules/es.error.is-error.js +1 -1
  74. package/modules/es.escape.js +1 -1
  75. package/modules/es.iterator.concat.js +4 -3
  76. package/modules/es.iterator.flat-map.js +15 -1
  77. package/modules/es.iterator.take.js +7 -2
  78. package/modules/es.iterator.to-array.js +5 -3
  79. package/modules/es.json.parse.js +13 -1
  80. package/modules/es.json.stringify.js +6 -3
  81. package/modules/es.map.get-or-insert-computed.js +24 -0
  82. package/modules/es.map.get-or-insert.js +18 -0
  83. package/modules/es.math.asinh.js +4 -1
  84. package/modules/es.math.atanh.js +2 -2
  85. package/modules/es.math.sum-precise.js +3 -3
  86. package/modules/es.number.to-exponential.js +15 -6
  87. package/modules/es.reflect.construct.js +1 -1
  88. package/modules/es.reflect.define-property.js +10 -0
  89. package/modules/es.reflect.delete-property.js +5 -2
  90. package/modules/es.reflect.get.js +9 -7
  91. package/modules/es.reflect.set.js +14 -9
  92. package/modules/es.regexp.constructor.js +18 -7
  93. package/modules/es.string.ends-with.js +1 -1
  94. package/modules/es.string.from-code-point.js +2 -2
  95. package/modules/es.string.match-all.js +1 -1
  96. package/modules/es.string.match.js +2 -2
  97. package/modules/es.string.replace.js +9 -8
  98. package/modules/es.string.split.js +7 -5
  99. package/modules/es.string.starts-with.js +1 -1
  100. package/modules/es.string.substr.js +5 -7
  101. package/modules/es.symbol.constructor.js +3 -2
  102. package/modules/es.symbol.description.js +9 -0
  103. package/modules/es.typed-array.map.js +3 -4
  104. package/modules/es.typed-array.sort.js +3 -3
  105. package/modules/es.typed-array.to-reversed.js +7 -2
  106. package/modules/es.typed-array.with.js +11 -3
  107. package/modules/es.uint8-array.from-base64.js +1 -1
  108. package/modules/es.uint8-array.from-hex.js +1 -1
  109. package/modules/es.uint8-array.set-from-base64.js +1 -1
  110. package/modules/es.uint8-array.set-from-hex.js +15 -2
  111. package/modules/es.uint8-array.to-base64.js +1 -1
  112. package/modules/es.uint8-array.to-hex.js +6 -4
  113. package/modules/es.weak-map.get-or-insert-computed.js +36 -0
  114. package/modules/es.weak-map.get-or-insert.js +18 -0
  115. package/modules/esnext.array.is-template-object.js +1 -1
  116. package/modules/esnext.async-iterator.reduce.js +2 -2
  117. package/modules/esnext.async-iterator.take.js +4 -2
  118. package/modules/esnext.bigint.range.js +1 -1
  119. package/modules/esnext.iterator.range.js +1 -1
  120. package/modules/esnext.iterator.zip-keyed.js +3 -2
  121. package/modules/esnext.iterator.zip.js +4 -3
  122. package/modules/esnext.map.get-or-insert-computed.js +2 -24
  123. package/modules/esnext.map.get-or-insert.js +2 -18
  124. package/modules/esnext.number.from-string.js +30 -3
  125. package/modules/esnext.number.range.js +1 -1
  126. package/modules/esnext.observable.from.js +5 -2
  127. package/modules/esnext.string.dedent.js +1 -1
  128. package/modules/esnext.weak-map.get-or-insert-computed.js +2 -35
  129. package/modules/esnext.weak-map.get-or-insert.js +2 -18
  130. package/modules/web.atob.js +15 -6
  131. package/modules/web.btoa.js +10 -3
  132. package/modules/web.structured-clone.js +2 -2
  133. package/modules/web.url-search-params.constructor.js +25 -10
  134. package/modules/web.url-search-params.delete.js +6 -9
  135. package/modules/web.url.constructor.js +55 -26
  136. package/modules/web.url.parse.js +1 -1
  137. package/package.json +5 -1
  138. package/stable/index.js +4 -0
  139. package/stable/map/get-or-insert-computed.js +4 -0
  140. package/stable/map/get-or-insert.js +4 -0
  141. package/stable/weak-map/get-or-insert-computed.js +4 -0
  142. package/stable/weak-map/get-or-insert.js +4 -0
  143. package/stage/3.js +0 -1
  144. package/stage/4.js +1 -0
  145. package/internals/array-to-reversed.js +0 -12
  146. package/internals/array-with.js +0 -18
package/LICENSE CHANGED
@@ -1,4 +1,5 @@
1
- Copyright (c) 2014-2025 Denis Pushkarev, 2025 CoreJS Company
1
+ Copyright (c) 2013–2025 Denis Pushkarev (zloirock.ru)
2
+ Copyright (c) 2025–2026 CoreJS Company (core-js.io)
2
3
 
3
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
5
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  **I highly recommend reading this: [So, what's next?](https://github.com/zloirock/core-js/blob/master/docs/2023-02-14-so-whats-next.md)**
10
10
  ---
11
11
 
12
- > Modular standard library for JavaScript. Includes polyfills for [ECMAScript up to 2025](https://github.com/zloirock/core-js#ecmascript): [promises](https://github.com/zloirock/core-js#ecmascript-promise), [symbols](https://github.com/zloirock/core-js#ecmascript-symbol), [collections](https://github.com/zloirock/core-js#ecmascript-collections), iterators, [typed arrays](https://github.com/zloirock/core-js#ecmascript-typed-arrays), many other features, [ECMAScript proposals](https://github.com/zloirock/core-js#ecmascript-proposals), [some cross-platform WHATWG / W3C features and proposals](#web-standards) like [`URL`](https://github.com/zloirock/core-js#url-and-urlsearchparams). You can load only required features or use it without global namespace pollution.
12
+ > [`core-js`](https://core-js.io) is a modular standard library for JavaScript. Includes polyfills for ECMAScript up to 2026: [promises](https://core-js.io/docs/features/ecmascript/promise), [symbols](https://core-js.io/docs/features/ecmascript/symbol), [collections](https://core-js.io/docs/features/ecmascript/collections), [iterators](https://core-js.io/docs/features/ecmascript/iterator), [typed arrays](https://core-js.io/docs/features/ecmascript/typed-arrays), many other features, ECMAScript proposals, some cross-platform WHATWG / W3C features and proposals like [`URL`](https://core-js.io/docs/features/web-standards/url-and-urlsearchparams). You can load only required features or use it without global namespace pollution.
13
13
 
14
14
  ## Raising funds
15
15
 
@@ -92,4 +92,4 @@ Iterator.concat([1, 2], function * (i) { while (true) yield i++; }(3))
92
92
  structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
93
93
  ```
94
94
 
95
- **It's a global version (first 2 examples), for more info see [`core-js` documentation](https://github.com/zloirock/core-js/blob/master/README.md).**
95
+ **It's a global version (first 2 examples), for more info see [`core-js` documentation](https://core-js.io).**
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
- require('../../modules/es.map');
2
+ var parent = require('../../stable/map/get-or-insert-computed');
3
3
  require('../../modules/esnext.map.get-or-insert-computed');
4
- var entryUnbind = require('../../internals/entry-unbind');
5
4
 
6
- module.exports = entryUnbind('Map', 'getOrInsertComputed');
5
+ module.exports = parent;
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
- require('../../modules/es.map');
2
+ var parent = require('../../stable/map/get-or-insert');
3
3
  require('../../modules/esnext.map.get-or-insert');
4
- var entryUnbind = require('../../internals/entry-unbind');
5
4
 
6
- module.exports = entryUnbind('Map', 'getOrInsert');
5
+ module.exports = parent;
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
  var parent = require('../../stable/map/group-by');
3
3
  require('../../modules/esnext.map.group-by');
4
+ require('../../modules/esnext.map.get-or-insert');
5
+ require('../../modules/esnext.map.get-or-insert-computed');
4
6
 
5
7
  module.exports = parent;
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
- require('../../modules/es.weak-map');
2
+ var parent = require('../../stable/weak-map/get-or-insert-computed');
3
3
  require('../../modules/esnext.weak-map.get-or-insert-computed');
4
- var entryUnbind = require('../../internals/entry-unbind');
5
4
 
6
- module.exports = entryUnbind('WeakMap', 'getOrInsertComputed');
5
+ module.exports = parent;
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
- require('../../modules/es.weak-map');
2
+ var parent = require('../../stable/weak-map/get-or-insert');
3
3
  require('../../modules/esnext.weak-map.get-or-insert');
4
- var entryUnbind = require('../../internals/entry-unbind');
5
4
 
6
- module.exports = entryUnbind('WeakMap', 'getOrInsert');
5
+ module.exports = parent;
package/configurator.js CHANGED
@@ -14,7 +14,7 @@ var setAggressivenessLevel = function (object, constant) {
14
14
  };
15
15
 
16
16
  module.exports = function (options) {
17
- if (typeof options == 'object') {
17
+ if (options && typeof options == 'object') {
18
18
  setAggressivenessLevel(options.useNative, isForced.NATIVE);
19
19
  setAggressivenessLevel(options.usePolyfill, isForced.POLYFILL);
20
20
  setAggressivenessLevel(options.useFeatureDetection, null);
package/es/index.js CHANGED
@@ -105,6 +105,8 @@ require('../modules/es.json.stringify');
105
105
  require('../modules/es.json.to-string-tag');
106
106
  require('../modules/es.map');
107
107
  require('../modules/es.map.group-by');
108
+ require('../modules/es.map.get-or-insert');
109
+ require('../modules/es.map.get-or-insert-computed');
108
110
  require('../modules/es.math.acosh');
109
111
  require('../modules/es.math.asinh');
110
112
  require('../modules/es.math.atanh');
@@ -291,6 +293,8 @@ require('../modules/es.uint8-array.to-base64');
291
293
  require('../modules/es.uint8-array.to-hex');
292
294
  require('../modules/es.unescape');
293
295
  require('../modules/es.weak-map');
296
+ require('../modules/es.weak-map.get-or-insert');
297
+ require('../modules/es.weak-map.get-or-insert-computed');
294
298
  require('../modules/es.weak-set');
295
299
 
296
300
  module.exports = require('../internals/path');
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+ require('../../modules/es.map');
3
+ require('../../modules/es.map.get-or-insert-computed');
4
+ var entryUnbind = require('../../internals/entry-unbind');
5
+
6
+ module.exports = entryUnbind('Map', 'getOrInsertComputed');
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+ require('../../modules/es.map');
3
+ require('../../modules/es.map.get-or-insert');
4
+ var entryUnbind = require('../../internals/entry-unbind');
5
+
6
+ module.exports = entryUnbind('Map', 'getOrInsert');
@@ -2,6 +2,8 @@
2
2
  require('../../modules/es.object.to-string');
3
3
  require('../../modules/es.map');
4
4
  require('../../modules/es.map.group-by');
5
+ require('../../modules/es.map.get-or-insert');
6
+ require('../../modules/es.map.get-or-insert-computed');
5
7
  var path = require('../../internals/path');
6
8
 
7
9
  module.exports = path.Map.groupBy;
package/es/map/index.js CHANGED
@@ -2,6 +2,8 @@
2
2
  require('../../modules/es.array.iterator');
3
3
  require('../../modules/es.map');
4
4
  require('../../modules/es.map.group-by');
5
+ require('../../modules/es.map.get-or-insert');
6
+ require('../../modules/es.map.get-or-insert-computed');
5
7
  require('../../modules/es.object.to-string');
6
8
  require('../../modules/es.string.iterator');
7
9
  var path = require('../../internals/path');
@@ -4,8 +4,8 @@ var path = require('../../internals/path');
4
4
 
5
5
  var Object = path.Object;
6
6
 
7
- var defineProperties = module.exports = function defineProperties(T, D) {
7
+ var $defineProperties = module.exports = function defineProperties(T, D) {
8
8
  return Object.defineProperties(T, D);
9
9
  };
10
10
 
11
- if (Object.defineProperties.sham) defineProperties.sham = true;
11
+ if (Object.defineProperties.sham) $defineProperties.sham = true;
@@ -4,8 +4,8 @@ var path = require('../../internals/path');
4
4
 
5
5
  var Object = path.Object;
6
6
 
7
- var defineProperty = module.exports = function defineProperty(it, key, desc) {
7
+ var $defineProperty = module.exports = function defineProperty(it, key, desc) {
8
8
  return Object.defineProperty(it, key, desc);
9
9
  };
10
10
 
11
- if (Object.defineProperty.sham) defineProperty.sham = true;
11
+ if (Object.defineProperty.sham) $defineProperty.sham = true;
@@ -4,8 +4,8 @@ var path = require('../../internals/path');
4
4
 
5
5
  var Object = path.Object;
6
6
 
7
- var getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) {
7
+ var $getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) {
8
8
  return Object.getOwnPropertyDescriptor(it, key);
9
9
  };
10
10
 
11
- if (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true;
11
+ if (Object.getOwnPropertyDescriptor.sham) $getOwnPropertyDescriptor.sham = true;
package/es/promise/try.js CHANGED
@@ -10,6 +10,6 @@ var Promise = path.Promise;
10
10
  var $try = Promise['try'];
11
11
 
12
12
  // eslint-disable-next-line no-unused-vars -- required for arity
13
- module.exports = ({ 'try': function (callbackfn /* , ...args */) {
13
+ module.exports = { 'try': function (callbackfn /* , ...args */) {
14
14
  return apply($try, isCallable(this) ? this : Promise, arguments);
15
- } })['try'];
15
+ } }['try'];
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+ require('../../modules/es.weak-map');
3
+ require('../../modules/es.weak-map.get-or-insert-computed');
4
+ var entryUnbind = require('../../internals/entry-unbind');
5
+
6
+ module.exports = entryUnbind('WeakMap', 'getOrInsertComputed');
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+ require('../../modules/es.weak-map');
3
+ require('../../modules/es.weak-map.get-or-insert');
4
+ var entryUnbind = require('../../internals/entry-unbind');
5
+
6
+ module.exports = entryUnbind('WeakMap', 'getOrInsert');
@@ -2,6 +2,8 @@
2
2
  require('../../modules/es.array.iterator');
3
3
  require('../../modules/es.object.to-string');
4
4
  require('../../modules/es.weak-map');
5
+ require('../../modules/es.weak-map.get-or-insert');
6
+ require('../../modules/es.weak-map.get-or-insert-computed');
5
7
  var path = require('../../internals/path');
6
8
 
7
9
  module.exports = path.WeakMap;
package/full/index.js CHANGED
@@ -105,6 +105,8 @@ require('../modules/es.json.stringify');
105
105
  require('../modules/es.json.to-string-tag');
106
106
  require('../modules/es.map');
107
107
  require('../modules/es.map.group-by');
108
+ require('../modules/es.map.get-or-insert');
109
+ require('../modules/es.map.get-or-insert-computed');
108
110
  require('../modules/es.math.acosh');
109
111
  require('../modules/es.math.asinh');
110
112
  require('../modules/es.math.atanh');
@@ -291,6 +293,8 @@ require('../modules/es.uint8-array.to-base64');
291
293
  require('../modules/es.uint8-array.to-hex');
292
294
  require('../modules/es.unescape');
293
295
  require('../modules/es.weak-map');
296
+ require('../modules/es.weak-map.get-or-insert');
297
+ require('../modules/es.weak-map.get-or-insert-computed');
294
298
  require('../modules/es.weak-set');
295
299
  require('../modules/esnext.aggregate-error');
296
300
  require('../modules/esnext.suppressed-error.constructor');
@@ -4,5 +4,5 @@ var charAt = require('../internals/string-multibyte').charAt;
4
4
  // `AdvanceStringIndex` abstract operation
5
5
  // https://tc39.es/ecma262/#sec-advancestringindex
6
6
  module.exports = function (S, index, unicode) {
7
- return index + (unicode ? charAt(S, index).length : 1);
7
+ return index + (unicode ? charAt(S, index).length || 1 : 1);
8
8
  };
@@ -11,6 +11,7 @@ var PROPER_STRUCTURED_CLONE_TRANSFER = require('../internals/structured-clone-pr
11
11
  var structuredClone = globalThis.structuredClone;
12
12
  var ArrayBuffer = globalThis.ArrayBuffer;
13
13
  var DataView = globalThis.DataView;
14
+ var max = Math.max;
14
15
  var min = Math.min;
15
16
  var ArrayBufferPrototype = ArrayBuffer.prototype;
16
17
  var DataViewPrototype = DataView.prototype;
@@ -33,7 +34,9 @@ module.exports = (PROPER_STRUCTURED_CLONE_TRANSFER || detachTransferable) && fun
33
34
  if (byteLength >= newByteLength && (!preserveResizability || fixedLength)) {
34
35
  newBuffer = slice(arrayBuffer, 0, newByteLength);
35
36
  } else {
36
- var options = preserveResizability && !fixedLength && maxByteLength ? { maxByteLength: maxByteLength(arrayBuffer) } : undefined;
37
+ var options = preserveResizability && !fixedLength && maxByteLength
38
+ ? { maxByteLength: max(newByteLength, maxByteLength(arrayBuffer)) }
39
+ : undefined;
37
40
  newBuffer = new ArrayBuffer(newByteLength, options);
38
41
  var a = new DataView(arrayBuffer);
39
42
  var b = new DataView(newBuffer);
@@ -174,7 +174,7 @@ if (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {
174
174
  }
175
175
  });
176
176
  for (NAME in TypedArrayConstructorsList) if (globalThis[NAME]) {
177
- createNonEnumerableProperty(globalThis[NAME], TYPED_ARRAY_TAG, NAME);
177
+ createNonEnumerableProperty(globalThis[NAME].prototype, TYPED_ARRAY_TAG, NAME);
178
178
  }
179
179
  }
180
180
 
@@ -10,7 +10,6 @@ var defineBuiltIns = require('../internals/define-built-ins');
10
10
  var fails = require('../internals/fails');
11
11
  var anInstance = require('../internals/an-instance');
12
12
  var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
13
- var toLength = require('../internals/to-length');
14
13
  var toIndex = require('../internals/to-index');
15
14
  var fround = require('../internals/math-fround');
16
15
  var IEEE754 = require('../internals/ieee754');
@@ -126,7 +125,7 @@ if (!NATIVE_ARRAY_BUFFER) {
126
125
  var bufferLength = bufferState.byteLength;
127
126
  var offset = toIntegerOrInfinity(byteOffset);
128
127
  if (offset < 0 || offset > bufferLength) throw new RangeError('Wrong offset');
129
- byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
128
+ byteLength = byteLength === undefined ? bufferLength - offset : toIndex(byteLength);
130
129
  if (offset + byteLength > bufferLength) throw new RangeError(WRONG_LENGTH);
131
130
  setInternalState(this, {
132
131
  type: DATA_VIEW,
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
  var bind = require('../internals/function-bind-context');
3
3
  var uncurryThis = require('../internals/function-uncurry-this');
4
- var toObject = require('../internals/to-object');
5
4
  var isConstructor = require('../internals/is-constructor');
6
5
  var getAsyncIterator = require('../internals/get-async-iterator');
7
6
  var getIterator = require('../internals/get-iterator');
@@ -32,20 +31,19 @@ SafeArrayIterator.prototype.next = function () {
32
31
 
33
32
  // `Array.fromAsync` method implementation
34
33
  // https://github.com/tc39/proposal-array-from-async
35
- module.exports = function fromAsync(asyncItems /* , mapfn = undefined, thisArg = undefined */) {
34
+ module.exports = function fromAsync(items /* , mapfn = undefined, thisArg = undefined */) {
36
35
  var C = this;
37
36
  var argumentsLength = arguments.length;
38
37
  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
39
38
  var thisArg = argumentsLength > 2 ? arguments[2] : undefined;
40
39
  return new (getBuiltIn('Promise'))(function (resolve) {
41
- var O = toObject(asyncItems);
42
40
  if (mapfn !== undefined) mapfn = bind(mapfn, thisArg);
43
- var usingAsyncIterator = getMethod(O, ASYNC_ITERATOR);
44
- var usingSyncIterator = usingAsyncIterator ? undefined : getIteratorMethod(O) || safeArrayIterator;
41
+ var usingAsyncIterator = getMethod(items, ASYNC_ITERATOR);
42
+ var usingSyncIterator = usingAsyncIterator ? undefined : getIteratorMethod(items) || safeArrayIterator;
45
43
  var A = isConstructor(C) ? new C() : [];
46
44
  var iterator = usingAsyncIterator
47
- ? getAsyncIterator(O, usingAsyncIterator)
48
- : new AsyncFromSyncIterator(getIteratorDirect(getIterator(O, usingSyncIterator)));
45
+ ? getAsyncIterator(items, usingAsyncIterator)
46
+ : new AsyncFromSyncIterator(getIteratorDirect(getIterator(items, usingSyncIterator)));
49
47
  resolve(toArray(iterator, mapfn, A));
50
48
  });
51
49
  };
@@ -7,20 +7,22 @@ var isArrayIteratorMethod = require('../internals/is-array-iterator-method');
7
7
  var isConstructor = require('../internals/is-constructor');
8
8
  var lengthOfArrayLike = require('../internals/length-of-array-like');
9
9
  var createProperty = require('../internals/create-property');
10
+ var setArrayLength = require('../internals/array-set-length');
10
11
  var getIterator = require('../internals/get-iterator');
11
12
  var getIteratorMethod = require('../internals/get-iterator-method');
13
+ var iteratorClose = require('../internals/iterator-close');
12
14
 
13
15
  var $Array = Array;
14
16
 
15
17
  // `Array.from` method implementation
16
18
  // https://tc39.es/ecma262/#sec-array.from
17
19
  module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
18
- var O = toObject(arrayLike);
19
20
  var IS_CONSTRUCTOR = isConstructor(this);
20
21
  var argumentsLength = arguments.length;
21
22
  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
22
23
  var mapping = mapfn !== undefined;
23
24
  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);
25
+ var O = toObject(arrayLike);
24
26
  var iteratorMethod = getIteratorMethod(O);
25
27
  var index = 0;
26
28
  var length, result, step, iterator, next, value;
@@ -31,7 +33,11 @@ module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undef
31
33
  next = iterator.next;
32
34
  for (;!(step = call(next, iterator)).done; index++) {
33
35
  value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
34
- createProperty(result, index, value);
36
+ try {
37
+ createProperty(result, index, value);
38
+ } catch (error) {
39
+ iteratorClose(iterator, 'throw', error);
40
+ }
35
41
  }
36
42
  } else {
37
43
  length = lengthOfArrayLike(O);
@@ -41,6 +47,6 @@ module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undef
41
47
  createProperty(result, index, value);
42
48
  }
43
49
  }
44
- result.length = index;
50
+ setArrayLength(result, index);
45
51
  return result;
46
52
  };
@@ -1,12 +1,10 @@
1
1
  'use strict';
2
2
  var bind = require('../internals/function-bind-context');
3
- var uncurryThis = require('../internals/function-uncurry-this');
4
3
  var IndexedObject = require('../internals/indexed-object');
5
4
  var toObject = require('../internals/to-object');
6
5
  var lengthOfArrayLike = require('../internals/length-of-array-like');
7
6
  var arraySpeciesCreate = require('../internals/array-species-create');
8
-
9
- var push = uncurryThis([].push);
7
+ var createProperty = require('../internals/create-property');
10
8
 
11
9
  // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation
12
10
  var createMethod = function (TYPE) {
@@ -17,28 +15,28 @@ var createMethod = function (TYPE) {
17
15
  var IS_FIND_INDEX = TYPE === 6;
18
16
  var IS_FILTER_REJECT = TYPE === 7;
19
17
  var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;
20
- return function ($this, callbackfn, that, specificCreate) {
18
+ return function ($this, callbackfn, that) {
21
19
  var O = toObject($this);
22
20
  var self = IndexedObject(O);
23
21
  var length = lengthOfArrayLike(self);
24
22
  var boundFunction = bind(callbackfn, that);
25
23
  var index = 0;
26
- var create = specificCreate || arraySpeciesCreate;
27
- var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;
24
+ var resIndex = 0;
25
+ var target = IS_MAP ? arraySpeciesCreate($this, length) : IS_FILTER || IS_FILTER_REJECT ? arraySpeciesCreate($this, 0) : undefined;
28
26
  var value, result;
29
27
  for (;length > index; index++) if (NO_HOLES || index in self) {
30
28
  value = self[index];
31
29
  result = boundFunction(value, index, O);
32
30
  if (TYPE) {
33
- if (IS_MAP) target[index] = result; // map
31
+ if (IS_MAP) createProperty(target, index, result); // map
34
32
  else if (result) switch (TYPE) {
35
- case 3: return true; // some
36
- case 5: return value; // find
37
- case 6: return index; // findIndex
38
- case 2: push(target, value); // filter
33
+ case 3: return true; // some
34
+ case 5: return value; // find
35
+ case 6: return index; // findIndex
36
+ case 2: createProperty(target, resIndex++, value); // filter
39
37
  } else switch (TYPE) {
40
- case 4: return false; // every
41
- case 7: push(target, value); // filterReject
38
+ case 4: return false; // every
39
+ case 7: createProperty(target, resIndex++, value); // filterReject
42
40
  }
43
41
  }
44
42
  }
@@ -1,16 +1,15 @@
1
1
  'use strict';
2
- var uncurryThis = require('../internals/function-uncurry-this');
3
2
  var aCallable = require('../internals/a-callable');
4
3
  var isNullOrUndefined = require('../internals/is-null-or-undefined');
5
4
  var lengthOfArrayLike = require('../internals/length-of-array-like');
6
5
  var toObject = require('../internals/to-object');
6
+ var createProperty = require('../internals/create-property');
7
7
  var MapHelpers = require('../internals/map-helpers');
8
8
  var iterate = require('../internals/map-iterate');
9
9
 
10
10
  var Map = MapHelpers.Map;
11
11
  var mapHas = MapHelpers.has;
12
12
  var mapSet = MapHelpers.set;
13
- var push = uncurryThis([].push);
14
13
 
15
14
  // `Array.prototype.uniqueBy` method
16
15
  // https://github.com/tc39/proposal-array-unique
@@ -28,8 +27,9 @@ module.exports = function uniqueBy(resolver) {
28
27
  key = resolverFunction(item);
29
28
  if (!mapHas(map, key)) mapSet(map, key, item);
30
29
  }
30
+ index = 0;
31
31
  iterate(map, function (value) {
32
- push(result, value);
32
+ createProperty(result, index++, value);
33
33
  });
34
34
  return result;
35
35
  };
@@ -41,19 +41,43 @@ var AsyncFromSyncIterator = function AsyncIterator(iteratorRecord) {
41
41
  AsyncFromSyncIterator.prototype = defineBuiltIns(create(AsyncIteratorPrototype), {
42
42
  next: function next() {
43
43
  var state = getInternalState(this);
44
+ var hasValue = arguments.length > 0;
45
+ var value = hasValue ? arguments[0] : undefined;
44
46
  return new Promise(function (resolve, reject) {
45
- var result = anObject(call(state.next, state.iterator));
47
+ var result = anObject(hasValue ? call(state.next, state.iterator, value) : call(state.next, state.iterator));
46
48
  asyncFromSyncIteratorContinuation(result, resolve, reject, state.iterator, true);
47
49
  });
48
50
  },
49
51
  'return': function () {
50
- var iterator = getInternalState(this).iterator;
52
+ var state = getInternalState(this);
53
+ var iterator = state.iterator;
54
+ var hasValue = arguments.length > 0;
55
+ var value = hasValue ? arguments[0] : undefined;
51
56
  return new Promise(function (resolve, reject) {
52
57
  var $return = getMethod(iterator, 'return');
53
- if ($return === undefined) return resolve(createIterResultObject(undefined, true));
54
- var result = anObject(call($return, iterator));
58
+ if ($return === undefined) return resolve(createIterResultObject(value, true));
59
+ var result = anObject(hasValue ? call($return, iterator, value) : call($return, iterator));
55
60
  asyncFromSyncIteratorContinuation(result, resolve, reject, iterator);
56
61
  });
62
+ },
63
+ 'throw': function () {
64
+ var state = getInternalState(this);
65
+ var iterator = state.iterator;
66
+ var hasValue = arguments.length > 0;
67
+ var value = hasValue ? arguments[0] : undefined;
68
+ return new Promise(function (resolve, reject) {
69
+ var $throw = getMethod(iterator, 'throw');
70
+ if ($throw === undefined) {
71
+ try {
72
+ iteratorClose(iterator, 'normal');
73
+ } catch (error) {
74
+ return reject(error);
75
+ }
76
+ return reject(new TypeError('The iterator does not provide a throw method'));
77
+ }
78
+ var result = anObject(hasValue ? call($throw, iterator, value) : call($throw, iterator));
79
+ asyncFromSyncIteratorContinuation(result, resolve, reject, iterator, true);
80
+ });
57
81
  }
58
82
  });
59
83
 
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
  var call = require('../internals/function-call');
3
+ var anObject = require('../internals/an-object');
3
4
  var getBuiltIn = require('../internals/get-built-in');
4
5
  var getMethod = require('../internals/get-method');
5
6
 
@@ -7,13 +8,20 @@ module.exports = function (iterator, method, argument, reject) {
7
8
  try {
8
9
  var returnMethod = getMethod(iterator, 'return');
9
10
  if (returnMethod) {
10
- return getBuiltIn('Promise').resolve(call(returnMethod, iterator)).then(function () {
11
+ return getBuiltIn('Promise').resolve(call(returnMethod, iterator)).then(function (result) {
12
+ try {
13
+ if (method !== reject) anObject(result);
14
+ } catch (error3) {
15
+ reject(error3);
16
+ return;
17
+ }
11
18
  method(argument);
12
19
  }, function (error) {
13
- reject(error);
20
+ method === reject ? method(argument) : reject(error);
14
21
  });
15
22
  }
16
23
  } catch (error2) {
17
- return reject(error2);
24
+ // the original error (`argument`) takes priority over `return()` errors
25
+ return method === reject ? reject(argument) : reject(error2);
18
26
  } method(argument);
19
27
  };
@@ -11,7 +11,6 @@ var getBuiltIn = require('../internals/get-built-in');
11
11
  var getMethod = require('../internals/get-method');
12
12
  var AsyncIteratorPrototype = require('../internals/async-iterator-prototype');
13
13
  var createIterResultObject = require('../internals/create-iter-result-object');
14
- var iteratorClose = require('../internals/iterator-close');
15
14
 
16
15
  var Promise = getBuiltIn('Promise');
17
16
 
@@ -56,27 +55,55 @@ var createAsyncIteratorProxyPrototype = function (IS_ITERATOR) {
56
55
  if (stateCompletion.exit) return state;
57
56
  state.done = true;
58
57
  var iterator = state.iterator;
58
+ var inner = state.inner;
59
59
  var returnMethod, result;
60
- var completion = perform(function () {
61
- if (state.inner) try {
62
- iteratorClose(state.inner.iterator, 'normal');
63
- } catch (error) {
64
- return iteratorClose(iterator, 'throw', error);
60
+ var closeOuterIterator = function () {
61
+ var completion = perform(function () {
62
+ return getMethod(iterator, 'return');
63
+ });
64
+ returnMethod = result = completion.value;
65
+ if (completion.error) return Promise.reject(result);
66
+ if (returnMethod === undefined) return Promise.resolve(createIterResultObject(undefined, true));
67
+ completion = perform(function () {
68
+ return call(returnMethod, iterator);
69
+ });
70
+ result = completion.value;
71
+ if (completion.error) return Promise.reject(result);
72
+ return IS_ITERATOR ? Promise.resolve(result) : Promise.resolve(result).then(function (resolved) {
73
+ anObject(resolved);
74
+ return createIterResultObject(undefined, true);
75
+ });
76
+ };
77
+
78
+ var closeAndReject = function (error) {
79
+ return closeOuterIterator().then(function () {
80
+ throw error;
81
+ }, function () {
82
+ throw error;
83
+ });
84
+ };
85
+
86
+ if (inner) {
87
+ var innerIterator = inner.iterator;
88
+ var innerReturn;
89
+ var completion = perform(function () {
90
+ innerReturn = getMethod(innerIterator, 'return');
91
+ if (innerReturn) return call(innerReturn, innerIterator);
92
+ });
93
+ if (completion.error) return closeAndReject(completion.value);
94
+ if (innerReturn) {
95
+ return Promise.resolve(completion.value).then(function (innerResult) {
96
+ try {
97
+ anObject(innerResult);
98
+ } catch (error) {
99
+ return closeAndReject(error);
100
+ }
101
+ return closeOuterIterator();
102
+ }, closeAndReject);
65
103
  }
66
- return getMethod(iterator, 'return');
67
- });
68
- returnMethod = result = completion.value;
69
- if (completion.error) return Promise.reject(result);
70
- if (returnMethod === undefined) return Promise.resolve(createIterResultObject(undefined, true));
71
- completion = perform(function () {
72
- return call(returnMethod, iterator);
73
- });
74
- result = completion.value;
75
- if (completion.error) return Promise.reject(result);
76
- return IS_ITERATOR ? Promise.resolve(result) : Promise.resolve(result).then(function (resolved) {
77
- anObject(resolved);
78
- return createIterResultObject(undefined, true);
79
- });
104
+ }
105
+
106
+ return closeOuterIterator();
80
107
  }
81
108
  });
82
109
  };