/** This file was generated by Nexus Schema Do not make changes to this file directly */

import type { UnusedInterfaceTypeDef } from './kitchen-sink-definitions'
import type { core } from 'nexus'

export interface InputType {
  answer?: number | null // Int
  key: string // String!
  nestedInput?: InputType2 | null // InputType2
}

export interface InputType2 {
  answer?: number | null // Int
  key: string // String!
  someDate: NexusGenScalars['Date'] // Date!
}

export interface NestedType {
  veryNested?: string | null // String
}

export interface SomeArg {
  arg?: NestedType | null // NestedType
  someField?: string | null // String
}

export interface NexusGenInputs {
  InputType: InputType
  InputType2: InputType2
  NestedType: NestedType
  SomeArg: SomeArg
}

export interface NexusGenEnums {}

export interface NexusGenScalars {
  String: string
  Int: number
  Float: number
  Boolean: boolean
  ID: string
  Date: Date
}

export interface NexusGenObjects {
  BooleanConnection: {
    // root type
    edges?: Array<NexusGenRootTypes['BooleanEdge'] | null> | null // [BooleanEdge]
    pageInfo: NexusGenRootTypes['PageInfo'] // PageInfo!
  }
  BooleanEdge: {
    // root type
    cursor: string // String!
    node?: boolean | null // Boolean
  }
  ComplexObject: {
    // root type
    id?: string | null // ID
  }
  DateConnection: {
    // root type
    edges?: Array<NexusGenRootTypes['DateEdge'] | null> | null // [DateEdge]
    pageInfo: NexusGenRootTypes['PageInfo'] // PageInfo!
  }
  DateEdge: {
    // root type
    cursor: string // String!
    node?: NexusGenScalars['Date'] | null // Date
  }
  Foo: {
    // root type
    name?: string | null // String
    ok?: boolean | null // Boolean
  }
  Mutation: {}
  PageInfo: {
    // root type
    endCursor?: string | null // String
    hasNextPage: boolean // Boolean!
    hasPreviousPage: boolean // Boolean!
    startCursor?: string | null // String
  }
  Query: {}
  SomeItem: {
    // root type
    id?: string | null // ID
  }
  SomeNode: {
    // root type
    data?: NexusGenRootTypes['SomeNode'] | null // SomeNode
    id?: string | null // ID
  }
  TestObj: {
    // root type
    a?: NexusGenRootTypes['Bar'] | null // Bar
    data?: NexusGenRootTypes['Node'] | null // Node
    item?: string | null // String
    ok?: boolean | null // Boolean
  }
  User: {
    // root type
    id?: string | null // ID
    name?: string | null // String
  }
  UserConnection: {
    // root type
    edges?: Array<NexusGenRootTypes['UserEdge'] | null> | null // [UserEdge]
    pageInfo: NexusGenRootTypes['PageInfo'] // PageInfo!
  }
  UserEdge: {
    // root type
    cursor: string // String!
    node?: NexusGenRootTypes['User'] | null // User
  }
}

export interface NexusGenInterfaces {
  Bar: core.Discriminate<'Foo', 'optional'> | core.Discriminate<'TestObj', 'optional'>
  Baz: core.Discriminate<'TestObj', 'optional'>
  Node: core.Discriminate<'SomeNode', 'required'> | core.Discriminate<'TestObj', 'required'>
  UnusedInterface: UnusedInterfaceTypeDef
}

export interface NexusGenUnions {
  TestUnion: core.Discriminate<'Foo', 'optional'>
}

export type NexusGenRootTypes = NexusGenInterfaces & NexusGenObjects & NexusGenUnions

export type NexusGenAllTypes = NexusGenRootTypes & NexusGenScalars

export interface NexusGenFieldTypes {
  BooleanConnection: {
    // field return type
    edges: Array<NexusGenRootTypes['BooleanEdge'] | null> | null // [BooleanEdge]
    pageInfo: NexusGenRootTypes['PageInfo'] // PageInfo!
  }
  BooleanEdge: {
    // field return type
    cursor: string // String!
    node: boolean | null // Boolean
  }
  ComplexObject: {
    // field return type
    id: string | null // ID
  }
  DateConnection: {
    // field return type
    edges: Array<NexusGenRootTypes['DateEdge'] | null> | null // [DateEdge]
    pageInfo: NexusGenRootTypes['PageInfo'] // PageInfo!
  }
  DateEdge: {
    // field return type
    cursor: string // String!
    node: NexusGenScalars['Date'] | null // Date
  }
  Foo: {
    // field return type
    argsTest: boolean | null // Boolean
    name: string | null // String
    ok: boolean | null // Boolean
  }
  Mutation: {
    // field return type
    ok: boolean | null // Boolean
    someMutationField: NexusGenRootTypes['Foo'] | null // Foo
  }
  PageInfo: {
    // field return type
    endCursor: string | null // String
    hasNextPage: boolean // Boolean!
    hasPreviousPage: boolean // Boolean!
    startCursor: string | null // String
  }
  Query: {
    // field return type
    asArgExample: string | null // String
    bar: NexusGenRootTypes['TestObj'] | null // TestObj
    booleanConnection: NexusGenRootTypes['BooleanConnection'] | null // BooleanConnection
    complexQuery: Array<NexusGenRootTypes['ComplexObject'] | null> | null // [ComplexObject]
    dateAsList: Array<NexusGenScalars['Date'] | null> | null // [Date]
    deprecatedConnection: NexusGenRootTypes['BooleanConnection'] // BooleanConnection!
    extended: NexusGenRootTypes['SomeItem'] | null // SomeItem
    getNumberOrNull: number | null // Int
    guardedConnection: NexusGenRootTypes['DateConnection'] | null // DateConnection
    inlineArgs: string | null // String
    inputAsArgExample: string | null // String
    protectedField: number | null // Int
    userConnectionAdditionalArgs: NexusGenRootTypes['UserConnection'] | null // UserConnection
    userConnectionBackwardOnly: NexusGenRootTypes['UserConnection'] | null // UserConnection
    userConnectionForwardOnly: NexusGenRootTypes['UserConnection'] | null // UserConnection
    usersConnectionNodes: NexusGenRootTypes['UserConnection'] | null // UserConnection
    usersConnectionResolve: NexusGenRootTypes['UserConnection'] | null // UserConnection
  }
  SomeItem: {
    // field return type
    id: string | null // ID
  }
  SomeNode: {
    // field return type
    data: NexusGenRootTypes['SomeNode'] | null // SomeNode
    id: string | null // ID
  }
  TestObj: {
    // field return type
    a: NexusGenRootTypes['Bar'] | null // Bar
    argsTest: boolean | null // Boolean
    data: NexusGenRootTypes['Node'] | null // Node
    id: string // ID!
    item: string | null // String
    ok: boolean | null // Boolean
  }
  User: {
    // field return type
    id: string | null // ID
    name: string | null // String
  }
  UserConnection: {
    // field return type
    edges: Array<NexusGenRootTypes['UserEdge'] | null> | null // [UserEdge]
    pageInfo: NexusGenRootTypes['PageInfo'] // PageInfo!
  }
  UserEdge: {
    // field return type
    cursor: string // String!
    node: NexusGenRootTypes['User'] | null // User
  }
  Bar: {
    // field return type
    argsTest: boolean | null // Boolean
    ok: boolean | null // Boolean
  }
  Baz: {
    // field return type
    a: NexusGenRootTypes['Bar'] | null // Bar
    ok: boolean | null // Boolean
  }
  Node: {
    // field return type
    data: NexusGenRootTypes['Node'] | null // Node
    id: string | null // ID
  }
  UnusedInterface: {
    // field return type
    ok: boolean | null // Boolean
  }
}

export interface NexusGenFieldTypeNames {
  BooleanConnection: {
    // field return type name
    edges: 'BooleanEdge'
    pageInfo: 'PageInfo'
  }
  BooleanEdge: {
    // field return type name
    cursor: 'String'
    node: 'Boolean'
  }
  ComplexObject: {
    // field return type name
    id: 'ID'
  }
  DateConnection: {
    // field return type name
    edges: 'DateEdge'
    pageInfo: 'PageInfo'
  }
  DateEdge: {
    // field return type name
    cursor: 'String'
    node: 'Date'
  }
  Foo: {
    // field return type name
    argsTest: 'Boolean'
    name: 'String'
    ok: 'Boolean'
  }
  Mutation: {
    // field return type name
    ok: 'Boolean'
    someMutationField: 'Foo'
  }
  PageInfo: {
    // field return type name
    endCursor: 'String'
    hasNextPage: 'Boolean'
    hasPreviousPage: 'Boolean'
    startCursor: 'String'
  }
  Query: {
    // field return type name
    asArgExample: 'String'
    bar: 'TestObj'
    booleanConnection: 'BooleanConnection'
    complexQuery: 'ComplexObject'
    dateAsList: 'Date'
    deprecatedConnection: 'BooleanConnection'
    extended: 'SomeItem'
    getNumberOrNull: 'Int'
    guardedConnection: 'DateConnection'
    inlineArgs: 'String'
    inputAsArgExample: 'String'
    protectedField: 'Int'
    userConnectionAdditionalArgs: 'UserConnection'
    userConnectionBackwardOnly: 'UserConnection'
    userConnectionForwardOnly: 'UserConnection'
    usersConnectionNodes: 'UserConnection'
    usersConnectionResolve: 'UserConnection'
  }
  SomeItem: {
    // field return type name
    id: 'ID'
  }
  SomeNode: {
    // field return type name
    data: 'SomeNode'
    id: 'ID'
  }
  TestObj: {
    // field return type name
    a: 'Bar'
    argsTest: 'Boolean'
    data: 'Node'
    id: 'ID'
    item: 'String'
    ok: 'Boolean'
  }
  User: {
    // field return type name
    id: 'ID'
    name: 'String'
  }
  UserConnection: {
    // field return type name
    edges: 'UserEdge'
    pageInfo: 'PageInfo'
  }
  UserEdge: {
    // field return type name
    cursor: 'String'
    node: 'User'
  }
  Bar: {
    // field return type name
    argsTest: 'Boolean'
    ok: 'Boolean'
  }
  Baz: {
    // field return type name
    a: 'Bar'
    ok: 'Boolean'
  }
  Node: {
    // field return type name
    data: 'Node'
    id: 'ID'
  }
  UnusedInterface: {
    // field return type name
    ok: 'Boolean'
  }
}

export interface FooArgsTestArgs {
  a: InputType | null // InputType
}

export interface MutationSomeMutationFieldArgs {
  id: string // ID!
}

export interface QueryAsArgExampleArgs {
  testAsArg: InputType // InputType!
}

export interface QueryBooleanConnectionArgs {
  after?: string | null // String
  first: number // Int!
}

export interface QueryComplexQueryArgs {
  count: number // Int!
}

export interface QueryDeprecatedConnectionArgs {
  after?: string | null // String
  before?: string | null // String
  first?: number | null // Int
  last?: number | null // Int
}

export interface QueryGetNumberOrNullArgs {
  a: number // Int!
}

export interface QueryGuardedConnectionArgs {
  after?: string | null // String
  first: number // Int!
}

export interface QueryInlineArgsArgs {
  someArg?: SomeArg | null // SomeArg
}

export interface QueryInputAsArgExampleArgs {
  testInput?: InputType | null // InputType
  testScalar?: string | null // String
}

export interface QueryUserConnectionAdditionalArgsArgs {
  after?: string | null // String
  first: number // Int!
  isEven?: boolean | null // Boolean
}

export interface QueryUserConnectionBackwardOnlyArgs {
  before?: string | null // String
  last: number // Int!
}

export interface QueryUserConnectionForwardOnlyArgs {
  after?: string | null // String
  first: number // Int!
}

export interface QueryUsersConnectionNodesArgs {
  after?: string | null // String
  before?: string | null // String
  first?: number | null // Int
  last?: number | null // Int
}

export interface QueryUsersConnectionResolveArgs {
  after?: string | null // String
  before?: string | null // String
  first?: number | null // Int
  last?: number | null // Int
}

export interface TestObjArgsTestArgs {
  a: InputType | null // InputType
}

export interface BarArgsTestArgs {
  a: InputType | null // InputType
}

export interface NexusGenArgTypes {
  Foo: {
    argsTest: FooArgsTestArgs
  }
  Mutation: {
    someMutationField: MutationSomeMutationFieldArgs
  }
  Query: {
    asArgExample: QueryAsArgExampleArgs
    booleanConnection: QueryBooleanConnectionArgs
    complexQuery: QueryComplexQueryArgs
    deprecatedConnection: QueryDeprecatedConnectionArgs
    getNumberOrNull: QueryGetNumberOrNullArgs
    guardedConnection: QueryGuardedConnectionArgs
    inlineArgs: QueryInlineArgsArgs
    inputAsArgExample: QueryInputAsArgExampleArgs
    userConnectionAdditionalArgs: QueryUserConnectionAdditionalArgsArgs
    userConnectionBackwardOnly: QueryUserConnectionBackwardOnlyArgs
    userConnectionForwardOnly: QueryUserConnectionForwardOnlyArgs
    usersConnectionNodes: QueryUsersConnectionNodesArgs
    usersConnectionResolve: QueryUsersConnectionResolveArgs
  }
  TestObj: {
    argsTest: TestObjArgsTestArgs
  }
  Bar: {
    argsTest: BarArgsTestArgs
  }
}

export interface NexusGenAbstractTypeMembers {
  TestUnion: 'Foo'
  Bar: 'Foo' | 'TestObj'
  Baz: 'TestObj'
  Node: 'SomeNode' | 'TestObj'
}

export interface NexusGenTypeInterfaces {
  Foo: 'Bar'
  SomeNode: 'Node'
  TestObj: 'Bar' | 'Baz' | 'Node'
}

export type NexusGenObjectNames = keyof NexusGenObjects

export type NexusGenInputNames = keyof NexusGenInputs

export type NexusGenEnumNames = never

export type NexusGenInterfaceNames = keyof NexusGenInterfaces

export type NexusGenScalarNames = keyof NexusGenScalars

export type NexusGenUnionNames = keyof NexusGenUnions

export type NexusGenObjectsUsingAbstractStrategyIsTypeOf = never

export type NexusGenAbstractsUsingStrategyResolveType = 'Bar' | 'Baz' | 'TestUnion'

export type NexusGenFeaturesConfig = {
  abstractTypeStrategies: {
    __typename: true
    resolveType: true
    isTypeOf: false
  }
}

export interface NexusGenTypes {
  context: any
  inputTypes: NexusGenInputs
  rootTypes: NexusGenRootTypes
  inputTypeShapes: NexusGenInputs & NexusGenEnums & NexusGenScalars
  argTypes: NexusGenArgTypes
  fieldTypes: NexusGenFieldTypes
  fieldTypeNames: NexusGenFieldTypeNames
  allTypes: NexusGenAllTypes
  typeInterfaces: NexusGenTypeInterfaces
  objectNames: NexusGenObjectNames
  inputNames: NexusGenInputNames
  enumNames: NexusGenEnumNames
  interfaceNames: NexusGenInterfaceNames
  scalarNames: NexusGenScalarNames
  unionNames: NexusGenUnionNames
  allInputTypes: NexusGenTypes['inputNames'] | NexusGenTypes['enumNames'] | NexusGenTypes['scalarNames']
  allOutputTypes:
    | NexusGenTypes['objectNames']
    | NexusGenTypes['enumNames']
    | NexusGenTypes['unionNames']
    | NexusGenTypes['interfaceNames']
    | NexusGenTypes['scalarNames']
  allNamedTypes: NexusGenTypes['allInputTypes'] | NexusGenTypes['allOutputTypes']
  abstractTypes: NexusGenTypes['interfaceNames'] | NexusGenTypes['unionNames']
  abstractTypeMembers: NexusGenAbstractTypeMembers
  objectsUsingAbstractStrategyIsTypeOf: NexusGenObjectsUsingAbstractStrategyIsTypeOf
  abstractsUsingStrategyResolveType: NexusGenAbstractsUsingStrategyResolveType
  features: NexusGenFeaturesConfig
}
