core-js 3.13.1 → 3.14.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.
@@ -0,0 +1,45 @@
1
+ // TODO: use something more complex like timsort?
2
+ var floor = Math.floor;
3
+
4
+ var mergeSort = function (array, comparefn) {
5
+ var length = array.length;
6
+ var middle = floor(length / 2);
7
+ return length < 8 ? insertionSort(array, comparefn) : merge(
8
+ mergeSort(array.slice(0, middle), comparefn),
9
+ mergeSort(array.slice(middle), comparefn),
10
+ comparefn
11
+ );
12
+ };
13
+
14
+ var insertionSort = function (array, comparefn) {
15
+ var length = array.length;
16
+ var i = 1;
17
+ var element, j;
18
+
19
+ while (i < length) {
20
+ j = i;
21
+ element = array[i];
22
+ while (j && comparefn(array[j - 1], element) > 0) {
23
+ array[j] = array[--j];
24
+ }
25
+ if (j !== i++) array[j] = element;
26
+ } return array;
27
+ };
28
+
29
+ var merge = function (left, right, comparefn) {
30
+ var llength = left.length;
31
+ var rlength = right.length;
32
+ var lindex = 0;
33
+ var rindex = 0;
34
+ var result = [];
35
+
36
+ while (lindex < llength || rindex < rlength) {
37
+ if (lindex < llength && rindex < rlength) {
38
+ result.push(comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]);
39
+ } else {
40
+ result.push(lindex < llength ? left[lindex++] : right[rindex++]);
41
+ }
42
+ } return result;
43
+ };
44
+
45
+ module.exports = mergeSort;
@@ -0,0 +1,5 @@
1
+ var userAgent = require('../internals/engine-user-agent');
2
+
3
+ var firefox = userAgent.match(/firefox\/(\d+)/i);
4
+
5
+ module.exports = !!firefox && +firefox[1];
@@ -0,0 +1,3 @@
1
+ var UA = require('../internals/engine-user-agent');
2
+
3
+ module.exports = /MSIE|Trident/.test(UA);
@@ -0,0 +1,5 @@
1
+ var userAgent = require('../internals/engine-user-agent');
2
+
3
+ var webkit = userAgent.match(/AppleWebKit\/(\d+)\./);
4
+
5
+ module.exports = !!webkit && +webkit[1];
@@ -2,14 +2,13 @@
2
2
  var IS_PURE = require('../internals/is-pure');
3
3
  var global = require('../internals/global');
4
4
  var fails = require('../internals/fails');
5
- var userAgent = require('../internals/engine-user-agent');
5
+ var WEBKIT = require('../internals/engine-webkit-version');
6
6
 
7
7
  // Forced replacement object prototype accessors methods
8
8
  module.exports = IS_PURE || !fails(function () {
9
9
  // This feature detection crashes old WebKit
10
10
  // https://github.com/zloirock/core-js/issues/232
11
- var webkit = userAgent.match(/AppleWebKit\/(\d+)\./);
12
- if (webkit && +webkit[1] < 535) return;
11
+ if (WEBKIT && WEBKIT < 535) return;
13
12
  var key = Math.random();
14
13
  // In FF throws only define methods
15
14
  // eslint-disable-next-line no-undef, no-useless-call -- required for testing
@@ -4,7 +4,7 @@ var store = require('../internals/shared-store');
4
4
  (module.exports = function (key, value) {
5
5
  return store[key] || (store[key] = value !== undefined ? value : {});
6
6
  })('versions', []).push({
7
- version: '3.13.1',
7
+ version: '3.14.0',
8
8
  mode: IS_PURE ? 'pure' : 'global',
9
9
  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
10
10
  });
@@ -2,8 +2,14 @@
2
2
  var $ = require('../internals/export');
3
3
  var aFunction = require('../internals/a-function');
4
4
  var toObject = require('../internals/to-object');
5
+ var toLength = require('../internals/to-length');
5
6
  var fails = require('../internals/fails');
7
+ var internalSort = require('../internals/array-sort');
6
8
  var arrayMethodIsStrict = require('../internals/array-method-is-strict');
9
+ var FF = require('../internals/engine-ff-version');
10
+ var IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');
11
+ var V8 = require('../internals/engine-v8-version');
12
+ var WEBKIT = require('../internals/engine-webkit-version');
7
13
 
8
14
  var test = [];
9
15
  var nativeSort = test.sort;
@@ -19,14 +25,77 @@ var FAILS_ON_NULL = fails(function () {
19
25
  // Old WebKit
20
26
  var STRICT_METHOD = arrayMethodIsStrict('sort');
21
27
 
22
- var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD;
28
+ var STABLE_SORT = !fails(function () {
29
+ // feature detection can be too slow, so check engines versions
30
+ if (V8) return V8 < 70;
31
+ if (FF && FF > 3) return;
32
+ if (IE_OR_EDGE) return true;
33
+ if (WEBKIT) return WEBKIT < 603;
34
+
35
+ var result = '';
36
+ var code, chr, value, index;
37
+
38
+ // generate an array with more 512 elements (Chakra and old V8 fails only in this case)
39
+ for (code = 65; code < 76; code++) {
40
+ chr = String.fromCharCode(code);
41
+
42
+ switch (code) {
43
+ case 66: case 69: case 70: case 72: value = 3; break;
44
+ case 68: case 71: value = 4; break;
45
+ default: value = 2;
46
+ }
47
+
48
+ for (index = 0; index < 47; index++) {
49
+ test.push({ k: chr + index, v: value });
50
+ }
51
+ }
52
+
53
+ test.sort(function (a, b) { return b.v - a.v; });
54
+
55
+ for (index = 0; index < test.length; index++) {
56
+ chr = test[index].k.charAt(0);
57
+ if (result.charAt(result.length - 1) !== chr) result += chr;
58
+ }
59
+
60
+ return result !== 'DGBEFHACIJK';
61
+ });
62
+
63
+ var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;
64
+
65
+ var getSortCompare = function (comparefn) {
66
+ return function (x, y) {
67
+ if (y === undefined) return -1;
68
+ if (x === undefined) return 1;
69
+ if (comparefn !== undefined) return +comparefn(x, y) || 0;
70
+ return String(x) > String(y) ? 1 : -1;
71
+ };
72
+ };
23
73
 
24
74
  // `Array.prototype.sort` method
25
75
  // https://tc39.es/ecma262/#sec-array.prototype.sort
26
76
  $({ target: 'Array', proto: true, forced: FORCED }, {
27
77
  sort: function sort(comparefn) {
28
- return comparefn === undefined
29
- ? nativeSort.call(toObject(this))
30
- : nativeSort.call(toObject(this), aFunction(comparefn));
78
+ if (comparefn !== undefined) aFunction(comparefn);
79
+
80
+ var array = toObject(this);
81
+
82
+ if (STABLE_SORT) return comparefn === undefined ? nativeSort.call(array) : nativeSort.call(array, comparefn);
83
+
84
+ var items = [];
85
+ var arrayLength = toLength(array.length);
86
+ var itemsLength, index;
87
+
88
+ for (index = 0; index < arrayLength; index++) {
89
+ if (index in array) items.push(array[index]);
90
+ }
91
+
92
+ items = internalSort(items, getSortCompare(comparefn));
93
+ itemsLength = items.length;
94
+ index = 0;
95
+
96
+ while (index < itemsLength) array[index] = items[index++];
97
+ while (index < arrayLength) delete array[index++];
98
+
99
+ return array;
31
100
  }
32
101
  });
@@ -1,12 +1,86 @@
1
1
  'use strict';
2
2
  var ArrayBufferViewCore = require('../internals/array-buffer-view-core');
3
+ var global = require('../internals/global');
4
+ var fails = require('../internals/fails');
5
+ var aFunction = require('../internals/a-function');
6
+ var toLength = require('../internals/to-length');
7
+ var internalSort = require('../internals/array-sort');
8
+ var FF = require('../internals/engine-ff-version');
9
+ var IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');
10
+ var V8 = require('../internals/engine-v8-version');
11
+ var WEBKIT = require('../internals/engine-webkit-version');
3
12
 
4
13
  var aTypedArray = ArrayBufferViewCore.aTypedArray;
5
14
  var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
6
- var $sort = [].sort;
15
+ var Uint16Array = global.Uint16Array;
16
+ var nativeSort = Uint16Array && Uint16Array.prototype.sort;
17
+
18
+ // WebKit
19
+ var ACCEPT_INCORRECT_ARGUMENTS = !!nativeSort && !fails(function () {
20
+ var array = new Uint16Array(2);
21
+ array.sort(null);
22
+ array.sort({});
23
+ });
24
+
25
+ var STABLE_SORT = !!nativeSort && !fails(function () {
26
+ // feature detection can be too slow, so check engines versions
27
+ if (V8) return V8 < 74;
28
+ if (FF) return FF < 67;
29
+ if (IE_OR_EDGE) return true;
30
+ if (WEBKIT) return WEBKIT < 602;
31
+
32
+ var array = new Uint16Array(516);
33
+ var expected = Array(516);
34
+ var index, mod;
35
+
36
+ for (index = 0; index < 516; index++) {
37
+ mod = index % 4;
38
+ array[index] = 515 - index;
39
+ expected[index] = index - 2 * mod + 3;
40
+ }
41
+
42
+ array.sort(function (a, b) {
43
+ return (a / 4 | 0) - (b / 4 | 0);
44
+ });
45
+
46
+ for (index = 0; index < 516; index++) {
47
+ if (array[index] !== expected[index]) return true;
48
+ }
49
+ });
50
+
51
+ var getSortCompare = function (comparefn) {
52
+ return function (x, y) {
53
+ if (comparefn !== undefined) return +comparefn(x, y) || 0;
54
+ // eslint-disable-next-line no-self-compare -- NaN check
55
+ if (y !== y) return -1;
56
+ // eslint-disable-next-line no-self-compare -- NaN check
57
+ if (x !== x) return 1;
58
+ if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;
59
+ return x > y;
60
+ };
61
+ };
7
62
 
8
63
  // `%TypedArray%.prototype.sort` method
9
64
  // https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort
10
65
  exportTypedArrayMethod('sort', function sort(comparefn) {
11
- return $sort.call(aTypedArray(this), comparefn);
12
- });
66
+ var array = this;
67
+ if (comparefn !== undefined) aFunction(comparefn);
68
+ if (STABLE_SORT) return nativeSort.call(array, comparefn);
69
+
70
+ aTypedArray(array);
71
+ var arrayLength = toLength(array.length);
72
+ var items = Array(arrayLength);
73
+ var index;
74
+
75
+ for (index = 0; index < arrayLength; index++) {
76
+ items[index] = array[index];
77
+ }
78
+
79
+ items = internalSort(array, getSortCompare(comparefn));
80
+
81
+ for (index = 0; index < arrayLength; index++) {
82
+ array[index] = items[index];
83
+ }
84
+
85
+ return array;
86
+ }, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "core-js",
3
3
  "description": "Standard library",
4
- "version": "3.13.1",
4
+ "version": "3.14.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/zloirock/core-js.git",
@@ -55,5 +55,5 @@
55
55
  "scripts": {
56
56
  "postinstall": "node -e \"try{require('./postinstall')}catch(e){}\""
57
57
  },
58
- "gitHead": "a05c21cbf99ccb39b75746f3f65cbb91ef80d697"
58
+ "gitHead": "e386f3de7760ee2910d07efb9d35029aa5dda93b"
59
59
  }