From a54ef933b43f970d054ee0922db5a5272fb52a6f Mon Sep 17 00:00:00 2001 From: sezanzeb <28510156+sezanzeb@users.noreply.github.com> Date: Tue, 2 Apr 2024 17:22:19 +0200 Subject: [PATCH] nonNullable disallows undefined --- deno/lib/__tests__/nonNullable.test.ts | 10 +++++++++- deno/lib/types.ts | 5 ++++- src/__tests__/nonNullable.test.ts | 10 +++++++++- src/types.ts | 5 ++++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/deno/lib/__tests__/nonNullable.test.ts b/deno/lib/__tests__/nonNullable.test.ts index b0ee7263f9..160212644f 100644 --- a/deno/lib/__tests__/nonNullable.test.ts +++ b/deno/lib/__tests__/nonNullable.test.ts @@ -19,13 +19,21 @@ test("parses a number correctly using z.nonNullable(...)", () => { }); test("fails is passed null", () => { - const a = z.nullable(z.number()).nonNullable(); + const a = z.nullable(z.any()).nonNullable(); expect(() => { a.parse(null); }).toThrow(z.ZodError) }); +test("fails is passed undefined", () => { + const a = z.nullable(z.any()).nonNullable(); + + expect(() => { + a.parse(undefined); + }).toThrow(z.ZodError) +}); + test("unwrap", () => { const unwrapped = z.any().nonNullable().unwrap(); expect(unwrapped).toBeInstanceOf(z.ZodAny); diff --git a/deno/lib/types.ts b/deno/lib/types.ts index a8b3269100..74f9590f1d 100644 --- a/deno/lib/types.ts +++ b/deno/lib/types.ts @@ -4480,7 +4480,10 @@ export class ZodNonNullable extends ZodType< > { _parse(input: ParseInput): ParseReturnType { const parsedType = this._getType(input); - if (parsedType === ZodParsedType.null) { + if ( + parsedType === ZodParsedType.null || + parsedType === ZodParsedType.undefined + ) { const { ctx } = this._processInputParams(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, diff --git a/src/__tests__/nonNullable.test.ts b/src/__tests__/nonNullable.test.ts index 40993b41d5..d8bf7c671f 100644 --- a/src/__tests__/nonNullable.test.ts +++ b/src/__tests__/nonNullable.test.ts @@ -18,13 +18,21 @@ test("parses a number correctly using z.nonNullable(...)", () => { }); test("fails is passed null", () => { - const a = z.nullable(z.number()).nonNullable(); + const a = z.nullable(z.any()).nonNullable(); expect(() => { a.parse(null); }).toThrow(z.ZodError) }); +test("fails is passed undefined", () => { + const a = z.nullable(z.any()).nonNullable(); + + expect(() => { + a.parse(undefined); + }).toThrow(z.ZodError) +}); + test("unwrap", () => { const unwrapped = z.any().nonNullable().unwrap(); expect(unwrapped).toBeInstanceOf(z.ZodAny); diff --git a/src/types.ts b/src/types.ts index 6e3aae807d..31b74deaf3 100644 --- a/src/types.ts +++ b/src/types.ts @@ -4480,7 +4480,10 @@ export class ZodNonNullable extends ZodType< > { _parse(input: ParseInput): ParseReturnType { const parsedType = this._getType(input); - if (parsedType === ZodParsedType.null) { + if ( + parsedType === ZodParsedType.null || + parsedType === ZodParsedType.undefined + ) { const { ctx } = this._processInputParams(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type,