[config] Convert path-to-regexp patterns to regex in Route output#15134
[config] Convert path-to-regexp patterns to regex in Route output#15134MatthewStanciu merged 3 commits intomainfrom
Conversation
🦋 Changeset detectedLatest commit: 312e2c8 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
📦 CLI Tarball ReadyThe Vercel CLI tarball for this PR is now available! Quick TestYou can test this PR's CLI directly by running: npx https://vercel-bi4kpd4w5.vercel.sh/tarballs/vercel.tgz --helpUse in vercel.jsonTo use this CLI version in your project builds, add to your {
"build": {
"env": {
"VERCEL_CLI_VERSION": "vercel@https://vercel-bi4kpd4w5.vercel.sh/tarballs/vercel.tgz"
}
}
}Python Runtime WheelA Python runtime wheel was also built for this PR. |
🧪 Unit Test StrategyComparing: Strategy: Code changed outside of a package - running all unit tests Affected packages - 16 (40%)
Unaffected packages - 24 (60%)
Results
This comment is automatically generated based on the affected testing strategy |
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing). If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## vercel@50.21.0 ### Minor Changes - Add `--all` flag to `vercel ls` command and improve behavior when not linked to a project ([#15143](#15143)) - `vercel ls` no longer requires a linked project. When not linked, it now lists all deployments across all projects in the current scope - Added `--all` flag to explicitly list deployments across all projects, even when linked to a specific project - Added "Project" column to the deployment table output to show which project each deployment belongs to - JSON output (`--format json`) is unchanged and continues to include the `name` field for project name ### Patch Changes - fix(cli): Handle SIGINT during upgrade prompt without showing a stacktrace ([#15105](#15105)) - Use formatted tables for `metrics schema` output, matching the convention used by other list commands ([#15138](#15138)) - Updated dependencies \[[`5d1f55af04d0fdba7e7ac86f9eeda44316f54f5b`](5d1f55a)]: - @vercel/next@4.15.31 ## @vercel/config@0.0.33 ### Patch Changes - Fix rewrite regexp conversion when header transforms are present ([#15134](#15134)) ## @vercel/next@4.15.31 ### Patch Changes - Added support for `regions` and `functionFailoverRegions` in per-function configuration from `vercel.json` for Next.js projects. ([#15149](#15149)) ## @vercel/python-runtime@0.4.3 ### Patch Changes - fix formatting and lint ([#15142](#15142)) <!-- VADE_RISK_START --> > [!NOTE] > Low Risk Change > > This PR is an automated Changesets release that only bumps version numbers in package.json files, updates CHANGELOG.md files, and deletes changeset markdown files - no code logic changes. > > - Version bumps in package.json files (vercel, @vercel/config, @vercel/next, @vercel/python-runtime) > - CHANGELOG.md updates documenting previous changes > - Deleted .changeset/*.md files consumed by release process > > <sup>Risk assessment for [commit 3b54c69](https://github.com/vercel/vercel/commit/3b54c6956719db3f1dfd50629330f42ab8143af6).</sup> <!-- VADE_RISK_END --> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
The previous fix (#15134) only addressed pattern conversion when rewrite() and redirect() methods returned Route objects with transforms or env vars. This fix extends the conversion to the getConfig() method, which converts redirects, rewrites, and headers to routes format when routes are present. Without this fix, patterns like `:path*` would be passed through literally instead of being converted to proper regex, causing 404 errors. https://claude.ai/code/session_01CeTsDHjUb1wrKjMEBCsv87
I was digging into a customer-reported issue where a customer's rewrites stopped working when they added a header transform using vercel.ts.
After digging on it I realized that when we don't convert path-to-regexp patterns to proper regex when compiling
routes.rewrite()to theroutesformat. So it gets compiled to this:When it should look like this:
So the route returns a 404 because it's trying to literally serve
:path. This isn't an issue for rewrites defined in therewritesproperty of vercel.json because those use the path-to-regexp format. I didn't realize that this differed when writing the logic to convert toroutes.The fix converts patterns using
sourceToRegex()from routing-utils when returningroutesformat.Note
Low Risk Change
This PR fixes a bug in route pattern conversion by properly transforming path-to-regexp patterns to regex format, which is a correctness fix for routing behavior rather than a security-sensitive change.
sourceToRegex()conversion for route source patterns in rewrite/redirect logicconvertDestination()helper replaces named params with capture group referencesRisk assessment for commit 312e2c8.