| 'use strict'; |
| var DESCRIPTORS = require('../internals/descriptors'); |
| var fails = require('../internals/fails'); |
| var objectKeys = require('../internals/object-keys'); |
| var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols'); |
| var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable'); |
| var toObject = require('../internals/to-object'); |
| var IndexedObject = require('../internals/indexed-object'); |
| |
| var nativeAssign = Object.assign; |
| |
| // `Object.assign` method |
| // https://tc39.github.io/ecma262/#sec-object.assign |
| // should work with symbols and should have deterministic property order (V8 bug) |
| module.exports = !nativeAssign || fails(function () { |
| var A = {}; |
| var B = {}; |
| // eslint-disable-next-line no-undef |
| var symbol = Symbol(); |
| var alphabet = 'abcdefghijklmnopqrst'; |
| A[symbol] = 7; |
| alphabet.split('').forEach(function (chr) { B[chr] = chr; }); |
| return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet; |
| }) ? function assign(target, source) { // eslint-disable-line no-unused-vars |
| var T = toObject(target); |
| var argumentsLength = arguments.length; |
| var index = 1; |
| var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; |
| var propertyIsEnumerable = propertyIsEnumerableModule.f; |
| while (argumentsLength > index) { |
| var S = IndexedObject(arguments[index++]); |
| var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S); |
| var length = keys.length; |
| var j = 0; |
| var key; |
| while (length > j) { |
| key = keys[j++]; |
| if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key]; |
| } |
| } return T; |
| } : nativeAssign; |