如何从解析的graphql中删除不需要的节点?
例如,如果我有如下代码:如何从解析的graphql中删除不需要的节点?,graphql,graphql-js,Graphql,Graphql Js,例如,如果我有如下代码: import gql from 'graphql-tag' const getUserMeta = /* GraphQL */ ` query GetUserMeta($owner: String!) { getUserMeta(owner: $owner) { familyName givenName workAddress facebookUrl owner createdAt
import gql from 'graphql-tag'
const getUserMeta = /* GraphQL */ `
query GetUserMeta($owner: String!) {
getUserMeta(owner: $owner) {
familyName
givenName
workAddress
facebookUrl
owner
createdAt
updatedAt
careers {
items {
id
company
companyUrl
showCompany
owner
createdAt
updatedAt
}
nextToken
}
}
}
`;
const ast = gql(getUserMeta)
// for example if I want to remove the `showCompany` node
// I expect some method like this would work... but there is no such a method..
// ast.removeNodeByPath('GetUserMeta.careers.showCompany')
apolloClient.query(query:ast, variables: {limit: 100})
请看这里:
graphql js
库提供了操作AST的函数
我建议使用该页面上记录的visitor
功能
下面是一段代码,它使用访问者添加一些东西(这正是我作为产品的一部分所拥有的东西),它可以为您提供一个开始使用的模型
let editedAst = visit(stage.graphQLDocument, {
SelectionSet: {
leave(node, key, parent, path, ancestors) {
if (
ancestors.length === 5 &&
(ancestors[2] as OperationDefinitionNode).kind ===
'OperationDefinition' &&
(ancestors[3] as SelectionSetNode).kind === 'SelectionSet'
) {
if (
node.selections.find((s) => {
return (s as FieldNode).name.value === CHUNK_ID;
})
) {
return undefined;
}
const fieldChunkId = {
kind: 'Field',
directives: [],
name: { kind: 'Name', value: CHUNK_ID },
};
return {
...node,
selections: [...node.selections, fieldChunkId],
};
}
},
},
如果您从查询中删除字段
showCompany
,那么输出中将不会返回值,您也不必删除它。对于喜欢我的人来说,我创建了一个小库就是为了这个酷!谢谢!!如果您感兴趣,我刚刚提出了另一个关于visit
功能的问题