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