Socket
Socket
Sign inDemoInstall

clones

Package Overview
Dependencies
0
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    clones

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


Version published
Weekly downloads
13K
increased by11.71%
Maintainers
1
Install size
18.7 kB
Created
Weekly downloads
 

Readme

Source

clones

NPM version

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

Companion for safer-eval.

Runs on node and in modern browsers:

Versions
node0.12, 4, 6, 8, 10, 11
Chrome55, 56, 71
Firefox45, 51, 64
Edge14, 16
IE11
Safari10
iOS Safari10

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

Keywords

FAQs

Last updated on 01 Jan 2019

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc