The main plugin function is the core entry point for the GraphQL Code Generator typescript-resolvers plugin. It processes GraphQL schemas and generates TypeScript resolver signatures.
Processes a GraphQL schema and generates TypeScript resolver type definitions.
/**
* Main GraphQL Code Generator plugin function for generating TypeScript resolver signatures
* @param schema - The GraphQL schema to process
* @param documents - GraphQL documents (queries, mutations, subscriptions) - typically empty for this plugin
* @param config - Configuration options for the plugin
* @returns Plugin output containing generated TypeScript code and metadata
*/
function plugin(
schema: GraphQLSchema,
documents: Types.DocumentFile[],
config: TypeScriptResolversPluginConfig
): Promise<Types.ComplexPluginOutput<{
generatedResolverTypes: RootResolver['generatedResolverTypes'];
}>>;Usage Example:
import { buildSchema } from 'graphql';
import { plugin } from '@graphql-codegen/typescript-resolvers';
const schema = buildSchema(`
type Query {
users: [User!]!
user(id: ID!): User
}
type User {
id: ID!
name: String!
email: String!
}
`);
const result = await plugin(schema, [], {
contextType: './context#Context',
mappers: {
User: './models#UserModel'
}
});
// result.content contains the generated TypeScript code
// result.prepend contains import statements
// result.meta contains metadata about generated typesThe plugin returns a complex output object containing generated code and metadata.
interface Types.ComplexPluginOutput<TMeta = {}> {
/** The main generated content */
content: string;
/** Import statements and other code to prepend */
prepend: string[];
/** Additional metadata about the generation */
meta: TMeta;
}The plugin provides metadata about the generated resolver types.
interface RootResolver {
generatedResolverTypes: Record<string, string>;
}Example Generated Output:
// Example of what the plugin generates
export type ResolverFn<TResult, TParent, TContext, TArgs> = (
parent: TParent,
args: TArgs,
context: TContext,
info: GraphQLResolveInfo
) => Promise<TResult> | TResult;
export type QueryResolvers<ContextType = Context, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {
users?: Resolver<Array<UserModel>, ParentType, ContextType>;
user?: Resolver<Maybe<UserModel>, ParentType, ContextType, RequireFields<QueryUserArgs, 'id'>>;
};
export type UserResolvers<ContextType = Context, ParentType extends ResolversParentTypes['User'] = ResolversParentTypes['User']> = {
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
name?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
email?: Resolver<ResolversTypes['String'], ParentType, ContextType>;
};
export type Resolvers<ContextType = Context> = {
Query?: QueryResolvers<ContextType>;
User?: UserResolvers<ContextType>;
};The plugin performs several key processing steps:
Advanced Usage with Federation:
const result = await plugin(schema, [], {
federation: true,
contextType: './context#Context',
mappers: {
User: './models#UserModel'
}
});
// Generates additional Federation-specific types like ReferenceResolverAdvanced Usage with Custom Resolver Function:
const result = await plugin(schema, [], {
customResolverFn: './types#CustomResolver',
contextType: './context#Context'
});
// Uses custom resolver function signature instead of default ResolverFn