graphql-compose
Version:
GraphQL schema builder from different data sources with middleware extensions.
253 lines • 18.2 kB
TypeScript
import { GraphQLObjectType, GraphQLInputObjectType, GraphQLInterfaceType } from './graphql';
import type { GraphQLFieldConfig, GraphQLOutputType, GraphQLInputType, GraphQLIsTypeOfFn, GraphQLResolveInfo, GraphQLFieldResolver, FieldDefinitionNode, InputValueDefinitionNode } from './graphql';
import { InputTypeComposer } from './InputTypeComposer';
import type { TypeAsString, TypeDefinitionString } from './TypeMapper';
import { InterfaceTypeComposer, InterfaceTypeComposerDefinition, InterfaceTypeComposerThunked } from './InterfaceTypeComposer';
import { Resolver, ResolverDefinition, ResolverNextRpCb, ResolverWrapCb, ResolverMiddleware } from './Resolver';
import { SchemaComposer } from './SchemaComposer';
import { ListComposer } from './ListComposer';
import { NonNullComposer } from './NonNullComposer';
import { ThunkComposer } from './ThunkComposer';
import type { ToInputTypeOpts } from './utils/toInputType';
import { TypeInPath } from './utils/typeByPath';
import { NamedTypeComposer } from './utils/typeHelpers';
import type { ProjectionType } from './utils/projection';
import type { ObjMap, ThunkWithSchemaComposer, Extensions, Directive, DirectiveArgs } from './utils/definitions';
import type { ComposeNamedInputType, ComposeInputType, ComposeInputTypeDefinition, ComposeOutputTypeDefinition, ComposeOutputType, ComposeNamedOutputType } from './utils/typeHelpers';
import { SchemaPrinterOptions } from './utils/schemaPrinter';
export declare type ObjectTypeComposerDefinition<TSource, TContext> = TypeAsString | TypeDefinitionString | ObjectTypeComposerAsObjectDefinition<TSource, TContext> | Readonly<ObjectTypeComposer<TSource, TContext>> | Readonly<GraphQLObjectType>;
export declare type ObjectTypeComposerAsObjectDefinition<TSource, TContext> = {
name: string;
interfaces?: null | ThunkWithSchemaComposer<ReadonlyArray<InterfaceTypeComposerDefinition<any, TContext>>, SchemaComposer<TContext>>;
fields?: ObjectTypeComposerFieldConfigMapDefinition<TSource, TContext>;
isTypeOf?: null | GraphQLIsTypeOfFn<TSource, TContext>;
description?: string | null;
isIntrospection?: boolean;
extensions?: Extensions;
directives?: Directive[];
};
export declare type ObjectTypeComposerFieldConfigMap<TSource, TContext> = ObjMap<ObjectTypeComposerFieldConfig<TSource, TContext>>;
export declare type ObjectTypeComposerFieldConfigMapDefinition<TSource, TContext> = ObjMap<ObjectTypeComposerFieldConfigDefinition<TSource, TContext>>;
export declare type ObjectTypeComposerFieldConfigDefinition<TSource, TContext, TArgs = any> = ThunkWithSchemaComposer<ObjectTypeComposerFieldConfigAsObjectDefinition<TSource, TContext, TArgs>, SchemaComposer<TContext>> | ThunkWithSchemaComposer<ComposeOutputTypeDefinition<TContext>, SchemaComposer<TContext>>;
export declare type ObjectTypeComposerFieldConfigAsObjectDefinition<TSource, TContext, TArgs = any> = {
type: ThunkWithSchemaComposer<ComposeOutputTypeDefinition<TContext> | Readonly<Resolver<any, TContext, any>>, SchemaComposer<TContext>>;
args?: ObjectTypeComposerArgumentConfigMapDefinition<TArgs>;
resolve?: GraphQLFieldResolver<TSource, TContext, TArgs>;
subscribe?: GraphQLFieldResolver<TSource, TContext>;
deprecationReason?: string | null;
description?: string | null;
extensions?: Extensions | undefined;
directives?: Directive[];
[key: string]: any;
};
export declare type ObjectTypeComposerFieldConfig<TSource, TContext, TArgs = any> = {
type: ComposeOutputType<TContext>;
args?: ObjectTypeComposerArgumentConfigMap<TArgs>;
resolve?: GraphQLFieldResolver<TSource, TContext, TArgs>;
subscribe?: GraphQLFieldResolver<TSource, TContext>;
deprecationReason?: string | null;
description?: string | null;
astNode?: FieldDefinitionNode | null;
extensions?: Extensions;
directives?: Directive[];
[key: string]: any;
};
export declare type ObjectTypeComposerArgumentConfigMap<TArgs = Record<string, any>> = Record<keyof TArgs, ObjectTypeComposerArgumentConfig>;
export declare type ObjectTypeComposerArgumentConfigMapDefinition<TArgs = Record<string, any>> = Record<keyof TArgs, ObjectTypeComposerArgumentConfigDefinition>;
export declare type ObjectTypeComposerArgumentConfigAsObjectDefinition = {
type: ThunkWithSchemaComposer<ComposeInputTypeDefinition, SchemaComposer<any>>;
defaultValue?: any;
description?: string | null;
deprecationReason?: string | null;
extensions?: Extensions;
directives?: Directive[];
[key: string]: any;
};
export declare type ObjectTypeComposerArgumentConfig = {
type: ComposeInputType;
defaultValue?: any;
description?: string | null;
deprecationReason?: string | null;
astNode?: InputValueDefinitionNode | null;
extensions?: Extensions;
directives?: Directive[];
[key: string]: any;
};
export declare type ObjectTypeComposerArgumentConfigDefinition = ObjectTypeComposerArgumentConfigAsObjectDefinition | ThunkWithSchemaComposer<ComposeInputTypeDefinition, SchemaComposer<any>>;
export declare type ObjectTypeComposerRelationMap<TSource, TContext> = {
[fieldName: string]: ObjectTypeComposerRelationOpts<any, TSource, TContext>;
};
export declare type ObjectTypeComposerRelationOpts<TRelationSource, TSource, TContext, TArgs extends Record<string, any> = any> = ObjectTypeComposerRelationOptsWithResolver<TRelationSource, TSource, TContext, TArgs> | ObjectTypeComposerFieldConfigAsObjectDefinition<TSource, TContext, TArgs>;
export declare type ObjectTypeComposerRelationOptsWithResolver<TRelationSource, TSource, TContext, TArgs extends Record<string, any> = any> = {
resolver: ThunkWithSchemaComposer<Resolver<TRelationSource, TContext, TArgs>, SchemaComposer<TContext>>;
prepareArgs?: ObjectTypeComposerRelationArgsMapper<TSource, TContext, TArgs>;
projection?: ProjectionType;
description?: string | null;
deprecationReason?: string | null;
catchErrors?: boolean;
extensions?: Extensions;
directives?: Directive[];
};
export declare type ObjectTypeComposerRelationArgsMapperFn<TSource, TContext, TArgs = Record<string, any>> = (source: TSource, args: TArgs, context: TContext, info: GraphQLResolveInfo) => any;
export declare type ObjectTypeComposerRelationArgsMapper<TSource, TContext, TArgs extends Record<string, any> = Record<string, any>> = {
[argName in keyof TArgs]: {
[key: string]: any;
} | ObjectTypeComposerRelationArgsMapperFn<TSource, TContext, TArgs> | null | void | string | number | any[];
};
export declare type ObjectTypeComposerGetRecordIdFn<TSource, TContext, TArgs = any> = (source: TSource, args?: TArgs, context?: TContext) => string;
export declare type ObjectTypeComposerThunked<TReturn, TContext> = ObjectTypeComposer<TReturn, TContext> | ThunkComposer<ObjectTypeComposer<TReturn, TContext>, GraphQLObjectType>;
export declare class ObjectTypeComposer<TSource = any, TContext = any> {
schemaComposer: SchemaComposer<TContext>;
_gqType: GraphQLObjectType;
_gqcInputTypeComposer: undefined | InputTypeComposer<TContext>;
_gqcResolvers: undefined | Map<string, Resolver<TSource, TContext>>;
_gqcGetRecordIdFn: undefined | ObjectTypeComposerGetRecordIdFn<TSource, TContext>;
_gqcRelations: undefined | ObjectTypeComposerRelationMap<TSource, TContext>;
_gqcFields: ObjectTypeComposerFieldConfigMap<TSource, TContext>;
_gqcInterfaces: Array<InterfaceTypeComposerThunked<TSource, TContext>>;
_gqcExtensions?: Extensions;
_gqcDirectives?: Directive[];
_gqcIsModified?: boolean;
static create<TSrc = any, TCtx = any>(typeDef: ObjectTypeComposerDefinition<TSrc, TCtx>, schemaComposer: SchemaComposer<TCtx>): ObjectTypeComposer<TSrc, TCtx>;
static createTemp<TSrc = any, TCtx = any>(typeDef: ObjectTypeComposerDefinition<TSrc, TCtx>, schemaComposer?: SchemaComposer<TCtx>): ObjectTypeComposer<TSrc, TCtx>;
constructor(graphqlType: GraphQLObjectType, schemaComposer: SchemaComposer<TContext>);
getFields(): ObjectTypeComposerFieldConfigMap<TSource, TContext>;
getFieldNames(): string[];
getField<TArgs = any>(fieldName: string): ObjectTypeComposerFieldConfig<TSource, TContext, TArgs>;
hasField(fieldName: string): boolean;
setFields(fields: ObjectTypeComposerFieldConfigMapDefinition<TSource, TContext>): this;
setField<TArgs = any>(fieldName: string, fieldConfig: ObjectTypeComposerFieldConfigDefinition<TSource, TContext, TArgs>): this;
addFields(newFields: ObjectTypeComposerFieldConfigMapDefinition<TSource, TContext>): this;
addNestedFields(newFields: ObjectTypeComposerFieldConfigMapDefinition<TSource, TContext>): this;
removeField(fieldNameOrArray: string | string[]): this;
removeOtherFields(fieldNameOrArray: string | string[]): this;
reorderFields(names: string[]): this;
extendField<TArgs = any>(fieldName: string, partialFieldConfig: Partial<ObjectTypeComposerFieldConfigAsObjectDefinition<TSource, TContext, TArgs>>): this;
getFieldConfig(fieldName: string): GraphQLFieldConfig<TSource, TContext>;
getFieldType(fieldName: string): GraphQLOutputType;
getFieldTypeName(fieldName: string): string;
getFieldTC(fieldName: string): ComposeNamedOutputType<TContext>;
getFieldOTC(fieldName: string): ObjectTypeComposer<TSource, TContext>;
isFieldNonNull(fieldName: string): boolean;
makeFieldNonNull(fieldNameOrArray: string | string[]): this;
makeFieldNullable(fieldNameOrArray: string | string[]): this;
isFieldPlural(fieldName: string): boolean;
makeFieldPlural(fieldNameOrArray: string | string[]): this;
makeFieldNonPlural(fieldNameOrArray: string | string[]): this;
deprecateFields(fields: {
[fieldName: string]: string;
} | string[] | string): this;
getFieldArgs<TArgs = any>(fieldName: string): ObjectTypeComposerArgumentConfigMap<TArgs>;
getFieldArgNames(fieldName: string): string[];
hasFieldArg(fieldName: string, argName: string): boolean;
getFieldArg(fieldName: string, argName: string): ObjectTypeComposerArgumentConfig;
getFieldArgType(fieldName: string, argName: string): GraphQLInputType;
getFieldArgTypeName(fieldName: string, argName: string): string;
getFieldArgTC(fieldName: string, argName: string): ComposeNamedInputType<TContext>;
getFieldArgITC(fieldName: string, argName: string): InputTypeComposer<TContext>;
setFieldArgs(fieldName: string, args: ObjectTypeComposerArgumentConfigMapDefinition<any>): this;
addFieldArgs(fieldName: string, newArgs: ObjectTypeComposerArgumentConfigMapDefinition<any>): this;
setFieldArg(fieldName: string, argName: string, argConfig: ObjectTypeComposerArgumentConfigDefinition): this;
removeFieldArg(fieldName: string, argNameOrArray: string | string[]): this;
removeFieldOtherArgs(fieldName: string, argNameOrArray: string | string[]): this;
isFieldArgPlural(fieldName: string, argName: string): boolean;
makeFieldArgPlural(fieldName: string, argNameOrArray: string | string[]): this;
makeFieldArgNonPlural(fieldName: string, argNameOrArray: string | string[]): this;
isFieldArgNonNull(fieldName: string, argName: string): boolean;
makeFieldArgNonNull(fieldName: string, argNameOrArray: string | string[]): this;
makeFieldArgNullable(fieldName: string, argNameOrArray: string | string[]): this;
getType(): GraphQLObjectType;
getTypePlural(): ListComposer<ObjectTypeComposer<TSource, TContext>>;
getTypeNonNull(): NonNullComposer<ObjectTypeComposer<TSource, TContext>>;
get List(): ListComposer<ObjectTypeComposer<TSource, TContext>>;
get NonNull(): NonNullComposer<ObjectTypeComposer<TSource, TContext>>;
getTypeName(): string;
setTypeName(name: string): this;
getDescription(): string;
setDescription(description: string): this;
clone(newTypeNameOrTC: string | ObjectTypeComposer<any, any>): ObjectTypeComposer<TSource, TContext>;
cloneTo(anotherSchemaComposer: SchemaComposer<any>, cloneMap?: Map<any, any>): ObjectTypeComposer<any, any>;
getIsTypeOf(): GraphQLIsTypeOfFn<TSource, TContext> | undefined | null;
setIsTypeOf(fn: GraphQLIsTypeOfFn<any, any> | null | undefined): this;
merge(type: GraphQLObjectType | GraphQLInterfaceType | ObjectTypeComposer<any, any> | InterfaceTypeComposer<any, any>): this;
getInputType(): GraphQLInputObjectType;
hasInputTypeComposer(): boolean;
setInputTypeComposer(itc: InputTypeComposer<TContext>): this;
getInputTypeComposer(opts?: ToInputTypeOpts): InputTypeComposer<TContext>;
getITC(opts?: ToInputTypeOpts): InputTypeComposer<TContext>;
removeInputTypeComposer(): this;
getResolvers(): Map<string, Resolver<any, TContext, any>>;
hasResolver(name: string): boolean;
getResolver<TArgs = any>(name: string, middlewares?: Array<ResolverMiddleware<TSource, TContext, TArgs>>): Resolver<any, TContext, TArgs>;
setResolver(name: string, resolver: Resolver<any, TContext>): this;
addResolver(opts: Resolver<any, TContext> | ResolverDefinition<any, TContext>): this;
removeResolver(resolverName: string): this;
wrapResolver(resolverName: string, cbResolver: ResolverWrapCb<any, TSource, TContext>): this;
wrapResolverAs(resolverName: string, fromResolverName: string, cbResolver: ResolverWrapCb<any, TSource, TContext>): this;
wrapResolverResolve(resolverName: string, cbNextRp: ResolverNextRpCb<any, TContext>): this;
getInterfaces(): Array<InterfaceTypeComposerThunked<TSource, TContext>>;
getInterfacesTypes(): Array<GraphQLInterfaceType>;
setInterfaces(interfaces: ReadonlyArray<InterfaceTypeComposerDefinition<any, TContext>>): this;
hasInterface(iface: InterfaceTypeComposerDefinition<any, TContext>): boolean;
addInterface(iface: InterfaceTypeComposerDefinition<any, TContext> | InterfaceTypeComposerThunked<any, TContext>): this;
addInterfaces(ifaces: ReadonlyArray<InterfaceTypeComposerDefinition<any, TContext> | InterfaceTypeComposerThunked<any, TContext>>): this;
removeInterface(iface: InterfaceTypeComposerDefinition<any, TContext>): this;
getExtensions(): Extensions;
setExtensions(extensions: Extensions | undefined): this;
extendExtensions(extensions: Extensions): this;
clearExtensions(): this;
getExtension(extensionName: string): unknown;
hasExtension(extensionName: string): boolean;
setExtension(extensionName: string, value: unknown): this;
removeExtension(extensionName: string): this;
getFieldExtensions(fieldName: string): Extensions;
setFieldExtensions(fieldName: string, extensions: Extensions): this;
extendFieldExtensions(fieldName: string, extensions: Extensions): this;
clearFieldExtensions(fieldName: string): this;
getFieldExtension(fieldName: string, extensionName: string): unknown;
hasFieldExtension(fieldName: string, extensionName: string): boolean;
setFieldExtension(fieldName: string, extensionName: string, value: unknown): this;
removeFieldExtension(fieldName: string, extensionName: string): this;
getFieldArgExtensions(fieldName: string, argName: string): Extensions;
setFieldArgExtensions(fieldName: string, argName: string, extensions: Extensions): this;
extendFieldArgExtensions(fieldName: string, argName: string, extensions: Extensions): this;
clearFieldArgExtensions(fieldName: string, argName: string): this;
getFieldArgExtension(fieldName: string, argName: string, extensionName: string): unknown;
hasFieldArgExtension(fieldName: string, argName: string, extensionName: string): boolean;
setFieldArgExtension(fieldName: string, argName: string, extensionName: string, value: unknown): this;
removeFieldArgExtension(fieldName: string, argName: string, extensionName: string): this;
getDirectives(): Array<Directive>;
setDirectives(directives: Array<Directive>): this;
getDirectiveNames(): string[];
getDirectiveByName(directiveName: string): DirectiveArgs | undefined;
setDirectiveByName(directiveName: string, args?: DirectiveArgs): this;
getDirectiveById(idx: number): DirectiveArgs | undefined;
getFieldDirectives(fieldName: string): Array<Directive>;
setFieldDirectives(fieldName: string, directives: Array<Directive> | undefined): this;
getFieldDirectiveNames(fieldName: string): string[];
getFieldDirectiveByName(fieldName: string, directiveName: string): DirectiveArgs | undefined;
setFieldDirectiveByName(fieldName: string, directiveName: string, args?: DirectiveArgs): this;
getFieldDirectiveById(fieldName: string, idx: number): DirectiveArgs | undefined;
getFieldArgDirectives(fieldName: string, argName: string): Array<Directive>;
setFieldArgDirectives(fieldName: string, argName: string, directives: Array<Directive>): this;
getFieldArgDirectiveNames(fieldName: string, argName: string): string[];
getFieldArgDirectiveByName(fieldName: string, argName: string, directiveName: string): DirectiveArgs | undefined;
setFieldArgDirectiveByName(fieldName: string, argName: string, directiveName: string, args?: DirectiveArgs): this;
getFieldArgDirectiveById(fieldName: string, argName: string, idx: number): DirectiveArgs | undefined;
addRelation<TArgs extends Record<string, any> = any>(fieldName: string, opts: Readonly<ObjectTypeComposerRelationOpts<any, TSource, TContext, TArgs>>): this;
getRelations(): ObjectTypeComposerRelationMap<any, TContext>;
_relationWithResolverToFC(opts: ObjectTypeComposerRelationOptsWithResolver<any, TSource, TContext, any>, fieldName?: string): ObjectTypeComposerFieldConfig<TSource, TContext, any>;
setRecordIdFn(fn: ObjectTypeComposerGetRecordIdFn<TSource, TContext>): this;
hasRecordIdFn(): boolean;
getRecordIdFn(): ObjectTypeComposerGetRecordIdFn<TSource, TContext>;
getRecordId(source: TSource, args?: Record<string, any>, context?: TContext): string | number;
get(path: string | string[]): TypeInPath<TContext> | void;
getNestedTCs(opts?: {
exclude?: string[];
}, passedTypes?: Set<NamedTypeComposer<any>>): Set<NamedTypeComposer<any>>;
toSDL(opts?: SchemaPrinterOptions & {
deep?: boolean;
exclude?: string[];
}): string;
}
//# sourceMappingURL=ObjectTypeComposer.d.ts.map