UNPKG

dkopy

Version:

A library for deep cloning objects

2 lines (1 loc) 1.26 kB
"use strict";const t=new Map([["[object Date]",t=>new Date(t.getTime())],["[object RegExp]",t=>new RegExp(t.source,t.flags)],["[object Set]",(t,e)=>{const r=new Set;for(const n of t)r.add(e(n));return r}],["[object Map]",(t,e)=>{const r=new Map;for(let[n,o]of t)o&&"object"==typeof o&&(o=e(o)),r.set(n,o);return r}]]);exports.dkopy=function e(r,n=new Map){if(function(t){if(null==t)return!0;const e=typeof t;return"object"!==e&&"function"!==e}(r))return r;if(n.has(r))return n.get(r);const o=(c=r,Object.prototype.toString.call(c));var c;const s=t.get(o);if(s){const t=s(r,(t=>e(t,n)));return n.set(r,t),t}if("[object Array]"===o){const t=r,o=new Array(t.length);n.set(r,o);for(let r=0;r<t.length;r++)o[r]=e(t[r],n);return o}if("[object Uint8Array]"===o||"[object Uint16Array]"===o||"[object Uint32Array]"===o||"[object Int8Array]"===o||"[object Int16Array]"===o||"[object Int32Array]"===o||"[object Float32Array]"===o||"[object Float64Array]"===o){const t=r,e=new t.constructor(t.buffer.slice(),t.byteOffset,t.length);return n.set(r,e),e}if("[object ArrayBuffer]"===o){const t=r.slice(0);return n.set(r,t),t}if("[object Object]"===o){const t={};n.set(r,t);const o=Object.keys(r);for(let c=0;c<o.length;c++){const s=o[c];t[s]=e(r[s],n)}return t}return r};