如何从解析的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
功能的问题