'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; 
 |