UNPKG

@andranik-arakelyan/js-utilities

Version:
1 lines 1.03 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.deepClone=deepClone;function deepClone(value,refs=new WeakMap){if(value===null||value===undefined){return value}if(!(value instanceof Object)){return value}if(value instanceof Date){return new Date(value.getTime())}if(value instanceof RegExp){return new RegExp(value.source,value.flags)}if(refs.has(value)){return refs.get(value)}if(Array.isArray(value)){const clone=[];refs.set(value,clone);clone.push(...value.map((item=>deepClone(item,refs))));return clone}if(value instanceof Set){const clone=new Set;refs.set(value,clone);value.forEach((item=>clone.add(deepClone(item,refs))));return clone}if(value instanceof Map){const clone=new Map;refs.set(value,clone);value.forEach(((val,key)=>clone.set(deepClone(key,refs),deepClone(val,refs))));return clone}const clone=Object.create(Object.getPrototypeOf(value));refs.set(value,clone);return Object.assign(clone,Object.fromEntries(Object.entries(value).map((([key,val])=>[key,deepClone(val,refs)]))))}