@@ -41,6 +41,7 @@ import {
41
41
ScalarTypeDefinitionNode ,
42
42
SchemaDefinitionNode ,
43
43
SchemaExtensionNode ,
44
+ specifiedDirectives ,
44
45
UnionTypeDefinitionNode ,
45
46
ValueNode ,
46
47
} from 'graphql' ;
@@ -219,11 +220,12 @@ export function getDirectiveNodes<TDirectiveNode extends DirectiveNode>(
219
220
deprecationReason ?: string | null ;
220
221
specifiedByUrl ?: string | null ;
221
222
specifiedByURL ?: string | null ;
223
+ isOneOf ?: boolean ;
222
224
} ,
223
225
schema ?: GraphQLSchema ,
224
226
pathToDirectivesInExtensions ?: Array < string > ,
225
227
) : Array < TDirectiveNode > {
226
- let directiveNodesBesidesDeprecatedAndSpecifiedBy : Array < TDirectiveNode > = [ ] ;
228
+ let directiveNodesBesidesNativeDirectives : Array < TDirectiveNode > = [ ] ;
227
229
228
230
const directivesInExtensions = getDirectivesInExtensions ( entity , pathToDirectivesInExtensions ) ;
229
231
@@ -234,19 +236,23 @@ export function getDirectiveNodes<TDirectiveNode extends DirectiveNode>(
234
236
235
237
let deprecatedDirectiveNode : Maybe < TDirectiveNode > = null ;
236
238
let specifiedByDirectiveNode : Maybe < TDirectiveNode > = null ;
239
+ let oneOfDirectiveNode : Maybe < TDirectiveNode > = null ;
237
240
if ( directives != null ) {
238
- directiveNodesBesidesDeprecatedAndSpecifiedBy = directives . filter (
239
- directive => directive . name . value !== 'deprecated' && directive . name . value !== 'specifiedBy' ,
241
+ directiveNodesBesidesNativeDirectives = directives . filter ( directive =>
242
+ specifiedDirectives . every (
243
+ specifiedDirective => specifiedDirective . name !== directive . name . value ,
244
+ ) ,
240
245
) ;
241
246
if ( entity . deprecationReason != null ) {
242
- deprecatedDirectiveNode = directives . filter (
243
- directive => directive . name . value === 'deprecated' ,
244
- ) ?. [ 0 ] ;
247
+ deprecatedDirectiveNode = directives . find ( directive => directive . name . value === 'deprecated' ) ;
245
248
}
246
249
if ( entity . specifiedByUrl != null || entity . specifiedByURL != null ) {
247
- specifiedByDirectiveNode = directives . filter (
250
+ specifiedByDirectiveNode = directives . find (
248
251
directive => directive . name . value === 'specifiedBy' ,
249
- ) ?. [ 0 ] ;
252
+ ) ;
253
+ }
254
+ if ( entity . isOneOf ) {
255
+ oneOfDirectiveNode = directives . find ( directive => directive . name . value === 'oneOf' ) ;
250
256
}
251
257
}
252
258
@@ -265,13 +271,20 @@ export function getDirectiveNodes<TDirectiveNode extends DirectiveNode>(
265
271
specifiedByDirectiveNode = makeDirectiveNode < TDirectiveNode > ( 'specifiedBy' , specifiedByArgs ) ;
266
272
}
267
273
274
+ if ( entity . isOneOf && oneOfDirectiveNode == null ) {
275
+ oneOfDirectiveNode = makeDirectiveNode < TDirectiveNode > ( 'oneOf' ) ;
276
+ }
277
+
268
278
if ( deprecatedDirectiveNode != null ) {
269
- directiveNodesBesidesDeprecatedAndSpecifiedBy . push ( deprecatedDirectiveNode ) ;
279
+ directiveNodesBesidesNativeDirectives . push ( deprecatedDirectiveNode ) ;
270
280
}
271
281
if ( specifiedByDirectiveNode != null ) {
272
- directiveNodesBesidesDeprecatedAndSpecifiedBy . push ( specifiedByDirectiveNode ) ;
282
+ directiveNodesBesidesNativeDirectives . push ( specifiedByDirectiveNode ) ;
283
+ }
284
+ if ( oneOfDirectiveNode != null ) {
285
+ directiveNodesBesidesNativeDirectives . push ( oneOfDirectiveNode ) ;
273
286
}
274
- return directiveNodesBesidesDeprecatedAndSpecifiedBy ;
287
+ return directiveNodesBesidesNativeDirectives ;
275
288
}
276
289
277
290
export function astFromArg (
0 commit comments