metal-soy-critic
Version:
A metal-soy code validation utility.
33 lines (32 loc) • 788 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
function noop() { }
function getEnter(handler) {
if (typeof handler === 'function') {
return handler;
}
else if (handler && handler.enter) {
return handler.enter;
}
return noop;
}
function getExit(handler) {
if (typeof handler === 'object' && handler.exit) {
return handler.exit;
}
return noop;
}
function visit(node, visitor) {
const handler = visitor[node.type];
getEnter(handler)(node);
if (node.body) {
if (Array.isArray(node.body)) {
node.body.forEach(node => visit(node, visitor));
}
else {
visit(node.body, visitor);
}
}
getExit(handler)(node);
}
exports.default = visit;