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.
- package/internals/array-sort.js +45 -0
- package/internals/engine-ff-version.js +5 -0
- package/internals/engine-is-ie-or-edge.js +3 -0
- package/internals/engine-webkit-version.js +5 -0
- package/internals/object-prototype-accessors-forced.js +2 -3
- package/internals/shared.js +1 -1
- package/modules/es.array.sort.js +73 -4
- package/modules/es.typed-array.sort.js +77 -3
- package/package.json +2 -2
|
@@ -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;
|
|
@@ -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
|
|
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
|
-
|
|
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
|
package/internals/shared.js
CHANGED
|
@@ -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.
|
|
7
|
+
version: '3.14.0',
|
|
8
8
|
mode: IS_PURE ? 'pure' : 'global',
|
|
9
9
|
copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
|
|
10
10
|
});
|
package/modules/es.array.sort.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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": "
|
|
58
|
+
"gitHead": "e386f3de7760ee2910d07efb9d35029aa5dda93b"
|
|
59
59
|
}
|