diff --git a/cli/src/runtime/typeSelection.ts b/cli/src/runtime/typeSelection.ts index ad9a6c1..77a1a99 100644 --- a/cli/src/runtime/typeSelection.ts +++ b/cli/src/runtime/typeSelection.ts @@ -46,10 +46,9 @@ type HandleObject, DST> = SRC extends Nil { // using keyof SRC to maintain ?: relations of SRC type [Key in keyof SRC]: Key extends keyof DST - ? FieldsSelection< - SRC[Key], - NonNullable - > + ? SRC[Key] extends infer NON_NULL_SRC | null + ? FieldsSelection> | null + : FieldsSelection> : SRC[Key] }, Exclude diff --git a/cli/src/typeSelection.test.ts b/cli/src/typeSelection.test.ts index e0c0d85..be46f3d 100644 --- a/cli/src/typeSelection.test.ts +++ b/cli/src/typeSelection.test.ts @@ -120,11 +120,11 @@ describe('pick', () => { 'response type picks from request type', dontExecute(() => { z.category - z.category.a - z.category.b + z.category?.a + z.category?.b // @ts-expect-error z.category.c - z.category.nested1.a + z.category?.nested1?.a }), ) test( @@ -146,7 +146,7 @@ describe('pick', () => { test( 'argument syntax', dontExecute(() => { - z.argumentSyntax.a.toLocaleLowerCase + z.argumentSyntax?.a?.toLocaleLowerCase }), ) }) @@ -173,12 +173,12 @@ describe('__scalar', () => { 'response type picks from request type', dontExecute(() => { z.category - z.category.a - z.category.b - z.category.c - z.category.nested1.a - z.category.a.getDate - z.category.b.getDate + z.category?.a + z.category?.b + z.category?.c + z.category?.nested1.a + z.category?.a.getDate + z.category?.b.getDate }), ) test( @@ -212,8 +212,8 @@ describe('__scalar', () => { test( 'argument syntax', dontExecute(() => { - z.argumentSyntax.a.toLocaleLowerCase - z.argumentSyntax.optional?.big + z.argumentSyntax?.a.toLocaleLowerCase + z.argumentSyntax?.optional?.big // @ts-expect-error z.argumentSyntax.nesting.x }), @@ -246,7 +246,7 @@ describe('optional fields', () => { optionalObject: { x: 1, optional: 1, - } + }, } const z: FieldsSelection = {} as any test( @@ -254,13 +254,14 @@ describe('optional fields', () => { dontExecute(() => { // @ts-expect-error z.optionalFields.a.toLocaleLowerCase - z.optionalFields.a?.toLocaleLowerCase + z.optionalFields?.a?.toLocaleLowerCase // can use null - z.optionalFields.a = null + z.optionalFields!.a = null + // @ts-expect-error z.optionalFields.b.toLocaleLowerCase - z.optionalFields.b?.toFixed + z.optionalFields?.b?.toFixed // @ts-expect-error z.category.optionalFieldsNested.a // @ts-expect-error @@ -282,13 +283,13 @@ describe('optional fields', () => { dontExecute(() => { // @ts-expect-error z.optionalFields.a.toLocaleLowerCase - z.optionalFields.a?.toLocaleLowerCase + z.optionalFields?.a?.toLocaleLowerCase // @ts-expect-error z.optionalFields.b.toLocaleLowerCase - z.optionalFields.b?.toFixed + z.optionalFields?.b?.toFixed // @ts-expect-error z.category.optionalFieldsNested.a - z.category.optionalFieldsNested?.a?.toLocaleLowerCase + z.category?.optionalFieldsNested?.a?.toLocaleLowerCase }), ) test( @@ -296,7 +297,7 @@ describe('optional fields', () => { dontExecute(() => { // @ts-expect-error optional z.argumentSyntax.optional.toLocaleLowerCase - z.argumentSyntax.optional?.toLocaleLowerCase + z.argumentSyntax?.optional?.toLocaleLowerCase }), ) }) @@ -332,9 +333,9 @@ describe('unions', () => { test( 'pick union fields', dontExecute(() => { - z.union.a.toLocaleLowerCase - z.union.a.toLocaleLowerCase - z.nesting.nestedUnion.a.toLocaleLowerCase + z.union?.a.toLocaleLowerCase + z.union?.a.toLocaleLowerCase + z.nesting?.nestedUnion?.a.toLocaleLowerCase }), ) test( @@ -349,7 +350,7 @@ describe('unions', () => { test( 'argument syntax', dontExecute(() => { - z.argumentSyntax.union.a.charAt + z.argumentSyntax?.union?.a.charAt // @ts-expect-error z.argumentSyntax.a }), @@ -405,8 +406,8 @@ describe('arrays', () => { test( 'list', dontExecute(() => { - z.list[0].a.charCodeAt - z.list[0].x.toFixed + z.list?.[0].a?.charCodeAt + z.list?.[0].x?.toFixed }), ) test( @@ -420,14 +421,14 @@ describe('arrays', () => { dontExecute(() => { // @ts-expect-error optional z.list[0].optional.bold - z.list[0].optional?.bold + z.list?.[0].optional?.bold }), ) test( 'args syntax', dontExecute(() => { - z.argumentSyntax.list[0].x - z.argumentSyntax.list[0].optional?.charAt + z.argumentSyntax?.list?.[0].x + z.argumentSyntax?.list?.[0].optional?.charAt // @ts-expect-error optional z.argumentSyntax.list[0].optional.charAt }), @@ -442,7 +443,7 @@ describe('literals unions', () => { test( 'literals', dontExecute(() => { - z.literalsUnion.blink + z.literalsUnion?.blink z.literalsUnion === 'a' z.literalsUnion === 'b' // @ts-expect-error