最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

有没有办法将graphql查询字符串转换为GraphQLResolveInfo对象?

IT培训 admin 7浏览 0评论

有没有办法将graphql查询字符串转换为GraphQLResolveInfo对象?

我编写了一个软件来解析和格式化graphql解析器函数(信息对象)的第四个参数,以便在别处使用。我想为这个软件编写单元测试。具体来说,我不想自己构建GraphQLResolveInfo对象,因为这样做会非常麻烦,容易出错且难以维护。相反,我想编写人类可读的查询字符串并将它们转换为GraphQLResolveInfo对象,以便我可以将它们传递给我的软件。

经过广泛的谷歌搜索和阅读graphql-js源代码后,我还没有找到一种简单的方法来做他们在内部做的事情。我真的希望我错过了一些东西。

我不想做的是使用graphql-tag库,因为它只生成一个AST,其格式与GraphQLResolveInfo类型完全不同。

有没有人这样做过?非常感谢帮助!

回答如下:

我将继续监控这个问题,看看是否有更好的答案,但我终于设法通过创建GraphQLResolveInfo对象的近似来解决我的特定问题,因为我需要特定的用例。

GraphQLResolveInfo对象由几个属性组成,其中两个属性称为fieldNodesfragments。两者实际上是graphql-tag从查询字符串生成的相同AST的一部分。这些是与我编写的软件有关的GraphQLResolveInfo对象的唯一部分,其余部分被忽略。

所以这就是我所做的:

import gql from 'graphql-tag';

// The converter function
const convertQueryToResolveInfo = (query) => {
    const operation = query.definitions
        .find(({ kind }) => kind === 'OperationDefinition');
    const fragments = query.definitions
        .filter(({ kind }) => kind === 'FragmentDefinition')
        .reduce((result, current) => ({
            ...result,
            [current.name.value]: current,
        }), {});

    return {
        fieldNodes: operation.selectionSet.selections,
        fragments,
    };
};

// An example call
const query = gql`
    query {
        foo {
            bar
        }
    }
`;
const info = convertQueryToResolveInfo(query);

graphql-tag生成的AST中,我提取并修改了操作和片段定义,以便它们看起来像在GraphQLResolveInfo对象中那样。这绝不是完美的,将来可能会有所变化,具体取决于我的软件如何发展,但对于我的特定问题,这是一个相对简短的解决方案。

有没有办法将graphql查询字符串转换为GraphQLResolveInfo对象?

我编写了一个软件来解析和格式化graphql解析器函数(信息对象)的第四个参数,以便在别处使用。我想为这个软件编写单元测试。具体来说,我不想自己构建GraphQLResolveInfo对象,因为这样做会非常麻烦,容易出错且难以维护。相反,我想编写人类可读的查询字符串并将它们转换为GraphQLResolveInfo对象,以便我可以将它们传递给我的软件。

经过广泛的谷歌搜索和阅读graphql-js源代码后,我还没有找到一种简单的方法来做他们在内部做的事情。我真的希望我错过了一些东西。

我不想做的是使用graphql-tag库,因为它只生成一个AST,其格式与GraphQLResolveInfo类型完全不同。

有没有人这样做过?非常感谢帮助!

回答如下:

我将继续监控这个问题,看看是否有更好的答案,但我终于设法通过创建GraphQLResolveInfo对象的近似来解决我的特定问题,因为我需要特定的用例。

GraphQLResolveInfo对象由几个属性组成,其中两个属性称为fieldNodesfragments。两者实际上是graphql-tag从查询字符串生成的相同AST的一部分。这些是与我编写的软件有关的GraphQLResolveInfo对象的唯一部分,其余部分被忽略。

所以这就是我所做的:

import gql from 'graphql-tag';

// The converter function
const convertQueryToResolveInfo = (query) => {
    const operation = query.definitions
        .find(({ kind }) => kind === 'OperationDefinition');
    const fragments = query.definitions
        .filter(({ kind }) => kind === 'FragmentDefinition')
        .reduce((result, current) => ({
            ...result,
            [current.name.value]: current,
        }), {});

    return {
        fieldNodes: operation.selectionSet.selections,
        fragments,
    };
};

// An example call
const query = gql`
    query {
        foo {
            bar
        }
    }
`;
const info = convertQueryToResolveInfo(query);

graphql-tag生成的AST中,我提取并修改了操作和片段定义,以便它们看起来像在GraphQLResolveInfo对象中那样。这绝不是完美的,将来可能会有所变化,具体取决于我的软件如何发展,但对于我的特定问题,这是一个相对简短的解决方案。

发布评论

评论列表 (0)

  1. 暂无评论