traverse
Advanced tools
Comparing version 0.6.2 to 0.6.3
45
index.js
@@ -97,3 +97,3 @@ var traverse = module.exports = function (obj) { | ||
forEach(Object_keys(src), function (key) { | ||
forEach(objectKeys(src), function (key) { | ||
dst[key] = clone(src[key]); | ||
@@ -164,20 +164,27 @@ }); | ||
if (typeof node === 'object' && node !== null) { | ||
state.keys = Object_keys(node); | ||
state.isLeaf = state.keys.length == 0; | ||
for (var i = 0; i < parents.length; i++) { | ||
if (parents[i].node_ === node_) { | ||
state.circular = parents[i]; | ||
break; | ||
function updateState() { | ||
if (typeof state.node === 'object' && state.node !== null) { | ||
if (!state.keys || state.node_ !== state.node) { | ||
state.keys = objectKeys(state.node) | ||
} | ||
state.isLeaf = state.keys.length == 0; | ||
for (var i = 0; i < parents.length; i++) { | ||
if (parents[i].node_ === node_) { | ||
state.circular = parents[i]; | ||
break; | ||
} | ||
} | ||
} | ||
else { | ||
state.isLeaf = true; | ||
state.keys = null; | ||
} | ||
state.notLeaf = !state.isLeaf; | ||
state.notRoot = !state.isRoot; | ||
} | ||
else { | ||
state.isLeaf = true; | ||
} | ||
state.notLeaf = !state.isLeaf; | ||
state.notRoot = !state.isRoot; | ||
updateState(); | ||
@@ -196,2 +203,4 @@ // use return values to update if defined | ||
updateState(); | ||
forEach(state.keys, function (key, i) { | ||
@@ -265,3 +274,3 @@ path.push(key); | ||
forEach(Object_keys(src), function (key) { | ||
forEach(objectKeys(src), function (key) { | ||
dst[key] = src[key]; | ||
@@ -274,3 +283,3 @@ }); | ||
var Object_keys = Object.keys || function keys (obj) { | ||
var objectKeys = Object.keys || function keys (obj) { | ||
var res = []; | ||
@@ -300,3 +309,3 @@ for (var key in obj) res.push(key) | ||
forEach(Object_keys(Traverse.prototype), function (key) { | ||
forEach(objectKeys(Traverse.prototype), function (key) { | ||
traverse[key] = function (obj) { | ||
@@ -303,0 +312,0 @@ var args = [].slice.call(arguments, 1); |
{ | ||
"name" : "traverse", | ||
"version" : "0.6.2", | ||
"version" : "0.6.3", | ||
"description" : "traverse and transform objects by visiting every node on a recursive walk", | ||
@@ -5,0 +5,0 @@ "main" : "index.js", |
@@ -274,1 +274,28 @@ var test = require('tap').test; | ||
}); | ||
test('objectToString', function (t) { | ||
var obj = { a : 1, b : 2, c : [ 3, 4 ] }; | ||
var res = traverse(obj).forEach(function (x) { | ||
if (typeof x === 'object' && !this.isRoot) { | ||
this.update(JSON.stringify(x)); | ||
} | ||
}); | ||
t.same(obj, res); | ||
t.same(obj, { a : 1, b : 2, c : "[3,4]" }); | ||
t.end(); | ||
}); | ||
test('stringToObject', function (t) { | ||
var obj = { a : 1, b : 2, c : "[3,4]" }; | ||
var res = traverse(obj).forEach(function (x) { | ||
if (typeof x === 'string') { | ||
this.update(JSON.parse(x)); | ||
} | ||
else if (typeof x === 'number' && x % 2 === 0) { | ||
this.update(x * 10); | ||
} | ||
}); | ||
t.deepEqual(obj, res); | ||
t.deepEqual(obj, { a : 1, b : 20, c : [ 3, 40 ] }); | ||
t.end(); | ||
}); |
@@ -1,2 +0,2 @@ | ||
var traverse = require('traverse'); | ||
var traverse = require('./'); | ||
var test = require('testling'); | ||
@@ -3,0 +3,0 @@ |
48134
1387