@cometchat/chat-uikit-react-native
Version:
Ready-to-use Chat UI Components for React Native
58 lines • 1.81 kB
JavaScript
import React from "react";
export function deepMerge(obj1, obj2, ...rest) {
// Helper function to determine if a value is a plain object
function isObject(value) {
if (React.isValidElement(value))
return false;
return value && typeof value === "object" && !Array.isArray(value);
}
// Main deep merge function
function merge(target, source, replace = false) {
const output = replace ? target : { ...target };
for (const key in source) {
if (isObject(source[key])) {
if (isObject(target[key])) {
output[key] = merge(target[key], source[key]);
}
else {
output[key] = merge({}, source[key]);
}
}
else if (source[key] !== undefined) {
output[key] = source[key];
}
}
return output;
}
// Start merging obj1 and obj2, then recursively merge the rest of the objects
let result = merge(obj1, obj2);
for (const obj of rest) {
merge(result, obj, true);
}
return result;
}
export function deepClone(obj, seen = new WeakMap()) {
if (typeof obj !== "object" || obj === null) {
return obj;
}
if (seen.has(obj)) {
return seen.get(obj);
}
let clone;
if (Array.isArray(obj)) {
clone = [];
seen.set(obj, clone);
for (const item of obj) {
clone.push(deepClone(item, seen));
}
}
else {
clone = Object.create(null); // Avoid prototype issues
seen.set(obj, clone);
for (const key of Object.keys(obj)) {
clone[key] = deepClone(obj[key], seen);
}
}
return clone;
}
//# sourceMappingURL=helperFunctions.js.map