Skip to content

Commit f82a9a4

Browse files
fix(router-core): _strictParams and path defining characters - alpha (#5136)
merges PR #5135 into alpha --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1 parent 69a7c1e commit f82a9a4

File tree

13 files changed

+408
-14
lines changed

13 files changed

+408
-14
lines changed

e2e/react-router/basic-file-based/src/routeTree.gen.ts

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import { Route as groupLayoutRouteImport } from './routes/(group)/_layout'
3838
import { Route as anotherGroupOnlyrouteinsideRouteImport } from './routes/(another-group)/onlyrouteinside'
3939
import { Route as RelativeUseNavigateRouteRouteImport } from './routes/relative/useNavigate/route'
4040
import { Route as RelativeLinkRouteRouteImport } from './routes/relative/link/route'
41+
import { Route as ParamsPsNonNestedRouteRouteImport } from './routes/params-ps/non-nested/route'
4142
import { Route as RedirectTargetIndexRouteImport } from './routes/redirect/$target/index'
4243
import { Route as ParamsPsWildcardIndexRouteImport } from './routes/params-ps/wildcard/index'
4344
import { Route as ParamsPsNamedIndexRouteImport } from './routes/params-ps/named/index'
@@ -61,13 +62,15 @@ import { Route as LayoutLayout2LayoutBRouteImport } from './routes/_layout/_layo
6162
import { Route as LayoutLayout2LayoutARouteImport } from './routes/_layout/_layout-2/layout-a'
6263
import { Route as groupSubfolderInsideRouteImport } from './routes/(group)/subfolder/inside'
6364
import { Route as groupLayoutInsidelayoutRouteImport } from './routes/(group)/_layout.insidelayout'
65+
import { Route as ParamsPsNonNestedFooRouteRouteImport } from './routes/params-ps/non-nested/$foo_/route'
6466
import { Route as ParamsPsNamedFooRouteRouteImport } from './routes/params-ps/named/$foo/route'
6567
import { Route as RelativeUseNavigateWithSearchIndexRouteImport } from './routes/relative/useNavigate/with-search/index'
6668
import { Route as RelativeUseNavigatePathIndexRouteImport } from './routes/relative/useNavigate/path/index'
6769
import { Route as RelativeUseNavigateNestedIndexRouteImport } from './routes/relative/useNavigate/nested/index'
6870
import { Route as RelativeLinkWithSearchIndexRouteImport } from './routes/relative/link/with-search/index'
6971
import { Route as RelativeLinkPathIndexRouteImport } from './routes/relative/link/path/index'
7072
import { Route as RelativeLinkNestedIndexRouteImport } from './routes/relative/link/nested/index'
73+
import { Route as ParamsPsNonNestedFooBarRouteImport } from './routes/params-ps/non-nested/$foo_/$bar'
7174
import { Route as ParamsPsNamedFooBarRouteRouteImport } from './routes/params-ps/named/$foo/$bar.route'
7275
import { Route as RelativeUseNavigatePathPathIndexRouteImport } from './routes/relative/useNavigate/path/$path/index'
7376
import { Route as RelativeUseNavigateNestedDeepIndexRouteImport } from './routes/relative/useNavigate/nested/deep/index'
@@ -219,6 +222,11 @@ const RelativeLinkRouteRoute = RelativeLinkRouteRouteImport.update({
219222
path: '/relative/link',
220223
getParentRoute: () => rootRouteImport,
221224
} as any)
225+
const ParamsPsNonNestedRouteRoute = ParamsPsNonNestedRouteRouteImport.update({
226+
id: '/params-ps/non-nested',
227+
path: '/params-ps/non-nested',
228+
getParentRoute: () => rootRouteImport,
229+
} as any)
222230
const RedirectTargetIndexRoute = RedirectTargetIndexRouteImport.update({
223231
id: '/',
224232
path: '/',
@@ -343,6 +351,12 @@ const groupLayoutInsidelayoutRoute = groupLayoutInsidelayoutRouteImport.update({
343351
path: '/insidelayout',
344352
getParentRoute: () => groupLayoutRoute,
345353
} as any)
354+
const ParamsPsNonNestedFooRouteRoute =
355+
ParamsPsNonNestedFooRouteRouteImport.update({
356+
id: '/$foo_',
357+
path: '/$foo',
358+
getParentRoute: () => ParamsPsNonNestedRouteRoute,
359+
} as any)
346360
const ParamsPsNamedFooRouteRoute = ParamsPsNamedFooRouteRouteImport.update({
347361
id: '/params-ps/named/$foo',
348362
path: '/params-ps/named/$foo',
@@ -382,6 +396,11 @@ const RelativeLinkNestedIndexRoute = RelativeLinkNestedIndexRouteImport.update({
382396
path: '/nested/',
383397
getParentRoute: () => RelativeLinkRouteRoute,
384398
} as any)
399+
const ParamsPsNonNestedFooBarRoute = ParamsPsNonNestedFooBarRouteImport.update({
400+
id: '/$bar',
401+
path: '/$bar',
402+
getParentRoute: () => ParamsPsNonNestedFooRouteRoute,
403+
} as any)
385404
const ParamsPsNamedFooBarRouteRoute =
386405
ParamsPsNamedFooBarRouteRouteImport.update({
387406
id: '/$bar',
@@ -429,6 +448,7 @@ export interface FileRoutesByFullPath {
429448
'/posts': typeof PostsRouteWithChildren
430449
'/remountDeps': typeof RemountDepsRoute
431450
'/대한민국': typeof Char45824Char54620Char48124Char44397Route
451+
'/params-ps/non-nested': typeof ParamsPsNonNestedRouteRouteWithChildren
432452
'/relative/link': typeof RelativeLinkRouteRouteWithChildren
433453
'/relative/useNavigate': typeof RelativeUseNavigateRouteRouteWithChildren
434454
'/onlyrouteinside': typeof anotherGroupOnlyrouteinsideRoute
@@ -444,6 +464,7 @@ export interface FileRoutesByFullPath {
444464
'/relative': typeof RelativeIndexRoute
445465
'/search-params/': typeof SearchParamsIndexRoute
446466
'/params-ps/named/$foo': typeof ParamsPsNamedFooRouteRouteWithChildren
467+
'/params-ps/non-nested/$foo': typeof ParamsPsNonNestedFooRouteRouteWithChildren
447468
'/insidelayout': typeof groupLayoutInsidelayoutRoute
448469
'/subfolder/inside': typeof groupSubfolderInsideRoute
449470
'/layout-a': typeof LayoutLayout2LayoutARoute
@@ -468,6 +489,7 @@ export interface FileRoutesByFullPath {
468489
'/params-ps/wildcard': typeof ParamsPsWildcardIndexRoute
469490
'/redirect/$target/': typeof RedirectTargetIndexRoute
470491
'/params-ps/named/$foo/$bar': typeof ParamsPsNamedFooBarRouteRouteWithChildren
492+
'/params-ps/non-nested/$foo/$bar': typeof ParamsPsNonNestedFooBarRoute
471493
'/relative/link/nested': typeof RelativeLinkNestedIndexRoute
472494
'/relative/link/path': typeof RelativeLinkPathIndexRoute
473495
'/relative/link/with-search': typeof RelativeLinkWithSearchIndexRoute
@@ -489,6 +511,7 @@ export interface FileRoutesByTo {
489511
'/notRemountDeps': typeof NotRemountDepsRoute
490512
'/remountDeps': typeof RemountDepsRoute
491513
'/대한민국': typeof Char45824Char54620Char48124Char44397Route
514+
'/params-ps/non-nested': typeof ParamsPsNonNestedRouteRouteWithChildren
492515
'/relative/link': typeof RelativeLinkRouteRouteWithChildren
493516
'/relative/useNavigate': typeof RelativeUseNavigateRouteRouteWithChildren
494517
'/onlyrouteinside': typeof anotherGroupOnlyrouteinsideRoute
@@ -503,6 +526,7 @@ export interface FileRoutesByTo {
503526
'/relative': typeof RelativeIndexRoute
504527
'/search-params': typeof SearchParamsIndexRoute
505528
'/params-ps/named/$foo': typeof ParamsPsNamedFooRouteRouteWithChildren
529+
'/params-ps/non-nested/$foo': typeof ParamsPsNonNestedFooRouteRouteWithChildren
506530
'/insidelayout': typeof groupLayoutInsidelayoutRoute
507531
'/subfolder/inside': typeof groupSubfolderInsideRoute
508532
'/layout-a': typeof LayoutLayout2LayoutARoute
@@ -527,6 +551,7 @@ export interface FileRoutesByTo {
527551
'/params-ps/wildcard': typeof ParamsPsWildcardIndexRoute
528552
'/redirect/$target': typeof RedirectTargetIndexRoute
529553
'/params-ps/named/$foo/$bar': typeof ParamsPsNamedFooBarRouteRouteWithChildren
554+
'/params-ps/non-nested/$foo/$bar': typeof ParamsPsNonNestedFooBarRoute
530555
'/relative/link/nested': typeof RelativeLinkNestedIndexRoute
531556
'/relative/link/path': typeof RelativeLinkPathIndexRoute
532557
'/relative/link/with-search': typeof RelativeLinkWithSearchIndexRoute
@@ -552,6 +577,7 @@ export interface FileRoutesById {
552577
'/posts': typeof PostsRouteWithChildren
553578
'/remountDeps': typeof RemountDepsRoute
554579
'/대한민국': typeof Char45824Char54620Char48124Char44397Route
580+
'/params-ps/non-nested': typeof ParamsPsNonNestedRouteRouteWithChildren
555581
'/relative/link': typeof RelativeLinkRouteRouteWithChildren
556582
'/relative/useNavigate': typeof RelativeUseNavigateRouteRouteWithChildren
557583
'/(another-group)/onlyrouteinside': typeof anotherGroupOnlyrouteinsideRoute
@@ -570,6 +596,7 @@ export interface FileRoutesById {
570596
'/relative/': typeof RelativeIndexRoute
571597
'/search-params/': typeof SearchParamsIndexRoute
572598
'/params-ps/named/$foo': typeof ParamsPsNamedFooRouteRouteWithChildren
599+
'/params-ps/non-nested/$foo_': typeof ParamsPsNonNestedFooRouteRouteWithChildren
573600
'/(group)/_layout/insidelayout': typeof groupLayoutInsidelayoutRoute
574601
'/(group)/subfolder/inside': typeof groupSubfolderInsideRoute
575602
'/_layout/_layout-2/layout-a': typeof LayoutLayout2LayoutARoute
@@ -594,6 +621,7 @@ export interface FileRoutesById {
594621
'/params-ps/wildcard/': typeof ParamsPsWildcardIndexRoute
595622
'/redirect/$target/': typeof RedirectTargetIndexRoute
596623
'/params-ps/named/$foo/$bar': typeof ParamsPsNamedFooBarRouteRouteWithChildren
624+
'/params-ps/non-nested/$foo_/$bar': typeof ParamsPsNonNestedFooBarRoute
597625
'/relative/link/nested/': typeof RelativeLinkNestedIndexRoute
598626
'/relative/link/path/': typeof RelativeLinkPathIndexRoute
599627
'/relative/link/with-search/': typeof RelativeLinkWithSearchIndexRoute
@@ -619,6 +647,7 @@ export interface FileRouteTypes {
619647
| '/posts'
620648
| '/remountDeps'
621649
| '/대한민국'
650+
| '/params-ps/non-nested'
622651
| '/relative/link'
623652
| '/relative/useNavigate'
624653
| '/onlyrouteinside'
@@ -634,6 +663,7 @@ export interface FileRouteTypes {
634663
| '/relative'
635664
| '/search-params/'
636665
| '/params-ps/named/$foo'
666+
| '/params-ps/non-nested/$foo'
637667
| '/insidelayout'
638668
| '/subfolder/inside'
639669
| '/layout-a'
@@ -658,6 +688,7 @@ export interface FileRouteTypes {
658688
| '/params-ps/wildcard'
659689
| '/redirect/$target/'
660690
| '/params-ps/named/$foo/$bar'
691+
| '/params-ps/non-nested/$foo/$bar'
661692
| '/relative/link/nested'
662693
| '/relative/link/path'
663694
| '/relative/link/with-search'
@@ -679,6 +710,7 @@ export interface FileRouteTypes {
679710
| '/notRemountDeps'
680711
| '/remountDeps'
681712
| '/대한민국'
713+
| '/params-ps/non-nested'
682714
| '/relative/link'
683715
| '/relative/useNavigate'
684716
| '/onlyrouteinside'
@@ -693,6 +725,7 @@ export interface FileRouteTypes {
693725
| '/relative'
694726
| '/search-params'
695727
| '/params-ps/named/$foo'
728+
| '/params-ps/non-nested/$foo'
696729
| '/insidelayout'
697730
| '/subfolder/inside'
698731
| '/layout-a'
@@ -717,6 +750,7 @@ export interface FileRouteTypes {
717750
| '/params-ps/wildcard'
718751
| '/redirect/$target'
719752
| '/params-ps/named/$foo/$bar'
753+
| '/params-ps/non-nested/$foo/$bar'
720754
| '/relative/link/nested'
721755
| '/relative/link/path'
722756
| '/relative/link/with-search'
@@ -741,6 +775,7 @@ export interface FileRouteTypes {
741775
| '/posts'
742776
| '/remountDeps'
743777
| '/대한민국'
778+
| '/params-ps/non-nested'
744779
| '/relative/link'
745780
| '/relative/useNavigate'
746781
| '/(another-group)/onlyrouteinside'
@@ -759,6 +794,7 @@ export interface FileRouteTypes {
759794
| '/relative/'
760795
| '/search-params/'
761796
| '/params-ps/named/$foo'
797+
| '/params-ps/non-nested/$foo_'
762798
| '/(group)/_layout/insidelayout'
763799
| '/(group)/subfolder/inside'
764800
| '/_layout/_layout-2/layout-a'
@@ -783,6 +819,7 @@ export interface FileRouteTypes {
783819
| '/params-ps/wildcard/'
784820
| '/redirect/$target/'
785821
| '/params-ps/named/$foo/$bar'
822+
| '/params-ps/non-nested/$foo_/$bar'
786823
| '/relative/link/nested/'
787824
| '/relative/link/path/'
788825
| '/relative/link/with-search/'
@@ -808,6 +845,7 @@ export interface RootRouteChildren {
808845
PostsRoute: typeof PostsRouteWithChildren
809846
RemountDepsRoute: typeof RemountDepsRoute
810847
Char45824Char54620Char48124Char44397Route: typeof Char45824Char54620Char48124Char44397Route
848+
ParamsPsNonNestedRouteRoute: typeof ParamsPsNonNestedRouteRouteWithChildren
811849
RelativeLinkRouteRoute: typeof RelativeLinkRouteRouteWithChildren
812850
RelativeUseNavigateRouteRoute: typeof RelativeUseNavigateRouteRouteWithChildren
813851
anotherGroupOnlyrouteinsideRoute: typeof anotherGroupOnlyrouteinsideRoute
@@ -1030,6 +1068,13 @@ declare module '@tanstack/react-router' {
10301068
preLoaderRoute: typeof RelativeLinkRouteRouteImport
10311069
parentRoute: typeof rootRouteImport
10321070
}
1071+
'/params-ps/non-nested': {
1072+
id: '/params-ps/non-nested'
1073+
path: '/params-ps/non-nested'
1074+
fullPath: '/params-ps/non-nested'
1075+
preLoaderRoute: typeof ParamsPsNonNestedRouteRouteImport
1076+
parentRoute: typeof rootRouteImport
1077+
}
10331078
'/redirect/$target/': {
10341079
id: '/redirect/$target/'
10351080
path: '/'
@@ -1191,6 +1236,13 @@ declare module '@tanstack/react-router' {
11911236
preLoaderRoute: typeof groupLayoutInsidelayoutRouteImport
11921237
parentRoute: typeof groupLayoutRoute
11931238
}
1239+
'/params-ps/non-nested/$foo_': {
1240+
id: '/params-ps/non-nested/$foo_'
1241+
path: '/$foo'
1242+
fullPath: '/params-ps/non-nested/$foo'
1243+
preLoaderRoute: typeof ParamsPsNonNestedFooRouteRouteImport
1244+
parentRoute: typeof ParamsPsNonNestedRouteRoute
1245+
}
11941246
'/params-ps/named/$foo': {
11951247
id: '/params-ps/named/$foo'
11961248
path: '/params-ps/named/$foo'
@@ -1240,6 +1292,13 @@ declare module '@tanstack/react-router' {
12401292
preLoaderRoute: typeof RelativeLinkNestedIndexRouteImport
12411293
parentRoute: typeof RelativeLinkRouteRoute
12421294
}
1295+
'/params-ps/non-nested/$foo_/$bar': {
1296+
id: '/params-ps/non-nested/$foo_/$bar'
1297+
path: '/$bar'
1298+
fullPath: '/params-ps/non-nested/$foo/$bar'
1299+
preLoaderRoute: typeof ParamsPsNonNestedFooBarRouteImport
1300+
parentRoute: typeof ParamsPsNonNestedFooRouteRoute
1301+
}
12431302
'/params-ps/named/$foo/$bar': {
12441303
id: '/params-ps/named/$foo/$bar'
12451304
path: '/$bar'
@@ -1335,6 +1394,34 @@ const PostsRouteChildren: PostsRouteChildren = {
13351394

13361395
const PostsRouteWithChildren = PostsRoute._addFileChildren(PostsRouteChildren)
13371396

1397+
interface ParamsPsNonNestedFooRouteRouteChildren {
1398+
ParamsPsNonNestedFooBarRoute: typeof ParamsPsNonNestedFooBarRoute
1399+
}
1400+
1401+
const ParamsPsNonNestedFooRouteRouteChildren: ParamsPsNonNestedFooRouteRouteChildren =
1402+
{
1403+
ParamsPsNonNestedFooBarRoute: ParamsPsNonNestedFooBarRoute,
1404+
}
1405+
1406+
const ParamsPsNonNestedFooRouteRouteWithChildren =
1407+
ParamsPsNonNestedFooRouteRoute._addFileChildren(
1408+
ParamsPsNonNestedFooRouteRouteChildren,
1409+
)
1410+
1411+
interface ParamsPsNonNestedRouteRouteChildren {
1412+
ParamsPsNonNestedFooRouteRoute: typeof ParamsPsNonNestedFooRouteRouteWithChildren
1413+
}
1414+
1415+
const ParamsPsNonNestedRouteRouteChildren: ParamsPsNonNestedRouteRouteChildren =
1416+
{
1417+
ParamsPsNonNestedFooRouteRoute: ParamsPsNonNestedFooRouteRouteWithChildren,
1418+
}
1419+
1420+
const ParamsPsNonNestedRouteRouteWithChildren =
1421+
ParamsPsNonNestedRouteRoute._addFileChildren(
1422+
ParamsPsNonNestedRouteRouteChildren,
1423+
)
1424+
13381425
interface RelativeLinkRouteRouteChildren {
13391426
RelativeLinkRelativeLinkARoute: typeof RelativeLinkRelativeLinkARoute
13401427
RelativeLinkRelativeLinkBRoute: typeof RelativeLinkRelativeLinkBRoute
@@ -1473,6 +1560,7 @@ const rootRouteChildren: RootRouteChildren = {
14731560
RemountDepsRoute: RemountDepsRoute,
14741561
Char45824Char54620Char48124Char44397Route:
14751562
Char45824Char54620Char48124Char44397Route,
1563+
ParamsPsNonNestedRouteRoute: ParamsPsNonNestedRouteRouteWithChildren,
14761564
RelativeLinkRouteRoute: RelativeLinkRouteRouteWithChildren,
14771565
RelativeUseNavigateRouteRoute: RelativeUseNavigateRouteRouteWithChildren,
14781566
anotherGroupOnlyrouteinsideRoute: anotherGroupOnlyrouteinsideRoute,

e2e/react-router/basic-file-based/src/routes/params-ps/index.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { createFileRoute } from '@tanstack/react-router'
2-
import { Link } from '@tanstack/react-router'
1+
import { Link, createFileRoute } from '@tanstack/react-router'
32

43
export const Route = createFileRoute('/params-ps/')({
54
component: RouteComponent,
@@ -69,6 +68,15 @@ function RouteComponent() {
6968
</Link>
7069
</li>
7170
</ul>
71+
<hr />
72+
<h3 className="pb-2">Non-nested path params</h3>
73+
<ul className="grid mb-2">
74+
<li>
75+
<Link data-testid="l-to-non-nested" to="/params-ps/non-nested">
76+
Non-nested
77+
</Link>
78+
</li>
79+
</ul>
7280
</div>
7381
)
7482
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { createFileRoute, useParams } from '@tanstack/react-router'
2+
3+
export const Route = createFileRoute('/params-ps/non-nested/$foo_/$bar')({
4+
component: RouteComponent,
5+
})
6+
7+
function RouteComponent() {
8+
const fooParams = useParams({ from: '/params-ps/non-nested/$foo_' })
9+
const routeParams = Route.useParams()
10+
11+
return (
12+
<div>
13+
<div data-testid="foo-params-value">{JSON.stringify(fooParams)}</div>
14+
<div data-testid="foo-bar-params-value">
15+
{JSON.stringify(routeParams)}
16+
</div>
17+
</div>
18+
)
19+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import { createFileRoute } from '@tanstack/react-router'
2+
3+
export const Route = createFileRoute('/params-ps/non-nested/$foo_')()
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Link, Outlet, createFileRoute } from '@tanstack/react-router'
2+
3+
export const Route = createFileRoute('/params-ps/non-nested')({
4+
component: RouteComponent,
5+
})
6+
7+
function RouteComponent() {
8+
return (
9+
<div>
10+
<h3 className="pb-2">Non-nested path params</h3>
11+
<ul className="grid mb-2">
12+
<li>
13+
<Link
14+
from={Route.fullPath}
15+
data-testid="l-to-non-nested-foo-bar"
16+
to="./$foo/$bar"
17+
params={{ foo: 'foo', bar: 'bar' }}
18+
>
19+
/params-ps/non-nested/$foo/$bar
20+
</Link>
21+
</li>
22+
</ul>
23+
<Outlet />
24+
</div>
25+
)
26+
}

0 commit comments

Comments
 (0)