Преобразовать функцию gql в строку со вставленными переменными - PullRequest
0 голосов
/ 17 ноября 2018

Я определил этот запрос и успешно использую его в своем приложении:

export const GET_TEAM = gql`
  query($id: ID!) {
    getTeam(id: $id) {
      ...CompleteTeam
    }
  }
  ${fragments.team}
`

Но хотел бы использовать его для насмешливой цели , и для этого мне нужно это представление:

getTeam(id: 3) {
  id
  name
  isActivated
}

Есть ли простой способ вызвать gql с переменными для выполнения?

Есть предложения , как это сделать с экземпляром ApolloClient. Но если это возможно, я бы предпочел пропустить участие клиента, поскольку я буду только насмехаться над полученными данными.

1 Ответ

0 голосов
/ 19 ноября 2018

Здесь следует немного поработать: функция gql возвращает документ GraphQL AST (синтаксический анализ запроса в виде дерева).С AST работать гораздо проще, чем со строками - по крайней мере, когда это становится более сложным.

На ваш вопрос в комментарии: Оказавшись в пространстве AST, вы можете выполнять все виды преобразований.Это может быть сделано, например, с помощью шаблона посетителя.GraphQL.js также поставляется с visit функцией , которая позволяет заменять узлы.Этот код должен служить источником вдохновения, никаких гарантий того, что он работает;)

function valueToNode(value) {
  if (typeof value === 'string') {
    return { kind: 'StringValue', value };
  } else if (typeof value === 'number' && Number.isInteger(value)) {
    // return integer value node
  }
  // all other value nodes...
}

visit(ast, {
  VariableNode: {
    enter(node) {
      return valueToNode(variables[node.name.value]);
    }
  }
}

Я не уверен, следует ли вам покинуть пространство AST, но, как описано в комментарии, вы можете использовать принтер, как указано в комментарии.,Не уверен, печатает ли он вещи, которые не являются документами.

...