| 'use strict'; | 
| var isArray = require('../internals/is-array'); | 
| var lengthOfArrayLike = require('../internals/length-of-array-like'); | 
| var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer'); | 
| var bind = require('../internals/function-bind-context'); | 
|   | 
| // `FlattenIntoArray` abstract operation | 
| // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray | 
| var flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) { | 
|   var targetIndex = start; | 
|   var sourceIndex = 0; | 
|   var mapFn = mapper ? bind(mapper, thisArg) : false; | 
|   var element, elementLen; | 
|   | 
|   while (sourceIndex < sourceLen) { | 
|     if (sourceIndex in source) { | 
|       element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex]; | 
|   | 
|       if (depth > 0 && isArray(element)) { | 
|         elementLen = lengthOfArrayLike(element); | 
|         targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1; | 
|       } else { | 
|         doesNotExceedSafeInteger(targetIndex + 1); | 
|         target[targetIndex] = element; | 
|       } | 
|   | 
|       targetIndex++; | 
|     } | 
|     sourceIndex++; | 
|   } | 
|   return targetIndex; | 
| }; | 
|   | 
| module.exports = flattenIntoArray; |