From 0049c62815d7182cde794329774f661609e7824a Mon Sep 17 00:00:00 2001 From: Patrick Blatter Date: Mon, 1 Dec 2025 15:12:54 +0100 Subject: [PATCH 1/2] add support for semantic non null --- src/__tests__/selection.test-d.ts | 29 +++++++++++++++++++++++++++++ src/selection.ts | 3 ++- 2 files changed, 31 insertions(+), 1 deletion(-) 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 From 91bda675916fbdc516b001181731001623a11473 Mon Sep 17 00:00:00 2001 From: Patrick Blatter Date: Mon, 1 Dec 2025 15:18:54 +0100 Subject: [PATCH 2/2] add changeset --- .changeset/brown-doodles-help.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/brown-doodles-help.md 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