Fix Unknow type merge bug on overloaded types (#6494)

* Fix Unknow type bug on overloaded types

* check args too
This commit is contained in:
Antoine Cormouls
2020-03-11 20:59:18 +01:00
committed by GitHub
parent 35d76b8ff5
commit 16a974a04a
2 changed files with 30 additions and 4 deletions

View File

@@ -10821,11 +10821,11 @@ describe('ParseGraphQLServer', () => {
expect(result2.data.someClass.name).toEqual('aname'); expect(result2.data.someClass.name).toEqual('aname');
expect(result.data.someClass.language).toEqual('fr'); expect(result.data.someClass.language).toEqual('fr');
const result3 = await apolloClient.mutate({ const result3 = await apolloClient.mutate({
variables: { id: obj.id, name: 'anewname' }, variables: { id: obj.id, name: 'anewname', type: 'human' },
mutation: gql` mutation: gql`
mutation someClass($id: ID!, $name: String!) { mutation someClass($id: ID!, $name: String!, $type: TypeEnum!) {
updateSomeClass( updateSomeClass(
input: { id: $id, fields: { name: $name, type: human } } input: { id: $id, fields: { name: $name, type: $type } }
) { ) {
someClass { someClass {
nameUpperCase nameUpperCase

View File

@@ -211,7 +211,33 @@ class ParseGraphQLSchema {
const autoGraphQLSchemaType = this.graphQLAutoSchema.getType( const autoGraphQLSchemaType = this.graphQLAutoSchema.getType(
customGraphQLSchemaType.name customGraphQLSchemaType.name
); );
if (autoGraphQLSchemaType) { if (
autoGraphQLSchemaType &&
typeof customGraphQLSchemaType.getFields === 'function'
) {
const findAndAddLastType = type => {
if (type.name) {
if (!this.graphQLAutoSchema.getType(type)) {
// To avoid schema stitching (Unknow type) bug on variables
// transfer the final type to the Auto Schema
this.graphQLAutoSchema._typeMap[type.name] = type;
}
} else {
if (type.ofType) {
findAndAddLastType(type.ofType);
}
}
};
Object.values(customGraphQLSchemaType.getFields()).forEach(
field => {
findAndAddLastType(field.type);
if (field.args) {
field.args.forEach(arg => {
findAndAddLastType(arg.type);
});
}
}
);
autoGraphQLSchemaType._fields = { autoGraphQLSchemaType._fields = {
...autoGraphQLSchemaType._fields, ...autoGraphQLSchemaType._fields,
...customGraphQLSchemaType._fields, ...customGraphQLSchemaType._fields,