UNPKG

@cometchat/chat-uikit-react-native

Version:

Ready-to-use Chat UI Components for React Native

58 lines 1.81 kB
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