blob: 7a85167a7174daebde8f81f37e2cbab4fd41e8ae [file] [log] [blame]
Yang Guo4fd355c2019-09-19 08:59:031'use strict';
2
3// modified from https://github.com/es-shims/es6-shim
Nikolay Vitkovd76576c2024-12-02 14:10:154var objectKeys = require('object-keys');
Yang Guo4fd355c2019-09-19 08:59:035var hasSymbols = require('has-symbols/shams')();
Tim van der Lippe16aca392020-11-13 11:37:136var callBound = require('call-bind/callBound');
Yang Guo4fd355c2019-09-19 08:59:037var toObject = Object;
Tim van der Lippe16aca392020-11-13 11:37:138var $push = callBound('Array.prototype.push');
9var $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');
Yang Guo4fd355c2019-09-19 08:59:0310var originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;
11
Tim van der Lippe16aca392020-11-13 11:37:1312// eslint-disable-next-line no-unused-vars
Yang Guo4fd355c2019-09-19 08:59:0313module.exports = function assign(target, source1) {
Nikolay Vitkovd76576c2024-12-02 14:10:1514 if (target == null) { throw new TypeError('target must be an object'); }
15 var to = toObject(target); // step 1
16 if (arguments.length === 1) {
17 return to; // step 2
18 }
19 for (var s = 1; s < arguments.length; ++s) {
20 var from = toObject(arguments[s]); // step 3.a.i
21
22 // step 3.a.ii:
23 var keys = objectKeys(from);
Yang Guo4fd355c2019-09-19 08:59:0324 var getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);
25 if (getSymbols) {
Nikolay Vitkovd76576c2024-12-02 14:10:1526 var syms = getSymbols(from);
27 for (var j = 0; j < syms.length; ++j) {
28 var key = syms[j];
29 if ($propIsEnumerable(from, key)) {
30 $push(keys, key);
Yang Guo4fd355c2019-09-19 08:59:0331 }
32 }
33 }
Nikolay Vitkovd76576c2024-12-02 14:10:1534
35 // step 3.a.iii:
36 for (var i = 0; i < keys.length; ++i) {
37 var nextKey = keys[i];
38 if ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2
39 var propValue = from[nextKey]; // step 3.a.iii.2.a
40 to[nextKey] = propValue; // step 3.a.iii.2.b
Yang Guo4fd355c2019-09-19 08:59:0341 }
42 }
43 }
Nikolay Vitkovd76576c2024-12-02 14:10:1544
45 return to; // step 4
Yang Guo4fd355c2019-09-19 08:59:0346};