Skip to content

Commit 7573172

Browse files
committed
More fixes
1 parent 3091db3 commit 7573172

File tree

7 files changed

+84
-30
lines changed

7 files changed

+84
-30
lines changed

src/__tests__/starWarsIntrospection-test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ describe('Star Wars Introspection Tests', () => {
4545
{ name: '__EnumValue' },
4646
{ name: '__Directive' },
4747
{ name: '__DirectiveLocation' },
48+
{ name: '__TypeNullability' },
4849
],
4950
},
5051
});

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ export {
7575
__Schema,
7676
__Directive,
7777
__DirectiveLocation,
78+
__TypeNullability,
7879
__Type,
7980
__Field,
8081
__InputValue,

src/type/__tests__/introspection-test.ts

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,21 @@ describe('Introspection', () => {
506506
},
507507
{
508508
name: 'type',
509-
args: [],
509+
args: [
510+
{
511+
name: 'nullability',
512+
type: {
513+
kind: 'NON_NULL',
514+
name: null,
515+
ofType: {
516+
kind: 'ENUM',
517+
name: '__TypeNullability',
518+
ofType: null,
519+
},
520+
},
521+
defaultValue: 'AUTO',
522+
},
523+
],
510524
type: {
511525
kind: 'NON_NULL',
512526
name: null,
@@ -917,6 +931,37 @@ describe('Introspection', () => {
917931
],
918932
possibleTypes: null,
919933
},
934+
{
935+
kind: 'ENUM',
936+
name: '__TypeNullability',
937+
specifiedByURL: null,
938+
fields: null,
939+
inputFields: null,
940+
interfaces: null,
941+
enumValues: [
942+
{
943+
name: 'AUTO',
944+
isDeprecated: false,
945+
deprecationReason: null,
946+
},
947+
{
948+
name: 'TRADITIONAL',
949+
isDeprecated: false,
950+
deprecationReason: null,
951+
},
952+
{
953+
name: 'SEMANTIC',
954+
isDeprecated: false,
955+
deprecationReason: null,
956+
},
957+
{
958+
name: 'FULL',
959+
isDeprecated: false,
960+
deprecationReason: null,
961+
},
962+
],
963+
possibleTypes: null,
964+
},
920965
],
921966
directives: [
922967
{

src/type/__tests__/schema-test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ describe('Type System: Schema', () => {
304304
'__EnumValue',
305305
'__Directive',
306306
'__DirectiveLocation',
307+
'__TypeNullability',
307308
]);
308309

309310
// Also check that this order is stable

src/type/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ export {
170170
__Schema,
171171
__Directive,
172172
__DirectiveLocation,
173+
__TypeNullability,
173174
__Type,
174175
__Field,
175176
__InputValue,

src/type/introspection.ts

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import type {
1212
GraphQLFieldConfigMap,
1313
GraphQLInputField,
1414
GraphQLNamedType,
15-
GraphQLType} from './definition';
15+
GraphQLType,
16+
} from './definition';
1617
import {
1718
GraphQLEnumType,
1819
GraphQLList,
@@ -406,22 +407,21 @@ export const __Field: GraphQLObjectType = new GraphQLObjectType({
406407
type: new GraphQLNonNull(__Type),
407408
args: {
408409
nullability: {
409-
type: __TypeNullability,
410-
defaultValue: 'AUTO',
410+
type: new GraphQLNonNull(__TypeNullability),
411+
defaultValue: TypeNullability.AUTO,
411412
},
412413
},
413414
resolve: (field, { nullability }, _context, info) => {
414415
if (nullability === TypeNullability.FULL) {
415416
return field.type;
416-
}
417-
const mode =
418-
nullability === TypeNullability.AUTO
419-
? info.errorPropagation
420-
? TypeNullability.TRADITIONAL
421-
: TypeNullability.SEMANTIC
422-
: nullability;
423-
return convertOutputTypeToNullabilityMode(field.type, mode);
424-
417+
}
418+
const mode =
419+
nullability === TypeNullability.AUTO
420+
? info.errorPropagation
421+
? TypeNullability.TRADITIONAL
422+
: TypeNullability.SEMANTIC
423+
: nullability;
424+
return convertOutputTypeToNullabilityMode(field.type, mode);
425425
},
426426
},
427427
isDeprecated: {
@@ -451,22 +451,19 @@ function convertOutputTypeToNullabilityMode(
451451
return new GraphQLList(
452452
convertOutputTypeToNullabilityMode(type.ofType, mode),
453453
);
454-
}
455-
return type;
456-
457-
}
458-
if (isNonNullType(type) || isSemanticNonNullType(type)) {
459-
return new GraphQLSemanticNonNull(
460-
convertOutputTypeToNullabilityMode(type.ofType, mode),
461-
);
462-
} else if (isListType(type)) {
463-
return new GraphQLList(
464-
convertOutputTypeToNullabilityMode(type.ofType, mode),
465-
);
466-
}
467-
return type;
468-
469-
454+
}
455+
return type;
456+
}
457+
if (isNonNullType(type) || isSemanticNonNullType(type)) {
458+
return new GraphQLSemanticNonNull(
459+
convertOutputTypeToNullabilityMode(type.ofType, mode),
460+
);
461+
} else if (isListType(type)) {
462+
return new GraphQLList(
463+
convertOutputTypeToNullabilityMode(type.ofType, mode),
464+
);
465+
}
466+
return type;
470467
}
471468

472469
export const __InputValue: GraphQLObjectType = new GraphQLObjectType({
@@ -649,6 +646,7 @@ export const introspectionTypes: ReadonlyArray<GraphQLNamedType> =
649646
__Schema,
650647
__Directive,
651648
__DirectiveLocation,
649+
__TypeNullability,
652650
__Type,
653651
__Field,
654652
__InputValue,

src/utilities/__tests__/printSchema-test.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,7 @@ describe('Type System Printer', () => {
782782
name: String!
783783
description: String
784784
args(includeDeprecated: Boolean = false): [__InputValue!]!
785-
type: __Type!
785+
type(nullability: __TypeNullability!): __Type!
786786
isDeprecated: Boolean!
787787
deprecationReason: String
788788
}
@@ -887,6 +887,13 @@ describe('Type System Printer', () => {
887887
"""Location adjacent to an input object field definition."""
888888
INPUT_FIELD_DEFINITION
889889
}
890+
891+
enum __TypeNullability {
892+
AUTO
893+
TRADITIONAL
894+
SEMANTIC
895+
FULL
896+
}
890897
`);
891898
});
892899
});

0 commit comments

Comments
 (0)