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