module GraphQL::Introspection

Constants

INTROSPECTION_QUERY

This query is used by graphql-client so don't add the includeDeprecated argument for inputFields since the server may not support it. Two stage introspection queries will be required to handle this in clients.

Public Class Methods

query(include_deprecated_args: false, include_schema_description: false, include_is_repeatable: false, include_specified_by_url: false) click to toggle source
# File lib/graphql/introspection.rb, line 4
    def self.query(include_deprecated_args: false, include_schema_description: false, include_is_repeatable: false, include_specified_by_url: false)
      # The introspection query to end all introspection queries, copied from
      # https://github.com/graphql/graphql-js/blob/master/src/utilities/introspectionQuery.js
      <<-QUERY
query IntrospectionQuery {
  __schema {
    #{include_schema_description ? "description" : ""}
    queryType { name }
    mutationType { name }
    subscriptionType { name }
    types {
      ...FullType
    }
    directives {
      name
      description
      locations
      #{include_is_repeatable ? "isRepeatable" : ""}
      args#{include_deprecated_args ? '(includeDeprecated: true)' : ''} {
        ...InputValue
      }
    }
  }
}
fragment FullType on __Type {
  kind
  name
  description
  #{include_specified_by_url ? "specifiedByUrl" : ""}
  fields(includeDeprecated: true) {
    name
    description
    args#{include_deprecated_args ? '(includeDeprecated: true)' : ''} {
      ...InputValue
    }
    type {
      ...TypeRef
    }
    isDeprecated
    deprecationReason
  }
  inputFields#{include_deprecated_args ? '(includeDeprecated: true)' : ''} {
    ...InputValue
  }
  interfaces {
    ...TypeRef
  }
  enumValues(includeDeprecated: true) {
    name
    description
    isDeprecated
    deprecationReason
  }
  possibleTypes {
    ...TypeRef
  }
}
fragment InputValue on __InputValue {
  name
  description
  type { ...TypeRef }
  defaultValue
  #{include_deprecated_args ? 'isDeprecated' : ''}
  #{include_deprecated_args ? 'deprecationReason' : ''}
}
fragment TypeRef on __Type {
  kind
  name
  ofType {
    kind
    name
    ofType {
      kind
      name
      ofType {
        kind
        name
        ofType {
          kind
          name
          ofType {
            kind
            name
            ofType {
              kind
              name
              ofType {
                kind
                name
              }
            }
          }
        }
      }
    }
  }
}
      QUERY
    end