| /** |
| * Produce the GraphQL query recommended for a full schema introspection. |
| * Accepts optional IntrospectionOptions. |
| */ |
| export function getIntrospectionQuery(options) { |
| const optionsWithDefault = { |
| descriptions: true, |
| specifiedByUrl: false, |
| directiveIsRepeatable: false, |
| schemaDescription: false, |
| inputValueDeprecation: false, |
| oneOf: false, |
| ...options, |
| }; |
| const descriptions = optionsWithDefault.descriptions ? 'description' : ''; |
| const specifiedByUrl = optionsWithDefault.specifiedByUrl |
| ? 'specifiedByURL' |
| : ''; |
| const directiveIsRepeatable = optionsWithDefault.directiveIsRepeatable |
| ? 'isRepeatable' |
| : ''; |
| const schemaDescription = optionsWithDefault.schemaDescription |
| ? descriptions |
| : ''; |
|
|
| function inputDeprecation(str) { |
| return optionsWithDefault.inputValueDeprecation ? str : ''; |
| } |
|
|
| const oneOf = optionsWithDefault.oneOf ? 'isOneOf' : ''; |
| return ` |
| query IntrospectionQuery { |
| __schema { |
| ${schemaDescription} |
| queryType { name } |
| mutationType { name } |
| subscriptionType { name } |
| types { |
| ...FullType |
| } |
| directives { |
| name |
| ${descriptions} |
| ${directiveIsRepeatable} |
| locations |
| args${inputDeprecation('(includeDeprecated: true)')} { |
| ...InputValue |
| } |
| } |
| } |
| } |
|
|
| fragment FullType on __Type { |
| kind |
| name |
| ${descriptions} |
| ${specifiedByUrl} |
| ${oneOf} |
| fields(includeDeprecated: true) { |
| name |
| ${descriptions} |
| args${inputDeprecation('(includeDeprecated: true)')} { |
| ...InputValue |
| } |
| type { |
| ...TypeRef |
| } |
| isDeprecated |
| deprecationReason |
| } |
| inputFields${inputDeprecation('(includeDeprecated: true)')} { |
| ...InputValue |
| } |
| interfaces { |
| ...TypeRef |
| } |
| enumValues(includeDeprecated: true) { |
| name |
| ${descriptions} |
| isDeprecated |
| deprecationReason |
| } |
| possibleTypes { |
| ...TypeRef |
| } |
| } |
|
|
| fragment InputValue on __InputValue { |
| name |
| ${descriptions} |
| type { ...TypeRef } |
| defaultValue |
| ${inputDeprecation('isDeprecated')} |
| ${inputDeprecation('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 |
| ofType { |
| kind |
| name |
| ofType { |
| kind |
| name |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| `; |
| } |