import { FieldOutConfig, OutputDefinitionBlock } from '../core' import { extendType, NexusExtendTypeDef } from './extendType' export type QueryFieldConfig = | FieldOutConfig<'Query', FieldName> | (() => FieldOutConfig<'Query', FieldName>) export function queryField(fieldFn: (t: OutputDefinitionBlock<'Query'>) => void): NexusExtendTypeDef<'Query'> export function queryField( fieldName: FieldName, config: QueryFieldConfig ): NexusExtendTypeDef<'Query'> export function queryField(...args: any[]) { return extendType({ type: 'Query', definition(t) { if (typeof args[0] === 'function') { return args[0](t) } const [fieldName, config] = args as [string, QueryFieldConfig] const finalConfig = typeof config === 'function' ? config() : config t.field(fieldName, finalConfig) }, }) }