Учитывая запрос GraphQL, подобный следующему:
{
a {
b,
c: { x, y }
}
}
Где a
, b
и c
являются типами, есть прямой способ получить вовлеченные типы в этом запросе в корневой функции?
const root = {
a: (x, y, z) => {
// I want to know that the query involves a, b and c
}
}
Я уже проверил, могу ли я просматривать контекстную информацию и рекурсивно получать эту информацию, но я игнорирую, если уже есть какой-то подход, чтобы легко получить то, что я ищу.
Обновление
После двойной проверки документов я обнаружил, что могу использовать шаблон посетителя для обхода данного GraphQL AST.
const { visit } = require('graphql/language/visitor')
const root = {
a: (x, y, ast) => {
visit(ast.operation, {
enter(node) {
if (node.kind == 'Name') {
console.log(node.value)
}
}
})
}
Это даст a, b, c, x, y
, но я все еще выясняю, как получить типы GraphQL узлов.