Это довольно конкретный c вариант использования. Базовая библиотека не имеет никакой подобной вспомогательной функции, и вряд ли любая другая библиотека будет.
Чтобы написать свою собственную функцию, вы бы вызвали parse
в рассматриваемой строке запроса. Затем вы бы захватили первое определение в узле документа и отобразили его набор выбора в отдельные документы. Что-то вроде:
const { parse, print } = require('graphql')
const originalDocument = parse(query)
const operationDefinition = originalDocument.definitions[0]
const selections = operationDefinition.selectionSet.selections
const splitQueries = selections.map(selection => print(
...originalDocument,
definitions: [
{
...operationDefinition,
selectionSet: {
...operationDefinition.selectionSet,
selections: [selection]
}
}
]
))
Однако это будет работать только для очень простых запросов. Если у вас есть переменные, вам нужно пройтись по каждому результирующему документу и удалить все неиспользуемые переменные. Точно так же, если вы используете фрагменты, вам нужно убедиться, что они включены в definitions
, но только если они действительно используются внутри операции.