Skip to content

[BUG] Schemas with different names for root query type are not working #28

@rohit-ravikoti

Description

@rohit-ravikoti

Describe the bug
If the root query type is named something other than Query (i.e. query_root), the schema does not get built correctly.

To Reproduce
Steps to reproduce the behavior:

1. Pass in an introspection query with a non-standard query root

{
  "__schema": {
    "queryType": {
      "name": "query_root",
      "__typename": "__Type"
    },
    "mutationType": null,
    "subscriptionType": null,
    "types": [
      {
        "kind": "SCALAR",
        "name": "Boolean",
        "description": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "SCALAR",
        "name": "Float",
        "description": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "SCALAR",
        "name": "ID",
        "description": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "SCALAR",
        "name": "Int",
        "description": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "SCALAR",
        "name": "String",
        "description": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "OBJECT",
        "name": "__Directive",
        "description": null,
        "fields": [
          {
            "name": "args",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "__InputValue",
                    "ofType": null,
                    "__typename": "__Type"
                  },
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "locations",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "ENUM",
                    "name": "__DirectiveLocation",
                    "ofType": null,
                    "__typename": "__Type"
                  },
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "ENUM",
        "name": "__DirectiveLocation",
        "description": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": [
          {
            "name": "ARGUMENT_DEFINITION",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "ENUM",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "ENUM_VALUE",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "FIELD",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "FIELD_DEFINITION",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "FRAGMENT_DEFINITION",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "FRAGMENT_SPREAD",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "INLINE_FRAGMENT",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "INPUT_FIELD_DEFINITION",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "INPUT_OBJECT",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "INTERFACE",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "MUTATION",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "OBJECT",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "QUERY",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "SCALAR",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "SCHEMA",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "SUBSCRIPTION",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "UNION",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          }
        ],
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "OBJECT",
        "name": "__EnumValue",
        "description": null,
        "fields": [
          {
            "name": "deprecationReason",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "isDeprecated",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "OBJECT",
        "name": "__Field",
        "description": null,
        "fields": [
          {
            "name": "args",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "__InputValue",
                    "ofType": null,
                    "__typename": "__Type"
                  },
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "deprecationReason",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "isDeprecated",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "type",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "__Type",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "OBJECT",
        "name": "__InputValue",
        "description": null,
        "fields": [
          {
            "name": "defaultValue",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "type",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "__Type",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "OBJECT",
        "name": "__Schema",
        "description": null,
        "fields": [
          {
            "name": "directives",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "__Directive",
                    "ofType": null,
                    "__typename": "__Type"
                  },
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "mutationType",
            "description": null,
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "__Type",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "queryType",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "__Type",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "subscriptionType",
            "description": null,
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "__Type",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "types",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "__Type",
                    "ofType": null,
                    "__typename": "__Type"
                  },
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "OBJECT",
        "name": "__Type",
        "description": null,
        "fields": [
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "enumValues",
            "description": null,
            "args": [
              {
                "name": "includeDeprecated",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null,
                  "__typename": "__Type"
                },
                "defaultValue": "false",
                "__typename": "__InputValue"
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__EnumValue",
                  "ofType": null,
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "fields",
            "description": null,
            "args": [
              {
                "name": "includeDeprecated",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null,
                  "__typename": "__Type"
                },
                "defaultValue": "false",
                "__typename": "__InputValue"
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__Field",
                  "ofType": null,
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "inputFields",
            "description": null,
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__InputValue",
                  "ofType": null,
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "interfaces",
            "description": null,
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__Type",
                  "ofType": null,
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "kind",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "ENUM",
                "name": "__TypeKind",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "ofType",
            "description": null,
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "__Type",
              "ofType": null,
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          },
          {
            "name": "possibleTypes",
            "description": null,
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__Type",
                  "ofType": null,
                  "__typename": "__Type"
                },
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__Field"
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "ENUM",
        "name": "__TypeKind",
        "description": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": [
          {
            "name": "ENUM",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "INPUT_OBJECT",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "INTERFACE",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "LIST",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "NON_NULL",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "OBJECT",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "SCALAR",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          },
          {
            "name": "UNION",
            "description": null,
            "isDeprecated": false,
            "deprecationReason": null,
            "__typename": "__EnumValue"
          }
        ],
        "possibleTypes": null,
        "__typename": "__Type"
      },
      {
        "kind": "OBJECT",
        "name": "query_root",
        "description": "query root",
        "fields": [],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null,
        "__typename": "__Type"
      }
    ],
    "directives": [
      {
        "name": "include",
        "description": null,
        "locations": [
          "FIELD",
          "FRAGMENT_SPREAD",
          "INLINE_FRAGMENT"
        ],
        "args": [
          {
            "name": "if",
            "description": null,
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "defaultValue": null,
            "__typename": "__InputValue"
          }
        ],
        "__typename": "__Directive"
      },
      {
        "name": "skip",
        "description": null,
        "locations": [
          "FIELD",
          "FRAGMENT_SPREAD",
          "INLINE_FRAGMENT"
        ],
        "args": [
          {
            "name": "if",
            "description": null,
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null,
                "__typename": "__Type"
              },
              "__typename": "__Type"
            },
            "defaultValue": null,
            "__typename": "__InputValue"
          }
        ],
        "__typename": "__Directive"
      }
    ],
    "__typename": "__Schema"
  }
}

  1. Run the app
  2. See the blank canvas.

Expected behavior
It should display the schema normally.

Package
core

Additional context
This mainly seems to be an issue with introspection queries.
Original issue: #27

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions