path.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import RootTransformScope from './scope';
  2. export default class WalkerPath {
  3. constructor(node, parent = null, parentKey = null) {
  4. this.node = node;
  5. this.parent = parent;
  6. this.parentKey = parentKey;
  7. this.scope = parent ? parent.scope.child(node) : new RootTransformScope(node); // Consume in scope values
  8. if (node.type === 'PathExpression') {
  9. this.scope.useLocal(node);
  10. }
  11. if (node.type === 'ElementNode') {
  12. this.scope.useLocal(node);
  13. node.children.forEach(node => this.scope.useLocal(node));
  14. }
  15. }
  16. get parentNode() {
  17. return this.parent ? this.parent.node : null;
  18. }
  19. parents() {
  20. return {
  21. [Symbol.iterator]: () => {
  22. return new PathParentsIterator(this);
  23. }
  24. };
  25. }
  26. }
  27. class PathParentsIterator {
  28. constructor(path) {
  29. this.path = path;
  30. }
  31. next() {
  32. if (this.path.parent) {
  33. this.path = this.path.parent;
  34. return {
  35. done: false,
  36. value: this.path
  37. };
  38. } else {
  39. return {
  40. done: true,
  41. value: null
  42. };
  43. }
  44. }
  45. }
  46. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL3N5bnRheC9saWIvdHJhdmVyc2FsL3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxrQkFBUCxNQUFtRCxTQUFuRDtBQUVBLGVBQWMsTUFBTyxVQUFQLENBQWlCO0FBTTdCLEVBQUEsV0FBQSxDQUNFLElBREYsRUFFRSxNQUFBLEdBQXdDLElBRjFDLEVBR0UsU0FBQSxHQUEyQixJQUg3QixFQUdpQztBQUUvQixTQUFLLElBQUwsR0FBWSxJQUFaO0FBQ0EsU0FBSyxNQUFMLEdBQWMsTUFBZDtBQUNBLFNBQUssU0FBTCxHQUFpQixTQUFqQjtBQUNBLFNBQUssS0FBTCxHQUFhLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBUCxDQUFhLEtBQWIsQ0FBbUIsSUFBbkIsQ0FBSCxHQUE4QixJQUFJLGtCQUFKLENBQXVCLElBQXZCLENBQWpELENBTCtCLENBTy9COztBQUNBLFFBQUksSUFBSSxDQUFDLElBQUwsS0FBYyxnQkFBbEIsRUFBb0M7QUFDbEMsV0FBSyxLQUFMLENBQVcsUUFBWCxDQUFvQixJQUFwQjtBQUNEOztBQUVELFFBQUksSUFBSSxDQUFDLElBQUwsS0FBYyxhQUFsQixFQUFpQztBQUMvQixXQUFLLEtBQUwsQ0FBVyxRQUFYLENBQW9CLElBQXBCO0FBRUMsTUFBQSxJQUEwQixDQUFDLFFBQTNCLENBQW9DLE9BQXBDLENBQTZDLElBQUQsSUFDM0MsS0FBSyxLQUFMLENBQVcsUUFBWCxDQUFvQixJQUFwQixDQUREO0FBR0Y7QUFDRjs7QUFFRCxNQUFJLFVBQUosR0FBYztBQUNaLFdBQU8sS0FBSyxNQUFMLEdBQWMsS0FBSyxNQUFMLENBQVksSUFBMUIsR0FBaUMsSUFBeEM7QUFDRDs7QUFFRCxFQUFBLE9BQU8sR0FBQTtBQUNMLFdBQU87QUFDTCxPQUFDLE1BQU0sQ0FBQyxRQUFSLEdBQW1CLE1BQUs7QUFDdEIsZUFBTyxJQUFJLG1CQUFKLENBQXdCLElBQXhCLENBQVA7QUFDRDtBQUhJLEtBQVA7QUFLRDs7QUF4QzRCOztBQTJDL0IsTUFBTSxtQkFBTixDQUF5QjtBQUd2QixFQUFBLFdBQUEsQ0FBWSxJQUFaLEVBQXdDO0FBQ3RDLFNBQUssSUFBTCxHQUFZLElBQVo7QUFDRDs7QUFFRCxFQUFBLElBQUksR0FBQTtBQUNGLFFBQUksS0FBSyxJQUFMLENBQVUsTUFBZCxFQUFzQjtBQUNwQixXQUFLLElBQUwsR0FBWSxLQUFLLElBQUwsQ0FBVSxNQUF0QjtBQUNBLGFBQU87QUFBRSxRQUFBLElBQUksRUFBRSxLQUFSO0FBQWUsUUFBQSxLQUFLLEVBQUUsS0FBSztBQUEzQixPQUFQO0FBQ0QsS0FIRCxNQUdPO0FBQ0wsYUFBTztBQUFFLFFBQUEsSUFBSSxFQUFFLElBQVI7QUFBYyxRQUFBLEtBQUssRUFBRTtBQUFyQixPQUFQO0FBQ0Q7QUFDRjs7QUFkc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBU1R2MSBmcm9tICcuLi92MS9hcGknO1xuaW1wb3J0IFJvb3RUcmFuc2Zvcm1TY29wZSwgeyBUcmFuc2Zvcm1TY29wZSB9IGZyb20gJy4vc2NvcGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXYWxrZXJQYXRoPE4gZXh0ZW5kcyBBU1R2MS5Ob2RlPiB7XG4gIG5vZGU6IE47XG4gIHBhcmVudDogV2Fsa2VyUGF0aDxBU1R2MS5Ob2RlPiB8IG51bGw7XG4gIHBhcmVudEtleTogc3RyaW5nIHwgbnVsbDtcbiAgc2NvcGU6IFRyYW5zZm9ybVNjb3BlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5vZGU6IE4sXG4gICAgcGFyZW50OiBXYWxrZXJQYXRoPEFTVHYxLk5vZGU+IHwgbnVsbCA9IG51bGwsXG4gICAgcGFyZW50S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICApIHtcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMucGFyZW50S2V5ID0gcGFyZW50S2V5O1xuICAgIHRoaXMuc2NvcGUgPSBwYXJlbnQgPyBwYXJlbnQuc2NvcGUuY2hpbGQobm9kZSkgOiBuZXcgUm9vdFRyYW5zZm9ybVNjb3BlKG5vZGUpO1xuXG4gICAgLy8gQ29uc3VtZSBpbiBzY29wZSB2YWx1ZXNcbiAgICBpZiAobm9kZS50eXBlID09PSAnUGF0aEV4cHJlc3Npb24nKSB7XG4gICAgICB0aGlzLnNjb3BlLnVzZUxvY2FsKG5vZGUpO1xuICAgIH1cblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdFbGVtZW50Tm9kZScpIHtcbiAgICAgIHRoaXMuc2NvcGUudXNlTG9jYWwobm9kZSk7XG5cbiAgICAgIChub2RlIGFzIEFTVHYxLkVsZW1lbnROb2RlKS5jaGlsZHJlbi5mb3JFYWNoKChub2RlOiBBU1R2MS5TdGF0ZW1lbnQpID0+XG4gICAgICAgIHRoaXMuc2NvcGUudXNlTG9jYWwobm9kZSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhcmVudE5vZGUoKTogQVNUdjEuTm9kZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50Lm5vZGUgOiBudWxsO1xuICB9XG5cbiAgcGFyZW50cygpOiBJdGVyYWJsZTxXYWxrZXJQYXRoPEFTVHYxLk5vZGU+IHwgbnVsbD4ge1xuICAgIHJldHVybiB7XG4gICAgICBbU3ltYm9sLml0ZXJhdG9yXTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhQYXJlbnRzSXRlcmF0b3IodGhpcyk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgUGF0aFBhcmVudHNJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPFdhbGtlclBhdGg8QVNUdjEuTm9kZT4gfCBudWxsPiB7XG4gIHBhdGg6IFdhbGtlclBhdGg8QVNUdjEuTm9kZT47XG5cbiAgY29uc3RydWN0b3IocGF0aDogV2Fsa2VyUGF0aDxBU1R2MS5Ob2RlPikge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLnBhdGgucGFyZW50KSB7XG4gICAgICB0aGlzLnBhdGggPSB0aGlzLnBhdGgucGFyZW50O1xuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiB0aGlzLnBhdGggfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcbiAgICB9XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=