UNPKG

super-utils-plus

Version:

A superior alternative to Lodash with improved performance, TypeScript support, and developer experience

69 lines (68 loc) 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deepClone = deepClone; const is_1 = require("../utils/is"); /** * Creates a deep clone of value. * Handles arrays, objects, dates, regexps, maps, sets, and primitive types. * Functions are referenced, not cloned. * * @param value - The value to clone * @returns The deep cloned value * * @example * ```ts * const objects = [{ 'a': 1 }, { 'b': 2 }]; * * const deep = deepClone(objects); * console.log(deep[0] === objects[0]); * // => false * ``` */ function deepClone(value) { // Handle null, undefined, and primitive types if (value === null || typeof value !== 'object') { return value; } // Handle Dates if ((0, is_1.isDate)(value)) { return new Date(value.getTime()); } // Handle RegExps if ((0, is_1.isRegExp)(value)) { const flags = value.flags; const result = new RegExp(value.source, flags); result.lastIndex = value.lastIndex; return result; } // Handle Maps if (value instanceof Map) { const result = new Map(); value.forEach((val, key) => { result.set(deepClone(key), deepClone(val)); }); return result; } // Handle Sets if (value instanceof Set) { const result = new Set(); value.forEach((val) => { result.add(deepClone(val)); }); return result; } // Handle Arrays if ((0, is_1.isArray)(value)) { return value.map(item => deepClone(item)); } // Handle plain Objects if ((0, is_1.isObject)(value)) { const result = {}; Object.entries(value).forEach(([key, val]) => { result[key] = deepClone(val); }); return result; } // For other types like Functions, return as is return value; }