From 8b9daba5901d0f2d59b990696acec54b15701590 Mon Sep 17 00:00:00 2001 From: kbongort Date: Sun, 17 Jul 2022 23:43:37 -0700 Subject: [PATCH] Don't use invalid_type_error for `undefined` fields. (#1175) * Fallback to default required error rather than invalid_type_error. * Add Deno files * Run prettier * Update quotes Co-authored-by: Colin McDonnell --- deno/lib/__tests__/error.test.ts | 4 ++-- deno/lib/types.ts | 9 ++++----- src/__tests__/error.test.ts | 4 ++-- src/types.ts | 9 ++++----- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/deno/lib/__tests__/error.test.ts b/deno/lib/__tests__/error.test.ts index 1c8568ddc..d5437e802 100644 --- a/deno/lib/__tests__/error.test.ts +++ b/deno/lib/__tests__/error.test.ts @@ -377,7 +377,7 @@ test("invalid and required", () => { } }); -test("Fallback to invalid_type_error without required_error", () => { +test("Fallback to default required error", () => { const str = z.string({ invalid_type_error: "Invalid name", // required_error: "Name is required", @@ -386,7 +386,7 @@ test("Fallback to invalid_type_error without required_error", () => { const result2 = str.safeParse(undefined); expect(result2.success).toEqual(false); if (!result2.success) { - expect(result2.error.issues[0].message).toEqual("Invalid name"); + expect(result2.error.issues[0].message).toEqual("Required"); } }); diff --git a/deno/lib/types.ts b/deno/lib/types.ts index 727416c7c..4fb3c0c3a 100644 --- a/deno/lib/types.ts +++ b/deno/lib/types.ts @@ -117,11 +117,10 @@ function processCreateParams(params: RawCreateParams): ProcessedCreateParams { if (errorMap) return { errorMap: errorMap, description }; const customMap: ZodErrorMap = (iss, ctx) => { if (iss.code !== "invalid_type") return { message: ctx.defaultError }; - if (typeof ctx.data === "undefined" && required_error) - return { message: required_error }; - if (params.invalid_type_error) - return { message: params.invalid_type_error }; - return { message: ctx.defaultError }; + if (typeof ctx.data === "undefined") { + return { message: required_error ?? ctx.defaultError }; + } + return { message: invalid_type_error ?? ctx.defaultError }; }; return { errorMap: customMap, description }; } diff --git a/src/__tests__/error.test.ts b/src/__tests__/error.test.ts index 47b6aea1a..3834c8324 100644 --- a/src/__tests__/error.test.ts +++ b/src/__tests__/error.test.ts @@ -376,7 +376,7 @@ test("invalid and required", () => { } }); -test("Fallback to invalid_type_error without required_error", () => { +test("Fallback to default required error", () => { const str = z.string({ invalid_type_error: "Invalid name", // required_error: "Name is required", @@ -385,7 +385,7 @@ test("Fallback to invalid_type_error without required_error", () => { const result2 = str.safeParse(undefined); expect(result2.success).toEqual(false); if (!result2.success) { - expect(result2.error.issues[0].message).toEqual("Invalid name"); + expect(result2.error.issues[0].message).toEqual("Required"); } }); diff --git a/src/types.ts b/src/types.ts index 413e43361..d32b5ecdc 100644 --- a/src/types.ts +++ b/src/types.ts @@ -117,11 +117,10 @@ function processCreateParams(params: RawCreateParams): ProcessedCreateParams { if (errorMap) return { errorMap: errorMap, description }; const customMap: ZodErrorMap = (iss, ctx) => { if (iss.code !== "invalid_type") return { message: ctx.defaultError }; - if (typeof ctx.data === "undefined" && required_error) - return { message: required_error }; - if (params.invalid_type_error) - return { message: params.invalid_type_error }; - return { message: ctx.defaultError }; + if (typeof ctx.data === "undefined") { + return { message: required_error ?? ctx.defaultError }; + } + return { message: invalid_type_error ?? ctx.defaultError }; }; return { errorMap: customMap, description }; }