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

import type { core } from '../../src'

export interface CreatePostInput {
  author: string // ID!
  geo: Array<Array<number | null>> // [[Float]!]!
  name: string // String!
}

export interface PostFilters {
  order: OrderEnum // OrderEnum!
  search: string | null // String
}

export interface NexusGenInputs {
  CreatePostInput: CreatePostInput
  PostFilters: PostFilters
}

export type OrderEnum = 'ASC' | 'DESC'

export type SomeEnum = 'A' | 'B'

export interface NexusGenEnums {
  OrderEnum: OrderEnum
  SomeEnum: SomeEnum
}

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

export interface NexusGenObjects {
  Mutation: {}
  Post: {
    // root type
    author: NexusGenRootTypes['User'] // User!
    geo: ReadonlyArray<ReadonlyArray<number>> // [[Float!]!]!
    id: string // ID!
    messyGeo?: ReadonlyArray<ReadonlyArray<number> | null> | null // [[Float!]]
    uuid: NexusGenScalars['UUID'] // UUID!
  }
  Query: {}
  User: {
    // root type
    email: string // String!
    id: string // ID!
    name: string // String!
    outEnum?: SomeEnum | null // SomeEnum
    phone?: string | null // String
    posts: ReadonlyArray<NexusGenRootTypes['Post']> // [Post!]!
  }
}

export interface NexusGenInterfaces {
  Node: core.Discriminate<'Post', 'optional'> | core.Discriminate<'User', 'optional'>
}

export interface NexusGenUnions {
  ExampleUnion: core.Discriminate<'Post', 'optional'> | core.Discriminate<'User', 'optional'>
}

export type NexusGenRootTypes = NexusGenInterfaces & NexusGenObjects & NexusGenUnions

export type NexusGenAllTypes = NexusGenRootTypes & NexusGenScalars & NexusGenEnums

export interface NexusGenFieldTypes {
  Mutation: {
    // field return type
    createPost: NexusGenRootTypes['Post'] // Post!
    registerClick: NexusGenRootTypes['Query'] // Query!
    someList: ReadonlyArray<string | null> // [String]!
  }
  Post: {
    // field return type
    author: NexusGenRootTypes['User'] // User!
    geo: ReadonlyArray<ReadonlyArray<number>> // [[Float!]!]!
    id: string // ID!
    messyGeo: ReadonlyArray<ReadonlyArray<number> | null> | null // [[Float!]]
    uuid: NexusGenScalars['UUID'] // UUID!
  }
  Query: {
    // field return type
    posts: ReadonlyArray<NexusGenRootTypes['Post']> // [Post!]!
    unionField: NexusGenRootTypes['ExampleUnion'] // ExampleUnion!
    user: NexusGenRootTypes['User'] // User!
  }
  User: {
    // field return type
    email: string // String!
    id: string // ID!
    name: string // String!
    outEnum: SomeEnum | null // SomeEnum
    phone: string | null // String
    posts: ReadonlyArray<NexusGenRootTypes['Post']> // [Post!]!
  }
  Node: {
    // field return type
    id: string // ID!
  }
}

export interface NexusGenFieldTypeNames {
  Mutation: {
    // field return type name
    createPost: 'Post'
    registerClick: 'Query'
    someList: 'String'
  }
  Post: {
    // field return type name
    author: 'User'
    geo: 'Float'
    id: 'ID'
    messyGeo: 'Float'
    uuid: 'UUID'
  }
  Query: {
    // field return type name
    posts: 'Post'
    unionField: 'ExampleUnion'
    user: 'User'
  }
  User: {
    // field return type name
    email: 'String'
    id: 'ID'
    name: 'String'
    outEnum: 'SomeEnum'
    phone: 'String'
    posts: 'Post'
  }
  Node: {
    // field return type name
    id: 'ID'
  }
}

export interface MutationCreatePostArgs {
  input: CreatePostInput // CreatePostInput!
}

export interface MutationRegisterClickArgs {
  uuid?: NexusGenScalars['UUID'] | null // UUID
}

export interface MutationSomeListArgs {
  items: Array<string | null> // [String]!
}

export interface QueryPostsArgs {
  filters: PostFilters // PostFilters!
}

export interface UserNameArgs {
  prefix?: string | null // String
}

export interface UserPostsArgs {
  filters?: PostFilters | null // PostFilters
}

export interface NexusGenArgTypes {
  Mutation: {
    createPost: MutationCreatePostArgs
    registerClick: MutationRegisterClickArgs
    someList: MutationSomeListArgs
  }
  Query: {
    posts: QueryPostsArgs
  }
  User: {
    name: UserNameArgs
    posts: UserPostsArgs
  }
}

export interface NexusGenAbstractTypeMembers {
  ExampleUnion: 'Post' | 'User'
  Node: 'Post' | 'User'
}

export interface NexusGenTypeInterfaces {
  Post: 'Node'
  User: 'Node'
}

export type NexusGenObjectNames = keyof NexusGenObjects

export type NexusGenInputNames = keyof NexusGenInputs

export type NexusGenEnumNames = keyof NexusGenEnums

export type NexusGenInterfaceNames = keyof NexusGenInterfaces

export type NexusGenScalarNames = keyof NexusGenScalars

export type NexusGenUnionNames = keyof NexusGenUnions

export type NexusGenDirectives = 'TestFieldDirective'

export interface NexusGenDirectiveArgs {
  TestFieldDirective: {}
}

export type NexusGenObjectsUsingAbstractStrategyIsTypeOf = never

export type NexusGenAbstractsUsingStrategyResolveType = 'ExampleUnion' | 'Node'

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

export interface NexusGenTypes {
  context: any
  inputTypes: NexusGenInputs
  directives: NexusGenDirectives
  directiveArgs: NexusGenDirectiveArgs
  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
}
