| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package graphql
- import (
- "context"
- "encoding/json"
- "github.com/graph-gophers/graphql-go/internal/exec/resolvable"
- "github.com/graph-gophers/graphql-go/introspection"
- )
- // Inspect allows inspection of the given schema.
- func (s *Schema) Inspect() *introspection.Schema {
- return introspection.WrapSchema(s.schema)
- }
- // ToJSON encodes the schema in a JSON format used by tools like Relay.
- func (s *Schema) ToJSON() ([]byte, error) {
- result := s.exec(context.Background(), introspectionQuery, "", nil, &resolvable.Schema{
- Query: &resolvable.Object{},
- Schema: *s.schema,
- })
- if len(result.Errors) != 0 {
- panic(result.Errors[0])
- }
- return json.MarshalIndent(result.Data, "", "\t")
- }
- var introspectionQuery = `
- query {
- __schema {
- queryType { name }
- mutationType { name }
- subscriptionType { name }
- types {
- ...FullType
- }
- directives {
- name
- description
- locations
- args {
- ...InputValue
- }
- }
- }
- }
- fragment FullType on __Type {
- kind
- name
- description
- fields(includeDeprecated: true) {
- name
- description
- args {
- ...InputValue
- }
- type {
- ...TypeRef
- }
- isDeprecated
- deprecationReason
- }
- inputFields {
- ...InputValue
- }
- interfaces {
- ...TypeRef
- }
- enumValues(includeDeprecated: true) {
- name
- description
- isDeprecated
- deprecationReason
- }
- possibleTypes {
- ...TypeRef
- }
- }
- fragment InputValue on __InputValue {
- name
- description
- type { ...TypeRef }
- defaultValue
- }
- 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
- }
- }
- }
- }
- }
- }
- }
- }
- `
|