1
- import { Injectable } from '@nestjs/common' ;
1
+ import { Injectable , Type } from '@nestjs/common' ;
2
2
import { isUndefined } from '@nestjs/common/utils/shared.utils' ;
3
3
import {
4
4
GraphQLFieldConfigMap ,
@@ -94,6 +94,23 @@ export class ObjectTypeDefinitionFactory {
94
94
} ;
95
95
}
96
96
97
+ private getRecursiveInterfaces (
98
+ metadatas : ObjectTypeMetadata [ ] ,
99
+ ) : ObjectTypeMetadata [ ] {
100
+ if ( ! metadatas || ! metadatas . length ) return [ ] ;
101
+
102
+ const interfaces = metadatas . reduce < ObjectTypeMetadata [ ] > ( ( prev , curr ) => {
103
+ return [
104
+ ...prev ,
105
+ ...getInterfacesArray ( curr . interfaces ) . map ( ( it ) =>
106
+ TypeMetadataStorage . getInterfaceMetadataByTarget ( it as Type < unknown > ) ,
107
+ ) ,
108
+ ] ;
109
+ } , [ ] ) ;
110
+
111
+ return [ ...interfaces , ...this . getRecursiveInterfaces ( interfaces ) ] ;
112
+ }
113
+
97
114
private generateFields (
98
115
metadata : ObjectTypeMetadata ,
99
116
options : BuildSchemaOptions ,
@@ -109,12 +126,9 @@ export class ObjectTypeDefinitionFactory {
109
126
110
127
let properties = [ ] ;
111
128
if ( metadata . interfaces ) {
112
- const implementedInterfaces =
113
- TypeMetadataStorage . getInterfacesMetadata ( )
114
- . filter ( ( it ) =>
115
- getInterfacesArray ( metadata . interfaces ) . includes ( it . target ) ,
116
- )
117
- . map ( ( it ) => it . properties ) ;
129
+ const implementedInterfaces = this . getRecursiveInterfaces ( [
130
+ metadata ,
131
+ ] ) . map ( ( it ) => it . properties ) ;
118
132
119
133
implementedInterfaces . forEach ( ( fields ) =>
120
134
properties . push ( ...( fields || [ ] ) ) ,
0 commit comments