| * Code refactored from Mozilla Developer Network: |
| * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign |
| function assign(target, firstSource) { |
| if (target === undefined || target === null) { |
| throw new TypeError('Cannot convert first argument to object'); |
| for (var i = 1; i < arguments.length; i++) { |
| var nextSource = arguments[i]; |
| if (nextSource === undefined || nextSource === null) { |
| 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]; |
| Object.defineProperty(Object, 'assign', { |