Перейти к содержимому

Генератор сигнатур резолверов GraphQL — Numio

Генерирует сигнатуры типов резолверов для GraphQL-схемы: TypeScript (по умолчанию, typescript-resolvers), Flow (flow-resolvers) или Java (java-resolvers). Вывод TypeScript включает карту Resolvers с одним типизированным объектом резолверов на каждый тип схемы.

Типизировать объект резолверов, передаваемый в Apollo Server или graphql-yoga, чтобы проверялись parent, args и возвращаемые значения.

GraphQL Schema

Когда пригодится

  • Типизировать объект резолверов, передаваемый в Apollo Server или graphql-yoga, чтобы проверялись parent, args и возвращаемые значения.
  • Получить интерфейсы DataFetcher для graphql-java по каждому типу с вариантом JAVA Resolvers Signature.

Как пользоваться

  1. Вставьте схему в редактор GraphQL Schema.
  2. Выберите в выпадающем списке вывода TypeScript Resolvers Signature, Flow Resolvers Signature или JAVA Resolvers Signature.
  3. Скопируйте вывод; для TypeScript аннотируйте карту резолверов сгенерированным типом Resolvers.

GraphQL-схема

type Query {
  user(id: ID!): User
}

type User {
  id: ID!
  name: String
}

Сигнатуры резолверов

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>
}
…

Подробности и ограничения

Сгенерированные типы, такие как QueryResolvers, имеют ContextType = any; обязательные аргументы типизируются через RequireFields, а резолверы объектов содержат необязательный __isTypeOf.

Используется только схема. Сигнатуры резолверов не зависят от операций, поэтому редактора Documents на странице нет.

Вариант Java выводит public interface с методами DataFetcher внутри public class Resolvers в пакете com.example.graphql. Всё выполняется в Web Worker в браузере.

FAQ

Как задать собственный тип контекста?

На странице нет опций mapper и contextType. Передайте свой тип контекста как generic-параметр, например Resolvers<MyContext>, поскольку каждый сгенерированный тип резолвера принимает ContextType.

Почему все поля резолверов необязательны?

typescript-resolvers по умолчанию помечает каждый резолвер поля как необязательный, потому что GraphQL-серверы используют резолверы по умолчанию, читающие свойство из родительского объекта.

Как вариант Java типизирует поля ID?

Поля типа ID и объектных типов возвращаются как DataFetcher<Object>; поля String становятся DataFetcher<String>.

Спецификации и справка