UNPKG

1.91 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3/**
4 * Simple deep merge function. Takes all arguments and returns a deep copy of the objects merged
5 * together in the order provided. If an object creates a circular reference, it will assign the
6 * original reference.
7 */
8function merge(target) {
9 var args = [];
10 for (var _i = 1; _i < arguments.length; _i++) {
11 args[_i - 1] = arguments[_i];
12 }
13 for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {
14 var arg = args_1[_a];
15 _merge(target || {}, arg);
16 }
17 return target;
18}
19exports.merge = merge;
20/**
21 * The _merge helper iterates through all props on source and assigns them to target.
22 * When the value is an object, we will create a deep clone of the object. However if
23 * there is a circular reference, the value will not be deep cloned and will persist
24 * the reference.
25 */
26// eslint-disable-next-line @typescript-eslint/no-explicit-any
27function _merge(target, source, circularReferences) {
28 if (circularReferences === void 0) { circularReferences = []; }
29 circularReferences.push(source);
30 for (var name_1 in source) {
31 if (source.hasOwnProperty(name_1)) {
32 if (name_1 !== '__proto__' && name_1 !== 'constructor' && name_1 !== 'prototype') {
33 var value = source[name_1];
34 if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
35 var isCircularReference = circularReferences.indexOf(value) > -1;
36 target[name_1] = (isCircularReference
37 ? value
38 : _merge(target[name_1] || {}, value, circularReferences));
39 }
40 else {
41 target[name_1] = value;
42 }
43 }
44 }
45 }
46 circularReferences.pop();
47 return target;
48}
49//# sourceMappingURL=merge.js.map
\No newline at end of file