@tanstack/react-router 1.104.0 → 1.105.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Asset.cjs +41 -0
- package/dist/cjs/Asset.cjs.map +1 -0
- package/dist/cjs/Asset.d.cts +2 -0
- package/dist/cjs/HeadContent.cjs +138 -0
- package/dist/cjs/HeadContent.cjs.map +1 -0
- package/dist/cjs/HeadContent.d.cts +7 -0
- package/dist/cjs/Matches.cjs.map +1 -1
- package/dist/cjs/Matches.d.cts +1 -0
- package/dist/cjs/Scripts.cjs +50 -0
- package/dist/cjs/Scripts.cjs.map +1 -0
- package/dist/cjs/Scripts.d.cts +1 -0
- package/dist/cjs/index.cjs +6 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +3 -0
- package/dist/cjs/route.cjs.map +1 -1
- package/dist/cjs/route.d.cts +10 -7
- package/dist/cjs/router.cjs +31 -25
- package/dist/cjs/router.cjs.map +1 -1
- package/dist/esm/Asset.d.ts +2 -0
- package/dist/esm/Asset.js +41 -0
- package/dist/esm/Asset.js.map +1 -0
- package/dist/esm/HeadContent.d.ts +7 -0
- package/dist/esm/HeadContent.js +122 -0
- package/dist/esm/HeadContent.js.map +1 -0
- package/dist/esm/Matches.d.ts +1 -0
- package/dist/esm/Matches.js.map +1 -1
- package/dist/esm/Scripts.d.ts +1 -0
- package/dist/esm/Scripts.js +50 -0
- package/dist/esm/Scripts.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/route.d.ts +10 -7
- package/dist/esm/route.js.map +1 -1
- package/dist/esm/router.js +31 -25
- package/dist/esm/router.js.map +1 -1
- package/package.json +3 -3
- package/src/Asset.tsx +40 -0
- package/src/HeadContent.tsx +151 -0
- package/src/Matches.tsx +1 -0
- package/src/Scripts.tsx +64 -0
- package/src/index.tsx +4 -0
- package/src/route.ts +71 -32
- package/src/router.ts +28 -23
package/dist/cjs/route.d.cts
CHANGED
|
@@ -59,6 +59,12 @@ export type MakeRemountDepsOptionsUnion<TRouteTree extends AnyRoute = Registered
|
|
|
59
59
|
export interface BeforeLoadContextOptions<in out TParentRoute extends AnyRoute, in out TSearchValidator, in out TParams, in out TRouterContext, in out TRouteContextFn> extends ContextOptions<TParentRoute, TParams>, FullSearchSchemaOption<TParentRoute, TSearchValidator> {
|
|
60
60
|
context: Expand<BeforeLoadContextParameter<TParentRoute, TRouterContext, TRouteContextFn>>;
|
|
61
61
|
}
|
|
62
|
+
type AssetFnContextOptions<in out TRouteId, in out TFullPath, in out TParentRoute extends AnyRoute, in out TParams, in out TSearchValidator, in out TLoaderFn, in out TRouterContext, in out TRouteContextFn, in out TBeforeLoadFn, in out TLoaderDeps> = {
|
|
63
|
+
matches: Array<RouteMatch<TRouteId, TFullPath, ResolveAllParamsFromParent<TParentRoute, TParams>, ResolveFullSearchSchema<TParentRoute, TSearchValidator>, ResolveLoaderData<TLoaderFn>, ResolveAllContext<TParentRoute, TRouterContext, TRouteContextFn, TBeforeLoadFn>, TLoaderDeps>>;
|
|
64
|
+
match: RouteMatch<TRouteId, TFullPath, ResolveAllParamsFromParent<TParentRoute, TParams>, ResolveFullSearchSchema<TParentRoute, TSearchValidator>, ResolveLoaderData<TLoaderFn>, ResolveAllContext<TParentRoute, TRouterContext, TRouteContextFn, TBeforeLoadFn>, TLoaderDeps>;
|
|
65
|
+
params: ResolveAllParamsFromParent<TParentRoute, TParams>;
|
|
66
|
+
loaderData: ResolveLoaderData<TLoaderFn>;
|
|
67
|
+
};
|
|
62
68
|
export interface UpdatableRouteOptions<in out TParentRoute extends AnyRoute, in out TRouteId, in out TFullPath, in out TParams, in out TSearchValidator, in out TLoaderFn, in out TLoaderDeps, in out TRouterContext, in out TRouteContextFn, in out TBeforeLoadFn> extends UpdatableStaticRouteOption {
|
|
63
69
|
caseSensitive?: boolean;
|
|
64
70
|
wrapInSuspense?: boolean;
|
|
@@ -92,16 +98,12 @@ export interface UpdatableRouteOptions<in out TParentRoute extends AnyRoute, in
|
|
|
92
98
|
headers?: (ctx: {
|
|
93
99
|
loaderData: ResolveLoaderData<TLoaderFn>;
|
|
94
100
|
}) => Record<string, string>;
|
|
95
|
-
head?: (ctx: {
|
|
96
|
-
matches: Array<RouteMatch<TRouteId, TFullPath, ResolveAllParamsFromParent<TParentRoute, TParams>, ResolveFullSearchSchema<TParentRoute, TSearchValidator>, ResolveLoaderData<TLoaderFn>, ResolveAllContext<TParentRoute, TRouterContext, TRouteContextFn, TBeforeLoadFn>, TLoaderDeps>>;
|
|
97
|
-
match: RouteMatch<TRouteId, TFullPath, ResolveAllParamsFromParent<TParentRoute, TParams>, ResolveFullSearchSchema<TParentRoute, TSearchValidator>, ResolveLoaderData<TLoaderFn>, ResolveAllContext<TParentRoute, TRouterContext, TRouteContextFn, TBeforeLoadFn>, TLoaderDeps>;
|
|
98
|
-
params: ResolveAllParamsFromParent<TParentRoute, TParams>;
|
|
99
|
-
loaderData: ResolveLoaderData<TLoaderFn> | undefined;
|
|
100
|
-
}) => {
|
|
101
|
+
head?: (ctx: AssetFnContextOptions<TRouteId, TFullPath, TParentRoute, TParams, TSearchValidator, TLoaderFn, TRouterContext, TRouteContextFn, TBeforeLoadFn, TLoaderDeps>) => {
|
|
101
102
|
links?: AnyRouteMatch['links'];
|
|
102
|
-
scripts?: AnyRouteMatch['
|
|
103
|
+
scripts?: AnyRouteMatch['headScripts'];
|
|
103
104
|
meta?: AnyRouteMatch['meta'];
|
|
104
105
|
};
|
|
106
|
+
scripts?: (ctx: AssetFnContextOptions<TRouteId, TFullPath, TParentRoute, TParams, TSearchValidator, TLoaderFn, TRouterContext, TRouteContextFn, TBeforeLoadFn, TLoaderDeps>) => AnyRouteMatch['scripts'];
|
|
105
107
|
ssr?: boolean;
|
|
106
108
|
codeSplitGroupings?: Array<Array<'loader' | 'component' | 'pendingComponent' | 'notFoundComponent' | 'errorComponent'>>;
|
|
107
109
|
}
|
|
@@ -292,3 +294,4 @@ export type NotFoundRouteComponent = SyncRouteComponent<NotFoundRouteProps>;
|
|
|
292
294
|
export declare class NotFoundRoute<TParentRoute extends AnyRootRoute, TRouterContext = AnyContext, TRouteContextFn = AnyContext, TBeforeLoadFn = AnyContext, TSearchValidator = undefined, TLoaderDeps extends Record<string, any> = {}, TLoaderFn = undefined, TChildren = unknown> extends Route<TParentRoute, '/404', '/404', '404', '404', TSearchValidator, {}, TRouterContext, TRouteContextFn, TBeforeLoadFn, TLoaderDeps, TLoaderFn, TChildren> {
|
|
293
295
|
constructor(options: Omit<RouteOptions<TParentRoute, string, string, string, string, TSearchValidator, {}, TLoaderDeps, TLoaderFn, TRouterContext, TRouteContextFn, TBeforeLoadFn>, 'caseSensitive' | 'parseParams' | 'stringifyParams' | 'path' | 'id' | 'params'>);
|
|
294
296
|
}
|
|
297
|
+
export {};
|
package/dist/cjs/router.cjs
CHANGED
|
@@ -1064,7 +1064,7 @@ class Router {
|
|
|
1064
1064
|
preload: !!preload && !this.state.matches.find((d) => d.id === matchId)
|
|
1065
1065
|
}));
|
|
1066
1066
|
const runLoader = async () => {
|
|
1067
|
-
var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i;
|
|
1067
|
+
var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
1068
1068
|
try {
|
|
1069
1069
|
const potentialPendingMinPromise = async () => {
|
|
1070
1070
|
const latestMatch = this.getMatch(matchId);
|
|
@@ -1085,16 +1085,18 @@ class Router {
|
|
|
1085
1085
|
);
|
|
1086
1086
|
await route._lazyPromise;
|
|
1087
1087
|
await potentialPendingMinPromise();
|
|
1088
|
-
const
|
|
1088
|
+
const assetContext = {
|
|
1089
1089
|
matches,
|
|
1090
1090
|
match: this.getMatch(matchId),
|
|
1091
1091
|
params: this.getMatch(matchId).params,
|
|
1092
1092
|
loaderData
|
|
1093
|
-
}
|
|
1093
|
+
};
|
|
1094
|
+
const headFnContent = (_d = (_c2 = route.options).head) == null ? void 0 : _d.call(_c2, assetContext);
|
|
1094
1095
|
const meta = headFnContent == null ? void 0 : headFnContent.meta;
|
|
1095
1096
|
const links = headFnContent == null ? void 0 : headFnContent.links;
|
|
1096
|
-
const
|
|
1097
|
-
const
|
|
1097
|
+
const headScripts = headFnContent == null ? void 0 : headFnContent.scripts;
|
|
1098
|
+
const scripts = (_f = (_e = route.options).scripts) == null ? void 0 : _f.call(_e, assetContext);
|
|
1099
|
+
const headers = (_h = (_g = route.options).headers) == null ? void 0 : _h.call(_g, {
|
|
1098
1100
|
loaderData
|
|
1099
1101
|
});
|
|
1100
1102
|
updateMatch(matchId, (prev) => ({
|
|
@@ -1106,15 +1108,16 @@ class Router {
|
|
|
1106
1108
|
loaderData,
|
|
1107
1109
|
meta,
|
|
1108
1110
|
links,
|
|
1109
|
-
|
|
1110
|
-
headers
|
|
1111
|
+
headScripts,
|
|
1112
|
+
headers,
|
|
1113
|
+
scripts
|
|
1111
1114
|
}));
|
|
1112
1115
|
} catch (e) {
|
|
1113
1116
|
let error = e;
|
|
1114
1117
|
await potentialPendingMinPromise();
|
|
1115
1118
|
handleRedirectAndNotFound(this.getMatch(matchId), e);
|
|
1116
1119
|
try {
|
|
1117
|
-
(
|
|
1120
|
+
(_j = (_i = route.options).onError) == null ? void 0 : _j.call(_i, e);
|
|
1118
1121
|
} catch (onErrorError) {
|
|
1119
1122
|
error = onErrorError;
|
|
1120
1123
|
handleRedirectAndNotFound(
|
|
@@ -1129,7 +1132,7 @@ class Router {
|
|
|
1129
1132
|
isFetching: false
|
|
1130
1133
|
}));
|
|
1131
1134
|
}
|
|
1132
|
-
(
|
|
1135
|
+
(_k = this.serverSsr) == null ? void 0 : _k.onMatchSettled({
|
|
1133
1136
|
router: this,
|
|
1134
1137
|
match: this.getMatch(matchId)
|
|
1135
1138
|
});
|
|
@@ -1503,7 +1506,7 @@ class Router {
|
|
|
1503
1506
|
return parentContext;
|
|
1504
1507
|
};
|
|
1505
1508
|
matchedRoutes.forEach((route, index) => {
|
|
1506
|
-
var _a, _b
|
|
1509
|
+
var _a, _b;
|
|
1507
1510
|
const parentMatch = matches[index - 1];
|
|
1508
1511
|
const [preMatchSearch, strictMatchSearch, searchError] = (() => {
|
|
1509
1512
|
const parentSearch = (parentMatch == null ? void 0 : parentMatch.search) ?? next.search;
|
|
@@ -1589,17 +1592,13 @@ class Router {
|
|
|
1589
1592
|
preload: false,
|
|
1590
1593
|
links: void 0,
|
|
1591
1594
|
scripts: void 0,
|
|
1595
|
+
headScripts: void 0,
|
|
1592
1596
|
meta: void 0,
|
|
1593
1597
|
staticData: route.options.staticData || {},
|
|
1594
1598
|
loadPromise: routerCore.createControlledPromise(),
|
|
1595
1599
|
fullPath: route.fullPath
|
|
1596
1600
|
};
|
|
1597
1601
|
}
|
|
1598
|
-
if (match.status === "success") {
|
|
1599
|
-
match.headers = (_d = (_c = route.options).headers) == null ? void 0 : _d.call(_c, {
|
|
1600
|
-
loaderData: match.loaderData
|
|
1601
|
-
});
|
|
1602
|
-
}
|
|
1603
1602
|
if (!(opts == null ? void 0 : opts.preload)) {
|
|
1604
1603
|
match.globalNotFound = globalNotFoundRouteId === route.id;
|
|
1605
1604
|
}
|
|
@@ -1613,7 +1612,7 @@ class Router {
|
|
|
1613
1612
|
matches.push(match);
|
|
1614
1613
|
});
|
|
1615
1614
|
matches.forEach((match, index) => {
|
|
1616
|
-
var _a, _b, _c, _d;
|
|
1615
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1617
1616
|
const route = this.looseRoutesById[match.routeId];
|
|
1618
1617
|
const existingMatch = this.getMatch(match.id);
|
|
1619
1618
|
if (!existingMatch && (opts == null ? void 0 : opts._buildLocation) !== true) {
|
|
@@ -1638,15 +1637,22 @@ class Router {
|
|
|
1638
1637
|
...match.__beforeLoadContext
|
|
1639
1638
|
};
|
|
1640
1639
|
}
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1640
|
+
if (match.status === "success") {
|
|
1641
|
+
match.headers = (_d = (_c = route.options).headers) == null ? void 0 : _d.call(_c, {
|
|
1642
|
+
loaderData: match.loaderData
|
|
1643
|
+
});
|
|
1644
|
+
const assetContext = {
|
|
1645
|
+
matches,
|
|
1646
|
+
match,
|
|
1647
|
+
params: match.params,
|
|
1648
|
+
loaderData: match.loaderData
|
|
1649
|
+
};
|
|
1650
|
+
const headFnContent = (_f = (_e = route.options).head) == null ? void 0 : _f.call(_e, assetContext);
|
|
1651
|
+
match.links = headFnContent == null ? void 0 : headFnContent.links;
|
|
1652
|
+
match.headScripts = headFnContent == null ? void 0 : headFnContent.scripts;
|
|
1653
|
+
match.meta = headFnContent == null ? void 0 : headFnContent.meta;
|
|
1654
|
+
match.scripts = (_h = (_g = route.options).scripts) == null ? void 0 : _h.call(_g, assetContext);
|
|
1655
|
+
}
|
|
1650
1656
|
});
|
|
1651
1657
|
return matches;
|
|
1652
1658
|
}
|