JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 9869
  • Score
    100M100P100Q125915F
  • License MIT

should deep clone everything even global objects, functions, circularities, ...

Package Exports

  • clones

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (clones) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

clones

NPM version

should deep clone everything even global objects, functions, circularities, ...

Companion for safer-eval.

Runs on node and in modern browsers:

Versions
node 0.12, 4, 6, 8, 10, 11
Chrome 55, 56, 71
Firefox 45, 51, 64
Edge 14, 16
IE 11
Safari 10
iOS Safari 10

Installation

npm i -S clones

Usage

const clones = require('clones')
const dest = clones(source, [bind])

Parameters

Parameters

source: Object, clone source

bind: Object, bind functions to this context

Returns: Any, deep clone of source

Example:

const clones = require('clones')

var source = {
  obj: {a: {b: 1}},
  arr: [true, 1, {c: 'dee'}],
  fn: function () { return this.number + 12 }
}
// adding circularity
source.obj.a.e = source.obj.a

// do the cloning (with binding a context)
var dest = clones(source, {number: 30})
// => { obj: { a: { b: 1, e: [Circular] }, d: 2017-02-17T21:57:44.576Z },
//      arr: [ true, 1, { c: 'dee' } ],
//      fn: [Function: fn] }

// checks
assert.ok(dest !== source)                      // has different reference
assert.ok(dest.obj !== source.obj)              // has different reference
assert.ok(dest.obj.a !== source.obj.a)          // has different reference
assert.ok(dest.obj.a.e !== source.obj.a.e)      // different references for circularities
assert.equal(dest.obj.d.toISOString(),
  source.obj.d.toISOString())                   // has same content
assert.ok(dest.fn !== source.fn)                // has different function reference
source.fn = source.fn.bind({number: 29})        // bind `this` for `source`
assert.equal(dest.fn(), source.fn() + 1)        // returning the same result

Clone prototypes or classes

const clones = require('clones')
// clone built in `Array`
const C = clones.classes(Array)

let c = new C(1,2,3)
// => [1, 2, 3]
c.reverse()
// => [3, 2, 1]

License

MIT