quick-copy v1.0.2
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.