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.
- package/CHANGELOG.md +33 -0
- package/dist/development/dom-export.js +1 -1
- package/dist/development/index-react-server-client.js +1 -1
- package/dist/development/index-react-server.d.ts +42 -48
- package/dist/development/index-react-server.js +75 -31
- package/dist/development/index.d.ts +2 -2
- package/dist/development/index.js +3 -3
- package/dist/development/lib/actions.js +1 -1
- package/dist/development/lib/components.js +45 -8
- package/dist/development/lib/context.d.ts +13 -5
- package/dist/development/lib/context.js +11 -3
- package/dist/development/lib/dom/dom.js +1 -1
- package/dist/development/lib/dom/lib.js +14 -32
- package/dist/development/lib/dom/server.d.ts +6 -1
- package/dist/development/lib/dom/server.js +40 -14
- package/dist/development/lib/dom/ssr/components.js +15 -23
- package/dist/development/lib/dom/ssr/data.js +1 -1
- package/dist/development/lib/dom/ssr/entry.d.ts +4 -0
- package/dist/development/lib/dom/ssr/errorBoundaries.js +1 -1
- package/dist/development/lib/dom/ssr/fallback.js +1 -1
- package/dist/development/lib/dom/ssr/fog-of-war.js +33 -12
- package/dist/development/lib/dom/ssr/hydration.d.ts +3 -1
- package/dist/development/lib/dom/ssr/hydration.js +6 -4
- package/dist/development/lib/dom/ssr/invariant.js +1 -1
- package/dist/development/lib/dom/ssr/links.js +1 -1
- package/dist/development/lib/dom/ssr/markup.js +5 -2
- package/dist/development/lib/dom/ssr/routeModules.js +1 -1
- package/dist/development/lib/dom/ssr/routes-test-stub.js +1 -1
- package/dist/development/lib/dom/ssr/routes.js +1 -1
- package/dist/development/lib/dom/ssr/server.js +2 -2
- package/dist/development/lib/dom/ssr/single-fetch.js +10 -19
- package/dist/development/lib/dom-export/dom-router-provider.js +1 -1
- package/dist/development/lib/dom-export/hydrated-router.js +2 -1
- package/dist/development/lib/errors.js +1 -1
- package/dist/development/lib/hooks.js +49 -44
- package/dist/development/lib/href.js +1 -1
- package/dist/development/lib/router/history.js +1 -1
- package/dist/development/lib/router/instrumentation.js +1 -1
- package/dist/development/lib/router/matcher-route-pattern.d.ts +2 -0
- package/dist/development/lib/router/matcher-route-pattern.js +216 -0
- package/dist/development/lib/router/matcher-route-pattern.preload.d.ts +20 -0
- package/dist/development/lib/router/matcher-route-pattern.preload.js +36 -0
- package/dist/development/lib/router/matcher.d.ts +2 -0
- package/dist/development/lib/router/matcher.js +29 -0
- package/dist/development/lib/router/navigation.js +1 -1
- package/dist/development/lib/router/router.d.ts +13 -7
- package/dist/development/lib/router/router.js +81 -66
- package/dist/development/lib/router/url.js +1 -1
- package/dist/development/lib/router/utils.d.ts +6 -1
- package/dist/development/lib/router/utils.js +6 -4
- package/dist/development/lib/rsc/browser.js +2 -1
- package/dist/development/lib/rsc/errorBoundaries.js +1 -1
- package/dist/development/lib/rsc/html-stream/browser.js +1 -1
- package/dist/development/lib/rsc/html-stream/server.js +2 -4
- package/dist/development/lib/rsc/route-modules.js +1 -1
- package/dist/development/lib/rsc/server.rsc.d.ts +7 -0
- package/dist/development/lib/rsc/server.ssr.js +25 -21
- package/dist/development/lib/server-runtime/cookies.js +1 -1
- package/dist/development/lib/server-runtime/crypto.js +1 -1
- package/dist/development/lib/server-runtime/data.js +1 -1
- package/dist/development/lib/server-runtime/dev.js +1 -1
- package/dist/development/lib/server-runtime/entry.js +1 -1
- package/dist/development/lib/server-runtime/errors.js +1 -1
- package/dist/development/lib/server-runtime/headers.js +1 -1
- package/dist/development/lib/server-runtime/invariant.js +1 -1
- package/dist/development/lib/server-runtime/mode.js +1 -1
- package/dist/development/lib/server-runtime/routeMatching.js +3 -4
- package/dist/development/lib/server-runtime/routes.js +1 -1
- package/dist/development/lib/server-runtime/server.js +7 -6
- package/dist/development/lib/server-runtime/serverHandoff.js +1 -1
- package/dist/development/lib/server-runtime/sessions/cookieStorage.js +1 -1
- package/dist/development/lib/server-runtime/sessions/memoryStorage.js +1 -1
- package/dist/development/lib/server-runtime/sessions.js +1 -1
- package/dist/development/lib/server-runtime/single-fetch.js +1 -1
- package/dist/development/lib/server-runtime/urls.js +1 -1
- package/dist/development/lib/server-runtime/warnings.js +1 -1
- package/dist/development/lib/types/internal.js +1 -1
- package/dist/development/route-pattern.d.ts +3 -0
- package/dist/development/route-pattern.js +12 -0
- package/dist/development/vendor/turbo-stream-v2/flatten.js +1 -1
- package/dist/development/vendor/turbo-stream-v2/turbo-stream.js +1 -1
- package/dist/development/vendor/turbo-stream-v2/unflatten.js +1 -1
- package/dist/development/vendor/turbo-stream-v2/utils.js +1 -1
- package/dist/production/dom-export.js +1 -1
- package/dist/production/index-react-server-client.js +1 -1
- package/dist/production/index-react-server.d.ts +42 -48
- package/dist/production/index-react-server.js +75 -31
- package/dist/production/index.d.ts +2 -2
- package/dist/production/index.js +3 -3
- package/dist/production/lib/actions.js +1 -1
- package/dist/production/lib/components.js +45 -8
- package/dist/production/lib/context.d.ts +13 -5
- package/dist/production/lib/context.js +11 -3
- package/dist/production/lib/dom/dom.js +1 -1
- package/dist/production/lib/dom/lib.js +14 -32
- package/dist/production/lib/dom/server.d.ts +6 -1
- package/dist/production/lib/dom/server.js +40 -14
- package/dist/production/lib/dom/ssr/components.js +15 -23
- package/dist/production/lib/dom/ssr/data.js +1 -1
- package/dist/production/lib/dom/ssr/entry.d.ts +4 -0
- package/dist/production/lib/dom/ssr/errorBoundaries.js +1 -1
- package/dist/production/lib/dom/ssr/fallback.js +1 -1
- package/dist/production/lib/dom/ssr/fog-of-war.js +33 -12
- package/dist/production/lib/dom/ssr/hydration.d.ts +3 -1
- package/dist/production/lib/dom/ssr/hydration.js +6 -4
- package/dist/production/lib/dom/ssr/invariant.js +1 -1
- package/dist/production/lib/dom/ssr/links.js +1 -1
- package/dist/production/lib/dom/ssr/markup.js +5 -2
- package/dist/production/lib/dom/ssr/routeModules.js +1 -1
- package/dist/production/lib/dom/ssr/routes-test-stub.js +1 -1
- package/dist/production/lib/dom/ssr/routes.js +1 -1
- package/dist/production/lib/dom/ssr/server.js +2 -2
- package/dist/production/lib/dom/ssr/single-fetch.js +10 -19
- package/dist/production/lib/dom-export/dom-router-provider.js +1 -1
- package/dist/production/lib/dom-export/hydrated-router.js +2 -1
- package/dist/production/lib/errors.js +1 -1
- package/dist/production/lib/hooks.js +49 -44
- package/dist/production/lib/href.js +1 -1
- package/dist/production/lib/router/history.js +1 -1
- package/dist/production/lib/router/instrumentation.js +1 -1
- package/dist/production/lib/router/matcher-route-pattern.d.ts +2 -0
- package/dist/production/lib/router/matcher-route-pattern.js +216 -0
- package/dist/production/lib/router/matcher-route-pattern.preload.d.ts +20 -0
- package/dist/production/lib/router/matcher-route-pattern.preload.js +36 -0
- package/dist/production/lib/router/matcher.d.ts +2 -0
- package/dist/production/lib/router/matcher.js +29 -0
- package/dist/production/lib/router/navigation.js +1 -1
- package/dist/production/lib/router/router.d.ts +13 -7
- package/dist/production/lib/router/router.js +81 -66
- package/dist/production/lib/router/url.js +1 -1
- package/dist/production/lib/router/utils.d.ts +6 -1
- package/dist/production/lib/router/utils.js +6 -4
- package/dist/production/lib/rsc/browser.js +2 -1
- package/dist/production/lib/rsc/errorBoundaries.js +1 -1
- package/dist/production/lib/rsc/html-stream/browser.js +1 -1
- package/dist/production/lib/rsc/html-stream/server.js +2 -4
- package/dist/production/lib/rsc/route-modules.js +1 -1
- package/dist/production/lib/rsc/server.rsc.d.ts +7 -0
- package/dist/production/lib/rsc/server.ssr.js +25 -21
- package/dist/production/lib/server-runtime/cookies.js +1 -1
- package/dist/production/lib/server-runtime/crypto.js +1 -1
- package/dist/production/lib/server-runtime/data.js +1 -1
- package/dist/production/lib/server-runtime/dev.js +1 -1
- package/dist/production/lib/server-runtime/entry.js +1 -1
- package/dist/production/lib/server-runtime/errors.js +1 -1
- package/dist/production/lib/server-runtime/headers.js +1 -1
- package/dist/production/lib/server-runtime/invariant.js +1 -1
- package/dist/production/lib/server-runtime/mode.js +1 -1
- package/dist/production/lib/server-runtime/routeMatching.js +3 -4
- package/dist/production/lib/server-runtime/routes.js +1 -1
- package/dist/production/lib/server-runtime/server.js +7 -6
- package/dist/production/lib/server-runtime/serverHandoff.js +1 -1
- package/dist/production/lib/server-runtime/sessions/cookieStorage.js +1 -1
- package/dist/production/lib/server-runtime/sessions/memoryStorage.js +1 -1
- package/dist/production/lib/server-runtime/sessions.js +1 -1
- package/dist/production/lib/server-runtime/single-fetch.js +1 -1
- package/dist/production/lib/server-runtime/urls.js +1 -1
- package/dist/production/lib/server-runtime/warnings.js +1 -1
- package/dist/production/lib/types/internal.js +1 -1
- package/dist/production/route-pattern.d.ts +3 -0
- package/dist/production/route-pattern.js +12 -0
- package/dist/production/vendor/turbo-stream-v2/flatten.js +1 -1
- package/dist/production/vendor/turbo-stream-v2/turbo-stream.js +1 -1
- package/dist/production/vendor/turbo-stream-v2/unflatten.js +1 -1
- package/dist/production/vendor/turbo-stream-v2/utils.js +1 -1
- package/docs/how-to/fetchers.md +6 -1
- package/docs/how-to/middleware.md +3 -1
- package/docs/how-to/optimize-revalidation.md +178 -5
- package/docs/how-to/react-server-components.md +26 -3
- package/docs/how-to/resource-routes.md +3 -0
- package/docs/start/data/actions.md +2 -1
- package/docs/start/data/route-object.md +21 -6
- package/docs/start/framework/actions.md +4 -2
- package/docs/start/framework/route-module.md +32 -5
- package/docs/upgrading/future.md +68 -0
- package/package.json +11 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* react-router v8.
|
|
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.
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
26
|
-
|
|
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.
|
|
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(
|
|
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.
|
|
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 {
|
|
16
|
-
import { useBlocker, useHref, useLocation, useMatches, useNavigate, useNavigation, useResolvedPath
|
|
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
|
|
375
|
+
let routerNavigation = React$1.useContext(DataRouterNavigationContext);
|
|
376
376
|
let { navigator, basename } = React$1.useContext(NavigationContext);
|
|
377
|
-
let isTransitioning =
|
|
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 =
|
|
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 =
|
|
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
|
|
951
|
-
let
|
|
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 =
|
|
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
|
|
1040
|
-
return React$1.useMemo(() => Array.from(
|
|
1021
|
+
let { fetchers } = useDataRouterFetchers("useFetchers");
|
|
1022
|
+
return React$1.useMemo(() => Array.from(fetchers.entries()).map(([key, fetcher]) => ({
|
|
1041
1023
|
...fetcher,
|
|
1042
1024
|
key
|
|
1043
|
-
})), [
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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 {
|
|
12
|
-
import {
|
|
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 {
|
|
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(() =>
|
|
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 {
|
|
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 {
|
|
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 } =
|
|
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 = {
|
|
@@ -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>;
|