@modern-kit/utils
Version:
60 lines (57 loc) • 1.7 kB
JavaScript
;
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