UNPKG

1.42 kBJavaScriptView Raw
1import {default as isObject} from "./isObject";
2
3/**
4 @function validObject
5 @desc Determines if the object passed is the document or window.
6 @param {Object} obj
7 @private
8*/
9function validObject(obj) {
10 if (typeof window === "undefined") { return true; }
11 else { return obj !== window && obj !== document; }
12}
13
14/**
15 @function assign
16 @desc A deeply recursive version of `Object.assign`.
17 @param {...Object} objects
18 @example <caption>this</caption>
19assign({id: "foo", deep: {group: "A"}}, {id: "bar", deep: {value: 20}}));
20 @example <caption>returns this</caption>
21{id: "bar", deep: {group: "A", value: 20}}
22*/
23function assign() {
24 var objects = [], len = arguments.length;
25 while ( len-- ) objects[ len ] = arguments[ len ];
26
27
28 var target = objects[0];
29 var loop = function ( i ) {
30
31 var source = objects[i];
32
33 Object.keys(source).forEach(function (prop) {
34
35 var value = source[prop];
36
37 if (isObject(value) && validObject(value)) {
38 if (target.hasOwnProperty(prop) && isObject(target[prop])) { target[prop] = assign({}, target[prop], value); }
39 else { target[prop] = assign({}, value); }
40 }
41 else if (Array.isArray(value)) { target[prop] = value.slice(); }
42 else { target[prop] = value; }
43
44 });
45 };
46
47 for (var i = 1; i < objects.length; i++) loop( i );
48
49 return target;
50
51}
52
53export default assign;
54
55//# sourceMappingURL=assign.js.map
\No newline at end of file