add support for exit traversal functions to replace the node
This commit is contained in:
@@ -34,20 +34,30 @@ var traverse = module.exports = function (parent, callbacks, blacklistTypes) {
|
||||
// type is blacklisted
|
||||
if (_.contains(blacklistTypes, node.type)) return;
|
||||
|
||||
// enter
|
||||
var result = callbacks.enter(node, parent, obj, key);
|
||||
|
||||
// stop iteration
|
||||
if (result === false) return;
|
||||
var result;
|
||||
|
||||
// replace node
|
||||
if (result != null) node = obj[key] = result;
|
||||
var maybeReplace = function (result) {
|
||||
if (result != null) obj[key] = result;
|
||||
};
|
||||
|
||||
// enter
|
||||
if (callbacks.enter) {
|
||||
result = callbacks.enter(node, parent, obj, key);
|
||||
|
||||
// stop iteration
|
||||
if (result === false) return;
|
||||
|
||||
maybeReplace(result);
|
||||
}
|
||||
|
||||
// traverse node
|
||||
traverse(node, callbacks, blacklistTypes);
|
||||
|
||||
// exit
|
||||
if (callbacks.exit) callbacks.exit(node, parent, obj, key);
|
||||
if (callbacks.exit) {
|
||||
maybeReplace(callbacks.exit(node, parent, obj, key));
|
||||
}
|
||||
};
|
||||
|
||||
if (_.isArray(nodes)) {
|
||||
|
||||
Reference in New Issue
Block a user