module GraphQL::Execution::Flatten

def self.call(ctx)

def self.call(ctx)
  flatten(ctx)
end

def flatten(obj)

def flatten(obj)
  case obj
  when Hash
    flattened = {}
    obj.each do |key, val|
      flattened[key] = flatten(val)
    end
    flattened
  when Array
    obj.map { |v| flatten(v) }
  when Query::Context::SharedMethods
    if obj.invalid_null?
      nil
    elsif obj.skipped? && obj.value.empty?
      nil
    else
      flatten(obj.value)
    end
  else
    obj
  end
end