Skip to content

fix(actions): support for nested objects in form#15978

Merged
ematipico merged 2 commits intowithastro:mainfrom
seroperson:i14387-nested-form-data-parsing
Mar 20, 2026
Merged

fix(actions): support for nested objects in form#15978
ematipico merged 2 commits intowithastro:mainfrom
seroperson:i14387-nested-form-data-parsing

Conversation

@seroperson
Copy link
Copy Markdown
Contributor

@seroperson seroperson commented Mar 18, 2026

Closes #14387

Changes

  • Added support for nested objects with dot notation in form data parsing
  • formDataToObject now recursively processes nested ZodObject schemas, converting dot-notation form keys (like bc.b) into nested object structures ({ bc: { b: ... } })

Testing

  • Covering most of cases I could imagine in form-data-to-object.test.js: nested objects, superRefine wrapping, deeper 3-level nesting, optional/nullable/default nested objects, nested discriminatedUnion
  • Several new integration tests in actions.test.js: nested form objects, superRefine validation, nested discriminatedUnion

Docs

No new API was introduced, so likely no docs changes are required

/cc @withastro/maintainers-docs

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 18, 2026

🦋 Changeset detected

Latest commit: 9ed560e

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions github-actions bot added the pkg: astro Related to the core `astro` package (scope) label Mar 18, 2026
@seroperson seroperson force-pushed the i14387-nested-form-data-parsing branch from a467555 to 6ee1bd5 Compare March 18, 2026 07:48
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Mar 18, 2026

Merging this PR will not alter performance

✅ 18 untouched benchmarks


Comparing seroperson:i14387-nested-form-data-parsing (9ed560e) with main (1fddff7)1

Open in CodSpeed

Footnotes

  1. No successful run was found on main (3cb5319) during the generation of this report, so 1fddff7 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@seroperson seroperson force-pushed the i14387-nested-form-data-parsing branch 2 times, most recently from 6219101 to e87cd57 Compare March 18, 2026 08:29
Copy link
Copy Markdown
Contributor

@matthewp matthewp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't love all of the Zod internals stuff happening here, but we were already doing the same thing as before, so no worse.

@matthewp
Copy link
Copy Markdown
Contributor

@seroperson can you resolve the conflicts please? then can get this merged.

@seroperson seroperson force-pushed the i14387-nested-form-data-parsing branch from e87cd57 to b71bf56 Compare March 19, 2026 15:34
@seroperson
Copy link
Copy Markdown
Contributor Author

@matthewp done 🤝

Copy link
Copy Markdown
Member

@ematipico ematipico left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is marked as minor, so:

  • I block it until we're ready to ship it
  • I would love if the changeset would be more user focused.

Is this supposed be a minor or should it be a patch? Nevertheless the changeset should be more descriptive

@seroperson seroperson force-pushed the i14387-nested-form-data-parsing branch from b71bf56 to a0acdb2 Compare March 20, 2026 08:21
@seroperson seroperson requested a review from ematipico March 20, 2026 08:22
@seroperson
Copy link
Copy Markdown
Contributor Author

@ematipico I've re-marked it as patch (as it's a bugfix actually. probably misclicked the first time) and made the changeset more descriptive

@ematipico ematipico merged commit 6d182fe into withastro:main Mar 20, 2026
12 checks passed
@astrobot-houston astrobot-houston mentioned this pull request Mar 20, 2026
dadezzz pushed a commit to dadezzz/ice-notes that referenced this pull request Mar 24, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [astro](https://astro.build) ([source](https://github.com/withastro/astro/tree/HEAD/packages/astro)) | [`6.0.6` → `6.0.8`](https://renovatebot.com/diffs/npm/astro/6.0.6/6.0.8) | ![age](https://developer.mend.io/api/mc/badges/age/npm/astro/6.0.8?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/astro/6.0.6/6.0.8?slim=true) |

---

### Release Notes

<details>
<summary>withastro/astro (astro)</summary>

### [`v6.0.8`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#608)

[Compare Source](https://github.com/withastro/astro/compare/astro@6.0.7...astro@6.0.8)

##### Patch Changes

- [#&#8203;15978](withastro/astro#15978) [`6d182fe`](withastro/astro@6d182fe) Thanks [@&#8203;seroperson](https://github.com/seroperson)! - Fixes a bug where Astro Actions didn't properly support nested object properties, causing problems when users used zod functions such as `superRefine` or `discriminatedUnion`.

- [#&#8203;16011](withastro/astro#16011) [`e752170`](withastro/astro@e752170) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fixes a dev server hang on the first request when using the Cloudflare adapter

- [#&#8203;15997](withastro/astro#15997) [`1fddff7`](withastro/astro@1fddff7) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixes `Astro.rewrite()` failing when the target path contains duplicate slashes (e.g. `//about`). The duplicate slashes are now collapsed before URL parsing, preventing them from being interpreted as a protocol-relative URL.

### [`v6.0.7`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#607)

[Compare Source](https://github.com/withastro/astro/compare/astro@6.0.6...astro@6.0.7)

##### Patch Changes

- [#&#8203;15950](withastro/astro#15950) [`acce5e8`](withastro/astro@acce5e8) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fixes a build regression in projects with multiple frontend integrations where `server:defer` server islands could fail at runtime when all pages are prerendered.

- [#&#8203;15988](withastro/astro#15988) [`c93b4a0`](withastro/astro@c93b4a0) Thanks [@&#8203;ossaidqadri](https://github.com/ossaidqadri)! - Fix styles from dynamically imported components not being injected on first dev server load.

- [#&#8203;15968](withastro/astro#15968) [`3e7a9d5`](withastro/astro@3e7a9d5) Thanks [@&#8203;chasemccoy](https://github.com/chasemccoy)! - Fixes `renderMarkdown` in custom content loaders not resolving images in markdown content. Images referenced in markdown processed by `renderMarkdown` are now correctly optimized, matching the behavior of the built-in `glob()` loader.

- [#&#8203;15990](withastro/astro#15990) [`1e6017f`](withastro/astro@1e6017f) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixes an issue where `Astro.currentLocale` would always be the default locale instead of the actual one when using a dynamic route like `[locale].astro` or `[locale]/index.astro`. It now resolves to the correct locale from the URL.

- [#&#8203;15990](withastro/astro#15990) [`1e6017f`](withastro/astro@1e6017f) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixes an issue where visiting an invalid locale URL (e.g. `/asdf/`) would show the content of a dynamic `[locale]` page with a 404 status code, instead of showing your custom 404 page. Now, the correct 404 page is rendered when the locale in the URL doesn't match any configured locale.

- [#&#8203;15960](withastro/astro#15960) [`1d84020`](withastro/astro@1d84020) Thanks [@&#8203;matthewp](https://github.com/matthewp)! - Fixes Cloudflare dev server islands with `prerenderEnvironment: 'node'` by sharing the serialized manifest encryption key across dev environments and routing server island requests through the SSR runtime.

- [#&#8203;15735](withastro/astro#15735) [`9685e2d`](withastro/astro@9685e2d) Thanks [@&#8203;fa-sharp](https://github.com/fa-sharp)! - Fixes an EventEmitter memory leak when serving static pages from Node.js middleware.

  When using the middleware handler, requests that were being passed on to Express / Fastify (e.g. static files / pre-rendered pages / etc.) weren't cleaning up socket listeners before calling `next()`, causing a memory leak warning. This fix makes sure to run the cleanup before calling `next()`.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My43Ni4yIiwidXBkYXRlZEluVmVyIjoiNDMuODYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: Renovate Bot <renovate@zarantonello.dev>
Co-committed-by: Renovate Bot <renovate@zarantonello.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pkg: astro Related to the core `astro` package (scope)

Projects

None yet

3 participants