JSPM

  • Created
  • Published
  • Downloads 320
  • Score
    100M100P100Q93847F
  • License MIT

Fastest deep clone implementation.

Package Exports

  • @visulima/deep-clone
  • @visulima/deep-clone/package.json

Readme

Visulima Deep Clone

Really Fast Deep Clone.


typescript-image npm-image license-image


Daniel Bannert's open source work is supported by the community on GitHub Sponsors


Install

npm install @visulima/deep-clone
yarn add @visulima/deep-clone
pnpm add @visulima/deep-clone

Usage

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:

  • List of unsupported values/types:

    • DOMElement: to copy DOM elements, use element.cloneNode().
    • Symbol
    • WeakMap
    • WeakSet
    • Blob
    • File
    • FileList
    • ImageData
    • ImageBitmap
    • DataView
    • Promise
    • SharedArrayBuffer
  • The implementation can handle circular references.

  • If a Number, String, or Boolean object is encountered, the value is cloned as a primitive. This behavior is intentional. The implementation is opinionated in wanting to avoid creating numbers, strings, and booleans via the new operator and a constructor.

  • The implementation only checks whether basic Objects, Arrays, and class instances are extensible, sealed, and/or frozen.

  • functions are not cloned; their reference is copied.

  • The implementation supports custom error types which are Error instances (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