module GraphQL::Analysis::AST

def analysis_errors(results)

def analysis_errors(results)
  results.flatten.select { |r| r.is_a?(GraphQL::AnalysisError) }
end

def analyze_multiplex(multiplex, analyzers)

Returns:
  • (Array) - Results from multiplex analyzers

Parameters:
  • analyzers (Array) --
  • multiplex (GraphQL::Execution::Multiplex) --
def analyze_multiplex(multiplex, analyzers)
  multiplex_analyzers = analyzers.map { |analyzer| analyzer.new(multiplex) }
  multiplex.trace("analyze_multiplex", { multiplex: multiplex }) do
    query_results = multiplex.queries.map do |query|
      if query.valid?
        analyze_query(
          query,
          query.analyzers,
          multiplex_analyzers: multiplex_analyzers
        )
      else
        []
      end
    end
    multiplex_results = multiplex_analyzers.map(&:result)
    multiplex_errors = analysis_errors(multiplex_results)
    multiplex.queries.each_with_index do |query, idx|
      query.analysis_errors = multiplex_errors + analysis_errors(query_results[idx])
    end
    multiplex_results
  end
end

def analyze_query(query, analyzers, multiplex_analyzers: [])

Returns:
  • (Array) - Results from those analyzers

Parameters:
  • analyzers (Array) --
  • query (GraphQL::Query) --
def analyze_query(query, analyzers, multiplex_analyzers: [])
  query.trace("analyze_query", { query: query }) do
    query_analyzers = analyzers
      .map { |analyzer| analyzer.new(query) }
      .select { |analyzer| analyzer.analyze? }
    analyzers_to_run = query_analyzers + multiplex_analyzers
    if analyzers_to_run.any?
      visitor = GraphQL::Analysis::AST::Visitor.new(
        query: query,
        analyzers: analyzers_to_run
      )
      visitor.visit
      if visitor.rescued_errors.any?
        visitor.rescued_errors
      else
        query_analyzers.map(&:result)
      end
    else
      []
    end
  end
end