UNPKG

@wener/miniquery

Version:

SQL Where like **safe** filter expression for ORM.

51 lines (50 loc) 1.37 kB
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; } }