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