GraphQLError: ожидаемый тип Int, найденный Int - PullRequest
0 голосов
/ 06 июля 2019

Я столкнулся с новым типом бессмысленных ошибок (Expected type Int, found Int) при выполнении запросов с входными параметрами (не только Ints). Похоже, они появились с начала июня (когда я обновился до graphql@14.3.1?)

Наши настройки немного отличаются, поскольку мы привязываем удаленную схему к локальной (перекрывающиеся типы, если они существуют, или добавляем их, когда их нет).

Кто-нибудь видел этот тип ошибок и знает, как его исправить?

Я отследил проблему до метода parseLiteral файла scalar.js. В данном случае ast.kind равен EnumValue, а его значение равно IntValue

var GraphQLInt = new _definition.GraphQLScalarType({
  name: 'Int',
  description: '...',
  serialize: serializeInt,
  parseValue: coerceInt,
  parseLiteral: function parseLiteral(ast) {
    if (ast.kind === _kinds.Kind.INT) {
      var num = parseInt(ast.value, 10);

      if (num <= MAX_INT && num >= MIN_INT) {
        return num;
      }
    }

    return undefined;
  }
});

Кажется, что синтаксический анализатор произвольно преобразует значение 10 в EnumValue (типа Int), а не IntValue.

Вот типичный запрос

combinedStatus(status: "bad", start:10, end:20) {
        status
        timestamp
      }

Я получаю следующую ошибку: GraphQLError: Expected type Int, found Int. в isValidScalar ./node_modules/graphql/validation/rules/ValuesOfCorrectType.js:180:27

тот же запрос с переменными вернет ожидаемый результат без ошибок:

combinedStatus(status: "bad", start:$start, end:$end) {
        status
        timestamp
      }

Схема:

type CdsHealthCheckLocal implements CdsHealthCheckInterface {
    status: String!
    combinedStatus(status: String, start: Int, end: Int): CdsHealthCheck
}

и соответствующий резольвер:

async (parent, { status, start, end }, context) => { 
        return {
        status: `not sure if I am feeling ${status} (${start}, ${end})`
    }}
...