react-router 0.0.0-experimental-1ebb6d403 → 0.0.0-experimental-e41ede670

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 (44) hide show
  1. package/CHANGELOG.md +0 -10
  2. package/dist/development/{chunk-5XVYBMAF.mjs → chunk-H3OBLXFX.mjs} +767 -514
  3. package/dist/development/dom-export.d.mts +13 -3
  4. package/dist/development/dom-export.d.ts +13 -3
  5. package/dist/development/dom-export.js +272 -108
  6. package/dist/development/dom-export.mjs +9 -6
  7. package/dist/{production/fog-of-war-7V7BguJA.d.ts → development/fog-of-war-Bt7PejVF.d.ts} +91 -6
  8. package/dist/development/{fog-of-war-NQCW9yWR.d.mts → fog-of-war-Dz4n-TU-.d.mts} +91 -6
  9. package/dist/development/index.d.mts +10 -19
  10. package/dist/development/index.d.ts +10 -19
  11. package/dist/development/index.js +767 -514
  12. package/dist/development/index.mjs +2 -2
  13. package/dist/development/lib/types/route-module.d.mts +6 -2
  14. package/dist/development/lib/types/route-module.d.ts +6 -2
  15. package/dist/development/lib/types/route-module.js +1 -1
  16. package/dist/development/lib/types/route-module.mjs +1 -1
  17. package/dist/development/{route-data-JFOfNyPS.d.ts → route-data-C96IyGKo.d.mts} +37 -15
  18. package/dist/{production/route-data-JFOfNyPS.d.mts → development/route-data-C96IyGKo.d.ts} +37 -15
  19. package/dist/production/{chunk-CKFZHSMW.mjs → chunk-YBZNESR7.mjs} +767 -514
  20. package/dist/production/dom-export.d.mts +13 -3
  21. package/dist/production/dom-export.d.ts +13 -3
  22. package/dist/production/dom-export.js +272 -108
  23. package/dist/production/dom-export.mjs +9 -6
  24. package/dist/{development/fog-of-war-7V7BguJA.d.ts → production/fog-of-war-Bt7PejVF.d.ts} +91 -6
  25. package/dist/production/{fog-of-war-NQCW9yWR.d.mts → fog-of-war-Dz4n-TU-.d.mts} +91 -6
  26. package/dist/production/index.d.mts +10 -19
  27. package/dist/production/index.d.ts +10 -19
  28. package/dist/production/index.js +767 -514
  29. package/dist/production/index.mjs +2 -2
  30. package/dist/production/lib/types/route-module.d.mts +6 -2
  31. package/dist/production/lib/types/route-module.d.ts +6 -2
  32. package/dist/production/lib/types/route-module.js +1 -1
  33. package/dist/production/lib/types/route-module.mjs +1 -1
  34. package/dist/production/{route-data-JFOfNyPS.d.ts → route-data-C96IyGKo.d.mts} +37 -15
  35. package/dist/{development/route-data-JFOfNyPS.d.mts → production/route-data-C96IyGKo.d.ts} +37 -15
  36. package/package.json +2 -17
  37. package/dist/development/server.d.mts +0 -988
  38. package/dist/development/server.d.ts +0 -988
  39. package/dist/development/server.js +0 -1429
  40. package/dist/development/server.mjs +0 -1406
  41. package/dist/production/server.d.mts +0 -988
  42. package/dist/production/server.d.ts +0 -988
  43. package/dist/production/server.js +0 -1405
  44. package/dist/production/server.mjs +0 -1382
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-1ebb6d403
2
+ * react-router v0.0.0-experimental-e41ede670
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -46,7 +46,7 @@ __export(dom_export_exports, {
46
46
  module.exports = __toCommonJS(dom_export_exports);
47
47
 
48
48
  // lib/dom-export/dom-router-provider.tsx
49
- var React11 = __toESM(require("react"));
49
+ var React10 = __toESM(require("react"));
50
50
  var ReactDOM = __toESM(require("react-dom"));
51
51
 
52
52
  // lib/router/history.ts
@@ -679,7 +679,10 @@ var redirect = (url, init = 302) => {
679
679
  }
680
680
  let headers = new Headers(responseInit.headers);
681
681
  headers.set("Location", url);
682
- return new Response(null, { ...responseInit, headers });
682
+ return new Response(null, {
683
+ ...responseInit,
684
+ headers
685
+ });
683
686
  };
684
687
  var ErrorResponseImpl = class {
685
688
  constructor(status, statusText, data2, internal = false) {
@@ -764,6 +767,7 @@ function createRouter(init) {
764
767
  );
765
768
  let inFlightDataRoutes;
766
769
  let basename = init.basename || "/";
770
+ let routerContext = typeof init.context !== "undefined" ? init.context : {};
767
771
  let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;
768
772
  let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;
769
773
  let future = {
@@ -952,11 +956,6 @@ function createRouter(init) {
952
956
  }
953
957
  }
954
958
  });
955
- fetchersQueuedForDeletion.forEach((key) => {
956
- if (!state.fetchers.has(key) && !fetchControllers.has(key)) {
957
- unmountedFetchers.push(key);
958
- }
959
- });
960
959
  [...subscribers].forEach(
961
960
  (subscriber) => subscriber(state, {
962
961
  deletedFetchers: unmountedFetchers,
@@ -1339,6 +1338,14 @@ function createRouter(init) {
1339
1338
  null
1340
1339
  );
1341
1340
  result = results[actionMatch.route.id];
1341
+ if (!result) {
1342
+ for (let match of matches) {
1343
+ if (results[match.route.id]) {
1344
+ result = results[match.route.id];
1345
+ break;
1346
+ }
1347
+ }
1348
+ }
1342
1349
  if (request.signal.aborted) {
1343
1350
  return { shortCircuited: true };
1344
1351
  }
@@ -2000,13 +2007,13 @@ function createRouter(init) {
2000
2007
  results = await callDataStrategyImpl(
2001
2008
  dataStrategyImpl,
2002
2009
  type,
2003
- state2,
2004
2010
  request,
2005
2011
  matchesToLoad,
2006
2012
  matches,
2007
2013
  fetcherKey,
2008
2014
  manifest,
2009
- mapRouteProperties2
2015
+ mapRouteProperties2,
2016
+ routerContext
2010
2017
  );
2011
2018
  } catch (e) {
2012
2019
  matchesToLoad.forEach((m) => {
@@ -2797,20 +2804,124 @@ async function loadLazyRouteModule(route, mapRouteProperties2, manifest) {
2797
2804
  lazy: void 0
2798
2805
  });
2799
2806
  }
2800
- async function defaultDataStrategy({
2801
- matches
2802
- }) {
2803
- let matchesToLoad = matches.filter((m) => m.shouldLoad);
2804
- let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));
2805
- return results.reduce(
2806
- (acc, result, i) => Object.assign(acc, { [matchesToLoad[i].route.id]: result }),
2807
- {}
2807
+ async function defaultDataStrategy(args) {
2808
+ let matchesToLoad = args.matches.filter((m) => m.shouldLoad);
2809
+ let lastIndex = args.matches.length - 1;
2810
+ for (let i = lastIndex; i >= 0; i--) {
2811
+ if (args.matches[i].shouldLoad) {
2812
+ lastIndex = i;
2813
+ break;
2814
+ }
2815
+ }
2816
+ let results = await runMiddlewarePipeline(
2817
+ args,
2818
+ lastIndex,
2819
+ false,
2820
+ async (keyedResults) => {
2821
+ let results2 = await Promise.all(matchesToLoad.map((m) => m.resolve()));
2822
+ results2.forEach((result, i) => {
2823
+ keyedResults[matchesToLoad[i].route.id] = result;
2824
+ });
2825
+ }
2808
2826
  );
2827
+ return results;
2809
2828
  }
2810
- async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties2, requestContext) {
2829
+ async function runMiddlewarePipeline({
2830
+ request,
2831
+ params,
2832
+ context,
2833
+ matches
2834
+ }, lastIndex, propagateResult, handler) {
2835
+ let keyedResults = {};
2836
+ try {
2837
+ let result = await callRouteMiddleware(
2838
+ matches.slice(0, lastIndex + 1).flatMap(
2839
+ (m) => m.route.middleware ? m.route.middleware.map((fn) => [m.route.id, fn]) : []
2840
+ ),
2841
+ 0,
2842
+ { request, params, context },
2843
+ keyedResults,
2844
+ propagateResult,
2845
+ handler
2846
+ );
2847
+ return propagateResult ? result : keyedResults;
2848
+ } catch (e) {
2849
+ if (!(e instanceof MiddlewareError)) {
2850
+ throw e;
2851
+ }
2852
+ if (propagateResult && isResponse(e.error)) {
2853
+ throw e.error;
2854
+ }
2855
+ return {
2856
+ ...keyedResults,
2857
+ [e.routeId]: { type: "error", result: e.error }
2858
+ };
2859
+ }
2860
+ }
2861
+ var MiddlewareError = class {
2862
+ constructor(routeId, error) {
2863
+ this.routeId = routeId;
2864
+ this.error = error;
2865
+ }
2866
+ };
2867
+ async function callRouteMiddleware(middlewares, idx, args, keyedResults, propagateResult, handler) {
2868
+ let { request } = args;
2869
+ if (request.signal.aborted) {
2870
+ if (request.signal.reason) {
2871
+ throw request.signal.reason;
2872
+ }
2873
+ throw new Error(
2874
+ `Request aborted without an \`AbortSignal.reason\`: ${request.method} ${request.url}`
2875
+ );
2876
+ }
2877
+ let tuple = middlewares[idx];
2878
+ if (!tuple) {
2879
+ let result = await handler(keyedResults);
2880
+ return result;
2881
+ }
2882
+ let [routeId, middleware] = tuple;
2883
+ let nextCalled = false;
2884
+ let next = async () => {
2885
+ if (nextCalled) {
2886
+ throw new Error("You may only call `next()` once per middleware");
2887
+ }
2888
+ nextCalled = true;
2889
+ let result = await callRouteMiddleware(
2890
+ middlewares,
2891
+ idx + 1,
2892
+ args,
2893
+ keyedResults,
2894
+ propagateResult,
2895
+ handler
2896
+ );
2897
+ return propagateResult ? result : void 0;
2898
+ };
2899
+ try {
2900
+ let result = await middleware(args, next);
2901
+ if (!nextCalled) {
2902
+ result = await next();
2903
+ }
2904
+ return result;
2905
+ } catch (e) {
2906
+ if (e instanceof MiddlewareError) {
2907
+ throw e;
2908
+ }
2909
+ throw new MiddlewareError(routeId, e);
2910
+ }
2911
+ }
2912
+ async function callDataStrategyImpl(dataStrategyImpl, type, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties2, routerContext) {
2811
2913
  let loadRouteDefinitionsPromises = matches.map(
2812
2914
  (m) => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties2, manifest) : void 0
2813
2915
  );
2916
+ let lazyMiddlewarePromises = matches.map(
2917
+ (m, i) => m.route.lazy && !("middleware" in m.route) ? (
2918
+ // Swallow the error here, let it bubble up from resolve()
2919
+ loadRouteDefinitionsPromises[i].catch((e) => e)
2920
+ ) : null
2921
+ ).filter((p) => p != null);
2922
+ if (lazyMiddlewarePromises.length > 0) {
2923
+ await Promise.all(lazyMiddlewarePromises);
2924
+ }
2814
2925
  let dsMatches = matches.map((match, i) => {
2815
2926
  let loadRoutePromise = loadRouteDefinitionsPromises[i];
2816
2927
  let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);
@@ -2824,7 +2935,7 @@ async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matc
2824
2935
  match,
2825
2936
  loadRoutePromise,
2826
2937
  handlerOverride,
2827
- requestContext
2938
+ routerContext
2828
2939
  ) : Promise.resolve({ type: "data" /* data */, result: void 0 });
2829
2940
  };
2830
2941
  return {
@@ -2838,7 +2949,7 @@ async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matc
2838
2949
  request,
2839
2950
  params: matches[0].params,
2840
2951
  fetcherKey,
2841
- context: requestContext
2952
+ context: routerContext
2842
2953
  });
2843
2954
  try {
2844
2955
  await Promise.all(loadRouteDefinitionsPromises);
@@ -2846,7 +2957,7 @@ async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matc
2846
2957
  }
2847
2958
  return results;
2848
2959
  }
2849
- async function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) {
2960
+ async function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, routerContext) {
2850
2961
  let result;
2851
2962
  let onReject;
2852
2963
  let runHandler = (handler) => {
@@ -2866,7 +2977,7 @@ async function callLoaderOrAction(type, request, match, loadRoutePromise, handle
2866
2977
  {
2867
2978
  request,
2868
2979
  params: match.params,
2869
- context: staticContext
2980
+ context: routerContext
2870
2981
  },
2871
2982
  ...ctx !== void 0 ? [ctx] : []
2872
2983
  );
@@ -3491,7 +3602,7 @@ function createDeferred() {
3491
3602
  }
3492
3603
 
3493
3604
  // lib/components.tsx
3494
- var React4 = __toESM(require("react"));
3605
+ var React3 = __toESM(require("react"));
3495
3606
 
3496
3607
  // lib/context.ts
3497
3608
  var React = __toESM(require("react"));
@@ -3869,8 +3980,7 @@ function warnOnce(condition, message) {
3869
3980
  }
3870
3981
  }
3871
3982
 
3872
- // lib/dom/shared.tsx
3873
- var React3 = __toESM(require("react"));
3983
+ // lib/components.tsx
3874
3984
  var ENABLE_DEV_WARNINGS2 = true;
3875
3985
  function mapRouteProperties(route) {
3876
3986
  let updates = {
@@ -3922,8 +4032,6 @@ function mapRouteProperties(route) {
3922
4032
  }
3923
4033
  return updates;
3924
4034
  }
3925
-
3926
- // lib/components.tsx
3927
4035
  var Deferred = class {
3928
4036
  constructor() {
3929
4037
  this.status = "pending";
@@ -3947,23 +4055,23 @@ function RouterProvider({
3947
4055
  router: router2,
3948
4056
  flushSync: reactDomFlushSyncImpl
3949
4057
  }) {
3950
- let [state, setStateImpl] = React4.useState(router2.state);
3951
- let [pendingState, setPendingState] = React4.useState();
3952
- let [vtContext, setVtContext] = React4.useState({
4058
+ let [state, setStateImpl] = React3.useState(router2.state);
4059
+ let [pendingState, setPendingState] = React3.useState();
4060
+ let [vtContext, setVtContext] = React3.useState({
3953
4061
  isTransitioning: false
3954
4062
  });
3955
- let [renderDfd, setRenderDfd] = React4.useState();
3956
- let [transition, setTransition] = React4.useState();
3957
- let [interruption, setInterruption] = React4.useState();
3958
- let fetcherData = React4.useRef(/* @__PURE__ */ new Map());
3959
- let setState = React4.useCallback(
4063
+ let [renderDfd, setRenderDfd] = React3.useState();
4064
+ let [transition, setTransition] = React3.useState();
4065
+ let [interruption, setInterruption] = React3.useState();
4066
+ let fetcherData = React3.useRef(/* @__PURE__ */ new Map());
4067
+ let setState = React3.useCallback(
3960
4068
  (newState, { deletedFetchers, flushSync: flushSync2, viewTransitionOpts }) => {
4069
+ deletedFetchers.forEach((key) => fetcherData.current.delete(key));
3961
4070
  newState.fetchers.forEach((fetcher, key) => {
3962
4071
  if (fetcher.data !== void 0) {
3963
4072
  fetcherData.current.set(key, fetcher.data);
3964
4073
  }
3965
4074
  });
3966
- deletedFetchers.forEach((key) => fetcherData.current.delete(key));
3967
4075
  warnOnce(
3968
4076
  flushSync2 === false || reactDomFlushSyncImpl != null,
3969
4077
  'You provided the `flushSync` option to a router update, but you are not using the `<RouterProvider>` from `react-router/dom` so `ReactDOM.flushSync()` is unavailable. Please update your app to `import { RouterProvider } from "react-router/dom"` and ensure you have `react-dom` installed as a dependency to use the `flushSync` option.'
@@ -3977,7 +4085,7 @@ function RouterProvider({
3977
4085
  if (reactDomFlushSyncImpl && flushSync2) {
3978
4086
  reactDomFlushSyncImpl(() => setStateImpl(newState));
3979
4087
  } else {
3980
- React4.startTransition(() => setStateImpl(newState));
4088
+ React3.startTransition(() => setStateImpl(newState));
3981
4089
  }
3982
4090
  return;
3983
4091
  }
@@ -4028,18 +4136,18 @@ function RouterProvider({
4028
4136
  },
4029
4137
  [router2.window, reactDomFlushSyncImpl, transition, renderDfd]
4030
4138
  );
4031
- React4.useLayoutEffect(() => router2.subscribe(setState), [router2, setState]);
4032
- React4.useEffect(() => {
4139
+ React3.useLayoutEffect(() => router2.subscribe(setState), [router2, setState]);
4140
+ React3.useEffect(() => {
4033
4141
  if (vtContext.isTransitioning && !vtContext.flushSync) {
4034
4142
  setRenderDfd(new Deferred());
4035
4143
  }
4036
4144
  }, [vtContext]);
4037
- React4.useEffect(() => {
4145
+ React3.useEffect(() => {
4038
4146
  if (renderDfd && pendingState && router2.window) {
4039
4147
  let newState = pendingState;
4040
4148
  let renderPromise = renderDfd.promise;
4041
4149
  let transition2 = router2.window.document.startViewTransition(async () => {
4042
- React4.startTransition(() => setStateImpl(newState));
4150
+ React3.startTransition(() => setStateImpl(newState));
4043
4151
  await renderPromise;
4044
4152
  });
4045
4153
  transition2.finished.finally(() => {
@@ -4051,12 +4159,12 @@ function RouterProvider({
4051
4159
  setTransition(transition2);
4052
4160
  }
4053
4161
  }, [pendingState, renderDfd, router2.window]);
4054
- React4.useEffect(() => {
4162
+ React3.useEffect(() => {
4055
4163
  if (renderDfd && pendingState && state.location.key === pendingState.location.key) {
4056
4164
  renderDfd.resolve();
4057
4165
  }
4058
4166
  }, [renderDfd, transition, state.location, pendingState]);
4059
- React4.useEffect(() => {
4167
+ React3.useEffect(() => {
4060
4168
  if (!vtContext.isTransitioning && interruption) {
4061
4169
  setPendingState(interruption.state);
4062
4170
  setVtContext({
@@ -4068,7 +4176,7 @@ function RouterProvider({
4068
4176
  setInterruption(void 0);
4069
4177
  }
4070
4178
  }, [vtContext.isTransitioning, interruption]);
4071
- let navigator2 = React4.useMemo(() => {
4179
+ let navigator2 = React3.useMemo(() => {
4072
4180
  return {
4073
4181
  createHref: router2.createHref,
4074
4182
  encodeLocation: router2.encodeLocation,
@@ -4085,7 +4193,7 @@ function RouterProvider({
4085
4193
  };
4086
4194
  }, [router2]);
4087
4195
  let basename = router2.basename || "/";
4088
- let dataRouterContext = React4.useMemo(
4196
+ let dataRouterContext = React3.useMemo(
4089
4197
  () => ({
4090
4198
  router: router2,
4091
4199
  navigator: navigator2,
@@ -4094,7 +4202,7 @@ function RouterProvider({
4094
4202
  }),
4095
4203
  [router2, navigator2, basename]
4096
4204
  );
4097
- return /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React4.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React4.createElement(FetchersContext.Provider, { value: fetcherData.current }, /* @__PURE__ */ React4.createElement(ViewTransitionContext.Provider, { value: vtContext }, /* @__PURE__ */ React4.createElement(
4205
+ return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React3.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React3.createElement(FetchersContext.Provider, { value: fetcherData.current }, /* @__PURE__ */ React3.createElement(ViewTransitionContext.Provider, { value: vtContext }, /* @__PURE__ */ React3.createElement(
4098
4206
  Router,
4099
4207
  {
4100
4208
  basename,
@@ -4102,7 +4210,7 @@ function RouterProvider({
4102
4210
  navigationType: state.historyAction,
4103
4211
  navigator: navigator2
4104
4212
  },
4105
- /* @__PURE__ */ React4.createElement(
4213
+ /* @__PURE__ */ React3.createElement(
4106
4214
  MemoizedDataRoutes,
4107
4215
  {
4108
4216
  routes: router2.routes,
@@ -4112,7 +4220,7 @@ function RouterProvider({
4112
4220
  )
4113
4221
  ))))), null);
4114
4222
  }
4115
- var MemoizedDataRoutes = React4.memo(DataRoutes);
4223
+ var MemoizedDataRoutes = React3.memo(DataRoutes);
4116
4224
  function DataRoutes({
4117
4225
  routes,
4118
4226
  future,
@@ -4133,7 +4241,7 @@ function Router({
4133
4241
  `You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`
4134
4242
  );
4135
4243
  let basename = basenameProp.replace(/^\/*/, "/");
4136
- let navigationContext = React4.useMemo(
4244
+ let navigationContext = React3.useMemo(
4137
4245
  () => ({
4138
4246
  basename,
4139
4247
  navigator: navigator2,
@@ -4152,7 +4260,7 @@ function Router({
4152
4260
  state = null,
4153
4261
  key = "default"
4154
4262
  } = locationProp;
4155
- let locationContext = React4.useMemo(() => {
4263
+ let locationContext = React3.useMemo(() => {
4156
4264
  let trailingPathname = stripBasename(pathname, basename);
4157
4265
  if (trailingPathname == null) {
4158
4266
  return null;
@@ -4175,11 +4283,11 @@ function Router({
4175
4283
  if (locationContext == null) {
4176
4284
  return null;
4177
4285
  }
4178
- return /* @__PURE__ */ React4.createElement(NavigationContext.Provider, { value: navigationContext }, /* @__PURE__ */ React4.createElement(LocationContext.Provider, { children, value: locationContext }));
4286
+ return /* @__PURE__ */ React3.createElement(NavigationContext.Provider, { value: navigationContext }, /* @__PURE__ */ React3.createElement(LocationContext.Provider, { children, value: locationContext }));
4179
4287
  }
4180
4288
 
4181
4289
  // lib/dom/ssr/components.tsx
4182
- var React10 = __toESM(require("react"));
4290
+ var React9 = __toESM(require("react"));
4183
4291
 
4184
4292
  // lib/dom/ssr/invariant.ts
4185
4293
  function invariant2(value, message) {
@@ -4282,7 +4390,7 @@ function createHtml(html) {
4282
4390
  }
4283
4391
 
4284
4392
  // lib/dom/ssr/single-fetch.tsx
4285
- var React5 = __toESM(require("react"));
4393
+ var React4 = __toESM(require("react"));
4286
4394
  var import_turbo_stream = require("turbo-stream");
4287
4395
 
4288
4396
  // lib/dom/ssr/data.ts
@@ -4309,20 +4417,54 @@ async function createRequestInit(request) {
4309
4417
  // lib/dom/ssr/single-fetch.tsx
4310
4418
  var SingleFetchRedirectSymbol = Symbol("SingleFetchRedirect");
4311
4419
  function getSingleFetchDataStrategy(manifest, routeModules, getRouter) {
4312
- return async ({ request, matches, fetcherKey }) => {
4420
+ return async (args) => {
4421
+ let { request, matches, fetcherKey } = args;
4313
4422
  if (request.method !== "GET") {
4314
- return singleFetchActionStrategy(request, matches);
4423
+ return runMiddlewarePipeline(
4424
+ args,
4425
+ matches.findIndex((m) => m.shouldLoad),
4426
+ false,
4427
+ async (keyedResults) => {
4428
+ let results = await singleFetchActionStrategy(request, matches);
4429
+ Object.assign(keyedResults, results);
4430
+ }
4431
+ );
4315
4432
  }
4316
4433
  if (fetcherKey) {
4317
- return singleFetchLoaderFetcherStrategy(request, matches);
4434
+ return runMiddlewarePipeline(
4435
+ args,
4436
+ matches.findIndex((m) => m.shouldLoad),
4437
+ false,
4438
+ async (keyedResults) => {
4439
+ let results = await singleFetchLoaderFetcherStrategy(
4440
+ request,
4441
+ matches
4442
+ );
4443
+ Object.assign(keyedResults, results);
4444
+ }
4445
+ );
4318
4446
  }
4319
- return singleFetchLoaderNavigationStrategy(
4447
+ let lowestLoadingIndex = getLowestLoadingIndex(
4320
4448
  manifest,
4321
4449
  routeModules,
4322
4450
  getRouter(),
4323
- request,
4324
4451
  matches
4325
4452
  );
4453
+ return runMiddlewarePipeline(
4454
+ args,
4455
+ lowestLoadingIndex,
4456
+ false,
4457
+ async (keyedResults) => {
4458
+ let results = await singleFetchLoaderNavigationStrategy(
4459
+ manifest,
4460
+ routeModules,
4461
+ getRouter(),
4462
+ request,
4463
+ matches
4464
+ );
4465
+ Object.assign(keyedResults, results);
4466
+ }
4467
+ );
4326
4468
  };
4327
4469
  }
4328
4470
  async function singleFetchActionStrategy(request, matches) {
@@ -4352,6 +4494,20 @@ async function singleFetchActionStrategy(request, matches) {
4352
4494
  }
4353
4495
  };
4354
4496
  }
4497
+ function isOptedOut(manifestRoute, routeModule, match, router2) {
4498
+ return match.route.id in router2.state.loaderData && manifestRoute && manifestRoute.hasLoader && routeModule && routeModule.shouldRevalidate;
4499
+ }
4500
+ function getLowestLoadingIndex(manifest, routeModules, router2, matches) {
4501
+ let tailIdx = [...matches].reverse().findIndex(
4502
+ (m) => m.shouldLoad || !isOptedOut(
4503
+ manifest.routes[m.route.id],
4504
+ routeModules[m.route.id],
4505
+ m,
4506
+ router2
4507
+ )
4508
+ );
4509
+ return tailIdx < 0 ? 0 : matches.length - 1 - tailIdx;
4510
+ }
4355
4511
  async function singleFetchLoaderNavigationStrategy(manifest, routeModules, router2, request, matches) {
4356
4512
  let routesParams = /* @__PURE__ */ new Set();
4357
4513
  let foundOptOutRoute = false;
@@ -4370,7 +4526,7 @@ async function singleFetchLoaderNavigationStrategy(manifest, routeModules, route
4370
4526
  if (!router2.state.initialized) {
4371
4527
  return;
4372
4528
  }
4373
- if (m.route.id in router2.state.loaderData && manifestRoute && manifestRoute.hasLoader && routeModules[m.route.id]?.shouldRevalidate) {
4529
+ if (isOptedOut(manifestRoute, routeModules[m.route.id], m, router2)) {
4374
4530
  foundOptOutRoute = true;
4375
4531
  return;
4376
4532
  }
@@ -4546,7 +4702,7 @@ function unwrapSingleFetchResult(result, routeId) {
4546
4702
  if (result.replace) {
4547
4703
  headers["X-Remix-Replace"] = "yes";
4548
4704
  }
4549
- throw redirect(result.redirect, { status: result.status, headers });
4705
+ return redirect(result.redirect, { status: result.status, headers });
4550
4706
  } else if ("data" in result) {
4551
4707
  return result.data;
4552
4708
  } else {
@@ -4582,14 +4738,14 @@ function createDeferred2() {
4582
4738
  }
4583
4739
 
4584
4740
  // lib/dom/ssr/fog-of-war.ts
4585
- var React9 = __toESM(require("react"));
4741
+ var React8 = __toESM(require("react"));
4586
4742
 
4587
4743
  // lib/dom/ssr/routes.tsx
4588
- var React8 = __toESM(require("react"));
4744
+ var React7 = __toESM(require("react"));
4589
4745
 
4590
4746
  // lib/dom/ssr/errorBoundaries.tsx
4591
- var React6 = __toESM(require("react"));
4592
- var RemixErrorBoundary = class extends React6.Component {
4747
+ var React5 = __toESM(require("react"));
4748
+ var RemixErrorBoundary = class extends React5.Component {
4593
4749
  constructor(props) {
4594
4750
  super(props);
4595
4751
  this.state = { error: props.error || null, location: props.location };
@@ -4605,7 +4761,7 @@ var RemixErrorBoundary = class extends React6.Component {
4605
4761
  }
4606
4762
  render() {
4607
4763
  if (this.state.error) {
4608
- return /* @__PURE__ */ React6.createElement(
4764
+ return /* @__PURE__ */ React5.createElement(
4609
4765
  RemixRootDefaultErrorBoundary,
4610
4766
  {
4611
4767
  error: this.state.error,
@@ -4622,7 +4778,7 @@ function RemixRootDefaultErrorBoundary({
4622
4778
  isOutsideRemixApp
4623
4779
  }) {
4624
4780
  console.error(error);
4625
- let heyDeveloper = /* @__PURE__ */ React6.createElement(
4781
+ let heyDeveloper = /* @__PURE__ */ React5.createElement(
4626
4782
  "script",
4627
4783
  {
4628
4784
  dangerouslySetInnerHTML: {
@@ -4635,7 +4791,7 @@ function RemixRootDefaultErrorBoundary({
4635
4791
  }
4636
4792
  );
4637
4793
  if (isRouteErrorResponse(error)) {
4638
- return /* @__PURE__ */ React6.createElement(BoundaryShell, { title: "Unhandled Thrown Response!" }, /* @__PURE__ */ React6.createElement("h1", { style: { fontSize: "24px" } }, error.status, " ", error.statusText), heyDeveloper);
4794
+ return /* @__PURE__ */ React5.createElement(BoundaryShell, { title: "Unhandled Thrown Response!" }, /* @__PURE__ */ React5.createElement("h1", { style: { fontSize: "24px" } }, error.status, " ", error.statusText), heyDeveloper);
4639
4795
  }
4640
4796
  let errorInstance;
4641
4797
  if (error instanceof Error) {
@@ -4644,14 +4800,14 @@ function RemixRootDefaultErrorBoundary({
4644
4800
  let errorString = error == null ? "Unknown Error" : typeof error === "object" && "toString" in error ? error.toString() : JSON.stringify(error);
4645
4801
  errorInstance = new Error(errorString);
4646
4802
  }
4647
- return /* @__PURE__ */ React6.createElement(
4803
+ return /* @__PURE__ */ React5.createElement(
4648
4804
  BoundaryShell,
4649
4805
  {
4650
4806
  title: "Application Error!",
4651
4807
  isOutsideRemixApp
4652
4808
  },
4653
- /* @__PURE__ */ React6.createElement("h1", { style: { fontSize: "24px" } }, "Application Error"),
4654
- /* @__PURE__ */ React6.createElement(
4809
+ /* @__PURE__ */ React5.createElement("h1", { style: { fontSize: "24px" } }, "Application Error"),
4810
+ /* @__PURE__ */ React5.createElement(
4655
4811
  "pre",
4656
4812
  {
4657
4813
  style: {
@@ -4676,19 +4832,19 @@ function BoundaryShell({
4676
4832
  if (routeModules.root?.Layout && !isOutsideRemixApp) {
4677
4833
  return children;
4678
4834
  }
4679
- return /* @__PURE__ */ React6.createElement("html", { lang: "en" }, /* @__PURE__ */ React6.createElement("head", null, /* @__PURE__ */ React6.createElement("meta", { charSet: "utf-8" }), /* @__PURE__ */ React6.createElement(
4835
+ return /* @__PURE__ */ React5.createElement("html", { lang: "en" }, /* @__PURE__ */ React5.createElement("head", null, /* @__PURE__ */ React5.createElement("meta", { charSet: "utf-8" }), /* @__PURE__ */ React5.createElement(
4680
4836
  "meta",
4681
4837
  {
4682
4838
  name: "viewport",
4683
4839
  content: "width=device-width,initial-scale=1,viewport-fit=cover"
4684
4840
  }
4685
- ), /* @__PURE__ */ React6.createElement("title", null, title)), /* @__PURE__ */ React6.createElement("body", null, /* @__PURE__ */ React6.createElement("main", { style: { fontFamily: "system-ui, sans-serif", padding: "2rem" } }, children, renderScripts ? /* @__PURE__ */ React6.createElement(Scripts, null) : null)));
4841
+ ), /* @__PURE__ */ React5.createElement("title", null, title)), /* @__PURE__ */ React5.createElement("body", null, /* @__PURE__ */ React5.createElement("main", { style: { fontFamily: "system-ui, sans-serif", padding: "2rem" } }, children, renderScripts ? /* @__PURE__ */ React5.createElement(Scripts, null) : null)));
4686
4842
  }
4687
4843
 
4688
4844
  // lib/dom/ssr/fallback.tsx
4689
- var React7 = __toESM(require("react"));
4845
+ var React6 = __toESM(require("react"));
4690
4846
  function RemixRootDefaultHydrateFallback() {
4691
- return /* @__PURE__ */ React7.createElement(BoundaryShell, { title: "Loading...", renderScripts: true }, /* @__PURE__ */ React7.createElement(
4847
+ return /* @__PURE__ */ React6.createElement(BoundaryShell, { title: "Loading...", renderScripts: true }, /* @__PURE__ */ React6.createElement(
4692
4848
  "script",
4693
4849
  {
4694
4850
  dangerouslySetInnerHTML: {
@@ -4722,17 +4878,17 @@ function groupRoutesByParentId(manifest) {
4722
4878
  function getRouteComponents(route, routeModule, isSpaMode) {
4723
4879
  let Component4 = getRouteModuleComponent(routeModule);
4724
4880
  let HydrateFallback = routeModule.HydrateFallback && (!isSpaMode || route.id === "root") ? routeModule.HydrateFallback : route.id === "root" ? RemixRootDefaultHydrateFallback : void 0;
4725
- let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === "root" ? () => /* @__PURE__ */ React8.createElement(RemixRootDefaultErrorBoundary, { error: useRouteError() }) : void 0;
4881
+ let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === "root" ? () => /* @__PURE__ */ React7.createElement(RemixRootDefaultErrorBoundary, { error: useRouteError() }) : void 0;
4726
4882
  if (route.id === "root" && routeModule.Layout) {
4727
4883
  return {
4728
4884
  ...Component4 ? {
4729
- element: /* @__PURE__ */ React8.createElement(routeModule.Layout, null, /* @__PURE__ */ React8.createElement(Component4, null))
4885
+ element: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(Component4, null))
4730
4886
  } : { Component: Component4 },
4731
4887
  ...ErrorBoundary ? {
4732
- errorElement: /* @__PURE__ */ React8.createElement(routeModule.Layout, null, /* @__PURE__ */ React8.createElement(ErrorBoundary, null))
4888
+ errorElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(ErrorBoundary, null))
4733
4889
  } : { ErrorBoundary },
4734
4890
  ...HydrateFallback ? {
4735
- hydrateFallbackElement: /* @__PURE__ */ React8.createElement(routeModule.Layout, null, /* @__PURE__ */ React8.createElement(HydrateFallback, null))
4891
+ hydrateFallbackElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(HydrateFallback, null))
4736
4892
  } : { HydrateFallback }
4737
4893
  };
4738
4894
  }
@@ -4807,6 +4963,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
4807
4963
  Object.assign(dataRoute, {
4808
4964
  ...dataRoute,
4809
4965
  ...getRouteComponents(route, routeModule, isSpaMode),
4966
+ middleware: routeModule.clientMiddleware,
4810
4967
  handle: routeModule.handle,
4811
4968
  shouldRevalidate: getShouldRevalidateFunction(
4812
4969
  routeModule,
@@ -4819,7 +4976,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
4819
4976
  let hasInitialError = initialState && initialState.errors && route.id in initialState.errors;
4820
4977
  let initialError = hasInitialError ? initialState?.errors?.[route.id] : void 0;
4821
4978
  let isHydrationRequest = needsRevalidation == null && (routeModule.clientLoader?.hydrate === true || !route.hasLoader);
4822
- dataRoute.loader = async ({ request, params }, singleFetch) => {
4979
+ dataRoute.loader = async ({ request, params, context }, singleFetch) => {
4823
4980
  try {
4824
4981
  let result = await prefetchStylesAndCallHandler(async () => {
4825
4982
  invariant2(
@@ -4833,6 +4990,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
4833
4990
  return routeModule.clientLoader({
4834
4991
  request,
4835
4992
  params,
4993
+ context,
4836
4994
  async serverLoader() {
4837
4995
  preventInvalidServerHandlerCall("loader", route, isSpaMode);
4838
4996
  if (isHydrationRequest) {
@@ -4857,7 +5015,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
4857
5015
  routeModule,
4858
5016
  isSpaMode
4859
5017
  );
4860
- dataRoute.action = ({ request, params }, singleFetch) => {
5018
+ dataRoute.action = ({ request, params, context }, singleFetch) => {
4861
5019
  return prefetchStylesAndCallHandler(async () => {
4862
5020
  invariant2(
4863
5021
  routeModule,
@@ -4872,6 +5030,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
4872
5030
  return routeModule.clientAction({
4873
5031
  request,
4874
5032
  params,
5033
+ context,
4875
5034
  async serverAction() {
4876
5035
  preventInvalidServerHandlerCall("action", route, isSpaMode);
4877
5036
  return fetchServerAction(singleFetch);
@@ -4881,13 +5040,13 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
4881
5040
  };
4882
5041
  } else {
4883
5042
  if (!route.hasClientLoader) {
4884
- dataRoute.loader = ({ request }, singleFetch) => prefetchStylesAndCallHandler(() => {
5043
+ dataRoute.loader = (_, singleFetch) => prefetchStylesAndCallHandler(() => {
4885
5044
  if (isSpaMode) return Promise.resolve(null);
4886
5045
  return fetchServerLoader(singleFetch);
4887
5046
  });
4888
5047
  }
4889
5048
  if (!route.hasClientAction) {
4890
- dataRoute.action = ({ request }, singleFetch) => prefetchStylesAndCallHandler(() => {
5049
+ dataRoute.action = (_, singleFetch) => prefetchStylesAndCallHandler(() => {
4891
5050
  if (isSpaMode) {
4892
5051
  throw noActionDefinedError("clientAction", route.id);
4893
5052
  }
@@ -4923,6 +5082,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
4923
5082
  return {
4924
5083
  ...lazyRoute.loader ? { loader: lazyRoute.loader } : {},
4925
5084
  ...lazyRoute.action ? { action: lazyRoute.action } : {},
5085
+ middleware: mod.clientMiddleware,
4926
5086
  hasErrorBoundary: lazyRoute.hasErrorBoundary,
4927
5087
  shouldRevalidate: getShouldRevalidateFunction(
4928
5088
  lazyRoute,
@@ -4980,6 +5140,7 @@ async function loadRouteModuleWithBlockingLinks(route, routeModules) {
4980
5140
  return {
4981
5141
  Component: getRouteModuleComponent(routeModule),
4982
5142
  ErrorBoundary: routeModule.ErrorBoundary,
5143
+ clientMiddleware: routeModule.clientMiddleware,
4983
5144
  clientAction: routeModule.clientAction,
4984
5145
  clientLoader: routeModule.clientLoader,
4985
5146
  handle: routeModule.handle,
@@ -5050,7 +5211,7 @@ function getPatchRoutesOnNavigationFunction(manifest, routeModules, isSpaMode, b
5050
5211
  };
5051
5212
  }
5052
5213
  function useFogOFWarDiscovery(router2, manifest, routeModules, isSpaMode) {
5053
- React9.useEffect(() => {
5214
+ React8.useEffect(() => {
5054
5215
  if (!isFogOfWarEnabled(isSpaMode) || navigator.connection?.saveData === true) {
5055
5216
  return;
5056
5217
  }
@@ -5179,7 +5340,7 @@ function debounce(callback, wait) {
5179
5340
 
5180
5341
  // lib/dom/ssr/components.tsx
5181
5342
  function useDataRouterContext() {
5182
- let context = React10.useContext(DataRouterContext);
5343
+ let context = React9.useContext(DataRouterContext);
5183
5344
  invariant2(
5184
5345
  context,
5185
5346
  "You must render this element inside a <DataRouterContext.Provider> element"
@@ -5187,17 +5348,17 @@ function useDataRouterContext() {
5187
5348
  return context;
5188
5349
  }
5189
5350
  function useDataRouterStateContext() {
5190
- let context = React10.useContext(DataRouterStateContext);
5351
+ let context = React9.useContext(DataRouterStateContext);
5191
5352
  invariant2(
5192
5353
  context,
5193
5354
  "You must render this element inside a <DataRouterStateContext.Provider> element"
5194
5355
  );
5195
5356
  return context;
5196
5357
  }
5197
- var FrameworkContext = React10.createContext(void 0);
5358
+ var FrameworkContext = React9.createContext(void 0);
5198
5359
  FrameworkContext.displayName = "FrameworkContext";
5199
5360
  function useFrameworkContext() {
5200
- let context = React10.useContext(FrameworkContext);
5361
+ let context = React9.useContext(FrameworkContext);
5201
5362
  invariant2(
5202
5363
  context,
5203
5364
  "You must render this element inside a <HydratedRouter> element"
@@ -5224,10 +5385,10 @@ function Scripts(props) {
5224
5385
  renderMeta.didRenderScripts = true;
5225
5386
  }
5226
5387
  let matches = getActiveMatches(routerMatches, null, isSpaMode);
5227
- React10.useEffect(() => {
5388
+ React9.useEffect(() => {
5228
5389
  isHydrated = true;
5229
5390
  }, []);
5230
- let initialScripts = React10.useMemo(() => {
5391
+ let initialScripts = React9.useMemo(() => {
5231
5392
  let streamScript = "window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());";
5232
5393
  let contextScript = staticContext ? `window.__reactRouterContext = ${serverHandoffString};${streamScript}` : " ";
5233
5394
  let routeModulesScript = !isStatic ? " " : `${manifest.hmr?.runtime ? `import ${JSON.stringify(manifest.hmr.runtime)};` : ""}${!enableFogOfWar ? `import ${JSON.stringify(manifest.url)}` : ""};
@@ -5247,7 +5408,7 @@ ${matches.map(
5247
5408
  window.__reactRouterRouteModules = {${matches.map((match, index) => `${JSON.stringify(match.route.id)}:route${index}`).join(",")}};
5248
5409
 
5249
5410
  import(${JSON.stringify(manifest.entry.module)});`;
5250
- return /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement(
5411
+ return /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(
5251
5412
  "script",
5252
5413
  {
5253
5414
  ...props,
@@ -5255,7 +5416,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
5255
5416
  dangerouslySetInnerHTML: createHtml(contextScript),
5256
5417
  type: void 0
5257
5418
  }
5258
- ), /* @__PURE__ */ React10.createElement(
5419
+ ), /* @__PURE__ */ React9.createElement(
5259
5420
  "script",
5260
5421
  {
5261
5422
  ...props,
@@ -5271,21 +5432,21 @@ import(${JSON.stringify(manifest.entry.module)});`;
5271
5432
  return route ? (route.imports || []).concat([route.module]) : [];
5272
5433
  }).flat(1);
5273
5434
  let preloads = isHydrated ? [] : manifest.entry.imports.concat(routePreloads);
5274
- return isHydrated ? null : /* @__PURE__ */ React10.createElement(React10.Fragment, null, !enableFogOfWar ? /* @__PURE__ */ React10.createElement(
5435
+ return isHydrated ? null : /* @__PURE__ */ React9.createElement(React9.Fragment, null, !enableFogOfWar ? /* @__PURE__ */ React9.createElement(
5275
5436
  "link",
5276
5437
  {
5277
5438
  rel: "modulepreload",
5278
5439
  href: manifest.url,
5279
5440
  crossOrigin: props.crossOrigin
5280
5441
  }
5281
- ) : null, /* @__PURE__ */ React10.createElement(
5442
+ ) : null, /* @__PURE__ */ React9.createElement(
5282
5443
  "link",
5283
5444
  {
5284
5445
  rel: "modulepreload",
5285
5446
  href: manifest.entry.module,
5286
5447
  crossOrigin: props.crossOrigin
5287
5448
  }
5288
- ), dedupe(preloads).map((path) => /* @__PURE__ */ React10.createElement(
5449
+ ), dedupe(preloads).map((path) => /* @__PURE__ */ React9.createElement(
5289
5450
  "link",
5290
5451
  {
5291
5452
  key: path,
@@ -5338,11 +5499,11 @@ function deserializeErrors(errors) {
5338
5499
 
5339
5500
  // lib/dom-export/dom-router-provider.tsx
5340
5501
  function RouterProvider2(props) {
5341
- return /* @__PURE__ */ React11.createElement(RouterProvider, { flushSync: ReactDOM.flushSync, ...props });
5502
+ return /* @__PURE__ */ React10.createElement(RouterProvider, { flushSync: ReactDOM.flushSync, ...props });
5342
5503
  }
5343
5504
 
5344
5505
  // lib/dom-export/hydrated-router.tsx
5345
- var React12 = __toESM(require("react"));
5506
+ var React11 = __toESM(require("react"));
5346
5507
  var ssrInfo = null;
5347
5508
  var router = null;
5348
5509
  function initSsrInfo() {
@@ -5357,7 +5518,9 @@ function initSsrInfo() {
5357
5518
  };
5358
5519
  }
5359
5520
  }
5360
- function createHydratedRouter() {
5521
+ function createHydratedRouter({
5522
+ context
5523
+ }) {
5361
5524
  initSsrInfo();
5362
5525
  if (!ssrInfo) {
5363
5526
  throw new Error(
@@ -5423,9 +5586,10 @@ function createHydratedRouter() {
5423
5586
  routes,
5424
5587
  history: createBrowserHistory(),
5425
5588
  basename: ssrInfo.context.basename,
5589
+ context,
5426
5590
  hydrationData,
5427
5591
  mapRouteProperties,
5428
- dataStrategy: getSingleFetchDataStrategy(
5592
+ dataStrategy: ssrInfo.context.isSpaMode ? void 0 : getSingleFetchDataStrategy(
5429
5593
  ssrInfo.manifest,
5430
5594
  ssrInfo.routeModules,
5431
5595
  () => router2
@@ -5447,11 +5611,11 @@ function createHydratedRouter() {
5447
5611
  window.__reactRouterDataRouter = router2;
5448
5612
  return router2;
5449
5613
  }
5450
- function HydratedRouter() {
5614
+ function HydratedRouter(props) {
5451
5615
  if (!router) {
5452
- router = createHydratedRouter();
5616
+ router = createHydratedRouter({ context: props.context });
5453
5617
  }
5454
- let [criticalCss, setCriticalCss] = React12.useState(
5618
+ let [criticalCss, setCriticalCss] = React11.useState(
5455
5619
  process.env.NODE_ENV === "development" ? ssrInfo?.context.criticalCss : void 0
5456
5620
  );
5457
5621
  if (process.env.NODE_ENV === "development") {
@@ -5459,14 +5623,14 @@ function HydratedRouter() {
5459
5623
  window.__reactRouterClearCriticalCss = () => setCriticalCss(void 0);
5460
5624
  }
5461
5625
  }
5462
- let [location, setLocation] = React12.useState(router.state.location);
5463
- React12.useLayoutEffect(() => {
5626
+ let [location, setLocation] = React11.useState(router.state.location);
5627
+ React11.useLayoutEffect(() => {
5464
5628
  if (ssrInfo && ssrInfo.router && !ssrInfo.routerInitialized) {
5465
5629
  ssrInfo.routerInitialized = true;
5466
5630
  ssrInfo.router.initialize();
5467
5631
  }
5468
5632
  }, []);
5469
- React12.useLayoutEffect(() => {
5633
+ React11.useLayoutEffect(() => {
5470
5634
  if (ssrInfo && ssrInfo.router) {
5471
5635
  return ssrInfo.router.subscribe((newState) => {
5472
5636
  if (newState.location !== location) {
@@ -5485,7 +5649,7 @@ function HydratedRouter() {
5485
5649
  return (
5486
5650
  // This fragment is important to ensure we match the <ServerRouter> JSX
5487
5651
  // structure so that useId values hydrate correctly
5488
- /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(
5652
+ /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(
5489
5653
  FrameworkContext.Provider,
5490
5654
  {
5491
5655
  value: {
@@ -5496,8 +5660,8 @@ function HydratedRouter() {
5496
5660
  isSpaMode: ssrInfo.context.isSpaMode
5497
5661
  }
5498
5662
  },
5499
- /* @__PURE__ */ React12.createElement(RemixErrorBoundary, { location }, /* @__PURE__ */ React12.createElement(RouterProvider2, { router }))
5500
- ), /* @__PURE__ */ React12.createElement(React12.Fragment, null))
5663
+ /* @__PURE__ */ React11.createElement(RemixErrorBoundary, { location }, /* @__PURE__ */ React11.createElement(RouterProvider2, { router }))
5664
+ ), /* @__PURE__ */ React11.createElement(React11.Fragment, null))
5501
5665
  );
5502
5666
  }
5503
5667
  // Annotate the CommonJS export names for ESM import in node: