graphile-build
Version:
Build a GraphQL schema from plugins
42 lines (40 loc) • 1.12 kB
Flow
// @flow
import type { Plugin, Build } from "../SchemaBuilder";
import type { BuildExtensionQuery } from "./QueryPlugin";
export default (function MutationPayloadQueryPlugin(builder) {
builder.hook(
"GraphQLObjectType:fields",
(
fields: {},
build: {| ...Build, ...BuildExtensionQuery |},
context
): {} => {
const { $$isQuery, extend, getTypeByName, inflection } = build;
const {
scope: { isMutationPayload },
Self,
} = context;
if (!isMutationPayload) {
return fields;
}
const Query = getTypeByName(inflection.builtin("Query"));
return extend(
fields,
{
query: {
description: build.wrapDescription(
"Our root query field type. Allows us to run any query from our mutation payload.",
"field"
),
type: Query,
resolve() {
return $$isQuery;
},
},
},
`Adding 'query' field to mutation payload ${Self.name}`
);
},
["MutationPayloadQuery"]
);
}: Plugin);