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.
- package/CHANGELOG.md +0 -10
- package/dist/development/{chunk-5XVYBMAF.mjs → chunk-H3OBLXFX.mjs} +767 -514
- package/dist/development/dom-export.d.mts +13 -3
- package/dist/development/dom-export.d.ts +13 -3
- package/dist/development/dom-export.js +272 -108
- package/dist/development/dom-export.mjs +9 -6
- package/dist/{production/fog-of-war-7V7BguJA.d.ts → development/fog-of-war-Bt7PejVF.d.ts} +91 -6
- package/dist/development/{fog-of-war-NQCW9yWR.d.mts → fog-of-war-Dz4n-TU-.d.mts} +91 -6
- package/dist/development/index.d.mts +10 -19
- package/dist/development/index.d.ts +10 -19
- package/dist/development/index.js +767 -514
- package/dist/development/index.mjs +2 -2
- package/dist/development/lib/types/route-module.d.mts +6 -2
- package/dist/development/lib/types/route-module.d.ts +6 -2
- package/dist/development/lib/types/route-module.js +1 -1
- package/dist/development/lib/types/route-module.mjs +1 -1
- package/dist/development/{route-data-JFOfNyPS.d.ts → route-data-C96IyGKo.d.mts} +37 -15
- package/dist/{production/route-data-JFOfNyPS.d.mts → development/route-data-C96IyGKo.d.ts} +37 -15
- package/dist/production/{chunk-CKFZHSMW.mjs → chunk-YBZNESR7.mjs} +767 -514
- package/dist/production/dom-export.d.mts +13 -3
- package/dist/production/dom-export.d.ts +13 -3
- package/dist/production/dom-export.js +272 -108
- package/dist/production/dom-export.mjs +9 -6
- package/dist/{development/fog-of-war-7V7BguJA.d.ts → production/fog-of-war-Bt7PejVF.d.ts} +91 -6
- package/dist/production/{fog-of-war-NQCW9yWR.d.mts → fog-of-war-Dz4n-TU-.d.mts} +91 -6
- package/dist/production/index.d.mts +10 -19
- package/dist/production/index.d.ts +10 -19
- package/dist/production/index.js +767 -514
- package/dist/production/index.mjs +2 -2
- package/dist/production/lib/types/route-module.d.mts +6 -2
- package/dist/production/lib/types/route-module.d.ts +6 -2
- package/dist/production/lib/types/route-module.js +1 -1
- package/dist/production/lib/types/route-module.mjs +1 -1
- package/dist/production/{route-data-JFOfNyPS.d.ts → route-data-C96IyGKo.d.mts} +37 -15
- package/dist/{development/route-data-JFOfNyPS.d.mts → production/route-data-C96IyGKo.d.ts} +37 -15
- package/package.json +2 -17
- package/dist/development/server.d.mts +0 -988
- package/dist/development/server.d.ts +0 -988
- package/dist/development/server.js +0 -1429
- package/dist/development/server.mjs +0 -1406
- package/dist/production/server.d.mts +0 -988
- package/dist/production/server.d.ts +0 -988
- package/dist/production/server.js +0 -1405
- package/dist/production/server.mjs +0 -1382
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* react-router v0.0.0-experimental-
|
|
2
|
+
* react-router v0.0.0-experimental-e41ede670
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -812,7 +812,10 @@ var redirect = (url, init = 302) => {
|
|
|
812
812
|
}
|
|
813
813
|
let headers = new Headers(responseInit.headers);
|
|
814
814
|
headers.set("Location", url);
|
|
815
|
-
return new Response(null, {
|
|
815
|
+
return new Response(null, {
|
|
816
|
+
...responseInit,
|
|
817
|
+
headers
|
|
818
|
+
});
|
|
816
819
|
};
|
|
817
820
|
var redirectDocument = (url, init) => {
|
|
818
821
|
let response = redirect(url, init);
|
|
@@ -907,6 +910,7 @@ function createRouter(init) {
|
|
|
907
910
|
);
|
|
908
911
|
let inFlightDataRoutes;
|
|
909
912
|
let basename = init.basename || "/";
|
|
913
|
+
let routerContext = typeof init.context !== "undefined" ? init.context : {};
|
|
910
914
|
let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;
|
|
911
915
|
let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;
|
|
912
916
|
let future = {
|
|
@@ -1095,11 +1099,6 @@ function createRouter(init) {
|
|
|
1095
1099
|
}
|
|
1096
1100
|
}
|
|
1097
1101
|
});
|
|
1098
|
-
fetchersQueuedForDeletion.forEach((key) => {
|
|
1099
|
-
if (!state.fetchers.has(key) && !fetchControllers.has(key)) {
|
|
1100
|
-
unmountedFetchers.push(key);
|
|
1101
|
-
}
|
|
1102
|
-
});
|
|
1103
1102
|
[...subscribers].forEach(
|
|
1104
1103
|
(subscriber) => subscriber(state, {
|
|
1105
1104
|
deletedFetchers: unmountedFetchers,
|
|
@@ -1482,6 +1481,14 @@ function createRouter(init) {
|
|
|
1482
1481
|
null
|
|
1483
1482
|
);
|
|
1484
1483
|
result = results[actionMatch.route.id];
|
|
1484
|
+
if (!result) {
|
|
1485
|
+
for (let match of matches) {
|
|
1486
|
+
if (results[match.route.id]) {
|
|
1487
|
+
result = results[match.route.id];
|
|
1488
|
+
break;
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1485
1492
|
if (request.signal.aborted) {
|
|
1486
1493
|
return { shortCircuited: true };
|
|
1487
1494
|
}
|
|
@@ -2143,13 +2150,13 @@ function createRouter(init) {
|
|
|
2143
2150
|
results = await callDataStrategyImpl(
|
|
2144
2151
|
dataStrategyImpl,
|
|
2145
2152
|
type,
|
|
2146
|
-
state2,
|
|
2147
2153
|
request,
|
|
2148
2154
|
matchesToLoad,
|
|
2149
2155
|
matches,
|
|
2150
2156
|
fetcherKey,
|
|
2151
2157
|
manifest,
|
|
2152
|
-
mapRouteProperties2
|
|
2158
|
+
mapRouteProperties2,
|
|
2159
|
+
routerContext
|
|
2153
2160
|
);
|
|
2154
2161
|
} catch (e) {
|
|
2155
2162
|
matchesToLoad.forEach((m) => {
|
|
@@ -2575,16 +2582,18 @@ function createStaticHandler(routes, opts) {
|
|
|
2575
2582
|
async function query(request, {
|
|
2576
2583
|
requestContext,
|
|
2577
2584
|
skipLoaderErrorBubbling,
|
|
2578
|
-
dataStrategy
|
|
2585
|
+
dataStrategy,
|
|
2586
|
+
respond
|
|
2579
2587
|
} = {}) {
|
|
2580
2588
|
let url = new URL(request.url);
|
|
2581
2589
|
let method = request.method;
|
|
2582
2590
|
let location = createLocation("", createPath(url), null, "default");
|
|
2583
2591
|
let matches = matchRoutes(dataRoutes, location, basename);
|
|
2592
|
+
let staticContext;
|
|
2584
2593
|
if (!isValidMethod(method) && method !== "HEAD") {
|
|
2585
2594
|
let error = getInternalRouterError(405, { method });
|
|
2586
2595
|
let { matches: methodNotAllowedMatches, route } = getShortCircuitMatches(dataRoutes);
|
|
2587
|
-
|
|
2596
|
+
staticContext = {
|
|
2588
2597
|
basename,
|
|
2589
2598
|
location,
|
|
2590
2599
|
matches: methodNotAllowedMatches,
|
|
@@ -2600,7 +2609,7 @@ function createStaticHandler(routes, opts) {
|
|
|
2600
2609
|
} else if (!matches) {
|
|
2601
2610
|
let error = getInternalRouterError(404, { pathname: location.pathname });
|
|
2602
2611
|
let { matches: notFoundMatches, route } = getShortCircuitMatches(dataRoutes);
|
|
2603
|
-
|
|
2612
|
+
staticContext = {
|
|
2604
2613
|
basename,
|
|
2605
2614
|
location,
|
|
2606
2615
|
matches: notFoundMatches,
|
|
@@ -2613,25 +2622,76 @@ function createStaticHandler(routes, opts) {
|
|
|
2613
2622
|
loaderHeaders: {},
|
|
2614
2623
|
actionHeaders: {}
|
|
2615
2624
|
};
|
|
2625
|
+
} else if (respond) {
|
|
2626
|
+
try {
|
|
2627
|
+
let response = await runMiddlewarePipeline(
|
|
2628
|
+
{
|
|
2629
|
+
request,
|
|
2630
|
+
matches,
|
|
2631
|
+
params: matches[0].params,
|
|
2632
|
+
context: requestContext
|
|
2633
|
+
},
|
|
2634
|
+
matches.length - 1,
|
|
2635
|
+
true,
|
|
2636
|
+
async () => {
|
|
2637
|
+
let result = await callQueryHandlers(
|
|
2638
|
+
request,
|
|
2639
|
+
location,
|
|
2640
|
+
matches,
|
|
2641
|
+
requestContext,
|
|
2642
|
+
dataStrategy || defaultDataStrategyWithoutMiddleware,
|
|
2643
|
+
skipLoaderErrorBubbling === true,
|
|
2644
|
+
null
|
|
2645
|
+
);
|
|
2646
|
+
if (isResponse(result)) {
|
|
2647
|
+
return result;
|
|
2648
|
+
}
|
|
2649
|
+
let res = await respond({
|
|
2650
|
+
location,
|
|
2651
|
+
basename,
|
|
2652
|
+
...result
|
|
2653
|
+
});
|
|
2654
|
+
return res;
|
|
2655
|
+
}
|
|
2656
|
+
);
|
|
2657
|
+
invariant(isResponse(response), "Expected a response in query()");
|
|
2658
|
+
return response;
|
|
2659
|
+
} catch (e) {
|
|
2660
|
+
if (isResponse(e)) {
|
|
2661
|
+
return e;
|
|
2662
|
+
}
|
|
2663
|
+
throw e;
|
|
2664
|
+
}
|
|
2665
|
+
} else {
|
|
2666
|
+
let result = await callQueryHandlers(
|
|
2667
|
+
request,
|
|
2668
|
+
location,
|
|
2669
|
+
matches,
|
|
2670
|
+
requestContext,
|
|
2671
|
+
dataStrategy || null,
|
|
2672
|
+
skipLoaderErrorBubbling === true,
|
|
2673
|
+
null
|
|
2674
|
+
);
|
|
2675
|
+
if (isResponse(result)) {
|
|
2676
|
+
return result;
|
|
2677
|
+
}
|
|
2678
|
+
staticContext = {
|
|
2679
|
+
location,
|
|
2680
|
+
basename,
|
|
2681
|
+
...result
|
|
2682
|
+
};
|
|
2616
2683
|
}
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
matches,
|
|
2621
|
-
requestContext,
|
|
2622
|
-
dataStrategy || null,
|
|
2623
|
-
skipLoaderErrorBubbling === true,
|
|
2624
|
-
null
|
|
2625
|
-
);
|
|
2626
|
-
if (isResponse(result)) {
|
|
2627
|
-
return result;
|
|
2684
|
+
if (respond) {
|
|
2685
|
+
let res = await respond(staticContext);
|
|
2686
|
+
return res;
|
|
2628
2687
|
}
|
|
2629
|
-
return
|
|
2688
|
+
return staticContext;
|
|
2630
2689
|
}
|
|
2631
2690
|
async function queryRoute(request, {
|
|
2632
2691
|
routeId,
|
|
2633
2692
|
requestContext,
|
|
2634
|
-
dataStrategy
|
|
2693
|
+
dataStrategy,
|
|
2694
|
+
respond
|
|
2635
2695
|
} = {}) {
|
|
2636
2696
|
let url = new URL(request.url);
|
|
2637
2697
|
let method = request.method;
|
|
@@ -2651,31 +2711,64 @@ function createStaticHandler(routes, opts) {
|
|
|
2651
2711
|
} else if (!match) {
|
|
2652
2712
|
throw getInternalRouterError(404, { pathname: location.pathname });
|
|
2653
2713
|
}
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2714
|
+
if (respond) {
|
|
2715
|
+
let response = await runMiddlewarePipeline(
|
|
2716
|
+
{
|
|
2717
|
+
request,
|
|
2718
|
+
matches,
|
|
2719
|
+
params: matches[0].params,
|
|
2720
|
+
context: requestContext
|
|
2721
|
+
},
|
|
2722
|
+
matches.length - 1,
|
|
2723
|
+
true,
|
|
2724
|
+
async () => {
|
|
2725
|
+
let result = await callQueryHandlers(
|
|
2726
|
+
request,
|
|
2727
|
+
location,
|
|
2728
|
+
matches,
|
|
2729
|
+
requestContext,
|
|
2730
|
+
dataStrategy || defaultDataStrategyWithoutMiddleware,
|
|
2731
|
+
false,
|
|
2732
|
+
match
|
|
2733
|
+
);
|
|
2734
|
+
if (isResponse(result)) {
|
|
2735
|
+
return result;
|
|
2736
|
+
}
|
|
2737
|
+
let error = result.errors ? Object.values(result.errors)[0] : void 0;
|
|
2738
|
+
if (error !== void 0) {
|
|
2739
|
+
throw error;
|
|
2740
|
+
}
|
|
2741
|
+
throw new Error("Expected a response from queryRoute");
|
|
2742
|
+
}
|
|
2743
|
+
);
|
|
2744
|
+
return response;
|
|
2745
|
+
} else {
|
|
2746
|
+
let result = await callQueryHandlers(
|
|
2747
|
+
request,
|
|
2748
|
+
location,
|
|
2749
|
+
matches,
|
|
2750
|
+
requestContext,
|
|
2751
|
+
dataStrategy || null,
|
|
2752
|
+
false,
|
|
2753
|
+
match
|
|
2754
|
+
);
|
|
2755
|
+
if (isResponse(result)) {
|
|
2756
|
+
return result;
|
|
2757
|
+
}
|
|
2758
|
+
let error = result.errors ? Object.values(result.errors)[0] : void 0;
|
|
2759
|
+
if (error !== void 0) {
|
|
2760
|
+
throw error;
|
|
2761
|
+
}
|
|
2762
|
+
if (result.actionData) {
|
|
2763
|
+
return Object.values(result.actionData)[0];
|
|
2764
|
+
}
|
|
2765
|
+
if (result.loaderData) {
|
|
2766
|
+
return Object.values(result.loaderData)[0];
|
|
2767
|
+
}
|
|
2768
|
+
return void 0;
|
|
2675
2769
|
}
|
|
2676
|
-
return void 0;
|
|
2677
2770
|
}
|
|
2678
|
-
async function
|
|
2771
|
+
async function callQueryHandlers(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) {
|
|
2679
2772
|
invariant(
|
|
2680
2773
|
request.signal,
|
|
2681
2774
|
"query()/queryRoute() requests must contain an AbortController signal"
|
|
@@ -2780,7 +2873,7 @@ function createStaticHandler(routes, opts) {
|
|
|
2780
2873
|
});
|
|
2781
2874
|
if (isErrorResult(result)) {
|
|
2782
2875
|
let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);
|
|
2783
|
-
let
|
|
2876
|
+
let handlerContext2 = await loadRouteData(
|
|
2784
2877
|
loaderRequest,
|
|
2785
2878
|
matches,
|
|
2786
2879
|
requestContext,
|
|
@@ -2790,7 +2883,7 @@ function createStaticHandler(routes, opts) {
|
|
|
2790
2883
|
[boundaryMatch.route.id, result]
|
|
2791
2884
|
);
|
|
2792
2885
|
return {
|
|
2793
|
-
...
|
|
2886
|
+
...handlerContext2,
|
|
2794
2887
|
statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,
|
|
2795
2888
|
actionData: null,
|
|
2796
2889
|
actionHeaders: {
|
|
@@ -2798,7 +2891,7 @@ function createStaticHandler(routes, opts) {
|
|
|
2798
2891
|
}
|
|
2799
2892
|
};
|
|
2800
2893
|
}
|
|
2801
|
-
let
|
|
2894
|
+
let handlerContext = await loadRouteData(
|
|
2802
2895
|
loaderRequest,
|
|
2803
2896
|
matches,
|
|
2804
2897
|
requestContext,
|
|
@@ -2807,7 +2900,7 @@ function createStaticHandler(routes, opts) {
|
|
|
2807
2900
|
null
|
|
2808
2901
|
);
|
|
2809
2902
|
return {
|
|
2810
|
-
...
|
|
2903
|
+
...handlerContext,
|
|
2811
2904
|
actionData: {
|
|
2812
2905
|
[actionMatch.route.id]: result.data
|
|
2813
2906
|
},
|
|
@@ -2856,7 +2949,7 @@ function createStaticHandler(routes, opts) {
|
|
|
2856
2949
|
if (request.signal.aborted) {
|
|
2857
2950
|
throwStaticHandlerAbortedError(request, isRouteRequest);
|
|
2858
2951
|
}
|
|
2859
|
-
let
|
|
2952
|
+
let handlerContext = processRouteLoaderData(
|
|
2860
2953
|
matches,
|
|
2861
2954
|
results,
|
|
2862
2955
|
pendingActionResult,
|
|
@@ -2868,26 +2961,25 @@ function createStaticHandler(routes, opts) {
|
|
|
2868
2961
|
);
|
|
2869
2962
|
matches.forEach((match) => {
|
|
2870
2963
|
if (!executedLoaders.has(match.route.id)) {
|
|
2871
|
-
|
|
2964
|
+
handlerContext.loaderData[match.route.id] = null;
|
|
2872
2965
|
}
|
|
2873
2966
|
});
|
|
2874
2967
|
return {
|
|
2875
|
-
...
|
|
2968
|
+
...handlerContext,
|
|
2876
2969
|
matches
|
|
2877
2970
|
};
|
|
2878
2971
|
}
|
|
2879
|
-
async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest,
|
|
2972
|
+
async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, routerContext, dataStrategy) {
|
|
2880
2973
|
let results = await callDataStrategyImpl(
|
|
2881
2974
|
dataStrategy || defaultDataStrategy,
|
|
2882
2975
|
type,
|
|
2883
|
-
null,
|
|
2884
2976
|
request,
|
|
2885
2977
|
matchesToLoad,
|
|
2886
2978
|
matches,
|
|
2887
2979
|
null,
|
|
2888
2980
|
manifest,
|
|
2889
2981
|
mapRouteProperties2,
|
|
2890
|
-
|
|
2982
|
+
routerContext
|
|
2891
2983
|
);
|
|
2892
2984
|
let dataResults = {};
|
|
2893
2985
|
await Promise.all(
|
|
@@ -2920,15 +3012,14 @@ function createStaticHandler(routes, opts) {
|
|
|
2920
3012
|
queryRoute
|
|
2921
3013
|
};
|
|
2922
3014
|
}
|
|
2923
|
-
function getStaticContextFromError(routes,
|
|
2924
|
-
|
|
2925
|
-
...
|
|
3015
|
+
function getStaticContextFromError(routes, handlerContext, error) {
|
|
3016
|
+
return {
|
|
3017
|
+
...handlerContext,
|
|
2926
3018
|
statusCode: isRouteErrorResponse(error) ? error.status : 500,
|
|
2927
3019
|
errors: {
|
|
2928
|
-
[
|
|
3020
|
+
[handlerContext._deepestRenderedBoundaryId || routes[0].id]: error
|
|
2929
3021
|
}
|
|
2930
3022
|
};
|
|
2931
|
-
return newContext;
|
|
2932
3023
|
}
|
|
2933
3024
|
function throwStaticHandlerAbortedError(request, isRouteRequest) {
|
|
2934
3025
|
if (request.signal.reason !== void 0) {
|
|
@@ -3321,20 +3412,133 @@ async function loadLazyRouteModule(route, mapRouteProperties2, manifest) {
|
|
|
3321
3412
|
lazy: void 0
|
|
3322
3413
|
});
|
|
3323
3414
|
}
|
|
3324
|
-
async function
|
|
3325
|
-
matches
|
|
3326
|
-
|
|
3327
|
-
let matchesToLoad = matches.filter((m) => m.shouldLoad);
|
|
3415
|
+
async function defaultDataStrategyWithoutMiddleware(args) {
|
|
3416
|
+
let matchesToLoad = args.matches.filter((m) => m.shouldLoad);
|
|
3417
|
+
let keyedResults = {};
|
|
3328
3418
|
let results = await Promise.all(matchesToLoad.map((m) => m.resolve()));
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
|
|
3419
|
+
results.forEach((result, i) => {
|
|
3420
|
+
keyedResults[matchesToLoad[i].route.id] = result;
|
|
3421
|
+
});
|
|
3422
|
+
return keyedResults;
|
|
3423
|
+
}
|
|
3424
|
+
async function defaultDataStrategy(args) {
|
|
3425
|
+
let matchesToLoad = args.matches.filter((m) => m.shouldLoad);
|
|
3426
|
+
let lastIndex = args.matches.length - 1;
|
|
3427
|
+
for (let i = lastIndex; i >= 0; i--) {
|
|
3428
|
+
if (args.matches[i].shouldLoad) {
|
|
3429
|
+
lastIndex = i;
|
|
3430
|
+
break;
|
|
3431
|
+
}
|
|
3432
|
+
}
|
|
3433
|
+
let results = await runMiddlewarePipeline(
|
|
3434
|
+
args,
|
|
3435
|
+
lastIndex,
|
|
3436
|
+
false,
|
|
3437
|
+
async (keyedResults) => {
|
|
3438
|
+
let results2 = await Promise.all(matchesToLoad.map((m) => m.resolve()));
|
|
3439
|
+
results2.forEach((result, i) => {
|
|
3440
|
+
keyedResults[matchesToLoad[i].route.id] = result;
|
|
3441
|
+
});
|
|
3442
|
+
}
|
|
3332
3443
|
);
|
|
3444
|
+
return results;
|
|
3333
3445
|
}
|
|
3334
|
-
async function
|
|
3446
|
+
async function runMiddlewarePipeline({
|
|
3447
|
+
request,
|
|
3448
|
+
params,
|
|
3449
|
+
context,
|
|
3450
|
+
matches
|
|
3451
|
+
}, lastIndex, propagateResult, handler) {
|
|
3452
|
+
let keyedResults = {};
|
|
3453
|
+
try {
|
|
3454
|
+
let result = await callRouteMiddleware(
|
|
3455
|
+
matches.slice(0, lastIndex + 1).flatMap(
|
|
3456
|
+
(m) => m.route.middleware ? m.route.middleware.map((fn) => [m.route.id, fn]) : []
|
|
3457
|
+
),
|
|
3458
|
+
0,
|
|
3459
|
+
{ request, params, context },
|
|
3460
|
+
keyedResults,
|
|
3461
|
+
propagateResult,
|
|
3462
|
+
handler
|
|
3463
|
+
);
|
|
3464
|
+
return propagateResult ? result : keyedResults;
|
|
3465
|
+
} catch (e) {
|
|
3466
|
+
if (!(e instanceof MiddlewareError)) {
|
|
3467
|
+
throw e;
|
|
3468
|
+
}
|
|
3469
|
+
if (propagateResult && isResponse(e.error)) {
|
|
3470
|
+
throw e.error;
|
|
3471
|
+
}
|
|
3472
|
+
return {
|
|
3473
|
+
...keyedResults,
|
|
3474
|
+
[e.routeId]: { type: "error", result: e.error }
|
|
3475
|
+
};
|
|
3476
|
+
}
|
|
3477
|
+
}
|
|
3478
|
+
var MiddlewareError = class {
|
|
3479
|
+
constructor(routeId, error) {
|
|
3480
|
+
this.routeId = routeId;
|
|
3481
|
+
this.error = error;
|
|
3482
|
+
}
|
|
3483
|
+
};
|
|
3484
|
+
async function callRouteMiddleware(middlewares, idx, args, keyedResults, propagateResult, handler) {
|
|
3485
|
+
let { request } = args;
|
|
3486
|
+
if (request.signal.aborted) {
|
|
3487
|
+
if (request.signal.reason) {
|
|
3488
|
+
throw request.signal.reason;
|
|
3489
|
+
}
|
|
3490
|
+
throw new Error(
|
|
3491
|
+
`Request aborted without an \`AbortSignal.reason\`: ${request.method} ${request.url}`
|
|
3492
|
+
);
|
|
3493
|
+
}
|
|
3494
|
+
let tuple = middlewares[idx];
|
|
3495
|
+
if (!tuple) {
|
|
3496
|
+
let result = await handler(keyedResults);
|
|
3497
|
+
return result;
|
|
3498
|
+
}
|
|
3499
|
+
let [routeId, middleware] = tuple;
|
|
3500
|
+
let nextCalled = false;
|
|
3501
|
+
let next = async () => {
|
|
3502
|
+
if (nextCalled) {
|
|
3503
|
+
throw new Error("You may only call `next()` once per middleware");
|
|
3504
|
+
}
|
|
3505
|
+
nextCalled = true;
|
|
3506
|
+
let result = await callRouteMiddleware(
|
|
3507
|
+
middlewares,
|
|
3508
|
+
idx + 1,
|
|
3509
|
+
args,
|
|
3510
|
+
keyedResults,
|
|
3511
|
+
propagateResult,
|
|
3512
|
+
handler
|
|
3513
|
+
);
|
|
3514
|
+
return propagateResult ? result : void 0;
|
|
3515
|
+
};
|
|
3516
|
+
try {
|
|
3517
|
+
let result = await middleware(args, next);
|
|
3518
|
+
if (!nextCalled) {
|
|
3519
|
+
result = await next();
|
|
3520
|
+
}
|
|
3521
|
+
return result;
|
|
3522
|
+
} catch (e) {
|
|
3523
|
+
if (e instanceof MiddlewareError) {
|
|
3524
|
+
throw e;
|
|
3525
|
+
}
|
|
3526
|
+
throw new MiddlewareError(routeId, e);
|
|
3527
|
+
}
|
|
3528
|
+
}
|
|
3529
|
+
async function callDataStrategyImpl(dataStrategyImpl, type, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties2, routerContext) {
|
|
3335
3530
|
let loadRouteDefinitionsPromises = matches.map(
|
|
3336
3531
|
(m) => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties2, manifest) : void 0
|
|
3337
3532
|
);
|
|
3533
|
+
let lazyMiddlewarePromises = matches.map(
|
|
3534
|
+
(m, i) => m.route.lazy && !("middleware" in m.route) ? (
|
|
3535
|
+
// Swallow the error here, let it bubble up from resolve()
|
|
3536
|
+
loadRouteDefinitionsPromises[i].catch((e) => e)
|
|
3537
|
+
) : null
|
|
3538
|
+
).filter((p) => p != null);
|
|
3539
|
+
if (lazyMiddlewarePromises.length > 0) {
|
|
3540
|
+
await Promise.all(lazyMiddlewarePromises);
|
|
3541
|
+
}
|
|
3338
3542
|
let dsMatches = matches.map((match, i) => {
|
|
3339
3543
|
let loadRoutePromise = loadRouteDefinitionsPromises[i];
|
|
3340
3544
|
let shouldLoad = matchesToLoad.some((m) => m.route.id === match.route.id);
|
|
@@ -3348,7 +3552,7 @@ async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matc
|
|
|
3348
3552
|
match,
|
|
3349
3553
|
loadRoutePromise,
|
|
3350
3554
|
handlerOverride,
|
|
3351
|
-
|
|
3555
|
+
routerContext
|
|
3352
3556
|
) : Promise.resolve({ type: "data" /* data */, result: void 0 });
|
|
3353
3557
|
};
|
|
3354
3558
|
return {
|
|
@@ -3362,7 +3566,7 @@ async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matc
|
|
|
3362
3566
|
request,
|
|
3363
3567
|
params: matches[0].params,
|
|
3364
3568
|
fetcherKey,
|
|
3365
|
-
context:
|
|
3569
|
+
context: routerContext
|
|
3366
3570
|
});
|
|
3367
3571
|
try {
|
|
3368
3572
|
await Promise.all(loadRouteDefinitionsPromises);
|
|
@@ -3370,7 +3574,7 @@ async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matc
|
|
|
3370
3574
|
}
|
|
3371
3575
|
return results;
|
|
3372
3576
|
}
|
|
3373
|
-
async function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride,
|
|
3577
|
+
async function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, routerContext) {
|
|
3374
3578
|
let result;
|
|
3375
3579
|
let onReject;
|
|
3376
3580
|
let runHandler = (handler) => {
|
|
@@ -3390,7 +3594,7 @@ async function callLoaderOrAction(type, request, match, loadRoutePromise, handle
|
|
|
3390
3594
|
{
|
|
3391
3595
|
request,
|
|
3392
3596
|
params: match.params,
|
|
3393
|
-
context:
|
|
3597
|
+
context: routerContext
|
|
3394
3598
|
},
|
|
3395
3599
|
...ctx !== void 0 ? [ctx] : []
|
|
3396
3600
|
);
|
|
@@ -4024,7 +4228,7 @@ function createDeferred() {
|
|
|
4024
4228
|
}
|
|
4025
4229
|
|
|
4026
4230
|
// lib/components.tsx
|
|
4027
|
-
import * as
|
|
4231
|
+
import * as React3 from "react";
|
|
4028
4232
|
|
|
4029
4233
|
// lib/context.ts
|
|
4030
4234
|
import * as React from "react";
|
|
@@ -4642,23 +4846,8 @@ function warnOnce(condition, message) {
|
|
|
4642
4846
|
}
|
|
4643
4847
|
}
|
|
4644
4848
|
|
|
4645
|
-
// lib/
|
|
4646
|
-
import * as React3 from "react";
|
|
4849
|
+
// lib/components.tsx
|
|
4647
4850
|
var ENABLE_DEV_WARNINGS2 = false;
|
|
4648
|
-
function createHref(to) {
|
|
4649
|
-
return typeof to === "string" ? to : createPath(to);
|
|
4650
|
-
}
|
|
4651
|
-
function encodeLocation(to) {
|
|
4652
|
-
let href = typeof to === "string" ? to : createPath(to);
|
|
4653
|
-
href = href.replace(/ $/, "%20");
|
|
4654
|
-
let encoded = ABSOLUTE_URL_REGEX2.test(href) ? new URL(href) : new URL(href, "http://localhost");
|
|
4655
|
-
return {
|
|
4656
|
-
pathname: encoded.pathname,
|
|
4657
|
-
search: encoded.search,
|
|
4658
|
-
hash: encoded.hash
|
|
4659
|
-
};
|
|
4660
|
-
}
|
|
4661
|
-
var ABSOLUTE_URL_REGEX2 = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
|
|
4662
4851
|
function mapRouteProperties(route) {
|
|
4663
4852
|
let updates = {
|
|
4664
4853
|
// Note: this check also occurs in createRoutesFromChildren so update
|
|
@@ -4709,11 +4898,10 @@ function mapRouteProperties(route) {
|
|
|
4709
4898
|
}
|
|
4710
4899
|
return updates;
|
|
4711
4900
|
}
|
|
4712
|
-
|
|
4713
|
-
// lib/components.tsx
|
|
4714
4901
|
function createMemoryRouter(routes, opts) {
|
|
4715
4902
|
return createRouter({
|
|
4716
4903
|
basename: opts?.basename,
|
|
4904
|
+
context: opts?.context,
|
|
4717
4905
|
future: opts?.future,
|
|
4718
4906
|
history: createMemoryHistory({
|
|
4719
4907
|
initialEntries: opts?.initialEntries,
|
|
@@ -4749,23 +4937,23 @@ function RouterProvider({
|
|
|
4749
4937
|
router,
|
|
4750
4938
|
flushSync: reactDomFlushSyncImpl
|
|
4751
4939
|
}) {
|
|
4752
|
-
let [state, setStateImpl] =
|
|
4753
|
-
let [pendingState, setPendingState] =
|
|
4754
|
-
let [vtContext, setVtContext] =
|
|
4940
|
+
let [state, setStateImpl] = React3.useState(router.state);
|
|
4941
|
+
let [pendingState, setPendingState] = React3.useState();
|
|
4942
|
+
let [vtContext, setVtContext] = React3.useState({
|
|
4755
4943
|
isTransitioning: false
|
|
4756
4944
|
});
|
|
4757
|
-
let [renderDfd, setRenderDfd] =
|
|
4758
|
-
let [transition, setTransition] =
|
|
4759
|
-
let [interruption, setInterruption] =
|
|
4760
|
-
let fetcherData =
|
|
4761
|
-
let setState =
|
|
4945
|
+
let [renderDfd, setRenderDfd] = React3.useState();
|
|
4946
|
+
let [transition, setTransition] = React3.useState();
|
|
4947
|
+
let [interruption, setInterruption] = React3.useState();
|
|
4948
|
+
let fetcherData = React3.useRef(/* @__PURE__ */ new Map());
|
|
4949
|
+
let setState = React3.useCallback(
|
|
4762
4950
|
(newState, { deletedFetchers, flushSync, viewTransitionOpts }) => {
|
|
4951
|
+
deletedFetchers.forEach((key) => fetcherData.current.delete(key));
|
|
4763
4952
|
newState.fetchers.forEach((fetcher, key) => {
|
|
4764
4953
|
if (fetcher.data !== void 0) {
|
|
4765
4954
|
fetcherData.current.set(key, fetcher.data);
|
|
4766
4955
|
}
|
|
4767
4956
|
});
|
|
4768
|
-
deletedFetchers.forEach((key) => fetcherData.current.delete(key));
|
|
4769
4957
|
warnOnce(
|
|
4770
4958
|
flushSync === false || reactDomFlushSyncImpl != null,
|
|
4771
4959
|
'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.'
|
|
@@ -4779,7 +4967,7 @@ function RouterProvider({
|
|
|
4779
4967
|
if (reactDomFlushSyncImpl && flushSync) {
|
|
4780
4968
|
reactDomFlushSyncImpl(() => setStateImpl(newState));
|
|
4781
4969
|
} else {
|
|
4782
|
-
|
|
4970
|
+
React3.startTransition(() => setStateImpl(newState));
|
|
4783
4971
|
}
|
|
4784
4972
|
return;
|
|
4785
4973
|
}
|
|
@@ -4830,18 +5018,18 @@ function RouterProvider({
|
|
|
4830
5018
|
},
|
|
4831
5019
|
[router.window, reactDomFlushSyncImpl, transition, renderDfd]
|
|
4832
5020
|
);
|
|
4833
|
-
|
|
4834
|
-
|
|
5021
|
+
React3.useLayoutEffect(() => router.subscribe(setState), [router, setState]);
|
|
5022
|
+
React3.useEffect(() => {
|
|
4835
5023
|
if (vtContext.isTransitioning && !vtContext.flushSync) {
|
|
4836
5024
|
setRenderDfd(new Deferred());
|
|
4837
5025
|
}
|
|
4838
5026
|
}, [vtContext]);
|
|
4839
|
-
|
|
5027
|
+
React3.useEffect(() => {
|
|
4840
5028
|
if (renderDfd && pendingState && router.window) {
|
|
4841
5029
|
let newState = pendingState;
|
|
4842
5030
|
let renderPromise = renderDfd.promise;
|
|
4843
5031
|
let transition2 = router.window.document.startViewTransition(async () => {
|
|
4844
|
-
|
|
5032
|
+
React3.startTransition(() => setStateImpl(newState));
|
|
4845
5033
|
await renderPromise;
|
|
4846
5034
|
});
|
|
4847
5035
|
transition2.finished.finally(() => {
|
|
@@ -4853,12 +5041,12 @@ function RouterProvider({
|
|
|
4853
5041
|
setTransition(transition2);
|
|
4854
5042
|
}
|
|
4855
5043
|
}, [pendingState, renderDfd, router.window]);
|
|
4856
|
-
|
|
5044
|
+
React3.useEffect(() => {
|
|
4857
5045
|
if (renderDfd && pendingState && state.location.key === pendingState.location.key) {
|
|
4858
5046
|
renderDfd.resolve();
|
|
4859
5047
|
}
|
|
4860
5048
|
}, [renderDfd, transition, state.location, pendingState]);
|
|
4861
|
-
|
|
5049
|
+
React3.useEffect(() => {
|
|
4862
5050
|
if (!vtContext.isTransitioning && interruption) {
|
|
4863
5051
|
setPendingState(interruption.state);
|
|
4864
5052
|
setVtContext({
|
|
@@ -4870,7 +5058,7 @@ function RouterProvider({
|
|
|
4870
5058
|
setInterruption(void 0);
|
|
4871
5059
|
}
|
|
4872
5060
|
}, [vtContext.isTransitioning, interruption]);
|
|
4873
|
-
let navigator2 =
|
|
5061
|
+
let navigator2 = React3.useMemo(() => {
|
|
4874
5062
|
return {
|
|
4875
5063
|
createHref: router.createHref,
|
|
4876
5064
|
encodeLocation: router.encodeLocation,
|
|
@@ -4887,7 +5075,7 @@ function RouterProvider({
|
|
|
4887
5075
|
};
|
|
4888
5076
|
}, [router]);
|
|
4889
5077
|
let basename = router.basename || "/";
|
|
4890
|
-
let dataRouterContext =
|
|
5078
|
+
let dataRouterContext = React3.useMemo(
|
|
4891
5079
|
() => ({
|
|
4892
5080
|
router,
|
|
4893
5081
|
navigator: navigator2,
|
|
@@ -4896,7 +5084,7 @@ function RouterProvider({
|
|
|
4896
5084
|
}),
|
|
4897
5085
|
[router, navigator2, basename]
|
|
4898
5086
|
);
|
|
4899
|
-
return /* @__PURE__ */
|
|
5087
|
+
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(
|
|
4900
5088
|
Router,
|
|
4901
5089
|
{
|
|
4902
5090
|
basename,
|
|
@@ -4904,7 +5092,7 @@ function RouterProvider({
|
|
|
4904
5092
|
navigationType: state.historyAction,
|
|
4905
5093
|
navigator: navigator2
|
|
4906
5094
|
},
|
|
4907
|
-
/* @__PURE__ */
|
|
5095
|
+
/* @__PURE__ */ React3.createElement(
|
|
4908
5096
|
MemoizedDataRoutes,
|
|
4909
5097
|
{
|
|
4910
5098
|
routes: router.routes,
|
|
@@ -4914,7 +5102,7 @@ function RouterProvider({
|
|
|
4914
5102
|
)
|
|
4915
5103
|
))))), null);
|
|
4916
5104
|
}
|
|
4917
|
-
var MemoizedDataRoutes =
|
|
5105
|
+
var MemoizedDataRoutes = React3.memo(DataRoutes);
|
|
4918
5106
|
function DataRoutes({
|
|
4919
5107
|
routes,
|
|
4920
5108
|
future,
|
|
@@ -4928,7 +5116,7 @@ function MemoryRouter({
|
|
|
4928
5116
|
initialEntries,
|
|
4929
5117
|
initialIndex
|
|
4930
5118
|
}) {
|
|
4931
|
-
let historyRef =
|
|
5119
|
+
let historyRef = React3.useRef();
|
|
4932
5120
|
if (historyRef.current == null) {
|
|
4933
5121
|
historyRef.current = createMemoryHistory({
|
|
4934
5122
|
initialEntries,
|
|
@@ -4937,18 +5125,18 @@ function MemoryRouter({
|
|
|
4937
5125
|
});
|
|
4938
5126
|
}
|
|
4939
5127
|
let history = historyRef.current;
|
|
4940
|
-
let [state, setStateImpl] =
|
|
5128
|
+
let [state, setStateImpl] = React3.useState({
|
|
4941
5129
|
action: history.action,
|
|
4942
5130
|
location: history.location
|
|
4943
5131
|
});
|
|
4944
|
-
let setState =
|
|
5132
|
+
let setState = React3.useCallback(
|
|
4945
5133
|
(newState) => {
|
|
4946
|
-
|
|
5134
|
+
React3.startTransition(() => setStateImpl(newState));
|
|
4947
5135
|
},
|
|
4948
5136
|
[setStateImpl]
|
|
4949
5137
|
);
|
|
4950
|
-
|
|
4951
|
-
return /* @__PURE__ */
|
|
5138
|
+
React3.useLayoutEffect(() => history.listen(setState), [history, setState]);
|
|
5139
|
+
return /* @__PURE__ */ React3.createElement(
|
|
4952
5140
|
Router,
|
|
4953
5141
|
{
|
|
4954
5142
|
basename,
|
|
@@ -4971,12 +5159,12 @@ function Navigate({
|
|
|
4971
5159
|
// the router loaded. We can help them understand how to avoid that.
|
|
4972
5160
|
`<Navigate> may be used only in the context of a <Router> component.`
|
|
4973
5161
|
);
|
|
4974
|
-
let { static: isStatic } =
|
|
5162
|
+
let { static: isStatic } = React3.useContext(NavigationContext);
|
|
4975
5163
|
warning(
|
|
4976
5164
|
!isStatic,
|
|
4977
5165
|
`<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.`
|
|
4978
5166
|
);
|
|
4979
|
-
let { matches } =
|
|
5167
|
+
let { matches } = React3.useContext(RouteContext);
|
|
4980
5168
|
let { pathname: locationPathname } = useLocation();
|
|
4981
5169
|
let navigate = useNavigate();
|
|
4982
5170
|
let path = resolveTo(
|
|
@@ -4986,7 +5174,7 @@ function Navigate({
|
|
|
4986
5174
|
relative === "path"
|
|
4987
5175
|
);
|
|
4988
5176
|
let jsonPath = JSON.stringify(path);
|
|
4989
|
-
|
|
5177
|
+
React3.useEffect(() => {
|
|
4990
5178
|
navigate(JSON.parse(jsonPath), { replace: replace2, state, relative });
|
|
4991
5179
|
}, [navigate, jsonPath, relative, replace2, state]);
|
|
4992
5180
|
return null;
|
|
@@ -5013,7 +5201,7 @@ function Router({
|
|
|
5013
5201
|
`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`
|
|
5014
5202
|
);
|
|
5015
5203
|
let basename = basenameProp.replace(/^\/*/, "/");
|
|
5016
|
-
let navigationContext =
|
|
5204
|
+
let navigationContext = React3.useMemo(
|
|
5017
5205
|
() => ({
|
|
5018
5206
|
basename,
|
|
5019
5207
|
navigator: navigator2,
|
|
@@ -5032,7 +5220,7 @@ function Router({
|
|
|
5032
5220
|
state = null,
|
|
5033
5221
|
key = "default"
|
|
5034
5222
|
} = locationProp;
|
|
5035
|
-
let locationContext =
|
|
5223
|
+
let locationContext = React3.useMemo(() => {
|
|
5036
5224
|
let trailingPathname = stripBasename(pathname, basename);
|
|
5037
5225
|
if (trailingPathname == null) {
|
|
5038
5226
|
return null;
|
|
@@ -5055,7 +5243,7 @@ function Router({
|
|
|
5055
5243
|
if (locationContext == null) {
|
|
5056
5244
|
return null;
|
|
5057
5245
|
}
|
|
5058
|
-
return /* @__PURE__ */
|
|
5246
|
+
return /* @__PURE__ */ React3.createElement(NavigationContext.Provider, { value: navigationContext }, /* @__PURE__ */ React3.createElement(LocationContext.Provider, { children, value: locationContext }));
|
|
5059
5247
|
}
|
|
5060
5248
|
function Routes({
|
|
5061
5249
|
children,
|
|
@@ -5068,9 +5256,9 @@ function Await({
|
|
|
5068
5256
|
errorElement,
|
|
5069
5257
|
resolve
|
|
5070
5258
|
}) {
|
|
5071
|
-
return /* @__PURE__ */
|
|
5259
|
+
return /* @__PURE__ */ React3.createElement(AwaitErrorBoundary, { resolve, errorElement }, /* @__PURE__ */ React3.createElement(ResolveAwait, null, children));
|
|
5072
5260
|
}
|
|
5073
|
-
var AwaitErrorBoundary = class extends
|
|
5261
|
+
var AwaitErrorBoundary = class extends React3.Component {
|
|
5074
5262
|
constructor(props) {
|
|
5075
5263
|
super(props);
|
|
5076
5264
|
this.state = { error: null };
|
|
@@ -5116,10 +5304,10 @@ var AwaitErrorBoundary = class extends React4.Component {
|
|
|
5116
5304
|
throw promise._error;
|
|
5117
5305
|
}
|
|
5118
5306
|
if (status === 2 /* error */) {
|
|
5119
|
-
return /* @__PURE__ */
|
|
5307
|
+
return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children: errorElement });
|
|
5120
5308
|
}
|
|
5121
5309
|
if (status === 1 /* success */) {
|
|
5122
|
-
return /* @__PURE__ */
|
|
5310
|
+
return /* @__PURE__ */ React3.createElement(AwaitContext.Provider, { value: promise, children });
|
|
5123
5311
|
}
|
|
5124
5312
|
throw promise;
|
|
5125
5313
|
}
|
|
@@ -5129,16 +5317,16 @@ function ResolveAwait({
|
|
|
5129
5317
|
}) {
|
|
5130
5318
|
let data2 = useAsyncValue();
|
|
5131
5319
|
let toRender = typeof children === "function" ? children(data2) : children;
|
|
5132
|
-
return /* @__PURE__ */
|
|
5320
|
+
return /* @__PURE__ */ React3.createElement(React3.Fragment, null, toRender);
|
|
5133
5321
|
}
|
|
5134
5322
|
function createRoutesFromChildren(children, parentPath = []) {
|
|
5135
5323
|
let routes = [];
|
|
5136
|
-
|
|
5137
|
-
if (!
|
|
5324
|
+
React3.Children.forEach(children, (element, index) => {
|
|
5325
|
+
if (!React3.isValidElement(element)) {
|
|
5138
5326
|
return;
|
|
5139
5327
|
}
|
|
5140
5328
|
let treePath = [...parentPath, index];
|
|
5141
|
-
if (element.type ===
|
|
5329
|
+
if (element.type === React3.Fragment) {
|
|
5142
5330
|
routes.push.apply(
|
|
5143
5331
|
routes,
|
|
5144
5332
|
createRoutesFromChildren(element.props.children, treePath)
|
|
@@ -5187,7 +5375,7 @@ function renderMatches(matches) {
|
|
|
5187
5375
|
}
|
|
5188
5376
|
|
|
5189
5377
|
// lib/dom/lib.tsx
|
|
5190
|
-
import * as
|
|
5378
|
+
import * as React10 from "react";
|
|
5191
5379
|
|
|
5192
5380
|
// lib/dom/dom.ts
|
|
5193
5381
|
var defaultMethod = "get";
|
|
@@ -5318,7 +5506,7 @@ function getFormSubmissionInfo(target, basename) {
|
|
|
5318
5506
|
}
|
|
5319
5507
|
|
|
5320
5508
|
// lib/dom/ssr/components.tsx
|
|
5321
|
-
import * as
|
|
5509
|
+
import * as React9 from "react";
|
|
5322
5510
|
|
|
5323
5511
|
// lib/dom/ssr/invariant.ts
|
|
5324
5512
|
function invariant2(value, message) {
|
|
@@ -5570,7 +5758,7 @@ function createHtml(html) {
|
|
|
5570
5758
|
}
|
|
5571
5759
|
|
|
5572
5760
|
// lib/dom/ssr/single-fetch.tsx
|
|
5573
|
-
import * as
|
|
5761
|
+
import * as React4 from "react";
|
|
5574
5762
|
import { decode } from "turbo-stream";
|
|
5575
5763
|
|
|
5576
5764
|
// lib/dom/ssr/data.ts
|
|
@@ -5628,7 +5816,7 @@ function StreamTransfer({
|
|
|
5628
5816
|
throw promise;
|
|
5629
5817
|
}
|
|
5630
5818
|
let { done, value } = promise.result;
|
|
5631
|
-
let scriptTag = value ? /* @__PURE__ */
|
|
5819
|
+
let scriptTag = value ? /* @__PURE__ */ React4.createElement(
|
|
5632
5820
|
"script",
|
|
5633
5821
|
{
|
|
5634
5822
|
nonce,
|
|
@@ -5640,7 +5828,7 @@ function StreamTransfer({
|
|
|
5640
5828
|
}
|
|
5641
5829
|
) : null;
|
|
5642
5830
|
if (done) {
|
|
5643
|
-
return /* @__PURE__ */
|
|
5831
|
+
return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(
|
|
5644
5832
|
"script",
|
|
5645
5833
|
{
|
|
5646
5834
|
nonce,
|
|
@@ -5650,7 +5838,7 @@ function StreamTransfer({
|
|
|
5650
5838
|
}
|
|
5651
5839
|
));
|
|
5652
5840
|
} else {
|
|
5653
|
-
return /* @__PURE__ */
|
|
5841
|
+
return /* @__PURE__ */ React4.createElement(React4.Fragment, null, scriptTag, /* @__PURE__ */ React4.createElement(React4.Suspense, null, /* @__PURE__ */ React4.createElement(
|
|
5654
5842
|
StreamTransfer,
|
|
5655
5843
|
{
|
|
5656
5844
|
context,
|
|
@@ -5663,20 +5851,54 @@ function StreamTransfer({
|
|
|
5663
5851
|
}
|
|
5664
5852
|
}
|
|
5665
5853
|
function getSingleFetchDataStrategy(manifest, routeModules, getRouter) {
|
|
5666
|
-
return async (
|
|
5854
|
+
return async (args) => {
|
|
5855
|
+
let { request, matches, fetcherKey } = args;
|
|
5667
5856
|
if (request.method !== "GET") {
|
|
5668
|
-
return
|
|
5857
|
+
return runMiddlewarePipeline(
|
|
5858
|
+
args,
|
|
5859
|
+
matches.findIndex((m) => m.shouldLoad),
|
|
5860
|
+
false,
|
|
5861
|
+
async (keyedResults) => {
|
|
5862
|
+
let results = await singleFetchActionStrategy(request, matches);
|
|
5863
|
+
Object.assign(keyedResults, results);
|
|
5864
|
+
}
|
|
5865
|
+
);
|
|
5669
5866
|
}
|
|
5670
5867
|
if (fetcherKey) {
|
|
5671
|
-
return
|
|
5868
|
+
return runMiddlewarePipeline(
|
|
5869
|
+
args,
|
|
5870
|
+
matches.findIndex((m) => m.shouldLoad),
|
|
5871
|
+
false,
|
|
5872
|
+
async (keyedResults) => {
|
|
5873
|
+
let results = await singleFetchLoaderFetcherStrategy(
|
|
5874
|
+
request,
|
|
5875
|
+
matches
|
|
5876
|
+
);
|
|
5877
|
+
Object.assign(keyedResults, results);
|
|
5878
|
+
}
|
|
5879
|
+
);
|
|
5672
5880
|
}
|
|
5673
|
-
|
|
5881
|
+
let lowestLoadingIndex = getLowestLoadingIndex(
|
|
5674
5882
|
manifest,
|
|
5675
5883
|
routeModules,
|
|
5676
5884
|
getRouter(),
|
|
5677
|
-
request,
|
|
5678
5885
|
matches
|
|
5679
5886
|
);
|
|
5887
|
+
return runMiddlewarePipeline(
|
|
5888
|
+
args,
|
|
5889
|
+
lowestLoadingIndex,
|
|
5890
|
+
false,
|
|
5891
|
+
async (keyedResults) => {
|
|
5892
|
+
let results = await singleFetchLoaderNavigationStrategy(
|
|
5893
|
+
manifest,
|
|
5894
|
+
routeModules,
|
|
5895
|
+
getRouter(),
|
|
5896
|
+
request,
|
|
5897
|
+
matches
|
|
5898
|
+
);
|
|
5899
|
+
Object.assign(keyedResults, results);
|
|
5900
|
+
}
|
|
5901
|
+
);
|
|
5680
5902
|
};
|
|
5681
5903
|
}
|
|
5682
5904
|
async function singleFetchActionStrategy(request, matches) {
|
|
@@ -5706,6 +5928,20 @@ async function singleFetchActionStrategy(request, matches) {
|
|
|
5706
5928
|
}
|
|
5707
5929
|
};
|
|
5708
5930
|
}
|
|
5931
|
+
function isOptedOut(manifestRoute, routeModule, match, router) {
|
|
5932
|
+
return match.route.id in router.state.loaderData && manifestRoute && manifestRoute.hasLoader && routeModule && routeModule.shouldRevalidate;
|
|
5933
|
+
}
|
|
5934
|
+
function getLowestLoadingIndex(manifest, routeModules, router, matches) {
|
|
5935
|
+
let tailIdx = [...matches].reverse().findIndex(
|
|
5936
|
+
(m) => m.shouldLoad || !isOptedOut(
|
|
5937
|
+
manifest.routes[m.route.id],
|
|
5938
|
+
routeModules[m.route.id],
|
|
5939
|
+
m,
|
|
5940
|
+
router
|
|
5941
|
+
)
|
|
5942
|
+
);
|
|
5943
|
+
return tailIdx < 0 ? 0 : matches.length - 1 - tailIdx;
|
|
5944
|
+
}
|
|
5709
5945
|
async function singleFetchLoaderNavigationStrategy(manifest, routeModules, router, request, matches) {
|
|
5710
5946
|
let routesParams = /* @__PURE__ */ new Set();
|
|
5711
5947
|
let foundOptOutRoute = false;
|
|
@@ -5724,7 +5960,7 @@ async function singleFetchLoaderNavigationStrategy(manifest, routeModules, route
|
|
|
5724
5960
|
if (!router.state.initialized) {
|
|
5725
5961
|
return;
|
|
5726
5962
|
}
|
|
5727
|
-
if (
|
|
5963
|
+
if (isOptedOut(manifestRoute, routeModules[m.route.id], m, router)) {
|
|
5728
5964
|
foundOptOutRoute = true;
|
|
5729
5965
|
return;
|
|
5730
5966
|
}
|
|
@@ -5900,7 +6136,7 @@ function unwrapSingleFetchResult(result, routeId) {
|
|
|
5900
6136
|
if (result.replace) {
|
|
5901
6137
|
headers["X-Remix-Replace"] = "yes";
|
|
5902
6138
|
}
|
|
5903
|
-
|
|
6139
|
+
return redirect(result.redirect, { status: result.status, headers });
|
|
5904
6140
|
} else if ("data" in result) {
|
|
5905
6141
|
return result.data;
|
|
5906
6142
|
} else {
|
|
@@ -5936,14 +6172,14 @@ function createDeferred2() {
|
|
|
5936
6172
|
}
|
|
5937
6173
|
|
|
5938
6174
|
// lib/dom/ssr/fog-of-war.ts
|
|
5939
|
-
import * as
|
|
6175
|
+
import * as React8 from "react";
|
|
5940
6176
|
|
|
5941
6177
|
// lib/dom/ssr/routes.tsx
|
|
5942
|
-
import * as
|
|
6178
|
+
import * as React7 from "react";
|
|
5943
6179
|
|
|
5944
6180
|
// lib/dom/ssr/errorBoundaries.tsx
|
|
5945
|
-
import * as
|
|
5946
|
-
var RemixErrorBoundary = class extends
|
|
6181
|
+
import * as React5 from "react";
|
|
6182
|
+
var RemixErrorBoundary = class extends React5.Component {
|
|
5947
6183
|
constructor(props) {
|
|
5948
6184
|
super(props);
|
|
5949
6185
|
this.state = { error: props.error || null, location: props.location };
|
|
@@ -5959,7 +6195,7 @@ var RemixErrorBoundary = class extends React6.Component {
|
|
|
5959
6195
|
}
|
|
5960
6196
|
render() {
|
|
5961
6197
|
if (this.state.error) {
|
|
5962
|
-
return /* @__PURE__ */
|
|
6198
|
+
return /* @__PURE__ */ React5.createElement(
|
|
5963
6199
|
RemixRootDefaultErrorBoundary,
|
|
5964
6200
|
{
|
|
5965
6201
|
error: this.state.error,
|
|
@@ -5976,7 +6212,7 @@ function RemixRootDefaultErrorBoundary({
|
|
|
5976
6212
|
isOutsideRemixApp
|
|
5977
6213
|
}) {
|
|
5978
6214
|
console.error(error);
|
|
5979
|
-
let heyDeveloper = /* @__PURE__ */
|
|
6215
|
+
let heyDeveloper = /* @__PURE__ */ React5.createElement(
|
|
5980
6216
|
"script",
|
|
5981
6217
|
{
|
|
5982
6218
|
dangerouslySetInnerHTML: {
|
|
@@ -5989,7 +6225,7 @@ function RemixRootDefaultErrorBoundary({
|
|
|
5989
6225
|
}
|
|
5990
6226
|
);
|
|
5991
6227
|
if (isRouteErrorResponse(error)) {
|
|
5992
|
-
return /* @__PURE__ */
|
|
6228
|
+
return /* @__PURE__ */ React5.createElement(BoundaryShell, { title: "Unhandled Thrown Response!" }, /* @__PURE__ */ React5.createElement("h1", { style: { fontSize: "24px" } }, error.status, " ", error.statusText), heyDeveloper);
|
|
5993
6229
|
}
|
|
5994
6230
|
let errorInstance;
|
|
5995
6231
|
if (error instanceof Error) {
|
|
@@ -5998,14 +6234,14 @@ function RemixRootDefaultErrorBoundary({
|
|
|
5998
6234
|
let errorString = error == null ? "Unknown Error" : typeof error === "object" && "toString" in error ? error.toString() : JSON.stringify(error);
|
|
5999
6235
|
errorInstance = new Error(errorString);
|
|
6000
6236
|
}
|
|
6001
|
-
return /* @__PURE__ */
|
|
6237
|
+
return /* @__PURE__ */ React5.createElement(
|
|
6002
6238
|
BoundaryShell,
|
|
6003
6239
|
{
|
|
6004
6240
|
title: "Application Error!",
|
|
6005
6241
|
isOutsideRemixApp
|
|
6006
6242
|
},
|
|
6007
|
-
/* @__PURE__ */
|
|
6008
|
-
/* @__PURE__ */
|
|
6243
|
+
/* @__PURE__ */ React5.createElement("h1", { style: { fontSize: "24px" } }, "Application Error"),
|
|
6244
|
+
/* @__PURE__ */ React5.createElement(
|
|
6009
6245
|
"pre",
|
|
6010
6246
|
{
|
|
6011
6247
|
style: {
|
|
@@ -6030,19 +6266,19 @@ function BoundaryShell({
|
|
|
6030
6266
|
if (routeModules.root?.Layout && !isOutsideRemixApp) {
|
|
6031
6267
|
return children;
|
|
6032
6268
|
}
|
|
6033
|
-
return /* @__PURE__ */
|
|
6269
|
+
return /* @__PURE__ */ React5.createElement("html", { lang: "en" }, /* @__PURE__ */ React5.createElement("head", null, /* @__PURE__ */ React5.createElement("meta", { charSet: "utf-8" }), /* @__PURE__ */ React5.createElement(
|
|
6034
6270
|
"meta",
|
|
6035
6271
|
{
|
|
6036
6272
|
name: "viewport",
|
|
6037
6273
|
content: "width=device-width,initial-scale=1,viewport-fit=cover"
|
|
6038
6274
|
}
|
|
6039
|
-
), /* @__PURE__ */
|
|
6275
|
+
), /* @__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)));
|
|
6040
6276
|
}
|
|
6041
6277
|
|
|
6042
6278
|
// lib/dom/ssr/fallback.tsx
|
|
6043
|
-
import * as
|
|
6279
|
+
import * as React6 from "react";
|
|
6044
6280
|
function RemixRootDefaultHydrateFallback() {
|
|
6045
|
-
return /* @__PURE__ */
|
|
6281
|
+
return /* @__PURE__ */ React6.createElement(BoundaryShell, { title: "Loading...", renderScripts: true }, /* @__PURE__ */ React6.createElement(
|
|
6046
6282
|
"script",
|
|
6047
6283
|
{
|
|
6048
6284
|
dangerouslySetInnerHTML: {
|
|
@@ -6076,17 +6312,17 @@ function groupRoutesByParentId(manifest) {
|
|
|
6076
6312
|
function getRouteComponents(route, routeModule, isSpaMode) {
|
|
6077
6313
|
let Component4 = getRouteModuleComponent(routeModule);
|
|
6078
6314
|
let HydrateFallback = routeModule.HydrateFallback && (!isSpaMode || route.id === "root") ? routeModule.HydrateFallback : route.id === "root" ? RemixRootDefaultHydrateFallback : void 0;
|
|
6079
|
-
let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === "root" ? () => /* @__PURE__ */
|
|
6315
|
+
let ErrorBoundary = routeModule.ErrorBoundary ? routeModule.ErrorBoundary : route.id === "root" ? () => /* @__PURE__ */ React7.createElement(RemixRootDefaultErrorBoundary, { error: useRouteError() }) : void 0;
|
|
6080
6316
|
if (route.id === "root" && routeModule.Layout) {
|
|
6081
6317
|
return {
|
|
6082
6318
|
...Component4 ? {
|
|
6083
|
-
element: /* @__PURE__ */
|
|
6319
|
+
element: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(Component4, null))
|
|
6084
6320
|
} : { Component: Component4 },
|
|
6085
6321
|
...ErrorBoundary ? {
|
|
6086
|
-
errorElement: /* @__PURE__ */
|
|
6322
|
+
errorElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(ErrorBoundary, null))
|
|
6087
6323
|
} : { ErrorBoundary },
|
|
6088
6324
|
...HydrateFallback ? {
|
|
6089
|
-
hydrateFallbackElement: /* @__PURE__ */
|
|
6325
|
+
hydrateFallbackElement: /* @__PURE__ */ React7.createElement(routeModule.Layout, null, /* @__PURE__ */ React7.createElement(HydrateFallback, null))
|
|
6090
6326
|
} : { HydrateFallback }
|
|
6091
6327
|
};
|
|
6092
6328
|
}
|
|
@@ -6116,8 +6352,8 @@ function createServerRoutes(manifest, routeModules, future, isSpaMode, parentId
|
|
|
6116
6352
|
// render, so just give it a no-op function so we can render down to the
|
|
6117
6353
|
// proper fallback
|
|
6118
6354
|
loader: route.hasLoader || route.hasClientLoader ? () => null : void 0
|
|
6119
|
-
// We don't need action/shouldRevalidate on these routes since
|
|
6120
|
-
// for a static render
|
|
6355
|
+
// We don't need middleware/action/shouldRevalidate on these routes since
|
|
6356
|
+
// they're for a static render
|
|
6121
6357
|
};
|
|
6122
6358
|
let children = createServerRoutes(
|
|
6123
6359
|
manifest,
|
|
@@ -6201,6 +6437,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
|
|
|
6201
6437
|
Object.assign(dataRoute, {
|
|
6202
6438
|
...dataRoute,
|
|
6203
6439
|
...getRouteComponents(route, routeModule, isSpaMode),
|
|
6440
|
+
middleware: routeModule.clientMiddleware,
|
|
6204
6441
|
handle: routeModule.handle,
|
|
6205
6442
|
shouldRevalidate: getShouldRevalidateFunction(
|
|
6206
6443
|
routeModule,
|
|
@@ -6213,7 +6450,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
|
|
|
6213
6450
|
let hasInitialError = initialState && initialState.errors && route.id in initialState.errors;
|
|
6214
6451
|
let initialError = hasInitialError ? initialState?.errors?.[route.id] : void 0;
|
|
6215
6452
|
let isHydrationRequest = needsRevalidation == null && (routeModule.clientLoader?.hydrate === true || !route.hasLoader);
|
|
6216
|
-
dataRoute.loader = async ({ request, params }, singleFetch) => {
|
|
6453
|
+
dataRoute.loader = async ({ request, params, context }, singleFetch) => {
|
|
6217
6454
|
try {
|
|
6218
6455
|
let result = await prefetchStylesAndCallHandler(async () => {
|
|
6219
6456
|
invariant2(
|
|
@@ -6227,6 +6464,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
|
|
|
6227
6464
|
return routeModule.clientLoader({
|
|
6228
6465
|
request,
|
|
6229
6466
|
params,
|
|
6467
|
+
context,
|
|
6230
6468
|
async serverLoader() {
|
|
6231
6469
|
preventInvalidServerHandlerCall("loader", route, isSpaMode);
|
|
6232
6470
|
if (isHydrationRequest) {
|
|
@@ -6251,7 +6489,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
|
|
|
6251
6489
|
routeModule,
|
|
6252
6490
|
isSpaMode
|
|
6253
6491
|
);
|
|
6254
|
-
dataRoute.action = ({ request, params }, singleFetch) => {
|
|
6492
|
+
dataRoute.action = ({ request, params, context }, singleFetch) => {
|
|
6255
6493
|
return prefetchStylesAndCallHandler(async () => {
|
|
6256
6494
|
invariant2(
|
|
6257
6495
|
routeModule,
|
|
@@ -6266,6 +6504,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
|
|
|
6266
6504
|
return routeModule.clientAction({
|
|
6267
6505
|
request,
|
|
6268
6506
|
params,
|
|
6507
|
+
context,
|
|
6269
6508
|
async serverAction() {
|
|
6270
6509
|
preventInvalidServerHandlerCall("action", route, isSpaMode);
|
|
6271
6510
|
return fetchServerAction(singleFetch);
|
|
@@ -6275,13 +6514,13 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
|
|
|
6275
6514
|
};
|
|
6276
6515
|
} else {
|
|
6277
6516
|
if (!route.hasClientLoader) {
|
|
6278
|
-
dataRoute.loader = (
|
|
6517
|
+
dataRoute.loader = (_, singleFetch) => prefetchStylesAndCallHandler(() => {
|
|
6279
6518
|
if (isSpaMode) return Promise.resolve(null);
|
|
6280
6519
|
return fetchServerLoader(singleFetch);
|
|
6281
6520
|
});
|
|
6282
6521
|
}
|
|
6283
6522
|
if (!route.hasClientAction) {
|
|
6284
|
-
dataRoute.action = (
|
|
6523
|
+
dataRoute.action = (_, singleFetch) => prefetchStylesAndCallHandler(() => {
|
|
6285
6524
|
if (isSpaMode) {
|
|
6286
6525
|
throw noActionDefinedError("clientAction", route.id);
|
|
6287
6526
|
}
|
|
@@ -6317,6 +6556,7 @@ function createClientRoutes(manifest, routeModulesCache, initialState, isSpaMode
|
|
|
6317
6556
|
return {
|
|
6318
6557
|
...lazyRoute.loader ? { loader: lazyRoute.loader } : {},
|
|
6319
6558
|
...lazyRoute.action ? { action: lazyRoute.action } : {},
|
|
6559
|
+
middleware: mod.clientMiddleware,
|
|
6320
6560
|
hasErrorBoundary: lazyRoute.hasErrorBoundary,
|
|
6321
6561
|
shouldRevalidate: getShouldRevalidateFunction(
|
|
6322
6562
|
lazyRoute,
|
|
@@ -6374,6 +6614,7 @@ async function loadRouteModuleWithBlockingLinks(route, routeModules) {
|
|
|
6374
6614
|
return {
|
|
6375
6615
|
Component: getRouteModuleComponent(routeModule),
|
|
6376
6616
|
ErrorBoundary: routeModule.ErrorBoundary,
|
|
6617
|
+
clientMiddleware: routeModule.clientMiddleware,
|
|
6377
6618
|
clientAction: routeModule.clientAction,
|
|
6378
6619
|
clientLoader: routeModule.clientLoader,
|
|
6379
6620
|
handle: routeModule.handle,
|
|
@@ -6444,7 +6685,7 @@ function getPatchRoutesOnNavigationFunction(manifest, routeModules, isSpaMode, b
|
|
|
6444
6685
|
};
|
|
6445
6686
|
}
|
|
6446
6687
|
function useFogOFWarDiscovery(router, manifest, routeModules, isSpaMode) {
|
|
6447
|
-
|
|
6688
|
+
React8.useEffect(() => {
|
|
6448
6689
|
if (!isFogOfWarEnabled(isSpaMode) || navigator.connection?.saveData === true) {
|
|
6449
6690
|
return;
|
|
6450
6691
|
}
|
|
@@ -6573,7 +6814,7 @@ function debounce(callback, wait) {
|
|
|
6573
6814
|
|
|
6574
6815
|
// lib/dom/ssr/components.tsx
|
|
6575
6816
|
function useDataRouterContext2() {
|
|
6576
|
-
let context =
|
|
6817
|
+
let context = React9.useContext(DataRouterContext);
|
|
6577
6818
|
invariant2(
|
|
6578
6819
|
context,
|
|
6579
6820
|
"You must render this element inside a <DataRouterContext.Provider> element"
|
|
@@ -6581,17 +6822,17 @@ function useDataRouterContext2() {
|
|
|
6581
6822
|
return context;
|
|
6582
6823
|
}
|
|
6583
6824
|
function useDataRouterStateContext() {
|
|
6584
|
-
let context =
|
|
6825
|
+
let context = React9.useContext(DataRouterStateContext);
|
|
6585
6826
|
invariant2(
|
|
6586
6827
|
context,
|
|
6587
6828
|
"You must render this element inside a <DataRouterStateContext.Provider> element"
|
|
6588
6829
|
);
|
|
6589
6830
|
return context;
|
|
6590
6831
|
}
|
|
6591
|
-
var FrameworkContext =
|
|
6832
|
+
var FrameworkContext = React9.createContext(void 0);
|
|
6592
6833
|
FrameworkContext.displayName = "FrameworkContext";
|
|
6593
6834
|
function useFrameworkContext() {
|
|
6594
|
-
let context =
|
|
6835
|
+
let context = React9.useContext(FrameworkContext);
|
|
6595
6836
|
invariant2(
|
|
6596
6837
|
context,
|
|
6597
6838
|
"You must render this element inside a <HydratedRouter> element"
|
|
@@ -6599,12 +6840,12 @@ function useFrameworkContext() {
|
|
|
6599
6840
|
return context;
|
|
6600
6841
|
}
|
|
6601
6842
|
function usePrefetchBehavior(prefetch, theirElementProps) {
|
|
6602
|
-
let frameworkContext =
|
|
6603
|
-
let [maybePrefetch, setMaybePrefetch] =
|
|
6604
|
-
let [shouldPrefetch, setShouldPrefetch] =
|
|
6843
|
+
let frameworkContext = React9.useContext(FrameworkContext);
|
|
6844
|
+
let [maybePrefetch, setMaybePrefetch] = React9.useState(false);
|
|
6845
|
+
let [shouldPrefetch, setShouldPrefetch] = React9.useState(false);
|
|
6605
6846
|
let { onFocus, onBlur, onMouseEnter, onMouseLeave, onTouchStart } = theirElementProps;
|
|
6606
|
-
let ref =
|
|
6607
|
-
|
|
6847
|
+
let ref = React9.useRef(null);
|
|
6848
|
+
React9.useEffect(() => {
|
|
6608
6849
|
if (prefetch === "render") {
|
|
6609
6850
|
setShouldPrefetch(true);
|
|
6610
6851
|
}
|
|
@@ -6621,7 +6862,7 @@ function usePrefetchBehavior(prefetch, theirElementProps) {
|
|
|
6621
6862
|
};
|
|
6622
6863
|
}
|
|
6623
6864
|
}, [prefetch]);
|
|
6624
|
-
|
|
6865
|
+
React9.useEffect(() => {
|
|
6625
6866
|
if (maybePrefetch) {
|
|
6626
6867
|
let id = setTimeout(() => {
|
|
6627
6868
|
setShouldPrefetch(true);
|
|
@@ -6678,12 +6919,12 @@ function Links() {
|
|
|
6678
6919
|
let { isSpaMode, manifest, routeModules, criticalCss } = useFrameworkContext();
|
|
6679
6920
|
let { errors, matches: routerMatches } = useDataRouterStateContext();
|
|
6680
6921
|
let matches = getActiveMatches(routerMatches, errors, isSpaMode);
|
|
6681
|
-
let keyedLinks =
|
|
6922
|
+
let keyedLinks = React9.useMemo(
|
|
6682
6923
|
() => getKeyedLinksForMatches(matches, routeModules, manifest),
|
|
6683
6924
|
[matches, routeModules, manifest]
|
|
6684
6925
|
);
|
|
6685
|
-
return /* @__PURE__ */
|
|
6686
|
-
({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */
|
|
6926
|
+
return /* @__PURE__ */ React9.createElement(React9.Fragment, null, criticalCss ? /* @__PURE__ */ React9.createElement("style", { dangerouslySetInnerHTML: { __html: criticalCss } }) : null, keyedLinks.map(
|
|
6927
|
+
({ key, link }) => isPageLinkDescriptor(link) ? /* @__PURE__ */ React9.createElement(PrefetchPageLinks, { key, ...link }) : /* @__PURE__ */ React9.createElement("link", { key, ...link })
|
|
6687
6928
|
));
|
|
6688
6929
|
}
|
|
6689
6930
|
function PrefetchPageLinks({
|
|
@@ -6691,19 +6932,19 @@ function PrefetchPageLinks({
|
|
|
6691
6932
|
...dataLinkProps
|
|
6692
6933
|
}) {
|
|
6693
6934
|
let { router } = useDataRouterContext2();
|
|
6694
|
-
let matches =
|
|
6935
|
+
let matches = React9.useMemo(
|
|
6695
6936
|
() => matchRoutes(router.routes, page, router.basename),
|
|
6696
6937
|
[router.routes, page, router.basename]
|
|
6697
6938
|
);
|
|
6698
6939
|
if (!matches) {
|
|
6699
6940
|
return null;
|
|
6700
6941
|
}
|
|
6701
|
-
return /* @__PURE__ */
|
|
6942
|
+
return /* @__PURE__ */ React9.createElement(PrefetchPageLinksImpl, { page, matches, ...dataLinkProps });
|
|
6702
6943
|
}
|
|
6703
6944
|
function useKeyedPrefetchLinks(matches) {
|
|
6704
6945
|
let { manifest, routeModules } = useFrameworkContext();
|
|
6705
|
-
let [keyedPrefetchLinks, setKeyedPrefetchLinks] =
|
|
6706
|
-
|
|
6946
|
+
let [keyedPrefetchLinks, setKeyedPrefetchLinks] = React9.useState([]);
|
|
6947
|
+
React9.useEffect(() => {
|
|
6707
6948
|
let interrupted = false;
|
|
6708
6949
|
void getKeyedPrefetchLinks(matches, manifest, routeModules).then(
|
|
6709
6950
|
(links) => {
|
|
@@ -6726,7 +6967,7 @@ function PrefetchPageLinksImpl({
|
|
|
6726
6967
|
let location = useLocation();
|
|
6727
6968
|
let { manifest, routeModules } = useFrameworkContext();
|
|
6728
6969
|
let { loaderData, matches } = useDataRouterStateContext();
|
|
6729
|
-
let newMatchesForData =
|
|
6970
|
+
let newMatchesForData = React9.useMemo(
|
|
6730
6971
|
() => getNewMatchesForLinks(
|
|
6731
6972
|
page,
|
|
6732
6973
|
nextMatches,
|
|
@@ -6737,7 +6978,7 @@ function PrefetchPageLinksImpl({
|
|
|
6737
6978
|
),
|
|
6738
6979
|
[page, nextMatches, matches, manifest, location]
|
|
6739
6980
|
);
|
|
6740
|
-
let newMatchesForAssets =
|
|
6981
|
+
let newMatchesForAssets = React9.useMemo(
|
|
6741
6982
|
() => getNewMatchesForLinks(
|
|
6742
6983
|
page,
|
|
6743
6984
|
nextMatches,
|
|
@@ -6748,7 +6989,7 @@ function PrefetchPageLinksImpl({
|
|
|
6748
6989
|
),
|
|
6749
6990
|
[page, nextMatches, matches, manifest, location]
|
|
6750
6991
|
);
|
|
6751
|
-
let dataHrefs =
|
|
6992
|
+
let dataHrefs = React9.useMemo(() => {
|
|
6752
6993
|
if (page === location.pathname + location.search + location.hash) {
|
|
6753
6994
|
return [];
|
|
6754
6995
|
}
|
|
@@ -6787,15 +7028,15 @@ function PrefetchPageLinksImpl({
|
|
|
6787
7028
|
page,
|
|
6788
7029
|
routeModules
|
|
6789
7030
|
]);
|
|
6790
|
-
let moduleHrefs =
|
|
7031
|
+
let moduleHrefs = React9.useMemo(
|
|
6791
7032
|
() => getModuleLinkHrefs(newMatchesForAssets, manifest),
|
|
6792
7033
|
[newMatchesForAssets, manifest]
|
|
6793
7034
|
);
|
|
6794
7035
|
let keyedPrefetchLinks = useKeyedPrefetchLinks(newMatchesForAssets);
|
|
6795
|
-
return /* @__PURE__ */
|
|
7036
|
+
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 }) => (
|
|
6796
7037
|
// these don't spread `linkProps` because they are full link descriptors
|
|
6797
7038
|
// already with their own props
|
|
6798
|
-
/* @__PURE__ */
|
|
7039
|
+
/* @__PURE__ */ React9.createElement("link", { key, ...link })
|
|
6799
7040
|
)));
|
|
6800
7041
|
}
|
|
6801
7042
|
function Meta() {
|
|
@@ -6853,7 +7094,7 @@ function Meta() {
|
|
|
6853
7094
|
meta = [...routeMeta];
|
|
6854
7095
|
leafMeta = meta;
|
|
6855
7096
|
}
|
|
6856
|
-
return /* @__PURE__ */
|
|
7097
|
+
return /* @__PURE__ */ React9.createElement(React9.Fragment, null, meta.flat().map((metaProps) => {
|
|
6857
7098
|
if (!metaProps) {
|
|
6858
7099
|
return null;
|
|
6859
7100
|
}
|
|
@@ -6866,22 +7107,22 @@ function Meta() {
|
|
|
6866
7107
|
return null;
|
|
6867
7108
|
}
|
|
6868
7109
|
let Comp = tagName;
|
|
6869
|
-
return /* @__PURE__ */
|
|
7110
|
+
return /* @__PURE__ */ React9.createElement(Comp, { key: JSON.stringify(rest), ...rest });
|
|
6870
7111
|
}
|
|
6871
7112
|
if ("title" in metaProps) {
|
|
6872
|
-
return /* @__PURE__ */
|
|
7113
|
+
return /* @__PURE__ */ React9.createElement("title", { key: "title" }, String(metaProps.title));
|
|
6873
7114
|
}
|
|
6874
7115
|
if ("charset" in metaProps) {
|
|
6875
7116
|
metaProps.charSet ?? (metaProps.charSet = metaProps.charset);
|
|
6876
7117
|
delete metaProps.charset;
|
|
6877
7118
|
}
|
|
6878
7119
|
if ("charSet" in metaProps && metaProps.charSet != null) {
|
|
6879
|
-
return typeof metaProps.charSet === "string" ? /* @__PURE__ */
|
|
7120
|
+
return typeof metaProps.charSet === "string" ? /* @__PURE__ */ React9.createElement("meta", { key: "charSet", charSet: metaProps.charSet }) : null;
|
|
6880
7121
|
}
|
|
6881
7122
|
if ("script:ld+json" in metaProps) {
|
|
6882
7123
|
try {
|
|
6883
7124
|
let json = JSON.stringify(metaProps["script:ld+json"]);
|
|
6884
|
-
return /* @__PURE__ */
|
|
7125
|
+
return /* @__PURE__ */ React9.createElement(
|
|
6885
7126
|
"script",
|
|
6886
7127
|
{
|
|
6887
7128
|
key: `script:ld+json:${json}`,
|
|
@@ -6893,7 +7134,7 @@ function Meta() {
|
|
|
6893
7134
|
return null;
|
|
6894
7135
|
}
|
|
6895
7136
|
}
|
|
6896
|
-
return /* @__PURE__ */
|
|
7137
|
+
return /* @__PURE__ */ React9.createElement("meta", { key: JSON.stringify(metaProps), ...metaProps });
|
|
6897
7138
|
}));
|
|
6898
7139
|
}
|
|
6899
7140
|
function isValidMetaTag(tagName) {
|
|
@@ -6909,10 +7150,10 @@ function Scripts(props) {
|
|
|
6909
7150
|
renderMeta.didRenderScripts = true;
|
|
6910
7151
|
}
|
|
6911
7152
|
let matches = getActiveMatches(routerMatches, null, isSpaMode);
|
|
6912
|
-
|
|
7153
|
+
React9.useEffect(() => {
|
|
6913
7154
|
isHydrated = true;
|
|
6914
7155
|
}, []);
|
|
6915
|
-
let initialScripts =
|
|
7156
|
+
let initialScripts = React9.useMemo(() => {
|
|
6916
7157
|
let streamScript = "window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());";
|
|
6917
7158
|
let contextScript = staticContext ? `window.__reactRouterContext = ${serverHandoffString};${streamScript}` : " ";
|
|
6918
7159
|
let routeModulesScript = !isStatic ? " " : `${manifest.hmr?.runtime ? `import ${JSON.stringify(manifest.hmr.runtime)};` : ""}${!enableFogOfWar ? `import ${JSON.stringify(manifest.url)}` : ""};
|
|
@@ -6932,7 +7173,7 @@ ${matches.map(
|
|
|
6932
7173
|
window.__reactRouterRouteModules = {${matches.map((match, index) => `${JSON.stringify(match.route.id)}:route${index}`).join(",")}};
|
|
6933
7174
|
|
|
6934
7175
|
import(${JSON.stringify(manifest.entry.module)});`;
|
|
6935
|
-
return /* @__PURE__ */
|
|
7176
|
+
return /* @__PURE__ */ React9.createElement(React9.Fragment, null, /* @__PURE__ */ React9.createElement(
|
|
6936
7177
|
"script",
|
|
6937
7178
|
{
|
|
6938
7179
|
...props,
|
|
@@ -6940,7 +7181,7 @@ import(${JSON.stringify(manifest.entry.module)});`;
|
|
|
6940
7181
|
dangerouslySetInnerHTML: createHtml(contextScript),
|
|
6941
7182
|
type: void 0
|
|
6942
7183
|
}
|
|
6943
|
-
), /* @__PURE__ */
|
|
7184
|
+
), /* @__PURE__ */ React9.createElement(
|
|
6944
7185
|
"script",
|
|
6945
7186
|
{
|
|
6946
7187
|
...props,
|
|
@@ -6956,21 +7197,21 @@ import(${JSON.stringify(manifest.entry.module)});`;
|
|
|
6956
7197
|
return route ? (route.imports || []).concat([route.module]) : [];
|
|
6957
7198
|
}).flat(1);
|
|
6958
7199
|
let preloads = isHydrated ? [] : manifest.entry.imports.concat(routePreloads);
|
|
6959
|
-
return isHydrated ? null : /* @__PURE__ */
|
|
7200
|
+
return isHydrated ? null : /* @__PURE__ */ React9.createElement(React9.Fragment, null, !enableFogOfWar ? /* @__PURE__ */ React9.createElement(
|
|
6960
7201
|
"link",
|
|
6961
7202
|
{
|
|
6962
7203
|
rel: "modulepreload",
|
|
6963
7204
|
href: manifest.url,
|
|
6964
7205
|
crossOrigin: props.crossOrigin
|
|
6965
7206
|
}
|
|
6966
|
-
) : null, /* @__PURE__ */
|
|
7207
|
+
) : null, /* @__PURE__ */ React9.createElement(
|
|
6967
7208
|
"link",
|
|
6968
7209
|
{
|
|
6969
7210
|
rel: "modulepreload",
|
|
6970
7211
|
href: manifest.entry.module,
|
|
6971
7212
|
crossOrigin: props.crossOrigin
|
|
6972
7213
|
}
|
|
6973
|
-
), dedupe(preloads).map((path) => /* @__PURE__ */
|
|
7214
|
+
), dedupe(preloads).map((path) => /* @__PURE__ */ React9.createElement(
|
|
6974
7215
|
"link",
|
|
6975
7216
|
{
|
|
6976
7217
|
key: path,
|
|
@@ -6999,13 +7240,14 @@ function mergeRefs(...refs) {
|
|
|
6999
7240
|
var isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
|
|
7000
7241
|
try {
|
|
7001
7242
|
if (isBrowser) {
|
|
7002
|
-
window.__reactRouterVersion = "0.0.0-experimental-
|
|
7243
|
+
window.__reactRouterVersion = "0.0.0-experimental-e41ede670";
|
|
7003
7244
|
}
|
|
7004
7245
|
} catch (e) {
|
|
7005
7246
|
}
|
|
7006
7247
|
function createBrowserRouter(routes, opts) {
|
|
7007
7248
|
return createRouter({
|
|
7008
7249
|
basename: opts?.basename,
|
|
7250
|
+
context: opts?.context,
|
|
7009
7251
|
future: opts?.future,
|
|
7010
7252
|
history: createBrowserHistory({ window: opts?.window }),
|
|
7011
7253
|
hydrationData: opts?.hydrationData || parseHydrationData(),
|
|
@@ -7019,6 +7261,7 @@ function createBrowserRouter(routes, opts) {
|
|
|
7019
7261
|
function createHashRouter(routes, opts) {
|
|
7020
7262
|
return createRouter({
|
|
7021
7263
|
basename: opts?.basename,
|
|
7264
|
+
context: opts?.context,
|
|
7022
7265
|
future: opts?.future,
|
|
7023
7266
|
history: createHashHistory({ window: opts?.window }),
|
|
7024
7267
|
hydrationData: opts?.hydrationData || parseHydrationData(),
|
|
@@ -7079,23 +7322,23 @@ function BrowserRouter({
|
|
|
7079
7322
|
children,
|
|
7080
7323
|
window: window2
|
|
7081
7324
|
}) {
|
|
7082
|
-
let historyRef =
|
|
7325
|
+
let historyRef = React10.useRef();
|
|
7083
7326
|
if (historyRef.current == null) {
|
|
7084
7327
|
historyRef.current = createBrowserHistory({ window: window2, v5Compat: true });
|
|
7085
7328
|
}
|
|
7086
7329
|
let history = historyRef.current;
|
|
7087
|
-
let [state, setStateImpl] =
|
|
7330
|
+
let [state, setStateImpl] = React10.useState({
|
|
7088
7331
|
action: history.action,
|
|
7089
7332
|
location: history.location
|
|
7090
7333
|
});
|
|
7091
|
-
let setState =
|
|
7334
|
+
let setState = React10.useCallback(
|
|
7092
7335
|
(newState) => {
|
|
7093
|
-
|
|
7336
|
+
React10.startTransition(() => setStateImpl(newState));
|
|
7094
7337
|
},
|
|
7095
7338
|
[setStateImpl]
|
|
7096
7339
|
);
|
|
7097
|
-
|
|
7098
|
-
return /* @__PURE__ */
|
|
7340
|
+
React10.useLayoutEffect(() => history.listen(setState), [history, setState]);
|
|
7341
|
+
return /* @__PURE__ */ React10.createElement(
|
|
7099
7342
|
Router,
|
|
7100
7343
|
{
|
|
7101
7344
|
basename,
|
|
@@ -7107,23 +7350,23 @@ function BrowserRouter({
|
|
|
7107
7350
|
);
|
|
7108
7351
|
}
|
|
7109
7352
|
function HashRouter({ basename, children, window: window2 }) {
|
|
7110
|
-
let historyRef =
|
|
7353
|
+
let historyRef = React10.useRef();
|
|
7111
7354
|
if (historyRef.current == null) {
|
|
7112
7355
|
historyRef.current = createHashHistory({ window: window2, v5Compat: true });
|
|
7113
7356
|
}
|
|
7114
7357
|
let history = historyRef.current;
|
|
7115
|
-
let [state, setStateImpl] =
|
|
7358
|
+
let [state, setStateImpl] = React10.useState({
|
|
7116
7359
|
action: history.action,
|
|
7117
7360
|
location: history.location
|
|
7118
7361
|
});
|
|
7119
|
-
let setState =
|
|
7362
|
+
let setState = React10.useCallback(
|
|
7120
7363
|
(newState) => {
|
|
7121
|
-
|
|
7364
|
+
React10.startTransition(() => setStateImpl(newState));
|
|
7122
7365
|
},
|
|
7123
7366
|
[setStateImpl]
|
|
7124
7367
|
);
|
|
7125
|
-
|
|
7126
|
-
return /* @__PURE__ */
|
|
7368
|
+
React10.useLayoutEffect(() => history.listen(setState), [history, setState]);
|
|
7369
|
+
return /* @__PURE__ */ React10.createElement(
|
|
7127
7370
|
Router,
|
|
7128
7371
|
{
|
|
7129
7372
|
basename,
|
|
@@ -7139,18 +7382,18 @@ function HistoryRouter({
|
|
|
7139
7382
|
children,
|
|
7140
7383
|
history
|
|
7141
7384
|
}) {
|
|
7142
|
-
let [state, setStateImpl] =
|
|
7385
|
+
let [state, setStateImpl] = React10.useState({
|
|
7143
7386
|
action: history.action,
|
|
7144
7387
|
location: history.location
|
|
7145
7388
|
});
|
|
7146
|
-
let setState =
|
|
7389
|
+
let setState = React10.useCallback(
|
|
7147
7390
|
(newState) => {
|
|
7148
|
-
|
|
7391
|
+
React10.startTransition(() => setStateImpl(newState));
|
|
7149
7392
|
},
|
|
7150
7393
|
[setStateImpl]
|
|
7151
7394
|
);
|
|
7152
|
-
|
|
7153
|
-
return /* @__PURE__ */
|
|
7395
|
+
React10.useLayoutEffect(() => history.listen(setState), [history, setState]);
|
|
7396
|
+
return /* @__PURE__ */ React10.createElement(
|
|
7154
7397
|
Router,
|
|
7155
7398
|
{
|
|
7156
7399
|
basename,
|
|
@@ -7162,8 +7405,8 @@ function HistoryRouter({
|
|
|
7162
7405
|
);
|
|
7163
7406
|
}
|
|
7164
7407
|
HistoryRouter.displayName = "unstable_HistoryRouter";
|
|
7165
|
-
var
|
|
7166
|
-
var Link =
|
|
7408
|
+
var ABSOLUTE_URL_REGEX2 = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
|
|
7409
|
+
var Link = React10.forwardRef(
|
|
7167
7410
|
function LinkWithRef({
|
|
7168
7411
|
onClick,
|
|
7169
7412
|
discover = "render",
|
|
@@ -7178,8 +7421,8 @@ var Link = React11.forwardRef(
|
|
|
7178
7421
|
viewTransition,
|
|
7179
7422
|
...rest
|
|
7180
7423
|
}, forwardedRef) {
|
|
7181
|
-
let { basename } =
|
|
7182
|
-
let isAbsolute = typeof to === "string" &&
|
|
7424
|
+
let { basename } = React10.useContext(NavigationContext);
|
|
7425
|
+
let isAbsolute = typeof to === "string" && ABSOLUTE_URL_REGEX2.test(to);
|
|
7183
7426
|
let absoluteHref;
|
|
7184
7427
|
let isExternal = false;
|
|
7185
7428
|
if (typeof to === "string" && isAbsolute) {
|
|
@@ -7223,7 +7466,7 @@ var Link = React11.forwardRef(
|
|
|
7223
7466
|
}
|
|
7224
7467
|
let link = (
|
|
7225
7468
|
// eslint-disable-next-line jsx-a11y/anchor-has-content
|
|
7226
|
-
/* @__PURE__ */
|
|
7469
|
+
/* @__PURE__ */ React10.createElement(
|
|
7227
7470
|
"a",
|
|
7228
7471
|
{
|
|
7229
7472
|
...rest,
|
|
@@ -7236,11 +7479,11 @@ var Link = React11.forwardRef(
|
|
|
7236
7479
|
}
|
|
7237
7480
|
)
|
|
7238
7481
|
);
|
|
7239
|
-
return shouldPrefetch && !isAbsolute ? /* @__PURE__ */
|
|
7482
|
+
return shouldPrefetch && !isAbsolute ? /* @__PURE__ */ React10.createElement(React10.Fragment, null, link, /* @__PURE__ */ React10.createElement(PrefetchPageLinks, { page: href })) : link;
|
|
7240
7483
|
}
|
|
7241
7484
|
);
|
|
7242
7485
|
Link.displayName = "Link";
|
|
7243
|
-
var NavLink =
|
|
7486
|
+
var NavLink = React10.forwardRef(
|
|
7244
7487
|
function NavLinkWithRef({
|
|
7245
7488
|
"aria-current": ariaCurrentProp = "page",
|
|
7246
7489
|
caseSensitive = false,
|
|
@@ -7254,8 +7497,8 @@ var NavLink = React11.forwardRef(
|
|
|
7254
7497
|
}, ref) {
|
|
7255
7498
|
let path = useResolvedPath(to, { relative: rest.relative });
|
|
7256
7499
|
let location = useLocation();
|
|
7257
|
-
let routerState =
|
|
7258
|
-
let { navigator: navigator2, basename } =
|
|
7500
|
+
let routerState = React10.useContext(DataRouterStateContext);
|
|
7501
|
+
let { navigator: navigator2, basename } = React10.useContext(NavigationContext);
|
|
7259
7502
|
let isTransitioning = routerState != null && // Conditional usage is OK here because the usage of a data router is static
|
|
7260
7503
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
7261
7504
|
useViewTransitionState(path) && viewTransition === true;
|
|
@@ -7291,7 +7534,7 @@ var NavLink = React11.forwardRef(
|
|
|
7291
7534
|
].filter(Boolean).join(" ");
|
|
7292
7535
|
}
|
|
7293
7536
|
let style = typeof styleProp === "function" ? styleProp(renderProps) : styleProp;
|
|
7294
|
-
return /* @__PURE__ */
|
|
7537
|
+
return /* @__PURE__ */ React10.createElement(
|
|
7295
7538
|
Link,
|
|
7296
7539
|
{
|
|
7297
7540
|
...rest,
|
|
@@ -7307,7 +7550,7 @@ var NavLink = React11.forwardRef(
|
|
|
7307
7550
|
}
|
|
7308
7551
|
);
|
|
7309
7552
|
NavLink.displayName = "NavLink";
|
|
7310
|
-
var Form =
|
|
7553
|
+
var Form = React10.forwardRef(
|
|
7311
7554
|
({
|
|
7312
7555
|
discover = "render",
|
|
7313
7556
|
fetcherKey,
|
|
@@ -7326,7 +7569,7 @@ var Form = React11.forwardRef(
|
|
|
7326
7569
|
let submit = useSubmit();
|
|
7327
7570
|
let formAction = useFormAction(action, { relative });
|
|
7328
7571
|
let formMethod = method.toLowerCase() === "get" ? "get" : "post";
|
|
7329
|
-
let isAbsolute = typeof action === "string" &&
|
|
7572
|
+
let isAbsolute = typeof action === "string" && ABSOLUTE_URL_REGEX2.test(action);
|
|
7330
7573
|
let submitHandler = (event) => {
|
|
7331
7574
|
onSubmit && onSubmit(event);
|
|
7332
7575
|
if (event.defaultPrevented) return;
|
|
@@ -7344,7 +7587,7 @@ var Form = React11.forwardRef(
|
|
|
7344
7587
|
viewTransition
|
|
7345
7588
|
});
|
|
7346
7589
|
};
|
|
7347
|
-
return /* @__PURE__ */
|
|
7590
|
+
return /* @__PURE__ */ React10.createElement(
|
|
7348
7591
|
"form",
|
|
7349
7592
|
{
|
|
7350
7593
|
ref: forwardedRef,
|
|
@@ -7363,12 +7606,12 @@ function ScrollRestoration({
|
|
|
7363
7606
|
storageKey,
|
|
7364
7607
|
...props
|
|
7365
7608
|
}) {
|
|
7366
|
-
let remixContext =
|
|
7367
|
-
let { basename } =
|
|
7609
|
+
let remixContext = React10.useContext(FrameworkContext);
|
|
7610
|
+
let { basename } = React10.useContext(NavigationContext);
|
|
7368
7611
|
let location = useLocation();
|
|
7369
7612
|
let matches = useMatches();
|
|
7370
7613
|
useScrollRestoration({ getKey, storageKey });
|
|
7371
|
-
let ssrKey =
|
|
7614
|
+
let ssrKey = React10.useMemo(
|
|
7372
7615
|
() => {
|
|
7373
7616
|
if (!remixContext || !getKey) return null;
|
|
7374
7617
|
let userKey = getScrollRestorationKey(
|
|
@@ -7402,7 +7645,7 @@ function ScrollRestoration({
|
|
|
7402
7645
|
sessionStorage.removeItem(storageKey2);
|
|
7403
7646
|
}
|
|
7404
7647
|
}).toString();
|
|
7405
|
-
return /* @__PURE__ */
|
|
7648
|
+
return /* @__PURE__ */ React10.createElement(
|
|
7406
7649
|
"script",
|
|
7407
7650
|
{
|
|
7408
7651
|
...props,
|
|
@@ -7420,12 +7663,12 @@ function getDataRouterConsoleError2(hookName) {
|
|
|
7420
7663
|
return `${hookName} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`;
|
|
7421
7664
|
}
|
|
7422
7665
|
function useDataRouterContext3(hookName) {
|
|
7423
|
-
let ctx =
|
|
7666
|
+
let ctx = React10.useContext(DataRouterContext);
|
|
7424
7667
|
invariant(ctx, getDataRouterConsoleError2(hookName));
|
|
7425
7668
|
return ctx;
|
|
7426
7669
|
}
|
|
7427
7670
|
function useDataRouterState2(hookName) {
|
|
7428
|
-
let state =
|
|
7671
|
+
let state = React10.useContext(DataRouterStateContext);
|
|
7429
7672
|
invariant(state, getDataRouterConsoleError2(hookName));
|
|
7430
7673
|
return state;
|
|
7431
7674
|
}
|
|
@@ -7440,7 +7683,7 @@ function useLinkClickHandler(to, {
|
|
|
7440
7683
|
let navigate = useNavigate();
|
|
7441
7684
|
let location = useLocation();
|
|
7442
7685
|
let path = useResolvedPath(to, { relative });
|
|
7443
|
-
return
|
|
7686
|
+
return React10.useCallback(
|
|
7444
7687
|
(event) => {
|
|
7445
7688
|
if (shouldProcessLinkClick(event, target)) {
|
|
7446
7689
|
event.preventDefault();
|
|
@@ -7473,10 +7716,10 @@ function useSearchParams(defaultInit) {
|
|
|
7473
7716
|
typeof URLSearchParams !== "undefined",
|
|
7474
7717
|
`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.`
|
|
7475
7718
|
);
|
|
7476
|
-
let defaultSearchParamsRef =
|
|
7477
|
-
let hasSetSearchParamsRef =
|
|
7719
|
+
let defaultSearchParamsRef = React10.useRef(createSearchParams(defaultInit));
|
|
7720
|
+
let hasSetSearchParamsRef = React10.useRef(false);
|
|
7478
7721
|
let location = useLocation();
|
|
7479
|
-
let searchParams =
|
|
7722
|
+
let searchParams = React10.useMemo(
|
|
7480
7723
|
() => (
|
|
7481
7724
|
// Only merge in the defaults if we haven't yet called setSearchParams.
|
|
7482
7725
|
// Once we call that we want those to take precedence, otherwise you can't
|
|
@@ -7489,7 +7732,7 @@ function useSearchParams(defaultInit) {
|
|
|
7489
7732
|
[location.search]
|
|
7490
7733
|
);
|
|
7491
7734
|
let navigate = useNavigate();
|
|
7492
|
-
let setSearchParams =
|
|
7735
|
+
let setSearchParams = React10.useCallback(
|
|
7493
7736
|
(nextInit, navigateOptions) => {
|
|
7494
7737
|
const newSearchParams = createSearchParams(
|
|
7495
7738
|
typeof nextInit === "function" ? nextInit(searchParams) : nextInit
|
|
@@ -7505,9 +7748,9 @@ var fetcherId = 0;
|
|
|
7505
7748
|
var getUniqueFetcherId = () => `__${String(++fetcherId)}__`;
|
|
7506
7749
|
function useSubmit() {
|
|
7507
7750
|
let { router } = useDataRouterContext3("useSubmit" /* UseSubmit */);
|
|
7508
|
-
let { basename } =
|
|
7751
|
+
let { basename } = React10.useContext(NavigationContext);
|
|
7509
7752
|
let currentRouteId = useRouteId();
|
|
7510
|
-
return
|
|
7753
|
+
return React10.useCallback(
|
|
7511
7754
|
async (target, options = {}) => {
|
|
7512
7755
|
let { action, method, encType, formData, body } = getFormSubmissionInfo(
|
|
7513
7756
|
target,
|
|
@@ -7542,8 +7785,8 @@ function useSubmit() {
|
|
|
7542
7785
|
);
|
|
7543
7786
|
}
|
|
7544
7787
|
function useFormAction(action, { relative } = {}) {
|
|
7545
|
-
let { basename } =
|
|
7546
|
-
let routeContext =
|
|
7788
|
+
let { basename } = React10.useContext(NavigationContext);
|
|
7789
|
+
let routeContext = React10.useContext(RouteContext);
|
|
7547
7790
|
invariant(routeContext, "useFormAction must be used inside a RouteContext");
|
|
7548
7791
|
let [match] = routeContext.matches.slice(-1);
|
|
7549
7792
|
let path = { ...useResolvedPath(action ? action : ".", { relative }) };
|
|
@@ -7573,8 +7816,8 @@ function useFetcher({
|
|
|
7573
7816
|
} = {}) {
|
|
7574
7817
|
let { router } = useDataRouterContext3("useFetcher" /* UseFetcher */);
|
|
7575
7818
|
let state = useDataRouterState2("useFetcher" /* UseFetcher */);
|
|
7576
|
-
let fetcherData =
|
|
7577
|
-
let route =
|
|
7819
|
+
let fetcherData = React10.useContext(FetchersContext);
|
|
7820
|
+
let route = React10.useContext(RouteContext);
|
|
7578
7821
|
let routeId = route.matches[route.matches.length - 1]?.route.id;
|
|
7579
7822
|
invariant(fetcherData, `useFetcher must be used inside a FetchersContext`);
|
|
7580
7823
|
invariant(route, `useFetcher must be used inside a RouteContext`);
|
|
@@ -7582,16 +7825,16 @@ function useFetcher({
|
|
|
7582
7825
|
routeId != null,
|
|
7583
7826
|
`useFetcher can only be used on routes that contain a unique "id"`
|
|
7584
7827
|
);
|
|
7585
|
-
let defaultKey =
|
|
7586
|
-
let [fetcherKey, setFetcherKey] =
|
|
7828
|
+
let defaultKey = React10.useId();
|
|
7829
|
+
let [fetcherKey, setFetcherKey] = React10.useState(key || defaultKey);
|
|
7587
7830
|
if (key && key !== fetcherKey) {
|
|
7588
7831
|
setFetcherKey(key);
|
|
7589
7832
|
}
|
|
7590
|
-
|
|
7833
|
+
React10.useEffect(() => {
|
|
7591
7834
|
router.getFetcher(fetcherKey);
|
|
7592
7835
|
return () => router.deleteFetcher(fetcherKey);
|
|
7593
7836
|
}, [router, fetcherKey]);
|
|
7594
|
-
let load =
|
|
7837
|
+
let load = React10.useCallback(
|
|
7595
7838
|
async (href, opts) => {
|
|
7596
7839
|
invariant(routeId, "No routeId available for fetcher.load()");
|
|
7597
7840
|
await router.fetch(fetcherKey, routeId, href, opts);
|
|
@@ -7599,7 +7842,7 @@ function useFetcher({
|
|
|
7599
7842
|
[fetcherKey, routeId, router]
|
|
7600
7843
|
);
|
|
7601
7844
|
let submitImpl = useSubmit();
|
|
7602
|
-
let submit =
|
|
7845
|
+
let submit = React10.useCallback(
|
|
7603
7846
|
async (target, opts) => {
|
|
7604
7847
|
await submitImpl(target, {
|
|
7605
7848
|
...opts,
|
|
@@ -7609,10 +7852,10 @@ function useFetcher({
|
|
|
7609
7852
|
},
|
|
7610
7853
|
[fetcherKey, submitImpl]
|
|
7611
7854
|
);
|
|
7612
|
-
let FetcherForm =
|
|
7613
|
-
let FetcherForm2 =
|
|
7855
|
+
let FetcherForm = React10.useMemo(() => {
|
|
7856
|
+
let FetcherForm2 = React10.forwardRef(
|
|
7614
7857
|
(props, ref) => {
|
|
7615
|
-
return /* @__PURE__ */
|
|
7858
|
+
return /* @__PURE__ */ React10.createElement(Form, { ...props, navigate: false, fetcherKey, ref });
|
|
7616
7859
|
}
|
|
7617
7860
|
);
|
|
7618
7861
|
FetcherForm2.displayName = "fetcher.Form";
|
|
@@ -7620,7 +7863,7 @@ function useFetcher({
|
|
|
7620
7863
|
}, [fetcherKey]);
|
|
7621
7864
|
let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;
|
|
7622
7865
|
let data2 = fetcherData.get(fetcherKey);
|
|
7623
|
-
let fetcherWithComponents =
|
|
7866
|
+
let fetcherWithComponents = React10.useMemo(
|
|
7624
7867
|
() => ({
|
|
7625
7868
|
Form: FetcherForm,
|
|
7626
7869
|
submit,
|
|
@@ -7669,18 +7912,18 @@ function useScrollRestoration({
|
|
|
7669
7912
|
let { restoreScrollPosition, preventScrollReset } = useDataRouterState2(
|
|
7670
7913
|
"useScrollRestoration" /* UseScrollRestoration */
|
|
7671
7914
|
);
|
|
7672
|
-
let { basename } =
|
|
7915
|
+
let { basename } = React10.useContext(NavigationContext);
|
|
7673
7916
|
let location = useLocation();
|
|
7674
7917
|
let matches = useMatches();
|
|
7675
7918
|
let navigation = useNavigation();
|
|
7676
|
-
|
|
7919
|
+
React10.useEffect(() => {
|
|
7677
7920
|
window.history.scrollRestoration = "manual";
|
|
7678
7921
|
return () => {
|
|
7679
7922
|
window.history.scrollRestoration = "auto";
|
|
7680
7923
|
};
|
|
7681
7924
|
}, []);
|
|
7682
7925
|
usePageHide(
|
|
7683
|
-
|
|
7926
|
+
React10.useCallback(() => {
|
|
7684
7927
|
if (navigation.state === "idle") {
|
|
7685
7928
|
let key = getScrollRestorationKey(location, matches, basename, getKey);
|
|
7686
7929
|
savedScrollPositions[key] = window.scrollY;
|
|
@@ -7700,7 +7943,7 @@ function useScrollRestoration({
|
|
|
7700
7943
|
}, [navigation.state, getKey, basename, location, matches, storageKey])
|
|
7701
7944
|
);
|
|
7702
7945
|
if (typeof document !== "undefined") {
|
|
7703
|
-
|
|
7946
|
+
React10.useLayoutEffect(() => {
|
|
7704
7947
|
try {
|
|
7705
7948
|
let sessionPositions = sessionStorage.getItem(
|
|
7706
7949
|
storageKey || SCROLL_RESTORATION_STORAGE_KEY
|
|
@@ -7711,7 +7954,7 @@ function useScrollRestoration({
|
|
|
7711
7954
|
} catch (e) {
|
|
7712
7955
|
}
|
|
7713
7956
|
}, [storageKey]);
|
|
7714
|
-
|
|
7957
|
+
React10.useLayoutEffect(() => {
|
|
7715
7958
|
let disableScrollRestoration = router?.enableScrollRestoration(
|
|
7716
7959
|
savedScrollPositions,
|
|
7717
7960
|
() => window.scrollY,
|
|
@@ -7719,7 +7962,7 @@ function useScrollRestoration({
|
|
|
7719
7962
|
);
|
|
7720
7963
|
return () => disableScrollRestoration && disableScrollRestoration();
|
|
7721
7964
|
}, [router, basename, getKey]);
|
|
7722
|
-
|
|
7965
|
+
React10.useLayoutEffect(() => {
|
|
7723
7966
|
if (restoreScrollPosition === false) {
|
|
7724
7967
|
return;
|
|
7725
7968
|
}
|
|
@@ -7745,7 +7988,7 @@ function useScrollRestoration({
|
|
|
7745
7988
|
}
|
|
7746
7989
|
function useBeforeUnload(callback, options) {
|
|
7747
7990
|
let { capture } = options || {};
|
|
7748
|
-
|
|
7991
|
+
React10.useEffect(() => {
|
|
7749
7992
|
let opts = capture != null ? { capture } : void 0;
|
|
7750
7993
|
window.addEventListener("beforeunload", callback, opts);
|
|
7751
7994
|
return () => {
|
|
@@ -7755,7 +7998,7 @@ function useBeforeUnload(callback, options) {
|
|
|
7755
7998
|
}
|
|
7756
7999
|
function usePageHide(callback, options) {
|
|
7757
8000
|
let { capture } = options || {};
|
|
7758
|
-
|
|
8001
|
+
React10.useEffect(() => {
|
|
7759
8002
|
let opts = capture != null ? { capture } : void 0;
|
|
7760
8003
|
window.addEventListener("pagehide", callback, opts);
|
|
7761
8004
|
return () => {
|
|
@@ -7768,7 +8011,7 @@ function usePrompt({
|
|
|
7768
8011
|
message
|
|
7769
8012
|
}) {
|
|
7770
8013
|
let blocker = useBlocker(when);
|
|
7771
|
-
|
|
8014
|
+
React10.useEffect(() => {
|
|
7772
8015
|
if (blocker.state === "blocked") {
|
|
7773
8016
|
let proceed = window.confirm(message);
|
|
7774
8017
|
if (proceed) {
|
|
@@ -7778,14 +8021,14 @@ function usePrompt({
|
|
|
7778
8021
|
}
|
|
7779
8022
|
}
|
|
7780
8023
|
}, [blocker, message]);
|
|
7781
|
-
|
|
8024
|
+
React10.useEffect(() => {
|
|
7782
8025
|
if (blocker.state === "blocked" && !when) {
|
|
7783
8026
|
blocker.reset();
|
|
7784
8027
|
}
|
|
7785
8028
|
}, [blocker, when]);
|
|
7786
8029
|
}
|
|
7787
8030
|
function useViewTransitionState(to, opts = {}) {
|
|
7788
|
-
let vtContext =
|
|
8031
|
+
let vtContext = React10.useContext(ViewTransitionContext);
|
|
7789
8032
|
invariant(
|
|
7790
8033
|
vtContext != null,
|
|
7791
8034
|
"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?"
|
|
@@ -7802,8 +8045,8 @@ function useViewTransitionState(to, opts = {}) {
|
|
|
7802
8045
|
return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;
|
|
7803
8046
|
}
|
|
7804
8047
|
|
|
7805
|
-
// lib/dom/
|
|
7806
|
-
import * as
|
|
8048
|
+
// lib/dom/server.tsx
|
|
8049
|
+
import * as React11 from "react";
|
|
7807
8050
|
function StaticRouter({
|
|
7808
8051
|
basename,
|
|
7809
8052
|
children,
|
|
@@ -7821,7 +8064,7 @@ function StaticRouter({
|
|
|
7821
8064
|
key: locationProp.key || "default"
|
|
7822
8065
|
};
|
|
7823
8066
|
let staticNavigator = getStatelessNavigator();
|
|
7824
|
-
return /* @__PURE__ */
|
|
8067
|
+
return /* @__PURE__ */ React11.createElement(
|
|
7825
8068
|
Router,
|
|
7826
8069
|
{
|
|
7827
8070
|
basename,
|
|
@@ -7862,7 +8105,7 @@ function StaticRouterProvider({
|
|
|
7862
8105
|
hydrateScript = `window.__staticRouterHydrationData = JSON.parse(${json});`;
|
|
7863
8106
|
}
|
|
7864
8107
|
let { state } = dataRouterContext.router;
|
|
7865
|
-
return /* @__PURE__ */
|
|
8108
|
+
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(
|
|
7866
8109
|
Router,
|
|
7867
8110
|
{
|
|
7868
8111
|
basename: dataRouterContext.basename,
|
|
@@ -7871,7 +8114,7 @@ function StaticRouterProvider({
|
|
|
7871
8114
|
navigator: dataRouterContext.navigator,
|
|
7872
8115
|
static: dataRouterContext.static
|
|
7873
8116
|
},
|
|
7874
|
-
/* @__PURE__ */
|
|
8117
|
+
/* @__PURE__ */ React11.createElement(
|
|
7875
8118
|
DataRoutes2,
|
|
7876
8119
|
{
|
|
7877
8120
|
routes: router.routes,
|
|
@@ -7879,7 +8122,7 @@ function StaticRouterProvider({
|
|
|
7879
8122
|
state
|
|
7880
8123
|
}
|
|
7881
8124
|
)
|
|
7882
|
-
))))), hydrateScript ? /* @__PURE__ */
|
|
8125
|
+
))))), hydrateScript ? /* @__PURE__ */ React11.createElement(
|
|
7883
8126
|
"script",
|
|
7884
8127
|
{
|
|
7885
8128
|
suppressHydrationWarning: true,
|
|
@@ -7949,19 +8192,6 @@ function getStatelessNavigator() {
|
|
|
7949
8192
|
}
|
|
7950
8193
|
};
|
|
7951
8194
|
}
|
|
7952
|
-
var ESCAPE_LOOKUP2 = {
|
|
7953
|
-
"&": "\\u0026",
|
|
7954
|
-
">": "\\u003e",
|
|
7955
|
-
"<": "\\u003c",
|
|
7956
|
-
"\u2028": "\\u2028",
|
|
7957
|
-
"\u2029": "\\u2029"
|
|
7958
|
-
};
|
|
7959
|
-
var ESCAPE_REGEX2 = /[&><\u2028\u2029]/g;
|
|
7960
|
-
function htmlEscape(str) {
|
|
7961
|
-
return str.replace(ESCAPE_REGEX2, (match) => ESCAPE_LOOKUP2[match]);
|
|
7962
|
-
}
|
|
7963
|
-
|
|
7964
|
-
// lib/dom/server.tsx
|
|
7965
8195
|
function createStaticHandler2(routes, opts) {
|
|
7966
8196
|
return createStaticHandler(routes, {
|
|
7967
8197
|
...opts,
|
|
@@ -8060,9 +8290,34 @@ function createStaticRouter(routes, context, opts = {}) {
|
|
|
8060
8290
|
}
|
|
8061
8291
|
};
|
|
8062
8292
|
}
|
|
8293
|
+
function createHref(to) {
|
|
8294
|
+
return typeof to === "string" ? to : createPath(to);
|
|
8295
|
+
}
|
|
8296
|
+
function encodeLocation(to) {
|
|
8297
|
+
let href = typeof to === "string" ? to : createPath(to);
|
|
8298
|
+
href = href.replace(/ $/, "%20");
|
|
8299
|
+
let encoded = ABSOLUTE_URL_REGEX3.test(href) ? new URL(href) : new URL(href, "http://localhost");
|
|
8300
|
+
return {
|
|
8301
|
+
pathname: encoded.pathname,
|
|
8302
|
+
search: encoded.search,
|
|
8303
|
+
hash: encoded.hash
|
|
8304
|
+
};
|
|
8305
|
+
}
|
|
8306
|
+
var ABSOLUTE_URL_REGEX3 = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
|
|
8307
|
+
var ESCAPE_LOOKUP2 = {
|
|
8308
|
+
"&": "\\u0026",
|
|
8309
|
+
">": "\\u003e",
|
|
8310
|
+
"<": "\\u003c",
|
|
8311
|
+
"\u2028": "\\u2028",
|
|
8312
|
+
"\u2029": "\\u2029"
|
|
8313
|
+
};
|
|
8314
|
+
var ESCAPE_REGEX2 = /[&><\u2028\u2029]/g;
|
|
8315
|
+
function htmlEscape(str) {
|
|
8316
|
+
return str.replace(ESCAPE_REGEX2, (match) => ESCAPE_LOOKUP2[match]);
|
|
8317
|
+
}
|
|
8063
8318
|
|
|
8064
8319
|
// lib/dom/ssr/server.tsx
|
|
8065
|
-
import * as
|
|
8320
|
+
import * as React12 from "react";
|
|
8066
8321
|
function ServerRouter({
|
|
8067
8322
|
context,
|
|
8068
8323
|
url,
|
|
@@ -8090,7 +8345,7 @@ function ServerRouter({
|
|
|
8090
8345
|
}
|
|
8091
8346
|
}
|
|
8092
8347
|
let router = createStaticRouter(routes, context.staticHandlerContext);
|
|
8093
|
-
return /* @__PURE__ */
|
|
8348
|
+
return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(
|
|
8094
8349
|
FrameworkContext.Provider,
|
|
8095
8350
|
{
|
|
8096
8351
|
value: {
|
|
@@ -8104,7 +8359,7 @@ function ServerRouter({
|
|
|
8104
8359
|
renderMeta: context.renderMeta
|
|
8105
8360
|
}
|
|
8106
8361
|
},
|
|
8107
|
-
/* @__PURE__ */
|
|
8362
|
+
/* @__PURE__ */ React12.createElement(RemixErrorBoundary, { location: router.state.location }, /* @__PURE__ */ React12.createElement(
|
|
8108
8363
|
StaticRouterProvider,
|
|
8109
8364
|
{
|
|
8110
8365
|
router,
|
|
@@ -8112,7 +8367,7 @@ function ServerRouter({
|
|
|
8112
8367
|
hydrate: false
|
|
8113
8368
|
}
|
|
8114
8369
|
))
|
|
8115
|
-
), context.serverHandoffStream ? /* @__PURE__ */
|
|
8370
|
+
), context.serverHandoffStream ? /* @__PURE__ */ React12.createElement(React12.Suspense, null, /* @__PURE__ */ React12.createElement(
|
|
8116
8371
|
StreamTransfer,
|
|
8117
8372
|
{
|
|
8118
8373
|
context,
|
|
@@ -8125,7 +8380,7 @@ function ServerRouter({
|
|
|
8125
8380
|
}
|
|
8126
8381
|
|
|
8127
8382
|
// lib/dom/ssr/routes-test-stub.tsx
|
|
8128
|
-
import * as
|
|
8383
|
+
import * as React13 from "react";
|
|
8129
8384
|
function createRoutesStub(routes, context = {}) {
|
|
8130
8385
|
return function RoutesTestStub({
|
|
8131
8386
|
initialEntries,
|
|
@@ -8133,8 +8388,8 @@ function createRoutesStub(routes, context = {}) {
|
|
|
8133
8388
|
hydrationData,
|
|
8134
8389
|
future
|
|
8135
8390
|
}) {
|
|
8136
|
-
let routerRef =
|
|
8137
|
-
let remixContextRef =
|
|
8391
|
+
let routerRef = React13.useRef();
|
|
8392
|
+
let remixContextRef = React13.useRef();
|
|
8138
8393
|
if (routerRef.current == null) {
|
|
8139
8394
|
remixContextRef.current = {
|
|
8140
8395
|
future: {},
|
|
@@ -8148,29 +8403,29 @@ function createRoutesStub(routes, context = {}) {
|
|
|
8148
8403
|
isSpaMode: false
|
|
8149
8404
|
};
|
|
8150
8405
|
let patched = processRoutes(
|
|
8151
|
-
// @ts-expect-error
|
|
8406
|
+
// @ts-expect-error `StubRouteObject` is stricter about `loader`/`action`
|
|
8407
|
+
// types compared to `AgnosticRouteObject`
|
|
8152
8408
|
convertRoutesToDataRoutes(routes, (r) => r),
|
|
8153
|
-
context,
|
|
8154
8409
|
remixContextRef.current.manifest,
|
|
8155
8410
|
remixContextRef.current.routeModules
|
|
8156
8411
|
);
|
|
8157
8412
|
routerRef.current = createMemoryRouter(patched, {
|
|
8413
|
+
context,
|
|
8158
8414
|
initialEntries,
|
|
8159
8415
|
initialIndex,
|
|
8160
8416
|
hydrationData
|
|
8161
8417
|
});
|
|
8162
8418
|
}
|
|
8163
|
-
return /* @__PURE__ */
|
|
8419
|
+
return /* @__PURE__ */ React13.createElement(FrameworkContext.Provider, { value: remixContextRef.current }, /* @__PURE__ */ React13.createElement(RouterProvider, { router: routerRef.current }));
|
|
8164
8420
|
};
|
|
8165
8421
|
}
|
|
8166
|
-
function processRoutes(routes,
|
|
8422
|
+
function processRoutes(routes, manifest, routeModules, parentId) {
|
|
8167
8423
|
return routes.map((route) => {
|
|
8168
8424
|
if (!route.id) {
|
|
8169
8425
|
throw new Error(
|
|
8170
8426
|
"Expected a route.id in @remix-run/testing processRoutes() function"
|
|
8171
8427
|
);
|
|
8172
8428
|
}
|
|
8173
|
-
let { loader, action } = route;
|
|
8174
8429
|
let newRoute = {
|
|
8175
8430
|
id: route.id,
|
|
8176
8431
|
path: route.path,
|
|
@@ -8178,8 +8433,8 @@ function processRoutes(routes, context, manifest, routeModules, parentId) {
|
|
|
8178
8433
|
Component: route.Component,
|
|
8179
8434
|
HydrateFallback: route.HydrateFallback,
|
|
8180
8435
|
ErrorBoundary: route.ErrorBoundary,
|
|
8181
|
-
action: action
|
|
8182
|
-
loader: loader
|
|
8436
|
+
action: route.action,
|
|
8437
|
+
loader: route.loader,
|
|
8183
8438
|
handle: route.handle,
|
|
8184
8439
|
shouldRevalidate: route.shouldRevalidate
|
|
8185
8440
|
};
|
|
@@ -8211,7 +8466,6 @@ function processRoutes(routes, context, manifest, routeModules, parentId) {
|
|
|
8211
8466
|
if (route.children) {
|
|
8212
8467
|
newRoute.children = processRoutes(
|
|
8213
8468
|
route.children,
|
|
8214
|
-
context,
|
|
8215
8469
|
manifest,
|
|
8216
8470
|
routeModules,
|
|
8217
8471
|
newRoute.id
|
|
@@ -8572,6 +8826,7 @@ function createStaticHandlerDataRoutes(manifest, future, parentId = "", routesBy
|
|
|
8572
8826
|
hasErrorBoundary: route.id === "root" || route.module.ErrorBoundary != null,
|
|
8573
8827
|
id: route.id,
|
|
8574
8828
|
path: route.path,
|
|
8829
|
+
middleware: route.module.middleware,
|
|
8575
8830
|
// Need to use RR's version in the param typed here to permit the optional
|
|
8576
8831
|
// context even though we know it'll always be provided in remix
|
|
8577
8832
|
loader: route.module.loader ? async (args) => {
|
|
@@ -8715,24 +8970,6 @@ function prependCookies(parentHeaders, childHeaders) {
|
|
|
8715
8970
|
|
|
8716
8971
|
// lib/server-runtime/single-fetch.ts
|
|
8717
8972
|
var SINGLE_FETCH_REDIRECT_STATUS = 202;
|
|
8718
|
-
function getSingleFetchDataStrategy2({
|
|
8719
|
-
isActionDataRequest,
|
|
8720
|
-
loadRouteIds
|
|
8721
|
-
} = {}) {
|
|
8722
|
-
return async ({ request, matches }) => {
|
|
8723
|
-
if (isActionDataRequest && request.method === "GET") {
|
|
8724
|
-
return {};
|
|
8725
|
-
}
|
|
8726
|
-
let matchesToLoad = loadRouteIds ? matches.filter((m) => loadRouteIds.includes(m.route.id)) : matches;
|
|
8727
|
-
let results = await Promise.all(
|
|
8728
|
-
matchesToLoad.map((match) => match.resolve())
|
|
8729
|
-
);
|
|
8730
|
-
return results.reduce(
|
|
8731
|
-
(acc, result, i) => Object.assign(acc, { [matchesToLoad[i].route.id]: result }),
|
|
8732
|
-
{}
|
|
8733
|
-
);
|
|
8734
|
-
};
|
|
8735
|
-
}
|
|
8736
8973
|
async function singleFetchAction(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {
|
|
8737
8974
|
try {
|
|
8738
8975
|
let handlerRequest = new Request(handlerUrl, {
|
|
@@ -8745,12 +8982,45 @@ async function singleFetchAction(build, serverMode, staticHandler, request, hand
|
|
|
8745
8982
|
let result = await staticHandler.query(handlerRequest, {
|
|
8746
8983
|
requestContext: loadContext,
|
|
8747
8984
|
skipLoaderErrorBubbling: true,
|
|
8748
|
-
|
|
8749
|
-
|
|
8750
|
-
|
|
8985
|
+
async respond(context) {
|
|
8986
|
+
let headers = getDocumentHeaders(build, context);
|
|
8987
|
+
if (isRedirectStatusCode(context.statusCode) && headers.has("Location")) {
|
|
8988
|
+
return generateSingleFetchResponse(request, build, serverMode, {
|
|
8989
|
+
result: getSingleFetchRedirect(
|
|
8990
|
+
context.statusCode,
|
|
8991
|
+
headers,
|
|
8992
|
+
build.basename
|
|
8993
|
+
),
|
|
8994
|
+
headers,
|
|
8995
|
+
status: SINGLE_FETCH_REDIRECT_STATUS
|
|
8996
|
+
});
|
|
8997
|
+
}
|
|
8998
|
+
if (context.errors) {
|
|
8999
|
+
Object.values(context.errors).forEach((err) => {
|
|
9000
|
+
if (!isRouteErrorResponse(err) || err.error) {
|
|
9001
|
+
handleError(err);
|
|
9002
|
+
}
|
|
9003
|
+
});
|
|
9004
|
+
context.errors = sanitizeErrors(context.errors, serverMode);
|
|
9005
|
+
}
|
|
9006
|
+
let singleFetchResult;
|
|
9007
|
+
if (context.errors) {
|
|
9008
|
+
singleFetchResult = { error: Object.values(context.errors)[0] };
|
|
9009
|
+
} else {
|
|
9010
|
+
singleFetchResult = {
|
|
9011
|
+
data: Object.values(context.actionData || {})[0]
|
|
9012
|
+
};
|
|
9013
|
+
}
|
|
9014
|
+
return generateSingleFetchResponse(request, build, serverMode, {
|
|
9015
|
+
result: singleFetchResult,
|
|
9016
|
+
headers,
|
|
9017
|
+
status: context.statusCode
|
|
9018
|
+
});
|
|
9019
|
+
}
|
|
8751
9020
|
});
|
|
8752
|
-
|
|
8753
|
-
|
|
9021
|
+
invariant3(isResponse(result), " Expected a Response from query()");
|
|
9022
|
+
if (isRedirectResponse(result)) {
|
|
9023
|
+
return generateSingleFetchResponse(request, build, serverMode, {
|
|
8754
9024
|
result: getSingleFetchRedirect(
|
|
8755
9025
|
result.status,
|
|
8756
9026
|
result.headers,
|
|
@@ -8758,47 +9028,16 @@ async function singleFetchAction(build, serverMode, staticHandler, request, hand
|
|
|
8758
9028
|
),
|
|
8759
9029
|
headers: result.headers,
|
|
8760
9030
|
status: SINGLE_FETCH_REDIRECT_STATUS
|
|
8761
|
-
};
|
|
8762
|
-
}
|
|
8763
|
-
let context = result;
|
|
8764
|
-
let headers = getDocumentHeaders(build, context);
|
|
8765
|
-
if (isRedirectStatusCode(context.statusCode) && headers.has("Location")) {
|
|
8766
|
-
return {
|
|
8767
|
-
result: getSingleFetchRedirect(
|
|
8768
|
-
context.statusCode,
|
|
8769
|
-
headers,
|
|
8770
|
-
build.basename
|
|
8771
|
-
),
|
|
8772
|
-
headers,
|
|
8773
|
-
status: SINGLE_FETCH_REDIRECT_STATUS
|
|
8774
|
-
};
|
|
8775
|
-
}
|
|
8776
|
-
if (context.errors) {
|
|
8777
|
-
Object.values(context.errors).forEach((err) => {
|
|
8778
|
-
if (!isRouteErrorResponse(err) || err.error) {
|
|
8779
|
-
handleError(err);
|
|
8780
|
-
}
|
|
8781
9031
|
});
|
|
8782
|
-
context.errors = sanitizeErrors(context.errors, serverMode);
|
|
8783
9032
|
}
|
|
8784
|
-
|
|
8785
|
-
if (context.errors) {
|
|
8786
|
-
singleFetchResult = { error: Object.values(context.errors)[0] };
|
|
8787
|
-
} else {
|
|
8788
|
-
singleFetchResult = { data: Object.values(context.actionData || {})[0] };
|
|
8789
|
-
}
|
|
8790
|
-
return {
|
|
8791
|
-
result: singleFetchResult,
|
|
8792
|
-
headers,
|
|
8793
|
-
status: context.statusCode
|
|
8794
|
-
};
|
|
9033
|
+
return result;
|
|
8795
9034
|
} catch (error) {
|
|
8796
9035
|
handleError(error);
|
|
8797
|
-
return {
|
|
9036
|
+
return generateSingleFetchResponse(request, build, serverMode, {
|
|
8798
9037
|
result: { error },
|
|
8799
9038
|
headers: new Headers(),
|
|
8800
9039
|
status: 500
|
|
8801
|
-
};
|
|
9040
|
+
});
|
|
8802
9041
|
}
|
|
8803
9042
|
}
|
|
8804
9043
|
async function singleFetchLoaders(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {
|
|
@@ -8811,12 +9050,51 @@ async function singleFetchLoaders(build, serverMode, staticHandler, request, han
|
|
|
8811
9050
|
let result = await staticHandler.query(handlerRequest, {
|
|
8812
9051
|
requestContext: loadContext,
|
|
8813
9052
|
skipLoaderErrorBubbling: true,
|
|
8814
|
-
|
|
8815
|
-
|
|
8816
|
-
|
|
9053
|
+
async respond(context) {
|
|
9054
|
+
let headers = getDocumentHeaders(build, context);
|
|
9055
|
+
if (isRedirectStatusCode(context.statusCode) && headers.has("Location")) {
|
|
9056
|
+
return generateSingleFetchResponse(request, build, serverMode, {
|
|
9057
|
+
result: {
|
|
9058
|
+
[SingleFetchRedirectSymbol]: getSingleFetchRedirect(
|
|
9059
|
+
context.statusCode,
|
|
9060
|
+
headers,
|
|
9061
|
+
build.basename
|
|
9062
|
+
)
|
|
9063
|
+
},
|
|
9064
|
+
headers,
|
|
9065
|
+
status: SINGLE_FETCH_REDIRECT_STATUS
|
|
9066
|
+
});
|
|
9067
|
+
}
|
|
9068
|
+
if (context.errors) {
|
|
9069
|
+
Object.values(context.errors).forEach((err) => {
|
|
9070
|
+
if (!isRouteErrorResponse(err) || err.error) {
|
|
9071
|
+
handleError(err);
|
|
9072
|
+
}
|
|
9073
|
+
});
|
|
9074
|
+
context.errors = sanitizeErrors(context.errors, serverMode);
|
|
9075
|
+
}
|
|
9076
|
+
let results = {};
|
|
9077
|
+
let loadedMatches = loadRouteIds ? context.matches.filter(
|
|
9078
|
+
(m) => m.route.loader && loadRouteIds.includes(m.route.id)
|
|
9079
|
+
) : context.matches;
|
|
9080
|
+
loadedMatches.forEach((m) => {
|
|
9081
|
+
let { id } = m.route;
|
|
9082
|
+
if (context.errors && context.errors.hasOwnProperty(id)) {
|
|
9083
|
+
results[id] = { error: context.errors[id] };
|
|
9084
|
+
} else if (context.loaderData.hasOwnProperty(id)) {
|
|
9085
|
+
results[id] = { data: context.loaderData[id] };
|
|
9086
|
+
}
|
|
9087
|
+
});
|
|
9088
|
+
return generateSingleFetchResponse(request, build, serverMode, {
|
|
9089
|
+
result: results,
|
|
9090
|
+
headers,
|
|
9091
|
+
status: context.statusCode
|
|
9092
|
+
});
|
|
9093
|
+
}
|
|
8817
9094
|
});
|
|
8818
|
-
|
|
8819
|
-
|
|
9095
|
+
invariant3(isResponse(result), " Expected a Response from query()");
|
|
9096
|
+
if (isRedirectResponse(result)) {
|
|
9097
|
+
return generateSingleFetchResponse(request, build, serverMode, {
|
|
8820
9098
|
result: {
|
|
8821
9099
|
[SingleFetchRedirectSymbol]: getSingleFetchRedirect(
|
|
8822
9100
|
result.status,
|
|
@@ -8826,56 +9104,41 @@ async function singleFetchLoaders(build, serverMode, staticHandler, request, han
|
|
|
8826
9104
|
},
|
|
8827
9105
|
headers: result.headers,
|
|
8828
9106
|
status: SINGLE_FETCH_REDIRECT_STATUS
|
|
8829
|
-
};
|
|
8830
|
-
}
|
|
8831
|
-
let context = result;
|
|
8832
|
-
let headers = getDocumentHeaders(build, context);
|
|
8833
|
-
if (isRedirectStatusCode(context.statusCode) && headers.has("Location")) {
|
|
8834
|
-
return {
|
|
8835
|
-
result: {
|
|
8836
|
-
[SingleFetchRedirectSymbol]: getSingleFetchRedirect(
|
|
8837
|
-
context.statusCode,
|
|
8838
|
-
headers,
|
|
8839
|
-
build.basename
|
|
8840
|
-
)
|
|
8841
|
-
},
|
|
8842
|
-
headers,
|
|
8843
|
-
status: SINGLE_FETCH_REDIRECT_STATUS
|
|
8844
|
-
};
|
|
8845
|
-
}
|
|
8846
|
-
if (context.errors) {
|
|
8847
|
-
Object.values(context.errors).forEach((err) => {
|
|
8848
|
-
if (!isRouteErrorResponse(err) || err.error) {
|
|
8849
|
-
handleError(err);
|
|
8850
|
-
}
|
|
8851
9107
|
});
|
|
8852
|
-
context.errors = sanitizeErrors(context.errors, serverMode);
|
|
8853
9108
|
}
|
|
8854
|
-
|
|
8855
|
-
let loadedMatches = loadRouteIds ? context.matches.filter(
|
|
8856
|
-
(m) => m.route.loader && loadRouteIds.includes(m.route.id)
|
|
8857
|
-
) : context.matches;
|
|
8858
|
-
loadedMatches.forEach((m) => {
|
|
8859
|
-
let { id } = m.route;
|
|
8860
|
-
if (context.errors && context.errors.hasOwnProperty(id)) {
|
|
8861
|
-
results[id] = { error: context.errors[id] };
|
|
8862
|
-
} else if (context.loaderData.hasOwnProperty(id)) {
|
|
8863
|
-
results[id] = { data: context.loaderData[id] };
|
|
8864
|
-
}
|
|
8865
|
-
});
|
|
8866
|
-
return {
|
|
8867
|
-
result: results,
|
|
8868
|
-
headers,
|
|
8869
|
-
status: context.statusCode
|
|
8870
|
-
};
|
|
9109
|
+
return result;
|
|
8871
9110
|
} catch (error) {
|
|
8872
9111
|
handleError(error);
|
|
8873
|
-
return {
|
|
9112
|
+
return generateSingleFetchResponse(request, build, serverMode, {
|
|
8874
9113
|
result: { root: { error } },
|
|
8875
9114
|
headers: new Headers(),
|
|
8876
9115
|
status: 500
|
|
8877
|
-
};
|
|
9116
|
+
});
|
|
9117
|
+
}
|
|
9118
|
+
}
|
|
9119
|
+
function generateSingleFetchResponse(request, build, serverMode, {
|
|
9120
|
+
result,
|
|
9121
|
+
headers,
|
|
9122
|
+
status
|
|
9123
|
+
}) {
|
|
9124
|
+
let resultHeaders = new Headers(headers);
|
|
9125
|
+
resultHeaders.set("X-Remix-Response", "yes");
|
|
9126
|
+
if (status === 304) {
|
|
9127
|
+
return new Response(null, { status: 304, headers: resultHeaders });
|
|
8878
9128
|
}
|
|
9129
|
+
resultHeaders.set("Content-Type", "text/x-script");
|
|
9130
|
+
return new Response(
|
|
9131
|
+
encodeViaTurboStream(
|
|
9132
|
+
result,
|
|
9133
|
+
request.signal,
|
|
9134
|
+
build.entry.module.streamTimeout,
|
|
9135
|
+
serverMode
|
|
9136
|
+
),
|
|
9137
|
+
{
|
|
9138
|
+
status: status || 200,
|
|
9139
|
+
headers: resultHeaders
|
|
9140
|
+
}
|
|
9141
|
+
);
|
|
8879
9142
|
}
|
|
8880
9143
|
function getSingleFetchRedirect(status, headers, basename) {
|
|
8881
9144
|
let redirect2 = headers.get("Location");
|
|
@@ -9117,7 +9380,7 @@ async function handleManifestRequest(build, routes, url) {
|
|
|
9117
9380
|
return new Response("Invalid Request", { status: 400 });
|
|
9118
9381
|
}
|
|
9119
9382
|
async function handleSingleFetchRequest(serverMode, build, staticHandler, request, handlerUrl, loadContext, handleError) {
|
|
9120
|
-
let
|
|
9383
|
+
let response = request.method !== "GET" ? await singleFetchAction(
|
|
9121
9384
|
build,
|
|
9122
9385
|
serverMode,
|
|
9123
9386
|
staticHandler,
|
|
@@ -9134,129 +9397,67 @@ async function handleSingleFetchRequest(serverMode, build, staticHandler, reques
|
|
|
9134
9397
|
loadContext,
|
|
9135
9398
|
handleError
|
|
9136
9399
|
);
|
|
9137
|
-
|
|
9138
|
-
resultHeaders.set("X-Remix-Response", "yes");
|
|
9139
|
-
if (status === 304) {
|
|
9140
|
-
return new Response(null, { status: 304, headers: resultHeaders });
|
|
9141
|
-
}
|
|
9142
|
-
resultHeaders.set("Content-Type", "text/x-script");
|
|
9143
|
-
return new Response(
|
|
9144
|
-
encodeViaTurboStream(
|
|
9145
|
-
result,
|
|
9146
|
-
request.signal,
|
|
9147
|
-
build.entry.module.streamTimeout,
|
|
9148
|
-
serverMode
|
|
9149
|
-
),
|
|
9150
|
-
{
|
|
9151
|
-
status: status || 200,
|
|
9152
|
-
headers: resultHeaders
|
|
9153
|
-
}
|
|
9154
|
-
);
|
|
9400
|
+
return response;
|
|
9155
9401
|
}
|
|
9156
9402
|
async function handleDocumentRequest(serverMode, build, staticHandler, request, loadContext, handleError, criticalCss) {
|
|
9157
|
-
let context;
|
|
9158
9403
|
try {
|
|
9159
|
-
|
|
9160
|
-
requestContext: loadContext
|
|
9404
|
+
let response = await staticHandler.query(request, {
|
|
9405
|
+
requestContext: loadContext,
|
|
9406
|
+
respond: renderHtml
|
|
9161
9407
|
});
|
|
9408
|
+
invariant3(
|
|
9409
|
+
isResponse(response),
|
|
9410
|
+
"Expected a Response to be returned from query"
|
|
9411
|
+
);
|
|
9412
|
+
return response;
|
|
9162
9413
|
} catch (error) {
|
|
9163
9414
|
handleError(error);
|
|
9164
9415
|
return new Response(null, { status: 500 });
|
|
9165
9416
|
}
|
|
9166
|
-
|
|
9167
|
-
|
|
9168
|
-
|
|
9169
|
-
|
|
9170
|
-
|
|
9171
|
-
|
|
9172
|
-
|
|
9173
|
-
if (context.errors) {
|
|
9174
|
-
Object.values(context.errors).forEach((err) => {
|
|
9175
|
-
if (!isRouteErrorResponse(err) || err.error) {
|
|
9176
|
-
handleError(err);
|
|
9177
|
-
}
|
|
9178
|
-
});
|
|
9179
|
-
context.errors = sanitizeErrors(context.errors, serverMode);
|
|
9180
|
-
}
|
|
9181
|
-
let state = {
|
|
9182
|
-
loaderData: context.loaderData,
|
|
9183
|
-
actionData: context.actionData,
|
|
9184
|
-
errors: serializeErrors2(context.errors, serverMode)
|
|
9185
|
-
};
|
|
9186
|
-
let entryContext = {
|
|
9187
|
-
manifest: build.assets,
|
|
9188
|
-
routeModules: createEntryRouteModules(build.routes),
|
|
9189
|
-
staticHandlerContext: context,
|
|
9190
|
-
criticalCss,
|
|
9191
|
-
serverHandoffString: createServerHandoffString({
|
|
9192
|
-
basename: build.basename,
|
|
9193
|
-
criticalCss,
|
|
9194
|
-
future: build.future,
|
|
9195
|
-
isSpaMode: build.isSpaMode
|
|
9196
|
-
}),
|
|
9197
|
-
serverHandoffStream: encodeViaTurboStream(
|
|
9198
|
-
state,
|
|
9199
|
-
request.signal,
|
|
9200
|
-
build.entry.module.streamTimeout,
|
|
9201
|
-
serverMode
|
|
9202
|
-
),
|
|
9203
|
-
renderMeta: {},
|
|
9204
|
-
future: build.future,
|
|
9205
|
-
isSpaMode: build.isSpaMode,
|
|
9206
|
-
serializeError: (err) => serializeError(err, serverMode)
|
|
9207
|
-
};
|
|
9208
|
-
let handleDocumentRequestFunction = build.entry.module.default;
|
|
9209
|
-
try {
|
|
9210
|
-
return await handleDocumentRequestFunction(
|
|
9211
|
-
request,
|
|
9212
|
-
context.statusCode,
|
|
9213
|
-
headers,
|
|
9214
|
-
entryContext,
|
|
9215
|
-
loadContext
|
|
9216
|
-
);
|
|
9217
|
-
} catch (error) {
|
|
9218
|
-
handleError(error);
|
|
9219
|
-
let errorForSecondRender = error;
|
|
9220
|
-
if (isResponse(error)) {
|
|
9221
|
-
try {
|
|
9222
|
-
let data2 = await unwrapResponse(error);
|
|
9223
|
-
errorForSecondRender = new ErrorResponseImpl(
|
|
9224
|
-
error.status,
|
|
9225
|
-
error.statusText,
|
|
9226
|
-
data2
|
|
9227
|
-
);
|
|
9228
|
-
} catch (e) {
|
|
9229
|
-
}
|
|
9417
|
+
async function renderHtml(context) {
|
|
9418
|
+
if (isResponse(context)) {
|
|
9419
|
+
return context;
|
|
9420
|
+
}
|
|
9421
|
+
let headers = getDocumentHeaders(build, context);
|
|
9422
|
+
if (context.statusCode === 304) {
|
|
9423
|
+
return new Response(null, { status: 304, headers });
|
|
9230
9424
|
}
|
|
9231
|
-
context = getStaticContextFromError(
|
|
9232
|
-
staticHandler.dataRoutes,
|
|
9233
|
-
context,
|
|
9234
|
-
errorForSecondRender
|
|
9235
|
-
);
|
|
9236
9425
|
if (context.errors) {
|
|
9426
|
+
Object.values(context.errors).forEach((err) => {
|
|
9427
|
+
if (!isRouteErrorResponse(err) || err.error) {
|
|
9428
|
+
handleError(err);
|
|
9429
|
+
}
|
|
9430
|
+
});
|
|
9237
9431
|
context.errors = sanitizeErrors(context.errors, serverMode);
|
|
9238
9432
|
}
|
|
9239
|
-
let
|
|
9433
|
+
let state = {
|
|
9240
9434
|
loaderData: context.loaderData,
|
|
9241
9435
|
actionData: context.actionData,
|
|
9242
9436
|
errors: serializeErrors2(context.errors, serverMode)
|
|
9243
9437
|
};
|
|
9244
|
-
entryContext = {
|
|
9245
|
-
|
|
9438
|
+
let entryContext = {
|
|
9439
|
+
manifest: build.assets,
|
|
9440
|
+
routeModules: createEntryRouteModules(build.routes),
|
|
9246
9441
|
staticHandlerContext: context,
|
|
9442
|
+
criticalCss,
|
|
9247
9443
|
serverHandoffString: createServerHandoffString({
|
|
9248
9444
|
basename: build.basename,
|
|
9445
|
+
criticalCss,
|
|
9249
9446
|
future: build.future,
|
|
9250
9447
|
isSpaMode: build.isSpaMode
|
|
9251
9448
|
}),
|
|
9252
9449
|
serverHandoffStream: encodeViaTurboStream(
|
|
9253
|
-
|
|
9450
|
+
state,
|
|
9254
9451
|
request.signal,
|
|
9255
9452
|
build.entry.module.streamTimeout,
|
|
9256
9453
|
serverMode
|
|
9257
9454
|
),
|
|
9258
|
-
renderMeta: {}
|
|
9455
|
+
renderMeta: {},
|
|
9456
|
+
future: build.future,
|
|
9457
|
+
isSpaMode: build.isSpaMode,
|
|
9458
|
+
serializeError: (err) => serializeError(err, serverMode)
|
|
9259
9459
|
};
|
|
9460
|
+
let handleDocumentRequestFunction = build.entry.module.default;
|
|
9260
9461
|
try {
|
|
9261
9462
|
return await handleDocumentRequestFunction(
|
|
9262
9463
|
request,
|
|
@@ -9265,9 +9466,61 @@ async function handleDocumentRequest(serverMode, build, staticHandler, request,
|
|
|
9265
9466
|
entryContext,
|
|
9266
9467
|
loadContext
|
|
9267
9468
|
);
|
|
9268
|
-
} catch (
|
|
9269
|
-
handleError(
|
|
9270
|
-
|
|
9469
|
+
} catch (error) {
|
|
9470
|
+
handleError(error);
|
|
9471
|
+
let errorForSecondRender = error;
|
|
9472
|
+
if (isResponse(error)) {
|
|
9473
|
+
try {
|
|
9474
|
+
let data2 = await unwrapResponse(error);
|
|
9475
|
+
errorForSecondRender = new ErrorResponseImpl(
|
|
9476
|
+
error.status,
|
|
9477
|
+
error.statusText,
|
|
9478
|
+
data2
|
|
9479
|
+
);
|
|
9480
|
+
} catch (e) {
|
|
9481
|
+
}
|
|
9482
|
+
}
|
|
9483
|
+
context = getStaticContextFromError(
|
|
9484
|
+
staticHandler.dataRoutes,
|
|
9485
|
+
context,
|
|
9486
|
+
errorForSecondRender
|
|
9487
|
+
);
|
|
9488
|
+
if (context.errors) {
|
|
9489
|
+
context.errors = sanitizeErrors(context.errors, serverMode);
|
|
9490
|
+
}
|
|
9491
|
+
let state2 = {
|
|
9492
|
+
loaderData: context.loaderData,
|
|
9493
|
+
actionData: context.actionData,
|
|
9494
|
+
errors: serializeErrors2(context.errors, serverMode)
|
|
9495
|
+
};
|
|
9496
|
+
entryContext = {
|
|
9497
|
+
...entryContext,
|
|
9498
|
+
staticHandlerContext: context,
|
|
9499
|
+
serverHandoffString: createServerHandoffString({
|
|
9500
|
+
basename: build.basename,
|
|
9501
|
+
future: build.future,
|
|
9502
|
+
isSpaMode: build.isSpaMode
|
|
9503
|
+
}),
|
|
9504
|
+
serverHandoffStream: encodeViaTurboStream(
|
|
9505
|
+
state2,
|
|
9506
|
+
request.signal,
|
|
9507
|
+
build.entry.module.streamTimeout,
|
|
9508
|
+
serverMode
|
|
9509
|
+
),
|
|
9510
|
+
renderMeta: {}
|
|
9511
|
+
};
|
|
9512
|
+
try {
|
|
9513
|
+
return await handleDocumentRequestFunction(
|
|
9514
|
+
request,
|
|
9515
|
+
context.statusCode,
|
|
9516
|
+
headers,
|
|
9517
|
+
entryContext,
|
|
9518
|
+
loadContext
|
|
9519
|
+
);
|
|
9520
|
+
} catch (error2) {
|
|
9521
|
+
handleError(error2);
|
|
9522
|
+
return returnLastResortErrorResponse(error2, serverMode);
|
|
9523
|
+
}
|
|
9271
9524
|
}
|
|
9272
9525
|
}
|
|
9273
9526
|
}
|