clones

WebJar for clones

License

License

MIT
GroupId

GroupId

org.webjars.npm
ArtifactId

ArtifactId

clones
Last Version

Last Version

1.2.0
Release Date

Release Date

Type

Type

jar
Description

Description

clones
WebJar for clones
Project URL

Project URL

http://webjars.org
Source Code Management

Source Code Management

https://github.com/commenthol/clones

Download clones

How to add to project

<!-- https://jarcasting.com/artifacts/org.webjars.npm/clones/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>clones</artifactId>
    <version>1.2.0</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/clones/
implementation 'org.webjars.npm:clones:1.2.0'
// https://jarcasting.com/artifacts/org.webjars.npm/clones/
implementation ("org.webjars.npm:clones:1.2.0")
'org.webjars.npm:clones:jar:1.2.0'
<dependency org="org.webjars.npm" name="clones" rev="1.2.0">
  <artifact name="clones" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='clones', version='1.2.0')
)
libraryDependencies += "org.webjars.npm" % "clones" % "1.2.0"
[org.webjars.npm/clones "1.2.0"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

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

Versions

Version
1.2.0