UNPKG

1.36 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3function mergeProps(obj, newObj) {
4 if (newObj === undefined) {
5 return undefined;
6 }
7 // If setting to a different prototype or a non-object or non-array, don't merge any props
8 if (typeof obj === 'undefined' ||
9 !Object.getPrototypeOf(obj).isPrototypeOf(newObj) ||
10 (newObj.constructor.name !== 'Object' && newObj.constructor.name !== 'Array')) {
11 return newObj;
12 }
13 var clone = {};
14 Object.keys(newObj).forEach(function (key) {
15 var exists = obj.hasOwnProperty(key);
16 if (!exists) {
17 clone[key] = newObj[key];
18 }
19 else {
20 if (typeof obj[key] === 'object' && !Array.isArray(obj[key])) {
21 clone[key] = mergeProps(obj[key], newObj[key]);
22 }
23 else {
24 clone[key] = newObj[key];
25 }
26 }
27 });
28 // Copy old props that are not present in new object only if this is a simple object
29 Object.keys(obj).forEach(function (key) {
30 var exists = newObj.hasOwnProperty(key);
31 if (!exists) {
32 clone[key] = obj[key];
33 }
34 });
35 // Set prototype of cloned object to match original
36 Object.setPrototypeOf(clone, Object.getPrototypeOf(obj));
37 return clone;
38}
39exports.default = mergeProps;