UNPKG

@modern-kit/utils

Version:
60 lines (57 loc) 1.7 kB
'use strict'; function cloneDeep(value) { const referenceMap = /* @__PURE__ */ new WeakMap(); const copyWthRecursion = (target) => { if (typeof target !== "object" || target === null) { return target; } if (referenceMap.has(target)) { return referenceMap.get(target); } if (Array.isArray(target)) { const newArray = new Array(target.length); referenceMap.set(target, newArray); for (let i = 0; i < target.length; i++) { newArray[i] = copyWthRecursion(target[i]); } return newArray; } if (target instanceof Set) { const newSet = /* @__PURE__ */ new Set(); referenceMap.set(target, newSet); for (const item of target) { newSet.add(copyWthRecursion(item)); } return newSet; } if (target instanceof Map) { const newMap = /* @__PURE__ */ new Map(); referenceMap.set(target, newMap); for (const [key, value2] of target) { newMap.set(copyWthRecursion(key), copyWthRecursion(value2)); } return newMap; } if (target instanceof Date) { return new Date(target.getTime()); } if (target instanceof RegExp) { const result = new RegExp(target.source, target.flags); result.lastIndex = target.lastIndex; return result; } const newObject = {}; referenceMap.set(target, newObject); const keys = Reflect.ownKeys(target); for (let i = 0; i < keys.length; i++) { const key = keys[i]; newObject[key] = copyWthRecursion( target[key] ); } return newObject; }; return copyWthRecursion(value); } exports.cloneDeep = cloneDeep; //# sourceMappingURL=index.cjs.map