使用插入的变量将gql函数转换为字符串

时间:2018-11-17 12:25:50

标签: reactjs graphql apollo react-apollo apollo-client

我已定义此查询,并在我的应用程序中成功使用它:

export const GET_TEAM = gql`
  query($id: ID!) {
    getTeam(id: $id) {
      ...CompleteTeam
    }
  }
  ${fragments.team}
`

但是想将其用于mocking purpose,为此,我需要这种表示形式:

getTeam(id: 3) {
  id
  name
  isActivated
}

是否有任何简单的方法可以用变量来调用gql

suggestions如何使用ApolloClient的实例执行此操作。但是,如果可能的话,我宁愿跳过涉及客户端的工作,因为我只会模拟结果数据。

1 个答案:

答案 0 :(得分:0)

在此处进行后续操作:gql函数返回GraphQL Document AST(查询的解析树表示形式)。 AST比字符串更容易使用-至少在复杂的情况下。

对于评论中的问题:进入AST空间后,您可以进行各种转换。例如,可以使用访客模式来完成此操作。 GraphQL.js还带有visit function,可让您替换节点。该代码应作为灵感,不保证它会起作用;)

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空间,但是如注释中所述,您可以按照注释中所述使用打印机。不知道它是否打印出不是文档的东西。