All files / src/utils objectAssign.js

0% Statements 0/40
0% Branches 0/20
0% Functions 0/5
0% Lines 0/40
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84                                                                                                                                                                       
/* eslint-disable no-unused-vars */
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
 
function toObject( val ) {
  if ( val === null || val === undefined ) {
    throw new TypeError( 'Object.assign cannot be called with null or undefined' );
  }
 
  return Object( val );
}
 
function shouldUseNative() {
  try {
    if ( !Object.assign ) {
      return false;
    }
 
		// Detect buggy property enumeration order in older V8 versions.
 
		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
    var test1 = new String( 'abc' );  // eslint-disable-line no-new-wrappers
    test1[ 5 ] = 'de';
    if ( Object.getOwnPropertyNames( test1 )[ 0 ] === '5' ) {
      return false;
    }
 
		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
    var test2 = {};
    for ( var i = 0; i < 10; i++ ) {
      test2[ '_' + String.fromCharCode( i ) ] = i;
    }
    var order2 = Object.getOwnPropertyNames( test2 ).map( function( n ) {
      return test2[ n ];
    } );
    if ( order2.join( '' ) !== '0123456789' ) {
      return false;
    }
 
		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
    var test3 = {};
    'abcdefghijklmnopqrst'.split( '' ).forEach( function( letter ) {
      test3[ letter ] = letter;
    } );
    if ( Object.keys( Object.assign( {}, test3 ) ).join( '' ) !==
				'abcdefghijklmnopqrst' ) {
      return false;
    }
 
    return true;
  } catch ( err ) {
		// We don't expect any of the above to throw, but better to be safe.
    return false;
  }
}
 
module.exports = shouldUseNative() ? Object.assign : function( target, source ) {
  var from;
  var to = toObject( target );
  var symbols;
 
  for ( var s = 1; s < arguments.length; s++ ) {
    from = Object( arguments[ s ] );
 
    for ( var key in from ) {
      if ( hasOwnProperty.call( from, key ) ) {
        to[ key ] = from[ key ];
      }
    }
 
    if ( getOwnPropertySymbols ) {
      symbols = getOwnPropertySymbols( from );
      for ( var i = 0; i < symbols.length; i++ ) {
        if ( propIsEnumerable.call( from, symbols[ i ] ) ) {
          to[ symbols[ i ] ] = from[ symbols[ i ] ];
        }
      }
    }
  }
 
  return to;
};