path.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _scope = _interopRequireDefault(require("./scope"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. class WalkerPath {
  9. constructor(node, parent = null, parentKey = null) {
  10. this.node = node;
  11. this.parent = parent;
  12. this.parentKey = parentKey;
  13. this.scope = parent ? parent.scope.child(node) : new _scope.default(node); // Consume in scope values
  14. if (node.type === 'PathExpression') {
  15. this.scope.useLocal(node);
  16. }
  17. if (node.type === 'ElementNode') {
  18. this.scope.useLocal(node);
  19. node.children.forEach(node => this.scope.useLocal(node));
  20. }
  21. }
  22. get parentNode() {
  23. return this.parent ? this.parent.node : null;
  24. }
  25. parents() {
  26. return {
  27. [Symbol.iterator]: () => {
  28. return new PathParentsIterator(this);
  29. }
  30. };
  31. }
  32. }
  33. exports.default = WalkerPath;
  34. class PathParentsIterator {
  35. constructor(path) {
  36. this.path = path;
  37. }
  38. next() {
  39. if (this.path.parent) {
  40. this.path = this.path.parent;
  41. return {
  42. done: false,
  43. value: this.path
  44. };
  45. } else {
  46. return {
  47. done: true,
  48. value: null
  49. };
  50. }
  51. }
  52. }
  53. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdHJhdmVyc2FsL3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7O0FBRWMsTUFBQSxVQUFBLENBQWlCO0FBTTdCLEVBQUEsV0FBQSxDQUFBLElBQUEsRUFFRSxNQUFBLEdBRkYsSUFBQSxFQUdFLFNBQUEsR0FIRixJQUFBLEVBR2lDO0FBRS9CLFNBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxTQUFBLE1BQUEsR0FBQSxNQUFBO0FBQ0EsU0FBQSxTQUFBLEdBQUEsU0FBQTtBQUNBLFNBQUEsS0FBQSxHQUFhLE1BQU0sR0FBRyxNQUFNLENBQU4sS0FBQSxDQUFBLEtBQUEsQ0FBSCxJQUFHLENBQUgsR0FBOEIsSUFBQSxjQUFBLENBTGxCLElBS2tCLENBQWpELENBTCtCLENBTy9COztBQUNBLFFBQUksSUFBSSxDQUFKLElBQUEsS0FBSixnQkFBQSxFQUFvQztBQUNsQyxXQUFBLEtBQUEsQ0FBQSxRQUFBLENBQUEsSUFBQTtBQUNEOztBQUVELFFBQUksSUFBSSxDQUFKLElBQUEsS0FBSixhQUFBLEVBQWlDO0FBQy9CLFdBQUEsS0FBQSxDQUFBLFFBQUEsQ0FBQSxJQUFBO0FBRUMsTUFBQSxJQUEwQixDQUExQixRQUFBLENBQUEsT0FBQSxDQUE2QyxJQUFELElBQzNDLEtBQUEsS0FBQSxDQUFBLFFBQUEsQ0FERCxJQUNDLENBREQ7QUFHRjtBQUNGOztBQUVELE1BQUEsVUFBQSxHQUFjO0FBQ1osV0FBTyxLQUFBLE1BQUEsR0FBYyxLQUFBLE1BQUEsQ0FBZCxJQUFBLEdBQVAsSUFBQTtBQUNEOztBQUVELEVBQUEsT0FBTyxHQUFBO0FBQ0wsV0FBTztBQUNMLE9BQUMsTUFBTSxDQUFQLFFBQUEsR0FBbUIsTUFBSztBQUN0QixlQUFPLElBQUEsbUJBQUEsQ0FBUCxJQUFPLENBQVA7QUFDRDtBQUhJLEtBQVA7QUFLRDs7QUF4QzRCOzs7O0FBMkMvQixNQUFBLG1CQUFBLENBQXlCO0FBR3ZCLEVBQUEsV0FBQSxDQUFBLElBQUEsRUFBd0M7QUFDdEMsU0FBQSxJQUFBLEdBQUEsSUFBQTtBQUNEOztBQUVELEVBQUEsSUFBSSxHQUFBO0FBQ0YsUUFBSSxLQUFBLElBQUEsQ0FBSixNQUFBLEVBQXNCO0FBQ3BCLFdBQUEsSUFBQSxHQUFZLEtBQUEsSUFBQSxDQUFaLE1BQUE7QUFDQSxhQUFPO0FBQUUsUUFBQSxJQUFJLEVBQU4sS0FBQTtBQUFlLFFBQUEsS0FBSyxFQUFFLEtBQUs7QUFBM0IsT0FBUDtBQUZGLEtBQUEsTUFHTztBQUNMLGFBQU87QUFBRSxRQUFBLElBQUksRUFBTixJQUFBO0FBQWMsUUFBQSxLQUFLLEVBQUU7QUFBckIsT0FBUDtBQUNEO0FBQ0Y7O0FBZHNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQVNUdjEgZnJvbSAnLi4vdjEvYXBpJztcbmltcG9ydCBSb290VHJhbnNmb3JtU2NvcGUsIHsgVHJhbnNmb3JtU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2Fsa2VyUGF0aDxOIGV4dGVuZHMgQVNUdjEuTm9kZT4ge1xuICBub2RlOiBOO1xuICBwYXJlbnQ6IFdhbGtlclBhdGg8QVNUdjEuTm9kZT4gfCBudWxsO1xuICBwYXJlbnRLZXk6IHN0cmluZyB8IG51bGw7XG4gIHNjb3BlOiBUcmFuc2Zvcm1TY29wZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBub2RlOiBOLFxuICAgIHBhcmVudDogV2Fsa2VyUGF0aDxBU1R2MS5Ob2RlPiB8IG51bGwgPSBudWxsLFxuICAgIHBhcmVudEtleTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLnBhcmVudEtleSA9IHBhcmVudEtleTtcbiAgICB0aGlzLnNjb3BlID0gcGFyZW50ID8gcGFyZW50LnNjb3BlLmNoaWxkKG5vZGUpIDogbmV3IFJvb3RUcmFuc2Zvcm1TY29wZShub2RlKTtcblxuICAgIC8vIENvbnN1bWUgaW4gc2NvcGUgdmFsdWVzXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ1BhdGhFeHByZXNzaW9uJykge1xuICAgICAgdGhpcy5zY29wZS51c2VMb2NhbChub2RlKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnRWxlbWVudE5vZGUnKSB7XG4gICAgICB0aGlzLnNjb3BlLnVzZUxvY2FsKG5vZGUpO1xuXG4gICAgICAobm9kZSBhcyBBU1R2MS5FbGVtZW50Tm9kZSkuY2hpbGRyZW4uZm9yRWFjaCgobm9kZTogQVNUdjEuU3RhdGVtZW50KSA9PlxuICAgICAgICB0aGlzLnNjb3BlLnVzZUxvY2FsKG5vZGUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYXJlbnROb2RlKCk6IEFTVHYxLk5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5ub2RlIDogbnVsbDtcbiAgfVxuXG4gIHBhcmVudHMoKTogSXRlcmFibGU8V2Fsa2VyUGF0aDxBU1R2MS5Ob2RlPiB8IG51bGw+IHtcbiAgICByZXR1cm4ge1xuICAgICAgW1N5bWJvbC5pdGVyYXRvcl06ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXRoUGFyZW50c0l0ZXJhdG9yKHRoaXMpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIFBhdGhQYXJlbnRzSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxXYWxrZXJQYXRoPEFTVHYxLk5vZGU+IHwgbnVsbD4ge1xuICBwYXRoOiBXYWxrZXJQYXRoPEFTVHYxLk5vZGU+O1xuXG4gIGNvbnN0cnVjdG9yKHBhdGg6IFdhbGtlclBhdGg8QVNUdjEuTm9kZT4pIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAodGhpcy5wYXRoLnBhcmVudCkge1xuICAgICAgdGhpcy5wYXRoID0gdGhpcy5wYXRoLnBhcmVudDtcbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdGhpcy5wYXRoIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBudWxsIH07XG4gICAgfVxuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9