From d1409371d59131bc861e96a888cc70abd8f93b77 Mon Sep 17 00:00:00 2001 From: xuxu Date: Wed, 28 Jun 2023 13:43:07 +0800 Subject: [PATCH 1/3] perf: avoid unnecessary error maps --- deno/lib/helpers/parseUtil.ts | 26 +++++++++++++++++++------- src/helpers/parseUtil.ts | 24 ++++++++++++++++-------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/deno/lib/helpers/parseUtil.ts b/deno/lib/helpers/parseUtil.ts index 0e4da903c..35af7640e 100644 --- a/deno/lib/helpers/parseUtil.ts +++ b/deno/lib/helpers/parseUtil.ts @@ -16,19 +16,31 @@ export const makeIssue = (params: { path: fullPath, }; - let errorMessage = ""; - const maps = errorMaps - .filter((m) => !!m) - .slice() - .reverse() as ZodErrorMap[]; - for (const map of maps) { - errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message; + let errorMessage = issueData.message || ""; + if (!errorMessage) { + const maps: ZodErrorMap[] = []; + for (let i = errorMaps.length - 1; i >= 0; i--) { + const map = errorMaps[i]; + if (!map || maps.includes(map)) { + continue; + } + maps.push(map); + + errorMessage = map(fullIssue, { + data, + defaultError: errorMessage, + }).message; + } } return { ...issueData, path: fullPath, +<<<<<<< HEAD message: issueData.message ?? errorMessage, +======= + message: errorMessage, +>>>>>>> e5b2228 (perf: avoid unnecessary error maps) }; }; diff --git a/src/helpers/parseUtil.ts b/src/helpers/parseUtil.ts index 71f332fc5..8532b0738 100644 --- a/src/helpers/parseUtil.ts +++ b/src/helpers/parseUtil.ts @@ -16,19 +16,27 @@ export const makeIssue = (params: { path: fullPath, }; - let errorMessage = ""; - const maps = errorMaps - .filter((m) => !!m) - .slice() - .reverse() as ZodErrorMap[]; - for (const map of maps) { - errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message; + let errorMessage = issueData.message || ""; + if (!errorMessage) { + const maps: ZodErrorMap[] = []; + for (let i = errorMaps.length - 1; i >= 0; i--) { + const map = errorMaps[i]; + if (!map || maps.includes(map)) { + continue; + } + maps.push(map); + + errorMessage = map(fullIssue, { + data, + defaultError: errorMessage, + }).message; + } } return { ...issueData, path: fullPath, - message: issueData.message ?? errorMessage, + message: errorMessage, }; }; From 2e766fdf15ed783815333aaefad7b04f5b3e9822 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Fri, 12 Apr 2024 18:00:11 -0700 Subject: [PATCH 2/3] Clean up --- deno/lib/helpers/parseUtil.ts | 33 +++++++++++++++++---------------- src/helpers/parseUtil.ts | 33 +++++++++++++++++---------------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/deno/lib/helpers/parseUtil.ts b/deno/lib/helpers/parseUtil.ts index 35af7640e..a5e04ee74 100644 --- a/deno/lib/helpers/parseUtil.ts +++ b/deno/lib/helpers/parseUtil.ts @@ -16,21 +16,21 @@ export const makeIssue = (params: { path: fullPath, }; - let errorMessage = issueData.message || ""; - if (!errorMessage) { - const maps: ZodErrorMap[] = []; - for (let i = errorMaps.length - 1; i >= 0; i--) { - const map = errorMaps[i]; - if (!map || maps.includes(map)) { - continue; - } - maps.push(map); + if (issueData.message) { + return { + ...issueData, + path: fullPath, + message: issueData.message, + }; + } - errorMessage = map(fullIssue, { - data, - defaultError: errorMessage, - }).message; - } + let errorMessage = ""; + const maps = errorMaps + .filter((m) => !!m) + .slice() + .reverse() as ZodErrorMap[]; + for (const map of maps) { + errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message; } return { @@ -77,6 +77,7 @@ export function addIssueToContext( ctx: ParseContext, issueData: IssueData ): void { + const overrideMap = getErrorMap(); const issue = makeIssue({ issueData: issueData, data: ctx.data, @@ -84,8 +85,8 @@ export function addIssueToContext( errorMaps: [ ctx.common.contextualErrorMap, // contextual error map is first priority ctx.schemaErrorMap, // then schema-bound map if available - getErrorMap(), // then global override map - defaultErrorMap, // then global default map + overrideMap, // then global override map + overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map ].filter((x) => !!x) as ZodErrorMap[], }); ctx.common.issues.push(issue); diff --git a/src/helpers/parseUtil.ts b/src/helpers/parseUtil.ts index 8532b0738..7b83bee9d 100644 --- a/src/helpers/parseUtil.ts +++ b/src/helpers/parseUtil.ts @@ -16,21 +16,21 @@ export const makeIssue = (params: { path: fullPath, }; - let errorMessage = issueData.message || ""; - if (!errorMessage) { - const maps: ZodErrorMap[] = []; - for (let i = errorMaps.length - 1; i >= 0; i--) { - const map = errorMaps[i]; - if (!map || maps.includes(map)) { - continue; - } - maps.push(map); + if (issueData.message) { + return { + ...issueData, + path: fullPath, + message: issueData.message, + }; + } - errorMessage = map(fullIssue, { - data, - defaultError: errorMessage, - }).message; - } + let errorMessage = ""; + const maps = errorMaps + .filter((m) => !!m) + .slice() + .reverse() as ZodErrorMap[]; + for (const map of maps) { + errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message; } return { @@ -73,6 +73,7 @@ export function addIssueToContext( ctx: ParseContext, issueData: IssueData ): void { + const overrideMap = getErrorMap(); const issue = makeIssue({ issueData: issueData, data: ctx.data, @@ -80,8 +81,8 @@ export function addIssueToContext( errorMaps: [ ctx.common.contextualErrorMap, // contextual error map is first priority ctx.schemaErrorMap, // then schema-bound map if available - getErrorMap(), // then global override map - defaultErrorMap, // then global default map + overrideMap, // then global override map + overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map ].filter((x) => !!x) as ZodErrorMap[], }); ctx.common.issues.push(issue); From d0e8a1324c744b0901d390190ffdd5b93b219233 Mon Sep 17 00:00:00 2001 From: Colin McDonnell Date: Fri, 12 Apr 2024 18:10:53 -0700 Subject: [PATCH 3/3] Support falsy errorMessage --- deno/lib/helpers/parseUtil.ts | 6 +----- src/helpers/parseUtil.ts | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/deno/lib/helpers/parseUtil.ts b/deno/lib/helpers/parseUtil.ts index a5e04ee74..53d39d626 100644 --- a/deno/lib/helpers/parseUtil.ts +++ b/deno/lib/helpers/parseUtil.ts @@ -16,7 +16,7 @@ export const makeIssue = (params: { path: fullPath, }; - if (issueData.message) { + if (issueData.message !== undefined) { return { ...issueData, path: fullPath, @@ -36,11 +36,7 @@ export const makeIssue = (params: { return { ...issueData, path: fullPath, -<<<<<<< HEAD - message: issueData.message ?? errorMessage, -======= message: errorMessage, ->>>>>>> e5b2228 (perf: avoid unnecessary error maps) }; }; diff --git a/src/helpers/parseUtil.ts b/src/helpers/parseUtil.ts index 7b83bee9d..f6b105a5b 100644 --- a/src/helpers/parseUtil.ts +++ b/src/helpers/parseUtil.ts @@ -16,7 +16,7 @@ export const makeIssue = (params: { path: fullPath, }; - if (issueData.message) { + if (issueData.message !== undefined) { return { ...issueData, path: fullPath,