From 2bca079bcaa9b596ccbddc31e84f0fb1d5b19b2b Mon Sep 17 00:00:00 2001 From: Charles Lowell Date: Sun, 1 Mar 2026 15:07:10 -0600 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20include=20validation=20issues=20?= =?UTF-8?q?in=20error=20when=20no=20input=20is=20provided?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a required field had no sources at all (no CLI args, env vars, or defaults), the "none" source was not added to the sources array before constructing the ValidationError, resulting in an empty error message. --- lib/field.ts | 2 +- test/field.test.ts | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/field.ts b/lib/field.ts index 4edf988..3fb8a96 100644 --- a/lib/field.ts +++ b/lib/field.ts @@ -89,9 +89,9 @@ export function field( value: undefined as T, issues, }; + sources.push(source); if (!issues) { - sources.push(source); return { ok: true as const, value: source.value, diff --git a/test/field.test.ts b/test/field.test.ts index f5b7777..fad2cf0 100644 --- a/test/field.test.ts +++ b/test/field.test.ts @@ -97,4 +97,11 @@ describe("field", () => { it.skip("supports custom parsers", () => {}); }); + + it("includes validation issues in the error when no input is provided", () => { + let result = parseSync(field(type("number")), {}); + assert(!result.ok); + assert(result.error instanceof ValidationError); + expect(result.error.message).toMatch(/must be a number/); + }); });