import { cloneDeep } from 'funtool';
// Deep clone an object
const original = { name: "Alice", details: { age: 25 } };
const copy = cloneDeep(original);
console.log(copy.details.age); // 25
console.log(copy !== original); // true
// Deep clone an array with nested objects
const arr = [1, { nested: true }, [3]];
const copy = cloneDeep(arr);
console.log(copy[1].nested); // true
// Deep clone a Map
const map = new Map<string, number>([["a", 1], ["b", 2]]);
const copy = cloneDeep(map);
console.log(copy.get("b")); // 2
// Deep clone a Set
const set = new Set([1, 2, 3]);
const copy = cloneDeep(set);
console.log(copy.has(2)); // true
// Deep clone a Date
const date = new Date("2020-01-01");
const copy = cloneDeep(date);
console.log(copy.getFullYear()); // 2020
// Deep clone a RegExp
const regex = /abc/gi;
const copy = cloneDeep(regex);
console.log(copy.source); // "abc"
console.log(copy.flags); // "gi"
// Handle circular references
const obj: any = {};
obj.self = obj;
const copy = cloneDeep(obj);
console.log(copy.self === copy); // true