Gerar assinaturas de resolvers GraphQL — Numio
Gera assinaturas de tipos de resolvers para um schema GraphQL: TypeScript (padrão, typescript-resolvers), Flow (flow-resolvers) ou Java (java-resolvers). A saída TypeScript inclui um mapa Resolvers com um objeto resolver tipado para cada tipo do schema.
Tipar o objeto de resolvers passado ao Apollo Server ou ao graphql-yoga para que parent, args e valores de retorno sejam verificados.
Quando usar
- Tipar o objeto de resolvers passado ao Apollo Server ou ao graphql-yoga para que parent, args e valores de retorno sejam verificados.
- Obter interfaces DataFetcher do graphql-java para cada tipo com a opção JAVA Resolvers Signature.
Como usar
- Cole o schema no editor GraphQL Schema.
- Escolha TypeScript Resolvers Signature, Flow Resolvers Signature ou JAVA Resolvers Signature no menu de saída.
- Copie a saída; no TypeScript, anote seu mapa de resolvers com o tipo Resolvers gerado.
Schema GraphQL
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String
}Assinaturas de resolvers
import { GraphQLResolveInfo } from "graphql"
…
export type QueryResolvers<
ContextType = any,
ParentType extends
ResolversParentTypes["Query"] = ResolversParentTypes["Query"],
> = {
user?: Resolver<
Maybe<ResolversTypes["User"]>,
ParentType,
ContextType,
RequireFields<QueryUserArgs, "id">
>
}
export type UserResolvers<
ContextType = any,
ParentType extends
ResolversParentTypes["User"] = ResolversParentTypes["User"],
> = {
id?: Resolver<ResolversTypes["ID"], ParentType, ContextType>
name?: Resolver<Maybe<ResolversTypes["String"]>, ParentType, ContextType>
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
}
…Detalhes e limitações
Tipos gerados como QueryResolvers têm ContextType = any; argumentos obrigatórios são tipados com RequireFields, e resolvers de objeto incluem um __isTypeOf opcional.
Apenas o schema é usado. Assinaturas de resolvers não dependem de operações, então a página não tem editor Documents.
A opção Java gera public interfaces de métodos DataFetcher dentro de public class Resolvers, no pacote com.example.graphql. Tudo roda em um Web Worker do navegador.
FAQ
Como defino meu próprio tipo de contexto?
A página não tem opções de mappers nem contextType. Passe seu tipo de contexto como genérico, por exemplo Resolvers<MyContext>, já que todo tipo de resolver gerado aceita ContextType.
Por que todos os campos de resolver são opcionais?
O typescript-resolvers marca cada resolver de campo como opcional por padrão, porque servidores GraphQL recorrem a resolvers padrão que leem a propriedade do objeto pai.
Como a opção Java tipa campos ID?
Campos do tipo ID e tipos de objeto são retornados como DataFetcher<Object>; campos String viram DataFetcher<String>.