| 'use strict'; | |
| // modified from https://github.com/es-shims/es6-shim | |
| var objectKeys = require('object-keys'); | |
| var hasSymbols = require('has-symbols/shams')(); | |
| var callBound = require('call-bound'); | |
| var $Object = require('es-object-atoms'); | |
| var $push = callBound('Array.prototype.push'); | |
| var $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable'); | |
| var originalGetSymbols = hasSymbols ? $Object.getOwnPropertySymbols : null; | |
| // eslint-disable-next-line no-unused-vars | |
| module.exports = function assign(target, source1) { | |
| if (target == null) { throw new TypeError('target must be an object'); } | |
| var to = $Object(target); // step 1 | |
| if (arguments.length === 1) { | |
| return to; // step 2 | |
| } | |
| for (var s = 1; s < arguments.length; ++s) { | |
| var from = $Object(arguments[s]); // step 3.a.i | |
| // step 3.a.ii: | |
| var keys = objectKeys(from); | |
| var getSymbols = hasSymbols && ($Object.getOwnPropertySymbols || originalGetSymbols); | |
| if (getSymbols) { | |
| var syms = getSymbols(from); | |
| for (var j = 0; j < syms.length; ++j) { | |
| var key = syms[j]; | |
| if ($propIsEnumerable(from, key)) { | |
| $push(keys, key); | |
| } | |
| } | |
| } | |
| // step 3.a.iii: | |
| for (var i = 0; i < keys.length; ++i) { | |
| var nextKey = keys[i]; | |
| if ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2 | |
| var propValue = from[nextKey]; // step 3.a.iii.2.a | |
| to[nextKey] = propValue; // step 3.a.iii.2.b | |
| } | |
| } | |
| } | |
| return to; // step 4 | |
| }; |