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
  *
@@ -957,7 +957,10 @@ var redirect = (url, init = 302) => {
957
957
  }
958
958
  let headers = new Headers(responseInit.headers);
959
959
  headers.set("Location", url);
960
- return new Response(null, { ...responseInit, headers });
960
+ return new Response(null, {
961
+ ...responseInit,
962
+ headers
963
+ });
961
964
  };
962
965
  var redirectDocument = (url, init) => {
963
966
  let response = redirect(url, init);
@@ -1052,6 +1055,7 @@ function createRouter(init) {
1052
1055
  );
1053
1056
  let inFlightDataRoutes;
1054
1057
  let basename = init.basename || "/";
1058
+ let routerContext = typeof init.context !== "undefined" ? init.context : {};
1055
1059
  let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;
1056
1060
  let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;
1057
1061
  let future = {
@@ -1240,11 +1244,6 @@ function createRouter(init) {
1240
1244
  }
1241
1245
  }
1242
1246
  });
1243
- fetchersQueuedForDeletion.forEach((key) => {
1244
- if (!state.fetchers.has(key) && !fetchControllers.has(key)) {
1245
- unmountedFetchers.push(key);
1246
- }
1247
- });
1248
1247
  [...subscribers].forEach(
1249
1248
  (subscriber) => subscriber(state, {
1250
1249
  deletedFetchers: unmountedFetchers,
@@ -1627,6 +1626,14 @@ function createRouter(init) {
1627
1626
  null
1628
1627
  );
1629
1628
  result = results[actionMatch.route.id];
1629
+ if (!result) {
1630
+ for (let match of matches) {
1631
+ if (results[match.route.id]) {
1632
+ result = results[match.route.id];
1633
+ break;
1634
+ }
1635
+ }
1636
+ }
1630
1637
  if (request.signal.aborted) {
1631
1638
  return { shortCircuited: true };
1632
1639
  }
@@ -2288,13 +2295,13 @@ function createRouter(init) {
2288
2295
  results = await callDataStrategyImpl(
2289
2296
  dataStrategyImpl,
2290
2297
  type,
2291
- state2,
2292
2298
  request,
2293
2299
  matchesToLoad,
2294
2300
  matches,
2295
2301
  fetcherKey,
2296
2302
  manifest,
2297
- mapRouteProperties2
2303
+ mapRouteProperties2,
2304
+ routerContext
2298
2305
  );
2299
2306
  } catch (e) {
2300
2307
  matchesToLoad.forEach((m) => {
@@ -2720,16 +2727,18 @@ function createStaticHandler(routes, opts) {
2720
2727
  async function query(request, {
2721
2728
  requestContext,
2722
2729
  skipLoaderErrorBubbling,
2723
- dataStrategy
2730
+ dataStrategy,
2731
+ respond
2724
2732
  } = {}) {
2725
2733
  let url = new URL(request.url);
2726
2734
  let method = request.method;
2727
2735
  let location = createLocation("", createPath(url), null, "default");
2728
2736
  let matches = matchRoutes(dataRoutes, location, basename);
2737
+ let staticContext;
2729
2738
  if (!isValidMethod(method) && method !== "HEAD") {
2730
2739
  let error = getInternalRouterError(405, { method });
2731
2740
  let { matches: methodNotAllowedMatches, route } = getShortCircuitMatches(dataRoutes);
2732
- return {
2741
+ staticContext = {
2733
2742
  basename,
2734
2743
  location,
2735
2744
  matches: methodNotAllowedMatches,
@@ -2745,7 +2754,7 @@ function createStaticHandler(routes, opts) {
2745
2754
  } else if (!matches) {
2746
2755
  let error = getInternalRouterError(404, { pathname: location.pathname });
2747
2756
  let { matches: notFoundMatches, route } = getShortCircuitMatches(dataRoutes);
2748
- return {
2757
+ staticContext = {
2749
2758
  basename,
2750
2759
  location,
2751
2760
  matches: notFoundMatches,
@@ -2758,25 +2767,76 @@ function createStaticHandler(routes, opts) {
2758
2767
  loaderHeaders: {},
2759
2768
  actionHeaders: {}
2760
2769
  };
2770
+ } else if (respond) {
2771
+ try {
2772
+ let response = await runMiddlewarePipeline(
2773
+ {
2774
+ request,
2775
+ matches,
2776
+ params: matches[0].params,
2777
+ context: requestContext
2778
+ },
2779
+ matches.length - 1,
2780
+ true,
2781
+ async () => {
2782
+ let result = await callQueryHandlers(
2783
+ request,
2784
+ location,
2785
+ matches,
2786
+ requestContext,
2787
+ dataStrategy || defaultDataStrategyWithoutMiddleware,
2788
+ skipLoaderErrorBubbling === true,
2789
+ null
2790
+ );
2791
+ if (isResponse(result)) {
2792
+ return result;
2793
+ }
2794
+ let res = await respond({
2795
+ location,
2796
+ basename,
2797
+ ...result
2798
+ });
2799
+ return res;
2800
+ }
2801
+ );
2802
+ invariant(isResponse(response), "Expected a response in query()");
2803
+ return response;
2804
+ } catch (e) {
2805
+ if (isResponse(e)) {
2806
+ return e;
2807
+ }
2808
+ throw e;
2809
+ }
2810
+ } else {
2811
+ let result = await callQueryHandlers(
2812
+ request,
2813
+ location,
2814
+ matches,
2815
+ requestContext,
2816
+ dataStrategy || null,
2817
+ skipLoaderErrorBubbling === true,
2818
+ null
2819
+ );
2820
+ if (isResponse(result)) {
2821
+ return result;
2822
+ }
2823
+ staticContext = {
2824
+ location,
2825
+ basename,
2826
+ ...result
2827
+ };
2761
2828
  }
2762
- let result = await queryImpl(
2763
- request,
2764
- location,
2765
- matches,
2766
- requestContext,
2767
- dataStrategy || null,
2768
- skipLoaderErrorBubbling === true,
2769
- null
2770
- );
2771
- if (isResponse(result)) {
2772
- return result;
2829
+ if (respond) {
2830
+ let res = await respond(staticContext);
2831
+ return res;
2773
2832
  }
2774
- return { location, basename, ...result };
2833
+ return staticContext;
2775
2834
  }
2776
2835
  async function queryRoute(request, {
2777
2836
  routeId,
2778
2837
  requestContext,
2779
- dataStrategy
2838
+ dataStrategy,
2839
+ respond
2780
2840
  } = {}) {
2781
2841
  let url = new URL(request.url);
2782
2842
  let method = request.method;
@@ -2796,31 +2856,64 @@ function createStaticHandler(routes, opts) {
2796
2856
  } else if (!match) {
2797
2857
  throw getInternalRouterError(404, { pathname: location.pathname });
2798
2858
  }
2799
- let result = await queryImpl(
2800
- request,
2801
- location,
2802
- matches,
2803
- requestContext,
2804
- dataStrategy || null,
2805
- false,
2806
- match
2807
- );
2808
- if (isResponse(result)) {
2809
- return result;
2810
- }
2811
- let error = result.errors ? Object.values(result.errors)[0] : void 0;
2812
- if (error !== void 0) {
2813
- throw error;
2814
- }
2815
- if (result.actionData) {
2816
- return Object.values(result.actionData)[0];
2817
- }
2818
- if (result.loaderData) {
2819
- return Object.values(result.loaderData)[0];
2859
+ if (respond) {
2860
+ let response = await runMiddlewarePipeline(
2861
+ {
2862
+ request,
2863
+ matches,
2864
+ params: matches[0].params,
2865
+ context: requestContext
2866
+ },
2867
+ matches.length - 1,
2868
+ true,
2869
+ async () => {
2870
+ let result = await callQueryHandlers(
2871
+ request,
2872
+ location,
2873
+ matches,
2874
+ requestContext,
2875
+ dataStrategy || defaultDataStrategyWithoutMiddleware,
2876
+ false,
2877
+ match
2878
+ );
2879
+ if (isResponse(result)) {
2880
+ return result;
2881
+ }
2882
+ let error = result.errors ? Object.values(result.errors)[0] : void 0;
2883
+ if (error !== void 0) {
2884
+ throw error;
2885
+ }
2886
+ throw new Error("Expected a response from queryRoute");
2887
+ }
2888
+ );
2889
+ return response;
2890
+ } else {
2891
+ let result = await callQueryHandlers(
2892
+ request,
2893
+ location,
2894
+ matches,
2895
+ requestContext,
2896
+ dataStrategy || null,
2897
+ false,
2898
+ match
2899
+ );
2900
+ if (isResponse(result)) {
2901
+ return result;
2902
+ }
2903
+ let error = result.errors ? Object.values(result.errors)[0] : void 0;
2904
+ if (error !== void 0) {
2905
+ throw error;
2906
+ }
2907
+ if (result.actionData) {
2908
+ return Object.values(result.actionData)[0];
2909
+ }
2910
+ if (result.loaderData) {
2911
+ return Object.values(result.loaderData)[0];
2912
+ }
2913
+ return void 0;
2820
2914
  }
2821
- return void 0;
2822
2915
  }
2823
- async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) {
2916
+ async function callQueryHandlers(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) {
2824
2917
  invariant(
2825
2918
  request.signal,
2826
2919
  "query()/queryRoute() requests must contain an AbortController signal"
@@ -2925,7 +3018,7 @@ function createStaticHandler(routes, opts) {
2925
3018
  });
2926
3019
  if (isErrorResult(result)) {
2927
3020
  let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);
2928
- let context2 = await loadRouteData(
3021
+ let handlerContext2 = await loadRouteData(
2929
3022
  loaderRequest,
2930
3023
  matches,
2931
3024
  requestContext,
@@ -2935,7 +3028,7 @@ function createStaticHandler(routes, opts) {
2935
3028
  [boundaryMatch.route.id, result]
2936
3029
  );
2937
3030
  return {
2938
- ...context2,
3031
+ ...handlerContext2,
2939
3032
  statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,
2940
3033
  actionData: null,
2941
3034
  actionHeaders: {
@@ -2943,7 +3036,7 @@ function createStaticHandler(routes, opts) {
2943
3036
  }
2944
3037
  };
2945
3038
  }
2946
- let context = await loadRouteData(
3039
+ let handlerContext = await loadRouteData(
2947
3040
  loaderRequest,
2948
3041
  matches,
2949
3042
  requestContext,
@@ -2952,7 +3045,7 @@ function createStaticHandler(routes, opts) {
2952
3045
  null
2953
3046
  );
2954
3047
  return {
2955
- ...context,
3048
+ ...handlerContext,
2956
3049
  actionData: {
2957
3050
  [actionMatch.route.id]: result.data
2958
3051
  },
@@ -3001,7 +3094,7 @@ function createStaticHandler(routes, opts) {
3001
3094
  if (request.signal.aborted) {
3002
3095
  throwStaticHandlerAbortedError(request, isRouteRequest);
3003
3096
  }
3004
- let context = processRouteLoaderData(
3097
+ let handlerContext = processRouteLoaderData(
3005
3098
  matches,
3006
3099
  results,
3007
3100
  pendingActionResult,
@@ -3013,26 +3106,25 @@ function createStaticHandler(routes, opts) {
3013
3106
  );
3014
3107
  matches.forEach((match) => {
3015
3108
  if (!executedLoaders.has(match.route.id)) {
3016
- context.loaderData[match.route.id] = null;
3109
+ handlerContext.loaderData[match.route.id] = null;
3017
3110
  }
3018
3111
  });
3019
3112
  return {
3020
- ...context,
3113
+ ...handlerContext,
3021
3114
  matches
3022
3115
  };
3023
3116
  }
3024
- async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) {
3117
+ async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, routerContext, dataStrategy) {
3025
3118
  let results = await callDataStrategyImpl(
3026
3119
  dataStrategy || defaultDataStrategy,
3027
3120
  type,
3028
- null,
3029
3121
  request,
3030
3122
  matchesToLoad,
3031
3123
  matches,
3032
3124
  null,
3033
3125
  manifest,
3034
3126
  mapRouteProperties2,
3035
- requestContext
3127
+ routerContext
3036
3128
  );
3037
3129
  let dataResults = {};
3038
3130
  await Promise.all(
@@ -3065,15 +3157,14 @@ function createStaticHandler(routes, opts) {
3065
3157
  queryRoute
3066
3158
  };
3067
3159
  }
3068
- function getStaticContextFromError(routes, context, error) {
3069
- let newContext = {
3070
- ...context,
3160
+ function getStaticContextFromError(routes, handlerContext, error) {
3161
+ return {
3162
+ ...handlerContext,
3071
3163
  statusCode: isRouteErrorResponse(error) ? error.status : 500,
3072
3164
  errors: {
3073
- [context._deepestRenderedBoundaryId || routes[0].id]: error
3165
+ [handlerContext._deepestRenderedBoundaryId || routes[0].id]: error
3074
3166
  }
3075
3167
  };
3076
- return newContext;
3077
3168
  }
3078
3169
  function throwStaticHandlerAbortedError(request, isRouteRequest) {
3079
3170
  if (request.signal.reason !== void 0) {
@@ -3466,20 +3557,133 @@ async function loadLazyRouteModule(route, mapRouteProperties2, manifest) {
3466
3557
  lazy: void 0
3467
3558
  });
3468
3559
  }
3469
- async function defaultDataStrategy({
3470
- matches
3471
- }) {
3472
- let matchesToLoad = matches.filter((m) => m.shouldLoad);
3560
+ async function defaultDataStrategyWithoutMiddleware(args) {
3561
+ let matchesToLoad = args.matches.filter((m) => m.shouldLoad);
3562
+ let keyedResults = {};
3473
3563
  let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));
3474
- return results.reduce(
3475
- (acc, result, i) => Object.assign(acc, { [matchesToLoad[i].route.id]: result }),
3476
- {}
3564
+ results.forEach((result, i) => {
3565
+ keyedResults[matchesToLoad[i].route.id] = result;
3566
+ });
3567
+ return keyedResults;
3568
+ }
3569
+ async function defaultDataStrategy(args) {
3570
+ let matchesToLoad = args.matches.filter((m) => m.shouldLoad);
3571
+ let lastIndex = args.matches.length - 1;
3572
+ for (let i = lastIndex; i >= 0; i--) {
3573
+ if (args.matches[i].shouldLoad) {
3574
+ lastIndex = i;
3575
+ break;
3576
+ }
3577
+ }
3578
+ let results = await runMiddlewarePipeline(
3579
+ args,
3580
+ lastIndex,
3581
+ false,
3582
+ async (keyedResults) => {
3583
+ let results2 = await Promise.all(matchesToLoad.map((m) => m.resolve()));
3584
+ results2.forEach((result, i) => {
3585
+ keyedResults[matchesToLoad[i].route.id] = result;
3586
+ });
3587
+ }
3477
3588
  );
3589
+ return results;
3478
3590
  }
3479
- async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties2, requestContext) {
3591
+ async function runMiddlewarePipeline({
3592
+ request,
3593
+ params,
3594
+ context,
3595
+ matches
3596
+ }, lastIndex, propagateResult, handler) {
3597
+ let keyedResults = {};
3598
+ try {
3599
+ let result = await callRouteMiddleware(
3600
+ matches.slice(0, lastIndex + 1).flatMap(
3601
+ (m) => m.route.middleware ? m.route.middleware.map((fn) => [m.route.id, fn]) : []
3602
+ ),
3603
+ 0,
3604
+ { request, params, context },
3605
+ keyedResults,
3606
+ propagateResult,
3607
+ handler
3608
+ );
3609
+ return propagateResult ? result : keyedResults;
3610
+ } catch (e) {
3611
+ if (!(e instanceof MiddlewareError)) {
3612
+ throw e;
3613
+ }
3614
+ if (propagateResult && isResponse(e.error)) {
3615
+ throw e.error;
3616
+ }
3617
+ return {
3618
+ ...keyedResults,
3619
+ [e.routeId]: { type: "error", result: e.error }
3620
+ };
3621
+ }
3622
+ }
3623
+ var MiddlewareError = class {
3624
+ constructor(routeId, error) {
3625
+ this.routeId = routeId;
3626
+ this.error = error;
3627
+ }
3628
+ };
3629
+ async function callRouteMiddleware(middlewares, idx, args, keyedResults, propagateResult, handler) {
3630
+ let { request } = args;
3631
+ if (request.signal.aborted) {
3632
+ if (request.signal.reason) {
3633
+ throw request.signal.reason;
3634
+ }
3635
+ throw new Error(
3636
+ `Request aborted without an \`AbortSignal.reason\`: ${request.method} ${request.url}`
3637
+ );
3638
+ }
3639
+ let tuple = middlewares[idx];
3640
+ if (!tuple) {
3641
+ let result = await handler(keyedResults);
3642
+ return result;
3643
+ }
3644
+ let [routeId, middleware] = tuple;
3645
+ let nextCalled = false;
3646
+ let next = async () => {
3647
+ if (nextCalled) {
3648
+ throw new Error("You may only call `next()` once per middleware");
3649
+ }
3650
+ nextCalled = true;
3651
+ let result = await callRouteMiddleware(
3652
+ middlewares,
3653
+ idx + 1,
3654
+ args,
3655
+ keyedResults,
3656
+ propagateResult,
3657
+ handler
3658
+ );
3659
+ return propagateResult ? result : void 0;
3660
+ };
3661
+ try {
3662
+ let result = await middleware(args, next);
3663
+ if (!nextCalled) {
3664
+ result = await next();
3665
+ }
3666
+ return result;
3667
+ } catch (e) {
3668
+ if (e instanceof MiddlewareError) {
3669
+ throw e;
3670
+ }
3671
+ throw new MiddlewareError(routeId, e);
3672
+ }
3673
+ }
3674
+ async function callDataStrategyImpl(dataStrategyImpl, type, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties2, routerContext) {
3480
3675
  let loadRouteDefinitionsPromises = matches.map(
3481
3676
  (m) => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties2, manifest) : void 0
3482
3677
  );
3678
+ let lazyMiddlewarePromises = matches.map(
3679
+ (m, i) => m.route.lazy && !("middleware" in m.route) ? (
3680
+ // Swallow the error here, let it bubble up from resolve()
3681
+ loadRouteDefinitionsPromises[i].catch((e) => e)
3682
+ ) : null
3683
+ ).filter((p) => p != null);
3684
+ if (lazyMiddlewarePromises.length > 0) {
3685
+ await Promise.all(lazyMiddlewarePromises);
3686
+ }
3483
3687
  let dsMatches = matches.map((match, i) => {
3484
3688
  let loadRoutePromise = loadRouteDefinitionsPromises[i];
3485
3689
  let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);
@@ -3493,7 +3697,7 @@ async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matc
3493
3697
  match,
3494
3698
  loadRoutePromise,
3495
3699
  handlerOverride,
3496
- requestContext
3700
+ routerContext
3497
3701
  ) : Promise.resolve({ type: "data" /* data */, result: void 0 });
3498
3702
  };
3499
3703
  return {
@@ -3507,7 +3711,7 @@ async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matc
3507
3711
  request,
3508
3712
  params: matches[0].params,
3509
3713
  fetcherKey,
3510
- context: requestContext
3714
+ context: routerContext
3511
3715
  });
3512
3716
  try {
3513
3717
  await Promise.all(loadRouteDefinitionsPromises);
@@ -3515,7 +3719,7 @@ async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matc
3515
3719
  }
3516
3720
  return results;
3517
3721
  }
3518
- async function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) {
3722
+ async function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, routerContext) {
3519
3723
  let result;
3520
3724
  let onReject;
3521
3725
  let runHandler = (handler) => {
@@ -3535,7 +3739,7 @@ async function callLoaderOrAction(type, request, match, loadRoutePromise, handle
3535
3739
  {
3536
3740
  request,
3537
3741
  params: match.params,
3538
- context: staticContext
3742
+ context: routerContext
3539
3743
  },
3540
3744
  ...ctx !== void 0 ? [ctx] : []
3541
3745
  );
@@ -4169,7 +4373,7 @@ function createDeferred() {
4169
4373
  }
4170
4374
 
4171
4375
  // lib/components.tsx
4172
- var React4 = __toESM(require("react"));
4376
+ var React3 = __toESM(require("react"));
4173
4377
 
4174
4378
  // lib/context.ts
4175
4379
  var React = __toESM(require("react"));
@@ -4787,23 +4991,8 @@ function warnOnce(condition, message) {
4787
4991
  }
4788
4992
  }
4789
4993
 
4790
- // lib/dom/shared.tsx
4791
- var React3 = __toESM(require("react"));
4994
+ // lib/components.tsx
4792
4995
  var ENABLE_DEV_WARNINGS2 = true;
4793
- function createHref(to) {
4794
- return typeof to === "string" ? to : createPath(to);
4795
- }
4796
- function encodeLocation(to) {
4797
- let href = typeof to === "string" ? to : createPath(to);
4798
- href = href.replace(/ $/, "%20");
4799
- let encoded = ABSOLUTE_URL_REGEX2.test(href) ? new URL(href) : new URL(href, "http://localhost");
4800
- return {
4801
- pathname: encoded.pathname,
4802
- search: encoded.search,
4803
- hash: encoded.hash
4804
- };
4805
- }
4806
- var ABSOLUTE_URL_REGEX2 = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
4807
4996
  function mapRouteProperties(route) {
4808
4997
  let updates = {
4809
4998
  // Note: this check also occurs in createRoutesFromChildren so update
@@ -4854,11 +5043,10 @@ function mapRouteProperties(route) {
4854
5043
  }
4855
5044
  return updates;
4856
5045
  }
4857
-
4858
- // lib/components.tsx
4859
5046
  function createMemoryRouter(routes, opts) {
4860
5047
  return createRouter({
4861
5048
  basename: opts?.basename,
5049
+ context: opts?.context,
4862
5050
  future: opts?.future,
4863
5051
  history: createMemoryHistory({
4864
5052
  initialEntries: opts?.initialEntries,
@@ -4894,23 +5082,23 @@ function RouterProvider({
4894
5082
  router,
4895
5083
  flushSync: reactDomFlushSyncImpl
4896
5084
  }) {
4897
- let [state, setStateImpl] = React4.useState(router.state);
4898
- let [pendingState, setPendingState] = React4.useState();
4899
- let [vtContext, setVtContext] = React4.useState({
5085
+ let [state, setStateImpl] = React3.useState(router.state);
5086
+ let [pendingState, setPendingState] = React3.useState();
5087
+ let [vtContext, setVtContext] = React3.useState({
4900
5088
  isTransitioning: false
4901
5089
  });
4902
- let [renderDfd, setRenderDfd] = React4.useState();
4903
- let [transition, setTransition] = React4.useState();
4904
- let [interruption, setInterruption] = React4.useState();
4905
- let fetcherData = React4.useRef(/* @__PURE__ */ new Map());
4906
- let setState = React4.useCallback(
5090
+ let [renderDfd, setRenderDfd] = React3.useState();
5091
+ let [transition, setTransition] = React3.useState();
5092
+ let [interruption, setInterruption] = React3.useState();
5093
+ let fetcherData = React3.useRef(/* @__PURE__ */ new Map());
5094
+ let setState = React3.useCallback(
4907
5095
  (newState, { deletedFetchers, flushSync, viewTransitionOpts }) => {
5096
+ deletedFetchers.forEach((key) => fetcherData.current.delete(key));
4908
5097
  newState.fetchers.forEach((fetcher, key) => {
4909
5098
  if (fetcher.data !== void 0) {
4910
5099
  fetcherData.current.set(key, fetcher.data);
4911
5100
  }
4912
5101
  });
4913
- deletedFetchers.forEach((key) => fetcherData.current.delete(key));
4914
5102
  warnOnce(
4915
5103
  flushSync === false || reactDomFlushSyncImpl != null,
4916
5104
  '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.'
@@ -4924,7 +5112,7 @@ function RouterProvider({
4924
5112
  if (reactDomFlushSyncImpl && flushSync) {
4925
5113
  reactDomFlushSyncImpl(() => setStateImpl(newState));
4926
5114
  } else {
4927
- React4.startTransition(() => setStateImpl(newState));
5115
+ React3.startTransition(() => setStateImpl(newState));
4928
5116
  }
4929
5117
  return;
4930
5118
  }
@@ -4975,18 +5163,18 @@ function RouterProvider({
4975
5163
  },
4976
5164
  [router.window, reactDomFlushSyncImpl, transition, renderDfd]
4977
5165
  );
4978
- React4.useLayoutEffect(() => router.subscribe(setState), [router, setState]);
4979
- React4.useEffect(() => {
5166
+ React3.useLayoutEffect(() => router.subscribe(setState), [router, setState]);
5167
+ React3.useEffect(() => {
4980
5168
  if (vtContext.isTransitioning && !vtContext.flushSync) {
4981
5169
  setRenderDfd(new Deferred());
4982
5170
  }
4983
5171
  }, [vtContext]);
4984
- React4.useEffect(() => {
5172
+ React3.useEffect(() => {
4985
5173
  if (renderDfd && pendingState && router.window) {
4986
5174
  let newState = pendingState;
4987
5175
  let renderPromise = renderDfd.promise;
4988
5176
  let transition2 = router.window.document.startViewTransition(async () => {
4989
- React4.startTransition(() => setStateImpl(newState));
5177
+ React3.startTransition(() => setStateImpl(newState));
4990
5178
  await renderPromise;
4991
5179
  });
4992
5180
  transition2.finished.finally(() => {
@@ -4998,12 +5186,12 @@ function RouterProvider({
4998
5186
  setTransition(transition2);
4999
5187
  }
5000
5188
  }, [pendingState, renderDfd, router.window]);
5001
- React4.useEffect(() => {
5189
+ React3.useEffect(() => {
5002
5190
  if (renderDfd && pendingState && state.location.key === pendingState.location.key) {
5003
5191
  renderDfd.resolve();
5004
5192
  }
5005
5193
  }, [renderDfd, transition, state.location, pendingState]);
5006
- React4.useEffect(() => {
5194
+ React3.useEffect(() => {
5007
5195
  if (!vtContext.isTransitioning && interruption) {
5008
5196
  setPendingState(interruption.state);
5009
5197
  setVtContext({
@@ -5015,7 +5203,7 @@ function RouterProvider({
5015
5203
  setInterruption(void 0);
5016
5204
  }
5017
5205
  }, [vtContext.isTransitioning, interruption]);
5018
- let navigator2 = React4.useMemo(() => {
5206
+ let navigator2 = React3.useMemo(() => {
5019
5207
  return {
5020
5208
  createHref: router.createHref,
5021
5209
  encodeLocation: router.encodeLocation,
@@ -5032,7 +5220,7 @@ function RouterProvider({
5032
5220
  };
5033
5221
  }, [router]);
5034
5222
  let basename = router.basename || "/";
5035
- let dataRouterContext = React4.useMemo(
5223
+ let dataRouterContext = React3.useMemo(
5036
5224
  () => ({
5037
5225
  router,
5038
5226
  navigator: navigator2,
@@ -5041,7 +5229,7 @@ function RouterProvider({
5041
5229
  }),
5042
5230
  [router, navigator2, basename]
5043
5231
  );
5044
- 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(
5232
+ 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(
5045
5233
  Router,
5046
5234
  {
5047
5235
  basename,
@@ -5049,7 +5237,7 @@ function RouterProvider({
5049
5237
  navigationType: state.historyAction,
5050
5238
  navigator: navigator2
5051
5239
  },
5052
- /* @__PURE__ */ React4.createElement(
5240
+ /* @__PURE__ */ React3.createElement(
5053
5241
  MemoizedDataRoutes,
5054
5242
  {
5055
5243
  routes: router.routes,
@@ -5059,7 +5247,7 @@ function RouterProvider({
5059
5247
  )
5060
5248
  ))))), null);
5061
5249
  }
5062
- var MemoizedDataRoutes = React4.memo(DataRoutes);
5250
+ var MemoizedDataRoutes = React3.memo(DataRoutes);
5063
5251
  function DataRoutes({
5064
5252
  routes,
5065
5253
  future,
@@ -5073,7 +5261,7 @@ function MemoryRouter({
5073
5261
  initialEntries,
5074
5262
  initialIndex
5075
5263
  }) {
5076
- let historyRef = React4.useRef();
5264
+ let historyRef = React3.useRef();
5077
5265
  if (historyRef.current == null) {
5078
5266
  historyRef.current = createMemoryHistory({
5079
5267
  initialEntries,
@@ -5082,18 +5270,18 @@ function MemoryRouter({
5082
5270
  });
5083
5271
  }
5084
5272
  let history = historyRef.current;
5085
- let [state, setStateImpl] = React4.useState({
5273
+ let [state, setStateImpl] = React3.useState({
5086
5274
  action: history.action,
5087
5275
  location: history.location
5088
5276
  });
5089
- let setState = React4.useCallback(
5277
+ let setState = React3.useCallback(
5090
5278
  (newState) => {
5091
- React4.startTransition(() => setStateImpl(newState));
5279
+ React3.startTransition(() => setStateImpl(newState));
5092
5280
  },
5093
5281
  [setStateImpl]
5094
5282
  );
5095
- React4.useLayoutEffect(() => history.listen(setState), [history, setState]);
5096
- return /* @__PURE__ */ React4.createElement(
5283
+ React3.useLayoutEffect(() => history.listen(setState), [history, setState]);
5284
+ return /* @__PURE__ */ React3.createElement(
5097
5285
  Router,
5098
5286
  {
5099
5287
  basename,
@@ -5116,12 +5304,12 @@ function Navigate({
5116
5304
  // the router loaded. We can help them understand how to avoid that.
5117
5305
  `<Navigate> may be used only in the context of a <Router> component.`
5118
5306
  );
5119
- let { static: isStatic } = React4.useContext(NavigationContext);
5307
+ let { static: isStatic } = React3.useContext(NavigationContext);
5120
5308
  warning(
5121
5309
  !isStatic,
5122
5310
  `<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`
5123
5311
  );
5124
- let { matches } = React4.useContext(RouteContext);
5312
+ let { matches } = React3.useContext(RouteContext);
5125
5313
  let { pathname: locationPathname } = useLocation();
5126
5314
  let navigate = useNavigate();
5127
5315
  let path = resolveTo(
@@ -5131,7 +5319,7 @@ function Navigate({
5131
5319
  relative === "path"
5132
5320
  );
5133
5321
  let jsonPath = JSON.stringify(path);
5134
- React4.useEffect(() => {
5322
+ React3.useEffect(() => {
5135
5323
  navigate(JSON.parse(jsonPath), { replace: replace2, state, relative });
5136
5324
  }, [navigate, jsonPath, relative, replace2, state]);
5137
5325
  return null;
@@ -5158,7 +5346,7 @@ function Router({
5158
5346
  `You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`
5159
5347
  );
5160
5348
  let basename = basenameProp.replace(/^\/*/, "/");
5161
- let navigationContext = React4.useMemo(
5349
+ let navigationContext = React3.useMemo(
5162
5350
  () => ({
5163
5351
  basename,
5164
5352
  navigator: navigator2,
@@ -5177,7 +5365,7 @@ function Router({
5177
5365
  state = null,
5178
5366
  key = "default"
5179
5367
  } = locationProp;
5180
- let locationContext = React4.useMemo(() => {
5368
+ let locationContext = React3.useMemo(() => {
5181
5369
  let trailingPathname = stripBasename(pathname, basename);
5182
5370
  if (trailingPathname == null) {
5183
5371
  return null;
@@ -5200,7 +5388,7 @@ function Router({
5200
5388
  if (locationContext == null) {
5201
5389
  return null;
5202
5390
  }
5203
- return /* @__PURE__ */ React4.createElement(NavigationContext.Provider, { value: navigationContext }, /* @__PURE__ */ React4.createElement(LocationContext.Provider, { children, value: locationContext }));
5391
+ return /* @__PURE__ */ React3.createElement(NavigationContext.Provider, { value: navigationContext }, /* @__PURE__ */ React3.createElement(LocationContext.Provider, { children, value: locationContext }));
5204
5392
  }
5205
5393
  function Routes({
5206
5394
  children,
@@ -5213,9 +5401,9 @@ function Await({
5213
5401
  errorElement,
5214
5402
  resolve
5215
5403
  }) {
5216
- return /* @__PURE__ */ React4.createElement(AwaitErrorBoundary, { resolve, errorElement }, /* @__PURE__ */ React4.createElement(ResolveAwait, null, children));
5404
+ return /* @__PURE__ */ React3.createElement(AwaitErrorBoundary, { resolve, errorElement }, /* @__PURE__ */ React3.createElement(ResolveAwait, null, children));
5217
5405
  }
5218
- var AwaitErrorBoundary = class extends React4.Component {
5406
+ var AwaitErrorBoundary = class extends React3.Component {
5219
5407
  constructor(props) {
5220
5408
  super(props);
5221
5409
  this.state = { error: null };
@@ -5261,10 +5449,10 @@ var AwaitErrorBoundary = class extends React4.Component {
5261
5449
  throw promise._error;
5262
5450
  }
5263
5451
  if (status === 2 /* error */) {
5264
- return /* @__PURE__ */ React4.createElement(AwaitContext.Provider, { value: promise, children: errorElement });
5452
+ return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children: errorElement });
5265
5453
  }
5266
5454
  if (status === 1 /* success */) {
5267
- return /* @__PURE__ */ React4.createElement(AwaitContext.Provider, { value: promise, children });
5455
+ return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children });
5268
5456
  }
5269
5457
  throw promise;
5270
5458
  }
@@ -5274,16 +5462,16 @@ function ResolveAwait({
5274
5462
  }) {
5275
5463
  let data2 = useAsyncValue();
5276
5464
  let toRender = typeof children === "function" ? children(data2) : children;
5277
- return /* @__PURE__ */ React4.createElement(React4.Fragment, null, toRender);
5465
+ return /* @__PURE__ */ React3.createElement(React3.Fragment, null, toRender);
5278
5466
  }
5279
5467
  function createRoutesFromChildren(children, parentPath = []) {
5280
5468
  let routes = [];
5281
- React4.Children.forEach(children, (element, index) => {
5282
- if (!React4.isValidElement(element)) {
5469
+ React3.Children.forEach(children, (element, index) => {
5470
+ if (!React3.isValidElement(element)) {
5283
5471
  return;
5284
5472
  }
5285
5473
  let treePath = [...parentPath, index];
5286
- if (element.type === React4.Fragment) {
5474
+ if (element.type === React3.Fragment) {
5287
5475
  routes.push.apply(
5288
5476
  routes,
5289
5477
  createRoutesFromChildren(element.props.children, treePath)
@@ -5332,7 +5520,7 @@ function renderMatches(matches) {
5332
5520
  }
5333
5521
 
5334
5522
  // lib/dom/lib.tsx
5335
- var React11 = __toESM(require("react"));
5523
+ var React10 = __toESM(require("react"));
5336
5524
 
5337
5525
  // lib/dom/dom.ts
5338
5526
  var defaultMethod = "get";
@@ -5463,7 +5651,7 @@ function getFormSubmissionInfo(target, basename) {
5463
5651
  }
5464
5652
 
5465
5653
  // lib/dom/ssr/components.tsx
5466
- var React10 = __toESM(require("react"));
5654
+ var React9 = __toESM(require("react"));
5467
5655
 
5468
5656
  // lib/dom/ssr/invariant.ts
5469
5657
  function invariant2(value, message) {
@@ -5715,7 +5903,7 @@ function createHtml(html) {
5715
5903
  }
5716
5904
 
5717
5905
  // lib/dom/ssr/single-fetch.tsx
5718
- var React5 = __toESM(require("react"));
5906
+ var React4 = __toESM(require("react"));
5719
5907
  var import_turbo_stream = require("turbo-stream");
5720
5908
 
5721
5909
  // lib/dom/ssr/data.ts
@@ -5773,7 +5961,7 @@ function StreamTransfer({
5773
5961
  throw promise;
5774
5962
  }
5775
5963
  let { done, value } = promise.result;
5776
- let scriptTag = value ? /* @__PURE__ */ React5.createElement(
5964
+ let scriptTag = value ? /* @__PURE__ */ React4.createElement(
5777
5965
  "script",
5778
5966
  {
5779
5967
  nonce,
@@ -5785,7 +5973,7 @@ function StreamTransfer({
5785
5973
  }
5786
5974
  ) : null;
5787
5975
  if (done) {
5788
- return /* @__PURE__ */ React5.createElement(React5.Fragment, null, scriptTag, /* @__PURE__ */ React5.createElement(
5976
+ return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(
5789
5977
  "script",
5790
5978
  {
5791
5979
  nonce,
@@ -5795,7 +5983,7 @@ function StreamTransfer({
5795
5983
  }
5796
5984
  ));
5797
5985
  } else {
5798
- return /* @__PURE__ */ React5.createElement(React5.Fragment, null, scriptTag, /* @__PURE__ */ React5.createElement(React5.Suspense, null, /* @__PURE__ */ React5.createElement(
5986
+ return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(React4.Suspense, null, /* @__PURE__ */ React4.createElement(
5799
5987
  StreamTransfer,
5800
5988
  {
5801
5989
  context,
@@ -5808,20 +5996,54 @@ function StreamTransfer({
5808
5996
  }
5809
5997
  }
5810
5998
  function getSingleFetchDataStrategy(manifest, routeModules, getRouter) {
5811
- return async ({ request, matches, fetcherKey }) => {
5999
+ return async (args) => {
6000
+ let { request, matches, fetcherKey } = args;
5812
6001
  if (request.method !== "GET") {
5813
- return singleFetchActionStrategy(request, matches);
6002
+ return runMiddlewarePipeline(
6003
+ args,
6004
+ matches.findIndex((m) => m.shouldLoad),
6005
+ false,
6006
+ async (keyedResults) => {
6007
+ let results = await singleFetchActionStrategy(request, matches);
6008
+ Object.assign(keyedResults, results);
6009
+ }
6010
+ );
5814
6011
  }
5815
6012
  if (fetcherKey) {
5816
- return singleFetchLoaderFetcherStrategy(request, matches);
6013
+ return runMiddlewarePipeline(
6014
+ args,
6015
+ matches.findIndex((m) => m.shouldLoad),
6016
+ false,
6017
+ async (keyedResults) => {
6018
+ let results = await singleFetchLoaderFetcherStrategy(
6019
+ request,
6020
+ matches
6021
+ );
6022
+ Object.assign(keyedResults, results);
6023
+ }
6024
+ );
5817
6025
  }
5818
- return singleFetchLoaderNavigationStrategy(
6026
+ let lowestLoadingIndex = getLowestLoadingIndex(
5819
6027
  manifest,
5820
6028
  routeModules,
5821
6029
  getRouter(),
5822
- request,
5823
6030
  matches
5824
6031
  );
6032
+ return runMiddlewarePipeline(
6033
+ args,
6034
+ lowestLoadingIndex,
6035
+ false,
6036
+ async (keyedResults) => {
6037
+ let results = await singleFetchLoaderNavigationStrategy(
6038
+ manifest,
6039
+ routeModules,
6040
+ getRouter(),
6041
+ request,
6042
+ matches
6043
+ );
6044
+ Object.assign(keyedResults, results);
6045
+ }
6046
+ );
5825
6047
  };
5826
6048
  }
5827
6049
  async function singleFetchActionStrategy(request, matches) {
@@ -5851,6 +6073,20 @@ async function singleFetchActionStrategy(request, matches) {
5851
6073
  }
5852
6074
  };
5853
6075
  }
6076
+ function isOptedOut(manifestRoute, routeModule, match, router) {
6077
+ return match.route.id in router.state.loaderData && manifestRoute && manifestRoute.hasLoader && routeModule && routeModule.shouldRevalidate;
6078
+ }
6079
+ function getLowestLoadingIndex(manifest, routeModules, router, matches) {
6080
+ let tailIdx = [...matches].reverse().findIndex(
6081
+ (m) => m.shouldLoad || !isOptedOut(
6082
+ manifest.routes[m.route.id],
6083
+ routeModules[m.route.id],
6084
+ m,
6085
+ router
6086
+ )
6087
+ );
6088
+ return tailIdx < 0 ? 0 : matches.length - 1 - tailIdx;
6089
+ }
5854
6090
  async function singleFetchLoaderNavigationStrategy(manifest, routeModules, router, request, matches) {
5855
6091
  let routesParams = /* @__PURE__ */ new Set();
5856
6092
  let foundOptOutRoute = false;
@@ -5869,7 +6105,7 @@ async function singleFetchLoaderNavigationStrategy(manifest, routeModules, route
5869
6105
  if (!router.state.initialized) {
5870
6106
  return;
5871
6107
  }
5872
- if (m.route.id in router.state.loaderData && manifestRoute && manifestRoute.hasLoader && routeModules[m.route.id]?.shouldRevalidate) {
6108
+ if (isOptedOut(manifestRoute, routeModules[m.route.id], m, router)) {
5873
6109
  foundOptOutRoute = true;
5874
6110
  return;
5875
6111
  }
@@ -6045,7 +6281,7 @@ function unwrapSingleFetchResult(result, routeId) {
6045
6281
  if (result.replace) {
6046
6282
  headers["X-Remix-Replace"] = "yes";
6047
6283
  }
6048
- throw redirect(result.redirect, { status: result.status, headers });
6284
+ return redirect(result.redirect, { status: result.status, headers });
6049
6285
  } else if ("data" in result) {
6050
6286
  return result.data;
6051
6287
  } else {
@@ -6081,14 +6317,14 @@ function createDeferred2() {
6081
6317
  }
6082
6318
 
6083
6319
  // lib/dom/ssr/fog-of-war.ts
6084
- var React9 = __toESM(require("react"));
6320
+ var React8 = __toESM(require("react"));
6085
6321
 
6086
6322
  // lib/dom/ssr/routes.tsx
6087
- var React8 = __toESM(require("react"));
6323
+ var React7 = __toESM(require("react"));
6088
6324
 
6089
6325
  // lib/dom/ssr/errorBoundaries.tsx
6090
- var React6 = __toESM(require("react"));
6091
- var RemixErrorBoundary = class extends React6.Component {
6326
+ var React5 = __toESM(require("react"));
6327
+ var RemixErrorBoundary = class extends React5.Component {
6092
6328
  constructor(props) {
6093
6329
  super(props);
6094
6330
  this.state = { error: props.error || null, location: props.location };
@@ -6104,7 +6340,7 @@ var RemixErrorBoundary = class extends React6.Component {
6104
6340
  }
6105
6341
  render() {
6106
6342
  if (this.state.error) {
6107
- return /* @__PURE__ */ React6.createElement(
6343
+ return /* @__PURE__ */ React5.createElement(
6108
6344
  RemixRootDefaultErrorBoundary,
6109
6345
  {
6110
6346
  error: this.state.error,
@@ -6121,7 +6357,7 @@ function RemixRootDefaultErrorBoundary({
6121
6357
  isOutsideRemixApp
6122
6358
  }) {
6123
6359
  console.error(error);
6124
- let heyDeveloper = /* @__PURE__ */ React6.createElement(
6360
+ let heyDeveloper = /* @__PURE__ */ React5.createElement(
6125
6361
  "script",
6126
6362
  {
6127
6363
  dangerouslySetInnerHTML: {
@@ -6134,7 +6370,7 @@ function RemixRootDefaultErrorBoundary({
6134
6370
  }
6135
6371
  );
6136
6372
  if (isRouteErrorResponse(error)) {
6137
- return /* @__PURE__ */ React6.createElement(BoundaryShell, { title: "Unhandled Thrown Response!" }, /* @__PURE__ */ React6.createElement("h1", { style: { fontSize: "24px" } }, error.status, " ", error.statusText), heyDeveloper);
6373
+ return /* @__PURE__ */ React5.createElement(BoundaryShell, { title: "Unhandled Thrown Response!" }, /* @__PURE__ */ React5.createElement("h1", { style: { fontSize: "24px" } }, error.status, " ", error.statusText), heyDeveloper);
6138
6374
  }
6139
6375
  let errorInstance;
6140
6376
  if (error instanceof Error) {
@@ -6143,14 +6379,14 @@ function RemixRootDefaultErrorBoundary({
6143
6379
  let errorString = error == null ? "Unknown Error" : typeof error === "object" && "toString" in error ? error.toString() : JSON.stringify(error);
6144
6380
  errorInstance = new Error(errorString);
6145
6381
  }
6146
- return /* @__PURE__ */ React6.createElement(
6382
+ return /* @__PURE__ */ React5.createElement(
6147
6383
  BoundaryShell,
6148
6384
  {
6149
6385
  title: "Application Error!",
6150
6386
  isOutsideRemixApp
6151
6387
  },
6152
- /* @__PURE__ */ React6.createElement("h1", { style: { fontSize: "24px" } }, "Application Error"),
6153
- /* @__PURE__ */ React6.createElement(
6388
+ /* @__PURE__ */ React5.createElement("h1", { style: { fontSize: "24px" } }, "Application Error"),
6389
+ /* @__PURE__ */ React5.createElement(
6154
6390
  "pre",
6155
6391
  {
6156
6392
  style: {
@@ -6175,19 +6411,19 @@ function BoundaryShell({
6175
6411
  if (routeModules.root?.Layout && !isOutsideRemixApp) {
6176
6412
  return children;
6177
6413
  }
6178
- return /* @__PURE__ */ React6.createElement("html", { lang: "en" }, /* @__PURE__ */ React6.createElement("head", null, /* @__PURE__ */ React6.createElement("meta", { charSet: "utf-8" }), /* @__PURE__ */ React6.createElement(
6414
+ return /* @__PURE__ */ React5.createElement("html", { lang: "en" }, /* @__PURE__ */ React5.createElement("head", null, /* @__PURE__ */ React5.createElement("meta", { charSet: "utf-8" }), /* @__PURE__ */ React5.createElement(
6179
6415
  "meta",
6180
6416
  {
6181
6417
  name: "viewport",
6182
6418
  content: "width=device-width,initial-scale=1,viewport-fit=cover"
6183
6419
  }
6184
- ), /* @__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)));
6420
+ ), /* @__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)));
6185
6421
  }
6186
6422
 
6187
6423
  // lib/dom/ssr/fallback.tsx
6188
- var React7 = __toESM(require("react"));
6424
+ var React6 = __toESM(require("react"));
6189
6425
  function RemixRootDefaultHydrateFallback() {
6190
- return /* @__PURE__ */ React7.createElement(BoundaryShell, { title: "Loading...", renderScripts: true }, /* @__PURE__ */ React7.createElement(
6426
+ return /* @__PURE__ */ React6.createElement(BoundaryShell, { title: "Loading...", renderScripts: true }, /* @__PURE__ */ React6.createElement(
6191
6427
  "script",
6192
6428
  {
6193
6429
  dangerouslySetInnerHTML: {
@@ -6221,17 +6457,17 @@ function groupRoutesByParentId(manifest) {
6221
6457
  function getRouteComponents(route, routeModule, isSpaMode) {
6222
6458
  let Component4 = getRouteModuleComponent(routeModule);
6223
6459
  let HydrateFallback = routeModule.HydrateFallback && (!isSpaMode || route.id === "root") ? routeModule.HydrateFallback : route.id === "root" ? RemixRootDefaultHydrateFallback : void 0;
6224
- let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === "root" ? () => /* @__PURE__ */ React8.createElement(RemixRootDefaultErrorBoundary, { error: useRouteError() }) : void 0;
6460
+ let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === "root" ? () => /* @__PURE__ */ React7.createElement(RemixRootDefaultErrorBoundary, { error: useRouteError() }) : void 0;
6225
6461
  if (route.id === "root" && routeModule.Layout) {
6226
6462
  return {
6227
6463
  ...Component4 ? {
6228
- element: /* @__PURE__ */ React8.createElement(routeModule.Layout, null, /* @__PURE__ */ React8.createElement(Component4, null))
6464
+ element: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(Component4, null))
6229
6465
  } : { Component: Component4 },
6230
6466
  ...ErrorBoundary ? {
6231
- errorElement: /* @__PURE__ */ React8.createElement(routeModule.Layout, null, /* @__PURE__ */ React8.createElement(ErrorBoundary, null))
6467
+ errorElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(ErrorBoundary, null))
6232
6468
  } : { ErrorBoundary },
6233
6469
  ...HydrateFallback ? {
6234
- hydrateFallbackElement: /* @__PURE__ */ React8.createElement(routeModule.Layout, null, /* @__PURE__ */ React8.createElement(HydrateFallback, null))
6470
+ hydrateFallbackElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(HydrateFallback, null))
6235
6471
  } : { HydrateFallback }
6236
6472
  };
6237
6473
  }
@@ -6261,8 +6497,8 @@ function createServerRoutes(manifest, routeModules, future, isSpaMode, parentId
6261
6497
  // render, so just give it a no-op function so we can render down to the
6262
6498
  // proper fallback
6263
6499
  loader: route.hasLoader || route.hasClientLoader ? () => null : void 0
6264
- // We don't need action/shouldRevalidate on these routes since they're
6265
- // for a static render
6500
+ // We don't need middleware/action/shouldRevalidate on these routes since
6501
+ // they're for a static render
6266
6502
  };
6267
6503
  let children = createServerRoutes(
6268
6504
  manifest,
@@ -6346,6 +6582,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
6346
6582
  Object.assign(dataRoute, {
6347
6583
  ...dataRoute,
6348
6584
  ...getRouteComponents(route, routeModule, isSpaMode),
6585
+ middleware: routeModule.clientMiddleware,
6349
6586
  handle: routeModule.handle,
6350
6587
  shouldRevalidate: getShouldRevalidateFunction(
6351
6588
  routeModule,
@@ -6358,7 +6595,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
6358
6595
  let hasInitialError = initialState && initialState.errors && route.id in initialState.errors;
6359
6596
  let initialError = hasInitialError ? initialState?.errors?.[route.id] : void 0;
6360
6597
  let isHydrationRequest = needsRevalidation == null && (routeModule.clientLoader?.hydrate === true || !route.hasLoader);
6361
- dataRoute.loader = async ({ request, params }, singleFetch) => {
6598
+ dataRoute.loader = async ({ request, params, context }, singleFetch) => {
6362
6599
  try {
6363
6600
  let result = await prefetchStylesAndCallHandler(async () => {
6364
6601
  invariant2(
@@ -6372,6 +6609,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
6372
6609
  return routeModule.clientLoader({
6373
6610
  request,
6374
6611
  params,
6612
+ context,
6375
6613
  async serverLoader() {
6376
6614
  preventInvalidServerHandlerCall("loader", route, isSpaMode);
6377
6615
  if (isHydrationRequest) {
@@ -6396,7 +6634,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
6396
6634
  routeModule,
6397
6635
  isSpaMode
6398
6636
  );
6399
- dataRoute.action = ({ request, params }, singleFetch) => {
6637
+ dataRoute.action = ({ request, params, context }, singleFetch) => {
6400
6638
  return prefetchStylesAndCallHandler(async () => {
6401
6639
  invariant2(
6402
6640
  routeModule,
@@ -6411,6 +6649,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
6411
6649
  return routeModule.clientAction({
6412
6650
  request,
6413
6651
  params,
6652
+ context,
6414
6653
  async serverAction() {
6415
6654
  preventInvalidServerHandlerCall("action", route, isSpaMode);
6416
6655
  return fetchServerAction(singleFetch);
@@ -6420,13 +6659,13 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
6420
6659
  };
6421
6660
  } else {
6422
6661
  if (!route.hasClientLoader) {
6423
- dataRoute.loader = ({ request }, singleFetch) => prefetchStylesAndCallHandler(() => {
6662
+ dataRoute.loader = (_, singleFetch) => prefetchStylesAndCallHandler(() => {
6424
6663
  if (isSpaMode) return Promise.resolve(null);
6425
6664
  return fetchServerLoader(singleFetch);
6426
6665
  });
6427
6666
  }
6428
6667
  if (!route.hasClientAction) {
6429
- dataRoute.action = ({ request }, singleFetch) => prefetchStylesAndCallHandler(() => {
6668
+ dataRoute.action = (_, singleFetch) => prefetchStylesAndCallHandler(() => {
6430
6669
  if (isSpaMode) {
6431
6670
  throw noActionDefinedError("clientAction", route.id);
6432
6671
  }
@@ -6462,6 +6701,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
6462
6701
  return {
6463
6702
  ...lazyRoute.loader ? { loader: lazyRoute.loader } : {},
6464
6703
  ...lazyRoute.action ? { action: lazyRoute.action } : {},
6704
+ middleware: mod.clientMiddleware,
6465
6705
  hasErrorBoundary: lazyRoute.hasErrorBoundary,
6466
6706
  shouldRevalidate: getShouldRevalidateFunction(
6467
6707
  lazyRoute,
@@ -6519,6 +6759,7 @@ async function loadRouteModuleWithBlockingLinks(route, routeModules) {
6519
6759
  return {
6520
6760
  Component: getRouteModuleComponent(routeModule),
6521
6761
  ErrorBoundary: routeModule.ErrorBoundary,
6762
+ clientMiddleware: routeModule.clientMiddleware,
6522
6763
  clientAction: routeModule.clientAction,
6523
6764
  clientLoader: routeModule.clientLoader,
6524
6765
  handle: routeModule.handle,
@@ -6589,7 +6830,7 @@ function getPatchRoutesOnNavigationFunction(manifest, routeModules, isSpaMode, b
6589
6830
  };
6590
6831
  }
6591
6832
  function useFogOFWarDiscovery(router, manifest, routeModules, isSpaMode) {
6592
- React9.useEffect(() => {
6833
+ React8.useEffect(() => {
6593
6834
  if (!isFogOfWarEnabled(isSpaMode) || navigator.connection?.saveData === true) {
6594
6835
  return;
6595
6836
  }
@@ -6718,7 +6959,7 @@ function debounce(callback, wait) {
6718
6959
 
6719
6960
  // lib/dom/ssr/components.tsx
6720
6961
  function useDataRouterContext2() {
6721
- let context = React10.useContext(DataRouterContext);
6962
+ let context = React9.useContext(DataRouterContext);
6722
6963
  invariant2(
6723
6964
  context,
6724
6965
  "You must render this element inside a <DataRouterContext.Provider> element"
@@ -6726,17 +6967,17 @@ function useDataRouterContext2() {
6726
6967
  return context;
6727
6968
  }
6728
6969
  function useDataRouterStateContext() {
6729
- let context = React10.useContext(DataRouterStateContext);
6970
+ let context = React9.useContext(DataRouterStateContext);
6730
6971
  invariant2(
6731
6972
  context,
6732
6973
  "You must render this element inside a <DataRouterStateContext.Provider> element"
6733
6974
  );
6734
6975
  return context;
6735
6976
  }
6736
- var FrameworkContext = React10.createContext(void 0);
6977
+ var FrameworkContext = React9.createContext(void 0);
6737
6978
  FrameworkContext.displayName = "FrameworkContext";
6738
6979
  function useFrameworkContext() {
6739
- let context = React10.useContext(FrameworkContext);
6980
+ let context = React9.useContext(FrameworkContext);
6740
6981
  invariant2(
6741
6982
  context,
6742
6983
  "You must render this element inside a <HydratedRouter> element"
@@ -6744,12 +6985,12 @@ function useFrameworkContext() {
6744
6985
  return context;
6745
6986
  }
6746
6987
  function usePrefetchBehavior(prefetch, theirElementProps) {
6747
- let frameworkContext = React10.useContext(FrameworkContext);
6748
- let [maybePrefetch, setMaybePrefetch] = React10.useState(false);
6749
- let [shouldPrefetch, setShouldPrefetch] = React10.useState(false);
6988
+ let frameworkContext = React9.useContext(FrameworkContext);
6989
+ let [maybePrefetch, setMaybePrefetch] = React9.useState(false);
6990
+ let [shouldPrefetch, setShouldPrefetch] = React9.useState(false);
6750
6991
  let { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;
6751
- let ref = React10.useRef(null);
6752
- React10.useEffect(() => {
6992
+ let ref = React9.useRef(null);
6993
+ React9.useEffect(() => {
6753
6994
  if (prefetch === "render") {
6754
6995
  setShouldPrefetch(true);
6755
6996
  }
@@ -6766,7 +7007,7 @@ function usePrefetchBehavior(prefetch, theirElementProps) {
6766
7007
  };
6767
7008
  }
6768
7009
  }, [prefetch]);
6769
- React10.useEffect(() => {
7010
+ React9.useEffect(() => {
6770
7011
  if (maybePrefetch) {
6771
7012
  let id = setTimeout(() => {
6772
7013
  setShouldPrefetch(true);
@@ -6823,12 +7064,12 @@ function Links() {
6823
7064
  let { isSpaMode, manifest, routeModules, criticalCss } = useFrameworkContext();
6824
7065
  let { errors, matches: routerMatches } = useDataRouterStateContext();
6825
7066
  let matches = getActiveMatches(routerMatches, errors, isSpaMode);
6826
- let keyedLinks = React10.useMemo(
7067
+ let keyedLinks = React9.useMemo(
6827
7068
  () => getKeyedLinksForMatches(matches, routeModules, manifest),
6828
7069
  [matches, routeModules, manifest]
6829
7070
  );
6830
- return /* @__PURE__ */ React10.createElement(React10.Fragment, null, criticalCss ? /* @__PURE__ */ React10.createElement("style", { dangerouslySetInnerHTML: { __html: criticalCss } }) : null, keyedLinks.map(
6831
- ({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */ React10.createElement(PrefetchPageLinks, { key, ...link }) : /* @__PURE__ */ React10.createElement("link", { key, ...link })
7071
+ return /* @__PURE__ */ React9.createElement(React9.Fragment, null, criticalCss ? /* @__PURE__ */ React9.createElement("style", { dangerouslySetInnerHTML: { __html: criticalCss } }) : null, keyedLinks.map(
7072
+ ({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */ React9.createElement(PrefetchPageLinks, { key, ...link }) : /* @__PURE__ */ React9.createElement("link", { key, ...link })
6832
7073
  ));
6833
7074
  }
6834
7075
  function PrefetchPageLinks({
@@ -6836,19 +7077,19 @@ function PrefetchPageLinks({
6836
7077
  ...dataLinkProps
6837
7078
  }) {
6838
7079
  let { router } = useDataRouterContext2();
6839
- let matches = React10.useMemo(
7080
+ let matches = React9.useMemo(
6840
7081
  () => matchRoutes(router.routes, page, router.basename),
6841
7082
  [router.routes, page, router.basename]
6842
7083
  );
6843
7084
  if (!matches) {
6844
7085
  return null;
6845
7086
  }
6846
- return /* @__PURE__ */ React10.createElement(PrefetchPageLinksImpl, { page, matches, ...dataLinkProps });
7087
+ return /* @__PURE__ */ React9.createElement(PrefetchPageLinksImpl, { page, matches, ...dataLinkProps });
6847
7088
  }
6848
7089
  function useKeyedPrefetchLinks(matches) {
6849
7090
  let { manifest, routeModules } = useFrameworkContext();
6850
- let [keyedPrefetchLinks, setKeyedPrefetchLinks] = React10.useState([]);
6851
- React10.useEffect(() => {
7091
+ let [keyedPrefetchLinks, setKeyedPrefetchLinks] = React9.useState([]);
7092
+ React9.useEffect(() => {
6852
7093
  let interrupted = false;
6853
7094
  void getKeyedPrefetchLinks(matches, manifest, routeModules).then(
6854
7095
  (links) => {
@@ -6871,7 +7112,7 @@ function PrefetchPageLinksImpl({
6871
7112
  let location = useLocation();
6872
7113
  let { manifest, routeModules } = useFrameworkContext();
6873
7114
  let { loaderData, matches } = useDataRouterStateContext();
6874
- let newMatchesForData = React10.useMemo(
7115
+ let newMatchesForData = React9.useMemo(
6875
7116
  () => getNewMatchesForLinks(
6876
7117
  page,
6877
7118
  nextMatches,
@@ -6882,7 +7123,7 @@ function PrefetchPageLinksImpl({
6882
7123
  ),
6883
7124
  [page, nextMatches, matches, manifest, location]
6884
7125
  );
6885
- let newMatchesForAssets = React10.useMemo(
7126
+ let newMatchesForAssets = React9.useMemo(
6886
7127
  () => getNewMatchesForLinks(
6887
7128
  page,
6888
7129
  nextMatches,
@@ -6893,7 +7134,7 @@ function PrefetchPageLinksImpl({
6893
7134
  ),
6894
7135
  [page, nextMatches, matches, manifest, location]
6895
7136
  );
6896
- let dataHrefs = React10.useMemo(() => {
7137
+ let dataHrefs = React9.useMemo(() => {
6897
7138
  if (page === location.pathname + location.search + location.hash) {
6898
7139
  return [];
6899
7140
  }
@@ -6932,15 +7173,15 @@ function PrefetchPageLinksImpl({
6932
7173
  page,
6933
7174
  routeModules
6934
7175
  ]);
6935
- let moduleHrefs = React10.useMemo(
7176
+ let moduleHrefs = React9.useMemo(
6936
7177
  () => getModuleLinkHrefs(newMatchesForAssets, manifest),
6937
7178
  [newMatchesForAssets, manifest]
6938
7179
  );
6939
7180
  let keyedPrefetchLinks = useKeyedPrefetchLinks(newMatchesForAssets);
6940
- return /* @__PURE__ */ React10.createElement(React10.Fragment, null, dataHrefs.map((href) => /* @__PURE__ */ React10.createElement("link", { key: href, rel: "prefetch", as: "fetch", href, ...linkProps })), moduleHrefs.map((href) => /* @__PURE__ */ React10.createElement("link", { key: href, rel: "modulepreload", href, ...linkProps })), keyedPrefetchLinks.map(({ key, link }) => (
7181
+ return /* @__PURE__ */ React9.createElement(React9.Fragment, null, dataHrefs.map((href) => /* @__PURE__ */ React9.createElement("link", { key: href, rel: "prefetch", as: "fetch", href, ...linkProps })), moduleHrefs.map((href) => /* @__PURE__ */ React9.createElement("link", { key: href, rel: "modulepreload", href, ...linkProps })), keyedPrefetchLinks.map(({ key, link }) => (
6941
7182
  // these don't spread `linkProps` because they are full link descriptors
6942
7183
  // already with their own props
6943
- /* @__PURE__ */ React10.createElement("link", { key, ...link })
7184
+ /* @__PURE__ */ React9.createElement("link", { key, ...link })
6944
7185
  )));
6945
7186
  }
6946
7187
  function Meta() {
@@ -6998,7 +7239,7 @@ function Meta() {
6998
7239
  meta = [...routeMeta];
6999
7240
  leafMeta = meta;
7000
7241
  }
7001
- return /* @__PURE__ */ React10.createElement(React10.Fragment, null, meta.flat().map((metaProps) => {
7242
+ return /* @__PURE__ */ React9.createElement(React9.Fragment, null, meta.flat().map((metaProps) => {
7002
7243
  if (!metaProps) {
7003
7244
  return null;
7004
7245
  }
@@ -7011,22 +7252,22 @@ function Meta() {
7011
7252
  return null;
7012
7253
  }
7013
7254
  let Comp = tagName;
7014
- return /* @__PURE__ */ React10.createElement(Comp, { key: JSON.stringify(rest), ...rest });
7255
+ return /* @__PURE__ */ React9.createElement(Comp, { key: JSON.stringify(rest), ...rest });
7015
7256
  }
7016
7257
  if ("title" in metaProps) {
7017
- return /* @__PURE__ */ React10.createElement("title", { key: "title" }, String(metaProps.title));
7258
+ return /* @__PURE__ */ React9.createElement("title", { key: "title" }, String(metaProps.title));
7018
7259
  }
7019
7260
  if ("charset" in metaProps) {
7020
7261
  metaProps.charSet ?? (metaProps.charSet = metaProps.charset);
7021
7262
  delete metaProps.charset;
7022
7263
  }
7023
7264
  if ("charSet" in metaProps && metaProps.charSet != null) {
7024
- return typeof metaProps.charSet === "string" ? /* @__PURE__ */ React10.createElement("meta", { key: "charSet", charSet: metaProps.charSet }) : null;
7265
+ return typeof metaProps.charSet === "string" ? /* @__PURE__ */ React9.createElement("meta", { key: "charSet", charSet: metaProps.charSet }) : null;
7025
7266
  }
7026
7267
  if ("script:ld+json" in metaProps) {
7027
7268
  try {
7028
7269
  let json = JSON.stringify(metaProps["script:ld+json"]);
7029
- return /* @__PURE__ */ React10.createElement(
7270
+ return /* @__PURE__ */ React9.createElement(
7030
7271
  "script",
7031
7272
  {
7032
7273
  key: `script:ld+json:${json}`,
@@ -7038,7 +7279,7 @@ function Meta() {
7038
7279
  return null;
7039
7280
  }
7040
7281
  }
7041
- return /* @__PURE__ */ React10.createElement("meta", { key: JSON.stringify(metaProps), ...metaProps });
7282
+ return /* @__PURE__ */ React9.createElement("meta", { key: JSON.stringify(metaProps), ...metaProps });
7042
7283
  }));
7043
7284
  }
7044
7285
  function isValidMetaTag(tagName) {
@@ -7054,10 +7295,10 @@ function Scripts(props) {
7054
7295
  renderMeta.didRenderScripts = true;
7055
7296
  }
7056
7297
  let matches = getActiveMatches(routerMatches, null, isSpaMode);
7057
- React10.useEffect(() => {
7298
+ React9.useEffect(() => {
7058
7299
  isHydrated = true;
7059
7300
  }, []);
7060
- let initialScripts = React10.useMemo(() => {
7301
+ let initialScripts = React9.useMemo(() => {
7061
7302
  let streamScript = "window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());";
7062
7303
  let contextScript = staticContext ? `window.__reactRouterContext = ${serverHandoffString};${streamScript}` : " ";
7063
7304
  let routeModulesScript = !isStatic ? " " : `${manifest.hmr?.runtime ? `import ${JSON.stringify(manifest.hmr.runtime)};` : ""}${!enableFogOfWar ? `import ${JSON.stringify(manifest.url)}` : ""};
@@ -7077,7 +7318,7 @@ ${matches.map(
7077
7318
  window.__reactRouterRouteModules = {${matches.map((match, index) => `${JSON.stringify(match.route.id)}:route${index}`).join(",")}};
7078
7319
 
7079
7320
  import(${JSON.stringify(manifest.entry.module)});`;
7080
- return /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement(
7321
+ return /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(
7081
7322
  "script",
7082
7323
  {
7083
7324
  ...props,
@@ -7085,7 +7326,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
7085
7326
  dangerouslySetInnerHTML: createHtml(contextScript),
7086
7327
  type: void 0
7087
7328
  }
7088
- ), /* @__PURE__ */ React10.createElement(
7329
+ ), /* @__PURE__ */ React9.createElement(
7089
7330
  "script",
7090
7331
  {
7091
7332
  ...props,
@@ -7101,21 +7342,21 @@ import(${JSON.stringify(manifest.entry.module)});`;
7101
7342
  return route ? (route.imports || []).concat([route.module]) : [];
7102
7343
  }).flat(1);
7103
7344
  let preloads = isHydrated ? [] : manifest.entry.imports.concat(routePreloads);
7104
- return isHydrated ? null : /* @__PURE__ */ React10.createElement(React10.Fragment, null, !enableFogOfWar ? /* @__PURE__ */ React10.createElement(
7345
+ return isHydrated ? null : /* @__PURE__ */ React9.createElement(React9.Fragment, null, !enableFogOfWar ? /* @__PURE__ */ React9.createElement(
7105
7346
  "link",
7106
7347
  {
7107
7348
  rel: "modulepreload",
7108
7349
  href: manifest.url,
7109
7350
  crossOrigin: props.crossOrigin
7110
7351
  }
7111
- ) : null, /* @__PURE__ */ React10.createElement(
7352
+ ) : null, /* @__PURE__ */ React9.createElement(
7112
7353
  "link",
7113
7354
  {
7114
7355
  rel: "modulepreload",
7115
7356
  href: manifest.entry.module,
7116
7357
  crossOrigin: props.crossOrigin
7117
7358
  }
7118
- ), dedupe(preloads).map((path) => /* @__PURE__ */ React10.createElement(
7359
+ ), dedupe(preloads).map((path) => /* @__PURE__ */ React9.createElement(
7119
7360
  "link",
7120
7361
  {
7121
7362
  key: path,
@@ -7144,13 +7385,14 @@ function mergeRefs(...refs) {
7144
7385
  var isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
7145
7386
  try {
7146
7387
  if (isBrowser) {
7147
- window.__reactRouterVersion = "0.0.0-experimental-1ebb6d403";
7388
+ window.__reactRouterVersion = "0.0.0-experimental-e41ede670";
7148
7389
  }
7149
7390
  } catch (e) {
7150
7391
  }
7151
7392
  function createBrowserRouter(routes, opts) {
7152
7393
  return createRouter({
7153
7394
  basename: opts?.basename,
7395
+ context: opts?.context,
7154
7396
  future: opts?.future,
7155
7397
  history: createBrowserHistory({ window: opts?.window }),
7156
7398
  hydrationData: opts?.hydrationData || parseHydrationData(),
@@ -7164,6 +7406,7 @@ function createBrowserRouter(routes, opts) {
7164
7406
  function createHashRouter(routes, opts) {
7165
7407
  return createRouter({
7166
7408
  basename: opts?.basename,
7409
+ context: opts?.context,
7167
7410
  future: opts?.future,
7168
7411
  history: createHashHistory({ window: opts?.window }),
7169
7412
  hydrationData: opts?.hydrationData || parseHydrationData(),
@@ -7224,23 +7467,23 @@ function BrowserRouter({
7224
7467
  children,
7225
7468
  window: window2
7226
7469
  }) {
7227
- let historyRef = React11.useRef();
7470
+ let historyRef = React10.useRef();
7228
7471
  if (historyRef.current == null) {
7229
7472
  historyRef.current = createBrowserHistory({ window: window2, v5Compat: true });
7230
7473
  }
7231
7474
  let history = historyRef.current;
7232
- let [state, setStateImpl] = React11.useState({
7475
+ let [state, setStateImpl] = React10.useState({
7233
7476
  action: history.action,
7234
7477
  location: history.location
7235
7478
  });
7236
- let setState = React11.useCallback(
7479
+ let setState = React10.useCallback(
7237
7480
  (newState) => {
7238
- React11.startTransition(() => setStateImpl(newState));
7481
+ React10.startTransition(() => setStateImpl(newState));
7239
7482
  },
7240
7483
  [setStateImpl]
7241
7484
  );
7242
- React11.useLayoutEffect(() => history.listen(setState), [history, setState]);
7243
- return /* @__PURE__ */ React11.createElement(
7485
+ React10.useLayoutEffect(() => history.listen(setState), [history, setState]);
7486
+ return /* @__PURE__ */ React10.createElement(
7244
7487
  Router,
7245
7488
  {
7246
7489
  basename,
@@ -7252,23 +7495,23 @@ function BrowserRouter({
7252
7495
  );
7253
7496
  }
7254
7497
  function HashRouter({ basename, children, window: window2 }) {
7255
- let historyRef = React11.useRef();
7498
+ let historyRef = React10.useRef();
7256
7499
  if (historyRef.current == null) {
7257
7500
  historyRef.current = createHashHistory({ window: window2, v5Compat: true });
7258
7501
  }
7259
7502
  let history = historyRef.current;
7260
- let [state, setStateImpl] = React11.useState({
7503
+ let [state, setStateImpl] = React10.useState({
7261
7504
  action: history.action,
7262
7505
  location: history.location
7263
7506
  });
7264
- let setState = React11.useCallback(
7507
+ let setState = React10.useCallback(
7265
7508
  (newState) => {
7266
- React11.startTransition(() => setStateImpl(newState));
7509
+ React10.startTransition(() => setStateImpl(newState));
7267
7510
  },
7268
7511
  [setStateImpl]
7269
7512
  );
7270
- React11.useLayoutEffect(() => history.listen(setState), [history, setState]);
7271
- return /* @__PURE__ */ React11.createElement(
7513
+ React10.useLayoutEffect(() => history.listen(setState), [history, setState]);
7514
+ return /* @__PURE__ */ React10.createElement(
7272
7515
  Router,
7273
7516
  {
7274
7517
  basename,
@@ -7284,18 +7527,18 @@ function HistoryRouter({
7284
7527
  children,
7285
7528
  history
7286
7529
  }) {
7287
- let [state, setStateImpl] = React11.useState({
7530
+ let [state, setStateImpl] = React10.useState({
7288
7531
  action: history.action,
7289
7532
  location: history.location
7290
7533
  });
7291
- let setState = React11.useCallback(
7534
+ let setState = React10.useCallback(
7292
7535
  (newState) => {
7293
- React11.startTransition(() => setStateImpl(newState));
7536
+ React10.startTransition(() => setStateImpl(newState));
7294
7537
  },
7295
7538
  [setStateImpl]
7296
7539
  );
7297
- React11.useLayoutEffect(() => history.listen(setState), [history, setState]);
7298
- return /* @__PURE__ */ React11.createElement(
7540
+ React10.useLayoutEffect(() => history.listen(setState), [history, setState]);
7541
+ return /* @__PURE__ */ React10.createElement(
7299
7542
  Router,
7300
7543
  {
7301
7544
  basename,
@@ -7307,8 +7550,8 @@ function HistoryRouter({
7307
7550
  );
7308
7551
  }
7309
7552
  HistoryRouter.displayName = "unstable_HistoryRouter";
7310
- var ABSOLUTE_URL_REGEX3 = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
7311
- var Link = React11.forwardRef(
7553
+ var ABSOLUTE_URL_REGEX2 = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
7554
+ var Link = React10.forwardRef(
7312
7555
  function LinkWithRef({
7313
7556
  onClick,
7314
7557
  discover = "render",
@@ -7323,8 +7566,8 @@ var Link = React11.forwardRef(
7323
7566
  viewTransition,
7324
7567
  ...rest
7325
7568
  }, forwardedRef) {
7326
- let { basename } = React11.useContext(NavigationContext);
7327
- let isAbsolute = typeof to === "string" && ABSOLUTE_URL_REGEX3.test(to);
7569
+ let { basename } = React10.useContext(NavigationContext);
7570
+ let isAbsolute = typeof to === "string" && ABSOLUTE_URL_REGEX2.test(to);
7328
7571
  let absoluteHref;
7329
7572
  let isExternal = false;
7330
7573
  if (typeof to === "string" && isAbsolute) {
@@ -7368,7 +7611,7 @@ var Link = React11.forwardRef(
7368
7611
  }
7369
7612
  let link = (
7370
7613
  // eslint-disable-next-line jsx-a11y/anchor-has-content
7371
- /* @__PURE__ */ React11.createElement(
7614
+ /* @__PURE__ */ React10.createElement(
7372
7615
  "a",
7373
7616
  {
7374
7617
  ...rest,
@@ -7381,11 +7624,11 @@ var Link = React11.forwardRef(
7381
7624
  }
7382
7625
  )
7383
7626
  );
7384
- return shouldPrefetch && !isAbsolute ? /* @__PURE__ */ React11.createElement(React11.Fragment, null, link, /* @__PURE__ */ React11.createElement(PrefetchPageLinks, { page: href })) : link;
7627
+ return shouldPrefetch && !isAbsolute ? /* @__PURE__ */ React10.createElement(React10.Fragment, null, link, /* @__PURE__ */ React10.createElement(PrefetchPageLinks, { page: href })) : link;
7385
7628
  }
7386
7629
  );
7387
7630
  Link.displayName = "Link";
7388
- var NavLink = React11.forwardRef(
7631
+ var NavLink = React10.forwardRef(
7389
7632
  function NavLinkWithRef({
7390
7633
  "aria-current": ariaCurrentProp = "page",
7391
7634
  caseSensitive = false,
@@ -7399,8 +7642,8 @@ var NavLink = React11.forwardRef(
7399
7642
  }, ref) {
7400
7643
  let path = useResolvedPath(to, { relative: rest.relative });
7401
7644
  let location = useLocation();
7402
- let routerState = React11.useContext(DataRouterStateContext);
7403
- let { navigator: navigator2, basename } = React11.useContext(NavigationContext);
7645
+ let routerState = React10.useContext(DataRouterStateContext);
7646
+ let { navigator: navigator2, basename } = React10.useContext(NavigationContext);
7404
7647
  let isTransitioning = routerState != null && // Conditional usage is OK here because the usage of a data router is static
7405
7648
  // eslint-disable-next-line react-hooks/rules-of-hooks
7406
7649
  useViewTransitionState(path) && viewTransition === true;
@@ -7436,7 +7679,7 @@ var NavLink = React11.forwardRef(
7436
7679
  ].filter(Boolean).join(" ");
7437
7680
  }
7438
7681
  let style = typeof styleProp === "function" ? styleProp(renderProps) : styleProp;
7439
- return /* @__PURE__ */ React11.createElement(
7682
+ return /* @__PURE__ */ React10.createElement(
7440
7683
  Link,
7441
7684
  {
7442
7685
  ...rest,
@@ -7452,7 +7695,7 @@ var NavLink = React11.forwardRef(
7452
7695
  }
7453
7696
  );
7454
7697
  NavLink.displayName = "NavLink";
7455
- var Form = React11.forwardRef(
7698
+ var Form = React10.forwardRef(
7456
7699
  ({
7457
7700
  discover = "render",
7458
7701
  fetcherKey,
@@ -7471,7 +7714,7 @@ var Form = React11.forwardRef(
7471
7714
  let submit = useSubmit();
7472
7715
  let formAction = useFormAction(action, { relative });
7473
7716
  let formMethod = method.toLowerCase() === "get" ? "get" : "post";
7474
- let isAbsolute = typeof action === "string" && ABSOLUTE_URL_REGEX3.test(action);
7717
+ let isAbsolute = typeof action === "string" && ABSOLUTE_URL_REGEX2.test(action);
7475
7718
  let submitHandler = (event) => {
7476
7719
  onSubmit && onSubmit(event);
7477
7720
  if (event.defaultPrevented) return;
@@ -7489,7 +7732,7 @@ var Form = React11.forwardRef(
7489
7732
  viewTransition
7490
7733
  });
7491
7734
  };
7492
- return /* @__PURE__ */ React11.createElement(
7735
+ return /* @__PURE__ */ React10.createElement(
7493
7736
  "form",
7494
7737
  {
7495
7738
  ref: forwardedRef,
@@ -7508,12 +7751,12 @@ function ScrollRestoration({
7508
7751
  storageKey,
7509
7752
  ...props
7510
7753
  }) {
7511
- let remixContext = React11.useContext(FrameworkContext);
7512
- let { basename } = React11.useContext(NavigationContext);
7754
+ let remixContext = React10.useContext(FrameworkContext);
7755
+ let { basename } = React10.useContext(NavigationContext);
7513
7756
  let location = useLocation();
7514
7757
  let matches = useMatches();
7515
7758
  useScrollRestoration({ getKey, storageKey });
7516
- let ssrKey = React11.useMemo(
7759
+ let ssrKey = React10.useMemo(
7517
7760
  () => {
7518
7761
  if (!remixContext || !getKey) return null;
7519
7762
  let userKey = getScrollRestorationKey(
@@ -7547,7 +7790,7 @@ function ScrollRestoration({
7547
7790
  sessionStorage.removeItem(storageKey2);
7548
7791
  }
7549
7792
  }).toString();
7550
- return /* @__PURE__ */ React11.createElement(
7793
+ return /* @__PURE__ */ React10.createElement(
7551
7794
  "script",
7552
7795
  {
7553
7796
  ...props,
@@ -7565,12 +7808,12 @@ function getDataRouterConsoleError2(hookName) {
7565
7808
  return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;
7566
7809
  }
7567
7810
  function useDataRouterContext3(hookName) {
7568
- let ctx = React11.useContext(DataRouterContext);
7811
+ let ctx = React10.useContext(DataRouterContext);
7569
7812
  invariant(ctx, getDataRouterConsoleError2(hookName));
7570
7813
  return ctx;
7571
7814
  }
7572
7815
  function useDataRouterState2(hookName) {
7573
- let state = React11.useContext(DataRouterStateContext);
7816
+ let state = React10.useContext(DataRouterStateContext);
7574
7817
  invariant(state, getDataRouterConsoleError2(hookName));
7575
7818
  return state;
7576
7819
  }
@@ -7585,7 +7828,7 @@ function useLinkClickHandler(to, {
7585
7828
  let navigate = useNavigate();
7586
7829
  let location = useLocation();
7587
7830
  let path = useResolvedPath(to, { relative });
7588
- return React11.useCallback(
7831
+ return React10.useCallback(
7589
7832
  (event) => {
7590
7833
  if (shouldProcessLinkClick(event, target)) {
7591
7834
  event.preventDefault();
@@ -7618,10 +7861,10 @@ function useSearchParams(defaultInit) {
7618
7861
  typeof URLSearchParams !== "undefined",
7619
7862
  `You cannot use the \`useSearchParams\` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.`
7620
7863
  );
7621
- let defaultSearchParamsRef = React11.useRef(createSearchParams(defaultInit));
7622
- let hasSetSearchParamsRef = React11.useRef(false);
7864
+ let defaultSearchParamsRef = React10.useRef(createSearchParams(defaultInit));
7865
+ let hasSetSearchParamsRef = React10.useRef(false);
7623
7866
  let location = useLocation();
7624
- let searchParams = React11.useMemo(
7867
+ let searchParams = React10.useMemo(
7625
7868
  () => (
7626
7869
  // Only merge in the defaults if we haven't yet called setSearchParams.
7627
7870
  // Once we call that we want those to take precedence, otherwise you can't
@@ -7634,7 +7877,7 @@ function useSearchParams(defaultInit) {
7634
7877
  [location.search]
7635
7878
  );
7636
7879
  let navigate = useNavigate();
7637
- let setSearchParams = React11.useCallback(
7880
+ let setSearchParams = React10.useCallback(
7638
7881
  (nextInit, navigateOptions) => {
7639
7882
  const newSearchParams = createSearchParams(
7640
7883
  typeof nextInit === "function" ? nextInit(searchParams) : nextInit
@@ -7650,9 +7893,9 @@ var fetcherId = 0;
7650
7893
  var getUniqueFetcherId = () => `__${String(++fetcherId)}__`;
7651
7894
  function useSubmit() {
7652
7895
  let { router } = useDataRouterContext3("useSubmit" /* UseSubmit */);
7653
- let { basename } = React11.useContext(NavigationContext);
7896
+ let { basename } = React10.useContext(NavigationContext);
7654
7897
  let currentRouteId = useRouteId();
7655
- return React11.useCallback(
7898
+ return React10.useCallback(
7656
7899
  async (target, options = {}) => {
7657
7900
  let { action, method, encType, formData, body } = getFormSubmissionInfo(
7658
7901
  target,
@@ -7687,8 +7930,8 @@ function useSubmit() {
7687
7930
  );
7688
7931
  }
7689
7932
  function useFormAction(action, { relative } = {}) {
7690
- let { basename } = React11.useContext(NavigationContext);
7691
- let routeContext = React11.useContext(RouteContext);
7933
+ let { basename } = React10.useContext(NavigationContext);
7934
+ let routeContext = React10.useContext(RouteContext);
7692
7935
  invariant(routeContext, "useFormAction must be used inside a RouteContext");
7693
7936
  let [match] = routeContext.matches.slice(-1);
7694
7937
  let path = { ...useResolvedPath(action ? action : ".", { relative }) };
@@ -7718,8 +7961,8 @@ function useFetcher({
7718
7961
  } = {}) {
7719
7962
  let { router } = useDataRouterContext3("useFetcher" /* UseFetcher */);
7720
7963
  let state = useDataRouterState2("useFetcher" /* UseFetcher */);
7721
- let fetcherData = React11.useContext(FetchersContext);
7722
- let route = React11.useContext(RouteContext);
7964
+ let fetcherData = React10.useContext(FetchersContext);
7965
+ let route = React10.useContext(RouteContext);
7723
7966
  let routeId = route.matches[route.matches.length - 1]?.route.id;
7724
7967
  invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);
7725
7968
  invariant(route, `useFetcher must be used inside a RouteContext`);
@@ -7727,16 +7970,16 @@ function useFetcher({
7727
7970
  routeId != null,
7728
7971
  `useFetcher can only be used on routes that contain a unique "id"`
7729
7972
  );
7730
- let defaultKey = React11.useId();
7731
- let [fetcherKey, setFetcherKey] = React11.useState(key || defaultKey);
7973
+ let defaultKey = React10.useId();
7974
+ let [fetcherKey, setFetcherKey] = React10.useState(key || defaultKey);
7732
7975
  if (key && key !== fetcherKey) {
7733
7976
  setFetcherKey(key);
7734
7977
  }
7735
- React11.useEffect(() => {
7978
+ React10.useEffect(() => {
7736
7979
  router.getFetcher(fetcherKey);
7737
7980
  return () => router.deleteFetcher(fetcherKey);
7738
7981
  }, [router, fetcherKey]);
7739
- let load = React11.useCallback(
7982
+ let load = React10.useCallback(
7740
7983
  async (href, opts) => {
7741
7984
  invariant(routeId, "No routeId available for fetcher.load()");
7742
7985
  await router.fetch(fetcherKey, routeId, href, opts);
@@ -7744,7 +7987,7 @@ function useFetcher({
7744
7987
  [fetcherKey, routeId, router]
7745
7988
  );
7746
7989
  let submitImpl = useSubmit();
7747
- let submit = React11.useCallback(
7990
+ let submit = React10.useCallback(
7748
7991
  async (target, opts) => {
7749
7992
  await submitImpl(target, {
7750
7993
  ...opts,
@@ -7754,10 +7997,10 @@ function useFetcher({
7754
7997
  },
7755
7998
  [fetcherKey, submitImpl]
7756
7999
  );
7757
- let FetcherForm = React11.useMemo(() => {
7758
- let FetcherForm2 = React11.forwardRef(
8000
+ let FetcherForm = React10.useMemo(() => {
8001
+ let FetcherForm2 = React10.forwardRef(
7759
8002
  (props, ref) => {
7760
- return /* @__PURE__ */ React11.createElement(Form, { ...props, navigate: false, fetcherKey, ref });
8003
+ return /* @__PURE__ */ React10.createElement(Form, { ...props, navigate: false, fetcherKey, ref });
7761
8004
  }
7762
8005
  );
7763
8006
  FetcherForm2.displayName = "fetcher.Form";
@@ -7765,7 +8008,7 @@ function useFetcher({
7765
8008
  }, [fetcherKey]);
7766
8009
  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;
7767
8010
  let data2 = fetcherData.get(fetcherKey);
7768
- let fetcherWithComponents = React11.useMemo(
8011
+ let fetcherWithComponents = React10.useMemo(
7769
8012
  () => ({
7770
8013
  Form: FetcherForm,
7771
8014
  submit,
@@ -7814,18 +8057,18 @@ function useScrollRestoration({
7814
8057
  let { restoreScrollPosition, preventScrollReset } = useDataRouterState2(
7815
8058
  "useScrollRestoration" /* UseScrollRestoration */
7816
8059
  );
7817
- let { basename } = React11.useContext(NavigationContext);
8060
+ let { basename } = React10.useContext(NavigationContext);
7818
8061
  let location = useLocation();
7819
8062
  let matches = useMatches();
7820
8063
  let navigation = useNavigation();
7821
- React11.useEffect(() => {
8064
+ React10.useEffect(() => {
7822
8065
  window.history.scrollRestoration = "manual";
7823
8066
  return () => {
7824
8067
  window.history.scrollRestoration = "auto";
7825
8068
  };
7826
8069
  }, []);
7827
8070
  usePageHide(
7828
- React11.useCallback(() => {
8071
+ React10.useCallback(() => {
7829
8072
  if (navigation.state === "idle") {
7830
8073
  let key = getScrollRestorationKey(location, matches, basename, getKey);
7831
8074
  savedScrollPositions[key] = window.scrollY;
@@ -7845,7 +8088,7 @@ function useScrollRestoration({
7845
8088
  }, [navigation.state, getKey, basename, location, matches, storageKey])
7846
8089
  );
7847
8090
  if (typeof document !== "undefined") {
7848
- React11.useLayoutEffect(() => {
8091
+ React10.useLayoutEffect(() => {
7849
8092
  try {
7850
8093
  let sessionPositions = sessionStorage.getItem(
7851
8094
  storageKey || SCROLL_RESTORATION_STORAGE_KEY
@@ -7856,7 +8099,7 @@ function useScrollRestoration({
7856
8099
  } catch (e) {
7857
8100
  }
7858
8101
  }, [storageKey]);
7859
- React11.useLayoutEffect(() => {
8102
+ React10.useLayoutEffect(() => {
7860
8103
  let disableScrollRestoration = router?.enableScrollRestoration(
7861
8104
  savedScrollPositions,
7862
8105
  () => window.scrollY,
@@ -7864,7 +8107,7 @@ function useScrollRestoration({
7864
8107
  );
7865
8108
  return () => disableScrollRestoration && disableScrollRestoration();
7866
8109
  }, [router, basename, getKey]);
7867
- React11.useLayoutEffect(() => {
8110
+ React10.useLayoutEffect(() => {
7868
8111
  if (restoreScrollPosition === false) {
7869
8112
  return;
7870
8113
  }
@@ -7890,7 +8133,7 @@ function useScrollRestoration({
7890
8133
  }
7891
8134
  function useBeforeUnload(callback, options) {
7892
8135
  let { capture } = options || {};
7893
- React11.useEffect(() => {
8136
+ React10.useEffect(() => {
7894
8137
  let opts = capture != null ? { capture } : void 0;
7895
8138
  window.addEventListener("beforeunload", callback, opts);
7896
8139
  return () => {
@@ -7900,7 +8143,7 @@ function useBeforeUnload(callback, options) {
7900
8143
  }
7901
8144
  function usePageHide(callback, options) {
7902
8145
  let { capture } = options || {};
7903
- React11.useEffect(() => {
8146
+ React10.useEffect(() => {
7904
8147
  let opts = capture != null ? { capture } : void 0;
7905
8148
  window.addEventListener("pagehide", callback, opts);
7906
8149
  return () => {
@@ -7913,7 +8156,7 @@ function usePrompt({
7913
8156
  message
7914
8157
  }) {
7915
8158
  let blocker = useBlocker(when);
7916
- React11.useEffect(() => {
8159
+ React10.useEffect(() => {
7917
8160
  if (blocker.state === "blocked") {
7918
8161
  let proceed = window.confirm(message);
7919
8162
  if (proceed) {
@@ -7923,14 +8166,14 @@ function usePrompt({
7923
8166
  }
7924
8167
  }
7925
8168
  }, [blocker, message]);
7926
- React11.useEffect(() => {
8169
+ React10.useEffect(() => {
7927
8170
  if (blocker.state === "blocked" && !when) {
7928
8171
  blocker.reset();
7929
8172
  }
7930
8173
  }, [blocker, when]);
7931
8174
  }
7932
8175
  function useViewTransitionState(to, opts = {}) {
7933
- let vtContext = React11.useContext(ViewTransitionContext);
8176
+ let vtContext = React10.useContext(ViewTransitionContext);
7934
8177
  invariant(
7935
8178
  vtContext != null,
7936
8179
  "`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?"
@@ -7947,8 +8190,8 @@ function useViewTransitionState(to, opts = {}) {
7947
8190
  return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;
7948
8191
  }
7949
8192
 
7950
- // lib/dom/components.tsx
7951
- var React12 = __toESM(require("react"));
8193
+ // lib/dom/server.tsx
8194
+ var React11 = __toESM(require("react"));
7952
8195
  function StaticRouter({
7953
8196
  basename,
7954
8197
  children,
@@ -7966,7 +8209,7 @@ function StaticRouter({
7966
8209
  key: locationProp.key || "default"
7967
8210
  };
7968
8211
  let staticNavigator = getStatelessNavigator();
7969
- return /* @__PURE__ */ React12.createElement(
8212
+ return /* @__PURE__ */ React11.createElement(
7970
8213
  Router,
7971
8214
  {
7972
8215
  basename,
@@ -8007,7 +8250,7 @@ function StaticRouterProvider({
8007
8250
  hydrateScript = `window.__staticRouterHydrationData = JSON.parse(${json});`;
8008
8251
  }
8009
8252
  let { state } = dataRouterContext.router;
8010
- return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React12.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React12.createElement(FetchersContext.Provider, { value: fetchersContext }, /* @__PURE__ */ React12.createElement(ViewTransitionContext.Provider, { value: { isTransitioning: false } }, /* @__PURE__ */ React12.createElement(
8253
+ return /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(DataRouterContext.Provider, { value: dataRouterContext }, /* @__PURE__ */ React11.createElement(DataRouterStateContext.Provider, { value: state }, /* @__PURE__ */ React11.createElement(FetchersContext.Provider, { value: fetchersContext }, /* @__PURE__ */ React11.createElement(ViewTransitionContext.Provider, { value: { isTransitioning: false } }, /* @__PURE__ */ React11.createElement(
8011
8254
  Router,
8012
8255
  {
8013
8256
  basename: dataRouterContext.basename,
@@ -8016,7 +8259,7 @@ function StaticRouterProvider({
8016
8259
  navigator: dataRouterContext.navigator,
8017
8260
  static: dataRouterContext.static
8018
8261
  },
8019
- /* @__PURE__ */ React12.createElement(
8262
+ /* @__PURE__ */ React11.createElement(
8020
8263
  DataRoutes2,
8021
8264
  {
8022
8265
  routes: router.routes,
@@ -8024,7 +8267,7 @@ function StaticRouterProvider({
8024
8267
  state
8025
8268
  }
8026
8269
  )
8027
- ))))), hydrateScript ? /* @__PURE__ */ React12.createElement(
8270
+ ))))), hydrateScript ? /* @__PURE__ */ React11.createElement(
8028
8271
  "script",
8029
8272
  {
8030
8273
  suppressHydrationWarning: true,
@@ -8094,19 +8337,6 @@ function getStatelessNavigator() {
8094
8337
  }
8095
8338
  };
8096
8339
  }
8097
- var ESCAPE_LOOKUP2 = {
8098
- "&": "\\u0026",
8099
- ">": "\\u003e",
8100
- "<": "\\u003c",
8101
- "\u2028": "\\u2028",
8102
- "\u2029": "\\u2029"
8103
- };
8104
- var ESCAPE_REGEX2 = /[&><\u2028\u2029]/g;
8105
- function htmlEscape(str) {
8106
- return str.replace(ESCAPE_REGEX2, (match) => ESCAPE_LOOKUP2[match]);
8107
- }
8108
-
8109
- // lib/dom/server.tsx
8110
8340
  function createStaticHandler2(routes, opts) {
8111
8341
  return createStaticHandler(routes, {
8112
8342
  ...opts,
@@ -8205,9 +8435,34 @@ function createStaticRouter(routes, context, opts = {}) {
8205
8435
  }
8206
8436
  };
8207
8437
  }
8438
+ function createHref(to) {
8439
+ return typeof to === "string" ? to : createPath(to);
8440
+ }
8441
+ function encodeLocation(to) {
8442
+ let href = typeof to === "string" ? to : createPath(to);
8443
+ href = href.replace(/ $/, "%20");
8444
+ let encoded = ABSOLUTE_URL_REGEX3.test(href) ? new URL(href) : new URL(href, "http://localhost");
8445
+ return {
8446
+ pathname: encoded.pathname,
8447
+ search: encoded.search,
8448
+ hash: encoded.hash
8449
+ };
8450
+ }
8451
+ var ABSOLUTE_URL_REGEX3 = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
8452
+ var ESCAPE_LOOKUP2 = {
8453
+ "&": "\\u0026",
8454
+ ">": "\\u003e",
8455
+ "<": "\\u003c",
8456
+ "\u2028": "\\u2028",
8457
+ "\u2029": "\\u2029"
8458
+ };
8459
+ var ESCAPE_REGEX2 = /[&><\u2028\u2029]/g;
8460
+ function htmlEscape(str) {
8461
+ return str.replace(ESCAPE_REGEX2, (match) => ESCAPE_LOOKUP2[match]);
8462
+ }
8208
8463
 
8209
8464
  // lib/dom/ssr/server.tsx
8210
- var React13 = __toESM(require("react"));
8465
+ var React12 = __toESM(require("react"));
8211
8466
  function ServerRouter({
8212
8467
  context,
8213
8468
  url,
@@ -8235,7 +8490,7 @@ function ServerRouter({
8235
8490
  }
8236
8491
  }
8237
8492
  let router = createStaticRouter(routes, context.staticHandlerContext);
8238
- return /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement(
8493
+ return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(
8239
8494
  FrameworkContext.Provider,
8240
8495
  {
8241
8496
  value: {
@@ -8249,7 +8504,7 @@ function ServerRouter({
8249
8504
  renderMeta: context.renderMeta
8250
8505
  }
8251
8506
  },
8252
- /* @__PURE__ */ React13.createElement(RemixErrorBoundary, { location: router.state.location }, /* @__PURE__ */ React13.createElement(
8507
+ /* @__PURE__ */ React12.createElement(RemixErrorBoundary, { location: router.state.location }, /* @__PURE__ */ React12.createElement(
8253
8508
  StaticRouterProvider,
8254
8509
  {
8255
8510
  router,
@@ -8257,7 +8512,7 @@ function ServerRouter({
8257
8512
  hydrate: false
8258
8513
  }
8259
8514
  ))
8260
- ), context.serverHandoffStream ? /* @__PURE__ */ React13.createElement(React13.Suspense, null, /* @__PURE__ */ React13.createElement(
8515
+ ), context.serverHandoffStream ? /* @__PURE__ */ React12.createElement(React12.Suspense, null, /* @__PURE__ */ React12.createElement(
8261
8516
  StreamTransfer,
8262
8517
  {
8263
8518
  context,
@@ -8270,7 +8525,7 @@ function ServerRouter({
8270
8525
  }
8271
8526
 
8272
8527
  // lib/dom/ssr/routes-test-stub.tsx
8273
- var React14 = __toESM(require("react"));
8528
+ var React13 = __toESM(require("react"));
8274
8529
  function createRoutesStub(routes, context = {}) {
8275
8530
  return function RoutesTestStub({
8276
8531
  initialEntries,
@@ -8278,8 +8533,8 @@ function createRoutesStub(routes, context = {}) {
8278
8533
  hydrationData,
8279
8534
  future
8280
8535
  }) {
8281
- let routerRef = React14.useRef();
8282
- let remixContextRef = React14.useRef();
8536
+ let routerRef = React13.useRef();
8537
+ let remixContextRef = React13.useRef();
8283
8538
  if (routerRef.current == null) {
8284
8539
  remixContextRef.current = {
8285
8540
  future: {},
@@ -8293,29 +8548,29 @@ function createRoutesStub(routes, context = {}) {
8293
8548
  isSpaMode: false
8294
8549
  };
8295
8550
  let patched = processRoutes(
8296
- // @ts-expect-error loader/action context types don't match :/
8551
+ // @ts-expect-error `StubRouteObject` is stricter about `loader`/`action`
8552
+ // types compared to `AgnosticRouteObject`
8297
8553
  convertRoutesToDataRoutes(routes, (r) => r),
8298
- context,
8299
8554
  remixContextRef.current.manifest,
8300
8555
  remixContextRef.current.routeModules
8301
8556
  );
8302
8557
  routerRef.current = createMemoryRouter(patched, {
8558
+ context,
8303
8559
  initialEntries,
8304
8560
  initialIndex,
8305
8561
  hydrationData
8306
8562
  });
8307
8563
  }
8308
- return /* @__PURE__ */ React14.createElement(FrameworkContext.Provider, { value: remixContextRef.current }, /* @__PURE__ */ React14.createElement(RouterProvider, { router: routerRef.current }));
8564
+ return /* @__PURE__ */ React13.createElement(FrameworkContext.Provider, { value: remixContextRef.current }, /* @__PURE__ */ React13.createElement(RouterProvider, { router: routerRef.current }));
8309
8565
  };
8310
8566
  }
8311
- function processRoutes(routes, context, manifest, routeModules, parentId) {
8567
+ function processRoutes(routes, manifest, routeModules, parentId) {
8312
8568
  return routes.map((route) => {
8313
8569
  if (!route.id) {
8314
8570
  throw new Error(
8315
8571
  "Expected a route.id in @remix-run/testing processRoutes() function"
8316
8572
  );
8317
8573
  }
8318
- let { loader, action } = route;
8319
8574
  let newRoute = {
8320
8575
  id: route.id,
8321
8576
  path: route.path,
@@ -8323,8 +8578,8 @@ function processRoutes(routes, context, manifest, routeModules, parentId) {
8323
8578
  Component: route.Component,
8324
8579
  HydrateFallback: route.HydrateFallback,
8325
8580
  ErrorBoundary: route.ErrorBoundary,
8326
- action: action ? (args) => action({ ...args, context }) : void 0,
8327
- loader: loader ? (args) => loader({ ...args, context }) : void 0,
8581
+ action: route.action,
8582
+ loader: route.loader,
8328
8583
  handle: route.handle,
8329
8584
  shouldRevalidate: route.shouldRevalidate
8330
8585
  };
@@ -8356,7 +8611,6 @@ function processRoutes(routes, context, manifest, routeModules, parentId) {
8356
8611
  if (route.children) {
8357
8612
  newRoute.children = processRoutes(
8358
8613
  route.children,
8359
- context,
8360
8614
  manifest,
8361
8615
  routeModules,
8362
8616
  newRoute.id
@@ -8717,6 +8971,7 @@ function createStaticHandlerDataRoutes(manifest, future, parentId = "", routesBy
8717
8971
  hasErrorBoundary: route.id === "root" || route.module.ErrorBoundary != null,
8718
8972
  id: route.id,
8719
8973
  path: route.path,
8974
+ middleware: route.module.middleware,
8720
8975
  // Need to use RR's version in the param typed here to permit the optional
8721
8976
  // context even though we know it'll always be provided in remix
8722
8977
  loader: route.module.loader ? async (args) => {
@@ -8860,24 +9115,6 @@ function prependCookies(parentHeaders, childHeaders) {
8860
9115
 
8861
9116
  // lib/server-runtime/single-fetch.ts
8862
9117
  var SINGLE_FETCH_REDIRECT_STATUS = 202;
8863
- function getSingleFetchDataStrategy2({
8864
- isActionDataRequest,
8865
- loadRouteIds
8866
- } = {}) {
8867
- return async ({ request, matches }) => {
8868
- if (isActionDataRequest && request.method === "GET") {
8869
- return {};
8870
- }
8871
- let matchesToLoad = loadRouteIds ? matches.filter((m) => loadRouteIds.includes(m.route.id)) : matches;
8872
- let results = await Promise.all(
8873
- matchesToLoad.map((match) => match.resolve())
8874
- );
8875
- return results.reduce(
8876
- (acc, result, i) => Object.assign(acc, { [matchesToLoad[i].route.id]: result }),
8877
- {}
8878
- );
8879
- };
8880
- }
8881
9118
  async function singleFetchAction(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {
8882
9119
  try {
8883
9120
  let handlerRequest = new Request(handlerUrl, {
@@ -8890,12 +9127,45 @@ async function singleFetchAction(build, serverMode, staticHandler, request, hand
8890
9127
  let result = await staticHandler.query(handlerRequest, {
8891
9128
  requestContext: loadContext,
8892
9129
  skipLoaderErrorBubbling: true,
8893
- dataStrategy: getSingleFetchDataStrategy2({
8894
- isActionDataRequest: true
8895
- })
9130
+ async respond(context) {
9131
+ let headers = getDocumentHeaders(build, context);
9132
+ if (isRedirectStatusCode(context.statusCode) && headers.has("Location")) {
9133
+ return generateSingleFetchResponse(request, build, serverMode, {
9134
+ result: getSingleFetchRedirect(
9135
+ context.statusCode,
9136
+ headers,
9137
+ build.basename
9138
+ ),
9139
+ headers,
9140
+ status: SINGLE_FETCH_REDIRECT_STATUS
9141
+ });
9142
+ }
9143
+ if (context.errors) {
9144
+ Object.values(context.errors).forEach((err) => {
9145
+ if (!isRouteErrorResponse(err) || err.error) {
9146
+ handleError(err);
9147
+ }
9148
+ });
9149
+ context.errors = sanitizeErrors(context.errors, serverMode);
9150
+ }
9151
+ let singleFetchResult;
9152
+ if (context.errors) {
9153
+ singleFetchResult = { error: Object.values(context.errors)[0] };
9154
+ } else {
9155
+ singleFetchResult = {
9156
+ data: Object.values(context.actionData || {})[0]
9157
+ };
9158
+ }
9159
+ return generateSingleFetchResponse(request, build, serverMode, {
9160
+ result: singleFetchResult,
9161
+ headers,
9162
+ status: context.statusCode
9163
+ });
9164
+ }
8896
9165
  });
8897
- if (isResponse(result)) {
8898
- return {
9166
+ invariant3(isResponse(result), " Expected a Response from query()");
9167
+ if (isRedirectResponse(result)) {
9168
+ return generateSingleFetchResponse(request, build, serverMode, {
8899
9169
  result: getSingleFetchRedirect(
8900
9170
  result.status,
8901
9171
  result.headers,
@@ -8903,47 +9173,16 @@ async function singleFetchAction(build, serverMode, staticHandler, request, hand
8903
9173
  ),
8904
9174
  headers: result.headers,
8905
9175
  status: SINGLE_FETCH_REDIRECT_STATUS
8906
- };
8907
- }
8908
- let context = result;
8909
- let headers = getDocumentHeaders(build, context);
8910
- if (isRedirectStatusCode(context.statusCode) && headers.has("Location")) {
8911
- return {
8912
- result: getSingleFetchRedirect(
8913
- context.statusCode,
8914
- headers,
8915
- build.basename
8916
- ),
8917
- headers,
8918
- status: SINGLE_FETCH_REDIRECT_STATUS
8919
- };
8920
- }
8921
- if (context.errors) {
8922
- Object.values(context.errors).forEach((err) => {
8923
- if (!isRouteErrorResponse(err) || err.error) {
8924
- handleError(err);
8925
- }
8926
9176
  });
8927
- context.errors = sanitizeErrors(context.errors, serverMode);
8928
9177
  }
8929
- let singleFetchResult;
8930
- if (context.errors) {
8931
- singleFetchResult = { error: Object.values(context.errors)[0] };
8932
- } else {
8933
- singleFetchResult = { data: Object.values(context.actionData || {})[0] };
8934
- }
8935
- return {
8936
- result: singleFetchResult,
8937
- headers,
8938
- status: context.statusCode
8939
- };
9178
+ return result;
8940
9179
  } catch (error) {
8941
9180
  handleError(error);
8942
- return {
9181
+ return generateSingleFetchResponse(request, build, serverMode, {
8943
9182
  result: { error },
8944
9183
  headers: new Headers(),
8945
9184
  status: 500
8946
- };
9185
+ });
8947
9186
  }
8948
9187
  }
8949
9188
  async function singleFetchLoaders(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {
@@ -8956,12 +9195,51 @@ async function singleFetchLoaders(build, serverMode, staticHandler, request, han
8956
9195
  let result = await staticHandler.query(handlerRequest, {
8957
9196
  requestContext: loadContext,
8958
9197
  skipLoaderErrorBubbling: true,
8959
- dataStrategy: getSingleFetchDataStrategy2({
8960
- loadRouteIds
8961
- })
9198
+ async respond(context) {
9199
+ let headers = getDocumentHeaders(build, context);
9200
+ if (isRedirectStatusCode(context.statusCode) && headers.has("Location")) {
9201
+ return generateSingleFetchResponse(request, build, serverMode, {
9202
+ result: {
9203
+ [SingleFetchRedirectSymbol]: getSingleFetchRedirect(
9204
+ context.statusCode,
9205
+ headers,
9206
+ build.basename
9207
+ )
9208
+ },
9209
+ headers,
9210
+ status: SINGLE_FETCH_REDIRECT_STATUS
9211
+ });
9212
+ }
9213
+ if (context.errors) {
9214
+ Object.values(context.errors).forEach((err) => {
9215
+ if (!isRouteErrorResponse(err) || err.error) {
9216
+ handleError(err);
9217
+ }
9218
+ });
9219
+ context.errors = sanitizeErrors(context.errors, serverMode);
9220
+ }
9221
+ let results = {};
9222
+ let loadedMatches = loadRouteIds ? context.matches.filter(
9223
+ (m) => m.route.loader && loadRouteIds.includes(m.route.id)
9224
+ ) : context.matches;
9225
+ loadedMatches.forEach((m) => {
9226
+ let { id } = m.route;
9227
+ if (context.errors && context.errors.hasOwnProperty(id)) {
9228
+ results[id] = { error: context.errors[id] };
9229
+ } else if (context.loaderData.hasOwnProperty(id)) {
9230
+ results[id] = { data: context.loaderData[id] };
9231
+ }
9232
+ });
9233
+ return generateSingleFetchResponse(request, build, serverMode, {
9234
+ result: results,
9235
+ headers,
9236
+ status: context.statusCode
9237
+ });
9238
+ }
8962
9239
  });
8963
- if (isResponse(result)) {
8964
- return {
9240
+ invariant3(isResponse(result), " Expected a Response from query()");
9241
+ if (isRedirectResponse(result)) {
9242
+ return generateSingleFetchResponse(request, build, serverMode, {
8965
9243
  result: {
8966
9244
  [SingleFetchRedirectSymbol]: getSingleFetchRedirect(
8967
9245
  result.status,
@@ -8971,56 +9249,41 @@ async function singleFetchLoaders(build, serverMode, staticHandler, request, han
8971
9249
  },
8972
9250
  headers: result.headers,
8973
9251
  status: SINGLE_FETCH_REDIRECT_STATUS
8974
- };
8975
- }
8976
- let context = result;
8977
- let headers = getDocumentHeaders(build, context);
8978
- if (isRedirectStatusCode(context.statusCode) && headers.has("Location")) {
8979
- return {
8980
- result: {
8981
- [SingleFetchRedirectSymbol]: getSingleFetchRedirect(
8982
- context.statusCode,
8983
- headers,
8984
- build.basename
8985
- )
8986
- },
8987
- headers,
8988
- status: SINGLE_FETCH_REDIRECT_STATUS
8989
- };
8990
- }
8991
- if (context.errors) {
8992
- Object.values(context.errors).forEach((err) => {
8993
- if (!isRouteErrorResponse(err) || err.error) {
8994
- handleError(err);
8995
- }
8996
9252
  });
8997
- context.errors = sanitizeErrors(context.errors, serverMode);
8998
9253
  }
8999
- let results = {};
9000
- let loadedMatches = loadRouteIds ? context.matches.filter(
9001
- (m) => m.route.loader && loadRouteIds.includes(m.route.id)
9002
- ) : context.matches;
9003
- loadedMatches.forEach((m) => {
9004
- let { id } = m.route;
9005
- if (context.errors && context.errors.hasOwnProperty(id)) {
9006
- results[id] = { error: context.errors[id] };
9007
- } else if (context.loaderData.hasOwnProperty(id)) {
9008
- results[id] = { data: context.loaderData[id] };
9009
- }
9010
- });
9011
- return {
9012
- result: results,
9013
- headers,
9014
- status: context.statusCode
9015
- };
9254
+ return result;
9016
9255
  } catch (error) {
9017
9256
  handleError(error);
9018
- return {
9257
+ return generateSingleFetchResponse(request, build, serverMode, {
9019
9258
  result: { root: { error } },
9020
9259
  headers: new Headers(),
9021
9260
  status: 500
9022
- };
9261
+ });
9262
+ }
9263
+ }
9264
+ function generateSingleFetchResponse(request, build, serverMode, {
9265
+ result,
9266
+ headers,
9267
+ status
9268
+ }) {
9269
+ let resultHeaders = new Headers(headers);
9270
+ resultHeaders.set("X-Remix-Response", "yes");
9271
+ if (status === 304) {
9272
+ return new Response(null, { status: 304, headers: resultHeaders });
9023
9273
  }
9274
+ resultHeaders.set("Content-Type", "text/x-script");
9275
+ return new Response(
9276
+ encodeViaTurboStream(
9277
+ result,
9278
+ request.signal,
9279
+ build.entry.module.streamTimeout,
9280
+ serverMode
9281
+ ),
9282
+ {
9283
+ status: status || 200,
9284
+ headers: resultHeaders
9285
+ }
9286
+ );
9024
9287
  }
9025
9288
  function getSingleFetchRedirect(status, headers, basename) {
9026
9289
  let redirect2 = headers.get("Location");
@@ -9262,7 +9525,7 @@ async function handleManifestRequest(build, routes, url) {
9262
9525
  return new Response("Invalid Request", { status: 400 });
9263
9526
  }
9264
9527
  async function handleSingleFetchRequest(serverMode, build, staticHandler, request, handlerUrl, loadContext, handleError) {
9265
- let { result, headers, status } = request.method !== "GET" ? await singleFetchAction(
9528
+ let response = request.method !== "GET" ? await singleFetchAction(
9266
9529
  build,
9267
9530
  serverMode,
9268
9531
  staticHandler,
@@ -9279,129 +9542,67 @@ async function handleSingleFetchRequest(serverMode, build, staticHandler, reques
9279
9542
  loadContext,
9280
9543
  handleError
9281
9544
  );
9282
- let resultHeaders = new Headers(headers);
9283
- resultHeaders.set("X-Remix-Response", "yes");
9284
- if (status === 304) {
9285
- return new Response(null, { status: 304, headers: resultHeaders });
9286
- }
9287
- resultHeaders.set("Content-Type", "text/x-script");
9288
- return new Response(
9289
- encodeViaTurboStream(
9290
- result,
9291
- request.signal,
9292
- build.entry.module.streamTimeout,
9293
- serverMode
9294
- ),
9295
- {
9296
- status: status || 200,
9297
- headers: resultHeaders
9298
- }
9299
- );
9545
+ return response;
9300
9546
  }
9301
9547
  async function handleDocumentRequest(serverMode, build, staticHandler, request, loadContext, handleError, criticalCss) {
9302
- let context;
9303
9548
  try {
9304
- context = await staticHandler.query(request, {
9305
- requestContext: loadContext
9549
+ let response = await staticHandler.query(request, {
9550
+ requestContext: loadContext,
9551
+ respond: renderHtml
9306
9552
  });
9553
+ invariant3(
9554
+ isResponse(response),
9555
+ "Expected a Response to be returned from query"
9556
+ );
9557
+ return response;
9307
9558
  } catch (error) {
9308
9559
  handleError(error);
9309
9560
  return new Response(null, { status: 500 });
9310
9561
  }
9311
- if (isResponse(context)) {
9312
- return context;
9313
- }
9314
- let headers = getDocumentHeaders(build, context);
9315
- if (context.statusCode === 304) {
9316
- return new Response(null, { status: 304, headers });
9317
- }
9318
- if (context.errors) {
9319
- Object.values(context.errors).forEach((err) => {
9320
- if (!isRouteErrorResponse(err) || err.error) {
9321
- handleError(err);
9322
- }
9323
- });
9324
- context.errors = sanitizeErrors(context.errors, serverMode);
9325
- }
9326
- let state = {
9327
- loaderData: context.loaderData,
9328
- actionData: context.actionData,
9329
- errors: serializeErrors2(context.errors, serverMode)
9330
- };
9331
- let entryContext = {
9332
- manifest: build.assets,
9333
- routeModules: createEntryRouteModules(build.routes),
9334
- staticHandlerContext: context,
9335
- criticalCss,
9336
- serverHandoffString: createServerHandoffString({
9337
- basename: build.basename,
9338
- criticalCss,
9339
- future: build.future,
9340
- isSpaMode: build.isSpaMode
9341
- }),
9342
- serverHandoffStream: encodeViaTurboStream(
9343
- state,
9344
- request.signal,
9345
- build.entry.module.streamTimeout,
9346
- serverMode
9347
- ),
9348
- renderMeta: {},
9349
- future: build.future,
9350
- isSpaMode: build.isSpaMode,
9351
- serializeError: (err) => serializeError(err, serverMode)
9352
- };
9353
- let handleDocumentRequestFunction = build.entry.module.default;
9354
- try {
9355
- return await handleDocumentRequestFunction(
9356
- request,
9357
- context.statusCode,
9358
- headers,
9359
- entryContext,
9360
- loadContext
9361
- );
9362
- } catch (error) {
9363
- handleError(error);
9364
- let errorForSecondRender = error;
9365
- if (isResponse(error)) {
9366
- try {
9367
- let data2 = await unwrapResponse(error);
9368
- errorForSecondRender = new ErrorResponseImpl(
9369
- error.status,
9370
- error.statusText,
9371
- data2
9372
- );
9373
- } catch (e) {
9374
- }
9562
+ async function renderHtml(context) {
9563
+ if (isResponse(context)) {
9564
+ return context;
9565
+ }
9566
+ let headers = getDocumentHeaders(build, context);
9567
+ if (context.statusCode === 304) {
9568
+ return new Response(null, { status: 304, headers });
9375
9569
  }
9376
- context = getStaticContextFromError(
9377
- staticHandler.dataRoutes,
9378
- context,
9379
- errorForSecondRender
9380
- );
9381
9570
  if (context.errors) {
9571
+ Object.values(context.errors).forEach((err) => {
9572
+ if (!isRouteErrorResponse(err) || err.error) {
9573
+ handleError(err);
9574
+ }
9575
+ });
9382
9576
  context.errors = sanitizeErrors(context.errors, serverMode);
9383
9577
  }
9384
- let state2 = {
9578
+ let state = {
9385
9579
  loaderData: context.loaderData,
9386
9580
  actionData: context.actionData,
9387
9581
  errors: serializeErrors2(context.errors, serverMode)
9388
9582
  };
9389
- entryContext = {
9390
- ...entryContext,
9583
+ let entryContext = {
9584
+ manifest: build.assets,
9585
+ routeModules: createEntryRouteModules(build.routes),
9391
9586
  staticHandlerContext: context,
9587
+ criticalCss,
9392
9588
  serverHandoffString: createServerHandoffString({
9393
9589
  basename: build.basename,
9590
+ criticalCss,
9394
9591
  future: build.future,
9395
9592
  isSpaMode: build.isSpaMode
9396
9593
  }),
9397
9594
  serverHandoffStream: encodeViaTurboStream(
9398
- state2,
9595
+ state,
9399
9596
  request.signal,
9400
9597
  build.entry.module.streamTimeout,
9401
9598
  serverMode
9402
9599
  ),
9403
- renderMeta: {}
9600
+ renderMeta: {},
9601
+ future: build.future,
9602
+ isSpaMode: build.isSpaMode,
9603
+ serializeError: (err) => serializeError(err, serverMode)
9404
9604
  };
9605
+ let handleDocumentRequestFunction = build.entry.module.default;
9405
9606
  try {
9406
9607
  return await handleDocumentRequestFunction(
9407
9608
  request,
@@ -9410,9 +9611,61 @@ async function handleDocumentRequest(serverMode, build, staticHandler, request,
9410
9611
  entryContext,
9411
9612
  loadContext
9412
9613
  );
9413
- } catch (error2) {
9414
- handleError(error2);
9415
- return returnLastResortErrorResponse(error2, serverMode);
9614
+ } catch (error) {
9615
+ handleError(error);
9616
+ let errorForSecondRender = error;
9617
+ if (isResponse(error)) {
9618
+ try {
9619
+ let data2 = await unwrapResponse(error);
9620
+ errorForSecondRender = new ErrorResponseImpl(
9621
+ error.status,
9622
+ error.statusText,
9623
+ data2
9624
+ );
9625
+ } catch (e) {
9626
+ }
9627
+ }
9628
+ context = getStaticContextFromError(
9629
+ staticHandler.dataRoutes,
9630
+ context,
9631
+ errorForSecondRender
9632
+ );
9633
+ if (context.errors) {
9634
+ context.errors = sanitizeErrors(context.errors, serverMode);
9635
+ }
9636
+ let state2 = {
9637
+ loaderData: context.loaderData,
9638
+ actionData: context.actionData,
9639
+ errors: serializeErrors2(context.errors, serverMode)
9640
+ };
9641
+ entryContext = {
9642
+ ...entryContext,
9643
+ staticHandlerContext: context,
9644
+ serverHandoffString: createServerHandoffString({
9645
+ basename: build.basename,
9646
+ future: build.future,
9647
+ isSpaMode: build.isSpaMode
9648
+ }),
9649
+ serverHandoffStream: encodeViaTurboStream(
9650
+ state2,
9651
+ request.signal,
9652
+ build.entry.module.streamTimeout,
9653
+ serverMode
9654
+ ),
9655
+ renderMeta: {}
9656
+ };
9657
+ try {
9658
+ return await handleDocumentRequestFunction(
9659
+ request,
9660
+ context.statusCode,
9661
+ headers,
9662
+ entryContext,
9663
+ loadContext
9664
+ );
9665
+ } catch (error2) {
9666
+ handleError(error2);
9667
+ return returnLastResortErrorResponse(error2, serverMode);
9668
+ }
9416
9669
  }
9417
9670
  }
9418
9671
  }