UNPKG

@cornerstonejs/core

Version:
53 lines (52 loc) 1.5 kB
export function deepClone(value) { if (typeof structuredClone === 'function') { try { return structuredClone(value); } catch { } } return cloneValue(value, new WeakMap()); } function cloneValue(value, seen) { if (value === null || typeof value !== 'object') { return value; } const existingClone = seen.get(value); if (existingClone) { return existingClone; } if (value instanceof Date) { return new Date(value.getTime()); } if (value instanceof Map) { const clonedMap = new Map(); seen.set(value, clonedMap); value.forEach((mapValue, mapKey) => { clonedMap.set(cloneValue(mapKey, seen), cloneValue(mapValue, seen)); }); return clonedMap; } if (value instanceof Set) { const clonedSet = new Set(); seen.set(value, clonedSet); value.forEach((setValue) => { clonedSet.add(cloneValue(setValue, seen)); }); return clonedSet; } if (Array.isArray(value)) { const clonedArray = []; seen.set(value, clonedArray); value.forEach((item, index) => { clonedArray[index] = cloneValue(item, seen); }); return clonedArray; } const clonedObject = {}; seen.set(value, clonedObject); Reflect.ownKeys(value).forEach((key) => { clonedObject[key] = cloneValue(value[key], seen); }); return clonedObject; }