/** * Deep copy a JavaScript object. * @param {Object} srcObj - The source object to be deep copied. * @param {Object} targetObj - The target object to merge the copied properties into. * @returns {Object} A deep copy of the object or the merged target object. */ export function deepCopy(srcObj, targetObj = {}) { if (srcObj === null || typeof srcObj !== 'object') { return srcObj; } let copy = targetObj || (Array.isArray(srcObj) ? [] : {}); for (let key in srcObj) { if (Object.prototype.hasOwnProperty.call(srcObj, key)) { copy[key] = deepCopy(srcObj[key], copy[key]); } } return copy; } /** * Check if a value is a valid date. * @param {*} value - The value to check. * @returns {boolean} True if the value is a valid date, false otherwise. */ export function isDate(value) { return value instanceof Date && !isNaN(value.getTime()); }