react-router 0.0.0-experimental-84753c0 → 0.0.0-experimental-14dc7c1

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 (64) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/development/{chunk-7BNQ3X22.mjs → chunk-7DQFGJJ6.mjs} +136 -75
  3. package/dist/development/{chunk-2XECXUWB.mjs → chunk-BP2L2QSJ.mjs} +43 -65
  4. package/dist/development/{chunk-BKA6MN6C.js → chunk-H4AF2Q5N.js} +130 -130
  5. package/dist/development/{chunk-WFJQVGQ4.js → chunk-LEPJCRFN.js} +135 -74
  6. package/dist/development/{components-BeoSj2y5.d.mts → components-Cjychfep.d.mts} +10 -2
  7. package/dist/development/{route-data-DLWzV8y8.d.mts → context-BAwKA7g7.d.mts} +11 -505
  8. package/dist/development/dom-export.d.mts +3 -13
  9. package/dist/development/dom-export.d.ts +1 -12
  10. package/dist/development/dom-export.js +7 -17
  11. package/dist/development/dom-export.mjs +6 -14
  12. package/dist/development/{index-react-server-client-CD1wssaX.d.mts → index-react-server-client-CVAOeyiE.d.mts} +53 -7
  13. package/dist/{production/index-react-server-client-DWvSxTlp.d.ts → development/index-react-server-client-DTXbCziZ.d.ts} +167 -114
  14. package/dist/development/index-react-server-client.d.mts +4 -3
  15. package/dist/development/index-react-server-client.d.ts +2 -2
  16. package/dist/development/index-react-server-client.js +4 -4
  17. package/dist/development/index-react-server-client.mjs +2 -2
  18. package/dist/development/index-react-server.d.mts +20 -8
  19. package/dist/development/index-react-server.d.ts +20 -8
  20. package/dist/development/index-react-server.js +65 -21
  21. package/dist/development/index-react-server.mjs +65 -21
  22. package/dist/development/index.d.mts +24 -18
  23. package/dist/development/index.d.ts +20 -16
  24. package/dist/development/index.js +136 -130
  25. package/dist/development/index.mjs +3 -3
  26. package/dist/development/lib/types/internal.d.mts +13 -2
  27. package/dist/development/lib/types/internal.d.ts +12 -2
  28. package/dist/development/lib/types/internal.js +1 -1
  29. package/dist/development/lib/types/internal.mjs +1 -1
  30. package/dist/development/route-data-BM3tG11r.d.mts +473 -0
  31. package/dist/development/{routeModules-DGh-lOIY.d.ts → routeModules-DwtFmuor.d.ts} +41 -65
  32. package/dist/production/{chunk-ZGP5JW47.mjs → chunk-G5NQ7XVU.mjs} +136 -75
  33. package/dist/production/{chunk-DNCPQZC4.js → chunk-LCCWW6YM.js} +130 -130
  34. package/dist/production/{chunk-XVO4RTEQ.js → chunk-O3KQFSZ2.js} +135 -74
  35. package/dist/production/{chunk-VJVBIB4Y.mjs → chunk-RKV2C73T.mjs} +43 -65
  36. package/dist/production/{components-BeoSj2y5.d.mts → components-Cjychfep.d.mts} +10 -2
  37. package/dist/production/{route-data-DLWzV8y8.d.mts → context-BAwKA7g7.d.mts} +11 -505
  38. package/dist/production/dom-export.d.mts +3 -13
  39. package/dist/production/dom-export.d.ts +1 -12
  40. package/dist/production/dom-export.js +7 -17
  41. package/dist/production/dom-export.mjs +6 -14
  42. package/dist/production/{index-react-server-client-CD1wssaX.d.mts → index-react-server-client-CVAOeyiE.d.mts} +53 -7
  43. package/dist/{development/index-react-server-client-DWvSxTlp.d.ts → production/index-react-server-client-DTXbCziZ.d.ts} +167 -114
  44. package/dist/production/index-react-server-client.d.mts +4 -3
  45. package/dist/production/index-react-server-client.d.ts +2 -2
  46. package/dist/production/index-react-server-client.js +4 -4
  47. package/dist/production/index-react-server-client.mjs +2 -2
  48. package/dist/production/index-react-server.d.mts +20 -8
  49. package/dist/production/index-react-server.d.ts +20 -8
  50. package/dist/production/index-react-server.js +65 -21
  51. package/dist/production/index-react-server.mjs +65 -21
  52. package/dist/production/index.d.mts +24 -18
  53. package/dist/production/index.d.ts +20 -16
  54. package/dist/production/index.js +136 -130
  55. package/dist/production/index.mjs +3 -3
  56. package/dist/production/lib/types/internal.d.mts +13 -2
  57. package/dist/production/lib/types/internal.d.ts +12 -2
  58. package/dist/production/lib/types/internal.js +1 -1
  59. package/dist/production/lib/types/internal.mjs +1 -1
  60. package/dist/production/route-data-BM3tG11r.d.mts +473 -0
  61. package/dist/production/{routeModules-DGh-lOIY.d.ts → routeModules-DwtFmuor.d.ts} +41 -65
  62. package/package.json +1 -1
  63. package/dist/development/chunk-OYS64IUQ.js +0 -42
  64. package/dist/production/chunk-OYS64IUQ.js +0 -42
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # `react-router`
2
2
 
3
+ ## 7.7.1
4
+
5
+ ### Patch Changes
6
+
7
+ - In RSC Data Mode, fix bug where routes with errors weren't forced to revalidate when `shouldRevalidate` returned false ([#14026](https://github.com/remix-run/react-router/pull/14026))
8
+ - In RSC Data Mode, fix `Matched leaf route at location "/..." does not have an element or Component` warnings when error boundaries are rendered. ([#14021](https://github.com/remix-run/react-router/pull/14021))
9
+
3
10
  ## 7.7.0
4
11
 
5
12
  ### Minor Changes
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-84753c0
2
+ * react-router v0.0.0-experimental-14dc7c1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -489,6 +489,7 @@ function convertRouteMatchToUiMatch(match, loaderData) {
489
489
  pathname,
490
490
  params,
491
491
  data: loaderData[route.id],
492
+ loaderData: loaderData[route.id],
492
493
  handle: route.handle
493
494
  };
494
495
  }
@@ -1434,9 +1435,7 @@ function createRouter(init) {
1434
1435
  pendingNavigationController.signal,
1435
1436
  opts && opts.submission
1436
1437
  );
1437
- let scopedContext = new unstable_RouterContextProvider(
1438
- init.unstable_getContext ? await init.unstable_getContext() : void 0
1439
- );
1438
+ let scopedContext = init.unstable_getContext ? await init.unstable_getContext() : new unstable_RouterContextProvider();
1440
1439
  let pendingActionResult;
1441
1440
  if (opts && opts.pendingError) {
1442
1441
  pendingActionResult = [
@@ -1857,9 +1856,7 @@ function createRouter(init) {
1857
1856
  setFetcherError(key, routeId, error, { flushSync });
1858
1857
  return;
1859
1858
  }
1860
- let scopedContext = new unstable_RouterContextProvider(
1861
- init.unstable_getContext ? await init.unstable_getContext() : void 0
1862
- );
1859
+ let scopedContext = init.unstable_getContext ? await init.unstable_getContext() : new unstable_RouterContextProvider();
1863
1860
  let preventScrollReset = (opts && opts.preventScrollReset) === true;
1864
1861
  if (submission && isMutationMethod(submission.formMethod)) {
1865
1862
  await handleFetcherAction(
@@ -2718,7 +2715,7 @@ function createStaticHandler(routes, opts) {
2718
2715
  let location = createLocation("", createPath(url), null, "default");
2719
2716
  let matches = matchRoutes(dataRoutes, location, basename);
2720
2717
  requestContext = requestContext != null ? requestContext : new unstable_RouterContextProvider();
2721
- let respondOrStreamStaticContext = (ctx) => {
2718
+ let shortCircuitResult = (ctx) => {
2722
2719
  return stream ? stream(
2723
2720
  requestContext,
2724
2721
  () => Promise.resolve(ctx)
@@ -2740,7 +2737,7 @@ function createStaticHandler(routes, opts) {
2740
2737
  loaderHeaders: {},
2741
2738
  actionHeaders: {}
2742
2739
  };
2743
- return respondOrStreamStaticContext(staticContext);
2740
+ return shortCircuitResult(staticContext);
2744
2741
  } else if (!matches) {
2745
2742
  let error = getInternalRouterError(404, { pathname: location.pathname });
2746
2743
  let { matches: notFoundMatches, route } = getShortCircuitMatches(dataRoutes);
@@ -2757,7 +2754,7 @@ function createStaticHandler(routes, opts) {
2757
2754
  loaderHeaders: {},
2758
2755
  actionHeaders: {}
2759
2756
  };
2760
- return respondOrStreamStaticContext(staticContext);
2757
+ return shortCircuitResult(staticContext);
2761
2758
  }
2762
2759
  if (stream || respond && matches.some(
2763
2760
  (m) => m.route.unstable_middleware || typeof m.route.lazy === "object" && m.route.lazy.unstable_middleware
@@ -2837,7 +2834,7 @@ function createStaticHandler(routes, opts) {
2837
2834
  error,
2838
2835
  skipLoaderErrorBubbling ? routeId : findNearestBoundary(matches, routeId).route.id
2839
2836
  );
2840
- return respondOrStreamStaticContext(staticContext);
2837
+ return stream ? stream(requestContext, () => Promise.resolve(staticContext)) : respond(staticContext);
2841
2838
  } else {
2842
2839
  let boundaryRouteId = skipLoaderErrorBubbling ? routeId : findNearestBoundary(
2843
2840
  matches,
@@ -2858,7 +2855,7 @@ function createStaticHandler(routes, opts) {
2858
2855
  actionHeaders: {},
2859
2856
  loaderHeaders: {}
2860
2857
  };
2861
- return respondOrStreamStaticContext(staticContext);
2858
+ return stream ? stream(requestContext, () => Promise.resolve(staticContext)) : respond(staticContext);
2862
2859
  }
2863
2860
  }
2864
2861
  );
@@ -2891,7 +2888,8 @@ function createStaticHandler(routes, opts) {
2891
2888
  routeId,
2892
2889
  requestContext,
2893
2890
  dataStrategy,
2894
- unstable_respond: respond
2891
+ unstable_respond: respond,
2892
+ unstable_stream: stream
2895
2893
  } = {}) {
2896
2894
  let url = new URL(request.url);
2897
2895
  let method = request.method;
@@ -2912,7 +2910,7 @@ function createStaticHandler(routes, opts) {
2912
2910
  } else if (!match) {
2913
2911
  throw getInternalRouterError(404, { pathname: location.pathname });
2914
2912
  }
2915
- if (respond && matches.some(
2913
+ if (stream || respond && matches.some(
2916
2914
  (m) => m.route.unstable_middleware || typeof m.route.lazy === "object" && m.route.lazy.unstable_middleware
2917
2915
  )) {
2918
2916
  invariant(
@@ -2931,6 +2929,35 @@ function createStaticHandler(routes, opts) {
2931
2929
  },
2932
2930
  true,
2933
2931
  async () => {
2932
+ if (stream) {
2933
+ let res = await stream(
2934
+ requestContext,
2935
+ async (revalidationRequest) => {
2936
+ let result3 = await queryImpl(
2937
+ revalidationRequest,
2938
+ location,
2939
+ matches,
2940
+ requestContext,
2941
+ dataStrategy || null,
2942
+ false,
2943
+ match,
2944
+ null,
2945
+ false
2946
+ );
2947
+ if (isResponse(result3)) {
2948
+ return result3;
2949
+ }
2950
+ let error3 = result3.errors ? Object.values(result3.errors)[0] : void 0;
2951
+ if (error3 !== void 0) {
2952
+ throw error3;
2953
+ }
2954
+ let value2 = result3.actionData ? Object.values(result3.actionData)[0] : Object.values(result3.loaderData)[0];
2955
+ return typeof value2 === "string" ? new Response(value2) : Response.json(value2);
2956
+ }
2957
+ );
2958
+ return res;
2959
+ }
2960
+ invariant(respond, "Expected respond to be defined");
2934
2961
  let result2 = await queryImpl(
2935
2962
  request,
2936
2963
  location,
@@ -2950,16 +2977,15 @@ function createStaticHandler(routes, opts) {
2950
2977
  throw error2;
2951
2978
  }
2952
2979
  let value = result2.actionData ? Object.values(result2.actionData)[0] : Object.values(result2.loaderData)[0];
2953
- return typeof value === "string" ? new Response(value) : Response.json(value);
2980
+ return respond(
2981
+ typeof value === "string" ? new Response(value) : Response.json(value)
2982
+ );
2954
2983
  },
2955
2984
  (error2) => {
2956
2985
  if (isResponse(error2)) {
2957
- return respond(error2);
2986
+ return respond ? respond(error2) : error2;
2958
2987
  }
2959
- return new Response(String(error2), {
2960
- status: 500,
2961
- statusText: "Unexpected Server Error"
2962
- });
2988
+ throw error2;
2963
2989
  }
2964
2990
  );
2965
2991
  return response;
@@ -3951,7 +3977,22 @@ async function runMiddlewarePipeline(args, propagateResult, handler, errorHandle
3951
3977
  middlewareState,
3952
3978
  handler
3953
3979
  );
3954
- return propagateResult ? result : middlewareState.handlerResult;
3980
+ if (propagateResult) {
3981
+ invariant(
3982
+ isResponse(result) || isDataWithResponseInit(result),
3983
+ `Expected a Response to be returned from route middleware`
3984
+ );
3985
+ if (isDataWithResponseInit(result)) {
3986
+ return new Response(
3987
+ typeof result.data === "string" ? result.data : JSON.stringify(result.data),
3988
+ { ...result.init }
3989
+ );
3990
+ } else {
3991
+ return result;
3992
+ }
3993
+ } else {
3994
+ return middlewareState.handlerResult;
3995
+ }
3955
3996
  } catch (e) {
3956
3997
  if (!middlewareState.middlewareError) {
3957
3998
  throw e;
@@ -4011,14 +4052,25 @@ async function callRouteMiddleware(args, middlewares, propagateResult, middlewar
4011
4052
  },
4012
4053
  next
4013
4054
  );
4014
- if (nextCalled) {
4015
- if (result === void 0) {
4016
- return nextResult;
4017
- } else {
4055
+ if (propagateResult) {
4056
+ if (nextCalled) {
4057
+ return typeof result === "undefined" ? nextResult : result;
4058
+ } else if (isResponse(result) || isDataWithResponseInit(result)) {
4018
4059
  return result;
4060
+ } else {
4061
+ nextResult = await next();
4062
+ return nextResult;
4019
4063
  }
4020
4064
  } else {
4021
- return next();
4065
+ if (typeof result !== "undefined") {
4066
+ console.warn(
4067
+ "client middlewares are not intended to return values, the value will be ignored",
4068
+ result
4069
+ );
4070
+ }
4071
+ if (!nextCalled) {
4072
+ await next();
4073
+ }
4022
4074
  }
4023
4075
  } catch (error) {
4024
4076
  if (!middlewareState.middlewareError) {
@@ -7366,6 +7418,34 @@ import * as React9 from "react";
7366
7418
  // lib/dom/ssr/components.tsx
7367
7419
  import * as React8 from "react";
7368
7420
 
7421
+ // lib/dom/ssr/routeModules.ts
7422
+ async function loadRouteModule(route, routeModulesCache) {
7423
+ if (route.id in routeModulesCache) {
7424
+ return routeModulesCache[route.id];
7425
+ }
7426
+ try {
7427
+ let routeModule = await import(
7428
+ /* @vite-ignore */
7429
+ /* webpackIgnore: true */
7430
+ route.module
7431
+ );
7432
+ routeModulesCache[route.id] = routeModule;
7433
+ return routeModule;
7434
+ } catch (error) {
7435
+ console.error(
7436
+ `Error loading route module \`${route.module}\`, reloading page...`
7437
+ );
7438
+ console.error(error);
7439
+ if (window.__reactRouterContext && window.__reactRouterContext.isSpaMode && // @ts-expect-error
7440
+ import.meta.hot) {
7441
+ throw error;
7442
+ }
7443
+ window.location.reload();
7444
+ return new Promise(() => {
7445
+ });
7446
+ }
7447
+ }
7448
+
7369
7449
  // lib/dom/ssr/links.ts
7370
7450
  function getKeyedLinksForMatches(matches, routeModules, manifest) {
7371
7451
  let descriptors = matches.map((match) => {
@@ -7447,7 +7527,7 @@ function isHtmlLinkDescriptor(object) {
7447
7527
  }
7448
7528
  return typeof object.rel === "string" && typeof object.href === "string";
7449
7529
  }
7450
- async function getKeyedPrefetchLinks(matches, manifest, routeModules, loadRouteModule) {
7530
+ async function getKeyedPrefetchLinks(matches, manifest, routeModules) {
7451
7531
  let links = await Promise.all(
7452
7532
  matches.map(async (match) => {
7453
7533
  let route = manifest.routes[match.route.id];
@@ -7670,14 +7750,13 @@ function createServerRoutes(manifest, routeModules, future, isSpaMode, parentId
7670
7750
  return dataRoute;
7671
7751
  });
7672
7752
  }
7673
- function createClientRoutesWithHMRRevalidationOptOut(needsRevalidation, manifest, routeModulesCache, initialState, ssr, isSpaMode, loadRouteModule) {
7753
+ function createClientRoutesWithHMRRevalidationOptOut(needsRevalidation, manifest, routeModulesCache, initialState, ssr, isSpaMode) {
7674
7754
  return createClientRoutes(
7675
7755
  manifest,
7676
7756
  routeModulesCache,
7677
7757
  initialState,
7678
7758
  ssr,
7679
7759
  isSpaMode,
7680
- loadRouteModule,
7681
7760
  "",
7682
7761
  groupRoutesByParentId(manifest),
7683
7762
  needsRevalidation
@@ -7697,7 +7776,7 @@ function noActionDefinedError(type, routeId) {
7697
7776
  console.error(msg);
7698
7777
  throw new ErrorResponseImpl(405, "Method Not Allowed", new Error(msg), true);
7699
7778
  }
7700
- function createClientRoutes(manifest, routeModulesCache, initialState, ssr, isSpaMode, loadRouteModule, parentId = "", routesByParentId = groupRoutesByParentId(manifest), needsRevalidation) {
7779
+ function createClientRoutes(manifest, routeModulesCache, initialState, ssr, isSpaMode, parentId = "", routesByParentId = groupRoutesByParentId(manifest), needsRevalidation) {
7701
7780
  return (routesByParentId[parentId] || []).map((route) => {
7702
7781
  let routeModule = routeModulesCache[route.id];
7703
7782
  function fetchServerHandler(singleFetch) {
@@ -7852,8 +7931,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, ssr, isSp
7852
7931
  }
7853
7932
  let routeModulePromise = loadRouteModuleWithBlockingLinks(
7854
7933
  route,
7855
- routeModulesCache,
7856
- loadRouteModule
7934
+ routeModulesCache
7857
7935
  );
7858
7936
  prefetchRouteModuleChunks(route);
7859
7937
  return await routeModulePromise;
@@ -7928,7 +8006,6 @@ function createClientRoutes(manifest, routeModulesCache, initialState, ssr, isSp
7928
8006
  initialState,
7929
8007
  ssr,
7930
8008
  isSpaMode,
7931
- loadRouteModule,
7932
8009
  route.id,
7933
8010
  routesByParentId,
7934
8011
  needsRevalidation
@@ -7974,7 +8051,7 @@ function wrapShouldRevalidateForHdr(routeId, routeShouldRevalidate, needsRevalid
7974
8051
  return routeShouldRevalidate ? routeShouldRevalidate(arg) : arg.defaultShouldRevalidate;
7975
8052
  };
7976
8053
  }
7977
- async function loadRouteModuleWithBlockingLinks(route, routeModules, loadRouteModule) {
8054
+ async function loadRouteModuleWithBlockingLinks(route, routeModules) {
7978
8055
  let routeModulePromise = loadRouteModule(route, routeModules);
7979
8056
  let prefetchRouteCssPromise = prefetchRouteCss(route);
7980
8057
  let routeModule = await routeModulePromise;
@@ -8038,7 +8115,7 @@ function getPartialManifest({ sri, ...manifest }, router) {
8038
8115
  sri: sri ? true : void 0
8039
8116
  };
8040
8117
  }
8041
- function getPatchRoutesOnNavigationFunction(manifest, routeModules, ssr, routeDiscovery, isSpaMode, basename, loadRouteModule) {
8118
+ function getPatchRoutesOnNavigationFunction(manifest, routeModules, ssr, routeDiscovery, isSpaMode, basename) {
8042
8119
  if (!isFogOfWarEnabled(routeDiscovery, ssr)) {
8043
8120
  return void 0;
8044
8121
  }
@@ -8053,7 +8130,6 @@ function getPatchRoutesOnNavigationFunction(manifest, routeModules, ssr, routeDi
8053
8130
  routeModules,
8054
8131
  ssr,
8055
8132
  isSpaMode,
8056
- loadRouteModule,
8057
8133
  basename,
8058
8134
  routeDiscovery.manifestPath,
8059
8135
  patch,
@@ -8061,7 +8137,7 @@ function getPatchRoutesOnNavigationFunction(manifest, routeModules, ssr, routeDi
8061
8137
  );
8062
8138
  };
8063
8139
  }
8064
- function useFogOFWarDiscovery(router, manifest, routeModules, ssr, routeDiscovery, isSpaMode, loadRouteModule) {
8140
+ function useFogOFWarDiscovery(router, manifest, routeModules, ssr, routeDiscovery, isSpaMode) {
8065
8141
  React7.useEffect(() => {
8066
8142
  if (!isFogOfWarEnabled(routeDiscovery, ssr) || // @ts-expect-error - TS doesn't know about this yet
8067
8143
  window.navigator?.connection?.saveData === true) {
@@ -8097,7 +8173,6 @@ function useFogOFWarDiscovery(router, manifest, routeModules, ssr, routeDiscover
8097
8173
  routeModules,
8098
8174
  ssr,
8099
8175
  isSpaMode,
8100
- loadRouteModule,
8101
8176
  router.basename,
8102
8177
  routeDiscovery.manifestPath,
8103
8178
  router.patchRoutes
@@ -8116,15 +8191,7 @@ function useFogOFWarDiscovery(router, manifest, routeModules, ssr, routeDiscover
8116
8191
  attributeFilter: ["data-discover", "href", "action"]
8117
8192
  });
8118
8193
  return () => observer.disconnect();
8119
- }, [
8120
- ssr,
8121
- isSpaMode,
8122
- manifest,
8123
- routeModules,
8124
- router,
8125
- routeDiscovery,
8126
- loadRouteModule
8127
- ]);
8194
+ }, [ssr, isSpaMode, manifest, routeModules, router, routeDiscovery]);
8128
8195
  }
8129
8196
  function getManifestPath(_manifestPath, basename) {
8130
8197
  let manifestPath = _manifestPath || "/__manifest";
@@ -8134,13 +8201,15 @@ function getManifestPath(_manifestPath, basename) {
8134
8201
  return `${basename}${manifestPath}`.replace(/\/+/g, "/");
8135
8202
  }
8136
8203
  var MANIFEST_VERSION_STORAGE_KEY = "react-router-manifest-version";
8137
- async function fetchAndApplyManifestPatches(paths, errorReloadPath, manifest, routeModules, ssr, isSpaMode, loadRouteModule, basename, manifestPath, patchRoutes, signal) {
8204
+ async function fetchAndApplyManifestPatches(paths, errorReloadPath, manifest, routeModules, ssr, isSpaMode, basename, manifestPath, patchRoutes, signal) {
8205
+ const searchParams = new URLSearchParams();
8206
+ paths.sort().forEach((path) => searchParams.append("p", path));
8207
+ searchParams.set("version", manifest.version);
8138
8208
  let url = new URL(
8139
8209
  getManifestPath(manifestPath, basename),
8140
8210
  window.location.origin
8141
8211
  );
8142
- paths.sort().forEach((path) => url.searchParams.append("p", path));
8143
- url.searchParams.set("version", manifest.version);
8212
+ url.search = searchParams.toString();
8144
8213
  if (url.toString().length > URL_LIMIT) {
8145
8214
  nextPaths.clear();
8146
8215
  return;
@@ -8195,15 +8264,7 @@ async function fetchAndApplyManifestPatches(paths, errorReloadPath, manifest, ro
8195
8264
  parentIds.forEach(
8196
8265
  (parentId) => patchRoutes(
8197
8266
  parentId || null,
8198
- createClientRoutes(
8199
- patches,
8200
- routeModules,
8201
- null,
8202
- ssr,
8203
- isSpaMode,
8204
- loadRouteModule,
8205
- parentId
8206
- )
8267
+ createClientRoutes(patches, routeModules, null, ssr, isSpaMode, parentId)
8207
8268
  )
8208
8269
  );
8209
8270
  }
@@ -8326,7 +8387,7 @@ function getActiveMatches(matches, errors, isSpaMode) {
8326
8387
  return matches;
8327
8388
  }
8328
8389
  var CRITICAL_CSS_DATA_ATTRIBUTE = "data-react-router-critical-css";
8329
- function Links() {
8390
+ function Links({ nonce }) {
8330
8391
  let { isSpaMode, manifest, routeModules, criticalCss } = useFrameworkContext();
8331
8392
  let { errors, matches: routerMatches } = useDataRouterStateContext();
8332
8393
  let matches = getActiveMatches(routerMatches, errors, isSpaMode);
@@ -8345,10 +8406,11 @@ function Links() {
8345
8406
  {
8346
8407
  ...{ [CRITICAL_CSS_DATA_ATTRIBUTE]: "" },
8347
8408
  rel: "stylesheet",
8348
- href: criticalCss.href
8409
+ href: criticalCss.href,
8410
+ nonce
8349
8411
  }
8350
8412
  ) : null, keyedLinks.map(
8351
- ({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */ React8.createElement(PrefetchPageLinks, { key, ...link }) : /* @__PURE__ */ React8.createElement("link", { key, ...link })
8413
+ ({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */ React8.createElement(PrefetchPageLinks, { key, nonce, ...link }) : /* @__PURE__ */ React8.createElement("link", { key, nonce, ...link })
8352
8414
  ));
8353
8415
  }
8354
8416
  function PrefetchPageLinks({ page, ...linkProps }) {
@@ -8363,24 +8425,21 @@ function PrefetchPageLinks({ page, ...linkProps }) {
8363
8425
  return /* @__PURE__ */ React8.createElement(PrefetchPageLinksImpl, { page, matches, ...linkProps });
8364
8426
  }
8365
8427
  function useKeyedPrefetchLinks(matches) {
8366
- let { manifest, routeModules, loadRouteModule } = useFrameworkContext();
8428
+ let { manifest, routeModules } = useFrameworkContext();
8367
8429
  let [keyedPrefetchLinks, setKeyedPrefetchLinks] = React8.useState([]);
8368
8430
  React8.useEffect(() => {
8369
8431
  let interrupted = false;
8370
- void getKeyedPrefetchLinks(
8371
- matches,
8372
- manifest,
8373
- routeModules,
8374
- loadRouteModule
8375
- ).then((links) => {
8376
- if (!interrupted) {
8377
- setKeyedPrefetchLinks(links);
8432
+ void getKeyedPrefetchLinks(matches, manifest, routeModules).then(
8433
+ (links) => {
8434
+ if (!interrupted) {
8435
+ setKeyedPrefetchLinks(links);
8436
+ }
8378
8437
  }
8379
- });
8438
+ );
8380
8439
  return () => {
8381
8440
  interrupted = true;
8382
8441
  };
8383
- }, [matches, manifest, routeModules, loadRouteModule]);
8442
+ }, [matches, manifest, routeModules]);
8384
8443
  return keyedPrefetchLinks;
8385
8444
  }
8386
8445
  function PrefetchPageLinksImpl({
@@ -8462,7 +8521,7 @@ function PrefetchPageLinksImpl({
8462
8521
  return /* @__PURE__ */ React8.createElement(React8.Fragment, null, dataHrefs.map((href) => /* @__PURE__ */ React8.createElement("link", { key: href, rel: "prefetch", as: "fetch", href, ...linkProps })), moduleHrefs.map((href) => /* @__PURE__ */ React8.createElement("link", { key: href, rel: "modulepreload", href, ...linkProps })), keyedPrefetchLinks.map(({ key, link }) => (
8463
8522
  // these don't spread `linkProps` because they are full link descriptors
8464
8523
  // already with their own props
8465
- /* @__PURE__ */ React8.createElement("link", { key, ...link })
8524
+ /* @__PURE__ */ React8.createElement("link", { key, nonce: linkProps.nonce, ...link })
8466
8525
  )));
8467
8526
  }
8468
8527
  function Meta() {
@@ -8491,6 +8550,7 @@ function Meta() {
8491
8550
  let match = {
8492
8551
  id: routeId,
8493
8552
  data: data2,
8553
+ loaderData: data2,
8494
8554
  meta: [],
8495
8555
  params: _match.params,
8496
8556
  pathname: _match.pathname,
@@ -8501,6 +8561,7 @@ function Meta() {
8501
8561
  if (routeModule?.meta) {
8502
8562
  routeMeta = typeof routeModule.meta === "function" ? routeModule.meta({
8503
8563
  data: data2,
8564
+ loaderData: data2,
8504
8565
  params,
8505
8566
  location,
8506
8567
  matches,
@@ -8841,7 +8902,7 @@ var isBrowser = typeof window !== "undefined" && typeof window.document !== "und
8841
8902
  try {
8842
8903
  if (isBrowser) {
8843
8904
  window.__reactRouterVersion = // @ts-expect-error
8844
- "0.0.0-experimental-84753c0";
8905
+ "0.0.0-experimental-14dc7c1";
8845
8906
  }
8846
8907
  } catch (e) {
8847
8908
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-84753c0
2
+ * react-router v0.0.0-experimental-14dc7c1
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -57,40 +57,10 @@ import {
57
57
  withComponentProps,
58
58
  withErrorBoundaryProps,
59
59
  withHydrateFallbackProps
60
- } from "./chunk-7BNQ3X22.mjs";
60
+ } from "./chunk-7DQFGJJ6.mjs";
61
61
 
62
62
  // lib/dom/ssr/server.tsx
63
63
  import * as React from "react";
64
-
65
- // lib/dom/ssr/routeModules.ts
66
- var defaultLoadRouteModule = async (route, routeModulesCache) => {
67
- if (route.id in routeModulesCache) {
68
- return routeModulesCache[route.id];
69
- }
70
- try {
71
- let routeModule = await import(
72
- /* @vite-ignore */
73
- /* webpackIgnore: true */
74
- route.module
75
- );
76
- routeModulesCache[route.id] = routeModule;
77
- return routeModule;
78
- } catch (error) {
79
- console.error(
80
- `Error loading route module \`${route.module}\`, reloading page...`
81
- );
82
- console.error(error);
83
- if (window.__reactRouterContext && window.__reactRouterContext.isSpaMode && // @ts-expect-error
84
- import.meta.hot) {
85
- throw error;
86
- }
87
- window.location.reload();
88
- return new Promise(() => {
89
- });
90
- }
91
- };
92
-
93
- // lib/dom/ssr/server.tsx
94
64
  function ServerRouter({
95
65
  context,
96
66
  url,
@@ -136,8 +106,7 @@ function ServerRouter({
136
106
  isSpaMode: context.isSpaMode,
137
107
  routeDiscovery: context.routeDiscovery,
138
108
  serializeError: context.serializeError,
139
- renderMeta: context.renderMeta,
140
- loadRouteModule: defaultLoadRouteModule
109
+ renderMeta: context.renderMeta
141
110
  }
142
111
  },
143
112
  /* @__PURE__ */ React.createElement(RemixErrorBoundary, { location: router.state.location }, /* @__PURE__ */ React.createElement(
@@ -167,8 +136,7 @@ function createRoutesStub(routes, _context) {
167
136
  initialEntries,
168
137
  initialIndex,
169
138
  hydrationData,
170
- future,
171
- loadRouteModule = defaultLoadRouteModule
139
+ future
172
140
  }) {
173
141
  let routerRef = React2.useRef();
174
142
  let frameworkContextRef = React2.useRef();
@@ -187,7 +155,6 @@ function createRoutesStub(routes, _context) {
187
155
  routeModules: {},
188
156
  ssr: false,
189
157
  isSpaMode: false,
190
- loadRouteModule,
191
158
  routeDiscovery: { mode: "lazy", manifestPath: "/__manifest" }
192
159
  };
193
160
  let patched = processRoutes(
@@ -1107,23 +1074,14 @@ var createRequestHandler = (build, mode) => {
1107
1074
  });
1108
1075
  };
1109
1076
  if (_build.future.unstable_middleware) {
1110
- if (initialContext == null) {
1111
- loadContext = new unstable_RouterContextProvider();
1112
- } else {
1113
- try {
1114
- loadContext = new unstable_RouterContextProvider(
1115
- initialContext
1116
- );
1117
- } catch (e) {
1118
- let error = new Error(
1119
- `Unable to create initial \`unstable_RouterContextProvider\` instance. Please confirm you are returning an instance of \`Map<unstable_routerContext, unknown>\` from your \`getLoadContext\` function.
1120
-
1121
- Error: ${e instanceof Error ? e.toString() : e}`
1122
- );
1123
- handleError(error);
1124
- return returnLastResortErrorResponse(error, serverMode);
1125
- }
1077
+ if (initialContext && !(initialContext instanceof unstable_RouterContextProvider)) {
1078
+ let error = new Error(
1079
+ "Invalid `context` value provided to `handleRequest`. When middleware is enabled you must return an instance of `unstable_RouterContextProvider` from your `getLoadContext` function."
1080
+ );
1081
+ handleError(error);
1082
+ return returnLastResortErrorResponse(error, serverMode);
1126
1083
  }
1084
+ loadContext = initialContext || new unstable_RouterContextProvider();
1127
1085
  } else {
1128
1086
  loadContext = initialContext || {};
1129
1087
  }
@@ -1394,8 +1352,7 @@ async function handleDocumentRequest(serverMode, build, staticHandler, request,
1394
1352
  ssr: build.ssr,
1395
1353
  routeDiscovery: build.routeDiscovery,
1396
1354
  isSpaMode: isSpaMode2,
1397
- serializeError: (err) => serializeError(err, serverMode),
1398
- loadRouteModule: defaultLoadRouteModule
1355
+ serializeError: (err) => serializeError(err, serverMode)
1399
1356
  };
1400
1357
  let handleDocumentRequestFunction = build.entry.module.default;
1401
1358
  try {
@@ -1465,7 +1422,35 @@ async function handleResourceRequest(serverMode, build, staticHandler, routeId,
1465
1422
  let response = await staticHandler.queryRoute(request, {
1466
1423
  routeId,
1467
1424
  requestContext: loadContext,
1468
- unstable_respond: build.future.unstable_middleware ? (ctx) => ctx : void 0
1425
+ unstable_stream: build.future.unstable_middleware ? async (_, queryRoute) => {
1426
+ try {
1427
+ let result = await queryRoute(request);
1428
+ if (isResponse(result)) {
1429
+ return result;
1430
+ }
1431
+ if (typeof result === "string") {
1432
+ return new Response(result);
1433
+ }
1434
+ return Response.json(result);
1435
+ } catch (error) {
1436
+ if (isResponse(error)) {
1437
+ return error;
1438
+ }
1439
+ if (isRouteErrorResponse(error)) {
1440
+ handleError(error);
1441
+ return errorResponseToJson(error, serverMode);
1442
+ }
1443
+ if (error instanceof Error && error.message === "Expected a response from queryRoute") {
1444
+ let newError = new Error(
1445
+ "Expected a Response to be returned from resource route handler"
1446
+ );
1447
+ handleError(newError);
1448
+ return returnLastResortErrorResponse(newError, serverMode);
1449
+ }
1450
+ handleError(error);
1451
+ return returnLastResortErrorResponse(error, serverMode);
1452
+ }
1453
+ } : void 0
1469
1454
  });
1470
1455
  if (isResponse(response)) {
1471
1456
  return response;
@@ -2227,10 +2212,7 @@ function RSCHydratedRouter({
2227
2212
  }
2228
2213
  },
2229
2214
  routeDiscovery: { mode: "lazy", manifestPath: "/__manifest" },
2230
- routeModules: {},
2231
- loadRouteModule: () => {
2232
- throw new Error("Not required in RSC Mode");
2233
- }
2215
+ routeModules: {}
2234
2216
  };
2235
2217
  return /* @__PURE__ */ React4.createElement(RSCRouterContext.Provider, { value: true }, /* @__PURE__ */ React4.createElement(RSCRouterGlobalErrorBoundary, { location: location2 }, /* @__PURE__ */ React4.createElement(FrameworkContext.Provider, { value: frameworkContext }, /* @__PURE__ */ React4.createElement(RouterProvider, { router, flushSync: ReactDOM.flushSync }))));
2236
2218
  }
@@ -2619,10 +2601,7 @@ function RSCStaticRouter({ getPayload }) {
2619
2601
  }
2620
2602
  },
2621
2603
  routeDiscovery: { mode: "lazy", manifestPath: "/__manifest" },
2622
- routeModules: {},
2623
- loadRouteModule: () => {
2624
- throw new Error("Not required in RSC Mode");
2625
- }
2604
+ routeModules: {}
2626
2605
  };
2627
2606
  return /* @__PURE__ */ React5.createElement(RSCRouterContext.Provider, { value: true }, /* @__PURE__ */ React5.createElement(RSCRouterGlobalErrorBoundary, { location: payload.location }, /* @__PURE__ */ React5.createElement(FrameworkContext.Provider, { value: frameworkContext }, /* @__PURE__ */ React5.createElement(
2628
2607
  StaticRouterProvider,
@@ -2714,7 +2693,6 @@ function deserializeErrors(errors) {
2714
2693
  }
2715
2694
 
2716
2695
  export {
2717
- defaultLoadRouteModule,
2718
2696
  ServerRouter,
2719
2697
  createRoutesStub,
2720
2698
  createCookie,