将 GraphQL 查询转换为带有类型名的字符串

Convert GraphQL query to string with typename

我正在使用 Pact 通过 graphql(Apollo) 客户端模拟我们的服务器端。在手动尝试一些示例后,我确实注意到我们当前的大部分代码都执行如下导出:

import { gql } from '@apollo/client';

export const GET_USER_DETAILS = gql`
  query GetUserDetails {
    current_user {
      id
      first_name
      last_name
      username
      email
      gender
      birth_date
      home_phone
      mobile_phone
      }
  }
`;

我的问题是如何将其转换回字符串表示以提供给 Pact 的 withQuery 方法?

额外的复杂性是我们正在使用 Apollo 缓存,这意味着我需要将 __typename 添加到我使用

的每个文档中
import { addTypenameToDocument } from '@apollo/client/utilities';
addTypenameToDocument(GET_USER_DETAILS)

我试过 addTypenameToDocument(GET_USER_DETAILS).loc.source.body - 这里没有 __typename,这导致 Pact 由于期望和实际查询的差异而无法模拟。

使用 graphql 包中的 print(您应该已经安装了)。

import { print } from 'graphql';

console.log(print(GET_USER_DETAILS));