From ab30d378a9ba8fdc7e0a812ab709c993902768d6 Mon Sep 17 00:00:00 2001 From: Gautier Ben Aim Date: Sat, 19 Oct 2024 14:53:58 +0200 Subject: [PATCH] feat: provide a default value to .optional() --- .changeset/smooth-zebras-jam.md | 5 +++++ src/definitions.test.ts | 1 + src/definitions.ts | 7 +++++-- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .changeset/smooth-zebras-jam.md diff --git a/.changeset/smooth-zebras-jam.md b/.changeset/smooth-zebras-jam.md new file mode 100644 index 0000000..5768bf5 --- /dev/null +++ b/.changeset/smooth-zebras-jam.md @@ -0,0 +1,5 @@ +--- +"formgator": patch +--- + +Provide a default value to `.optional()` diff --git a/src/definitions.test.ts b/src/definitions.test.ts index 317b27d..12ad5b3 100644 --- a/src/definitions.test.ts +++ b/src/definitions.test.ts @@ -106,6 +106,7 @@ describe("methods", () => { const data = new FormData(); assert.deepEqualTyped(text().optional()[safeParse](data, "input"), succeed(undefined)); + assert.deepEqualTyped(text().optional("")[safeParse](data, "input"), succeed("")); }); it("should accept present fields", () => { diff --git a/src/definitions.ts b/src/definitions.ts index 47fcecf..f32aef1 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -58,8 +58,11 @@ export interface FormInput { * * It returns `undefined` instead of `null` to differentiate between a missing * field (`undefined`) and a field with an empty value (`null`). + * + * You may provide a default value to be used when the field is missing. */ optional(): FormInput; + optional(value: U): FormInput; /** @private @internal */ [safeParse]: (data: ReadonlyFormData, name: string) => Result; @@ -153,11 +156,11 @@ function refine( }; } -function optional(this: FormInput): FormInput { +function optional(this: FormInput, value?: U): FormInput { return { ...this, [safeParse]: (data, name) => { - if (!data.has(name)) return succeed(undefined); + if (!data.has(name)) return succeed(value as U); return this[safeParse](data, name); }, };