@@ -9,17 +9,31 @@ import { ObjectValueTransformerMap, ErrorsTransformer } from '../types';
9
9
import TransformCompositeFields from './TransformCompositeFields' ;
10
10
11
11
export default class MapFields implements Transform {
12
- private readonly transformer : TransformCompositeFields ;
12
+ private fieldNodeTransformerMap : FieldNodeMappers ;
13
+ private objectValueTransformerMap ?: ObjectValueTransformerMap ;
14
+ private errorsTransformer ?: ErrorsTransformer ;
15
+ private transformer : TransformCompositeFields ;
13
16
14
17
constructor (
15
18
fieldNodeTransformerMap : FieldNodeMappers ,
16
19
objectValueTransformerMap ?: ObjectValueTransformerMap ,
17
20
errorsTransformer ?: ErrorsTransformer
18
21
) {
22
+ this . fieldNodeTransformerMap = fieldNodeTransformerMap ;
23
+ this . objectValueTransformerMap = objectValueTransformerMap ;
24
+ this . errorsTransformer = errorsTransformer ;
25
+ }
26
+
27
+ public transformSchema (
28
+ originalWrappingSchema : GraphQLSchema ,
29
+ subschemaConfig : SubschemaConfig ,
30
+ transformedSchema ?: GraphQLSchema
31
+ ) : GraphQLSchema {
32
+ const subscriptionTypeName = originalWrappingSchema . getSubscriptionType ( ) ?. name ;
19
33
this . transformer = new TransformCompositeFields (
20
34
( ) => undefined ,
21
35
( typeName , fieldName , fieldNode , fragments , transformationContext ) => {
22
- const typeTransformers = fieldNodeTransformerMap [ typeName ] ;
36
+ const typeTransformers = this . fieldNodeTransformerMap [ typeName ] ;
23
37
if ( typeTransformers == null ) {
24
38
return undefined ;
25
39
}
@@ -31,34 +45,31 @@ export default class MapFields implements Transform {
31
45
32
46
return fieldNodeTransformer ( fieldNode , fragments , transformationContext ) ;
33
47
} ,
34
- objectValueTransformerMap != null
48
+ this . objectValueTransformerMap != null
35
49
? ( data , transformationContext ) => {
36
50
if ( data == null ) {
37
51
return data ;
38
52
}
39
53
40
- const typeName = data . __typename ;
54
+ let typeName = data . __typename ;
41
55
if ( typeName == null ) {
42
- return data ;
56
+ // see https://github.com/ardatan/graphql-tools/issues/2282
57
+ typeName = subscriptionTypeName ;
58
+ if ( typeName == null ) {
59
+ return data ;
60
+ }
43
61
}
44
62
45
- const transformer = objectValueTransformerMap [ typeName ] ;
63
+ const transformer = this . objectValueTransformerMap [ typeName ] ;
46
64
if ( transformer == null ) {
47
65
return data ;
48
66
}
49
67
50
68
return transformer ( data , transformationContext ) ;
51
69
}
52
70
: undefined ,
53
- errorsTransformer != null ? errorsTransformer : undefined
71
+ this . errorsTransformer != null ? this . errorsTransformer : undefined
54
72
) ;
55
- }
56
-
57
- public transformSchema (
58
- originalWrappingSchema : GraphQLSchema ,
59
- subschemaConfig : SubschemaConfig ,
60
- transformedSchema ?: GraphQLSchema
61
- ) : GraphQLSchema {
62
73
return this . transformer . transformSchema ( originalWrappingSchema , subschemaConfig , transformedSchema ) ;
63
74
}
64
75
0 commit comments