Issues (2242)

node_modules/object-assign/index.js (3 issues)

1
/*
2
object-assign
3
(c) Sindre Sorhus
4
@license MIT
5
*/
6
7
'use strict';
8
/* eslint-disable no-unused-vars */
9
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
10
var hasOwnProperty = Object.prototype.hasOwnProperty;
11
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
12
13
function toObject(val) {
14
	if (val === null || val === undefined) {
15
		throw new TypeError('Object.assign cannot be called with null or undefined');
16
	}
17
18
	return Object(val);
19
}
20
21
function shouldUseNative() {
22
	try {
23
		if (!Object.assign) {
24
			return false;
25
		}
26
27
		// Detect buggy property enumeration order in older V8 versions.
28
29
		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
30
		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
0 ignored issues
show
Usage of type wrappers to create string variables is discouraged. They always create objects, whose behavior may be counter-intuitive. Consider using a primitive instead.
Loading history...
31
		test1[5] = 'de';
32
		if (Object.getOwnPropertyNames(test1)[0] === '5') {
33
			return false;
34
		}
35
36
		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
37
		var test2 = {};
38
		for (var i = 0; i < 10; i++) {
39
			test2['_' + String.fromCharCode(i)] = i;
40
		}
41
		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
42
			return test2[n];
43
		});
44
		if (order2.join('') !== '0123456789') {
45
			return false;
46
		}
47
48
		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
49
		var test3 = {};
50
		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
51
			test3[letter] = letter;
52
		});
53
		if (Object.keys(Object.assign({}, test3)).join('') !==
54
				'abcdefghijklmnopqrst') {
55
			return false;
56
		}
57
58
		return true;
59
	} catch (err) {
60
		// We don't expect any of the above to throw, but better to be safe.
61
		return false;
62
	}
63
}
64
65
module.exports = shouldUseNative() ? Object.assign : function (target, source) {
0 ignored issues
show
The parameter source is not used and could be removed.

This check looks for parameters in functions that are not used in the function body and are not followed by other parameters which are used inside the function.

Loading history...
66
	var from;
67
	var to = toObject(target);
68
	var symbols;
69
70
	for (var s = 1; s < arguments.length; s++) {
71
		from = Object(arguments[s]);
72
73
		for (var key in from) {
0 ignored issues
show
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
74
			if (hasOwnProperty.call(from, key)) {
75
				to[key] = from[key];
76
			}
77
		}
78
79
		if (getOwnPropertySymbols) {
80
			symbols = getOwnPropertySymbols(from);
81
			for (var i = 0; i < symbols.length; i++) {
82
				if (propIsEnumerable.call(from, symbols[i])) {
83
					to[symbols[i]] = from[symbols[i]];
84
				}
85
			}
86
		}
87
	}
88
89
	return to;
90
};
91