UNPKG

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