makeExecutableSchema сбоев GraphQl-инструментов с AWSDateTime в схеме - PullRequest
0 голосов
/ 07 марта 2020

Я использую GraphQl-инструменты для проверки ответа от Appsyn c, и это сбой для схемы, которая имеет AWSDateTime в качестве типа данных некоторых полей. Вот ошибка, которую я получаю:

Uncaught Error: Неизвестный тип "AWSDateTime".

Неизвестный тип "AWSDateTime".

Неизвестный тип "AWSDateTime".

И это код, для которого он не работает:

import { SchemaLink } from "apollo-link-schema";
import { makeExecutableSchema, addMockFunctionsToSchema } from "graphql-tools";

const typeDefs = `
type Dates {
    createdAt: AWSDateTime
    updatedAt: AWSDateTime
}

type Query {
    getDates(id: ID!): Dates
}`;
const schema = makeExecutableSchema({ typeDefs });

Есть идеи, как я могу решить эту проблему? Я знаю, что AWSDateTime - это скалярный тип, определенный специально для appsyn c, поэтому он может не работать. Но есть ли обходной путь. С клиентом ApolloLink все работает просто отлично.

1 Ответ

1 голос
/ 07 марта 2020

Каждый используемый вами скаляр, за исключением 5 встроенных скаляров, должен быть явно определен внутри вашей схемы. Это двухэтапный процесс:

Во-первых, добавьте определение типа:

scalar AWSDateTime

Во-вторых, предоставьте объект GraphQLScalarType, который инкапсулирует логи синтаксического анализа и сериализации c скаляра , С makeExecutableSchema это обеспечивается с помощью карты разрешения.

const resolvers = {
  ...
  AWSDateTime: new GraphQLScalarType({ ... }),
}

См. документы для получения дополнительной информации. Если логика сериализации и парсинга c на самом деле не имеет значения, потому что в любом случае это просто для насмешки, то вы можете использовать методы существующего скаляра, например String.

const resolvers = {
  ...
  AWSDateTime: new GraphQLScalarType({
    name: 'AWSDateTime',
    parseValue: GraphQLString.parseValue,
    parseLiteral: GraphQLString.parseLiteral,
    serialize: GraphQLString.serialize,
  }),
}
...