source: frontend/node_modules/core-js-pure/modules/es.array.concat.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 2.3 KB
Line 
1'use strict';
2var $ = require('../internals/export');
3var fails = require('../internals/fails');
4var isArray = require('../internals/is-array');
5var isObject = require('../internals/is-object');
6var toObject = require('../internals/to-object');
7var lengthOfArrayLike = require('../internals/length-of-array-like');
8var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');
9var createProperty = require('../internals/create-property');
10var setArrayLength = require('../internals/array-set-length');
11var arraySpeciesCreate = require('../internals/array-species-create');
12var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');
13var wellKnownSymbol = require('../internals/well-known-symbol');
14var V8_VERSION = require('../internals/environment-v8-version');
15
16var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');
17
18// We can't use this feature detection in V8 since it causes
19// deoptimization and serious performance degradation
20// https://github.com/zloirock/core-js/issues/679
21var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {
22 var array = [];
23 array[IS_CONCAT_SPREADABLE] = false;
24 return array.concat()[0] !== array;
25});
26
27var isConcatSpreadable = function (O) {
28 if (!isObject(O)) return false;
29 var spreadable = O[IS_CONCAT_SPREADABLE];
30 return spreadable !== undefined ? !!spreadable : isArray(O);
31};
32
33var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat');
34
35// `Array.prototype.concat` method
36// https://tc39.es/ecma262/#sec-array.prototype.concat
37// with adding support of @@isConcatSpreadable and @@species
38$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {
39 // eslint-disable-next-line no-unused-vars -- required for `.length`
40 concat: function concat(arg) {
41 var O = toObject(this);
42 var A = arraySpeciesCreate(O, 0);
43 var n = 0;
44 var i, k, length, len, E;
45 for (i = -1, length = arguments.length; i < length; i++) {
46 E = i === -1 ? O : arguments[i];
47 if (isConcatSpreadable(E)) {
48 len = lengthOfArrayLike(E);
49 doesNotExceedSafeInteger(n + len);
50 for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
51 } else {
52 doesNotExceedSafeInteger(n + 1);
53 createProperty(A, n++, E);
54 }
55 }
56 setArrayLength(A, n);
57 return A;
58 }
59});
Note: See TracBrowser for help on using the repository browser.