61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | var isExtendable = require('is-extendable'); | ||
|  | var assignSymbols = require('assign-symbols'); | ||
|  | 
 | ||
|  | module.exports = Object.assign || function(obj/*, objects*/) { | ||
|  |   if (obj === null || typeof obj === 'undefined') { | ||
|  |     throw new TypeError('Cannot convert undefined or null to object'); | ||
|  |   } | ||
|  |   if (!isObject(obj)) { | ||
|  |     obj = {}; | ||
|  |   } | ||
|  |   for (var i = 1; i < arguments.length; i++) { | ||
|  |     var val = arguments[i]; | ||
|  |     if (isString(val)) { | ||
|  |       val = toObject(val); | ||
|  |     } | ||
|  |     if (isObject(val)) { | ||
|  |       assign(obj, val); | ||
|  |       assignSymbols(obj, val); | ||
|  |     } | ||
|  |   } | ||
|  |   return obj; | ||
|  | }; | ||
|  | 
 | ||
|  | function assign(a, b) { | ||
|  |   for (var key in b) { | ||
|  |     if (hasOwn(b, key)) { | ||
|  |       a[key] = b[key]; | ||
|  |     } | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function isString(val) { | ||
|  |   return (val && typeof val === 'string'); | ||
|  | } | ||
|  | 
 | ||
|  | function toObject(str) { | ||
|  |   var obj = {}; | ||
|  |   for (var i in str) { | ||
|  |     obj[i] = str[i]; | ||
|  |   } | ||
|  |   return obj; | ||
|  | } | ||
|  | 
 | ||
|  | function isObject(val) { | ||
|  |   return (val && typeof val === 'object') || isExtendable(val); | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Returns true if the given `key` is an own property of `obj`. | ||
|  |  */ | ||
|  | 
 | ||
|  | function hasOwn(obj, key) { | ||
|  |   return Object.prototype.hasOwnProperty.call(obj, key); | ||
|  | } | ||
|  | 
 | ||
|  | function isEnum(obj, key) { | ||
|  |   return Object.prototype.propertyIsEnumerable.call(obj, key); | ||
|  | } |