Comparing version 0.4.6 to 0.5.0
145
index.js
@@ -51,93 +51,2 @@ module.exports = Traverse; | ||
Traverse.prototype.deepEqual = function (obj) { | ||
if (arguments.length !== 1) { | ||
throw new Error( | ||
'deepEqual requires exactly one object to compare against' | ||
); | ||
} | ||
var equal = true; | ||
var node = obj; | ||
this.forEach(function (y) { | ||
var notEqual = (function () { | ||
equal = false; | ||
//this.stop(); | ||
return undefined; | ||
}).bind(this); | ||
//if (node === undefined || node === null) return notEqual(); | ||
if (!this.isRoot) { | ||
/* | ||
if (!Object.hasOwnProperty.call(node, this.key)) { | ||
return notEqual(); | ||
} | ||
*/ | ||
if (typeof node !== 'object') return notEqual(); | ||
node = node[this.key]; | ||
} | ||
var x = node; | ||
this.post(function () { | ||
node = x; | ||
}); | ||
var toS = function (o) { | ||
return Object.prototype.toString.call(o); | ||
}; | ||
if (this.circular) { | ||
if (Traverse(obj).get(this.circular.path) !== x) notEqual(); | ||
} | ||
else if (typeof x !== typeof y) { | ||
notEqual(); | ||
} | ||
else if (x === null || y === null || x === undefined || y === undefined) { | ||
if (x !== y) notEqual(); | ||
} | ||
else if (x.__proto__ !== y.__proto__) { | ||
notEqual(); | ||
} | ||
else if (x === y) { | ||
// nop | ||
} | ||
else if (typeof x === 'function') { | ||
if (x instanceof RegExp) { | ||
// both regexps on account of the __proto__ check | ||
if (x.toString() != y.toString()) notEqual(); | ||
} | ||
else if (x !== y) notEqual(); | ||
} | ||
else if (typeof x === 'object') { | ||
if (toS(y) === '[object Arguments]' | ||
|| toS(x) === '[object Arguments]') { | ||
if (toS(x) !== toS(y)) { | ||
notEqual(); | ||
} | ||
} | ||
else if (x instanceof Date || y instanceof Date) { | ||
if (!(x instanceof Date) || !(y instanceof Date) | ||
|| x.getTime() !== y.getTime()) { | ||
notEqual(); | ||
} | ||
} | ||
else { | ||
var kx = Object.keys(x); | ||
var ky = Object.keys(y); | ||
if (kx.length !== ky.length) return notEqual(); | ||
for (var i = 0; i < kx.length; i++) { | ||
var k = kx[i]; | ||
if (!Object.hasOwnProperty.call(y, k)) { | ||
notEqual(); | ||
} | ||
} | ||
} | ||
} | ||
}); | ||
return equal; | ||
}; | ||
Traverse.prototype.paths = function () { | ||
@@ -175,3 +84,3 @@ var acc = []; | ||
Object.keys(src).forEach(function (key) { | ||
forEach(Object_keys(src), function (key) { | ||
dst[key] = clone(src[key]); | ||
@@ -222,3 +131,3 @@ }); | ||
remove : function () { | ||
if (Array.isArray(state.parent.node)) { | ||
if (Array_isArray(state.parent.node)) { | ||
state.parent.node.splice(state.key, 1); | ||
@@ -242,3 +151,3 @@ } | ||
if (typeof node === 'object' && node !== null) { | ||
state.keys = Object.keys(node); | ||
state.keys = Object_keys(node); | ||
@@ -273,3 +182,3 @@ state.isLeaf = state.keys.length == 0; | ||
state.keys.forEach(function (key, i) { | ||
forEach(state.keys, function (key, i) { | ||
path.push(key); | ||
@@ -300,10 +209,2 @@ | ||
Object.keys(Traverse.prototype).forEach(function (key) { | ||
Traverse[key] = function (obj) { | ||
var args = [].slice.call(arguments, 1); | ||
var t = Traverse(obj); | ||
return t[key].apply(t, args); | ||
}; | ||
}); | ||
function copy (src) { | ||
@@ -313,3 +214,3 @@ if (typeof src === 'object' && src !== null) { | ||
if (Array.isArray(src)) { | ||
if (Array_isArray(src)) { | ||
dst = []; | ||
@@ -329,7 +230,14 @@ } | ||
} | ||
else { | ||
else if (Object.create && Object.getPrototypeOf) { | ||
dst = Object.create(Object.getPrototypeOf(src)); | ||
} | ||
else if (obj.__proto__ || obj.constructor.prototype) { | ||
var proto = obj.__proto__ || obj.constructor.prototype || {}; | ||
var T = function () {}; | ||
T.prototype = proto; | ||
dst = new T; | ||
if (!dst.__proto__) dst.__proto__ = proto; | ||
} | ||
Object.keys(src).forEach(function (key) { | ||
forEach(Object_keys(src), function (key) { | ||
dst[key] = src[key]; | ||
@@ -341,1 +249,26 @@ }); | ||
} | ||
var Object_keys = Object.keys || function keys (obj) { | ||
var res = []; | ||
for (var key in obj) res.push(key) | ||
return res; | ||
}; | ||
var Array_isArray = Array.isArray || function isArray (xs) { | ||
return Object.prototype.toString.call(xs) === '[object Array]'; | ||
}; | ||
var forEach = function (xs, fn) { | ||
if (xs.forEach) return xs.forEach(fn) | ||
else for (var i = 0; i < xs.length; i++) { | ||
fn(xs[i], i, xs); | ||
} | ||
}; | ||
forEach(Object_keys(Traverse.prototype), function (key) { | ||
Traverse[key] = function (obj) { | ||
var args = [].slice.call(arguments, 1); | ||
var t = Traverse(obj); | ||
return t[key].apply(t, args); | ||
}; | ||
}); |
{ | ||
"name" : "traverse", | ||
"version" : "0.4.6", | ||
"version" : "0.5.0", | ||
"description" : "Traverse and transform objects by visiting every node on a recursive walk", | ||
@@ -5,0 +5,0 @@ "author" : "James Halliday", |
var assert = require('assert'); | ||
var Traverse = require('traverse'); | ||
var deepEqual = require('./lib/deep_equal'); | ||
var util = require('util'); | ||
@@ -111,5 +112,5 @@ | ||
); | ||
assert.ok(Traverse.deepEqual(scrubbed, { a : 1, b : 2 })); | ||
assert.ok(deepEqual(scrubbed, { a : 1, b : 2 })); | ||
assert.equal(obj.c, obj); | ||
}; |
var assert = require('assert'); | ||
var traverse = require('traverse'); | ||
var deepEqual = require('./lib/deep_equal'); | ||
exports.deepDates = function () { | ||
assert.ok( | ||
traverse.deepEqual( | ||
deepEqual( | ||
{ d : new Date, x : [ 1, 2, 3 ] }, | ||
@@ -16,3 +17,3 @@ { d : new Date, x : [ 1, 2, 3 ] } | ||
assert.ok( | ||
!traverse.deepEqual( | ||
!deepEqual( | ||
{ d : d0, x : [ 1, 2, 3 ], }, | ||
@@ -34,3 +35,3 @@ { d : new Date, x : [ 1, 2, 3 ] } | ||
assert.ok( | ||
!traverse.deepEqual(a, b), | ||
!deepEqual(a, b), | ||
'circular ref mount points count towards equality' | ||
@@ -42,3 +43,3 @@ ); | ||
assert.ok( | ||
traverse.deepEqual(a, c), | ||
deepEqual(a, c), | ||
'circular refs are structurally the same here' | ||
@@ -50,3 +51,3 @@ ); | ||
assert.ok( | ||
traverse.deepEqual(b, d), | ||
deepEqual(b, d), | ||
'non-root circular ref structural comparison' | ||
@@ -58,3 +59,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual([ new Boolean(false) ], [ false ]), | ||
!deepEqual([ new Boolean(false) ], [ false ]), | ||
'boolean instances are not real booleans' | ||
@@ -64,3 +65,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual([ new String('x') ], [ 'x' ]), | ||
!deepEqual([ new String('x') ], [ 'x' ]), | ||
'string instances are not real strings' | ||
@@ -70,3 +71,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual([ new Number(4) ], [ 4 ]), | ||
!deepEqual([ new Number(4) ], [ 4 ]), | ||
'number instances are not real numbers' | ||
@@ -76,3 +77,3 @@ ); | ||
assert.ok( | ||
traverse.deepEqual([ new RegExp('x') ], [ /x/ ]), | ||
deepEqual([ new RegExp('x') ], [ /x/ ]), | ||
'regexp instances are real regexps' | ||
@@ -82,3 +83,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual([ new RegExp(/./) ], [ /../ ]), | ||
!deepEqual([ new RegExp(/./) ], [ /../ ]), | ||
'these regexps aren\'t the same' | ||
@@ -88,3 +89,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual( | ||
!deepEqual( | ||
[ function (x) { return x * 2 } ], | ||
@@ -98,3 +99,3 @@ [ function (x) { return x * 2 } ] | ||
assert.ok( | ||
traverse.deepEqual([ f ], [ f ]), | ||
deepEqual([ f ], [ f ]), | ||
'these functions are actually equal' | ||
@@ -106,3 +107,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual([ 1, 2, 3 ], { 0 : 1, 1 : 2, 2 : 3 }), | ||
!deepEqual([ 1, 2, 3 ], { 0 : 1, 1 : 2, 2 : 3 }), | ||
'arrays are not objects' | ||
@@ -114,3 +115,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual([ undefined ], [ null ]), | ||
!deepEqual([ undefined ], [ null ]), | ||
'null is not undefined!' | ||
@@ -120,3 +121,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual([ null ], [ undefined ]), | ||
!deepEqual([ null ], [ undefined ]), | ||
'undefined is not null!' | ||
@@ -126,3 +127,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual( | ||
!deepEqual( | ||
{ a : 1, b : 2, c : [ 3, undefined, 5 ] }, | ||
@@ -135,3 +136,3 @@ { a : 1, b : 2, c : [ 3, null, 5 ] } | ||
assert.ok( | ||
!traverse.deepEqual( | ||
!deepEqual( | ||
{ a : 1, b : 2, c : [ 3, undefined, 5 ] }, | ||
@@ -144,3 +145,3 @@ { a : 1, b : 2, c : [ 3, null, 5 ] } | ||
assert.ok( | ||
!traverse.deepEqual( | ||
!deepEqual( | ||
{ a : 1, b : 2, c : [ 3, undefined, 5 ] }, | ||
@@ -163,3 +164,3 @@ { a : 1, b : 2, c : [ 3, null, 5 ] } | ||
assert.ok( | ||
traverse.deepEqual(xs, ys), | ||
deepEqual(xs, ys), | ||
'arrays with deleted elements are only equal to' | ||
@@ -170,3 +171,3 @@ + ' arrays with similarly deleted elements' | ||
assert.ok( | ||
!traverse.deepEqual(xs, [ 1, 2, undefined, 4 ]), | ||
!deepEqual(xs, [ 1, 2, undefined, 4 ]), | ||
'deleted array elements cannot be undefined' | ||
@@ -176,3 +177,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual(xs, [ 1, 2, null, 4 ]), | ||
!deepEqual(xs, [ 1, 2, null, 4 ]), | ||
'deleted array elements cannot be null' | ||
@@ -187,3 +188,3 @@ ); | ||
assert.ok( | ||
traverse.deepEqual(obj, { a : 1, b : 2 }), | ||
deepEqual(obj, { a : 1, b : 2 }), | ||
'deleted object elements should not show up' | ||
@@ -193,3 +194,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual(obj, { a : 1, b : 2, c : undefined }), | ||
!deepEqual(obj, { a : 1, b : 2, c : undefined }), | ||
'deleted object elements are not undefined' | ||
@@ -199,3 +200,3 @@ ); | ||
assert.ok( | ||
!traverse.deepEqual(obj, { a : 1, b : 2, c : null }), | ||
!deepEqual(obj, { a : 1, b : 2, c : null }), | ||
'deleted object elements are not null' | ||
@@ -206,3 +207,3 @@ ); | ||
exports.emptyKeyEqual = function () { | ||
assert.ok(!traverse.deepEqual( | ||
assert.ok(!deepEqual( | ||
{ a : 1 }, { a : 1, '' : 55 } | ||
@@ -214,3 +215,3 @@ )); | ||
assert.ok( | ||
!traverse.deepEqual( | ||
!deepEqual( | ||
[ 4, 5, 6 ], | ||
@@ -223,3 +224,3 @@ (function () { return arguments })(4, 5, 6) | ||
assert.ok( | ||
traverse.deepEqual( | ||
deepEqual( | ||
(function () { return arguments })(4, 5, 6), | ||
@@ -233,9 +234,9 @@ (function () { return arguments })(4, 5, 6) | ||
exports.deepUn = function () { | ||
assert.ok(!traverse.deepEqual({ a : 1, b : 2 }, undefined)); | ||
assert.ok(!traverse.deepEqual({ a : 1, b : 2 }, {})); | ||
assert.ok(!traverse.deepEqual(undefined, { a : 1, b : 2 })); | ||
assert.ok(!traverse.deepEqual({}, { a : 1, b : 2 })); | ||
assert.ok(traverse.deepEqual(undefined, undefined)); | ||
assert.ok(traverse.deepEqual(null, null)); | ||
assert.ok(!traverse.deepEqual(undefined, null)); | ||
assert.ok(!deepEqual({ a : 1, b : 2 }, undefined)); | ||
assert.ok(!deepEqual({ a : 1, b : 2 }, {})); | ||
assert.ok(!deepEqual(undefined, { a : 1, b : 2 })); | ||
assert.ok(!deepEqual({}, { a : 1, b : 2 })); | ||
assert.ok(deepEqual(undefined, undefined)); | ||
assert.ok(deepEqual(null, null)); | ||
assert.ok(!deepEqual(undefined, null)); | ||
}; | ||
@@ -245,3 +246,3 @@ | ||
var xs = [ 1, 2, [ 3, 4, [ 5, 6 ] ] ]; | ||
assert.ok(!traverse.deepEqual(xs, [])); | ||
assert.ok(!deepEqual(xs, [])); | ||
}; |
var assert = require('assert'); | ||
var Traverse = require('traverse'); | ||
var deepEqual = require('./lib/deep_equal'); | ||
@@ -115,11 +116,11 @@ exports.mutate = function () { | ||
assert.ok(!Traverse.deepEqual( | ||
assert.ok(!deepEqual( | ||
obj, { a : 1, c : [ 3, undefined ] } | ||
)); | ||
assert.ok(Traverse.deepEqual( | ||
assert.ok(deepEqual( | ||
obj, { a : 1, c : [ 3 ] } | ||
)); | ||
assert.ok(!Traverse.deepEqual( | ||
assert.ok(!deepEqual( | ||
obj, { a : 1, c : [ 3, null ] } | ||
@@ -135,15 +136,15 @@ )); | ||
assert.ok(!Traverse.deepEqual( | ||
assert.ok(!deepEqual( | ||
obj, { a : 1, c : [ 3, undefined, 5 ] } | ||
)); | ||
assert.ok(Traverse.deepEqual( | ||
assert.ok(deepEqual( | ||
obj, { a : 1, c : [ 3 ,, 5 ] } | ||
)); | ||
assert.ok(!Traverse.deepEqual( | ||
assert.ok(!deepEqual( | ||
obj, { a : 1, c : [ 3, null, 5 ] } | ||
)); | ||
assert.ok(!Traverse.deepEqual( | ||
assert.ok(!deepEqual( | ||
obj, { a : 1, c : [ 3, 5 ] } | ||
@@ -159,3 +160,3 @@ )); | ||
assert.ok(Traverse.deepEqual( | ||
assert.ok(deepEqual( | ||
obj, | ||
@@ -168,11 +169,11 @@ { a : 1, b : 2, c : [ 3, 4 ] } | ||
assert.ok(Traverse.deepEqual( | ||
assert.ok(deepEqual( | ||
res, { a : 1, c : xs } | ||
)); | ||
assert.ok(Traverse.deepEqual( | ||
assert.ok(deepEqual( | ||
res, { a : 1, c : [ 3, ] } | ||
)); | ||
assert.ok(Traverse.deepEqual( | ||
assert.ok(deepEqual( | ||
res, { a : 1, c : [ 3 ] } | ||
@@ -188,3 +189,3 @@ )); | ||
assert.ok(Traverse.deepEqual( | ||
assert.ok(deepEqual( | ||
obj, | ||
@@ -197,13 +198,13 @@ { a : 1, b : 2, c : [ 3, 4, 5 ] } | ||
assert.ok(Traverse.deepEqual( | ||
assert.ok(deepEqual( | ||
res, { a : 1, c : xs } | ||
)); | ||
assert.ok(!Traverse.deepEqual( | ||
assert.ok(!deepEqual( | ||
res, { a : 1, c : [ 3, 5 ] } | ||
)); | ||
assert.ok(Traverse.deepEqual( | ||
assert.ok(deepEqual( | ||
res, { a : 1, c : [ 3 ,, 5 ] } | ||
)); | ||
}; |
var assert = require('assert'); | ||
var traverse = require('traverse'); | ||
var deepEqual = require('./lib/deep_equal'); | ||
@@ -8,13 +9,13 @@ exports.super_deep = function () { | ||
var a1 = make(); | ||
assert.ok(traverse.deepEqual(a0, a1)); | ||
assert.ok(deepEqual(a0, a1)); | ||
a0.c.d.moo = true; | ||
assert.ok(!traverse.deepEqual(a0, a1)); | ||
assert.ok(!deepEqual(a0, a1)); | ||
a1.c.d.moo = true; | ||
assert.ok(traverse.deepEqual(a0, a1)); | ||
assert.ok(deepEqual(a0, a1)); | ||
// TODO: this one | ||
//a0.c.a = a1; | ||
//assert.ok(!traverse.deepEqual(a0, a1)); | ||
//assert.ok(!deepEqual(a0, a1)); | ||
}; | ||
@@ -21,0 +22,0 @@ |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
27
1190
42663
238