@wener/miniquery
Version:
SQL Where like **safe** filter expression for ORM.
51 lines (50 loc) • 1.37 kB
JavaScript
export function visit(expr, fn) {
if (fn(expr)) {
return;
}
switch(expr.type){
case 'logic':
expr.exprs.forEach(function(e) {
return visit(e, fn);
});
break;
case 'binary':
visit(expr.left, fn);
visit(expr.right, fn);
break;
case 'compare':
{
visit(expr.left, fn);
var arr = Array.isArray(expr.right) ? expr.right : [
expr.right
];
arr.forEach(function(e) {
return visit(e, fn);
});
break;
}
case 'case':
{
expr.condition && visit(expr.condition, fn);
expr.cases.forEach(function(c) {
visit(c.when, fn);
visit(c.then, fn);
});
expr.else && visit(expr.else, fn);
break;
}
case 'unary':
visit(expr.expr, fn);
break;
case 'func':
expr.args.forEach(function(e) {
return visit(e, fn);
});
break;
case 'list':
expr.items.forEach(function(e) {
return visit(e, fn);
});
break;
}
}