diff --git a/.changeset/brown-doodles-help.md b/.changeset/brown-doodles-help.md new file mode 100644 index 00000000..fdf4d37c --- /dev/null +++ b/.changeset/brown-doodles-help.md @@ -0,0 +1,5 @@ +--- +'gql.tada': minor +--- + +Add @semanticNonNull support diff --git a/src/__tests__/selection.test-d.ts b/src/__tests__/selection.test-d.ts index 990d5f4c..208568ee 100644 --- a/src/__tests__/selection.test-d.ts +++ b/src/__tests__/selection.test-d.ts @@ -137,6 +137,35 @@ test('infers nullable field types for @required/@optional', () => { expectTypeOf().toEqualTypeOf(); }); +test('infers non-null field types for @semanticNonNull', () => { + type query = parseDocument; + + type actual = getDocumentType; + type expected = { + todos: + | ({ + complete: boolean; + author: { + id: string; + name: string; + }; + } | null)[] + | null; + }; + + expectTypeOf().toEqualTypeOf(); +}); + test('infers optional fragment for @defer', () => { type query = parseDocument = Node extends { directives: any[] } - ? Node['directives'][number]['name']['value'] & ('required' | '_required') extends never + ? Node['directives'][number]['name']['value'] & + ('required' | '_required' | 'semanticNonNull') extends never ? Node['directives'][number]['name']['value'] & ('optional' | '_optional') extends never ? void : true