| /** |
| * Code refactored from Mozilla Developer Network: |
| * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign |
| */ |
| |
| 'use strict'; |
| |
| function assign(target, firstSource) { |
| if (target === undefined || target === null) { |
| throw new TypeError('Cannot convert first argument to object'); |
| } |
| |
| var to = Object(target); |
| for (var i = 1; i < arguments.length; i++) { |
| var nextSource = arguments[i]; |
| if (nextSource === undefined || nextSource === null) { |
| continue; |
| } |
| |
| var keysArray = Object.keys(Object(nextSource)); |
| for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) { |
| var nextKey = keysArray[nextIndex]; |
| var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); |
| if (desc !== undefined && desc.enumerable) { |
| to[nextKey] = nextSource[nextKey]; |
| } |
| } |
| } |
| return to; |
| } |
| |
| function polyfill() { |
| if (!Object.assign) { |
| Object.defineProperty(Object, 'assign', { |
| enumerable: false, |
| configurable: true, |
| writable: true, |
| value: assign |
| }); |
| } |
| } |
| |
| module.exports = { |
| assign: assign, |
| polyfill: polyfill |
| }; |