walker.js 7.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. class Walker {
  7. constructor(order) {
  8. this.order = order;
  9. this.stack = [];
  10. }
  11. visit(node, callback) {
  12. if (!node) {
  13. return;
  14. }
  15. this.stack.push(node);
  16. if (this.order === 'post') {
  17. this.children(node, callback);
  18. callback(node, this);
  19. } else {
  20. callback(node, this);
  21. this.children(node, callback);
  22. }
  23. this.stack.pop();
  24. }
  25. children(node, callback) {
  26. switch (node.type) {
  27. case 'Block':
  28. case 'Template':
  29. return visitors.Program(this, node, callback);
  30. case 'ElementNode':
  31. return visitors.ElementNode(this, node, callback);
  32. case 'BlockStatement':
  33. return visitors.BlockStatement(this, node, callback);
  34. default:
  35. return;
  36. }
  37. }
  38. }
  39. exports.default = Walker;
  40. const visitors = {
  41. Program(walker, node, callback) {
  42. for (let i = 0; i < node.body.length; i++) {
  43. walker.visit(node.body[i], callback);
  44. }
  45. },
  46. Template(walker, node, callback) {
  47. for (let i = 0; i < node.body.length; i++) {
  48. walker.visit(node.body[i], callback);
  49. }
  50. },
  51. Block(walker, node, callback) {
  52. for (let i = 0; i < node.body.length; i++) {
  53. walker.visit(node.body[i], callback);
  54. }
  55. },
  56. ElementNode(walker, node, callback) {
  57. for (let i = 0; i < node.children.length; i++) {
  58. walker.visit(node.children[i], callback);
  59. }
  60. },
  61. BlockStatement(walker, node, callback) {
  62. walker.visit(node.program, callback);
  63. walker.visit(node.inverse || null, callback);
  64. }
  65. };
  66. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdHJhdmVyc2FsL3dhbGtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBTWMsTUFBQSxNQUFBLENBQWE7QUFFekIsRUFBQSxXQUFBLENBQUEsS0FBQSxFQUFrQztBQUFmLFNBQUEsS0FBQSxHQUFBLEtBQUE7QUFEWixTQUFBLEtBQUEsR0FBQSxFQUFBO0FBQytCOztBQUV0QyxFQUFBLEtBQUssQ0FBQSxJQUFBLEVBQUEsUUFBQSxFQUFpRTtBQUNwRSxRQUFJLENBQUosSUFBQSxFQUFXO0FBQ1Q7QUFDRDs7QUFFRCxTQUFBLEtBQUEsQ0FBQSxJQUFBLENBQUEsSUFBQTs7QUFFQSxRQUFJLEtBQUEsS0FBQSxLQUFKLE1BQUEsRUFBMkI7QUFDekIsV0FBQSxRQUFBLENBQUEsSUFBQSxFQUFBLFFBQUE7QUFDQSxNQUFBLFFBQVEsQ0FBQSxJQUFBLEVBQVIsSUFBUSxDQUFSO0FBRkYsS0FBQSxNQUdPO0FBQ0wsTUFBQSxRQUFRLENBQUEsSUFBQSxFQUFSLElBQVEsQ0FBUjtBQUNBLFdBQUEsUUFBQSxDQUFBLElBQUEsRUFBQSxRQUFBO0FBQ0Q7O0FBRUQsU0FBQSxLQUFBLENBQUEsR0FBQTtBQUNEOztBQUVELEVBQUEsUUFBUSxDQUFBLElBQUEsRUFBQSxRQUFBLEVBRWdDO0FBRXRDLFlBQVEsSUFBSSxDQUFaLElBQUE7QUFDRSxXQUFBLE9BQUE7QUFDQSxXQUFBLFVBQUE7QUFDRSxlQUFPLFFBQVEsQ0FBUixPQUFBLENBQUEsSUFBQSxFQUFBLElBQUEsRUFBUCxRQUFPLENBQVA7O0FBQ0YsV0FBQSxhQUFBO0FBQ0UsZUFBTyxRQUFRLENBQVIsV0FBQSxDQUFBLElBQUEsRUFBQSxJQUFBLEVBQVAsUUFBTyxDQUFQOztBQUNGLFdBQUEsZ0JBQUE7QUFDRSxlQUFPLFFBQVEsQ0FBUixjQUFBLENBQUEsSUFBQSxFQUFBLElBQUEsRUFBUCxRQUFPLENBQVA7O0FBQ0Y7QUFDRTtBQVRKO0FBV0Q7O0FBckN3Qjs7O0FBd0MzQixNQUFNLFFBQVEsR0FBRztBQUNmLEVBQUEsT0FBTyxDQUFBLE1BQUEsRUFBQSxJQUFBLEVBQUEsUUFBQSxFQUF3RTtBQUM3RSxTQUFLLElBQUksQ0FBQyxHQUFWLENBQUEsRUFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBSixJQUFBLENBQXBCLE1BQUEsRUFBc0MsQ0FBdEMsRUFBQSxFQUEyQztBQUN6QyxNQUFBLE1BQU0sQ0FBTixLQUFBLENBQWEsSUFBSSxDQUFKLElBQUEsQ0FBYixDQUFhLENBQWIsRUFBQSxRQUFBO0FBQ0Q7QUFKWSxHQUFBOztBQU9mLEVBQUEsUUFBUSxDQUFBLE1BQUEsRUFBQSxJQUFBLEVBQUEsUUFBQSxFQUF5RTtBQUMvRSxTQUFLLElBQUksQ0FBQyxHQUFWLENBQUEsRUFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBSixJQUFBLENBQXBCLE1BQUEsRUFBc0MsQ0FBdEMsRUFBQSxFQUEyQztBQUN6QyxNQUFBLE1BQU0sQ0FBTixLQUFBLENBQWEsSUFBSSxDQUFKLElBQUEsQ0FBYixDQUFhLENBQWIsRUFBQSxRQUFBO0FBQ0Q7QUFWWSxHQUFBOztBQWFmLEVBQUEsS0FBSyxDQUFBLE1BQUEsRUFBQSxJQUFBLEVBQUEsUUFBQSxFQUFzRTtBQUN6RSxTQUFLLElBQUksQ0FBQyxHQUFWLENBQUEsRUFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBSixJQUFBLENBQXBCLE1BQUEsRUFBc0MsQ0FBdEMsRUFBQSxFQUEyQztBQUN6QyxNQUFBLE1BQU0sQ0FBTixLQUFBLENBQWEsSUFBSSxDQUFKLElBQUEsQ0FBYixDQUFhLENBQWIsRUFBQSxRQUFBO0FBQ0Q7QUFoQlksR0FBQTs7QUFtQmYsRUFBQSxXQUFXLENBQUEsTUFBQSxFQUFBLElBQUEsRUFBQSxRQUFBLEVBQTRFO0FBQ3JGLFNBQUssSUFBSSxDQUFDLEdBQVYsQ0FBQSxFQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFKLFFBQUEsQ0FBcEIsTUFBQSxFQUEwQyxDQUExQyxFQUFBLEVBQStDO0FBQzdDLE1BQUEsTUFBTSxDQUFOLEtBQUEsQ0FBYSxJQUFJLENBQUosUUFBQSxDQUFiLENBQWEsQ0FBYixFQUFBLFFBQUE7QUFDRDtBQXRCWSxHQUFBOztBQXlCZixFQUFBLGNBQWMsQ0FBQSxNQUFBLEVBQUEsSUFBQSxFQUFBLFFBQUEsRUFBZ0Y7QUFDNUYsSUFBQSxNQUFNLENBQU4sS0FBQSxDQUFhLElBQUksQ0FBakIsT0FBQSxFQUFBLFFBQUE7QUFDQSxJQUFBLE1BQU0sQ0FBTixLQUFBLENBQWEsSUFBSSxDQUFKLE9BQUEsSUFBYixJQUFBLEVBQUEsUUFBQTtBQUNEOztBQTVCYyxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbiB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgKiBhcyBBU1R2MSBmcm9tICcuLi92MS9hcGknO1xuXG5leHBvcnQgdHlwZSBOb2RlQ2FsbGJhY2s8TiBleHRlbmRzIEFTVHYxLk5vZGU+ID0gKG5vZGU6IE4sIHdhbGtlcjogV2Fsa2VyKSA9PiB2b2lkO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXYWxrZXIge1xuICBwdWJsaWMgc3RhY2s6IHVua25vd25bXSA9IFtdO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3JkZXI/OiB1bmtub3duKSB7fVxuXG4gIHZpc2l0PE4gZXh0ZW5kcyBBU1R2MS5Ob2RlPihub2RlOiBPcHRpb248Tj4sIGNhbGxiYWNrOiBOb2RlQ2FsbGJhY2s8Tj4pOiB2b2lkIHtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YWNrLnB1c2gobm9kZSk7XG5cbiAgICBpZiAodGhpcy5vcmRlciA9PT0gJ3Bvc3QnKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuKG5vZGUsIGNhbGxiYWNrKTtcbiAgICAgIGNhbGxiYWNrKG5vZGUsIHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhub2RlLCB0aGlzKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4obm9kZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gIH1cblxuICBjaGlsZHJlbjxOIGV4dGVuZHMgQVNUdjEuTm9kZT4oXG4gICAgbm9kZTogTiAmIEFTVHYxLk5vZGUsXG4gICAgY2FsbGJhY2s6IE5vZGVDYWxsYmFjazxOICYgQVNUdjEuTm9kZT5cbiAgKTogdm9pZCB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ0Jsb2NrJzpcbiAgICAgIGNhc2UgJ1RlbXBsYXRlJzpcbiAgICAgICAgcmV0dXJuIHZpc2l0b3JzLlByb2dyYW0odGhpcywgKG5vZGUgYXMgdW5rbm93bikgYXMgQVNUdjEuUHJvZ3JhbSwgY2FsbGJhY2spO1xuICAgICAgY2FzZSAnRWxlbWVudE5vZGUnOlxuICAgICAgICByZXR1cm4gdmlzaXRvcnMuRWxlbWVudE5vZGUodGhpcywgbm9kZSwgY2FsbGJhY2spO1xuICAgICAgY2FzZSAnQmxvY2tTdGF0ZW1lbnQnOlxuICAgICAgICByZXR1cm4gdmlzaXRvcnMuQmxvY2tTdGF0ZW1lbnQodGhpcywgbm9kZSwgY2FsbGJhY2spO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCB2aXNpdG9ycyA9IHtcbiAgUHJvZ3JhbSh3YWxrZXI6IFdhbGtlciwgbm9kZTogQVNUdjEuUHJvZ3JhbSwgY2FsbGJhY2s6IE5vZGVDYWxsYmFjazxBU1R2MS5Ob2RlPikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5ib2R5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB3YWxrZXIudmlzaXQobm9kZS5ib2R5W2ldLCBjYWxsYmFjayk7XG4gICAgfVxuICB9LFxuXG4gIFRlbXBsYXRlKHdhbGtlcjogV2Fsa2VyLCBub2RlOiBBU1R2MS5UZW1wbGF0ZSwgY2FsbGJhY2s6IE5vZGVDYWxsYmFjazxBU1R2MS5Ob2RlPikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5ib2R5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB3YWxrZXIudmlzaXQobm9kZS5ib2R5W2ldLCBjYWxsYmFjayk7XG4gICAgfVxuICB9LFxuXG4gIEJsb2NrKHdhbGtlcjogV2Fsa2VyLCBub2RlOiBBU1R2MS5CbG9jaywgY2FsbGJhY2s6IE5vZGVDYWxsYmFjazxBU1R2MS5Ob2RlPikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5ib2R5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB3YWxrZXIudmlzaXQobm9kZS5ib2R5W2ldLCBjYWxsYmFjayk7XG4gICAgfVxuICB9LFxuXG4gIEVsZW1lbnROb2RlKHdhbGtlcjogV2Fsa2VyLCBub2RlOiBBU1R2MS5FbGVtZW50Tm9kZSwgY2FsbGJhY2s6IE5vZGVDYWxsYmFjazxBU1R2MS5Ob2RlPikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgd2Fsa2VyLnZpc2l0KG5vZGUuY2hpbGRyZW5baV0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sXG5cbiAgQmxvY2tTdGF0ZW1lbnQod2Fsa2VyOiBXYWxrZXIsIG5vZGU6IEFTVHYxLkJsb2NrU3RhdGVtZW50LCBjYWxsYmFjazogTm9kZUNhbGxiYWNrPEFTVHYxLkJsb2NrPikge1xuICAgIHdhbGtlci52aXNpdChub2RlLnByb2dyYW0sIGNhbGxiYWNrKTtcbiAgICB3YWxrZXIudmlzaXQobm9kZS5pbnZlcnNlIHx8IG51bGwsIGNhbGxiYWNrKTtcbiAgfSxcbn0gYXMgY29uc3Q7XG4iXSwic291cmNlUm9vdCI6IiJ9