Fix 404 route resolution for experimental.advancedRouting with astro/hono handlers#16911
Merged
Conversation
🦋 Changeset detectedLatest commit: 824134b The changes in this PR will be included in the next version bump. This PR includes changesets to release 401 packages
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 |
ematipico
approved these changes
May 29, 2026
Contributor
|
Fix does look correct, but breaks some tests for some reason. |
Related: d69f858 ## Goal The getCustom404Route() fix in this PR correctly finds the 404 route by path instead of the broken component-name comparison. But when the 404 page is prerendered (export const prerender = true), setting it as routeData causes the pipeline to attempt SSR rendering of a page that was already built to static HTML at build time. This crashes with a 500 instead of serving the pre-built 404 page. ## Decisions - Guard the fallback with !custom404.prerender: prerendered 404 pages must go through the renderError -> prerenderedErrorPageFetch path, which reads the HTML from disk. Only SSR 404 routes should be set as routeData so middleware can run and the component renders at runtime. ## Changes - fetch-state.ts: Added prerender check so the 404 fallback only activates for SSR routes. Prerendered routes leave routeData unset, which triggers the error handler's disk-serving path downstream.
Contributor
|
@ematipico I made another change in 824134b, so please rereview. if it looks good you can merge it. Thanks. |
Merged
ematipico
added a commit
that referenced
this pull request
Jun 2, 2026
* chore(deps): resolve peer dependency issues (#16894) * chore(deps): update eslint to v10 (#16896) * test(vercel): add per-test timeout and raise suite timeout (#16898) * chore: eliminate duplicate pnpm configurations (#16906) * Fix i18n redirectToDefaultLocale not working with prefixDefaultLocale (#16887) * fix(i18n): preserve ROUTE_TYPE_HEADER for i18n post-processing (#16800) * chore: move fix somewhere else * chore: update changeset --------- Co-authored-by: ematipico <estoppa@cloudflare.com> * feat(fonts): better bold fallbacks (#16908) * [ci] format * fix(docs): replace last occurrences of `withastro/adapters` (#16693) * fix: astro() marks all pipeline features as used (#16899) * fix: astro() marks all pipeline features as used AstroHandler is the batteries-included handler that wires up every pipeline feature internally. Mark all PipelineFeatures bits at the top of handle() so the one-shot warnMissingFeatures check in BaseApp never fires a false positive when the first request short-circuits (e.g. a redirect route skips middleware). * add changeset * move allFeatures mask to base-pipeline.ts per review * docs: fix typos in astro:i18n middleware JSDoc (#16574) * docs: fix outdated Partytown link (#16865) * chore(deps): update devalue (#16900) * Pre-bundle astro/fetch and astro/hono in Cloudflare optimizeDeps (#16914) ## Goal Eliminate the 'new dependencies optimized: astro/fetch' warning during dev in the Cloudflare adapter. The advanced routing feature (d69f858, #16366) introduced astro/fetch and astro/hono exports, and the Cloudflare handler entry points (01aa164, #16729) import from them — but neither commit added these to the optimizeDeps.include list. Vite discovers them at runtime and triggers a late re-optimization. ## Decisions - Added both astro/fetch and astro/hono: the Cloudflare adapter imports from both (hono.ts imports FetchState from astro/fetch, and astro/hono is used similarly). Pre-bundling both prevents the same issue for either entry point. ## Changes - packages/integrations/cloudflare/src/index.ts: added astro/fetch and astro/hono to the server environment optimizeDeps.include array, alongside the existing astro/app and astro/app/fetch/default-handler entries. * fix(node): serve prerendered pages with build.format 'file' and 'preserve' by passing extensions option to send (#16922) * [ci] format * chore(deps): update `pnpm/action-setup` to v6 (#16904) * chore(deps): update pnpm to v11.5.0 (#16903) * Fix 404 route resolution for experimental.advancedRouting with astro/hono handlers (#16911) Co-authored-by: Emanuele Stoppa <estoppa@cloudflare.com> Co-authored-by: Matthew Phillips <matthew@matthewphillips.info> * dedupe --------- Co-authored-by: ocavue <ocavue@users.noreply.github.com> Co-authored-by: btea <2356281422@qq.com> Co-authored-by: Houston (Bot) <108291165+astrobot-houston@users.noreply.github.com> Co-authored-by: Florian Lefebvre <contact@florian-lefebvre.dev> Co-authored-by: Florian Lefebvre <florian-lefebvre@users.noreply.github.com> Co-authored-by: Armand Philippot <git@armand.philippot.eu> Co-authored-by: Matthew Phillips <matthewphillips@cloudflare.com> Co-authored-by: dfedoryshchev <64079946+dfedoryshchev@users.noreply.github.com> Co-authored-by: Andreas Deininger <andreas@deininger.net> Co-authored-by: Houston (Bot) <matthewp@users.noreply.github.com> Co-authored-by: Matthew Phillips <matthew@matthewphillips.info>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
experimental.advancedRoutingwithastro/honohandlers crashing on unmatched routes instead of rendering the 404 pageFetchState.#resolveRouteData()with the existinggetCustom404Route()helper that matches by route pathrouteData-always-set invariant is maintained, preventingTypeError: Cannot read properties of undefined (reading 'route')Testing
'falls back to the 404 route when no route matches'test to verifyrouteDataresolves to the/404route for unmatched requests'renders the 404 page for unmatched routes instead of throwing'test to verify the fullpages()pipeline renders HTTP 404 with custom 404 content instead of throwingDocs
Closes #16907