diff --git a/.changeset/new-mails-prove.md b/.changeset/new-mails-prove.md new file mode 100644 index 0000000000..06c5a36521 --- /dev/null +++ b/.changeset/new-mails-prove.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes an issue where using .nullish() in a formdata Astro action would always parse as a string diff --git a/packages/astro/src/actions/runtime/virtual/server.ts b/packages/astro/src/actions/runtime/virtual/server.ts index 326bbf4f9b..3efa7ca149 100644 --- a/packages/astro/src/actions/runtime/virtual/server.ts +++ b/packages/astro/src/actions/runtime/virtual/server.ts @@ -124,8 +124,8 @@ export function formDataToObject( const obj: Record = {}; for (const [key, baseValidator] of Object.entries(schema.shape)) { let validator = baseValidator; - if (baseValidator instanceof z.ZodOptional || baseValidator instanceof z.ZodNullable) { - validator = baseValidator._def.innerType; + while (validator instanceof z.ZodOptional || validator instanceof z.ZodNullable) { + validator = validator._def.innerType; } if (validator instanceof z.ZodBoolean) { obj[key] = formData.has(key);