Преобразовать функцию gql в строку со вставленными переменными

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

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

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

getTeam(id: 3) {
  id
  name
  isActivated
}

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

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

1 ответ

Чтобы продолжить здесь немного: 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, но, как описано в комментарии, вы можете использовать принтер, как указано в комментарии. Не уверен, печатает ли он вещи, которые не являются документами.

Другие вопросы по тегам