UNPKG

nexus

Version:

Scalable, strongly typed GraphQL schema development

139 lines (134 loc) 4.17 kB
import type { FieldOutConfig, OutputDefinitionBlock } from './definitionBlocks' import { extendType, NexusExtendTypeDef } from './extendType' export type MutationFieldConfig<FieldName extends string> = | FieldOutConfig<'Mutation', FieldName> | (() => FieldOutConfig<'Mutation', FieldName>) /** * [API Docs](https://nexusjs.org/docs/api/mutation-field) | [2018 GraphQL * Spec](https://spec.graphql.org/June2018/#sec-Mutation) * * Define one or more fields on the Mutation type. * * Use this if you are going to modularize your schema and thus be wanting to contribute fields to Mutation * type from multiple modules. You do not have to have previously defined a Mutation type before using this. * If you haven't Nexus will create one automatically for you. * * This is shorthand for: * * `extendType({ type: 'Mutation' })` * * If you need to leverage plugins or define multiple fields then use the typeBuilder overload variant of this * function. Otherwise you may prefer to the field name/config variant. * * @example * // User.ts * // Overload 1: Type Builder * * mutationField((t) => { * t.field('signup', { * type: 'User', * args: { * email: stringArg(), * }, * // ... * }) * t.field('deactivate', { * type: 'User', * args: { * userId: idArg(), * }, * // ... * }) * }) * * @example * // User.ts * // Overload 2: Field Name/Config * * mutationField('signup', { * type: 'User', * args: { * email: stringArg(), * }, * // ... * }) * * @param typeBuilder The same as the "definition" method you define on object type configurations. */ export function mutationField( typeBuilder: (t: OutputDefinitionBlock<'Mutation'>) => void ): NexusExtendTypeDef<'Mutation'> /** * [API Docs](https://nexusjs.org/docs/api/mutation-field) | [2018 GraphQL * Spec](https://spec.graphql.org/June2018/#sec-Mutation) * * Define one or more fields on the mutation type. * * The Mutation type is one of three [root types](https://spec.graphql.org/June2018/#sec-Root-Operation-Types) * in GraphQL and its fields represent API operations your clients can run that may have side-effects. * * Use this instead of mutationType if you are going to modularize your schema and thus be wanting to * contribute fields to Mutation type from multiple modules. You do not have to have previously defined a * Mutation type before using this. If you haven't Nexus will create one automatically for you. * * This is shorthand for: * * `extendType({ type: 'Mutation' })` * * If you need to leverage plugins or define multiple fields then use the typeBuilder overload variant of this * function. Otherwise you may prefer to the field name/config variant. * * @example * // User.ts * // Overload 1: Type Builder * * mutationField((t) => { * t.field('signup', { * type: 'User', * args: { * email: stringArg(), * }, * // ... * }) * t.field('deactivate', { * type: 'User', * args: { * userId: idArg(), * }, * // ... * }) * }) * * @example * // User.ts * // Overload 2: Field Name/Config * * mutationField('signup', { * type: 'User', * args: { * email: stringArg(), * }, * // ... * }) * * @param name The name of the field on the Mutation type. Names are case‐sensitive and must conform to * pattern: `[_A-Za-z][_0-9A-Za-z]*` * @param config The same type of configuration you would pass to t.field("...", config) */ export function mutationField<FieldName extends string>( name: FieldName, config: MutationFieldConfig<FieldName> ): NexusExtendTypeDef<'Mutation'> export function mutationField(...args: any[]) { return extendType({ type: 'Mutation', definition(t) { if (typeof args[0] === 'function') { return args[0](t) } const [fieldName, config] = args as [string, MutationFieldConfig<any>] const finalConfig = typeof config === 'function' ? config() : config t.field(fieldName, finalConfig) }, }) }