Sha256: a998840eacd0754435aba99e80bd7e4c5626dc4ccd250fe64ba26cde6d3ef66f

Contents?: true

Size: 1.66 KB

Versions: 27

Compression:

Stored size: 1.66 KB

Contents

'use strict';

var GetIntrinsic = require('get-intrinsic');

var $TypeError = GetIntrinsic('%TypeError%');

var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');

var Call = require('./Call');
var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow');
var Get = require('./Get');
var HasProperty = require('./HasProperty');
var IsArray = require('./IsArray');
var ToLength = require('./ToLength');
var ToString = require('./ToString');

// https://262.ecma-international.org/10.0/#sec-flattenintoarray

module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) {
	var mapperFunction;
	if (arguments.length > 5) {
		mapperFunction = arguments[5];
	}

	var targetIndex = start;
	var sourceIndex = 0;
	while (sourceIndex < sourceLen) {
		var P = ToString(sourceIndex);
		var exists = HasProperty(source, P);
		if (exists === true) {
			var element = Get(source, P);
			if (typeof mapperFunction !== 'undefined') {
				if (arguments.length <= 6) {
					throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided');
				}
				element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]);
			}
			var shouldFlatten = false;
			if (depth > 0) {
				shouldFlatten = IsArray(element);
			}
			if (shouldFlatten) {
				var elementLen = ToLength(Get(element, 'length'));
				targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1);
			} else {
				if (targetIndex >= MAX_SAFE_INTEGER) {
					throw new $TypeError('index too large');
				}
				CreateDataPropertyOrThrow(target, ToString(targetIndex), element);
				targetIndex += 1;
			}
		}
		sourceIndex += 1;
	}

	return targetIndex;
};

Version data entries

27 entries across 27 versions & 2 rubygems

Version Path
immosquare-cleaner-0.1.32 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.31 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.30 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.29 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.28 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.27 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.26 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.25 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.24 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.23 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.22 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.21 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.20 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.19 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.18 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.17 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.16 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.14 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.13 node_modules/es-abstract/2019/FlattenIntoArray.js
immosquare-cleaner-0.1.12 node_modules/es-abstract/2019/FlattenIntoArray.js