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