Package Exports
- @visulima/deep-clone
- @visulima/deep-clone/package.json
Readme
Visulima Deep Clone
Really Fast Deep Clone.
Daniel Bannert's open source work is supported by the community on GitHub Sponsors
Install
npm install @visulima/deep-cloneyarn add @visulima/deep-clonepnpm add @visulima/deep-cloneUsage
Copy or deep clone an input value to an arbitrary depth. The function accepts both objects and primitives.
import deepClone from "@visulima/deep-clone";
const cloned = deepClone({ a: 1, b: { c: 2 } });
console.log(cloned); // => {a: 1, b: {c: 2}}Notes
List of supported values/types:
undefinednullboolean/Booleanstring/Stringnumber/NumberfunctionObjectDateRegExpSetMapErrorURIErrorReferenceErrorSyntaxErrorRangeErrorEvalErrorTypeErrorSystem Error(Node.js)ArrayInt8ArrayUint8ArrayUint8ClampedArrayInit16ArrayUint16ArrayInt32ArrayUint32ArrayFloat32ArrayFloat64ArrayBuffer(Node.js)
List of unsupported values/types:
DOMElement: to copy DOM elements, useelement.cloneNode().SymbolWeakMapWeakSetBlobFileFileListImageDataImageBitmapDataViewPromiseSharedArrayBuffer
The implementation can handle circular references.
If a
Number,String, orBooleanobject is encountered, the value is cloned as a primitive. This behavior is intentional. The implementation is opinionated in wanting to avoid creatingnumbers,strings, andbooleansvia thenewoperator and a constructor.The implementation only checks whether basic
Objects,Arrays, and class instances areextensible,sealed, and/orfrozen.functionsare not cloned; their reference is copied.The implementation supports custom
errortypes which areErrorinstances (e.g., ES2015 subclasses).
Benchmarks
Note:
It is true that jsondiffpatch.clone() from jsondiffpatch is faster than @visulima/deep-clonse in this particular benchmark, but it cannot handle as many situations as @visulima/deep-clonse can.
It is true that fastest-json-copy is faster than @visulima/deep-clonse in this particular benchmark. Also, fastest-json-copy has such huge limitations that it is rarely useful. For example, it treats things like Date and Map instances the same as empty {}. It can't handle circular references.
plain-object-clone is also really limited in capability.
Supported Node.js Versions
Libraries in this ecosystem make the best effort to track Node.js’ release schedule. Here’s a post on why we think this is important.
Contributing
If you would like to help take a look at the list of issues and check our Contributing guild.
Note: please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Credits
License
The visulima deep-clone is open-sourced software licensed under the MIT