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.
60 lines
1.2 KiB
60 lines
1.2 KiB
'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); |
|
}
|
|
|