{"version":3,"file":"cloneDeep.mjs","names":[],"sources":["../../src/object/cloneDeep.ts"],"sourcesContent":["/**\n * Creates a deep copy of value\n * @param value - The value to recursively clone\n * @returns Returns the deep cloned value\n * @example\n * const obj = { a: 1, b: { c: 2 } };\n * const cloned = cloneDeep(obj);\n * cloned.b.c = 10;\n * console.log(obj.b.c); // 2\n * console.log(cloned.b === obj.b); // false (deep copy)\n */\nexport function cloneDeep<T>(value: T, hash: WeakMap<object, unknown> = new WeakMap()): T {\n  // Handle primitives and functions\n  if (value === null || typeof value !== 'object') {\n    return value;\n  }\n\n  // Handle circular references\n  if (hash.has(value)) {\n    return hash.get(value) as T;\n  }\n\n  // Handle Date\n  if (value instanceof Date) {\n    return new Date(value.getTime()) as T;\n  }\n\n  // Handle RegExp\n  if (value instanceof RegExp) {\n    return new RegExp(value.source, value.flags) as T;\n  }\n\n  // Handle Array\n  if (Array.isArray(value)) {\n    const result: unknown[] = [];\n    hash.set(value, result);\n    for (let i = 0; i < value.length; i++) {\n      result[i] = cloneDeep(value[i], hash);\n    }\n    return result as T;\n  }\n\n  // Handle Map\n  if (value instanceof Map) {\n    const result = new Map();\n    hash.set(value, result);\n    value.forEach((val, key) => {\n      result.set(cloneDeep(key, hash), cloneDeep(val, hash));\n    });\n    return result as T;\n  }\n\n  // Handle Set\n  if (value instanceof Set) {\n    const result = new Set();\n    hash.set(value, result);\n    value.forEach((val) => {\n      result.add(cloneDeep(val, hash));\n    });\n    return result as T;\n  }\n\n  // Handle plain objects\n  if (Object.prototype.toString.call(value) === '[object Object]') {\n    const result: Record<string, unknown> = {};\n    hash.set(value, result);\n    for (const key in value) {\n      if (Object.prototype.hasOwnProperty.call(value, key)) {\n        result[key] = cloneDeep((value as Record<string, unknown>)[key], hash);\n      }\n    }\n    return result as T;\n  }\n\n  // For other objects, return as is\n  return value;\n}\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,UAAa,OAAU,uBAAiC,IAAI,QAAQ,GAAM;CAExF,IAAI,UAAU,QAAQ,OAAO,UAAU,UACrC,OAAO;CAIT,IAAI,KAAK,IAAI,KAAK,GAChB,OAAO,KAAK,IAAI,KAAK;CAIvB,IAAI,iBAAiB,MACnB,OAAO,IAAI,KAAK,MAAM,QAAQ,CAAC;CAIjC,IAAI,iBAAiB,QACnB,OAAO,IAAI,OAAO,MAAM,QAAQ,MAAM,KAAK;CAI7C,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxB,MAAM,SAAoB,CAAC;EAC3B,KAAK,IAAI,OAAO,MAAM;EACtB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAChC,OAAO,KAAK,UAAU,MAAM,IAAI,IAAI;EAEtC,OAAO;CACT;CAGA,IAAI,iBAAiB,KAAK;EACxB,MAAM,yBAAS,IAAI,IAAI;EACvB,KAAK,IAAI,OAAO,MAAM;EACtB,MAAM,SAAS,KAAK,QAAQ;GAC1B,OAAO,IAAI,UAAU,KAAK,IAAI,GAAG,UAAU,KAAK,IAAI,CAAC;EACvD,CAAC;EACD,OAAO;CACT;CAGA,IAAI,iBAAiB,KAAK;EACxB,MAAM,yBAAS,IAAI,IAAI;EACvB,KAAK,IAAI,OAAO,MAAM;EACtB,MAAM,SAAS,QAAQ;GACrB,OAAO,IAAI,UAAU,KAAK,IAAI,CAAC;EACjC,CAAC;EACD,OAAO;CACT;CAGA,IAAI,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM,mBAAmB;EAC/D,MAAM,SAAkC,CAAC;EACzC,KAAK,IAAI,OAAO,MAAM;EACtB,KAAK,MAAM,OAAO,OAChB,IAAI,OAAO,UAAU,eAAe,KAAK,OAAO,GAAG,GACjD,OAAO,OAAO,UAAW,MAAkC,MAAM,IAAI;EAGzE,OAAO;CACT;CAGA,OAAO;AACT"}