You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					91 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					91 lines
				
				2.1 KiB
			| 
											3 years ago
										 | /* | ||
|  | object-assign | ||
|  | (c) Sindre Sorhus | ||
|  | @license MIT | ||
|  | */ | ||
|  | 
 | ||
|  | 'use strict'; | ||
|  | /* 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; | ||
|  | }; |