type CreateFruitPayload {
  fruit: Fruit!
}

type Fruit implements Node {
  """
  The Globally Unique ID of this object
  """
  id: GlobalID!
  name: String!
  color: String!
}

type FruitAlikeConnection {
  """
  Pagination data for this connection
  """
  pageInfo: PageInfo!

  """
  Contains the nodes in this connection
  """
  edges: [FruitEdge!]!
}

type FruitAsync implements Node {
  """
  The Globally Unique ID of this object
  """
  id: GlobalID!
  name: String!
  color: String!
}

"""
A connection to a list of items.
"""
type FruitAsyncConnection {
  """
  Pagination data for this connection
  """
  pageInfo: PageInfo!

  """
  Contains the nodes in this connection
  """
  edges: [FruitAsyncEdge!]!
}

"""
An edge in a connection.
"""
type FruitAsyncEdge {
  """
  A cursor for use in pagination
  """
  cursor: String!

  """
  The item at the end of the edge
  """
  node: FruitAsync!
}

"""
A connection to a list of items.
"""
type FruitConnection {
  """
  Pagination data for this connection
  """
  pageInfo: PageInfo!

  """
  Contains the nodes in this connection
  """
  edges: [FruitEdge!]!
}

type FruitCustomPaginationConnection {
  """
  Pagination data for this connection
  """
  pageInfo: PageInfo!

  """
  Contains the nodes in this connection
  """
  edges: [FruitEdge!]!
  something: String!
}

"""
An edge in a connection.
"""
type FruitEdge {
  """
  A cursor for use in pagination
  """
  cursor: String!

  """
  The item at the end of the edge
  """
  node: Fruit!
}

"""
The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID.
"""
scalar GlobalID
  @specifiedBy(url: "https://relay.dev/graphql/objectidentification.htm")

type Mutation {
  createFruit(name: String!, color: String!): CreateFruitPayload!
}

"""
An object with a Globally Unique ID
"""
interface Node {
  """
  The Globally Unique ID of this object
  """
  id: GlobalID!
}

"""
Information to aid in pagination.
"""
type PageInfo {
  """
  When paginating forwards, are there more items?
  """
  hasNextPage: Boolean!

  """
  When paginating backwards, are there more items?
  """
  hasPreviousPage: Boolean!

  """
  When paginating backwards, the cursor to continue.
  """
  startCursor: String

  """
  When paginating forwards, the cursor to continue.
  """
  endCursor: String
}

type Query {
  node(
    """
    The ID of the object.
    """
    id: GlobalID!
  ): Node!
  nodes(
    """
    The IDs of the objects.
    """
    ids: [GlobalID!]!
  ): [Node!]!
  nodeOptional(
    """
    The ID of the object.
    """
    id: GlobalID!
  ): Node
  nodesOptional(
    """
    The IDs of the objects.
    """
    ids: [GlobalID!]!
  ): [Node]!
  fruits(
    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsLazy(
    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsAsync(
    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitAsyncConnection!
  fruitsCustomPagination(
    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitCustomPaginationConnection!
  fruitsConcreteResolver(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsCustomResolver(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsCustomResolverLazy(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsCustomResolverIterator(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsCustomResolverIterable(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsCustomResolverGenerator(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsCustomResolverAsyncIterable(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsCustomResolverAsyncIterator(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitsCustomResolverAsyncGenerator(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitConnection!
  fruitAlikeConnectionCustomResolver(
    nameEndswith: String = null

    """
    Returns the items in the list that come before the specified cursor.
    """
    before: String = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    after: String = null

    """
    Returns the first n items from the list.
    """
    first: Int = null

    """
    Returns the items in the list that come after the specified cursor.
    """
    last: Int = null
  ): FruitAlikeConnection!
}
