Как объявить строки в enum - PullRequest
0 голосов
/ 12 мая 2018

С graphql, enum может создать предопределенный список элементов, но строки не работают.

Например:

enum Dias {
  lunes
  martes
  miércoles
  jueves
  viernes
  sábado
  domingo
}

Это возвращает ошибку GraphQLError: Syntax Error: Cannot parse the unexpected character "\u00E9".

как можно составить предопределенный список строк?


Редактировать : чтобы получить больше контекста, я хочу отразить схему базы данных, которая выглядит так (с mongoose):

dias: {
  type: String,
  enum: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo'],
  lowercase: true,
  required: true
}

1 Ответ

0 голосов
/ 12 мая 2018

Ваш синтаксис правильный, единственная проблема в том, что символы "é" и "á" не поддерживаются.Спецификация описывает правила именования операций, полей и т. Д. Поддерживаемый шаблон:

/[_A-Za-z][_0-9A-Za-z]*/

Кроме того:

Имена в GraphQL ограничены этимПодмножество возможных символов ASCII для поддержки взаимодействия с как можно большим количеством других систем.

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

РЕДАКТИРОВАТЬ: Вы можете создать собственный скаляр.Вот функция, которая принимает имя, описание и массив и возвращает пользовательский скаляр:

const makeCustomEnumScalar = (name, description, validValues) => {
  const checkValue = (value) => {
    const coerced = String(value)
    if (!validValues.includes(coerced)) {
      throw new TypeError(`${coerced} is not a valid value for scalar ${name}`)
    }
    return coerced  
  }
  return new GraphQLScalarType({
    name,
    description,
    serialize: checkValue,
    parseValue: checkValue,
    parseLiteral: (ast) => checkValue(ast.value),
  })
}

Теперь вы можете сделать что-то вроде:

const DayOfWeek = makeCustomEnumScalar('Day of Week', 'day of week enum', [
  'lunes',
  'martes',
  'miércoles',
  'jueves',
  'viernes',
  'sábado',
  'domingo'
])

Добавить его в свои средства распознавания:

const resolvers = {
  DayOfWeek,
  // Query, Mutation, etc.
}

И ваши определения типов:

scalar DayOfWeek

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

...