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