quick-copy
v1.0.2
Published
NPMs fastest ES6 deep-copier. Circular references OK.
Readme
quick-copy 1.0.0
This package provides the quickCopy() function, which is the fastest ES6 deep copier on NPM,
handling all ES6 = ECMA-2015 data-types. The fast-copy package previously held the crown, and
it documents its speed against other packages, so we just document how many times faster
quick-copy is over fast-copy in the table below.
|Object type|How many times faster quick-copy is over fast-copy| |---|---| |Strings|5.0 times faster| |Numbers|2.1 times faster| |Booleans|2.2 times faster| |Dates|1.12 times faster| |RegExps|1.29 times faster| |Sets|1.15 times faster| |ArrayBuffers|1.23 times faster| |Buffers|1.61 times faster| |DataViews/Typed Arrays|NA because only quick-copy is correct (*)| |Errors|1.27 times faster|
(*) quick-copy will copy circular/duplicate ArrayBuffer references amongst typed-arrays and DataViews. Here quick-copy is faster only by a whisker. Also, with Numbers and Booleans, only quick-copy is correct.
All forms of quick-copy, copy WeakSets, WeakMaps, and Promises as is.
To copy property descriptors, non-enumerable properties, getters/setters,
and properties of the data-types use quickCopy.all() rather than quickCopy().
For example, in copying a Boolean with property p, if you want the property p to be
copied use quickCopy.all().
Circular/duplicate references are copied by both quickCopy(), and quickCopy.all().
quickCopy() will copy functions as is. quickCopy.all() will properly copy functions
in addition to getters/setters. Like fast-copy, both quick-copies copy Errors as is. That's because
copying errors properly will slow code down to a crawl since call stacks are traced.
Usage
const {quickCopy} = require('quick-copy')
const x = Object built from plain objects, plain functions,
ES6 data-types and Node's Buffer.
const y = quickCopy(x) // y is a deep copy of x.
const z = quickCopy.all(x) // z is a deep copy of x.
If property descriptors, non-enumerable properties,
getters/setters, and properties of the data-types are a factor,
then use quickCopy.all(). Otherwise you may use quickCopy() Configure your own Deep Copier
The quick-copy package also exports the quickCopyExt(x, params) function.
quickCopyExt(x), without the second parameter, is exactly like quickCopy(x)
except that it doesn't handle circular/duplicate references. So it is even
faster than quickCopy(x).
Otherwise params has too many fields, so the idea is to use params only to
configure your own deep copier. See Supplement.md, in the node-modules/quick-copy folder, for details.
Exports Summary
|Export|Description| |---|---| |quickCopy(x)|Fastest ES6 deep copier on NPM.| |quickCopy.all(x)|Properly copies functions and getters/setters. Copies properties of the data-types. Copies property descriptors. Copies all properties, not just the enumerable ones. In its class also fastest on NPM.| |quickCopyExt(x)|Even faster than quickCopy since it doesn't handle circular/duplicate references.| |quickCopyExt(x, params)|Configure your own deep-copier. See Supplement.md.|
P.S.
In addition to its speed, another reason to consider this package is its total iron-clad correctness: No other ES6 deep-copying package has passed this author's test suite.
