Socket
Socket
Sign inDemoInstall

node-v8-clone

Package Overview
Dependencies
0
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.3.0 to 0.4.0

bench/shared.js

77

bench/arrays.js

@@ -1,15 +0,8 @@

var Benchmark = require('benchmark');
var assert = require('assert');
try { lodash = require('lodash'); } catch (e) {};
try { _ = require('underscore'); } catch (e) {};
try { owl = require('owl-deepcopy'); } catch(e) { console.warn('owl-deepcopy module is not installed'); };
// array of 5 numeric elements
arr1 = [1, 2, 3, 4, 5];
shared = require('./shared.js');
// array of 1000 numeric elements
arr2 = [];
for (var i = 0; i < 1000; i++) {
arr2.push(i);
}
// node-v8-clone js

@@ -19,44 +12,42 @@ var Cloner = require('..').Cloner;

// slice
slice = function(a) { return a.slice(); };
// array 'for (var i = 0; i < l; i++)' cloner
arr_for = function(arr) { var result = []; for (var i = 0, l = arr.length; i < l; i++) result.push(arr[i]); return result; }
assert.deepEqual(arr1, arr_for(arr1));
arr_for1 = function(a) { var b = []; for (var i = 0, l = a.length; i < l; i++) b.push(a[i]); return b; }
// array 'for (var i = 0; i < l; i++)' cloner
arr_for2 = function(a) { var b = []; for (var i = 0, l = a.length; i < l; i++) b[i] = a[i]; return b; }
// array 'for (var i = 0; i < l; i++)' cloner 2
arr_for2 = function(arr) { var l = arr.length, result = new Array(l); for (var i = 0; i < l; i++) result[i] = arr[i]; return result; }
assert.deepEqual(arr1, arr_for2(arr1));
arr_for3 = function(a) { var l = a.length, b = new Array(l); for (var i = 0; i < l; i++) b[i] = a[i]; return b; }
// array 'for (var i = 0; i < l; i++)' cloner 3
arr_for4 = function(a) { var l = a.length, b = new Array(); for (var i = 0; i < l; i++) b[i] = a[i]; return b; }
// array 'for (i in arr)' cloner
arr_for_in = function(arr) { var result = []; for(var i in arr) result.push(arr[i]); return result; }
assert.deepEqual(arr1, arr_for_in(arr1));
arr_for_in = function(a) { var b = []; for(var i in a) b.push(a[i]); return b; }
// array 'for (i in arr) if (hasOwnProperty)' cloner
arr_for_in_has = function(arr) { var result = []; for(var i in arr) if (arr.hasOwnProperty(i)) result.push(arr[i]); return result; }
assert.deepEqual(arr1, arr_for_in_has(arr1));
arr_for_in_has = function(a) { var b = []; for(var i in a) if (a.hasOwnProperty(i)) b.push(a[i]); return b; }
var suite = new Benchmark.Suite;
suite.on('cycle', function(event) {
console.log(String(event.target));
// hybrid
hybrid = function(a) { return (a.length > 100) ? a.slice() : arr_for3(a); };
['arr1', 'arr2', 'arr3', 'arr4', 'arr5', 'arr6'].forEach(function(obj) {
global[obj] = shared[obj];
shared.benchmark(obj, [
['slice', 'slice(' + obj + ')'],
['[] for i++ push', 'arr_for1(' + obj + ')'],
['[] for i++ b[i] = a[i]', 'arr_for2(' + obj + ')'],
['Array(l) for i++ b[i] = a[i]', 'arr_for3(' + obj + ')'],
//['Array() ++', 'arr_for4(' + obj + ')'], // same as "[] for i++ b[i] = a[i]"
//['hybrid', 'hybrid(' + obj + ')'],
['for in', 'arr_for_in(' + obj + ')'],
['for in hasOwnProperty', 'arr_for_in_has(' + obj + ')'],
['lodash.clone', 'lodash.clone(' + obj + ', false)'],
['_.clone', '_.clone(' + obj + ')'],
['owl.copy', 'owl.copy(' + obj + ')'],
['node-v8-clone', 'cloner.clone(' + obj + ')']
]);
});
suite.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
});
suite.add('arr1 slice() ', 'arr1.slice()');
suite.add('arr1 [] for i < l i++ ', 'arr_for(arr1)');
suite.add('arr1 Array(l) for i < l i++ ', 'arr_for2(arr1)');
suite.add('arr1 for in ', 'arr_for_in(arr1)');
suite.add('arr1 for in hasOwnProperty ', 'arr_for_in_has(arr1)');
suite.add('arr1 lodash.clone ', 'lodash.clone(arr1, false)');
suite.add('arr1 _.clone ', '_.clone(arr1)');
suite.add('arr1 node-v8-clone cloner ', 'cloner.clone(arr1)');
suite.add('arr2 slice() ', 'arr2.slice()');
suite.add('arr2 [] for i < l i++ ', 'arr_for(arr2)');
suite.add('arr2 Array(l) for i < l i++ ', 'arr_for2(arr2)');
suite.add('arr2 for in ', 'arr_for_in(arr2)');
suite.add('arr2 for in hasOwnProperty ', 'arr_for_in_has(arr2)');
suite.add('arr2 lodash.clone ', 'lodash.clone(arr2, false)');
suite.add('arr2 _.clone ', '_.clone(arr2)');
suite.add('arr2 node-v8-clone cloner ', 'cloner.clone(arr2)');
suite.run({ 'async': true });

@@ -1,7 +0,8 @@

var Benchmark = require('benchmark');
var assert = require('assert');
try { _ = require('lodash'); } catch (e) {};
try { lodash = require('lodash'); } catch (e) {};
try { _ = require('underscore'); } catch (e) {};
try { owl = require('owl-deepcopy'); } catch(e) { console.warn('owl-deepcopy module is not installed'); };
// Date
date = new Date;
var shared = require('./shared.js');

@@ -11,20 +12,19 @@ // node-v8-clone

cloner = new Cloner(false);
assert.deepEqual(date, cloner.clone(date));
// date 'new Date(+date)' cloner
date_clone1 = function(date) { return new Date(+date); };
// date 'new Date(date)' cloner
date_clone = function(date) { return new Date(+date); }
assert.deepEqual(date, date_clone(date));
date_clone2 = function(date) { return new Date(date); };
var suite = new Benchmark.Suite;
suite.on('cycle', function(event) {
console.log(String(event.target));
['date'].forEach(function(obj) {
global[obj] = shared[obj];
shared.benchmark(obj, [
['new Date(+date)', 'date_clone1(' + obj + ')'],
['new Date(date)', 'date_clone2(' + obj + ')'],
['_.clone', '_.clone(' + obj + ')'],
['lodash.clone', 'lodash.clone(' + obj + ', false)'],
['owl.copy', 'owl.copy(' + obj + ')'],
['node-v8-clone', 'cloner.clone(' + obj + ')']
]);
});
suite.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
});
suite.add('date new Date(+date) cloner', 'date_clone(date)');
suite.add('date lodash _.clone ', '_.clone(date, false)');
suite.add('date node-v8-clone cloner ', 'cloner.clone(date)');
suite.run({ 'async': true });

@@ -1,22 +0,9 @@

var Benchmark = require('benchmark');
var assert = require('assert');
try { _ = require('lodash'); } catch (e) { console.warn('lodash module is not installed'); };
try { lodash = require('lodash'); } catch (e) { console.warn('lodash module is not installed'); };
try { clone = require('clone'); } catch(e) { console.warn('clone module is not installed'); };
try { cloneextend = require('cloneextend'); } catch(e) { console.warn('cloneextend module is not installed'); };
try { owl = require('owl-deepcopy'); } catch(e) { console.warn('owl-deepcopy module is not installed'); };
// deeparr1: 5 string keys and values
deeparr1 = ['a', ['b', 'c', 'd'], 'e'];
var shared = require('./shared.js');
// deeparr2: 1000 x 1 x 3 x 3 nested elements with string values
deeparr2 = [];
for (var i = 0; i < 1000; i++) {
deeparr2[i] = [
[
['c', 'd', 'e'],
['g', 'h', 'i'],
['k', 'l', 'm']
]
];
}
// node-v8-clone

@@ -28,24 +15,12 @@ var Cloner = require('..').Cloner;

var suite = new Benchmark.Suite;
suite.on('cycle', function(event) {
console.log(String(event.target));
['deeparr1', 'deeparr2', 'deepplainarr1', 'deepplainarr2', 'deepplainarr3', 'deepplainarr4', 'deepplainarr5', 'deepplainarr6'].forEach(function(obj) {
global[obj] = shared[obj];
shared.benchmark(obj, [
['lodash.clone', 'lodash.clone(' + obj + ', true)'],
['clone', 'clone(' + obj + ')'],
['cloneextend', 'cloneextend.clone(' + obj + ')'],
['owl.deepCopy', 'owl.deepCopy(' + obj + ')'],
['node-v8-clone', 'cloner1.clone(' + obj + ')'],
['node-v8-clone opt', 'cloner2.clone(' + obj + ')']
]);
});
suite.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
});
suite.add('deeparr1 lodash _.clone ', '_.clone(deeparr1, true)');
suite.add('deeparr1 clone ', 'clone(deeparr1)');
suite.add('deeparr1 cloneextend.clone ', 'cloneextend.clone(deeparr1)');
suite.add('deeparr1 cloner1 ', 'cloner1.clone(deeparr1)');
suite.add('deeparr1 cloner2 ', 'cloner2.clone(deeparr1)');
suite.add('deeparr1 cloner3 ', 'cloner3.clone(deeparr1)');
suite.add('deeparr2 lodash _.clone ', '_.clone(deeparr2, true)');
suite.add('deeparr2 clone ', 'clone(deeparr2)');
suite.add('deeparr2 cloneextend.clone ', 'cloneextend.clone(deeparr2)');
suite.add('deeparr2 cloner1 ', 'cloner1.clone(deeparr2)');
suite.add('deeparr2 cloner2 ', 'cloner2.clone(deeparr2)');
suite.add('deeparr2 cloner3 ', 'cloner3.clone(deeparr2)');
suite.run({ 'async': true });

@@ -1,37 +0,9 @@

var Benchmark = require('benchmark');
var assert = require('assert');
try { _ = require('lodash'); } catch (e) { console.warn('lodash module is not installed'); };
try { lodash = require('lodash'); } catch (e) { console.warn('lodash module is not installed'); };
try { clone = require('clone'); } catch(e) { console.warn('clone module is not installed'); };
try { cloneextend = require('cloneextend'); } catch(e) { console.warn('cloneextend module is not installed'); };
try { owl = require('owl-deepcopy'); } catch(e) { console.warn('owl-deepcopy module is not installed'); };
// deep1: 5 sting keys and values
deep1 = {a: 'a', b: {c: 'c', d: 'd', e: 'e'}, f: 'f'};
var shared = require('./shared.js');
// deep2: 5 integer keys and values
deep2 = {1: 1, 2: {3: 3, 4: 4, 5: 5}, 6: 6};
// deep3: 1000 x 1 x 3 x 3 objects with string keys and values
deep3 = {};
for (var i = 0; i < 1000; i++) {
deep3['_' + i] = {
a: {
b: {c: 'c', d: 'd', e: 'e'},
f: {g: 'g', h: 'h', i: 'i'},
j: {k: 'k', l: 'l', m: 'm'}
}
};
}
// deep4: 1000 x 1 x 3 x 3 objects with int keys and values
deep4 = {};
for (var i = 0; i < 1000; i++) {
deep4[i] = {
1: {
2: {3: 3, 4: 4, 5: 5},
6: {7: 7, 8: 8, 9: 9},
10: {11: 11, 12: 12, 13: 13}
}
};
}
// cloner

@@ -41,30 +13,11 @@ var Cloner = require('..').Cloner;

var suite = new Benchmark.Suite;
suite.on('cycle', function(event) {
console.log(String(event.target));
['deepobj1', 'deepobj2', 'deepobj3', 'deepobj4', 'mixed1', 'mixed2', 'mixed3', 'mixed4'].forEach(function(obj) {
global[obj] = shared[obj];
shared.benchmark(obj, [
['lodash.clone', 'lodash.clone(' + obj + ', true)'],
['clone', 'clone(' + obj + ')'],
['cloneextend', 'cloneextend.clone(' + obj + ')'],
['owl.deepCopy', 'owl.deepCopy(' + obj + ')'],
['node-v8-clone', 'cloner.clone(' + obj + ')']
]);
});
suite.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
});
suite.add('deep1 lodash _.clone ', '_.clone(deep1, true)');
suite.add('deep1 clone ', 'clone(deep1)');
suite.add('deep1 cloneextend.clone ', 'cloneextend.clone(deep1)');
suite.add('deep1 node-v8-clone cloner ', 'cloner.clone(deep1)');
suite.add('deep2 lodash _.clone ', '_.clone(deep2, true)');
suite.add('deep2 clone ', 'clone(deep2)');
suite.add('deep2 cloneextend.clone ', 'cloneextend.clone(deep2)');
suite.add('deep2 node-v8-clone cloner ', 'cloner.clone(deep2)');
suite.add('deep3 lodash _.clone ', '_.clone(deep3, true)');
suite.add('deep3 clone ', 'clone(deep3)');
suite.add('deep3 cloneextend.clone ', 'cloneextend.clone(deep3)');
suite.add('deep3 node-v8-clone cloner ', 'cloner.clone(deep3)');
suite.add('deep4 lodash _.clone ', '_.clone(deep4, true)');
suite.add('deep4 clone ', 'clone(deep4)');
suite.add('deep4 cloneextend.clone ', 'cloneextend.clone(deep4)');
suite.add('deep4 node-v8-clone cloner ', 'cloner.clone(deep4)');
suite.run({ 'async': true });

@@ -1,100 +0,31 @@

var Benchmark = require('benchmark');
var assert = require('assert');
try { lodash = require('lodash'); } catch (e) {};
try { _ = require('underscore'); } catch (e) {};
try { owl = require('owl-deepcopy'); } catch(e) { console.warn('owl-deepcopy module is not installed'); };
// obj1: 5 sting keys and values
obj1 = {'a': 'a', 'b': 'b', 'c': 'c', 'd': 'd', 'e': 'e'};
var shared = require('./shared.js');
// obj2: 5 integer keys and values
obj2 = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5};
// obj3: 1000 string keys and values
obj3 = {};
for (var i = 0; i < 1000; i++) {
obj3['_' + i] = '_' + i;
}
// obj4: 1000 integer keys and values
obj4 = {};
for (var i = 0; i < 1000; i++) {
obj4[i] = i;
}
arr1 = [1, 2, 3, 4, 5];
arr2 = [];
for (var i = 0; i < 1000; i++) {
arr2.push(i);
}
// regular for(var i in obj) cloner
regular = function(obj) { var result = {}; for(var i in obj) result[i] = obj[i]; return result; };
assert.deepEqual(obj1, regular(obj1));
// regular cloner with own checks
regular_own = function(obj) { var result = {}; for(var i in obj) if (obj.hasOwnProperty(i)) result[i] = obj[i]; return result; };
assert.deepEqual(obj1, regular_own(obj1));
// regular cloner with own checks
regular_keys = function(obj) { var result = {}; var props = Object.keys(obj); for(var i = 0, l = props.length; i < l; i++) result[i] = obj[i]; return result; };
assert.deepEqual(obj1, regular_own(obj1));
// static cloner
function createStatic(obj) {
var parts = [];
for (var j in obj) if (obj.hasOwnProperty(j)) {
parts.push('"' + j + '": obj["' + j + '"]');
}
var code = 'return {' + parts.join(',') + '}';
return new Function('obj', code);
}
static1 = createStatic(obj1);
static2 = createStatic(obj2);
static3 = createStatic(obj3);
static4 = createStatic(obj4);
assert.deepEqual(obj1, static1(obj1));
var Cloner = require('..').Cloner;
cloner = new Cloner(false);
var suite = new Benchmark.Suite;
suite.on('cycle', function(event) {
console.log(String(event.target));
});
suite.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
});
suite.add('obj1 for in ', 'regular(obj1)');
suite.add('obj1 for in hasOwnProperty ', 'regular_own(obj1)');
suite.add('obj1 for Object.keys ', 'regular_keys(obj1)');
suite.add('obj1 static cloner ', 'static1(obj1)');
suite.add('obj1 lodash.clone ', 'lodash.clone(obj1, false)');
suite.add('obj1 _.clone ', '_.clone(obj1)');
suite.add('obj1 node-v8-clone cloner ', 'cloner.clone(obj1)');
suite.add('obj2 for in ', 'regular(obj2)');
suite.add('obj2 for in hasOwnProperty ', 'regular_own(obj2)');
suite.add('obj2 for Object.keys ', 'regular_keys(obj2)');
suite.add('obj2 static cloner ', 'static2(obj2)');
suite.add('obj2 lodash.clone ', 'lodash.clone(obj2, false)');
suite.add('obj2 _.clone ', '_.clone(obj2)');
suite.add('obj2 node-v8-clone cloner ', 'cloner.clone(obj2)');
suite.add('obj3 for in ', 'regular(obj3)');
suite.add('obj3 for in hasOwnProperty ', 'regular_own(obj3)');
suite.add('obj3 for Object.keys ', 'regular_keys(obj3)');
suite.add('obj3 static cloner ', 'static3(obj3)');
suite.add('obj3 lodash.clone ', 'lodash.clone(obj3, false)');
suite.add('obj3 _.clone ', '_.clone(obj3)');
suite.add('obj3 node-v8-clone cloner ', 'cloner.clone(obj3)');
suite.add('obj4 for in ', 'regular(obj4)');
suite.add('obj4 for in hasOwnProperty ', 'regular_own(obj4)');
suite.add('obj4 for Object.keys ', 'regular_keys(obj4)');
suite.add('obj4 static cloner ', 'static4(obj4)');
suite.add('obj4 lodash.clone ', 'lodash.clone(obj4, false)');
suite.add('obj4 _.clone ', '_.clone(obj4)');
suite.add('obj4 node-v8-clone cloner ', 'cloner.clone(obj4)');
suite.run({ 'async': true });
['objs1', 'objs2', 'objs3', 'objs4', 'objs5', 'objn1', 'objn2', 'objn3', 'objn4', 'objn5'].forEach(function(obj) {
global[obj] = shared[obj];
shared.benchmark(obj, [
['for in', 'regular(' + obj + ')'],
['for own', 'regular_own(' + obj + ')'],
['for Obj.keys', 'regular_keys(' + obj + ')'],
['lodash.clone', 'lodash.clone(' + obj + ', false)'],
['_.clone', '_.clone(' + obj + ')'],
['owl.copy', 'owl.copy(' + obj + ')'],
['node-v8-clone', 'cloner.clone(' + obj + ')']
]);
});

@@ -1,42 +0,35 @@

var Benchmark = require('benchmark');
var assert = require('assert');
try { _ = require('lodash'); } catch (e) {};
try { lodash = require('lodash'); } catch (e) {};
try { _ = require('underscore'); } catch (e) {};
try { owl = require('owl-deepcopy'); } catch(e) { console.warn('owl-deepcopy module is not installed'); };
// RegExp
re = new RegExp('a', 'gi');
reFlags = /\w*$/;
var shared = require('./shared.js');
// node-v8-clone js
clone = require('..').clone;
assert.deepEqual(re, clone(re));
// node-v8-clone
v8_clone = require('..').v8_clone;
assert.deepEqual(re, v8_clone(re));
var Cloner = require('..').Cloner;
cloner = new Cloner(false);
// RegExp 'new RegExp(re)' cloner
re_clone1 = function(re) { return new RegExp(re); };
// RegExp 'new RegExp(re.source, /\w*$/.exec(re))' cloner
re_clone = function(re) { return new RegExp(re.source, reFlags.exec(re)); }
assert.deepEqual(re, re_clone(re));
reFlags = /\w*$/;
re_clone2 = function(re) { return new RegExp(re.source, reFlags.exec(re)); };
// RegExp 'new RegExp(source, flags)' cloner
re_clone2 = function(re) {
re_clone3 = function(re) {
var flags = (re.global ? 'g' : '') + (re.ignoreCase ? 'i' : '') + (re.multiline ? 'm' : '');
return new RegExp(re.source, flags);
}
assert.deepEqual(re, re_clone2(re));
};
var suite = new Benchmark.Suite;
suite.on('cycle', function(event) {
console.log(String(event.target));
['re'].forEach(function(obj) {
global[obj] = shared[obj];
shared.benchmark(obj, [
['new RegExp(re)', 're_clone1(re)'],
['new RegExp(re.source, /\\w*$/.exec(re))', 're_clone2(re)'],
['new RegExp(re.source, "g"? + "i"? + "m"?)', 're_clone3(re)'],
['_.clone', '_.clone(re)'],
['lodash.clone', 'lodash.clone(re, false)'],
['node-v8-clone', 'cloner.clone(re, false)']
]);
});
suite.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
});
suite.add('RegExp new RegExp(re.source, /\\w*$/.exec(re)) ', 're_clone(re)');
suite.add('RegExp new RegExp(re.source, "g"? + "i"? + "m"?)', 're_clone2(re)');
suite.add('RegExp lodash _.clone ', '_.clone(re, false)');
suite.add('RegExp node-v8-clone js cloner ', 'clone(re, false)');
suite.add('RegExp node-v8-clone cloner ', 'v8_clone(re)');
suite.run({ 'async': true });

@@ -84,3 +84,6 @@ "use strict";

var f = this._map[value.constructor.name] || this._deepCloneObjectProperties;
var f = this._deepCloneObjectProperties;
if (value.constructor && this._map[value.constructor.name]) {
f = this._map[value.constructor.name];
}
f(this, result);

@@ -87,0 +90,0 @@ return result;

{
"name": "node-v8-clone",
"version": "0.3.0",
"version": "0.4.0",
"description": "The most convenient and accurate cloner for node.js. It's also very fast in some cases (benchmarks inside).",

@@ -8,2 +8,3 @@ "main": "lib/clone.js",

"test": "node_modules/.bin/mocha -R spec test/test.js",
"test-3rdparty": "node_modules/.bin/mocha -R spec test/3rdparty.js --colors 2>/dev/null; exit 0",
"benchmark": "node bench/arrays.js; node bench/class.js; node bench/date.js; node bench/deep.js; node bench/deep_array.js; node bench/number.js; node bench/object.js; node bench/regexp.js",

@@ -26,11 +27,13 @@ "install": "node-gyp rebuild"

"readmeFilename": "README.md",
"dependencies": {
},
"dependencies": {},
"devDependencies": {
"benchmark": "~1.0.0",
"mocha": "~1.7.0",
"benchmark": "*",
"mocha": "*",
"cloneextend": "*",
"clone": "*",
"lodash": "*"
"lodash": "*",
"underscore": "*",
"benchmark.js-plot": "*",
"owl-deepcopy": "*"
}
}

@@ -7,2 +7,3 @@ var assert = require('assert');

var clone = require('clone');
var owl = require('owl-deepcopy');

@@ -50,3 +51,2 @@ describe('lodash.clone(value)', function(){

});
describe('underscore.clone(value)', function(){

@@ -60,1 +60,21 @@ beforeEach(function(){

});
describe('owl.copy(value)', function(){
beforeEach(function(){
this.clone = function(value) {
return owl.copy(value);
};
});
shared.behavesAsShallow();
});
describe('owl.deepcopy(value)', function(){
beforeEach(function(){
this.clone = function(value) {
return owl.deepCopy(value);
};
});
shared.behavesAsShallow();
shared.behavesAsDeep();
shared.behavesAsDeepWCircular();
});
var assert = require('assert');
var util = require('util');

@@ -79,3 +80,3 @@ module.exports.behavesAsShallow = function() {

});
it('should clone objects', function(){
it('should clone {} objects', function(){
var a = {x : 1, y: 2};

@@ -89,2 +90,21 @@ var b = this.clone(a);

});
it('should clone Object.create(null) objects', function(){
var a = Object.create(null);
a.x = 1;
a.y = 2;
var b = this.clone(a);
assert.ok(a !== b);
assert.equal(a.x, 1);
assert.equal(a.y, 2);
assert.equal(b.x, 1);
assert.equal(b.y, 2);
});
it('should clone inherited objects', function(){
var a = Object.create({ q: 1 });
var b = this.clone(a);
assert.ok(a !== b);
assert.equal(a.q, 1);
assert.equal(b.q, 1);
assert.ok(a.__proto__ === b.__proto__);
});
it('should clone arrays', function(){

@@ -190,2 +210,4 @@ var a = [1, 2];

});
it('should clone Buffer objects', false, function(){
});
});

@@ -213,2 +235,21 @@ describe('should clone custom objects', function(){

});
it('should clone inherited instances', function(){
var clazz1 = function(c) { this.c = c };
clazz1.prototype.e = 1;
var clazz2 = function (c) { this.c = c };
util.inherits(clazz2, clazz1);
clazz2.prototype.d = 2;
var a = new clazz2(3);
var b = this.clone(a);
assert.ok(a !== b);
assert.ok(a.hasOwnProperty('c'));
assert.ok(b.hasOwnProperty('c'));
assert.ok(!a.hasOwnProperty('e'));
assert.ok(!b.hasOwnProperty('e'));
assert.ok(!a.hasOwnProperty('d'));
assert.ok(!b.hasOwnProperty('d'));
assert.equal(a.c, b.c);
assert.equal(a.e, b.e);
assert.equal(a.d, b.d);
});
});

@@ -215,0 +256,0 @@ };

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