fix: detect route conflicts in nested groups with optional params #15271
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.
Summary
Fixes #13704. The
prevent_conflictsfunction increate_manifest_datafailed to detect conflicting routes when route groups were nested with optional parameters.For example,
/(group)/base/+page.svelteand/(group)/base/(optional-group)/[[optionalParam]]/+page.svelteboth resolve to/basebut the conflict was not detected.Root cause: The regex on line 564 that removes duplicate slashes —
.replace(/\/{2,}/, '/')— was missing the globalgflag. Whennormalize_route_idremoves group segments from a route like/(group)/base/(optional-group)/[[optionalParam]], it produces//base//<?*>. After expanding the optional parameter, one permutation is//base//. Without thegflag, only the first//is collapsed to/, leaving/base/instead ofbase— which doesn't match the keybasefrom the other route.Fix: Add the
gflag:.replace(/\/{2,}/g, '/').Test plan
conflicting-nested-groupstest sample with two routes that resolve to the same URL