UNPKG

ember-legacy-class-transform

Version:
42 lines 1.13 kB
export default class Walker { constructor(order) { this.order = order; this.stack = []; } visit(node, callback) { if (!node) { return; } this.stack.push(node); if (this.order === 'post') { this.children(node, callback); callback(node, this); } else { callback(node, this); this.children(node, callback); } this.stack.pop(); } children(node, callback) { let visitor = visitors[node.type]; if (visitor) { visitor(this, node, callback); } } } let visitors = { Program(walker, node, callback) { for (let i = 0; i < node.body.length; i++) { walker.visit(node.body[i], callback); } }, ElementNode(walker, node, callback) { for (let i = 0; i < node.children.length; i++) { walker.visit(node.children[i], callback); } }, BlockStatement(walker, node, callback) { walker.visit(node.program, callback); walker.visit(node.inverse || null, callback); } };