Как получить имя запроса из объекта `gql`? - PullRequest
0 голосов
/ 11 октября 2019

Я использую gql из graphql-tag . Допустим, у меня есть объект gql, определенный следующим образом:

const QUERY_ACCOUNT_INFO = gql`
  query AccountInfo {
    viewer {
      lastname
      firstname
      email
      phone
      id
    }
  }
`

Должен быть способ получить AccountInfo от него. Как я могу это сделать?

1 Ответ

2 голосов
/ 11 октября 2019

То, что возвращается gql, является DocumentNode объектом. Документ GraphQL может включать несколько определений, но, предполагая, что он имеет только одно определение и является операцией, вы можете просто сделать:

const operation = doc.definitions[0]
const operationName = operation && operation.name

Если мы разрешаем, что могут быть фрагменты, мы, вероятно, захотим сделать:

const operation = doc.definitions.find((def) => def.kind === 'OperationDefinition')
const operationName = operation && operation.name

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

Базовая библиотека также предоставляет служебную функцию:

const { getOperationAST } = require('graphql')
const operation = getOperationAST(doc)
const operationName = operation && operation.name
...