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