clown
Version:
clown computing with pkgcloud
28 lines (24 loc) • 843 B
JavaScript
var joi = require('joi'),
traverse = require('traverse');
module.exports = function traverser(schema, visitor) {
traverse(joi.compile(schema)).forEach(function(node) {
if (node && node.isJoi) {
var self = this,
ctx = {},
parent = self.parent || {};
ctx.node = self.node;
ctx.path = self.path.filter(function(p) { return p !== '_inner'; });
ctx.parent = parent.parent;
ctx.key = parent.key;
ctx.isRoot = self.isRoot;
ctx.notRoot = self.notRoot;
ctx.isLeaf = !Object.keys(node._inner || {}).length;
ctx.notLeaf = !ctx.isLeaf;
ctx.level = Math.floor(self.level / 2);
ctx.update = self.update.bind(self);
ctx.remove = self.remove.bind(self);
ctx.delete = self.remove.bind(self);
visitor.call(ctx, node.describe());
}
});
};