我正在使用graphql npm包来构建一个graphql模式,该模式包含一个看起来像这样的突变:
type Mutation {
cxUnitCosts_onSave(data: [CxUnitCostInput]): [CxUnitCost]
}
我会这样,假设我有一个包含GraphQLObjectTypes的输入和输出变量:
new GraphQLObjectType({
name: 'Mutation',
fields: {
[camelcase(output.toString())+'s_onSave']: {
args: {data: {type: new GraphQLList(input)},
},
type: new GraphQLList(output)
}
}
})
但是我想要的是扩展类型突变以产生如下内容:
extend type Mutation {
cxUnitCosts_onSave(data: [CxUnitCostInput]): [CxUnitCost]
}
我需要扩展Mutation,因为我将大量构建的架构合并在一起,如果我不合并,那么只有一个突变可以幸免。我宁愿不像下面的答案中那样使用String操作,也不希望不必手动进行合并。我不想查看架构内部。
对于我的一生,我不知道怎么做。
答案 0 :(得分:1)
我相信您可以按照以下方式做些事情:
const { parse, GraphQLSchema } = require('graphql')
const { extendSchema } = require('graphql/utilities)
const schema = new GraphQLSchema({
query: queryType,
});
const extension = `extend type Foo {
someNewField: String
}`;
const extendedSchema = extendSchema(schema, parse(extension));
但是...对于突变或需要自定义解析程序的任何内容,您仍然必须使用类似addResolveFunctionsToSchema
中的graphql-tools
的方式重新添加解析程序。
如果使用SDL编写架构,分别编写解析器,然后使用makeExecutableSchema
创建架构,而不用编程方式定义架构,则可以轻松扩展类型。
如果您提供有关扩展架构或尝试完成的原因的更多背景信息,我可能会建议一种更好的方法。
答案 1 :(得分:0)
很抱歉,我没有得到我的问题的答案。我最后要做的是,在流水线的倒数第二步中,就是在将模式写入文件之前,我替换了字符串。
replace('type Mutation', 'extend type Mutation'),
replace('type Query', 'extend type Query'),
我想有时候就是这样。我仍然感到惊讶,这无法通过编程实现。