react-router 7.5.1 → 7.5.3-pre.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.
Files changed (36) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/development/{chunk-LSOULM7L.mjs → chunk-MKZGATSN.mjs} +114 -38
  3. package/dist/development/dom-export.d.mts +2 -2
  4. package/dist/development/dom-export.d.ts +2 -2
  5. package/dist/development/dom-export.js +99 -64
  6. package/dist/development/dom-export.mjs +17 -41
  7. package/dist/{production/fog-of-war-CyHis97d.d.mts → development/fog-of-war-BLArG-qZ.d.ts} +2 -2
  8. package/dist/development/{fog-of-war-D4x86-Xc.d.ts → fog-of-war-D2zsXvum.d.mts} +2 -2
  9. package/dist/development/index.d.mts +19 -16
  10. package/dist/development/index.d.ts +19 -16
  11. package/dist/development/index.js +115 -38
  12. package/dist/development/index.mjs +6 -4
  13. package/dist/development/lib/types/route-module.d.mts +1 -1
  14. package/dist/development/lib/types/route-module.d.ts +1 -1
  15. package/dist/development/lib/types/route-module.js +1 -1
  16. package/dist/development/lib/types/route-module.mjs +1 -1
  17. package/dist/development/{route-data-OcOrqK13.d.ts → route-data-C12CLHiN.d.mts} +1 -1
  18. package/dist/{production/route-data-OcOrqK13.d.mts → development/route-data-C12CLHiN.d.ts} +1 -1
  19. package/dist/production/{chunk-SAWFLE7G.mjs → chunk-ZGZJR6R3.mjs} +114 -38
  20. package/dist/production/dom-export.d.mts +2 -2
  21. package/dist/production/dom-export.d.ts +2 -2
  22. package/dist/production/dom-export.js +99 -64
  23. package/dist/production/dom-export.mjs +17 -41
  24. package/dist/{development/fog-of-war-CyHis97d.d.mts → production/fog-of-war-BLArG-qZ.d.ts} +2 -2
  25. package/dist/production/{fog-of-war-D4x86-Xc.d.ts → fog-of-war-D2zsXvum.d.mts} +2 -2
  26. package/dist/production/index.d.mts +19 -16
  27. package/dist/production/index.d.ts +19 -16
  28. package/dist/production/index.js +115 -38
  29. package/dist/production/index.mjs +6 -4
  30. package/dist/production/lib/types/route-module.d.mts +1 -1
  31. package/dist/production/lib/types/route-module.d.ts +1 -1
  32. package/dist/production/lib/types/route-module.js +1 -1
  33. package/dist/production/lib/types/route-module.mjs +1 -1
  34. package/dist/production/{route-data-OcOrqK13.d.ts → route-data-C12CLHiN.d.mts} +1 -1
  35. package/dist/{development/route-data-OcOrqK13.d.mts → production/route-data-C12CLHiN.d.ts} +1 -1
  36. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v7.5.1
2
+ * react-router v7.5.3-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -189,7 +189,7 @@ function getUrlBasedHistory(getLocation, createHref, validateLocation, options =
189
189
  listener({ action, location: history.location, delta: 1 });
190
190
  }
191
191
  }
192
- function replace2(to, state) {
192
+ function replace(to, state) {
193
193
  action = "REPLACE" /* Replace */;
194
194
  let location = createLocation(history.location, to, state);
195
195
  if (validateLocation) validateLocation(location, to);
@@ -242,7 +242,7 @@ function getUrlBasedHistory(getLocation, createHref, validateLocation, options =
242
242
  };
243
243
  },
244
244
  push,
245
- replace: replace2,
245
+ replace,
246
246
  go(n) {
247
247
  return globalHistory.go(n);
248
248
  }
@@ -1420,20 +1420,20 @@ function createRouter(init) {
1420
1420
  }
1421
1421
  }
1422
1422
  if (isRedirectResult(result)) {
1423
- let replace2;
1423
+ let replace;
1424
1424
  if (opts && opts.replace != null) {
1425
- replace2 = opts.replace;
1425
+ replace = opts.replace;
1426
1426
  } else {
1427
1427
  let location2 = normalizeRedirectLocation(
1428
1428
  result.response.headers.get("Location"),
1429
1429
  new URL(request.url),
1430
1430
  basename
1431
1431
  );
1432
- replace2 = location2 === state.location.pathname + state.location.search;
1432
+ replace = location2 === state.location.pathname + state.location.search;
1433
1433
  }
1434
1434
  await startRedirectNavigation(request, result, true, {
1435
1435
  submission,
1436
- replace: replace2
1436
+ replace
1437
1437
  });
1438
1438
  return { shortCircuited: true };
1439
1439
  }
@@ -1444,7 +1444,11 @@ function createRouter(init) {
1444
1444
  }
1445
1445
  return {
1446
1446
  matches,
1447
- pendingActionResult: [boundaryMatch.route.id, result]
1447
+ pendingActionResult: [
1448
+ boundaryMatch.route.id,
1449
+ result,
1450
+ actionMatch.route.id
1451
+ ]
1448
1452
  };
1449
1453
  }
1450
1454
  return {
@@ -1452,7 +1456,7 @@ function createRouter(init) {
1452
1456
  pendingActionResult: [actionMatch.route.id, result]
1453
1457
  };
1454
1458
  }
1455
- async function handleLoaders(request, location, matches, scopedContext, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace2, initialHydration, flushSync2, pendingActionResult) {
1459
+ async function handleLoaders(request, location, matches, scopedContext, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync2, pendingActionResult) {
1456
1460
  let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);
1457
1461
  let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);
1458
1462
  let shouldUpdateNavigationState = !isUninterruptedRevalidation && !initialHydration;
@@ -1585,7 +1589,7 @@ function createRouter(init) {
1585
1589
  let redirect2 = findRedirect(loaderResults);
1586
1590
  if (redirect2) {
1587
1591
  await startRedirectNavigation(request, redirect2.result, true, {
1588
- replace: replace2
1592
+ replace
1589
1593
  });
1590
1594
  return { shortCircuited: true };
1591
1595
  }
@@ -1593,7 +1597,7 @@ function createRouter(init) {
1593
1597
  if (redirect2) {
1594
1598
  fetchRedirectIds.add(redirect2.key);
1595
1599
  await startRedirectNavigation(request, redirect2.result, true, {
1596
- replace: replace2
1600
+ replace
1597
1601
  });
1598
1602
  return { shortCircuited: true };
1599
1603
  }
@@ -2032,7 +2036,7 @@ function createRouter(init) {
2032
2036
  submission,
2033
2037
  fetcherSubmission,
2034
2038
  preventScrollReset,
2035
- replace: replace2
2039
+ replace
2036
2040
  } = {}) {
2037
2041
  if (redirect2.response.headers.has("X-Remix-Revalidate")) {
2038
2042
  isRevalidationRequired = true;
@@ -2058,7 +2062,7 @@ function createRouter(init) {
2058
2062
  stripBasename(url.pathname, basename) == null;
2059
2063
  }
2060
2064
  if (isDocumentReload) {
2061
- if (replace2) {
2065
+ if (replace) {
2062
2066
  routerWindow.location.replace(location);
2063
2067
  } else {
2064
2068
  routerWindow.location.assign(location);
@@ -2067,7 +2071,7 @@ function createRouter(init) {
2067
2071
  }
2068
2072
  }
2069
2073
  pendingNavigationController = null;
2070
- let redirectNavigationType = replace2 === true || redirect2.response.headers.has("X-Remix-Replace") ? "REPLACE" /* Replace */ : "PUSH" /* Push */;
2074
+ let redirectNavigationType = replace === true || redirect2.response.headers.has("X-Remix-Replace") ? "REPLACE" /* Replace */ : "PUSH" /* Push */;
2071
2075
  let { formMethod, formAction, formEncType } = state.navigation;
2072
2076
  if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {
2073
2077
  submission = getSubmissionFromNavigation(state.navigation);
@@ -3607,7 +3611,9 @@ function processRouteLoaderData(matches, results, pendingActionResult, isStaticH
3607
3611
  });
3608
3612
  if (pendingError !== void 0 && pendingActionResult) {
3609
3613
  errors = { [pendingActionResult[0]]: pendingError };
3610
- loaderData[pendingActionResult[0]] = void 0;
3614
+ if (pendingActionResult[2]) {
3615
+ loaderData[pendingActionResult[2]] = void 0;
3616
+ }
3611
3617
  }
3612
3618
  return {
3613
3619
  loaderData,
@@ -4835,11 +4841,21 @@ async function createRequestInit(request) {
4835
4841
 
4836
4842
  // lib/dom/ssr/single-fetch.tsx
4837
4843
  var SingleFetchRedirectSymbol = Symbol("SingleFetchRedirect");
4844
+ var SINGLE_FETCH_REDIRECT_STATUS = 202;
4838
4845
  var NO_BODY_STATUS_CODES = /* @__PURE__ */ new Set([100, 101, 204, 205]);
4839
- function getSingleFetchDataStrategy(getRouter, getRouteInfo, ssr, basename) {
4846
+ function getTurboStreamSingleFetchDataStrategy(getRouter, manifest, routeModules, ssr, basename) {
4840
4847
  let dataStrategy = getSingleFetchDataStrategyImpl(
4841
4848
  getRouter,
4842
- getRouteInfo,
4849
+ (match) => {
4850
+ let manifestRoute = manifest.routes[match.route.id];
4851
+ invariant2(manifestRoute, "Route not found in manifest");
4852
+ let routeModule = routeModules[match.route.id];
4853
+ return {
4854
+ hasLoader: manifestRoute.hasLoader,
4855
+ hasClientLoader: manifestRoute.hasClientLoader,
4856
+ hasShouldRevalidate: Boolean(routeModule?.shouldRevalidate)
4857
+ };
4858
+ },
4843
4859
  fetchAndDecodeViaTurboStream,
4844
4860
  ssr,
4845
4861
  basename
@@ -4854,7 +4870,7 @@ function getSingleFetchDataStrategyImpl(getRouter, getRouteInfo, fetchAndDecode,
4854
4870
  return singleFetchActionStrategy(args, fetchAndDecode, basename);
4855
4871
  }
4856
4872
  let foundRevalidatingServerLoader = matches.some((m) => {
4857
- let { hasLoader, hasClientLoader } = getRouteInfo(m.route.id);
4873
+ let { hasLoader, hasClientLoader } = getRouteInfo(m);
4858
4874
  return m.unstable_shouldCallHandler() && hasLoader && !hasClientLoader;
4859
4875
  });
4860
4876
  if (!ssr && !foundRevalidatingServerLoader) {
@@ -4906,7 +4922,7 @@ async function nonSsrStrategy(args, getRouteInfo, fetchAndDecode, basename) {
4906
4922
  matchesToLoad.map(
4907
4923
  (m) => m.resolve(async (handler) => {
4908
4924
  try {
4909
- let { hasClientLoader } = getRouteInfo(m.route.id);
4925
+ let { hasClientLoader } = getRouteInfo(m);
4910
4926
  let routeId = m.route.id;
4911
4927
  let result = hasClientLoader ? await handler(async () => {
4912
4928
  let { data: data2 } = await fetchAndDecode(args, basename, [routeId]);
@@ -4932,7 +4948,7 @@ async function singleFetchLoaderNavigationStrategy(args, router2, getRouteInfo,
4932
4948
  async (m, i) => m.resolve(async (handler) => {
4933
4949
  routeDfds[i].resolve();
4934
4950
  let routeId = m.route.id;
4935
- let { hasLoader, hasClientLoader, hasShouldRevalidate } = getRouteInfo(routeId);
4951
+ let { hasLoader, hasClientLoader, hasShouldRevalidate } = getRouteInfo(m);
4936
4952
  let defaultShouldRevalidate = !m.unstable_shouldRevalidateArgs || m.unstable_shouldRevalidateArgs.actionStatus == null || m.unstable_shouldRevalidateArgs.actionStatus < 400;
4937
4953
  let shouldCall = m.unstable_shouldCallHandler(defaultShouldRevalidate);
4938
4954
  if (!shouldCall) {
@@ -4972,8 +4988,9 @@ async function singleFetchLoaderNavigationStrategy(args, router2, getRouteInfo,
4972
4988
  )
4973
4989
  );
4974
4990
  await Promise.all(routeDfds.map((d) => d.promise));
4975
- if ((!router2.state.initialized || routesParams.size === 0) && !window.__reactRouterHdrActive) {
4976
- singleFetchDfd.resolve({});
4991
+ let isInitialLoad = !router2.state.initialized && router2.state.navigation.state === "idle";
4992
+ if ((isInitialLoad || routesParams.size === 0) && !window.__reactRouterHdrActive) {
4993
+ singleFetchDfd.resolve({ routes: {} });
4977
4994
  } else {
4978
4995
  let targetRoutes = ssr && foundOptOutRoute && routesParams.size > 0 ? [...routesParams.keys()] : void 0;
4979
4996
  try {
@@ -5041,6 +5058,20 @@ async function fetchAndDecodeViaTurboStream(args, basename, targetRoutes) {
5041
5058
  if (res.status === 404 && !res.headers.has("X-Remix-Response")) {
5042
5059
  throw new ErrorResponseImpl(404, "Not Found", true);
5043
5060
  }
5061
+ if (res.status === 204 && res.headers.has("X-Remix-Redirect")) {
5062
+ return {
5063
+ status: SINGLE_FETCH_REDIRECT_STATUS,
5064
+ data: {
5065
+ redirect: {
5066
+ redirect: res.headers.get("X-Remix-Redirect"),
5067
+ status: Number(res.headers.get("X-Remix-Status") || "302"),
5068
+ revalidate: res.headers.get("X-Remix-Revalidate") === "true",
5069
+ reload: res.headers.get("X-Remix-Reload-Document") === "true",
5070
+ replace: res.headers.get("X-Remix-Replace") === "true"
5071
+ }
5072
+ }
5073
+ };
5074
+ }
5044
5075
  if (NO_BODY_STATUS_CODES.has(res.status)) {
5045
5076
  let routes = {};
5046
5077
  if (targetRoutes && request.method !== "GET") {
@@ -5116,7 +5147,7 @@ function unwrapSingleFetchResult(result, routeId) {
5116
5147
  redirect: location,
5117
5148
  revalidate,
5118
5149
  reload,
5119
- replace: replace2,
5150
+ replace,
5120
5151
  status
5121
5152
  } = result.redirect;
5122
5153
  throw redirect(location, {
@@ -5125,7 +5156,7 @@ function unwrapSingleFetchResult(result, routeId) {
5125
5156
  // Three R's of redirecting (lol Veep)
5126
5157
  ...revalidate ? { "X-Remix-Revalidate": "yes" } : null,
5127
5158
  ...reload ? { "X-Remix-Reload-Document": "yes" } : null,
5128
- ...replace2 ? { "X-Remix-Replace": "yes" } : null
5159
+ ...replace ? { "X-Remix-Replace": "yes" } : null
5129
5160
  }
5130
5161
  });
5131
5162
  }
@@ -5451,8 +5482,9 @@ function createClientRoutes(manifest, routeModulesCache, initialState, ssr, isSp
5451
5482
  }
5452
5483
  };
5453
5484
  dataRoute.loader.hydrate = shouldHydrateRouteLoader(
5454
- route,
5455
- routeModule,
5485
+ route.id,
5486
+ routeModule.clientLoader,
5487
+ route.hasLoader,
5456
5488
  isSpaMode
5457
5489
  );
5458
5490
  dataRoute.action = ({ request, params, context }, singleFetch) => {
@@ -5650,8 +5682,8 @@ function getRouteModuleComponent(routeModule) {
5650
5682
  return routeModule.default;
5651
5683
  }
5652
5684
  }
5653
- function shouldHydrateRouteLoader(route, routeModule, isSpaMode) {
5654
- return isSpaMode && route.id !== "root" || routeModule.clientLoader != null && (routeModule.clientLoader.hydrate === true || route.hasLoader !== true);
5685
+ function shouldHydrateRouteLoader(routeId, clientLoader, hasLoader, isSpaMode) {
5686
+ return isSpaMode && routeId !== "root" || clientLoader != null && (clientLoader.hydrate === true || hasLoader !== true);
5655
5687
  }
5656
5688
 
5657
5689
  // lib/dom/ssr/fog-of-war.ts
@@ -6062,6 +6094,32 @@ function deserializeErrors(errors) {
6062
6094
  return serialized;
6063
6095
  }
6064
6096
 
6097
+ // lib/dom/ssr/hydration.tsx
6098
+ function getHydrationData(state, routes, getRouteInfo, location, basename, isSpaMode) {
6099
+ let hydrationData = {
6100
+ ...state,
6101
+ loaderData: { ...state.loaderData }
6102
+ };
6103
+ let initialMatches = matchRoutes(routes, location, basename);
6104
+ if (initialMatches) {
6105
+ for (let match of initialMatches) {
6106
+ let routeId = match.route.id;
6107
+ let routeInfo = getRouteInfo(routeId);
6108
+ if (shouldHydrateRouteLoader(
6109
+ routeId,
6110
+ routeInfo.clientLoader,
6111
+ routeInfo.hasLoader,
6112
+ isSpaMode
6113
+ ) && (routeInfo.hasHydrateFallback || !routeInfo.hasLoader)) {
6114
+ delete hydrationData.loaderData[routeId];
6115
+ } else if (!routeInfo.hasLoader) {
6116
+ hydrationData.loaderData[routeId] = null;
6117
+ }
6118
+ }
6119
+ }
6120
+ return hydrationData;
6121
+ }
6122
+
6065
6123
  // lib/dom-export/dom-router-provider.tsx
6066
6124
  function RouterProvider2(props) {
6067
6125
  return /* @__PURE__ */ React10.createElement(RouterProvider, { flushSync: ReactDOM.flushSync, ...props });
@@ -6130,8 +6188,8 @@ function createHydratedRouter({
6130
6188
  ssrInfo.context.isSpaMode
6131
6189
  );
6132
6190
  let hydrationData = void 0;
6133
- let loaderData = ssrInfo.context.state.loaderData;
6134
6191
  if (ssrInfo.context.isSpaMode) {
6192
+ let { loaderData } = ssrInfo.context.state;
6135
6193
  if (ssrInfo.manifest.routes.root?.hasLoader && loaderData && "root" in loaderData) {
6136
6194
  hydrationData = {
6137
6195
  loaderData: {
@@ -6140,31 +6198,18 @@ function createHydratedRouter({
6140
6198
  };
6141
6199
  }
6142
6200
  } else {
6143
- hydrationData = {
6144
- ...ssrInfo.context.state,
6145
- loaderData: { ...loaderData }
6146
- };
6147
- let initialMatches = matchRoutes(
6201
+ hydrationData = getHydrationData(
6202
+ ssrInfo.context.state,
6148
6203
  routes,
6204
+ (routeId) => ({
6205
+ clientLoader: ssrInfo.routeModules[routeId]?.clientLoader,
6206
+ hasLoader: ssrInfo.manifest.routes[routeId]?.hasLoader === true,
6207
+ hasHydrateFallback: ssrInfo.routeModules[routeId]?.HydrateFallback != null
6208
+ }),
6149
6209
  window.location,
6150
- window.__reactRouterContext?.basename
6210
+ window.__reactRouterContext?.basename,
6211
+ ssrInfo.context.isSpaMode
6151
6212
  );
6152
- if (initialMatches) {
6153
- for (let match of initialMatches) {
6154
- let routeId = match.route.id;
6155
- let route = ssrInfo.routeModules[routeId];
6156
- let manifestRoute = ssrInfo.manifest.routes[routeId];
6157
- if (route && manifestRoute && shouldHydrateRouteLoader(
6158
- manifestRoute,
6159
- route,
6160
- ssrInfo.context.isSpaMode
6161
- ) && (route.HydrateFallback || !manifestRoute.hasLoader)) {
6162
- delete hydrationData.loaderData[routeId];
6163
- } else if (manifestRoute && !manifestRoute.hasLoader) {
6164
- hydrationData.loaderData[routeId] = null;
6165
- }
6166
- }
6167
- }
6168
6213
  if (hydrationData && hydrationData.errors) {
6169
6214
  hydrationData.errors = deserializeErrors(hydrationData.errors);
6170
6215
  }
@@ -6180,20 +6225,10 @@ function createHydratedRouter({
6180
6225
  future: {
6181
6226
  unstable_middleware: ssrInfo.context.future.unstable_middleware
6182
6227
  },
6183
- dataStrategy: getSingleFetchDataStrategy(
6228
+ dataStrategy: getTurboStreamSingleFetchDataStrategy(
6184
6229
  () => router2,
6185
- (routeId) => {
6186
- let manifestRoute = ssrInfo.manifest.routes[routeId];
6187
- invariant(manifestRoute, "Route not found in manifest/routeModules");
6188
- let routeModule = ssrInfo.routeModules[routeId];
6189
- return {
6190
- hasLoader: manifestRoute.hasLoader,
6191
- hasClientLoader: manifestRoute.hasClientLoader,
6192
- // In some cases the module may not be loaded yet and we don't care
6193
- // if it's got shouldRevalidate or not
6194
- hasShouldRevalidate: routeModule ? routeModule.shouldRevalidate != null : void 0
6195
- };
6196
- },
6230
+ ssrInfo.manifest,
6231
+ ssrInfo.routeModules,
6197
6232
  ssrInfo.context.ssr,
6198
6233
  ssrInfo.context.basename
6199
6234
  ),
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v7.5.1
2
+ * react-router v7.5.3-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -18,15 +18,14 @@ import {
18
18
  createRouter,
19
19
  decodeViaTurboStream,
20
20
  deserializeErrors,
21
+ getHydrationData,
21
22
  getPatchRoutesOnNavigationFunction,
22
- getSingleFetchDataStrategy,
23
+ getTurboStreamSingleFetchDataStrategy,
23
24
  hydrationRouteProperties,
24
25
  invariant,
25
26
  mapRouteProperties,
26
- matchRoutes,
27
- shouldHydrateRouteLoader,
28
27
  useFogOFWarDiscovery
29
- } from "./chunk-LSOULM7L.mjs";
28
+ } from "./chunk-MKZGATSN.mjs";
30
29
 
31
30
  // lib/dom-export/dom-router-provider.tsx
32
31
  import * as React from "react";
@@ -98,8 +97,8 @@ function createHydratedRouter({
98
97
  ssrInfo.context.isSpaMode
99
98
  );
100
99
  let hydrationData = void 0;
101
- let loaderData = ssrInfo.context.state.loaderData;
102
100
  if (ssrInfo.context.isSpaMode) {
101
+ let { loaderData } = ssrInfo.context.state;
103
102
  if (ssrInfo.manifest.routes.root?.hasLoader && loaderData && "root" in loaderData) {
104
103
  hydrationData = {
105
104
  loaderData: {
@@ -108,31 +107,18 @@ function createHydratedRouter({
108
107
  };
109
108
  }
110
109
  } else {
111
- hydrationData = {
112
- ...ssrInfo.context.state,
113
- loaderData: { ...loaderData }
114
- };
115
- let initialMatches = matchRoutes(
110
+ hydrationData = getHydrationData(
111
+ ssrInfo.context.state,
116
112
  routes,
113
+ (routeId) => ({
114
+ clientLoader: ssrInfo.routeModules[routeId]?.clientLoader,
115
+ hasLoader: ssrInfo.manifest.routes[routeId]?.hasLoader === true,
116
+ hasHydrateFallback: ssrInfo.routeModules[routeId]?.HydrateFallback != null
117
+ }),
117
118
  window.location,
118
- window.__reactRouterContext?.basename
119
+ window.__reactRouterContext?.basename,
120
+ ssrInfo.context.isSpaMode
119
121
  );
120
- if (initialMatches) {
121
- for (let match of initialMatches) {
122
- let routeId = match.route.id;
123
- let route = ssrInfo.routeModules[routeId];
124
- let manifestRoute = ssrInfo.manifest.routes[routeId];
125
- if (route && manifestRoute && shouldHydrateRouteLoader(
126
- manifestRoute,
127
- route,
128
- ssrInfo.context.isSpaMode
129
- ) && (route.HydrateFallback || !manifestRoute.hasLoader)) {
130
- delete hydrationData.loaderData[routeId];
131
- } else if (manifestRoute && !manifestRoute.hasLoader) {
132
- hydrationData.loaderData[routeId] = null;
133
- }
134
- }
135
- }
136
122
  if (hydrationData && hydrationData.errors) {
137
123
  hydrationData.errors = deserializeErrors(hydrationData.errors);
138
124
  }
@@ -148,20 +134,10 @@ function createHydratedRouter({
148
134
  future: {
149
135
  unstable_middleware: ssrInfo.context.future.unstable_middleware
150
136
  },
151
- dataStrategy: getSingleFetchDataStrategy(
137
+ dataStrategy: getTurboStreamSingleFetchDataStrategy(
152
138
  () => router2,
153
- (routeId) => {
154
- let manifestRoute = ssrInfo.manifest.routes[routeId];
155
- invariant(manifestRoute, "Route not found in manifest/routeModules");
156
- let routeModule = ssrInfo.routeModules[routeId];
157
- return {
158
- hasLoader: manifestRoute.hasLoader,
159
- hasClientLoader: manifestRoute.hasClientLoader,
160
- // In some cases the module may not be loaded yet and we don't care
161
- // if it's got shouldRevalidate or not
162
- hasShouldRevalidate: routeModule ? routeModule.shouldRevalidate != null : void 0
163
- };
164
- },
139
+ ssrInfo.manifest,
140
+ ssrInfo.routeModules,
165
141
  ssrInfo.context.ssr,
166
142
  ssrInfo.context.basename
167
143
  ),
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { j as RouteObject, R as RouterInit, F as FutureConfig$1, H as HydrationState, I as InitialEntry, D as DataStrategyFunction, ar as PatchRoutesOnNavigationFunction, a as Router$1, T as To, c as RelativeRoutingType, x as NonIndexRouteObject, a2 as LazyRouteFunction, r as IndexRouteObject, d as Location, e as Action, aq as Navigator, at as RouteMatch, o as StaticHandlerContext, b as RouteManifest, aS as RouteModules, ap as DataRouteObject, aT as RouteModule, a1 as HTMLFormMethod, $ as FormEncType, aC as PageLinkDescriptor, aU as History, z as GetScrollRestorationKeyFunction, N as NavigateOptions, J as Fetcher, m as SerializeFrom, B as BlockerFunction } from './route-data-OcOrqK13.mjs';
2
+ import { k as RouteObject, R as RouterInit, F as FutureConfig$1, H as HydrationState, I as InitialEntry, D as DataStrategyFunction, at as PatchRoutesOnNavigationFunction, a as Router$1, T as To, d as RelativeRoutingType, y as NonIndexRouteObject, a5 as LazyRouteFunction, s as IndexRouteObject, e as Location, f as Action, as as Navigator, av as RouteMatch, p as StaticHandlerContext, c as RouteManifest, b as RouteModules, G as DataRouteObject, J as ClientLoaderFunction, a4 as HTMLFormMethod, a2 as FormEncType, aD as PageLinkDescriptor, aT as History, O as GetScrollRestorationKeyFunction, N as NavigateOptions, Q as Fetcher, n as SerializeFrom, B as BlockerFunction } from './route-data-C12CLHiN.js';
3
3
 
4
4
  /**
5
5
  * @private
@@ -488,7 +488,7 @@ interface EntryRoute extends Route {
488
488
  }
489
489
  declare function createClientRoutesWithHMRRevalidationOptOut(needsRevalidation: Set<string>, manifest: RouteManifest<EntryRoute>, routeModulesCache: RouteModules, initialState: HydrationState, ssr: boolean, isSpaMode: boolean): DataRouteObject[];
490
490
  declare function createClientRoutes(manifest: RouteManifest<EntryRoute>, routeModulesCache: RouteModules, initialState: HydrationState | null, ssr: boolean, isSpaMode: boolean, parentId?: string, routesByParentId?: Record<string, Omit<EntryRoute, "children">[]>, needsRevalidation?: Set<string>): DataRouteObject[];
491
- declare function shouldHydrateRouteLoader(route: EntryRoute, routeModule: RouteModule, isSpaMode: boolean): boolean;
491
+ declare function shouldHydrateRouteLoader(routeId: string, clientLoader: ClientLoaderFunction | undefined, hasLoader: boolean, isSpaMode: boolean): boolean;
492
492
 
493
493
  type ParamKeyValuePair = [string, string];
494
494
  type URLSearchParamsInit = string | ParamKeyValuePair[] | Record<string, string | string[]> | URLSearchParams;
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { j as RouteObject, R as RouterInit, F as FutureConfig$1, H as HydrationState, I as InitialEntry, D as DataStrategyFunction, ar as PatchRoutesOnNavigationFunction, a as Router$1, T as To, c as RelativeRoutingType, x as NonIndexRouteObject, a2 as LazyRouteFunction, r as IndexRouteObject, d as Location, e as Action, aq as Navigator, at as RouteMatch, o as StaticHandlerContext, b as RouteManifest, aS as RouteModules, ap as DataRouteObject, aT as RouteModule, a1 as HTMLFormMethod, $ as FormEncType, aC as PageLinkDescriptor, aU as History, z as GetScrollRestorationKeyFunction, N as NavigateOptions, J as Fetcher, m as SerializeFrom, B as BlockerFunction } from './route-data-OcOrqK13.js';
2
+ import { k as RouteObject, R as RouterInit, F as FutureConfig$1, H as HydrationState, I as InitialEntry, D as DataStrategyFunction, at as PatchRoutesOnNavigationFunction, a as Router$1, T as To, d as RelativeRoutingType, y as NonIndexRouteObject, a5 as LazyRouteFunction, s as IndexRouteObject, e as Location, f as Action, as as Navigator, av as RouteMatch, p as StaticHandlerContext, c as RouteManifest, b as RouteModules, G as DataRouteObject, J as ClientLoaderFunction, a4 as HTMLFormMethod, a2 as FormEncType, aD as PageLinkDescriptor, aT as History, O as GetScrollRestorationKeyFunction, N as NavigateOptions, Q as Fetcher, n as SerializeFrom, B as BlockerFunction } from './route-data-C12CLHiN.mjs';
3
3
 
4
4
  /**
5
5
  * @private
@@ -488,7 +488,7 @@ interface EntryRoute extends Route {
488
488
  }
489
489
  declare function createClientRoutesWithHMRRevalidationOptOut(needsRevalidation: Set<string>, manifest: RouteManifest<EntryRoute>, routeModulesCache: RouteModules, initialState: HydrationState, ssr: boolean, isSpaMode: boolean): DataRouteObject[];
490
490
  declare function createClientRoutes(manifest: RouteManifest<EntryRoute>, routeModulesCache: RouteModules, initialState: HydrationState | null, ssr: boolean, isSpaMode: boolean, parentId?: string, routesByParentId?: Record<string, Omit<EntryRoute, "children">[]>, needsRevalidation?: Set<string>): DataRouteObject[];
491
- declare function shouldHydrateRouteLoader(route: EntryRoute, routeModule: RouteModule, isSpaMode: boolean): boolean;
491
+ declare function shouldHydrateRouteLoader(routeId: string, clientLoader: ClientLoaderFunction | undefined, hasLoader: boolean, isSpaMode: boolean): boolean;
492
492
 
493
493
  type ParamKeyValuePair = [string, string];
494
494
  type URLSearchParamsInit = string | ParamKeyValuePair[] | Record<string, string | string[]> | URLSearchParams;
@@ -1,7 +1,7 @@
1
- import { a as Router, D as DataStrategyFunction, b as RouteManifest, S as ServerRouteModule, M as MiddlewareEnabled, u as unstable_RouterContextProvider, L as LoaderFunctionArgs, A as ActionFunctionArgs, T as To, c as RelativeRoutingType, d as Location, e as Action, P as ParamParseKey, f as Path, g as PathPattern, h as PathMatch, N as NavigateOptions, i as Params$1, j as RouteObject, k as Navigation, l as RevalidationState, U as UIMatch, m as SerializeFrom, B as BlockerFunction, n as Blocker, o as StaticHandlerContext, p as StaticHandler, F as FutureConfig$1, C as CreateStaticHandlerOptions$1, I as InitialEntry, H as HydrationState, q as unstable_InitialContext, r as IndexRouteObject, s as LoaderFunction, t as ActionFunction, v as MetaFunction, w as LinksFunction, x as NonIndexRouteObject, E as Equal, y as RouterState } from './route-data-OcOrqK13.mjs';
2
- export { au as ClientActionFunction, av as ClientActionFunctionArgs, aw as ClientLoaderFunction, ax as ClientLoaderFunctionArgs, ao as DataRouteMatch, ap as DataRouteObject, W as DataStrategyFunctionArgs, X as DataStrategyMatch, Y as DataStrategyResult, _ as ErrorResponse, J as Fetcher, $ as FormEncType, a0 as FormMethod, aF as Future, G as GetScrollPositionFunction, z as GetScrollRestorationKeyFunction, a1 as HTMLFormMethod, ay as HeadersArgs, az as HeadersFunction, aD as HtmlLinkDescriptor, ae as IDLE_BLOCKER, ad as IDLE_FETCHER, ac as IDLE_NAVIGATION, a2 as LazyRouteFunction, aE as LinkDescriptor, aA as MetaArgs, aB as MetaDescriptor, K as NavigationStates, aq as Navigator, aC as PageLinkDescriptor, ar as PatchRoutesOnNavigationFunction, as as PatchRoutesOnNavigationFunctionArgs, a4 as PathParam, a5 as RedirectFunction, at as RouteMatch, V as RouterFetchOptions, R as RouterInit, Q as RouterNavigateOptions, O as RouterSubscriber, a7 as ShouldRevalidateFunction, a8 as ShouldRevalidateFunctionArgs, aL as UNSAFE_DataRouterContext, aM as UNSAFE_DataRouterStateContext, Z as UNSAFE_DataWithResponseInit, aK as UNSAFE_ErrorResponseImpl, aN as UNSAFE_FetchersContext, aO as UNSAFE_LocationContext, aP as UNSAFE_NavigationContext, aQ as UNSAFE_RouteContext, aS as UNSAFE_RouteModules, aR as UNSAFE_ViewTransitionContext, aH as UNSAFE_createBrowserHistory, aJ as UNSAFE_createRouter, aI as UNSAFE_invariant, aa as createPath, af as data, ag as generatePath, ah as isRouteErrorResponse, ai as matchPath, aj as matchRoutes, ab as parsePath, ak as redirect, al as redirectDocument, am as replace, an as resolvePath, a3 as unstable_MiddlewareFunction, a6 as unstable_RouterContext, aG as unstable_SerializesTo, a9 as unstable_createContext } from './route-data-OcOrqK13.mjs';
3
- import { a as Route, A as AssetsManifest, F as FutureConfig, E as EntryContext, C as CriticalCss } from './fog-of-war-CyHis97d.mjs';
4
- export { g as Await, b as AwaitProps, T as BrowserRouter, B as BrowserRouterProps, D as DOMRouterOpts, w as FetcherFormProps, G as FetcherSubmitFunction, a7 as FetcherSubmitOptions, J as FetcherWithComponents, Y as Form, x as FormProps, U as HashRouter, H as HashRouterProps, s as HistoryRouterProps, I as IndexRouteProps, L as LayoutRouteProps, V as Link, t as LinkProps, ae as Links, h as MemoryRouter, M as MemoryRouterOpts, c as MemoryRouterProps, ad as Meta, X as NavLink, u as NavLinkProps, v as NavLinkRenderProps, i as Navigate, N as NavigateProps, j as Outlet, O as OutletProps, a8 as ParamKeyValuePair, P as PathRouteProps, ag as PrefetchPageLinks, k as Route, d as RouteProps, l as Router, e as RouterProps, m as RouterProvider, R as RouterProviderProps, n as Routes, f as RoutesProps, af as Scripts, ah as ScriptsProps, Z as ScrollRestoration, S as ScrollRestorationProps, y as SetURLSearchParams, z as SubmitFunction, a9 as SubmitOptions, ab as SubmitTarget, ak as UNSAFE_FrameworkContext, an as UNSAFE_createClientRoutes, ao as UNSAFE_createClientRoutesWithHMRRevalidationOptOut, al as UNSAFE_getPatchRoutesOnNavigationFunction, ai as UNSAFE_hydrationRouteProperties, aj as UNSAFE_mapRouteProperties, ap as UNSAFE_shouldHydrateRouteLoader, am as UNSAFE_useFogOFWarDiscovery, aq as UNSAFE_useScrollRestoration, aa as URLSearchParamsInit, K as createBrowserRouter, Q as createHashRouter, o as createMemoryRouter, p as createRoutesFromChildren, q as createRoutesFromElements, ac as createSearchParams, r as renderMatches, W as unstable_HistoryRouter, a5 as unstable_usePrompt, a4 as useBeforeUnload, a2 as useFetcher, a3 as useFetchers, a1 as useFormAction, _ as useLinkClickHandler, $ as useSearchParams, a0 as useSubmit, a6 as useViewTransitionState } from './fog-of-war-CyHis97d.mjs';
1
+ import { a as Router, b as RouteModules, D as DataStrategyFunction, c as RouteManifest, S as ServerRouteModule, M as MiddlewareEnabled, u as unstable_RouterContextProvider, L as LoaderFunctionArgs, A as ActionFunctionArgs, T as To, d as RelativeRoutingType, e as Location, f as Action, P as ParamParseKey, g as Path, h as PathPattern, i as PathMatch, N as NavigateOptions, j as Params$1, k as RouteObject, l as Navigation, m as RevalidationState, U as UIMatch, n as SerializeFrom, B as BlockerFunction, o as Blocker, p as StaticHandlerContext, q as StaticHandler, F as FutureConfig$1, C as CreateStaticHandlerOptions$1, I as InitialEntry, H as HydrationState, r as unstable_InitialContext, s as IndexRouteObject, t as LoaderFunction, v as ActionFunction, w as MetaFunction, x as LinksFunction, y as NonIndexRouteObject, E as Equal, z as RouterState, G as DataRouteObject, J as ClientLoaderFunction } from './route-data-C12CLHiN.mjs';
2
+ export { aw as ClientActionFunction, ax as ClientActionFunctionArgs, ay as ClientLoaderFunctionArgs, ar as DataRouteMatch, Z as DataStrategyFunctionArgs, _ as DataStrategyMatch, $ as DataStrategyResult, a1 as ErrorResponse, Q as Fetcher, a2 as FormEncType, a3 as FormMethod, aG as Future, K as GetScrollPositionFunction, O as GetScrollRestorationKeyFunction, a4 as HTMLFormMethod, az as HeadersArgs, aA as HeadersFunction, aE as HtmlLinkDescriptor, ah as IDLE_BLOCKER, ag as IDLE_FETCHER, af as IDLE_NAVIGATION, a5 as LazyRouteFunction, aF as LinkDescriptor, aB as MetaArgs, aC as MetaDescriptor, V as NavigationStates, as as Navigator, aD as PageLinkDescriptor, at as PatchRoutesOnNavigationFunction, au as PatchRoutesOnNavigationFunctionArgs, a7 as PathParam, a8 as RedirectFunction, av as RouteMatch, Y as RouterFetchOptions, R as RouterInit, X as RouterNavigateOptions, W as RouterSubscriber, aa as ShouldRevalidateFunction, ab as ShouldRevalidateFunctionArgs, aM as UNSAFE_DataRouterContext, aN as UNSAFE_DataRouterStateContext, a0 as UNSAFE_DataWithResponseInit, aL as UNSAFE_ErrorResponseImpl, aO as UNSAFE_FetchersContext, aP as UNSAFE_LocationContext, aQ as UNSAFE_NavigationContext, aR as UNSAFE_RouteContext, aS as UNSAFE_ViewTransitionContext, aI as UNSAFE_createBrowserHistory, aK as UNSAFE_createRouter, aJ as UNSAFE_invariant, ad as createPath, ai as data, aj as generatePath, ak as isRouteErrorResponse, al as matchPath, am as matchRoutes, ae as parsePath, an as redirect, ao as redirectDocument, ap as replace, aq as resolvePath, a6 as unstable_MiddlewareFunction, a9 as unstable_RouterContext, aH as unstable_SerializesTo, ac as unstable_createContext } from './route-data-C12CLHiN.mjs';
3
+ import { A as AssetsManifest, a as Route, F as FutureConfig, E as EntryContext, C as CriticalCss } from './fog-of-war-D2zsXvum.mjs';
4
+ export { g as Await, b as AwaitProps, T as BrowserRouter, B as BrowserRouterProps, D as DOMRouterOpts, w as FetcherFormProps, G as FetcherSubmitFunction, a7 as FetcherSubmitOptions, J as FetcherWithComponents, Y as Form, x as FormProps, U as HashRouter, H as HashRouterProps, s as HistoryRouterProps, I as IndexRouteProps, L as LayoutRouteProps, V as Link, t as LinkProps, ae as Links, h as MemoryRouter, M as MemoryRouterOpts, c as MemoryRouterProps, ad as Meta, X as NavLink, u as NavLinkProps, v as NavLinkRenderProps, i as Navigate, N as NavigateProps, j as Outlet, O as OutletProps, a8 as ParamKeyValuePair, P as PathRouteProps, ag as PrefetchPageLinks, k as Route, d as RouteProps, l as Router, e as RouterProps, m as RouterProvider, R as RouterProviderProps, n as Routes, f as RoutesProps, af as Scripts, ah as ScriptsProps, Z as ScrollRestoration, S as ScrollRestorationProps, y as SetURLSearchParams, z as SubmitFunction, a9 as SubmitOptions, ab as SubmitTarget, ak as UNSAFE_FrameworkContext, an as UNSAFE_createClientRoutes, ao as UNSAFE_createClientRoutesWithHMRRevalidationOptOut, al as UNSAFE_getPatchRoutesOnNavigationFunction, ai as UNSAFE_hydrationRouteProperties, aj as UNSAFE_mapRouteProperties, ap as UNSAFE_shouldHydrateRouteLoader, am as UNSAFE_useFogOFWarDiscovery, aq as UNSAFE_useScrollRestoration, aa as URLSearchParamsInit, K as createBrowserRouter, Q as createHashRouter, o as createMemoryRouter, p as createRoutesFromChildren, q as createRoutesFromElements, ac as createSearchParams, r as renderMatches, W as unstable_HistoryRouter, a5 as unstable_usePrompt, a4 as useBeforeUnload, a2 as useFetcher, a3 as useFetchers, a1 as useFormAction, _ as useLinkClickHandler, $ as useSearchParams, a0 as useSubmit, a6 as useViewTransitionState } from './fog-of-war-D2zsXvum.mjs';
5
5
  import * as React from 'react';
6
6
  import { ReactElement } from 'react';
7
7
  import { ParseOptions, SerializeOptions } from 'cookie';
@@ -9,12 +9,7 @@ export { ParseOptions as CookieParseOptions, SerializeOptions as CookieSerialize
9
9
  import { A as AppLoadContext } from './data-CQbyyGzl.mjs';
10
10
 
11
11
  declare const SingleFetchRedirectSymbol: unique symbol;
12
- type GetRouteInfoFunction = (routeId: string) => {
13
- hasLoader: boolean;
14
- hasClientLoader: boolean;
15
- hasShouldRevalidate: boolean | undefined;
16
- };
17
- declare function getSingleFetchDataStrategy(getRouter: () => Router, getRouteInfo: GetRouteInfoFunction, ssr: boolean, basename: string | undefined): DataStrategyFunction;
12
+ declare function getTurboStreamSingleFetchDataStrategy(getRouter: () => Router, manifest: AssetsManifest, routeModules: RouteModules, ssr: boolean, basename: string | undefined): DataStrategyFunction;
18
13
  declare function decodeViaTurboStream(body: ReadableStream<Uint8Array>, global: Window | typeof globalThis): Promise<{
19
14
  done: Promise<undefined>;
20
15
  value: unknown;
@@ -620,7 +615,7 @@ interface SessionData {
620
615
  /**
621
616
  * Session persists data across HTTP requests.
622
617
  *
623
- * @see https://remix.run/utils/sessions#session-api
618
+ * @see https://reactrouter.com/explanation/sessions-and-cookies#sessions
624
619
  */
625
620
  interface Session<Data = SessionData, FlashData = Data> {
626
621
  /**
@@ -670,15 +665,13 @@ type CreateSessionFunction = <Data = SessionData, FlashData = Data>(initialData?
670
665
  *
671
666
  * Note: This function is typically not invoked directly by application code.
672
667
  * Instead, use a `SessionStorage` object's `getSession` method.
673
- *
674
- * @see https://remix.run/utils/sessions#createsession
675
668
  */
676
669
  declare const createSession: CreateSessionFunction;
677
670
  type IsSessionFunction = (object: any) => object is Session;
678
671
  /**
679
- * Returns true if an object is a Remix session.
672
+ * Returns true if an object is a React Router session.
680
673
  *
681
- * @see https://remix.run/utils/sessions#issession
674
+ * @see https://reactrouter.com/api/utils/isSession
682
675
  */
683
676
  declare const isSession: IsSessionFunction;
684
677
  /**
@@ -842,4 +835,14 @@ declare class RemixErrorBoundary extends React.Component<RemixErrorBoundaryProps
842
835
  render(): string | number | boolean | Iterable<React.ReactNode> | React.JSX.Element | null | undefined;
843
836
  }
844
837
 
845
- export { ActionFunction, ActionFunctionArgs, AppLoadContext, Blocker, BlockerFunction, type Cookie, type CookieOptions, type CookieSignatureOptions, type CreateRequestHandlerFunction, Router as DataRouter, DataStrategyFunction, EntryContext, type FlashSessionData, type HandleDataRequestFunction, type HandleDocumentRequestFunction, type HandleErrorFunction, HydrationState, IndexRouteObject, InitialEntry, type IsCookieFunction, type IsSessionFunction, LinksFunction, LoaderFunction, LoaderFunctionArgs, Location, MetaFunction, type NavigateFunction, NavigateOptions, Navigation, Action as NavigationType, NonIndexRouteObject, ParamParseKey, Params$1 as Params, Path, PathMatch, PathPattern, type Register, RelativeRoutingType, type RequestHandler, RevalidationState, RouteObject, RouterState, type RoutesTestStubProps, type ServerBuild, type ServerEntryModule, ServerRouter, type ServerRouterProps, type Session, type SessionData, type SessionIdStorageStrategy, type SessionStorage, StaticHandler, StaticHandlerContext, StaticRouter, type StaticRouterProps, StaticRouterProvider, type StaticRouterProviderProps, To, UIMatch, AssetsManifest as UNSAFE_AssetsManifest, MiddlewareEnabled as UNSAFE_MiddlewareEnabled, RemixErrorBoundary as UNSAFE_RemixErrorBoundary, ServerMode as UNSAFE_ServerMode, SingleFetchRedirectSymbol as UNSAFE_SingleFetchRedirectSymbol, decodeViaTurboStream as UNSAFE_decodeViaTurboStream, deserializeErrors as UNSAFE_deserializeErrors, getSingleFetchDataStrategy as UNSAFE_getSingleFetchDataStrategy, createCookie, createCookieSessionStorage, createMemorySessionStorage, createRequestHandler, createRoutesStub, createSession, createSessionStorage, createStaticHandler, createStaticRouter, href, isCookie, isSession, unstable_InitialContext, unstable_RouterContextProvider, setDevServerHooks as unstable_setDevServerHooks, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes };
838
+ declare function getHydrationData(state: {
839
+ loaderData?: Router["state"]["loaderData"];
840
+ actionData?: Router["state"]["actionData"];
841
+ errors?: Router["state"]["errors"];
842
+ }, routes: DataRouteObject[], getRouteInfo: (routeId: string) => {
843
+ clientLoader: ClientLoaderFunction | undefined;
844
+ hasLoader: boolean;
845
+ hasHydrateFallback: boolean;
846
+ }, location: Path, basename: string | undefined, isSpaMode: boolean): HydrationState;
847
+
848
+ export { ActionFunction, ActionFunctionArgs, AppLoadContext, Blocker, BlockerFunction, ClientLoaderFunction, type Cookie, type CookieOptions, type CookieSignatureOptions, type CreateRequestHandlerFunction, DataRouteObject, Router as DataRouter, DataStrategyFunction, EntryContext, type FlashSessionData, type HandleDataRequestFunction, type HandleDocumentRequestFunction, type HandleErrorFunction, HydrationState, IndexRouteObject, InitialEntry, type IsCookieFunction, type IsSessionFunction, LinksFunction, LoaderFunction, LoaderFunctionArgs, Location, MetaFunction, type NavigateFunction, NavigateOptions, Navigation, Action as NavigationType, NonIndexRouteObject, ParamParseKey, Params$1 as Params, Path, PathMatch, PathPattern, type Register, RelativeRoutingType, type RequestHandler, RevalidationState, RouteObject, RouterState, type RoutesTestStubProps, type ServerBuild, type ServerEntryModule, ServerRouter, type ServerRouterProps, type Session, type SessionData, type SessionIdStorageStrategy, type SessionStorage, StaticHandler, StaticHandlerContext, StaticRouter, type StaticRouterProps, StaticRouterProvider, type StaticRouterProviderProps, To, UIMatch, AssetsManifest as UNSAFE_AssetsManifest, MiddlewareEnabled as UNSAFE_MiddlewareEnabled, RemixErrorBoundary as UNSAFE_RemixErrorBoundary, RouteModules as UNSAFE_RouteModules, ServerMode as UNSAFE_ServerMode, SingleFetchRedirectSymbol as UNSAFE_SingleFetchRedirectSymbol, decodeViaTurboStream as UNSAFE_decodeViaTurboStream, deserializeErrors as UNSAFE_deserializeErrors, getHydrationData as UNSAFE_getHydrationData, getTurboStreamSingleFetchDataStrategy as UNSAFE_getTurboStreamSingleFetchDataStrategy, createCookie, createCookieSessionStorage, createMemorySessionStorage, createRequestHandler, createRoutesStub, createSession, createSessionStorage, createStaticHandler, createStaticRouter, href, isCookie, isSession, unstable_InitialContext, unstable_RouterContextProvider, setDevServerHooks as unstable_setDevServerHooks, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes };