core-js 3.14.0 → 3.16.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 (321) hide show
  1. package/README.md +2 -3
  2. package/es/aggregate-error.js +1 -1
  3. package/es/array/entries.js +1 -0
  4. package/es/array/index.js +2 -1
  5. package/es/array/iterator.js +1 -0
  6. package/es/array/keys.js +1 -0
  7. package/es/array/values.js +1 -0
  8. package/es/array/virtual/entries.js +1 -0
  9. package/es/array/virtual/index.js +1 -0
  10. package/es/array/virtual/iterator.js +1 -0
  11. package/es/array/virtual/keys.js +1 -0
  12. package/es/array/virtual/values.js +1 -0
  13. package/es/date/get-year.js +4 -0
  14. package/es/date/index.js +4 -1
  15. package/es/date/set-year.js +4 -0
  16. package/es/date/to-gmt-string.js +4 -0
  17. package/es/escape.js +4 -0
  18. package/es/index.js +7 -0
  19. package/es/map/index.js +1 -1
  20. package/es/promise/all-settled.js +2 -1
  21. package/es/promise/any.js +2 -1
  22. package/es/promise/finally.js +1 -0
  23. package/es/promise/index.js +1 -1
  24. package/es/reflect/index.js +1 -0
  25. package/es/reflect/to-string-tag.js +1 -0
  26. package/es/regexp/constructor.js +3 -0
  27. package/es/regexp/dot-all.js +7 -0
  28. package/es/regexp/index.js +1 -0
  29. package/es/regexp/match.js +1 -0
  30. package/es/regexp/replace.js +1 -0
  31. package/es/regexp/search.js +1 -0
  32. package/es/regexp/split.js +1 -0
  33. package/es/regexp/sticky.js +2 -0
  34. package/es/set/index.js +2 -2
  35. package/es/string/index.js +2 -0
  36. package/es/string/iterator.js +1 -0
  37. package/es/string/match-all.js +2 -0
  38. package/es/string/replace-all.js +2 -0
  39. package/es/string/substr.js +4 -0
  40. package/es/string/virtual/index.js +3 -0
  41. package/es/string/virtual/iterator.js +1 -0
  42. package/es/string/virtual/match-all.js +2 -0
  43. package/es/string/virtual/replace-all.js +2 -0
  44. package/es/string/virtual/substr.js +4 -0
  45. package/es/symbol/is-concat-spreadable.js +1 -1
  46. package/es/symbol/iterator.js +3 -2
  47. package/es/symbol/match-all.js +2 -0
  48. package/es/symbol/match.js +1 -0
  49. package/es/symbol/replace.js +1 -0
  50. package/es/symbol/search.js +1 -0
  51. package/es/symbol/split.js +1 -0
  52. package/es/symbol/to-primitive.js +1 -0
  53. package/es/symbol/to-string-tag.js +2 -2
  54. package/es/typed-array/entries.js +1 -0
  55. package/es/typed-array/iterator.js +1 -0
  56. package/es/typed-array/keys.js +1 -0
  57. package/es/typed-array/methods.js +2 -1
  58. package/es/typed-array/values.js +1 -0
  59. package/es/unescape.js +4 -0
  60. package/es/weak-map/index.js +1 -1
  61. package/es/weak-set/index.js +1 -1
  62. package/features/array/filter-out.js +1 -0
  63. package/features/array/filter-reject.js +4 -0
  64. package/features/array/group-by.js +4 -0
  65. package/features/array/index.js +3 -0
  66. package/features/array/virtual/filter-out.js +1 -0
  67. package/features/array/virtual/filter-reject.js +4 -0
  68. package/features/array/virtual/group-by.js +4 -0
  69. package/features/array/virtual/index.js +3 -0
  70. package/features/async-iterator/as-indexed-pairs.js +0 -2
  71. package/features/async-iterator/drop.js +0 -2
  72. package/features/async-iterator/every.js +0 -2
  73. package/features/async-iterator/filter.js +0 -2
  74. package/features/async-iterator/find.js +0 -2
  75. package/features/async-iterator/flat-map.js +0 -2
  76. package/features/async-iterator/for-each.js +0 -2
  77. package/features/async-iterator/from.js +1 -0
  78. package/features/async-iterator/index.js +1 -0
  79. package/features/async-iterator/map.js +0 -2
  80. package/features/async-iterator/reduce.js +0 -2
  81. package/features/async-iterator/some.js +0 -2
  82. package/features/async-iterator/take.js +0 -2
  83. package/features/async-iterator/to-array.js +0 -2
  84. package/features/date/get-year.js +3 -0
  85. package/features/date/set-year.js +3 -0
  86. package/features/date/to-gmt-string.js +3 -0
  87. package/features/escape.js +3 -0
  88. package/features/get-iterator-method.js +2 -1
  89. package/features/get-iterator.js +2 -1
  90. package/features/index.js +11 -0
  91. package/features/instance/filter-out.js +1 -0
  92. package/features/instance/filter-reject.js +8 -0
  93. package/features/instance/group-by.js +8 -0
  94. package/features/is-iterable.js +2 -1
  95. package/features/iterator/as-indexed-pairs.js +0 -2
  96. package/features/iterator/drop.js +0 -2
  97. package/features/iterator/every.js +0 -2
  98. package/features/iterator/filter.js +0 -2
  99. package/features/iterator/find.js +0 -2
  100. package/features/iterator/flat-map.js +0 -2
  101. package/features/iterator/for-each.js +0 -2
  102. package/features/iterator/from.js +1 -0
  103. package/features/iterator/index.js +1 -0
  104. package/features/iterator/map.js +0 -2
  105. package/features/iterator/reduce.js +0 -2
  106. package/features/iterator/some.js +0 -2
  107. package/features/iterator/take.js +0 -2
  108. package/features/iterator/to-array.js +0 -2
  109. package/features/map/from.js +1 -0
  110. package/features/map/of.js +1 -2
  111. package/features/number/range.js +1 -0
  112. package/features/regexp/dot-all.js +3 -0
  113. package/features/set/difference.js +1 -0
  114. package/features/set/from.js +1 -0
  115. package/features/set/intersection.js +3 -0
  116. package/features/set/is-disjoint-from.js +3 -0
  117. package/features/set/is-subset-of.js +1 -0
  118. package/features/set/is-superset-of.js +3 -0
  119. package/features/set/of.js +1 -2
  120. package/features/set/symmetric-difference.js +1 -0
  121. package/features/set/union.js +1 -0
  122. package/features/string/code-points.js +1 -0
  123. package/features/string/substr.js +3 -0
  124. package/features/string/virtual/code-points.js +1 -0
  125. package/features/string/virtual/substr.js +3 -0
  126. package/features/typed-array/copy-within.js +3 -1
  127. package/features/typed-array/entries.js +3 -1
  128. package/features/typed-array/every.js +3 -1
  129. package/features/typed-array/fill.js +3 -1
  130. package/features/typed-array/filter-out.js +1 -0
  131. package/features/typed-array/filter-reject.js +1 -0
  132. package/features/typed-array/filter.js +3 -1
  133. package/features/typed-array/find-index.js +3 -1
  134. package/features/typed-array/find.js +3 -1
  135. package/features/typed-array/float32-array.js +1 -1
  136. package/features/typed-array/float64-array.js +1 -1
  137. package/features/typed-array/for-each.js +3 -1
  138. package/features/typed-array/from.js +3 -1
  139. package/features/typed-array/group-by.js +1 -0
  140. package/features/typed-array/includes.js +3 -1
  141. package/features/typed-array/index-of.js +3 -1
  142. package/features/typed-array/index.js +4 -1
  143. package/features/typed-array/int16-array.js +1 -1
  144. package/features/typed-array/int32-array.js +1 -1
  145. package/features/typed-array/int8-array.js +1 -1
  146. package/features/typed-array/iterator.js +3 -1
  147. package/features/typed-array/join.js +3 -1
  148. package/features/typed-array/keys.js +3 -1
  149. package/features/typed-array/last-index-of.js +3 -1
  150. package/features/typed-array/map.js +3 -1
  151. package/features/typed-array/of.js +3 -1
  152. package/features/typed-array/reduce-right.js +3 -1
  153. package/features/typed-array/reduce.js +3 -1
  154. package/features/typed-array/reverse.js +3 -1
  155. package/features/typed-array/set.js +3 -1
  156. package/features/typed-array/slice.js +3 -1
  157. package/features/typed-array/some.js +3 -1
  158. package/features/typed-array/sort.js +3 -1
  159. package/features/typed-array/subarray.js +3 -1
  160. package/features/typed-array/to-locale-string.js +3 -1
  161. package/features/typed-array/to-string.js +3 -1
  162. package/features/typed-array/uint16-array.js +1 -1
  163. package/features/typed-array/uint32-array.js +1 -1
  164. package/features/typed-array/uint8-array.js +1 -1
  165. package/features/typed-array/uint8-clamped-array.js +1 -1
  166. package/features/typed-array/values.js +3 -1
  167. package/features/unescape.js +3 -0
  168. package/features/weak-map/from.js +1 -0
  169. package/features/weak-map/index.js +1 -0
  170. package/features/weak-map/of.js +1 -2
  171. package/features/weak-set/from.js +1 -0
  172. package/features/weak-set/index.js +1 -0
  173. package/features/weak-set/of.js +1 -2
  174. package/internals/array-buffer-view-core.js +16 -10
  175. package/internals/array-from-constructor-and-list.js +7 -0
  176. package/internals/array-group-by.js +33 -0
  177. package/internals/array-iteration-from-last.js +6 -6
  178. package/internals/array-iteration.js +6 -6
  179. package/internals/array-species-constructor.js +20 -0
  180. package/internals/array-species-create.js +2 -15
  181. package/internals/collection.js +1 -1
  182. package/internals/create-html.js +3 -2
  183. package/internals/create-property.js +2 -2
  184. package/internals/date-to-primitive.js +5 -4
  185. package/internals/engine-v8-version.js +2 -1
  186. package/internals/fix-regexp-well-known-symbol-logic.js +5 -62
  187. package/internals/get-built-in.js +1 -3
  188. package/internals/get-map-iterator.js +1 -4
  189. package/internals/get-set-iterator.js +1 -4
  190. package/internals/internal-metadata.js +33 -3
  191. package/internals/is-symbol.js +9 -0
  192. package/internals/number-parse-float.js +2 -1
  193. package/internals/number-parse-int.js +2 -1
  194. package/internals/object-create.js +17 -12
  195. package/internals/object-define-property.js +2 -2
  196. package/internals/object-get-own-property-descriptor.js +2 -2
  197. package/internals/ordinary-to-primitive.js +11 -0
  198. package/internals/regexp-exec.js +34 -8
  199. package/internals/regexp-sticky-helpers.js +3 -7
  200. package/internals/regexp-unsupported-dot-all.js +7 -0
  201. package/internals/regexp-unsupported-ncg.js +8 -0
  202. package/internals/set-global.js +2 -2
  203. package/internals/shared.js +1 -1
  204. package/internals/string-multibyte.js +3 -2
  205. package/internals/string-pad.js +3 -2
  206. package/internals/string-repeat.js +2 -1
  207. package/internals/string-trim.js +2 -1
  208. package/internals/task.js +9 -4
  209. package/internals/to-primitive.js +17 -9
  210. package/internals/to-property-key.js +9 -0
  211. package/internals/to-string.js +6 -0
  212. package/internals/typed-array-constructor.js +13 -5
  213. package/internals/typed-array-from-species-and-list.js +3 -8
  214. package/internals/typed-array-species-constructor.js +11 -0
  215. package/modules/es.aggregate-error.js +2 -1
  216. package/modules/es.array.sort.js +2 -1
  217. package/modules/es.date.get-year.js +17 -0
  218. package/modules/es.date.set-year.js +18 -0
  219. package/modules/es.date.to-gmt-string.js +7 -0
  220. package/modules/es.date.to-json.js +1 -1
  221. package/modules/es.date.to-string.js +1 -1
  222. package/modules/es.escape.js +36 -0
  223. package/modules/es.number.constructor.js +3 -1
  224. package/modules/es.object.lookup-getter.js +2 -2
  225. package/modules/es.object.lookup-setter.js +2 -2
  226. package/modules/es.promise.js +3 -2
  227. package/modules/es.reflect.define-property.js +2 -2
  228. package/modules/es.regexp.constructor.js +126 -24
  229. package/modules/es.regexp.dot-all.js +22 -0
  230. package/modules/es.regexp.flags.js +10 -8
  231. package/modules/es.regexp.sticky.js +1 -1
  232. package/modules/es.regexp.to-string.js +3 -2
  233. package/modules/es.string.ends-with.js +3 -2
  234. package/modules/es.string.includes.js +3 -2
  235. package/modules/es.string.iterator.js +2 -1
  236. package/modules/es.string.match-all.js +6 -5
  237. package/modules/es.string.match.js +9 -8
  238. package/modules/es.string.raw.js +3 -2
  239. package/modules/es.string.replace-all.js +7 -6
  240. package/modules/es.string.replace.js +45 -17
  241. package/modules/es.string.search.js +8 -7
  242. package/modules/es.string.split.js +22 -8
  243. package/modules/es.string.starts-with.js +3 -2
  244. package/modules/es.string.substr.js +26 -0
  245. package/modules/es.symbol.js +8 -13
  246. package/modules/es.typed-array.map.js +2 -3
  247. package/modules/es.typed-array.slice.js +3 -4
  248. package/modules/es.typed-array.subarray.js +3 -2
  249. package/modules/es.unescape.js +40 -0
  250. package/modules/es.weak-map.js +1 -1
  251. package/modules/esnext.array.filter-out.js +3 -2
  252. package/modules/esnext.array.filter-reject.js +14 -0
  253. package/modules/esnext.array.group-by.js +16 -0
  254. package/modules/esnext.map.merge.js +2 -1
  255. package/modules/esnext.string.at-alternative.js +3 -2
  256. package/modules/esnext.string.code-points.js +2 -1
  257. package/modules/esnext.typed-array.filter-out.js +3 -2
  258. package/modules/esnext.typed-array.filter-reject.js +14 -0
  259. package/modules/esnext.typed-array.group-by.js +14 -0
  260. package/modules/web.url-search-params.js +56 -36
  261. package/modules/web.url.js +17 -16
  262. package/package.json +3 -4
  263. package/postinstall.js +4 -2
  264. package/proposals/array-filtering.js +4 -0
  265. package/proposals/array-grouping.js +3 -0
  266. package/stable/aggregate-error.js +1 -0
  267. package/stable/date/get-year.js +3 -0
  268. package/stable/date/set-year.js +3 -0
  269. package/stable/date/to-gmt-string.js +3 -0
  270. package/stable/dom-collections/index.js +1 -0
  271. package/stable/dom-collections/iterator.js +1 -0
  272. package/stable/escape.js +3 -0
  273. package/stable/index.js +7 -0
  274. package/stable/map/index.js +1 -0
  275. package/stable/object/from-entries.js +1 -0
  276. package/stable/object/index.js +1 -0
  277. package/stable/promise/all-settled.js +1 -0
  278. package/stable/promise/any.js +1 -0
  279. package/stable/promise/index.js +1 -0
  280. package/stable/regexp/dot-all.js +3 -0
  281. package/stable/set/index.js +1 -0
  282. package/stable/string/substr.js +3 -0
  283. package/stable/string/virtual/substr.js +3 -0
  284. package/stable/symbol/index.js +1 -0
  285. package/stable/symbol/iterator.js +1 -0
  286. package/stable/typed-array/copy-within.js +3 -1
  287. package/stable/typed-array/entries.js +3 -1
  288. package/stable/typed-array/every.js +3 -1
  289. package/stable/typed-array/fill.js +3 -1
  290. package/stable/typed-array/filter.js +3 -1
  291. package/stable/typed-array/find-index.js +3 -1
  292. package/stable/typed-array/find.js +3 -1
  293. package/stable/typed-array/for-each.js +3 -1
  294. package/stable/typed-array/from.js +3 -1
  295. package/stable/typed-array/includes.js +3 -1
  296. package/stable/typed-array/index-of.js +3 -1
  297. package/stable/typed-array/iterator.js +3 -1
  298. package/stable/typed-array/join.js +3 -1
  299. package/stable/typed-array/keys.js +3 -1
  300. package/stable/typed-array/last-index-of.js +3 -1
  301. package/stable/typed-array/map.js +3 -1
  302. package/stable/typed-array/of.js +3 -1
  303. package/stable/typed-array/reduce-right.js +3 -1
  304. package/stable/typed-array/reduce.js +3 -1
  305. package/stable/typed-array/reverse.js +3 -1
  306. package/stable/typed-array/set.js +3 -1
  307. package/stable/typed-array/slice.js +3 -1
  308. package/stable/typed-array/some.js +3 -1
  309. package/stable/typed-array/sort.js +3 -1
  310. package/stable/typed-array/subarray.js +3 -1
  311. package/stable/typed-array/to-locale-string.js +3 -1
  312. package/stable/typed-array/to-string.js +3 -1
  313. package/stable/typed-array/values.js +3 -1
  314. package/stable/unescape.js +3 -0
  315. package/stable/url-search-params/index.js +1 -0
  316. package/stable/weak-map/index.js +1 -0
  317. package/stable/weak-set/index.js +1 -0
  318. package/stage/1.js +1 -0
  319. package/stage/2.js +0 -1
  320. package/stage/3.js +1 -0
  321. package/es/array/virtual/filter-out.js +0 -4
@@ -2,28 +2,29 @@
2
2
  var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
3
3
  var anObject = require('../internals/an-object');
4
4
  var toLength = require('../internals/to-length');
5
+ var toString = require('../internals/to-string');
5
6
  var requireObjectCoercible = require('../internals/require-object-coercible');
6
7
  var advanceStringIndex = require('../internals/advance-string-index');
7
8
  var regExpExec = require('../internals/regexp-exec-abstract');
8
9
 
9
10
  // @@match logic
10
- fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {
11
+ fixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {
11
12
  return [
12
13
  // `String.prototype.match` method
13
14
  // https://tc39.es/ecma262/#sec-string.prototype.match
14
15
  function match(regexp) {
15
16
  var O = requireObjectCoercible(this);
16
17
  var matcher = regexp == undefined ? undefined : regexp[MATCH];
17
- return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
18
+ return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));
18
19
  },
19
20
  // `RegExp.prototype[@@match]` method
20
21
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
21
- function (regexp) {
22
- var res = maybeCallNative(nativeMatch, regexp, this);
23
- if (res.done) return res.value;
22
+ function (string) {
23
+ var rx = anObject(this);
24
+ var S = toString(string);
25
+ var res = maybeCallNative(nativeMatch, rx, S);
24
26
 
25
- var rx = anObject(regexp);
26
- var S = String(this);
27
+ if (res.done) return res.value;
27
28
 
28
29
  if (!rx.global) return regExpExec(rx, S);
29
30
 
@@ -33,7 +34,7 @@ fixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCal
33
34
  var n = 0;
34
35
  var result;
35
36
  while ((result = regExpExec(rx, S)) !== null) {
36
- var matchStr = String(result[0]);
37
+ var matchStr = toString(result[0]);
37
38
  A[n] = matchStr;
38
39
  if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
39
40
  n++;
@@ -1,6 +1,7 @@
1
1
  var $ = require('../internals/export');
2
2
  var toIndexedObject = require('../internals/to-indexed-object');
3
3
  var toLength = require('../internals/to-length');
4
+ var toString = require('../internals/to-string');
4
5
 
5
6
  // `String.raw` method
6
7
  // https://tc39.es/ecma262/#sec-string.raw
@@ -12,8 +13,8 @@ $({ target: 'String', stat: true }, {
12
13
  var elements = [];
13
14
  var i = 0;
14
15
  while (literalSegments > i) {
15
- elements.push(String(rawTemplate[i++]));
16
- if (i < argumentsLength) elements.push(String(arguments[i]));
16
+ elements.push(toString(rawTemplate[i++]));
17
+ if (i < argumentsLength) elements.push(toString(arguments[i]));
17
18
  } return elements.join('');
18
19
  }
19
20
  });
@@ -2,6 +2,7 @@
2
2
  var $ = require('../internals/export');
3
3
  var requireObjectCoercible = require('../internals/require-object-coercible');
4
4
  var isRegExp = require('../internals/is-regexp');
5
+ var toString = require('../internals/to-string');
5
6
  var getRegExpFlags = require('../internals/regexp-flags');
6
7
  var getSubstitution = require('../internals/get-substitution');
7
8
  var wellKnownSymbol = require('../internals/well-known-symbol');
@@ -29,7 +30,7 @@ $({ target: 'String', proto: true }, {
29
30
  if (searchValue != null) {
30
31
  IS_REG_EXP = isRegExp(searchValue);
31
32
  if (IS_REG_EXP) {
32
- flags = String(requireObjectCoercible('flags' in RegExpPrototype
33
+ flags = toString(requireObjectCoercible('flags' in RegExpPrototype
33
34
  ? searchValue.flags
34
35
  : getRegExpFlags.call(searchValue)
35
36
  ));
@@ -39,19 +40,19 @@ $({ target: 'String', proto: true }, {
39
40
  if (replacer !== undefined) {
40
41
  return replacer.call(searchValue, O, replaceValue);
41
42
  } else if (IS_PURE && IS_REG_EXP) {
42
- return String(O).replace(searchValue, replaceValue);
43
+ return toString(O).replace(searchValue, replaceValue);
43
44
  }
44
45
  }
45
- string = String(O);
46
- searchString = String(searchValue);
46
+ string = toString(O);
47
+ searchString = toString(searchValue);
47
48
  functionalReplace = typeof replaceValue === 'function';
48
- if (!functionalReplace) replaceValue = String(replaceValue);
49
+ if (!functionalReplace) replaceValue = toString(replaceValue);
49
50
  searchLength = searchString.length;
50
51
  advanceBy = max(1, searchLength);
51
52
  position = stringIndexOf(string, searchString, 0);
52
53
  while (position !== -1) {
53
54
  if (functionalReplace) {
54
- replacement = String(replaceValue(searchString, position, string));
55
+ replacement = toString(replaceValue(searchString, position, string));
55
56
  } else {
56
57
  replacement = getSubstitution(searchString, string, position, [], undefined, replaceValue);
57
58
  }
@@ -1,13 +1,17 @@
1
1
  'use strict';
2
2
  var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
3
+ var fails = require('../internals/fails');
3
4
  var anObject = require('../internals/an-object');
4
- var toLength = require('../internals/to-length');
5
5
  var toInteger = require('../internals/to-integer');
6
+ var toLength = require('../internals/to-length');
7
+ var toString = require('../internals/to-string');
6
8
  var requireObjectCoercible = require('../internals/require-object-coercible');
7
9
  var advanceStringIndex = require('../internals/advance-string-index');
8
10
  var getSubstitution = require('../internals/get-substitution');
9
11
  var regExpExec = require('../internals/regexp-exec-abstract');
12
+ var wellKnownSymbol = require('../internals/well-known-symbol');
10
13
 
14
+ var REPLACE = wellKnownSymbol('replace');
11
15
  var max = Math.max;
12
16
  var min = Math.min;
13
17
 
@@ -15,10 +19,33 @@ var maybeToString = function (it) {
15
19
  return it === undefined ? it : String(it);
16
20
  };
17
21
 
22
+ // IE <= 11 replaces $0 with the whole match, as if it was $&
23
+ // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
24
+ var REPLACE_KEEPS_$0 = (function () {
25
+ // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing
26
+ return 'a'.replace(/./, '$0') === '$0';
27
+ })();
28
+
29
+ // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
30
+ var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {
31
+ if (/./[REPLACE]) {
32
+ return /./[REPLACE]('a', '$0') === '';
33
+ }
34
+ return false;
35
+ })();
36
+
37
+ var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
38
+ var re = /./;
39
+ re.exec = function () {
40
+ var result = [];
41
+ result.groups = { a: '7' };
42
+ return result;
43
+ };
44
+ return ''.replace(re, '$<a>') !== '7';
45
+ });
46
+
18
47
  // @@replace logic
19
- fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {
20
- var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;
21
- var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;
48
+ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {
22
49
  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';
23
50
 
24
51
  return [
@@ -29,24 +56,25 @@ fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, ma
29
56
  var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];
30
57
  return replacer !== undefined
31
58
  ? replacer.call(searchValue, O, replaceValue)
32
- : nativeReplace.call(String(O), searchValue, replaceValue);
59
+ : nativeReplace.call(toString(O), searchValue, replaceValue);
33
60
  },
34
61
  // `RegExp.prototype[@@replace]` method
35
62
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
36
- function (regexp, replaceValue) {
63
+ function (string, replaceValue) {
64
+ var rx = anObject(this);
65
+ var S = toString(string);
66
+
37
67
  if (
38
- (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||
39
- (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)
68
+ typeof replaceValue === 'string' &&
69
+ replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1 &&
70
+ replaceValue.indexOf('$<') === -1
40
71
  ) {
41
- var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);
72
+ var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
42
73
  if (res.done) return res.value;
43
74
  }
44
75
 
45
- var rx = anObject(regexp);
46
- var S = String(this);
47
-
48
76
  var functionalReplace = typeof replaceValue === 'function';
49
- if (!functionalReplace) replaceValue = String(replaceValue);
77
+ if (!functionalReplace) replaceValue = toString(replaceValue);
50
78
 
51
79
  var global = rx.global;
52
80
  if (global) {
@@ -61,7 +89,7 @@ fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, ma
61
89
  results.push(result);
62
90
  if (!global) break;
63
91
 
64
- var matchStr = String(result[0]);
92
+ var matchStr = toString(result[0]);
65
93
  if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
66
94
  }
67
95
 
@@ -70,7 +98,7 @@ fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, ma
70
98
  for (var i = 0; i < results.length; i++) {
71
99
  result = results[i];
72
100
 
73
- var matched = String(result[0]);
101
+ var matched = toString(result[0]);
74
102
  var position = max(min(toInteger(result.index), S.length), 0);
75
103
  var captures = [];
76
104
  // NOTE: This is equivalent to
@@ -83,7 +111,7 @@ fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, ma
83
111
  if (functionalReplace) {
84
112
  var replacerArgs = [matched].concat(captures, position, S);
85
113
  if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
86
- var replacement = String(replaceValue.apply(undefined, replacerArgs));
114
+ var replacement = toString(replaceValue.apply(undefined, replacerArgs));
87
115
  } else {
88
116
  replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
89
117
  }
@@ -95,4 +123,4 @@ fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, ma
95
123
  return accumulatedResult + S.slice(nextSourcePosition);
96
124
  }
97
125
  ];
98
- });
126
+ }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
@@ -3,26 +3,27 @@ var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-
3
3
  var anObject = require('../internals/an-object');
4
4
  var requireObjectCoercible = require('../internals/require-object-coercible');
5
5
  var sameValue = require('../internals/same-value');
6
+ var toString = require('../internals/to-string');
6
7
  var regExpExec = require('../internals/regexp-exec-abstract');
7
8
 
8
9
  // @@search logic
9
- fixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {
10
+ fixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) {
10
11
  return [
11
12
  // `String.prototype.search` method
12
13
  // https://tc39.es/ecma262/#sec-string.prototype.search
13
14
  function search(regexp) {
14
15
  var O = requireObjectCoercible(this);
15
16
  var searcher = regexp == undefined ? undefined : regexp[SEARCH];
16
- return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
17
+ return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](toString(O));
17
18
  },
18
19
  // `RegExp.prototype[@@search]` method
19
20
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@search
20
- function (regexp) {
21
- var res = maybeCallNative(nativeSearch, regexp, this);
22
- if (res.done) return res.value;
21
+ function (string) {
22
+ var rx = anObject(this);
23
+ var S = toString(string);
24
+ var res = maybeCallNative(nativeSearch, rx, S);
23
25
 
24
- var rx = anObject(regexp);
25
- var S = String(this);
26
+ if (res.done) return res.value;
26
27
 
27
28
  var previousLastIndex = rx.lastIndex;
28
29
  if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
@@ -6,17 +6,30 @@ var requireObjectCoercible = require('../internals/require-object-coercible');
6
6
  var speciesConstructor = require('../internals/species-constructor');
7
7
  var advanceStringIndex = require('../internals/advance-string-index');
8
8
  var toLength = require('../internals/to-length');
9
+ var toString = require('../internals/to-string');
9
10
  var callRegExpExec = require('../internals/regexp-exec-abstract');
10
11
  var regexpExec = require('../internals/regexp-exec');
11
12
  var stickyHelpers = require('../internals/regexp-sticky-helpers');
13
+ var fails = require('../internals/fails');
12
14
 
13
15
  var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
14
16
  var arrayPush = [].push;
15
17
  var min = Math.min;
16
18
  var MAX_UINT32 = 0xFFFFFFFF;
17
19
 
20
+ // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
21
+ // Weex JS has frozen built-in prototypes, so use try / catch wrapper
22
+ var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {
23
+ // eslint-disable-next-line regexp/no-empty-group -- required for testing
24
+ var re = /(?:)/;
25
+ var originalExec = re.exec;
26
+ re.exec = function () { return originalExec.apply(this, arguments); };
27
+ var result = 'ab'.split(re);
28
+ return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
29
+ });
30
+
18
31
  // @@split logic
19
- fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {
32
+ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {
20
33
  var internalSplit;
21
34
  if (
22
35
  'abbc'.split(/(b)*/)[1] == 'c' ||
@@ -30,7 +43,7 @@ fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCal
30
43
  ) {
31
44
  // based on es5-shim implementation, need to rework it
32
45
  internalSplit = function (separator, limit) {
33
- var string = String(requireObjectCoercible(this));
46
+ var string = toString(requireObjectCoercible(this));
34
47
  var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
35
48
  if (lim === 0) return [];
36
49
  if (separator === undefined) return [string];
@@ -78,19 +91,20 @@ fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCal
78
91
  var splitter = separator == undefined ? undefined : separator[SPLIT];
79
92
  return splitter !== undefined
80
93
  ? splitter.call(separator, O, limit)
81
- : internalSplit.call(String(O), separator, limit);
94
+ : internalSplit.call(toString(O), separator, limit);
82
95
  },
83
96
  // `RegExp.prototype[@@split]` method
84
97
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
85
98
  //
86
99
  // NOTE: This cannot be properly polyfilled in engines that don't support
87
100
  // the 'y' flag.
88
- function (regexp, limit) {
89
- var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);
101
+ function (string, limit) {
102
+ var rx = anObject(this);
103
+ var S = toString(string);
104
+ var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);
105
+
90
106
  if (res.done) return res.value;
91
107
 
92
- var rx = anObject(regexp);
93
- var S = String(this);
94
108
  var C = speciesConstructor(rx, RegExp);
95
109
 
96
110
  var unicodeMatching = rx.unicode;
@@ -131,4 +145,4 @@ fixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCal
131
145
  return A;
132
146
  }
133
147
  ];
134
- }, UNSUPPORTED_Y);
148
+ }, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);
@@ -2,6 +2,7 @@
2
2
  var $ = require('../internals/export');
3
3
  var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;
4
4
  var toLength = require('../internals/to-length');
5
+ var toString = require('../internals/to-string');
5
6
  var notARegExp = require('../internals/not-a-regexp');
6
7
  var requireObjectCoercible = require('../internals/require-object-coercible');
7
8
  var correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');
@@ -22,10 +23,10 @@ var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {
22
23
  // https://tc39.es/ecma262/#sec-string.prototype.startswith
23
24
  $({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
24
25
  startsWith: function startsWith(searchString /* , position = 0 */) {
25
- var that = String(requireObjectCoercible(this));
26
+ var that = toString(requireObjectCoercible(this));
26
27
  notARegExp(searchString);
27
28
  var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));
28
- var search = String(searchString);
29
+ var search = toString(searchString);
29
30
  return $startsWith
30
31
  ? $startsWith.call(that, search, index)
31
32
  : that.slice(index, index + search.length) === search;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+ var $ = require('../internals/export');
3
+ var requireObjectCoercible = require('../internals/require-object-coercible');
4
+ var toInteger = require('../internals/to-integer');
5
+ var toString = require('../internals/to-string');
6
+
7
+ var slice = ''.slice;
8
+ var max = Math.max;
9
+ var min = Math.min;
10
+
11
+ // `String.prototype.substr` method
12
+ // https://tc39.es/ecma262/#sec-string.prototype.substr
13
+ $({ target: 'String', proto: true }, {
14
+ substr: function substr(start, length) {
15
+ var that = toString(requireObjectCoercible(this));
16
+ var size = that.length;
17
+ var intStart = toInteger(start);
18
+ var intLength, intEnd;
19
+ if (intStart === Infinity) intStart = 0;
20
+ if (intStart < 0) intStart = max(size + intStart, 0);
21
+ intLength = length === undefined ? size : toInteger(length);
22
+ if (intLength <= 0 || intLength === Infinity) return '';
23
+ intEnd = min(intStart + intLength, size);
24
+ return intStart >= intEnd ? '' : slice.call(that, intStart, intEnd);
25
+ }
26
+ });
@@ -5,15 +5,16 @@ var getBuiltIn = require('../internals/get-built-in');
5
5
  var IS_PURE = require('../internals/is-pure');
6
6
  var DESCRIPTORS = require('../internals/descriptors');
7
7
  var NATIVE_SYMBOL = require('../internals/native-symbol');
8
- var USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');
9
8
  var fails = require('../internals/fails');
10
9
  var has = require('../internals/has');
11
10
  var isArray = require('../internals/is-array');
12
11
  var isObject = require('../internals/is-object');
12
+ var isSymbol = require('../internals/is-symbol');
13
13
  var anObject = require('../internals/an-object');
14
14
  var toObject = require('../internals/to-object');
15
15
  var toIndexedObject = require('../internals/to-indexed-object');
16
- var toPrimitive = require('../internals/to-primitive');
16
+ var toPropertyKey = require('../internals/to-property-key');
17
+ var $toString = require('../internals/to-string');
17
18
  var createPropertyDescriptor = require('../internals/create-property-descriptor');
18
19
  var nativeObjectCreate = require('../internals/object-create');
19
20
  var objectKeys = require('../internals/object-keys');
@@ -83,16 +84,10 @@ var wrap = function (tag, description) {
83
84
  return symbol;
84
85
  };
85
86
 
86
- var isSymbol = USE_SYMBOL_AS_UID ? function (it) {
87
- return typeof it == 'symbol';
88
- } : function (it) {
89
- return Object(it) instanceof $Symbol;
90
- };
91
-
92
87
  var $defineProperty = function defineProperty(O, P, Attributes) {
93
88
  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
94
89
  anObject(O);
95
- var key = toPrimitive(P, true);
90
+ var key = toPropertyKey(P);
96
91
  anObject(Attributes);
97
92
  if (has(AllSymbols, key)) {
98
93
  if (!Attributes.enumerable) {
@@ -120,7 +115,7 @@ var $create = function create(O, Properties) {
120
115
  };
121
116
 
122
117
  var $propertyIsEnumerable = function propertyIsEnumerable(V) {
123
- var P = toPrimitive(V, true);
118
+ var P = toPropertyKey(V);
124
119
  var enumerable = nativePropertyIsEnumerable.call(this, P);
125
120
  if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;
126
121
  return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
@@ -128,7 +123,7 @@ var $propertyIsEnumerable = function propertyIsEnumerable(V) {
128
123
 
129
124
  var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
130
125
  var it = toIndexedObject(O);
131
- var key = toPrimitive(P, true);
126
+ var key = toPropertyKey(P);
132
127
  if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;
133
128
  var descriptor = nativeGetOwnPropertyDescriptor(it, key);
134
129
  if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {
@@ -163,7 +158,7 @@ var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
163
158
  if (!NATIVE_SYMBOL) {
164
159
  $Symbol = function Symbol() {
165
160
  if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');
166
- var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);
161
+ var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
167
162
  var tag = uid(description);
168
163
  var setter = function (value) {
169
164
  if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);
@@ -218,7 +213,7 @@ $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
218
213
  // `Symbol.for` method
219
214
  // https://tc39.es/ecma262/#sec-symbol.for
220
215
  'for': function (key) {
221
- var string = String(key);
216
+ var string = $toString(key);
222
217
  if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
223
218
  var symbol = $Symbol(string);
224
219
  StringToSymbolRegistry[string] = symbol;
@@ -1,16 +1,15 @@
1
1
  'use strict';
2
2
  var ArrayBufferViewCore = require('../internals/array-buffer-view-core');
3
3
  var $map = require('../internals/array-iteration').map;
4
- var speciesConstructor = require('../internals/species-constructor');
4
+ var typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');
5
5
 
6
6
  var aTypedArray = ArrayBufferViewCore.aTypedArray;
7
- var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
8
7
  var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
9
8
 
10
9
  // `%TypedArray%.prototype.map` method
11
10
  // https://tc39.es/ecma262/#sec-%typedarray%.prototype.map
12
11
  exportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {
13
12
  return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {
14
- return new (aTypedArrayConstructor(speciesConstructor(O, O.constructor)))(length);
13
+ return new (typedArraySpeciesConstructor(O))(length);
15
14
  });
16
15
  });
@@ -1,10 +1,9 @@
1
1
  'use strict';
2
2
  var ArrayBufferViewCore = require('../internals/array-buffer-view-core');
3
- var speciesConstructor = require('../internals/species-constructor');
3
+ var typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');
4
4
  var fails = require('../internals/fails');
5
5
 
6
6
  var aTypedArray = ArrayBufferViewCore.aTypedArray;
7
- var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
8
7
  var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
9
8
  var $slice = [].slice;
10
9
 
@@ -17,10 +16,10 @@ var FORCED = fails(function () {
17
16
  // https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice
18
17
  exportTypedArrayMethod('slice', function slice(start, end) {
19
18
  var list = $slice.call(aTypedArray(this), start, end);
20
- var C = speciesConstructor(this, this.constructor);
19
+ var C = typedArraySpeciesConstructor(this);
21
20
  var index = 0;
22
21
  var length = list.length;
23
- var result = new (aTypedArrayConstructor(C))(length);
22
+ var result = new C(length);
24
23
  while (length > index) result[index] = list[index++];
25
24
  return result;
26
25
  }, FORCED);
@@ -2,7 +2,7 @@
2
2
  var ArrayBufferViewCore = require('../internals/array-buffer-view-core');
3
3
  var toLength = require('../internals/to-length');
4
4
  var toAbsoluteIndex = require('../internals/to-absolute-index');
5
- var speciesConstructor = require('../internals/species-constructor');
5
+ var typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');
6
6
 
7
7
  var aTypedArray = ArrayBufferViewCore.aTypedArray;
8
8
  var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
@@ -13,7 +13,8 @@ exportTypedArrayMethod('subarray', function subarray(begin, end) {
13
13
  var O = aTypedArray(this);
14
14
  var length = O.length;
15
15
  var beginIndex = toAbsoluteIndex(begin, length);
16
- return new (speciesConstructor(O, O.constructor))(
16
+ var C = typedArraySpeciesConstructor(O);
17
+ return new C(
17
18
  O.buffer,
18
19
  O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,
19
20
  toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+ var $ = require('../internals/export');
3
+ var toString = require('../internals/to-string');
4
+
5
+ var fromCharCode = String.fromCharCode;
6
+ var hex2 = /^[\da-f]{2}$/i;
7
+ var hex4 = /^[\da-f]{4}$/i;
8
+
9
+ // `unescape` method
10
+ // https://tc39.es/ecma262/#sec-unescape-string
11
+ $({ global: true }, {
12
+ unescape: function unescape(string) {
13
+ var str = toString(string);
14
+ var result = '';
15
+ var length = str.length;
16
+ var index = 0;
17
+ var chr, slice;
18
+ while (index < length) {
19
+ chr = str.charAt(index++);
20
+ if (chr === '%') {
21
+ if (str.charAt(index) === 'u') {
22
+ slice = str.slice(index + 1, index + 5);
23
+ if (hex4.test(slice)) {
24
+ result += fromCharCode(parseInt(slice, 16));
25
+ index += 5;
26
+ continue;
27
+ }
28
+ } else {
29
+ slice = str.slice(index, index + 2);
30
+ if (hex2.test(slice)) {
31
+ result += fromCharCode(parseInt(slice, 16));
32
+ index += 2;
33
+ continue;
34
+ }
35
+ }
36
+ }
37
+ result += chr;
38
+ } return result;
39
+ }
40
+ });
@@ -28,7 +28,7 @@ var $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak);
28
28
  // https://github.com/zloirock/core-js/issues/485
29
29
  if (NATIVE_WEAK_MAP && IS_IE11) {
30
30
  InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);
31
- InternalMetadataModule.REQUIRED = true;
31
+ InternalMetadataModule.enable();
32
32
  var WeakMapPrototype = $WeakMap.prototype;
33
33
  var nativeDelete = WeakMapPrototype['delete'];
34
34
  var nativeHas = WeakMapPrototype.has;
@@ -1,13 +1,14 @@
1
1
  'use strict';
2
+ // TODO: remove from `core-js@4`
2
3
  var $ = require('../internals/export');
3
- var $filterOut = require('../internals/array-iteration').filterOut;
4
+ var $filterReject = require('../internals/array-iteration').filterReject;
4
5
  var addToUnscopables = require('../internals/add-to-unscopables');
5
6
 
6
7
  // `Array.prototype.filterOut` method
7
8
  // https://github.com/tc39/proposal-array-filtering
8
9
  $({ target: 'Array', proto: true }, {
9
10
  filterOut: function filterOut(callbackfn /* , thisArg */) {
10
- return $filterOut(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
11
+ return $filterReject(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
11
12
  }
12
13
  });
13
14
 
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+ var $ = require('../internals/export');
3
+ var $filterReject = require('../internals/array-iteration').filterReject;
4
+ var addToUnscopables = require('../internals/add-to-unscopables');
5
+
6
+ // `Array.prototype.filterReject` method
7
+ // https://github.com/tc39/proposal-array-filtering
8
+ $({ target: 'Array', proto: true }, {
9
+ filterReject: function filterReject(callbackfn /* , thisArg */) {
10
+ return $filterReject(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
11
+ }
12
+ });
13
+
14
+ addToUnscopables('filterReject');
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+ var $ = require('../internals/export');
3
+ var $groupBy = require('../internals/array-group-by');
4
+ var arraySpeciesConstructor = require('../internals/array-species-constructor');
5
+ var addToUnscopables = require('../internals/add-to-unscopables');
6
+
7
+ // `Array.prototype.groupBy` method
8
+ // https://github.com/tc39/proposal-array-grouping
9
+ $({ target: 'Array', proto: true }, {
10
+ groupBy: function groupBy(callbackfn /* , thisArg */) {
11
+ var thisArg = arguments.length > 1 ? arguments[1] : undefined;
12
+ return $groupBy(this, callbackfn, thisArg, arraySpeciesConstructor);
13
+ }
14
+ });
15
+
16
+ addToUnscopables('groupBy');
@@ -12,8 +12,9 @@ $({ target: 'Map', proto: true, real: true, forced: IS_PURE }, {
12
12
  merge: function merge(iterable /* ...iterbles */) {
13
13
  var map = anObject(this);
14
14
  var setter = aFunction(map.set);
15
+ var argumentsLength = arguments.length;
15
16
  var i = 0;
16
- while (i < arguments.length) {
17
+ while (i < argumentsLength) {
17
18
  iterate(arguments[i++], setter, { that: map, AS_ENTRIES: true });
18
19
  }
19
20
  return map;