可以合并两个GraphQLSchema实例吗?

时间:2017-08-28 02:12:50

标签: graphql graphql-js

我希望编写一个像Object.assign_.merge这样的函数,但它可以在GraphQLSchema个对象上运行。

假设我有两个GraphQLSchema实例,称之为Base和Other,我想将Other合并到Base中以生成一个新的实例Result

  • 其中一个Base或Other中的字段在Result中按其原始GraphQLFieldConfig
  • 定义
  • 两者中的字段都缩减为其他字段中的GraphQLFieldConfig

看起来好像没有记录的方法来做到这一点。那是对的吗?如果我去了(相当危险的)未记录的路线,我注意到我可以利用该对象的内部属性:

enter image description here,但我不想这样做。

任何建议都将不胜感激。提前谢谢!

3 个答案:

答案 0 :(得分:1)

请检查图书馆merge-graphql-schemas。我想这可能会对你有帮助

答案 1 :(得分:0)

这是我的解决方案:

const { mergeTypes } = require('merge-graphql-schemas');
const { printSchema, parse } = require('graphql');

const typeArray = graphqlSchemas.map(printSchema);
const schema = mergeTypes(typeArray, { all: true });

  try {
    parse(schema);
  } catch (err) {
    console.log(err);
  }

graphqlSchemasGraphQLSchema类型。就我而言,它是数组。

printSchemaGraphQLSchema转换为字符串模板架构。

mergeTypes将所有字​​符串模板架构合并为一个。

为安全起见,请使用try/catch验证架构是否有效。

答案 2 :(得分:0)

使用“ graphql-tools”中的mergeSchemas,您可以合并GraphQLSchema对象

https://www.apollographql.com/docs/graphql-tools/schema-stitching.html#mergeSchemas

import { mergeSchemas } from 'graphql-tools';

const schema = mergeSchemas({
  schemas: [
    chirpSchema,
    authorSchema,
  ],
});