'use strict'; 
 | 
var isArray = require('../internals/is-array'); 
 | 
var isConstructor = require('../internals/is-constructor'); 
 | 
var isObject = require('../internals/is-object'); 
 | 
var wellKnownSymbol = require('../internals/well-known-symbol'); 
 | 
  
 | 
var SPECIES = wellKnownSymbol('species'); 
 | 
var $Array = Array; 
 | 
  
 | 
// a part of `ArraySpeciesCreate` abstract operation 
 | 
// https://tc39.es/ecma262/#sec-arrayspeciescreate 
 | 
module.exports = function (originalArray) { 
 | 
  var C; 
 | 
  if (isArray(originalArray)) { 
 | 
    C = originalArray.constructor; 
 | 
    // cross-realm fallback 
 | 
    if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined; 
 | 
    else if (isObject(C)) { 
 | 
      C = C[SPECIES]; 
 | 
      if (C === null) C = undefined; 
 | 
    } 
 | 
  } return C === undefined ? $Array : C; 
 | 
}; 
 |