Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: handle optional and rest routes for ISR correctly #11928

Merged
merged 6 commits into from
Mar 11, 2024

Conversation

dummdidumm
Copy link
Member

@dummdidumm dummdidumm commented Mar 1, 2024

When turning on ISR in adapter-vercel for a route ending in an optional or rest parameter, and that parameter not being set, the regex would yield wrong results. Consider a route like foo/[...rest] and the URL is just /foo, then the route config for Vercel would turn that into a ISR-request like foo/[..rest]?pathname/%2Ffoo%2F - note the trailing slash, which comes from the regex looking like foo/$1/$2. This trailing slash which wasn't there before can subsequently lead to the SvelteKit runtime issuing a trailing slash redirect (it thinks we're on /foo/ and issues a redirect to /foo), which is wrong an will lead to infinite redirects in the browser. The fix is to account for optional and rest parameters when constructing the regex for the Vercel route config.

Fixes #10836
Fixes #10155


Please don't delete this checklist! Before submitting the PR, please make sure you do the following:

  • It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.

Tests

  • Run the tests with pnpm test and lint the project with pnpm lint and pnpm check

Changesets

  • If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running pnpm changeset and following the prompts. Changesets that add features should be minor and those that fix bugs should be patch. Please prefix changeset messages with feat:, fix:, or chore:.

Edits

  • Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed.

When turning on ISR in adapter-vercel for a route ending in an optional or rest parameter, and that parameter not being set, the regex would yield wrong results. Consider a route like `foo/[...rest]` and the URL is just `/foo`, then the route config for Vercel would turn that into a ISR-request like `foo/[..rest]?pathname/%2Ffoo%2F` - note the trailing slash, which comes from the regex looking like `foo/$1/$2`. This trailing slash which wasn't there before can subsequently lead to the SvelteKit runtime issuing a trailing slash redirect (it thinks we're on /foo/ and issues a redirect to /foo), which is wrong an will lead to infinite redirects in the browser.
The fix is to account for optional and rest parameters when constructing the regex for the Vercel route config.
Copy link

changeset-bot bot commented Mar 1, 2024

🦋 Changeset detected

Latest commit: 34b2d77

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

This PR includes changesets to release 1 package
Name Type
@sveltejs/adapter-vercel Patch

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

dummdidumm and others added 2 commits March 1, 2024 18:00
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
@benmccann
Copy link
Member

This probably fixes #10836 at least and maybe a couple of others.

dummdidumm and others added 2 commits March 2, 2024 20:59
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
@Rich-Harris Rich-Harris merged commit 30c5f7b into main Mar 11, 2024
12 checks passed
@Rich-Harris Rich-Harris deleted the vercel-route-regex-fix branch March 11, 2024 13:49
@github-actions github-actions bot mentioned this pull request Mar 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pkg:adapter-vercel Pertaining to the Vercel adapter
Projects
None yet
3 participants