Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/commenthol/clones
should deep clone everything even global objects, functions, circularities, ...
https://github.com/commenthol/clones
array circular clone deep javascript object
Last synced: about 1 month ago
JSON representation
should deep clone everything even global objects, functions, circularities, ...
- Host: GitHub
- URL: https://github.com/commenthol/clones
- Owner: commenthol
- License: mit
- Created: 2017-02-18T12:46:27.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2019-01-01T20:48:41.000Z (almost 6 years ago)
- Last Synced: 2024-09-30T20:47:34.711Z (3 months ago)
- Topics: array, circular, clone, deep, javascript, object
- Language: JavaScript
- Size: 16.6 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# clones
[![NPM version](https://badge.fury.io/js/clones.svg)](https://www.npmjs.com/package/clones/)
> should deep clone everything even global objects, functions, circularities, ...
Companion for [safer-eval](https://github.com/commenthol/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
```js
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**:
```js
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
```js
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](./LICENSE)