@@ -206,36 +206,23 @@ export const __DirectiveLocation: GraphQLEnumType = new GraphQLEnumType({
206206 } ,
207207} ) ;
208208
209- // TODO: rename enum and options
210209enum TypeNullability {
211- AUTO = 'AUTO' ,
212210 TRADITIONAL = 'TRADITIONAL' ,
213- SEMANTIC = 'SEMANTIC' ,
214211 FULL = 'FULL' ,
215212}
216213
217- // TODO: rename
218214export const __TypeNullability : GraphQLEnumType = new GraphQLEnumType ( {
219215 name : '__TypeNullability' ,
220- description : 'TODO' ,
216+ description :
217+ 'This represents the type of nullability we want to return as part of the introspection.' ,
221218 values : {
222- AUTO : {
223- value : TypeNullability . AUTO ,
224- description :
225- 'Determines nullability mode based on errorPropagation mode.' ,
226- } ,
227219 TRADITIONAL : {
228220 value : TypeNullability . TRADITIONAL ,
229221 description : 'Turn semantic-non-null types into nullable types.' ,
230222 } ,
231- SEMANTIC : {
232- value : TypeNullability . SEMANTIC ,
233- description : 'Turn non-null types into semantic-non-null types.' ,
234- } ,
235223 FULL : {
236224 value : TypeNullability . FULL ,
237- description :
238- 'Render the true nullability in the schema; be prepared for new types of nullability in future!' ,
225+ description : 'Allow for returning semantic-non-null types.' ,
239226 } ,
240227 } ,
241228} ) ;
@@ -408,22 +395,11 @@ export const __Field: GraphQLObjectType = new GraphQLObjectType({
408395 args : {
409396 nullability : {
410397 type : new GraphQLNonNull ( __TypeNullability ) ,
411- defaultValue : TypeNullability . AUTO ,
398+ defaultValue : TypeNullability . TRADITIONAL ,
412399 } ,
413400 } ,
414- resolve : ( field , { nullability } , _context , info ) => {
415- if ( nullability === TypeNullability . FULL ) {
416- return field . type ;
417- }
418-
419- const mode =
420- nullability === TypeNullability . AUTO
421- ? info . errorPropagation
422- ? TypeNullability . TRADITIONAL
423- : TypeNullability . SEMANTIC
424- : nullability ;
425- return convertOutputTypeToNullabilityMode ( field . type , mode ) ;
426- } ,
401+ resolve : ( field , { nullability } , _context ) =>
402+ convertOutputTypeToNullabilityMode ( field . type , nullability ) ,
427403 } ,
428404 isDeprecated : {
429405 type : new GraphQLNonNull ( GraphQLBoolean ) ,
@@ -436,10 +412,9 @@ export const __Field: GraphQLObjectType = new GraphQLObjectType({
436412 } as GraphQLFieldConfigMap < GraphQLField < unknown , unknown > , unknown > ) ,
437413} ) ;
438414
439- // TODO: move this elsewhere, rename, memoize
440415function convertOutputTypeToNullabilityMode (
441416 type : GraphQLType ,
442- mode : TypeNullability . TRADITIONAL | TypeNullability . SEMANTIC ,
417+ mode : TypeNullability ,
443418) : GraphQLType {
444419 if ( mode === TypeNullability . TRADITIONAL ) {
445420 if ( isNonNullType ( type ) ) {
@@ -455,7 +430,12 @@ function convertOutputTypeToNullabilityMode(
455430 }
456431 return type ;
457432 }
458- if ( isNonNullType ( type ) || isSemanticNonNullType ( type ) ) {
433+
434+ if ( isNonNullType ( type ) ) {
435+ return new GraphQLNonNull (
436+ convertOutputTypeToNullabilityMode ( type . ofType , mode ) ,
437+ ) ;
438+ } else if ( isSemanticNonNullType ( type ) ) {
459439 return new GraphQLSemanticNonNull (
460440 convertOutputTypeToNullabilityMode ( type . ofType , mode ) ,
461441 ) ;
@@ -464,6 +444,7 @@ function convertOutputTypeToNullabilityMode(
464444 convertOutputTypeToNullabilityMode ( type . ofType , mode ) ,
465445 ) ;
466446 }
447+
467448 return type ;
468449}
469450
0 commit comments