Skip to content

Commit

Permalink
Don't use invalid_type_error for undefined fields. (#1175)
Browse files Browse the repository at this point in the history
* Fallback to default required error rather than invalid_type_error.

* Add Deno files

* Run prettier

* Update quotes

Co-authored-by: Colin McDonnell <colinmcd@alum.mit.edu>
  • Loading branch information
kbongort and Colin McDonnell committed Jul 18, 2022
1 parent 1d16205 commit 8b9daba
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 14 deletions.
4 changes: 2 additions & 2 deletions deno/lib/__tests__/error.test.ts
Expand Up @@ -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",
Expand All @@ -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");
}
});

Expand Down
9 changes: 4 additions & 5 deletions deno/lib/types.ts
Expand Up @@ -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 };
}
Expand Down
4 changes: 2 additions & 2 deletions src/__tests__/error.test.ts
Expand Up @@ -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",
Expand All @@ -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");
}
});

Expand Down
9 changes: 4 additions & 5 deletions src/types.ts
Expand Up @@ -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 };
}
Expand Down

0 comments on commit 8b9daba

Please sign in to comment.