react-router 0.0.0-experimental-7db49e8d4 → 0.0.0-experimental-98367e499

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -8796,7 +8796,7 @@ function mergeRefs(...refs) {
8796
8796
  var isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
8797
8797
  try {
8798
8798
  if (isBrowser) {
8799
- window.__reactRouterVersion = "0.0.0-experimental-7db49e8d4";
8799
+ window.__reactRouterVersion = "0.0.0-experimental-98367e499";
8800
8800
  }
8801
8801
  } catch (e) {
8802
8802
  }
@@ -12091,24 +12091,10 @@ async function routeRSCServerRequest({
12091
12091
  hydrate: hydrate2 = true
12092
12092
  }) {
12093
12093
  const url = new URL(request.url);
12094
- let serverRequest = request;
12095
12094
  const isDataRequest = isReactServerRequest(url);
12096
12095
  const respondWithRSCPayload = isDataRequest || isManifestRequest(url) || request.headers.has("rsc-action-id");
12097
- if (isDataRequest) {
12098
- const serverURL = new URL(request.url);
12099
- serverURL.pathname = serverURL.pathname.replace(/(_root)?\.rsc$/, "");
12100
- let headers = new Headers(request.headers);
12101
- headers.set("X-React-Router-Data-Request", "true");
12102
- serverRequest = new Request(serverURL, {
12103
- body: request.body,
12104
- duplex: request.body ? "half" : void 0,
12105
- headers,
12106
- method: request.method,
12107
- signal: request.signal
12108
- });
12109
- }
12110
- const serverResponse = await callServer(serverRequest);
12111
- if (respondWithRSCPayload) {
12096
+ const serverResponse = await callServer(request);
12097
+ if (respondWithRSCPayload || serverResponse.headers.get("React-Router-Resource") === "true") {
12112
12098
  return serverResponse;
12113
12099
  }
12114
12100
  if (!serverResponse.body) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -26,7 +26,7 @@ import {
26
26
  invariant,
27
27
  mapRouteProperties,
28
28
  useFogOFWarDiscovery
29
- } from "./chunk-UKHDCHH6.mjs";
29
+ } from "./chunk-5SSRSIGF.mjs";
30
30
 
31
31
  // lib/dom-export/dom-router-provider.tsx
32
32
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -8955,7 +8955,7 @@ function mergeRefs(...refs) {
8955
8955
  var isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
8956
8956
  try {
8957
8957
  if (isBrowser) {
8958
- window.__reactRouterVersion = "0.0.0-experimental-7db49e8d4";
8958
+ window.__reactRouterVersion = "0.0.0-experimental-98367e499";
8959
8959
  }
8960
8960
  } catch (e) {
8961
8961
  }
@@ -12250,24 +12250,10 @@ async function routeRSCServerRequest({
12250
12250
  hydrate: hydrate2 = true
12251
12251
  }) {
12252
12252
  const url = new URL(request.url);
12253
- let serverRequest = request;
12254
12253
  const isDataRequest = isReactServerRequest(url);
12255
12254
  const respondWithRSCPayload = isDataRequest || isManifestRequest(url) || request.headers.has("rsc-action-id");
12256
- if (isDataRequest) {
12257
- const serverURL = new URL(request.url);
12258
- serverURL.pathname = serverURL.pathname.replace(/(_root)?\.rsc$/, "");
12259
- let headers = new Headers(request.headers);
12260
- headers.set("X-React-Router-Data-Request", "true");
12261
- serverRequest = new Request(serverURL, {
12262
- body: request.body,
12263
- duplex: request.body ? "half" : void 0,
12264
- headers,
12265
- method: request.method,
12266
- signal: request.signal
12267
- });
12268
- }
12269
- const serverResponse = await callServer(serverRequest);
12270
- if (respondWithRSCPayload) {
12255
+ const serverResponse = await callServer(request);
12256
+ if (respondWithRSCPayload || serverResponse.headers.get("React-Router-Resource") === "true") {
12271
12257
  return serverResponse;
12272
12258
  }
12273
12259
  if (!serverResponse.body) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -134,7 +134,7 @@ import {
134
134
  withComponentProps,
135
135
  withErrorBoundaryProps,
136
136
  withHydrateFallbackProps
137
- } from "./chunk-UKHDCHH6.mjs";
137
+ } from "./chunk-5SSRSIGF.mjs";
138
138
  export {
139
139
  Await,
140
140
  BrowserRouter,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -25,7 +25,7 @@ function _interopNamespace(e) {
25
25
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
26
 
27
27
  /**
28
- * react-router v0.0.0-experimental-7db49e8d4
28
+ * react-router v0.0.0-experimental-98367e499
29
29
  *
30
30
  * Copyright (c) Remix Software Inc.
31
31
  *
@@ -2453,8 +2453,8 @@ async function matchRSCServerRequest({
2453
2453
  routes,
2454
2454
  generateResponse
2455
2455
  }) {
2456
- const url = new URL(request.url);
2457
- if (isManifestRequest(url)) {
2456
+ let requestUrl = new URL(request.url);
2457
+ if (isManifestRequest(requestUrl)) {
2458
2458
  let response2 = await generateManifestResponse(
2459
2459
  routes,
2460
2460
  request,
@@ -2462,9 +2462,36 @@ async function matchRSCServerRequest({
2462
2462
  );
2463
2463
  return response2;
2464
2464
  }
2465
+ let isDataRequest = isReactServerRequest(requestUrl);
2466
+ const url = new URL(request.url);
2467
+ let routerRequest = request;
2468
+ if (isDataRequest) {
2469
+ url.pathname = url.pathname.replace(/(_root)?\.rsc$/, "");
2470
+ routerRequest = new Request(url.toString(), {
2471
+ method: request.method,
2472
+ headers: request.headers,
2473
+ body: request.body,
2474
+ signal: request.signal,
2475
+ duplex: request.body ? "half" : void 0
2476
+ });
2477
+ }
2478
+ let matches = matchRoutes(routes, url.pathname);
2479
+ if (matches) {
2480
+ await Promise.all(matches.map((m) => explodeLazyRoute(m.route)));
2481
+ }
2482
+ const leafMatch = matches?.[matches.length - 1];
2483
+ if (!isDataRequest && leafMatch && !leafMatch.route.Component && !leafMatch.route.ErrorBoundary) {
2484
+ return generateResourceResponse(
2485
+ routerRequest,
2486
+ routes,
2487
+ leafMatch.route.id,
2488
+ onError
2489
+ );
2490
+ }
2465
2491
  let response = await generateRenderResponse(
2466
- request,
2492
+ routerRequest,
2467
2493
  routes,
2494
+ isDataRequest,
2468
2495
  decodeCallServer,
2469
2496
  decodeFormAction,
2470
2497
  onError,
@@ -2536,43 +2563,76 @@ async function processServerAction(request, decodeCallServer, decodeFormAction,
2536
2563
  revalidationRequest: getRevalidationRequest()
2537
2564
  };
2538
2565
  }
2539
- if (request.method === "POST") {
2540
- const clone = request.clone();
2541
- const formData = await request.formData();
2542
- if (Array.from(formData.keys()).some((k) => k.startsWith("$ACTION_"))) {
2543
- if (!decodeFormAction) {
2544
- throw new Error(
2545
- "Cannot handle form actions without a decodeFormAction function"
2546
- );
2547
- }
2548
- const action = await decodeFormAction(formData);
2549
- try {
2550
- await action();
2551
- } catch (error) {
2552
- if (isResponse(error)) {
2553
- return error;
2554
- }
2555
- onError?.(error);
2566
+ const clone = request.clone();
2567
+ const formData = await request.formData();
2568
+ if (Array.from(formData.keys()).some((k) => k.startsWith("$ACTION_"))) {
2569
+ if (!decodeFormAction) {
2570
+ throw new Error(
2571
+ "Cannot handle form actions without a decodeFormAction function"
2572
+ );
2573
+ }
2574
+ const action = await decodeFormAction(formData);
2575
+ try {
2576
+ await action();
2577
+ } catch (error) {
2578
+ if (isResponse(error)) {
2579
+ return error;
2556
2580
  }
2557
- return {
2558
- revalidationRequest: getRevalidationRequest()
2559
- };
2581
+ onError?.(error);
2560
2582
  }
2561
2583
  return {
2562
- revalidationRequest: clone
2584
+ revalidationRequest: getRevalidationRequest()
2563
2585
  };
2564
2586
  }
2587
+ return {
2588
+ revalidationRequest: clone
2589
+ };
2590
+ }
2591
+ async function generateResourceResponse(request, routes, routeId, onError) {
2592
+ let result;
2593
+ try {
2594
+ const staticHandler = createStaticHandler(routes, {
2595
+ // TODO: Support basename
2596
+ // basename
2597
+ });
2598
+ let response = await staticHandler.queryRoute(request, {
2599
+ routeId,
2600
+ // TODO: Support loadContext
2601
+ // requestContext: loadContext,
2602
+ unstable_respond: (ctx) => ctx
2603
+ });
2604
+ if (isResponse(response)) {
2605
+ result = response;
2606
+ } else {
2607
+ if (typeof response === "string") {
2608
+ result = new Response(response);
2609
+ } else {
2610
+ result = Response.json(response);
2611
+ }
2612
+ }
2613
+ } catch (error) {
2614
+ if (isResponse(error)) {
2615
+ result = error;
2616
+ } else {
2617
+ onError?.(error);
2618
+ result = new Response("Internal Server Error", {
2619
+ status: 500
2620
+ });
2621
+ }
2622
+ }
2623
+ const headers = new Headers(result.headers);
2624
+ headers.set("React-Router-Resource", "true");
2625
+ return new Response(result.body, {
2626
+ status: result.status,
2627
+ statusText: result.statusText,
2628
+ headers
2629
+ });
2565
2630
  }
2566
- async function generateRenderResponse(request, routes, decodeCallServer, decodeFormAction, onError, generateResponse) {
2631
+ async function generateRenderResponse(request, routes, isDataRequest, decodeCallServer, decodeFormAction, onError, generateResponse) {
2567
2632
  let statusCode = 200;
2568
2633
  let url = new URL(request.url);
2569
- let isDataRequest = request.headers.has("X-React-Router-Data-Request");
2570
2634
  let isSubmission = isMutationMethod(request.method);
2571
2635
  let routeIdsToLoad = !isSubmission && url.searchParams.has("_routes") ? url.searchParams.get("_routes").split(",") : null;
2572
- let matches = matchRoutes(routes, url.pathname);
2573
- if (matches) {
2574
- await Promise.all(matches.map((m) => explodeLazyRoute(m.route)));
2575
- }
2576
2636
  const handler = createStaticHandler(routes, {
2577
2637
  mapRouteProperties: (r) => ({
2578
2638
  hasErrorBoundary: r.ErrorBoundary != null
@@ -2881,6 +2941,9 @@ async function getAdditionalRoutePatches(pathnames, routes, matchedRouteIds) {
2881
2941
  );
2882
2942
  return patches;
2883
2943
  }
2944
+ function isReactServerRequest(url) {
2945
+ return url.pathname.endsWith(".rsc");
2946
+ }
2884
2947
  function isManifestRequest(url) {
2885
2948
  return url.pathname.endsWith(".manifest");
2886
2949
  }
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { splitCookiesString } from 'set-cookie-parser';
4
4
 
5
5
  /**
6
- * react-router v0.0.0-experimental-7db49e8d4
6
+ * react-router v0.0.0-experimental-98367e499
7
7
  *
8
8
  * Copyright (c) Remix Software Inc.
9
9
  *
@@ -2431,8 +2431,8 @@ async function matchRSCServerRequest({
2431
2431
  routes,
2432
2432
  generateResponse
2433
2433
  }) {
2434
- const url = new URL(request.url);
2435
- if (isManifestRequest(url)) {
2434
+ let requestUrl = new URL(request.url);
2435
+ if (isManifestRequest(requestUrl)) {
2436
2436
  let response2 = await generateManifestResponse(
2437
2437
  routes,
2438
2438
  request,
@@ -2440,9 +2440,36 @@ async function matchRSCServerRequest({
2440
2440
  );
2441
2441
  return response2;
2442
2442
  }
2443
+ let isDataRequest = isReactServerRequest(requestUrl);
2444
+ const url = new URL(request.url);
2445
+ let routerRequest = request;
2446
+ if (isDataRequest) {
2447
+ url.pathname = url.pathname.replace(/(_root)?\.rsc$/, "");
2448
+ routerRequest = new Request(url.toString(), {
2449
+ method: request.method,
2450
+ headers: request.headers,
2451
+ body: request.body,
2452
+ signal: request.signal,
2453
+ duplex: request.body ? "half" : void 0
2454
+ });
2455
+ }
2456
+ let matches = matchRoutes(routes, url.pathname);
2457
+ if (matches) {
2458
+ await Promise.all(matches.map((m) => explodeLazyRoute(m.route)));
2459
+ }
2460
+ const leafMatch = matches?.[matches.length - 1];
2461
+ if (!isDataRequest && leafMatch && !leafMatch.route.Component && !leafMatch.route.ErrorBoundary) {
2462
+ return generateResourceResponse(
2463
+ routerRequest,
2464
+ routes,
2465
+ leafMatch.route.id,
2466
+ onError
2467
+ );
2468
+ }
2443
2469
  let response = await generateRenderResponse(
2444
- request,
2470
+ routerRequest,
2445
2471
  routes,
2472
+ isDataRequest,
2446
2473
  decodeCallServer,
2447
2474
  decodeFormAction,
2448
2475
  onError,
@@ -2514,43 +2541,76 @@ async function processServerAction(request, decodeCallServer, decodeFormAction,
2514
2541
  revalidationRequest: getRevalidationRequest()
2515
2542
  };
2516
2543
  }
2517
- if (request.method === "POST") {
2518
- const clone = request.clone();
2519
- const formData = await request.formData();
2520
- if (Array.from(formData.keys()).some((k) => k.startsWith("$ACTION_"))) {
2521
- if (!decodeFormAction) {
2522
- throw new Error(
2523
- "Cannot handle form actions without a decodeFormAction function"
2524
- );
2525
- }
2526
- const action = await decodeFormAction(formData);
2527
- try {
2528
- await action();
2529
- } catch (error) {
2530
- if (isResponse(error)) {
2531
- return error;
2532
- }
2533
- onError?.(error);
2544
+ const clone = request.clone();
2545
+ const formData = await request.formData();
2546
+ if (Array.from(formData.keys()).some((k) => k.startsWith("$ACTION_"))) {
2547
+ if (!decodeFormAction) {
2548
+ throw new Error(
2549
+ "Cannot handle form actions without a decodeFormAction function"
2550
+ );
2551
+ }
2552
+ const action = await decodeFormAction(formData);
2553
+ try {
2554
+ await action();
2555
+ } catch (error) {
2556
+ if (isResponse(error)) {
2557
+ return error;
2534
2558
  }
2535
- return {
2536
- revalidationRequest: getRevalidationRequest()
2537
- };
2559
+ onError?.(error);
2538
2560
  }
2539
2561
  return {
2540
- revalidationRequest: clone
2562
+ revalidationRequest: getRevalidationRequest()
2541
2563
  };
2542
2564
  }
2565
+ return {
2566
+ revalidationRequest: clone
2567
+ };
2568
+ }
2569
+ async function generateResourceResponse(request, routes, routeId, onError) {
2570
+ let result;
2571
+ try {
2572
+ const staticHandler = createStaticHandler(routes, {
2573
+ // TODO: Support basename
2574
+ // basename
2575
+ });
2576
+ let response = await staticHandler.queryRoute(request, {
2577
+ routeId,
2578
+ // TODO: Support loadContext
2579
+ // requestContext: loadContext,
2580
+ unstable_respond: (ctx) => ctx
2581
+ });
2582
+ if (isResponse(response)) {
2583
+ result = response;
2584
+ } else {
2585
+ if (typeof response === "string") {
2586
+ result = new Response(response);
2587
+ } else {
2588
+ result = Response.json(response);
2589
+ }
2590
+ }
2591
+ } catch (error) {
2592
+ if (isResponse(error)) {
2593
+ result = error;
2594
+ } else {
2595
+ onError?.(error);
2596
+ result = new Response("Internal Server Error", {
2597
+ status: 500
2598
+ });
2599
+ }
2600
+ }
2601
+ const headers = new Headers(result.headers);
2602
+ headers.set("React-Router-Resource", "true");
2603
+ return new Response(result.body, {
2604
+ status: result.status,
2605
+ statusText: result.statusText,
2606
+ headers
2607
+ });
2543
2608
  }
2544
- async function generateRenderResponse(request, routes, decodeCallServer, decodeFormAction, onError, generateResponse) {
2609
+ async function generateRenderResponse(request, routes, isDataRequest, decodeCallServer, decodeFormAction, onError, generateResponse) {
2545
2610
  let statusCode = 200;
2546
2611
  let url = new URL(request.url);
2547
- let isDataRequest = request.headers.has("X-React-Router-Data-Request");
2548
2612
  let isSubmission = isMutationMethod(request.method);
2549
2613
  let routeIdsToLoad = !isSubmission && url.searchParams.has("_routes") ? url.searchParams.get("_routes").split(",") : null;
2550
- let matches = matchRoutes(routes, url.pathname);
2551
- if (matches) {
2552
- await Promise.all(matches.map((m) => explodeLazyRoute(m.route)));
2553
- }
2554
2614
  const handler = createStaticHandler(routes, {
2555
2615
  mapRouteProperties: (r) => ({
2556
2616
  hasErrorBoundary: r.ErrorBoundary != null
@@ -2859,6 +2919,9 @@ async function getAdditionalRoutePatches(pathnames, routes, matchedRouteIds) {
2859
2919
  );
2860
2920
  return patches;
2861
2921
  }
2922
+ function isReactServerRequest(url) {
2923
+ return url.pathname.endsWith(".rsc");
2924
+ }
2862
2925
  function isManifestRequest(url) {
2863
2926
  return url.pathname.endsWith(".manifest");
2864
2927
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -8796,7 +8796,7 @@ function mergeRefs(...refs) {
8796
8796
  var isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
8797
8797
  try {
8798
8798
  if (isBrowser) {
8799
- window.__reactRouterVersion = "0.0.0-experimental-7db49e8d4";
8799
+ window.__reactRouterVersion = "0.0.0-experimental-98367e499";
8800
8800
  }
8801
8801
  } catch (e) {
8802
8802
  }
@@ -12091,24 +12091,10 @@ async function routeRSCServerRequest({
12091
12091
  hydrate: hydrate2 = true
12092
12092
  }) {
12093
12093
  const url = new URL(request.url);
12094
- let serverRequest = request;
12095
12094
  const isDataRequest = isReactServerRequest(url);
12096
12095
  const respondWithRSCPayload = isDataRequest || isManifestRequest(url) || request.headers.has("rsc-action-id");
12097
- if (isDataRequest) {
12098
- const serverURL = new URL(request.url);
12099
- serverURL.pathname = serverURL.pathname.replace(/(_root)?\.rsc$/, "");
12100
- let headers = new Headers(request.headers);
12101
- headers.set("X-React-Router-Data-Request", "true");
12102
- serverRequest = new Request(serverURL, {
12103
- body: request.body,
12104
- duplex: request.body ? "half" : void 0,
12105
- headers,
12106
- method: request.method,
12107
- signal: request.signal
12108
- });
12109
- }
12110
- const serverResponse = await callServer(serverRequest);
12111
- if (respondWithRSCPayload) {
12096
+ const serverResponse = await callServer(request);
12097
+ if (respondWithRSCPayload || serverResponse.headers.get("React-Router-Resource") === "true") {
12112
12098
  return serverResponse;
12113
12099
  }
12114
12100
  if (!serverResponse.body) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -26,7 +26,7 @@ import {
26
26
  invariant,
27
27
  mapRouteProperties,
28
28
  useFogOFWarDiscovery
29
- } from "./chunk-ZA7BCDUO.mjs";
29
+ } from "./chunk-6YOGVME4.mjs";
30
30
 
31
31
  // lib/dom-export/dom-router-provider.tsx
32
32
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -8955,7 +8955,7 @@ function mergeRefs(...refs) {
8955
8955
  var isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
8956
8956
  try {
8957
8957
  if (isBrowser) {
8958
- window.__reactRouterVersion = "0.0.0-experimental-7db49e8d4";
8958
+ window.__reactRouterVersion = "0.0.0-experimental-98367e499";
8959
8959
  }
8960
8960
  } catch (e) {
8961
8961
  }
@@ -12250,24 +12250,10 @@ async function routeRSCServerRequest({
12250
12250
  hydrate: hydrate2 = true
12251
12251
  }) {
12252
12252
  const url = new URL(request.url);
12253
- let serverRequest = request;
12254
12253
  const isDataRequest = isReactServerRequest(url);
12255
12254
  const respondWithRSCPayload = isDataRequest || isManifestRequest(url) || request.headers.has("rsc-action-id");
12256
- if (isDataRequest) {
12257
- const serverURL = new URL(request.url);
12258
- serverURL.pathname = serverURL.pathname.replace(/(_root)?\.rsc$/, "");
12259
- let headers = new Headers(request.headers);
12260
- headers.set("X-React-Router-Data-Request", "true");
12261
- serverRequest = new Request(serverURL, {
12262
- body: request.body,
12263
- duplex: request.body ? "half" : void 0,
12264
- headers,
12265
- method: request.method,
12266
- signal: request.signal
12267
- });
12268
- }
12269
- const serverResponse = await callServer(serverRequest);
12270
- if (respondWithRSCPayload) {
12255
+ const serverResponse = await callServer(request);
12256
+ if (respondWithRSCPayload || serverResponse.headers.get("React-Router-Resource") === "true") {
12271
12257
  return serverResponse;
12272
12258
  }
12273
12259
  if (!serverResponse.body) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -134,7 +134,7 @@ import {
134
134
  withComponentProps,
135
135
  withErrorBoundaryProps,
136
136
  withHydrateFallbackProps
137
- } from "./chunk-ZA7BCDUO.mjs";
137
+ } from "./chunk-6YOGVME4.mjs";
138
138
  export {
139
139
  Await,
140
140
  BrowserRouter,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * react-router v0.0.0-experimental-7db49e8d4
2
+ * react-router v0.0.0-experimental-98367e499
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -25,7 +25,7 @@ function _interopNamespace(e) {
25
25
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
26
 
27
27
  /**
28
- * react-router v0.0.0-experimental-7db49e8d4
28
+ * react-router v0.0.0-experimental-98367e499
29
29
  *
30
30
  * Copyright (c) Remix Software Inc.
31
31
  *
@@ -2453,8 +2453,8 @@ async function matchRSCServerRequest({
2453
2453
  routes,
2454
2454
  generateResponse
2455
2455
  }) {
2456
- const url = new URL(request.url);
2457
- if (isManifestRequest(url)) {
2456
+ let requestUrl = new URL(request.url);
2457
+ if (isManifestRequest(requestUrl)) {
2458
2458
  let response2 = await generateManifestResponse(
2459
2459
  routes,
2460
2460
  request,
@@ -2462,9 +2462,36 @@ async function matchRSCServerRequest({
2462
2462
  );
2463
2463
  return response2;
2464
2464
  }
2465
+ let isDataRequest = isReactServerRequest(requestUrl);
2466
+ const url = new URL(request.url);
2467
+ let routerRequest = request;
2468
+ if (isDataRequest) {
2469
+ url.pathname = url.pathname.replace(/(_root)?\.rsc$/, "");
2470
+ routerRequest = new Request(url.toString(), {
2471
+ method: request.method,
2472
+ headers: request.headers,
2473
+ body: request.body,
2474
+ signal: request.signal,
2475
+ duplex: request.body ? "half" : void 0
2476
+ });
2477
+ }
2478
+ let matches = matchRoutes(routes, url.pathname);
2479
+ if (matches) {
2480
+ await Promise.all(matches.map((m) => explodeLazyRoute(m.route)));
2481
+ }
2482
+ const leafMatch = matches?.[matches.length - 1];
2483
+ if (!isDataRequest && leafMatch && !leafMatch.route.Component && !leafMatch.route.ErrorBoundary) {
2484
+ return generateResourceResponse(
2485
+ routerRequest,
2486
+ routes,
2487
+ leafMatch.route.id,
2488
+ onError
2489
+ );
2490
+ }
2465
2491
  let response = await generateRenderResponse(
2466
- request,
2492
+ routerRequest,
2467
2493
  routes,
2494
+ isDataRequest,
2468
2495
  decodeCallServer,
2469
2496
  decodeFormAction,
2470
2497
  onError,
@@ -2536,43 +2563,76 @@ async function processServerAction(request, decodeCallServer, decodeFormAction,
2536
2563
  revalidationRequest: getRevalidationRequest()
2537
2564
  };
2538
2565
  }
2539
- if (request.method === "POST") {
2540
- const clone = request.clone();
2541
- const formData = await request.formData();
2542
- if (Array.from(formData.keys()).some((k) => k.startsWith("$ACTION_"))) {
2543
- if (!decodeFormAction) {
2544
- throw new Error(
2545
- "Cannot handle form actions without a decodeFormAction function"
2546
- );
2547
- }
2548
- const action = await decodeFormAction(formData);
2549
- try {
2550
- await action();
2551
- } catch (error) {
2552
- if (isResponse(error)) {
2553
- return error;
2554
- }
2555
- onError?.(error);
2566
+ const clone = request.clone();
2567
+ const formData = await request.formData();
2568
+ if (Array.from(formData.keys()).some((k) => k.startsWith("$ACTION_"))) {
2569
+ if (!decodeFormAction) {
2570
+ throw new Error(
2571
+ "Cannot handle form actions without a decodeFormAction function"
2572
+ );
2573
+ }
2574
+ const action = await decodeFormAction(formData);
2575
+ try {
2576
+ await action();
2577
+ } catch (error) {
2578
+ if (isResponse(error)) {
2579
+ return error;
2556
2580
  }
2557
- return {
2558
- revalidationRequest: getRevalidationRequest()
2559
- };
2581
+ onError?.(error);
2560
2582
  }
2561
2583
  return {
2562
- revalidationRequest: clone
2584
+ revalidationRequest: getRevalidationRequest()
2563
2585
  };
2564
2586
  }
2587
+ return {
2588
+ revalidationRequest: clone
2589
+ };
2590
+ }
2591
+ async function generateResourceResponse(request, routes, routeId, onError) {
2592
+ let result;
2593
+ try {
2594
+ const staticHandler = createStaticHandler(routes, {
2595
+ // TODO: Support basename
2596
+ // basename
2597
+ });
2598
+ let response = await staticHandler.queryRoute(request, {
2599
+ routeId,
2600
+ // TODO: Support loadContext
2601
+ // requestContext: loadContext,
2602
+ unstable_respond: (ctx) => ctx
2603
+ });
2604
+ if (isResponse(response)) {
2605
+ result = response;
2606
+ } else {
2607
+ if (typeof response === "string") {
2608
+ result = new Response(response);
2609
+ } else {
2610
+ result = Response.json(response);
2611
+ }
2612
+ }
2613
+ } catch (error) {
2614
+ if (isResponse(error)) {
2615
+ result = error;
2616
+ } else {
2617
+ onError?.(error);
2618
+ result = new Response("Internal Server Error", {
2619
+ status: 500
2620
+ });
2621
+ }
2622
+ }
2623
+ const headers = new Headers(result.headers);
2624
+ headers.set("React-Router-Resource", "true");
2625
+ return new Response(result.body, {
2626
+ status: result.status,
2627
+ statusText: result.statusText,
2628
+ headers
2629
+ });
2565
2630
  }
2566
- async function generateRenderResponse(request, routes, decodeCallServer, decodeFormAction, onError, generateResponse) {
2631
+ async function generateRenderResponse(request, routes, isDataRequest, decodeCallServer, decodeFormAction, onError, generateResponse) {
2567
2632
  let statusCode = 200;
2568
2633
  let url = new URL(request.url);
2569
- let isDataRequest = request.headers.has("X-React-Router-Data-Request");
2570
2634
  let isSubmission = isMutationMethod(request.method);
2571
2635
  let routeIdsToLoad = !isSubmission && url.searchParams.has("_routes") ? url.searchParams.get("_routes").split(",") : null;
2572
- let matches = matchRoutes(routes, url.pathname);
2573
- if (matches) {
2574
- await Promise.all(matches.map((m) => explodeLazyRoute(m.route)));
2575
- }
2576
2636
  const handler = createStaticHandler(routes, {
2577
2637
  mapRouteProperties: (r) => ({
2578
2638
  hasErrorBoundary: r.ErrorBoundary != null
@@ -2881,6 +2941,9 @@ async function getAdditionalRoutePatches(pathnames, routes, matchedRouteIds) {
2881
2941
  );
2882
2942
  return patches;
2883
2943
  }
2944
+ function isReactServerRequest(url) {
2945
+ return url.pathname.endsWith(".rsc");
2946
+ }
2884
2947
  function isManifestRequest(url) {
2885
2948
  return url.pathname.endsWith(".manifest");
2886
2949
  }
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { splitCookiesString } from 'set-cookie-parser';
4
4
 
5
5
  /**
6
- * react-router v0.0.0-experimental-7db49e8d4
6
+ * react-router v0.0.0-experimental-98367e499
7
7
  *
8
8
  * Copyright (c) Remix Software Inc.
9
9
  *
@@ -2431,8 +2431,8 @@ async function matchRSCServerRequest({
2431
2431
  routes,
2432
2432
  generateResponse
2433
2433
  }) {
2434
- const url = new URL(request.url);
2435
- if (isManifestRequest(url)) {
2434
+ let requestUrl = new URL(request.url);
2435
+ if (isManifestRequest(requestUrl)) {
2436
2436
  let response2 = await generateManifestResponse(
2437
2437
  routes,
2438
2438
  request,
@@ -2440,9 +2440,36 @@ async function matchRSCServerRequest({
2440
2440
  );
2441
2441
  return response2;
2442
2442
  }
2443
+ let isDataRequest = isReactServerRequest(requestUrl);
2444
+ const url = new URL(request.url);
2445
+ let routerRequest = request;
2446
+ if (isDataRequest) {
2447
+ url.pathname = url.pathname.replace(/(_root)?\.rsc$/, "");
2448
+ routerRequest = new Request(url.toString(), {
2449
+ method: request.method,
2450
+ headers: request.headers,
2451
+ body: request.body,
2452
+ signal: request.signal,
2453
+ duplex: request.body ? "half" : void 0
2454
+ });
2455
+ }
2456
+ let matches = matchRoutes(routes, url.pathname);
2457
+ if (matches) {
2458
+ await Promise.all(matches.map((m) => explodeLazyRoute(m.route)));
2459
+ }
2460
+ const leafMatch = matches?.[matches.length - 1];
2461
+ if (!isDataRequest && leafMatch && !leafMatch.route.Component && !leafMatch.route.ErrorBoundary) {
2462
+ return generateResourceResponse(
2463
+ routerRequest,
2464
+ routes,
2465
+ leafMatch.route.id,
2466
+ onError
2467
+ );
2468
+ }
2443
2469
  let response = await generateRenderResponse(
2444
- request,
2470
+ routerRequest,
2445
2471
  routes,
2472
+ isDataRequest,
2446
2473
  decodeCallServer,
2447
2474
  decodeFormAction,
2448
2475
  onError,
@@ -2514,43 +2541,76 @@ async function processServerAction(request, decodeCallServer, decodeFormAction,
2514
2541
  revalidationRequest: getRevalidationRequest()
2515
2542
  };
2516
2543
  }
2517
- if (request.method === "POST") {
2518
- const clone = request.clone();
2519
- const formData = await request.formData();
2520
- if (Array.from(formData.keys()).some((k) => k.startsWith("$ACTION_"))) {
2521
- if (!decodeFormAction) {
2522
- throw new Error(
2523
- "Cannot handle form actions without a decodeFormAction function"
2524
- );
2525
- }
2526
- const action = await decodeFormAction(formData);
2527
- try {
2528
- await action();
2529
- } catch (error) {
2530
- if (isResponse(error)) {
2531
- return error;
2532
- }
2533
- onError?.(error);
2544
+ const clone = request.clone();
2545
+ const formData = await request.formData();
2546
+ if (Array.from(formData.keys()).some((k) => k.startsWith("$ACTION_"))) {
2547
+ if (!decodeFormAction) {
2548
+ throw new Error(
2549
+ "Cannot handle form actions without a decodeFormAction function"
2550
+ );
2551
+ }
2552
+ const action = await decodeFormAction(formData);
2553
+ try {
2554
+ await action();
2555
+ } catch (error) {
2556
+ if (isResponse(error)) {
2557
+ return error;
2534
2558
  }
2535
- return {
2536
- revalidationRequest: getRevalidationRequest()
2537
- };
2559
+ onError?.(error);
2538
2560
  }
2539
2561
  return {
2540
- revalidationRequest: clone
2562
+ revalidationRequest: getRevalidationRequest()
2541
2563
  };
2542
2564
  }
2565
+ return {
2566
+ revalidationRequest: clone
2567
+ };
2568
+ }
2569
+ async function generateResourceResponse(request, routes, routeId, onError) {
2570
+ let result;
2571
+ try {
2572
+ const staticHandler = createStaticHandler(routes, {
2573
+ // TODO: Support basename
2574
+ // basename
2575
+ });
2576
+ let response = await staticHandler.queryRoute(request, {
2577
+ routeId,
2578
+ // TODO: Support loadContext
2579
+ // requestContext: loadContext,
2580
+ unstable_respond: (ctx) => ctx
2581
+ });
2582
+ if (isResponse(response)) {
2583
+ result = response;
2584
+ } else {
2585
+ if (typeof response === "string") {
2586
+ result = new Response(response);
2587
+ } else {
2588
+ result = Response.json(response);
2589
+ }
2590
+ }
2591
+ } catch (error) {
2592
+ if (isResponse(error)) {
2593
+ result = error;
2594
+ } else {
2595
+ onError?.(error);
2596
+ result = new Response("Internal Server Error", {
2597
+ status: 500
2598
+ });
2599
+ }
2600
+ }
2601
+ const headers = new Headers(result.headers);
2602
+ headers.set("React-Router-Resource", "true");
2603
+ return new Response(result.body, {
2604
+ status: result.status,
2605
+ statusText: result.statusText,
2606
+ headers
2607
+ });
2543
2608
  }
2544
- async function generateRenderResponse(request, routes, decodeCallServer, decodeFormAction, onError, generateResponse) {
2609
+ async function generateRenderResponse(request, routes, isDataRequest, decodeCallServer, decodeFormAction, onError, generateResponse) {
2545
2610
  let statusCode = 200;
2546
2611
  let url = new URL(request.url);
2547
- let isDataRequest = request.headers.has("X-React-Router-Data-Request");
2548
2612
  let isSubmission = isMutationMethod(request.method);
2549
2613
  let routeIdsToLoad = !isSubmission && url.searchParams.has("_routes") ? url.searchParams.get("_routes").split(",") : null;
2550
- let matches = matchRoutes(routes, url.pathname);
2551
- if (matches) {
2552
- await Promise.all(matches.map((m) => explodeLazyRoute(m.route)));
2553
- }
2554
2614
  const handler = createStaticHandler(routes, {
2555
2615
  mapRouteProperties: (r) => ({
2556
2616
  hasErrorBoundary: r.ErrorBoundary != null
@@ -2859,6 +2919,9 @@ async function getAdditionalRoutePatches(pathnames, routes, matchedRouteIds) {
2859
2919
  );
2860
2920
  return patches;
2861
2921
  }
2922
+ function isReactServerRequest(url) {
2923
+ return url.pathname.endsWith(".rsc");
2924
+ }
2862
2925
  function isManifestRequest(url) {
2863
2926
  return url.pathname.endsWith(".manifest");
2864
2927
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-router",
3
- "version": "0.0.0-experimental-7db49e8d4",
3
+ "version": "0.0.0-experimental-98367e499",
4
4
  "description": "Declarative routing for React",
5
5
  "keywords": [
6
6
  "react",