Have ideas to improve npm?Join in the discussion! »

    clones

    1.2.0 • Public • Published

    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

    Install

    npm i clones

    DownloadsWeekly Downloads

    47,845

    Version

    1.2.0

    License

    MIT

    Unpacked Size

    18.3 kB

    Total Files

    5

    Last publish

    Collaborators

    • avatar