react-router 8.3.1 → 8.4.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 (176) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/development/dom-export.js +1 -1
  3. package/dist/development/index-react-server-client.js +1 -1
  4. package/dist/development/index-react-server.d.ts +42 -48
  5. package/dist/development/index-react-server.js +75 -31
  6. package/dist/development/index.d.ts +2 -2
  7. package/dist/development/index.js +3 -3
  8. package/dist/development/lib/actions.js +1 -1
  9. package/dist/development/lib/components.js +45 -8
  10. package/dist/development/lib/context.d.ts +13 -5
  11. package/dist/development/lib/context.js +11 -3
  12. package/dist/development/lib/dom/dom.js +1 -1
  13. package/dist/development/lib/dom/lib.js +14 -32
  14. package/dist/development/lib/dom/server.d.ts +6 -1
  15. package/dist/development/lib/dom/server.js +40 -14
  16. package/dist/development/lib/dom/ssr/components.js +15 -23
  17. package/dist/development/lib/dom/ssr/data.js +1 -1
  18. package/dist/development/lib/dom/ssr/entry.d.ts +4 -0
  19. package/dist/development/lib/dom/ssr/errorBoundaries.js +1 -1
  20. package/dist/development/lib/dom/ssr/fallback.js +1 -1
  21. package/dist/development/lib/dom/ssr/fog-of-war.js +33 -12
  22. package/dist/development/lib/dom/ssr/hydration.d.ts +3 -1
  23. package/dist/development/lib/dom/ssr/hydration.js +6 -4
  24. package/dist/development/lib/dom/ssr/invariant.js +1 -1
  25. package/dist/development/lib/dom/ssr/links.js +1 -1
  26. package/dist/development/lib/dom/ssr/markup.js +5 -2
  27. package/dist/development/lib/dom/ssr/routeModules.js +1 -1
  28. package/dist/development/lib/dom/ssr/routes-test-stub.js +1 -1
  29. package/dist/development/lib/dom/ssr/routes.js +1 -1
  30. package/dist/development/lib/dom/ssr/server.js +2 -2
  31. package/dist/development/lib/dom/ssr/single-fetch.js +10 -19
  32. package/dist/development/lib/dom-export/dom-router-provider.js +1 -1
  33. package/dist/development/lib/dom-export/hydrated-router.js +2 -1
  34. package/dist/development/lib/errors.js +1 -1
  35. package/dist/development/lib/hooks.js +49 -44
  36. package/dist/development/lib/href.js +1 -1
  37. package/dist/development/lib/router/history.js +1 -1
  38. package/dist/development/lib/router/instrumentation.js +1 -1
  39. package/dist/development/lib/router/matcher-route-pattern.d.ts +2 -0
  40. package/dist/development/lib/router/matcher-route-pattern.js +216 -0
  41. package/dist/development/lib/router/matcher-route-pattern.preload.d.ts +20 -0
  42. package/dist/development/lib/router/matcher-route-pattern.preload.js +36 -0
  43. package/dist/development/lib/router/matcher.d.ts +2 -0
  44. package/dist/development/lib/router/matcher.js +29 -0
  45. package/dist/development/lib/router/navigation.js +1 -1
  46. package/dist/development/lib/router/router.d.ts +13 -7
  47. package/dist/development/lib/router/router.js +81 -66
  48. package/dist/development/lib/router/url.js +1 -1
  49. package/dist/development/lib/router/utils.d.ts +6 -1
  50. package/dist/development/lib/router/utils.js +6 -4
  51. package/dist/development/lib/rsc/browser.js +2 -1
  52. package/dist/development/lib/rsc/errorBoundaries.js +1 -1
  53. package/dist/development/lib/rsc/html-stream/browser.js +1 -1
  54. package/dist/development/lib/rsc/html-stream/server.js +2 -4
  55. package/dist/development/lib/rsc/route-modules.js +1 -1
  56. package/dist/development/lib/rsc/server.rsc.d.ts +7 -0
  57. package/dist/development/lib/rsc/server.ssr.js +25 -21
  58. package/dist/development/lib/server-runtime/cookies.js +1 -1
  59. package/dist/development/lib/server-runtime/crypto.js +1 -1
  60. package/dist/development/lib/server-runtime/data.js +1 -1
  61. package/dist/development/lib/server-runtime/dev.js +1 -1
  62. package/dist/development/lib/server-runtime/entry.js +1 -1
  63. package/dist/development/lib/server-runtime/errors.js +1 -1
  64. package/dist/development/lib/server-runtime/headers.js +1 -1
  65. package/dist/development/lib/server-runtime/invariant.js +1 -1
  66. package/dist/development/lib/server-runtime/mode.js +1 -1
  67. package/dist/development/lib/server-runtime/routeMatching.js +3 -4
  68. package/dist/development/lib/server-runtime/routes.js +1 -1
  69. package/dist/development/lib/server-runtime/server.js +7 -6
  70. package/dist/development/lib/server-runtime/serverHandoff.js +1 -1
  71. package/dist/development/lib/server-runtime/sessions/cookieStorage.js +1 -1
  72. package/dist/development/lib/server-runtime/sessions/memoryStorage.js +1 -1
  73. package/dist/development/lib/server-runtime/sessions.js +1 -1
  74. package/dist/development/lib/server-runtime/single-fetch.js +1 -1
  75. package/dist/development/lib/server-runtime/urls.js +1 -1
  76. package/dist/development/lib/server-runtime/warnings.js +1 -1
  77. package/dist/development/lib/types/internal.js +1 -1
  78. package/dist/development/route-pattern.d.ts +3 -0
  79. package/dist/development/route-pattern.js +12 -0
  80. package/dist/development/vendor/turbo-stream-v2/flatten.js +1 -1
  81. package/dist/development/vendor/turbo-stream-v2/turbo-stream.js +1 -1
  82. package/dist/development/vendor/turbo-stream-v2/unflatten.js +1 -1
  83. package/dist/development/vendor/turbo-stream-v2/utils.js +1 -1
  84. package/dist/production/dom-export.js +1 -1
  85. package/dist/production/index-react-server-client.js +1 -1
  86. package/dist/production/index-react-server.d.ts +42 -48
  87. package/dist/production/index-react-server.js +75 -31
  88. package/dist/production/index.d.ts +2 -2
  89. package/dist/production/index.js +3 -3
  90. package/dist/production/lib/actions.js +1 -1
  91. package/dist/production/lib/components.js +45 -8
  92. package/dist/production/lib/context.d.ts +13 -5
  93. package/dist/production/lib/context.js +11 -3
  94. package/dist/production/lib/dom/dom.js +1 -1
  95. package/dist/production/lib/dom/lib.js +14 -32
  96. package/dist/production/lib/dom/server.d.ts +6 -1
  97. package/dist/production/lib/dom/server.js +40 -14
  98. package/dist/production/lib/dom/ssr/components.js +15 -23
  99. package/dist/production/lib/dom/ssr/data.js +1 -1
  100. package/dist/production/lib/dom/ssr/entry.d.ts +4 -0
  101. package/dist/production/lib/dom/ssr/errorBoundaries.js +1 -1
  102. package/dist/production/lib/dom/ssr/fallback.js +1 -1
  103. package/dist/production/lib/dom/ssr/fog-of-war.js +33 -12
  104. package/dist/production/lib/dom/ssr/hydration.d.ts +3 -1
  105. package/dist/production/lib/dom/ssr/hydration.js +6 -4
  106. package/dist/production/lib/dom/ssr/invariant.js +1 -1
  107. package/dist/production/lib/dom/ssr/links.js +1 -1
  108. package/dist/production/lib/dom/ssr/markup.js +5 -2
  109. package/dist/production/lib/dom/ssr/routeModules.js +1 -1
  110. package/dist/production/lib/dom/ssr/routes-test-stub.js +1 -1
  111. package/dist/production/lib/dom/ssr/routes.js +1 -1
  112. package/dist/production/lib/dom/ssr/server.js +2 -2
  113. package/dist/production/lib/dom/ssr/single-fetch.js +10 -19
  114. package/dist/production/lib/dom-export/dom-router-provider.js +1 -1
  115. package/dist/production/lib/dom-export/hydrated-router.js +2 -1
  116. package/dist/production/lib/errors.js +1 -1
  117. package/dist/production/lib/hooks.js +49 -44
  118. package/dist/production/lib/href.js +1 -1
  119. package/dist/production/lib/router/history.js +1 -1
  120. package/dist/production/lib/router/instrumentation.js +1 -1
  121. package/dist/production/lib/router/matcher-route-pattern.d.ts +2 -0
  122. package/dist/production/lib/router/matcher-route-pattern.js +216 -0
  123. package/dist/production/lib/router/matcher-route-pattern.preload.d.ts +20 -0
  124. package/dist/production/lib/router/matcher-route-pattern.preload.js +36 -0
  125. package/dist/production/lib/router/matcher.d.ts +2 -0
  126. package/dist/production/lib/router/matcher.js +29 -0
  127. package/dist/production/lib/router/navigation.js +1 -1
  128. package/dist/production/lib/router/router.d.ts +13 -7
  129. package/dist/production/lib/router/router.js +81 -66
  130. package/dist/production/lib/router/url.js +1 -1
  131. package/dist/production/lib/router/utils.d.ts +6 -1
  132. package/dist/production/lib/router/utils.js +6 -4
  133. package/dist/production/lib/rsc/browser.js +2 -1
  134. package/dist/production/lib/rsc/errorBoundaries.js +1 -1
  135. package/dist/production/lib/rsc/html-stream/browser.js +1 -1
  136. package/dist/production/lib/rsc/html-stream/server.js +2 -4
  137. package/dist/production/lib/rsc/route-modules.js +1 -1
  138. package/dist/production/lib/rsc/server.rsc.d.ts +7 -0
  139. package/dist/production/lib/rsc/server.ssr.js +25 -21
  140. package/dist/production/lib/server-runtime/cookies.js +1 -1
  141. package/dist/production/lib/server-runtime/crypto.js +1 -1
  142. package/dist/production/lib/server-runtime/data.js +1 -1
  143. package/dist/production/lib/server-runtime/dev.js +1 -1
  144. package/dist/production/lib/server-runtime/entry.js +1 -1
  145. package/dist/production/lib/server-runtime/errors.js +1 -1
  146. package/dist/production/lib/server-runtime/headers.js +1 -1
  147. package/dist/production/lib/server-runtime/invariant.js +1 -1
  148. package/dist/production/lib/server-runtime/mode.js +1 -1
  149. package/dist/production/lib/server-runtime/routeMatching.js +3 -4
  150. package/dist/production/lib/server-runtime/routes.js +1 -1
  151. package/dist/production/lib/server-runtime/server.js +7 -6
  152. package/dist/production/lib/server-runtime/serverHandoff.js +1 -1
  153. package/dist/production/lib/server-runtime/sessions/cookieStorage.js +1 -1
  154. package/dist/production/lib/server-runtime/sessions/memoryStorage.js +1 -1
  155. package/dist/production/lib/server-runtime/sessions.js +1 -1
  156. package/dist/production/lib/server-runtime/single-fetch.js +1 -1
  157. package/dist/production/lib/server-runtime/urls.js +1 -1
  158. package/dist/production/lib/server-runtime/warnings.js +1 -1
  159. package/dist/production/lib/types/internal.js +1 -1
  160. package/dist/production/route-pattern.d.ts +3 -0
  161. package/dist/production/route-pattern.js +12 -0
  162. package/dist/production/vendor/turbo-stream-v2/flatten.js +1 -1
  163. package/dist/production/vendor/turbo-stream-v2/turbo-stream.js +1 -1
  164. package/dist/production/vendor/turbo-stream-v2/unflatten.js +1 -1
  165. package/dist/production/vendor/turbo-stream-v2/utils.js +1 -1
  166. package/docs/how-to/fetchers.md +6 -1
  167. package/docs/how-to/middleware.md +3 -1
  168. package/docs/how-to/optimize-revalidation.md +178 -5
  169. package/docs/how-to/react-server-components.md +26 -3
  170. package/docs/how-to/resource-routes.md +3 -0
  171. package/docs/start/data/actions.md +2 -1
  172. package/docs/start/data/route-object.md +21 -6
  173. package/docs/start/framework/actions.md +4 -2
  174. package/docs/start/framework/route-module.md +32 -5
  175. package/docs/upgrading/future.md +68 -0
  176. package/package.json +11 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -12,7 +12,7 @@
12
12
  import { Action, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, invariant, parsePath } from "./lib/router/history.js";
13
13
  import { ErrorResponseImpl, RouterContextProvider, createContext, data, defaultMapRouteProperties, generatePath, isRouteErrorResponse, matchPath, matchRoutes, redirect, redirectDocument, replace, resolvePath } from "./lib/router/utils.js";
14
14
  import { IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, createRouter, createStaticHandler } from "./lib/router/router.js";
15
- import { AwaitContextProvider, DataRouterContext, DataRouterStateContext, FetchersContext, LocationContext, NavigationContext, RouteContext, ViewTransitionContext } from "./lib/context.js";
15
+ import { AwaitContextProvider, DataRouterContext, DataRouterDataContext, DataRouterNavigationContext, DataRouterStateContext, FetchersContext, LocationContext, NavigationContext, RouteContext, ViewTransitionContext } from "./lib/context.js";
16
16
  import { useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRoute, useRouteError, useRouteLoaderData, useRouterState, useRoutes } from "./lib/hooks.js";
17
17
  import { Await, MemoryRouter, Navigate, Outlet, Route, Router, RouterProvider, Routes, WithComponentProps, WithErrorBoundaryProps, WithHydrateFallbackProps, createMemoryRouter, createRoutesFromChildren, createRoutesFromElements, hydrationRouteProperties, renderMatches, withComponentProps, withErrorBoundaryProps, withHydrateFallbackProps } from "./lib/components.js";
18
18
  import { createSearchParams } from "./lib/dom/dom.js";
@@ -42,4 +42,4 @@ import { getHydrationData } from "./lib/dom/ssr/hydration.js";
42
42
  * @mergeModuleWith react-router
43
43
  */
44
44
  //#endregion
45
- export { Await, BrowserRouter, Form, HashRouter, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, Link, Links, MemoryRouter, Meta, NavLink, Navigate, Action as NavigationType, Outlet, PrefetchPageLinks, Route, Router, RouterContextProvider, RouterProvider, Routes, Scripts, ScrollRestoration, ServerRouter, StaticRouter, StaticRouterProvider, AwaitContextProvider as UNSAFE_AwaitContextProvider, DataRouterContext as UNSAFE_DataRouterContext, DataRouterStateContext as UNSAFE_DataRouterStateContext, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, FetchersContext as UNSAFE_FetchersContext, FrameworkContext as UNSAFE_FrameworkContext, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RSCDefaultRootErrorBoundary as UNSAFE_RSCDefaultRootErrorBoundary, RemixErrorBoundary as UNSAFE_RemixErrorBoundary, RouteContext as UNSAFE_RouteContext, ServerMode as UNSAFE_ServerMode, SingleFetchRedirectSymbol as UNSAFE_SingleFetchRedirectSymbol, ViewTransitionContext as UNSAFE_ViewTransitionContext, WithComponentProps as UNSAFE_WithComponentProps, WithErrorBoundaryProps as UNSAFE_WithErrorBoundaryProps, WithHydrateFallbackProps as UNSAFE_WithHydrateFallbackProps, createBrowserHistory as UNSAFE_createBrowserHistory, createClientRoutes as UNSAFE_createClientRoutes, createClientRoutesWithHMRRevalidationOptOut as UNSAFE_createClientRoutesWithHMRRevalidationOptOut, createHashHistory as UNSAFE_createHashHistory, createMemoryHistory as UNSAFE_createMemoryHistory, createRouter as UNSAFE_createRouter, decodeViaTurboStream as UNSAFE_decodeViaTurboStream, defaultMapRouteProperties as UNSAFE_defaultMapRouteProperties, getHydrationData as UNSAFE_getHydrationData, getPatchRoutesOnNavigationFunction as UNSAFE_getPatchRoutesOnNavigationFunction, getTurboStreamSingleFetchDataStrategy as UNSAFE_getTurboStreamSingleFetchDataStrategy, hydrationRouteProperties as UNSAFE_hydrationRouteProperties, invariant as UNSAFE_invariant, shouldHydrateRouteLoader as UNSAFE_shouldHydrateRouteLoader, useFogOFWarDiscovery as UNSAFE_useFogOFWarDiscovery, useScrollRestoration as UNSAFE_useScrollRestoration, withComponentProps as UNSAFE_withComponentProps, withErrorBoundaryProps as UNSAFE_withErrorBoundaryProps, withHydrateFallbackProps as UNSAFE_withHydrateFallbackProps, createBrowserRouter, createContext, createCookie, createCookieSessionStorage, createHashRouter, createMemoryRouter, createMemorySessionStorage, createPath, createRequestHandler, createRoutesFromChildren, createRoutesFromElements, createRoutesStub, createSearchParams, createSession, createSessionStorage, createStaticHandler, createStaticRouter, data, generatePath, href, isCookie, isRouteErrorResponse, isSession, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, HistoryRouter as unstable_HistoryRouter, RSCStaticRouter as unstable_RSCStaticRouter, routeRSCServerRequest as unstable_routeRSCServerRequest, setDevServerHooks as unstable_setDevServerHooks, usePrompt as unstable_usePrompt, useRoute as unstable_useRoute, useRouterState as unstable_useRouterState, useActionData, useAsyncError, useAsyncValue, useBeforeUnload, useBlocker, useFetcher, useFetchers, useFormAction, useHref, useInRouterContext, useLinkClickHandler, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, useSearchParams, useSubmit, useViewTransitionState };
45
+ export { Await, BrowserRouter, Form, HashRouter, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, Link, Links, MemoryRouter, Meta, NavLink, Navigate, Action as NavigationType, Outlet, PrefetchPageLinks, Route, Router, RouterContextProvider, RouterProvider, Routes, Scripts, ScrollRestoration, ServerRouter, StaticRouter, StaticRouterProvider, AwaitContextProvider as UNSAFE_AwaitContextProvider, DataRouterContext as UNSAFE_DataRouterContext, DataRouterDataContext as UNSAFE_DataRouterDataContext, DataRouterNavigationContext as UNSAFE_DataRouterNavigationContext, DataRouterStateContext as UNSAFE_DataRouterStateContext, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, FetchersContext as UNSAFE_FetchersContext, FrameworkContext as UNSAFE_FrameworkContext, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RSCDefaultRootErrorBoundary as UNSAFE_RSCDefaultRootErrorBoundary, RemixErrorBoundary as UNSAFE_RemixErrorBoundary, RouteContext as UNSAFE_RouteContext, ServerMode as UNSAFE_ServerMode, SingleFetchRedirectSymbol as UNSAFE_SingleFetchRedirectSymbol, ViewTransitionContext as UNSAFE_ViewTransitionContext, WithComponentProps as UNSAFE_WithComponentProps, WithErrorBoundaryProps as UNSAFE_WithErrorBoundaryProps, WithHydrateFallbackProps as UNSAFE_WithHydrateFallbackProps, createBrowserHistory as UNSAFE_createBrowserHistory, createClientRoutes as UNSAFE_createClientRoutes, createClientRoutesWithHMRRevalidationOptOut as UNSAFE_createClientRoutesWithHMRRevalidationOptOut, createHashHistory as UNSAFE_createHashHistory, createMemoryHistory as UNSAFE_createMemoryHistory, createRouter as UNSAFE_createRouter, decodeViaTurboStream as UNSAFE_decodeViaTurboStream, defaultMapRouteProperties as UNSAFE_defaultMapRouteProperties, getHydrationData as UNSAFE_getHydrationData, getPatchRoutesOnNavigationFunction as UNSAFE_getPatchRoutesOnNavigationFunction, getTurboStreamSingleFetchDataStrategy as UNSAFE_getTurboStreamSingleFetchDataStrategy, hydrationRouteProperties as UNSAFE_hydrationRouteProperties, invariant as UNSAFE_invariant, shouldHydrateRouteLoader as UNSAFE_shouldHydrateRouteLoader, useFogOFWarDiscovery as UNSAFE_useFogOFWarDiscovery, useScrollRestoration as UNSAFE_useScrollRestoration, withComponentProps as UNSAFE_withComponentProps, withErrorBoundaryProps as UNSAFE_withErrorBoundaryProps, withHydrateFallbackProps as UNSAFE_withHydrateFallbackProps, createBrowserRouter, createContext, createCookie, createCookieSessionStorage, createHashRouter, createMemoryRouter, createMemorySessionStorage, createPath, createRequestHandler, createRoutesFromChildren, createRoutesFromElements, createRoutesStub, createSearchParams, createSession, createSessionStorage, createStaticHandler, createStaticRouter, data, generatePath, href, isCookie, isRouteErrorResponse, isSession, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, HistoryRouter as unstable_HistoryRouter, RSCStaticRouter as unstable_RSCStaticRouter, routeRSCServerRequest as unstable_routeRSCServerRequest, setDevServerHooks as unstable_setDevServerHooks, usePrompt as unstable_usePrompt, useRoute as unstable_useRoute, useRouterState as unstable_useRouterState, useActionData, useAsyncError, useAsyncValue, useBeforeUnload, useBlocker, useFetcher, useFetchers, useFormAction, useHref, useInRouterContext, useLinkClickHandler, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, useSearchParams, useSubmit, useViewTransitionState };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -12,7 +12,7 @@ import { createMemoryHistory, createPath, invariant, parsePath, warning } from "
12
12
  import { defaultMapRouteProperties, getResolveToMatches, getRoutePattern, resolveTo, stripBasename } from "./router/utils.js";
13
13
  import { getNavigatorCurrentUrl, validateNavigationTarget } from "./router/navigation.js";
14
14
  import { createRouter } from "./router/router.js";
15
- import { AwaitContext, DataRouterContext, DataRouterStateContext, FetchersContext, LocationContext, NavigationContext, RouteContext, ViewTransitionContext, useIsRSCRouterContext } from "./context.js";
15
+ import { AwaitContext, DataRouterContext, DataRouterDataContext, DataRouterNavigationContext, DataRouterStateContext, FetchersContext, LocationContext, NavigationContext, RouteContext, ViewTransitionContext, useIsRSCRouterContext } from "./context.js";
16
16
  import { _renderMatches, useActionData, useAsyncValue, useInRouterContext, useLoaderData, useLocation, useMatches, useNavigate, useOutlet, useParams, useRouteError, useRoutes, useRoutesImpl } from "./hooks.js";
17
17
  import { warnOnce } from "./server-runtime/warnings.js";
18
18
  import * as React$1 from "react";
@@ -284,7 +284,43 @@ function RouterProvider({ router, flushSync: reactDomFlushSyncImpl, onError, use
284
284
  basename,
285
285
  onError
286
286
  ]);
287
- return /* @__PURE__ */ React$1.createElement(React$1.Fragment, null, /* @__PURE__ */ React$1.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React$1.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React$1.createElement(FetchersContext.Provider, { value: fetcherData.current }, /* @__PURE__ */ React$1.createElement(ViewTransitionContext.Provider, { value: vtContext }, /* @__PURE__ */ React$1.createElement(Router, {
287
+ let dataRouterState = React$1.useMemo(() => ({
288
+ historyAction: state.historyAction,
289
+ location: state.location,
290
+ matches: state.matches,
291
+ initialized: state.initialized,
292
+ renderFallback: state.renderFallback,
293
+ restoreScrollPosition: state.restoreScrollPosition,
294
+ preventScrollReset: state.preventScrollReset,
295
+ blockers: state.blockers
296
+ }), [
297
+ state.historyAction,
298
+ state.location,
299
+ state.matches,
300
+ state.initialized,
301
+ state.renderFallback,
302
+ state.restoreScrollPosition,
303
+ state.preventScrollReset,
304
+ state.blockers
305
+ ]);
306
+ let dataRouterNavigation = React$1.useMemo(() => ({
307
+ navigation: state.navigation,
308
+ revalidation: state.revalidation
309
+ }), [state.navigation, state.revalidation]);
310
+ let dataRouterData = React$1.useMemo(() => ({
311
+ loaderData: state.loaderData,
312
+ actionData: state.actionData,
313
+ errors: state.errors
314
+ }), [
315
+ state.loaderData,
316
+ state.actionData,
317
+ state.errors
318
+ ]);
319
+ let fetchersContext = React$1.useMemo(() => ({
320
+ fetchers: state.fetchers,
321
+ fetcherData: fetcherData.current
322
+ }), [state.fetchers]);
323
+ return /* @__PURE__ */ React$1.createElement(React$1.Fragment, null, /* @__PURE__ */ React$1.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React$1.createElement(DataRouterStateContext.Provider, { value: dataRouterState }, /* @__PURE__ */ React$1.createElement(DataRouterNavigationContext.Provider, { value: dataRouterNavigation }, /* @__PURE__ */ React$1.createElement(DataRouterDataContext.Provider, { value: dataRouterData }, /* @__PURE__ */ React$1.createElement(FetchersContext.Provider, { value: fetchersContext }, /* @__PURE__ */ React$1.createElement(ViewTransitionContext.Provider, { value: vtContext }, /* @__PURE__ */ React$1.createElement(Router, {
288
324
  basename,
289
325
  location: state.location,
290
326
  navigationType: state.historyAction,
@@ -293,11 +329,10 @@ function RouterProvider({ router, flushSync: reactDomFlushSyncImpl, onError, use
293
329
  }, /* @__PURE__ */ React$1.createElement(MemoizedDataRoutes, {
294
330
  routes: router.routes,
295
331
  manifest: router.manifest,
296
- future: router.future,
297
332
  state,
298
333
  isStatic: false,
299
334
  onError
300
- })))))), null);
335
+ })))))))), null);
301
336
  }
302
337
  function getOptimisticRouterState(currentState, newState) {
303
338
  return {
@@ -309,13 +344,15 @@ function getOptimisticRouterState(currentState, newState) {
309
344
  };
310
345
  }
311
346
  const MemoizedDataRoutes = React$1.memo(DataRoutes);
312
- function DataRoutes({ routes, manifest, future, state, isStatic, onError }) {
347
+ function DataRoutes({ routes, manifest, state, isStatic, onError }) {
348
+ let dataRouterContext = React$1.useContext(DataRouterContext);
349
+ invariant(dataRouterContext, "You must render this element inside a <DataRouterContext.Provider> element");
313
350
  return useRoutesImpl(routes, void 0, {
351
+ router: dataRouterContext.router,
314
352
  manifest,
315
353
  state,
316
354
  isStatic,
317
- onError,
318
- future
355
+ onError
319
356
  });
320
357
  }
321
358
  /**
@@ -1,7 +1,7 @@
1
1
 
2
2
  import { Action, History, Location, To } from "./router/history.js";
3
3
  import { RouteMatch, TrackedPromise } from "./router/utils.js";
4
- import { RelativeRoutingType, Router, RouterState, StaticHandlerContext } from "./router/router.js";
4
+ import { RelativeRoutingType, Router, StaticHandlerContext } from "./router/router.js";
5
5
  import { ClientOnErrorFunction } from "./components.js";
6
6
  import * as React$1 from "react";
7
7
 
@@ -12,7 +12,12 @@ interface DataRouterContextObject extends Omit<NavigationContextObject, "future"
12
12
  onError?: ClientOnErrorFunction;
13
13
  }
14
14
  declare const DataRouterContext: React$1.Context<DataRouterContextObject | null>;
15
- declare const DataRouterStateContext: React$1.Context<RouterState | null>;
15
+ type DataRouterDataContextObject = Pick<Router["state"], "loaderData" | "actionData" | "errors">;
16
+ type DataRouterNavigationContextObject = Pick<Router["state"], "navigation" | "revalidation">;
17
+ type DataRouterStateContextObject = Omit<Router["state"], keyof DataRouterDataContextObject | keyof DataRouterNavigationContextObject | "fetchers">;
18
+ declare const DataRouterStateContext: React$1.Context<DataRouterStateContextObject | null>;
19
+ declare const DataRouterDataContext: React$1.Context<DataRouterDataContextObject | null>;
20
+ declare const DataRouterNavigationContext: React$1.Context<DataRouterNavigationContextObject | null>;
16
21
  type ViewTransitionContextObject = {
17
22
  isTransitioning: false;
18
23
  } | {
@@ -22,8 +27,11 @@ type ViewTransitionContextObject = {
22
27
  nextLocation: Location;
23
28
  };
24
29
  declare const ViewTransitionContext: React$1.Context<ViewTransitionContextObject>;
25
- type FetchersContextObject = Map<string, any>;
26
- declare const FetchersContext: React$1.Context<FetchersContextObject>;
30
+ type FetchersContextObject = {
31
+ fetchers: Router["state"]["fetchers"];
32
+ fetcherData: Map<string, any>;
33
+ };
34
+ declare const FetchersContext: React$1.Context<FetchersContextObject | null>;
27
35
  declare const AwaitContext: React$1.Context<TrackedPromise | null>;
28
36
  declare const AwaitContextProvider: (props: React$1.ComponentProps<typeof AwaitContext.Provider>) => React$1.FunctionComponentElement<React$1.ProviderProps<TrackedPromise | null>>;
29
37
  interface NavigateOptions {
@@ -81,4 +89,4 @@ interface RouteContextObject {
81
89
  }
82
90
  declare const RouteContext: React$1.Context<RouteContextObject>;
83
91
  //#endregion
84
- export { AwaitContextProvider, DataRouterContext, DataRouterStateContext, FetchersContext, LocationContext, NavigateOptions, NavigationContext, Navigator, RouteContext, ViewTransitionContext };
92
+ export { AwaitContextProvider, DataRouterContext, DataRouterDataContext, DataRouterNavigationContext, DataRouterStateContext, FetchersContext, LocationContext, NavigateOptions, NavigationContext, Navigator, RouteContext, ViewTransitionContext };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -14,13 +14,17 @@ const DataRouterContext = React$1.createContext(null);
14
14
  DataRouterContext.displayName = "DataRouter";
15
15
  const DataRouterStateContext = React$1.createContext(null);
16
16
  DataRouterStateContext.displayName = "DataRouterState";
17
+ const DataRouterDataContext = React$1.createContext(null);
18
+ DataRouterDataContext.displayName = "DataRouterData";
19
+ const DataRouterNavigationContext = React$1.createContext(null);
20
+ DataRouterNavigationContext.displayName = "DataRouterNavigation";
17
21
  const RSCRouterContext = React$1.createContext(false);
18
22
  function useIsRSCRouterContext() {
19
23
  return React$1.useContext(RSCRouterContext);
20
24
  }
21
25
  const ViewTransitionContext = React$1.createContext({ isTransitioning: false });
22
26
  ViewTransitionContext.displayName = "ViewTransition";
23
- const FetchersContext = React$1.createContext(/* @__PURE__ */ new Map());
27
+ const FetchersContext = React$1.createContext(null);
24
28
  FetchersContext.displayName = "Fetchers";
25
29
  const AwaitContext = React$1.createContext(null);
26
30
  AwaitContext.displayName = "Await";
@@ -35,7 +39,11 @@ const RouteContext = React$1.createContext({
35
39
  isDataRoute: false
36
40
  });
37
41
  RouteContext.displayName = "Route";
42
+ const IsDataRouteContext = React$1.createContext(false);
43
+ IsDataRouteContext.displayName = "IsDataRoute";
44
+ const RouteIdContext = React$1.createContext(void 0);
45
+ RouteIdContext.displayName = "RouteId";
38
46
  const RouteErrorContext = React$1.createContext(null);
39
47
  RouteErrorContext.displayName = "RouteError";
40
48
  //#endregion
41
- export { AwaitContext, AwaitContextProvider, DataRouterContext, DataRouterStateContext, FetchersContext, LocationContext, NavigationContext, RSCRouterContext, RouteContext, RouteErrorContext, ViewTransitionContext, useIsRSCRouterContext };
49
+ export { AwaitContext, AwaitContextProvider, DataRouterContext, DataRouterDataContext, DataRouterNavigationContext, DataRouterStateContext, FetchersContext, IsDataRouteContext, LocationContext, NavigationContext, RSCRouterContext, RouteContext, RouteErrorContext, RouteIdContext, ViewTransitionContext, useIsRSCRouterContext };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -12,8 +12,8 @@ import { ABSOLUTE_URL_REGEX } from "../router/url.js";
12
12
  import { createBrowserHistory, createHashHistory, createPath, invariant, warning } from "../router/history.js";
13
13
  import { ErrorResponseImpl, SUPPORTED_ERROR_TYPES, defaultMapRouteProperties, joinPaths, matchPath, parseToInfo, resolveTo, stripBasename } from "../router/utils.js";
14
14
  import { IDLE_FETCHER, createRouter } from "../router/router.js";
15
- import { DataRouterContext, DataRouterStateContext, FetchersContext, NavigationContext, RouteContext, ViewTransitionContext } from "../context.js";
16
- import { useBlocker, useHref, useLocation, useMatches, useNavigate, useNavigation, useResolvedPath, useRouteId } from "../hooks.js";
15
+ import { DataRouterNavigationContext, NavigationContext, RouteContext, ViewTransitionContext } from "../context.js";
16
+ import { useBlocker, useCurrentRouteId, useDataRouterContext, useDataRouterFetchers, useDataRouterState, useHref, useLocation, useMatches, useNavigate, useNavigation, useResolvedPath } from "../hooks.js";
17
17
  import { Router, hydrationRouteProperties } from "../components.js";
18
18
  import { createSearchParams, getFormSubmissionInfo, getSearchParamsForLocation, shouldProcessLinkClick } from "./dom.js";
19
19
  import { escapeHtml } from "./ssr/markup.js";
@@ -372,12 +372,12 @@ Link.displayName = "Link";
372
372
  const NavLink = React$1.forwardRef(function NavLinkWithRef({ "aria-current": ariaCurrentProp = "page", caseSensitive = false, className: classNameProp = "", end = false, style: styleProp, to, viewTransition, children, ...rest }, ref) {
373
373
  let path = useResolvedPath(to, { relative: rest.relative });
374
374
  let location = useLocation();
375
- let routerState = React$1.useContext(DataRouterStateContext);
375
+ let routerNavigation = React$1.useContext(DataRouterNavigationContext);
376
376
  let { navigator, basename } = React$1.useContext(NavigationContext);
377
- let isTransitioning = routerState != null && useViewTransitionState(path) && viewTransition === true;
377
+ let isTransitioning = routerNavigation != null && useViewTransitionState(path) && viewTransition === true;
378
378
  let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;
379
379
  let locationPathname = location.pathname;
380
- let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;
380
+ let nextLocationPathname = routerNavigation?.navigation.location ? routerNavigation.navigation.location.pathname : null;
381
381
  if (!caseSensitive) {
382
382
  locationPathname = locationPathname.toLowerCase();
383
383
  nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;
@@ -573,19 +573,6 @@ function ScrollRestoration({ getKey, storageKey, ...props }) {
573
573
  });
574
574
  }
575
575
  ScrollRestoration.displayName = "ScrollRestoration";
576
- function getDataRouterConsoleError(hookName) {
577
- return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;
578
- }
579
- function useDataRouterContext(hookName) {
580
- let ctx = React$1.useContext(DataRouterContext);
581
- invariant(ctx, getDataRouterConsoleError(hookName));
582
- return ctx;
583
- }
584
- function useDataRouterState(hookName) {
585
- let state = React$1.useContext(DataRouterStateContext);
586
- invariant(state, getDataRouterConsoleError(hookName));
587
- return state;
588
- }
589
576
  /**
590
577
  * Handles the click behavior for router {@link Link | `<Link>`} components.This
591
578
  * is useful if you need to create custom {@link Link | `<Link>`} components with
@@ -788,7 +775,7 @@ let getUniqueFetcherId = () => `__${String(++fetcherId)}__`;
788
775
  function useSubmit() {
789
776
  let { router } = useDataRouterContext("useSubmit");
790
777
  let { basename } = React$1.useContext(NavigationContext);
791
- let currentRouteId = useRouteId();
778
+ let currentRouteId = useCurrentRouteId("useSubmit");
792
779
  let routerFetch = router.fetch;
793
780
  let routerNavigate = router.navigate;
794
781
  return React$1.useCallback(async (target, options = {}) => {
@@ -947,13 +934,8 @@ function useFormAction(action, { relative } = {}) {
947
934
  */
948
935
  function useFetcher({ key } = {}) {
949
936
  let { router } = useDataRouterContext("useFetcher");
950
- let state = useDataRouterState("useFetcher");
951
- let fetcherData = React$1.useContext(FetchersContext);
952
- let route = React$1.useContext(RouteContext);
953
- let routeId = route.matches[route.matches.length - 1]?.route.id;
954
- invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);
955
- invariant(route, `useFetcher must be used inside a RouteContext`);
956
- invariant(routeId != null, `useFetcher can only be used on routes that contain a unique "id"`);
937
+ let fetchersContext = useDataRouterFetchers("useFetcher");
938
+ let routeId = useCurrentRouteId("useFetcher");
957
939
  let defaultKey = React$1.useId();
958
940
  let [fetcherKey, setFetcherKey] = React$1.useState(key || defaultKey);
959
941
  if (key && key !== fetcherKey) setFetcherKey(key);
@@ -995,8 +977,8 @@ function useFetcher({ key } = {}) {
995
977
  FetcherForm.displayName = "fetcher.Form";
996
978
  return FetcherForm;
997
979
  }, [fetcherKey]);
998
- let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;
999
- let data = fetcherData.get(fetcherKey);
980
+ let fetcher = fetchersContext.fetchers.get(fetcherKey) || IDLE_FETCHER;
981
+ let data = fetchersContext.fetcherData.get(fetcherKey);
1000
982
  return React$1.useMemo(() => ({
1001
983
  Form: FetcherForm,
1002
984
  submit,
@@ -1036,11 +1018,11 @@ function useFetcher({ key } = {}) {
1036
1018
  * property.
1037
1019
  */
1038
1020
  function useFetchers() {
1039
- let state = useDataRouterState("useFetchers");
1040
- return React$1.useMemo(() => Array.from(state.fetchers.entries()).map(([key, fetcher]) => ({
1021
+ let { fetchers } = useDataRouterFetchers("useFetchers");
1022
+ return React$1.useMemo(() => Array.from(fetchers.entries()).map(([key, fetcher]) => ({
1041
1023
  ...fetcher,
1042
1024
  key
1043
- })), [state.fetchers]);
1025
+ })), [fetchers]);
1044
1026
  }
1045
1027
  const SCROLL_RESTORATION_STORAGE_KEY = "react-router-scroll-positions";
1046
1028
  let savedScrollPositions = {};
@@ -127,10 +127,15 @@ declare function StaticRouterProvider({
127
127
  * `query`
128
128
  * @param opts Options
129
129
  * @param opts.future Future flags for the static {@link DataRouter}
130
- * @param opts.branches Optional pre-computed route branches
130
+ * @param opts.branches Deprecated optional pre-computed route branches. This option
131
+ * is no longer used because branch caching is done automatically inside the static router.
131
132
  * @returns A static {@link DataRouter} that can be used to render the provided routes
132
133
  */
133
134
  declare function createStaticRouter(routes: RouteObject[], context: StaticHandlerContext, opts?: {
135
+ /**
136
+ * @deprecated This option is no longer used because branch caching is done
137
+ * automatically inside the static router.
138
+ */
134
139
  branches?: RouteBranch<DataRouteObject>[];
135
140
  future?: Partial<FutureConfig>;
136
141
  }): Router;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -9,10 +9,10 @@
9
9
  * @license MIT
10
10
  */
11
11
  import { ABSOLUTE_URL_REGEX } from "../router/url.js";
12
- import { createPath, invariant, parsePath } from "../router/history.js";
12
+ import { createPath, invariant, parsePath, warning } from "../router/history.js";
13
13
  import { convertRoutesToDataRoutes, isRouteErrorResponse } from "../router/utils.js";
14
14
  import { IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION } from "../router/router.js";
15
- import { DataRouterContext, DataRouterStateContext, FetchersContext, ViewTransitionContext } from "../context.js";
15
+ import { DataRouterContext, DataRouterDataContext, DataRouterNavigationContext, DataRouterStateContext, FetchersContext, ViewTransitionContext } from "../context.js";
16
16
  import { DataRoutes, Router } from "../components.js";
17
17
  import { escapeHtml } from "./ssr/markup.js";
18
18
  import * as React$1 from "react";
@@ -91,7 +91,6 @@ function StaticRouterProvider({ context, router, hydrate = true, nonce }) {
91
91
  staticContext: context,
92
92
  basename: context.basename || "/"
93
93
  };
94
- let fetchersContext = /* @__PURE__ */ new Map();
95
94
  let hydrateScript = "";
96
95
  if (hydrate !== false) {
97
96
  let data = {
@@ -102,7 +101,30 @@ function StaticRouterProvider({ context, router, hydrate = true, nonce }) {
102
101
  hydrateScript = `window.__staticRouterHydrationData = JSON.parse(${escapeHtml(JSON.stringify(JSON.stringify(data)))});`;
103
102
  }
104
103
  let { state } = dataRouterContext.router;
105
- return /* @__PURE__ */ React$1.createElement(React$1.Fragment, null, /* @__PURE__ */ React$1.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React$1.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React$1.createElement(FetchersContext.Provider, { value: fetchersContext }, /* @__PURE__ */ React$1.createElement(ViewTransitionContext.Provider, { value: { isTransitioning: false } }, /* @__PURE__ */ React$1.createElement(Router, {
104
+ let dataRouterState = {
105
+ historyAction: state.historyAction,
106
+ location: state.location,
107
+ matches: state.matches,
108
+ initialized: state.initialized,
109
+ renderFallback: state.renderFallback,
110
+ restoreScrollPosition: state.restoreScrollPosition,
111
+ preventScrollReset: state.preventScrollReset,
112
+ blockers: state.blockers
113
+ };
114
+ let dataRouterNavigation = {
115
+ navigation: state.navigation,
116
+ revalidation: state.revalidation
117
+ };
118
+ let dataRouterData = {
119
+ loaderData: state.loaderData,
120
+ actionData: state.actionData,
121
+ errors: state.errors
122
+ };
123
+ let fetchersContext = {
124
+ fetchers: state.fetchers,
125
+ fetcherData: /* @__PURE__ */ new Map()
126
+ };
127
+ return /* @__PURE__ */ React$1.createElement(React$1.Fragment, null, /* @__PURE__ */ React$1.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React$1.createElement(DataRouterStateContext.Provider, { value: dataRouterState }, /* @__PURE__ */ React$1.createElement(DataRouterNavigationContext.Provider, { value: dataRouterNavigation }, /* @__PURE__ */ React$1.createElement(DataRouterDataContext.Provider, { value: dataRouterData }, /* @__PURE__ */ React$1.createElement(FetchersContext.Provider, { value: fetchersContext }, /* @__PURE__ */ React$1.createElement(ViewTransitionContext.Provider, { value: { isTransitioning: false } }, /* @__PURE__ */ React$1.createElement(Router, {
106
128
  basename: dataRouterContext.basename,
107
129
  location: state.location,
108
130
  navigationType: state.historyAction,
@@ -112,10 +134,9 @@ function StaticRouterProvider({ context, router, hydrate = true, nonce }) {
112
134
  }, /* @__PURE__ */ React$1.createElement(DataRoutes, {
113
135
  manifest: router.manifest,
114
136
  routes: router.routes,
115
- future: router.future,
116
137
  state,
117
138
  isStatic: true
118
- })))))), hydrateScript ? /* @__PURE__ */ React$1.createElement("script", {
139
+ })))))))), hydrateScript ? /* @__PURE__ */ React$1.createElement("script", {
119
140
  suppressHydrationWarning: true,
120
141
  nonce,
121
142
  dangerouslySetInnerHTML: { __html: hydrateScript }
@@ -185,26 +206,31 @@ function getStatelessNavigator() {
185
206
  * `query`
186
207
  * @param opts Options
187
208
  * @param opts.future Future flags for the static {@link DataRouter}
188
- * @param opts.branches Optional pre-computed route branches
209
+ * @param opts.branches Deprecated optional pre-computed route branches. This option
210
+ * is no longer used because branch caching is done automatically inside the static router.
189
211
  * @returns A static {@link DataRouter} that can be used to render the provided routes
190
212
  */
191
213
  function createStaticRouter(routes, context, opts = {}) {
214
+ warning(opts.branches == null, "`createStaticRouter({ branches })` is deprecated and no longer used. Branch caching is done automatically inside the static router.");
192
215
  let manifest = {};
193
216
  let dataRoutes = convertRoutesToDataRoutes(routes, void 0, void 0, manifest);
194
- let matches = context.matches.map((match) => {
217
+ let future = { ...opts?.future };
218
+ let matchRoutes = context._match;
219
+ let mapRouteMatch = (match) => {
195
220
  let route = manifest[match.route.id] || match.route;
196
221
  return {
197
222
  ...match,
198
223
  route
199
224
  };
200
- });
225
+ };
226
+ let matches = context.matches.map(mapRouteMatch);
201
227
  let msg = (method) => `You cannot use router.${method}() on the server because it is a stateless environment`;
202
228
  return {
203
229
  get basename() {
204
230
  return context.basename;
205
231
  },
206
232
  get future() {
207
- return { ...opts?.future };
233
+ return future;
208
234
  },
209
235
  get state() {
210
236
  return {
@@ -227,13 +253,13 @@ function createStaticRouter(routes, context, opts = {}) {
227
253
  get routes() {
228
254
  return dataRoutes;
229
255
  },
230
- get branches() {
231
- return opts.branches;
232
- },
233
256
  get manifest() {
234
257
  return manifest;
235
258
  },
236
259
  get window() {},
260
+ match(locationArg) {
261
+ return matchRoutes(locationArg)?.map(mapRouteMatch) ?? null;
262
+ },
237
263
  initialize() {
238
264
  throw msg("initialize");
239
265
  },
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -8,9 +8,8 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import { matchRoutes } from "../../router/utils.js";
12
- import { DataRouterContext, DataRouterStateContext, useIsRSCRouterContext } from "../../context.js";
13
- import { useLocation } from "../../hooks.js";
11
+ import { useIsRSCRouterContext } from "../../context.js";
12
+ import { useDataRouterContext, useDataRouterData, useDataRouterState, useLocation } from "../../hooks.js";
14
13
  import { warnOnce } from "../../server-runtime/warnings.js";
15
14
  import invariant from "./invariant.js";
16
15
  import { getKeyedLinksForMatches, getKeyedPrefetchLinks, getModuleLinkHrefs, getNewMatchesForLinks, isPageLinkDescriptor } from "./links.js";
@@ -19,16 +18,6 @@ import { singleFetchUrl } from "./single-fetch.js";
19
18
  import { getPartialManifest, isFogOfWarEnabled } from "./fog-of-war.js";
20
19
  import * as React$1 from "react";
21
20
  //#region lib/dom/ssr/components.tsx
22
- function useDataRouterContext() {
23
- let context = React$1.useContext(DataRouterContext);
24
- invariant(context, "You must render this element inside a <DataRouterContext.Provider> element");
25
- return context;
26
- }
27
- function useDataRouterStateContext() {
28
- let context = React$1.useContext(DataRouterStateContext);
29
- invariant(context, "You must render this element inside a <DataRouterStateContext.Provider> element");
30
- return context;
31
- }
32
21
  const FrameworkContext = React$1.createContext(void 0);
33
22
  FrameworkContext.displayName = "FrameworkContext";
34
23
  function useFrameworkContext() {
@@ -142,7 +131,8 @@ const CRITICAL_CSS_DATA_ATTRIBUTE = "data-react-router-critical-css";
142
131
  */
143
132
  function Links({ nonce, crossOrigin }) {
144
133
  let { isSpaMode, manifest, routeModules, criticalCss, nonce: contextNonce } = useFrameworkContext();
145
- let { errors, matches: routerMatches } = useDataRouterStateContext();
134
+ let { matches: routerMatches } = useDataRouterState("Links");
135
+ let { errors } = useDataRouterData("Links");
146
136
  let matches = getActiveMatches(routerMatches, errors, isSpaMode);
147
137
  let keyedLinks = React$1.useMemo(() => getKeyedLinksForMatches(matches, routeModules, manifest), [
148
138
  matches,
@@ -202,11 +192,11 @@ function Links({ nonce, crossOrigin }) {
202
192
  function PrefetchPageLinks({ page, ...linkProps }) {
203
193
  let rsc = useIsRSCRouterContext();
204
194
  let { nonce: contextNonce } = useFrameworkContext();
205
- let { router } = useDataRouterContext();
206
- let matches = React$1.useMemo(() => matchRoutes(router.routes, page, router.basename), [
195
+ let { router } = useDataRouterContext("PrefetchPageLinks");
196
+ let matches = React$1.useMemo(() => router.match(page), [
197
+ router,
207
198
  router.routes,
208
- page,
209
- router.basename
199
+ page
210
200
  ]);
211
201
  if (!matches) return null;
212
202
  if (linkProps.nonce == null && contextNonce) linkProps = {
@@ -269,7 +259,8 @@ function RSCPrefetchPageLinksImpl({ page, matches: nextMatches, ...linkProps })
269
259
  function PrefetchPageLinksImpl({ page, matches: nextMatches, ...linkProps }) {
270
260
  let location = useLocation();
271
261
  let { manifest, routeModules } = useFrameworkContext();
272
- let { loaderData, matches } = useDataRouterStateContext();
262
+ let { matches } = useDataRouterState("PrefetchPageLinks");
263
+ let { loaderData } = useDataRouterData("PrefetchPageLinks");
273
264
  let newMatchesForData = React$1.useMemo(() => getNewMatchesForLinks(page, nextMatches, matches, manifest, location, "data"), [
274
265
  page,
275
266
  nextMatches,
@@ -355,7 +346,8 @@ function PrefetchPageLinksImpl({ page, matches: nextMatches, ...linkProps }) {
355
346
  */
356
347
  function Meta() {
357
348
  let { isSpaMode, routeModules } = useFrameworkContext();
358
- let { errors, matches: routerMatches, loaderData } = useDataRouterStateContext();
349
+ let { matches: routerMatches } = useDataRouterState("Meta");
350
+ let { errors, loaderData } = useDataRouterData("Meta");
359
351
  let location = useLocation();
360
352
  let _matches = getActiveMatches(routerMatches, errors, isSpaMode);
361
353
  let error = null;
@@ -480,8 +472,8 @@ function setIsHydrated() {
480
472
  */
481
473
  function Scripts(scriptProps) {
482
474
  let { manifest, serverHandoffString, isSpaMode, renderMeta, routeDiscovery, ssr, nonce: contextNonce } = useFrameworkContext();
483
- let { router, static: isStatic, staticContext } = useDataRouterContext();
484
- let { matches: routerMatches } = useDataRouterStateContext();
475
+ let { router, static: isStatic, staticContext } = useDataRouterContext("Scripts");
476
+ let { matches: routerMatches } = useDataRouterState("Scripts");
485
477
  let isRSCRouterContext = useIsRSCRouterContext();
486
478
  let enableFogOfWar = isFogOfWarEnabled(routeDiscovery, ssr);
487
479
  if (scriptProps.nonce == null && contextNonce) scriptProps = {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -33,6 +33,10 @@ interface FrameworkContextObject {
33
33
  };
34
34
  }
35
35
  interface EntryContext extends FrameworkContextObject {
36
+ /**
37
+ * @deprecated This property was an internal implementation detail and was
38
+ * never intended for use in `entry.server.tsx`. It is always an empty array.
39
+ */
36
40
  branches: RouteBranch<DataRouteObject>[];
37
41
  staticHandlerContext: StaticHandlerContext;
38
42
  serverHandoffStream?: ReadableStream<Uint8Array>;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v8.3.1
2
+ * react-router v8.4.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *