docs: public Node transform(QueryVisitor queryVisitor) {
          QueryVisitor noOp = new QueryVisitorStub();
          NodeVisitorWithTypeTracking nodeVisitor = new NodeVisitorWithTypeTracking(queryVisitor, noOp, variables, schema, fragmentsByName);
  
          Map<Class<?>, Object> rootVars = new LinkedHashMap<>();
          rootVars.put(QueryTraversalContext.class, new QueryTraversalContext(rootParentType, null, null));
  
          TraverserVisitor<Node> nodeTraverserVisitor = new TraverserVisitor<Node>() {
  
              @Override
              public TraversalControl enter(TraverserContext<Node> context) {
                  context.setVar(LeaveOrEnter.class, LeaveOrEnter.ENTER);
                  return context.thisNode().accept(context, nodeVisitor);
              }
  
              @Override
              public TraversalControl leave(TraverserContext<Node> context) {
                  //Transformations are applied preOrder only
                  return TraversalControl.CONTINUE;
              }
          };
          return new TreeTransformer<>(AST_NODE_ADAPTER).transform(root, nodeTraverserVisitor, rootVars);
      }