diff --git a/packages/core/tests/graphql-module.spec.ts b/packages/core/tests/graphql-module.spec.ts index 6cb88e5401..3a76a32a5e 100644 --- a/packages/core/tests/graphql-module.spec.ts +++ b/packages/core/tests/graphql-module.spec.ts @@ -177,7 +177,7 @@ describe('GraphQLModule', () => { `directive @entity on OBJECT`, `directive @field on FIELD_DEFINITION`, `type A @entity { f: String }`, - `type Query { a: A }`, + `type Query { a: [A!] }`, ], }); const m2 = new GraphQLModule({ @@ -185,7 +185,7 @@ describe('GraphQLModule', () => { `directive @entity on OBJECT`, `directive @field on FIELD_DEFINITION`, `type A @entity { f: String @field }`, - `type Query { a: A }`, + `type Query { a: [A!] }`, ], }); diff --git a/packages/epoxy/src/schema-mergers/type.ts b/packages/epoxy/src/schema-mergers/type.ts index c0e8ffaf6c..cf8e06a966 100644 --- a/packages/epoxy/src/schema-mergers/type.ts +++ b/packages/epoxy/src/schema-mergers/type.ts @@ -13,7 +13,7 @@ export function mergeType(node: ObjectTypeDefinitionNode, existingNode: ObjectTy loc: node.loc, fields: mergeFields(node.fields, existingNode.fields), directives: mergeDirectives(node.directives, existingNode.directives), - interfaces: mergeNamedTypeArray(node.interfaces, existingNode.interfaces), + interfaces: mergeNamedTypeArray(node.interfaces || [], existingNode.interfaces || []), }; } catch (e) { throw new Error(`Unable to merge GraphQL type "${node.name.value}": ${e.message}`); diff --git a/packages/epoxy/src/schema-mergers/utils.ts b/packages/epoxy/src/schema-mergers/utils.ts index 4029b616e9..401cc878b6 100644 --- a/packages/epoxy/src/schema-mergers/utils.ts +++ b/packages/epoxy/src/schema-mergers/utils.ts @@ -54,9 +54,11 @@ export function isGraphQLSchema(obj: any): obj is GraphQLSchema { } export function extractType(type: TypeNode): NamedTypeNode { - if (type.kind === 'ListType' || type.kind === 'NonNullType') { - return type.type as any; + + let visitedType = type; + while (visitedType.kind === 'ListType' || visitedType.kind === 'NonNullType') { + visitedType = visitedType.type; } + return visitedType as any; - return type as any; }