ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
42 lines • 1.13 kB
JavaScript
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);
}
};