| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | 'use strict';var implementation = require('./implementation');var lacksProperEnumerationOrder = function () {	if (!Object.assign) {		return false;	}	/*	 * v8, specifically in node 4.x, has a bug with incorrect property enumeration order	 * note: this does not detect the bug unless there's 20 characters	 */	var str = 'abcdefghijklmnopqrst';	var letters = str.split('');	var map = {};	for (var i = 0; i < letters.length; ++i) {		map[letters[i]] = letters[i];	}	var obj = Object.assign({}, map);	var actual = '';	for (var k in obj) {		actual += k;	}	return str !== actual;};var assignHasPendingExceptions = function () {	if (!Object.assign || !Object.preventExtensions) {		return false;	}	/*	 * Firefox 37 still has "pending exception" logic in its Object.assign implementation,	 * which is 72% slower than our shim, and Firefox 40's native implementation.	 */	var thrower = Object.preventExtensions({ 1: 2 });	try {		Object.assign(thrower, 'xy');	} catch (e) {		return thrower[1] === 'y';	}	return false;};module.exports = function getPolyfill() {	if (!Object.assign) {		return implementation;	}	if (lacksProperEnumerationOrder()) {		return implementation;	}	if (assignHasPendingExceptions()) {		return implementation;	}	return Object.assign;};
 |