Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50640 views
1
var hasOwn = Object.prototype.hasOwnProperty;
2
var toString = Object.prototype.toString;
3
4
function isPlainObject(obj) {
5
if (!obj || toString.call(obj) !== '[object Object]' || obj.nodeType || obj.setInterval)
6
return false;
7
8
var has_own_constructor = hasOwn.call(obj, 'constructor');
9
var has_is_property_of_method = hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
10
// Not own constructor property must be Object
11
if (obj.constructor && !has_own_constructor && !has_is_property_of_method)
12
return false;
13
14
// Own properties are enumerated firstly, so to speed up,
15
// if last one is own, then all properties are own.
16
var key;
17
for ( key in obj ) {}
18
19
return key === undefined || hasOwn.call( obj, key );
20
};
21
22
module.exports = function extend() {
23
var options, name, src, copy, copyIsArray, clone,
24
target = arguments[0] || {},
25
i = 1,
26
length = arguments.length,
27
deep = false;
28
29
// Handle a deep copy situation
30
if ( typeof target === "boolean" ) {
31
deep = target;
32
target = arguments[1] || {};
33
// skip the boolean and the target
34
i = 2;
35
}
36
37
// Handle case when target is a string or something (possible in deep copy)
38
if ( typeof target !== "object" && typeof target !== "function") {
39
target = {};
40
}
41
42
for ( ; i < length; i++ ) {
43
// Only deal with non-null/undefined values
44
if ( (options = arguments[ i ]) != null ) {
45
// Extend the base object
46
for ( name in options ) {
47
src = target[ name ];
48
copy = options[ name ];
49
50
// Prevent never-ending loop
51
if ( target === copy ) {
52
continue;
53
}
54
55
// Recurse if we're merging plain objects or arrays
56
if ( deep && copy && ( isPlainObject(copy) || (copyIsArray = Array.isArray(copy)) ) ) {
57
if ( copyIsArray ) {
58
copyIsArray = false;
59
clone = src && Array.isArray(src) ? src : [];
60
61
} else {
62
clone = src && isPlainObject(src) ? src : {};
63
}
64
65
// Never move original objects, clone them
66
target[ name ] = extend( deep, clone, copy );
67
68
// Don't bring in undefined values
69
} else if ( copy !== undefined ) {
70
target[ name ] = copy;
71
}
72
}
73
}
74
}
75
76
// Return the modified object
77
return target;
78
};
79
80