@react-router/dev 7.15.1 → 7.17.0
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 +34 -0
- package/dist/cli/index.js +64 -6
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.js +64 -6
- package/dist/vite.js +117 -13
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# `@react-router/dev`
|
|
2
2
|
|
|
3
|
+
## v7.17.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Fix future flag warning URLs and only log each future flag warning one time ([#15138](https://github.com/remix-run/react-router/pull/15138))
|
|
8
|
+
|
|
9
|
+
### Unstable Changes
|
|
10
|
+
|
|
11
|
+
⚠️ _[Unstable features](https://reactrouter.com/community/api-development-strategy#unstable-flags) are not recommended for production use_
|
|
12
|
+
|
|
13
|
+
- Prevent RSC route module server exports from being scanned by the client dependency optimizer when `future.unstable_optimizeDeps` is enabled. ([#15005](https://github.com/remix-run/react-router/pull/15005))
|
|
14
|
+
- Updated dependencies:
|
|
15
|
+
- [`react-router@7.17.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.17.0)
|
|
16
|
+
- [`@react-router/node@7.17.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.17.0)
|
|
17
|
+
- [`@react-router/serve@7.17.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/serve@7.17.0)
|
|
18
|
+
|
|
19
|
+
## v7.16.0
|
|
20
|
+
|
|
21
|
+
### Minor Changes
|
|
22
|
+
|
|
23
|
+
- Stabilize `future.unstable_trailingSlashAwareDataRequests` as `future.v8_trailingSlashAwareDataRequests` ([#15098](https://github.com/remix-run/react-router/pull/15098))
|
|
24
|
+
- The unstable flag is no longer supported and will error during config resolution
|
|
25
|
+
|
|
26
|
+
- Log future flag warnings for upcoming React Router v8 flags ([#15029](https://github.com/remix-run/react-router/pull/15029))
|
|
27
|
+
- `v8_middleware`, `v8_splitRouteModules`, `v8_viteEnvironmentApi`, `v8_passThroughRequests`, `v8_trailingSlashAwareDataRequests`
|
|
28
|
+
|
|
29
|
+
### Patch Changes
|
|
30
|
+
|
|
31
|
+
- Updated dependencies:
|
|
32
|
+
- [`react-router@7.16.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.16.0)
|
|
33
|
+
- [`@react-router/node@7.16.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.16.0)
|
|
34
|
+
- [`@react-router/serve@7.16.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/serve@7.16.0)
|
|
35
|
+
|
|
3
36
|
## v7.15.1
|
|
4
37
|
|
|
5
38
|
### Patch Changes
|
|
@@ -11,6 +44,7 @@
|
|
|
11
44
|
strip the base prefix from server-build virtual module import paths, causing
|
|
12
45
|
"Failed to load url /root.tsx" errors. The fix uses `/@fs/` absolute paths
|
|
13
46
|
for those imports to bypass Vite's base-stripping logic.
|
|
47
|
+
|
|
14
48
|
- Updated dependencies:
|
|
15
49
|
- [`react-router@7.15.1`](https://github.com/remix-run/react-router/releases/tag/react-router@7.15.1)
|
|
16
50
|
- [`@react-router/node@7.15.1`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.15.1)
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @react-router/dev v7.
|
|
3
|
+
* @react-router/dev v7.17.0
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -312,7 +312,8 @@ async function resolveConfig({
|
|
|
312
312
|
viteNodeContext,
|
|
313
313
|
reactRouterConfigFile,
|
|
314
314
|
skipRoutes,
|
|
315
|
-
validateConfig
|
|
315
|
+
validateConfig,
|
|
316
|
+
shouldLogFutureFlagWarnings
|
|
316
317
|
}) {
|
|
317
318
|
let reactRouterUserConfig = {};
|
|
318
319
|
if (reactRouterConfigFile) {
|
|
@@ -514,6 +515,11 @@ async function resolveConfig({
|
|
|
514
515
|
"The `future.unstable_passThroughRequests` flag has been stabilized as `future.v8_passThroughRequests`"
|
|
515
516
|
);
|
|
516
517
|
}
|
|
518
|
+
if ("unstable_trailingSlashAwareDataRequests" in futureConfig) {
|
|
519
|
+
return err(
|
|
520
|
+
"The `future.unstable_trailingSlashAwareDataRequests` flag has been stabilized as `future.v8_trailingSlashAwareDataRequests`"
|
|
521
|
+
);
|
|
522
|
+
}
|
|
517
523
|
if ("unstable_subResourceIntegrity" in futureConfig) {
|
|
518
524
|
return err(
|
|
519
525
|
"The `future.unstable_subResourceIntegrity` flag has been stabilized and moved to a top-level `config.subResourceIntegrity` field"
|
|
@@ -523,7 +529,7 @@ async function resolveConfig({
|
|
|
523
529
|
let future = {
|
|
524
530
|
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
525
531
|
v8_passThroughRequests: userAndPresetConfigs.future?.v8_passThroughRequests ?? false,
|
|
526
|
-
|
|
532
|
+
v8_trailingSlashAwareDataRequests: userAndPresetConfigs.future?.v8_trailingSlashAwareDataRequests ?? false,
|
|
527
533
|
unstable_previewServerPrerendering: userAndPresetConfigs.future?.unstable_previewServerPrerendering ?? false,
|
|
528
534
|
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
529
535
|
v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
|
|
@@ -551,14 +557,59 @@ async function resolveConfig({
|
|
|
551
557
|
for (let preset of reactRouterUserConfig.presets ?? []) {
|
|
552
558
|
await preset.reactRouterConfigResolved?.({ reactRouterConfig });
|
|
553
559
|
}
|
|
560
|
+
if (shouldLogFutureFlagWarnings) {
|
|
561
|
+
logFutureFlagWarnings(userAndPresetConfigs.future || {});
|
|
562
|
+
}
|
|
554
563
|
return ok(reactRouterConfig);
|
|
555
564
|
}
|
|
565
|
+
function logFutureFlagWarning(flag, message) {
|
|
566
|
+
console.log(
|
|
567
|
+
import_picocolors.default.yellow(
|
|
568
|
+
` \u26A0\uFE0F Future Flag Warning: ${message}
|
|
569
|
+
You can use the \`future.${flag}\` flag to opt in early.
|
|
570
|
+
-> https://reactrouter.com/v7/upgrading/future#future${flag.toLowerCase()}`
|
|
571
|
+
)
|
|
572
|
+
);
|
|
573
|
+
}
|
|
574
|
+
function logFutureFlagWarnings(future) {
|
|
575
|
+
if (future.v8_middleware === void 0) {
|
|
576
|
+
logFutureFlagWarning(
|
|
577
|
+
"v8_middleware",
|
|
578
|
+
"Route middleware support is changing in React Router v8."
|
|
579
|
+
);
|
|
580
|
+
}
|
|
581
|
+
if (future.v8_splitRouteModules === void 0) {
|
|
582
|
+
logFutureFlagWarning(
|
|
583
|
+
"v8_splitRouteModules",
|
|
584
|
+
"Route module splitting behavior is changing in React Router v8."
|
|
585
|
+
);
|
|
586
|
+
}
|
|
587
|
+
if (future.v8_viteEnvironmentApi === void 0) {
|
|
588
|
+
logFutureFlagWarning(
|
|
589
|
+
"v8_viteEnvironmentApi",
|
|
590
|
+
"Vite Environment API usage is changing in React Router v8."
|
|
591
|
+
);
|
|
592
|
+
}
|
|
593
|
+
if (future.v8_passThroughRequests === void 0) {
|
|
594
|
+
logFutureFlagWarning(
|
|
595
|
+
"v8_passThroughRequests",
|
|
596
|
+
"Request handling behavior is changing in React Router v8."
|
|
597
|
+
);
|
|
598
|
+
}
|
|
599
|
+
if (future.v8_trailingSlashAwareDataRequests === void 0) {
|
|
600
|
+
logFutureFlagWarning(
|
|
601
|
+
"v8_trailingSlashAwareDataRequests",
|
|
602
|
+
"Data request URL formats are changing in React Router v8."
|
|
603
|
+
);
|
|
604
|
+
}
|
|
605
|
+
}
|
|
556
606
|
async function createConfigLoader({
|
|
557
607
|
rootDirectory: root,
|
|
558
608
|
watch: watch2,
|
|
559
609
|
mode,
|
|
560
610
|
skipRoutes,
|
|
561
|
-
validateConfig
|
|
611
|
+
validateConfig,
|
|
612
|
+
shouldLogFutureFlagWarnings
|
|
562
613
|
}) {
|
|
563
614
|
root = import_pathe3.default.normalize(root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd());
|
|
564
615
|
let vite2 = await import("vite");
|
|
@@ -582,10 +633,17 @@ async function createConfigLoader({
|
|
|
582
633
|
viteNodeContext,
|
|
583
634
|
reactRouterConfigFile,
|
|
584
635
|
skipRoutes,
|
|
585
|
-
validateConfig
|
|
636
|
+
validateConfig,
|
|
637
|
+
shouldLogFutureFlagWarnings
|
|
586
638
|
});
|
|
587
639
|
let appDirectory;
|
|
588
|
-
let initialConfigResult = await
|
|
640
|
+
let initialConfigResult = await resolveConfig({
|
|
641
|
+
root,
|
|
642
|
+
viteNodeContext,
|
|
643
|
+
reactRouterConfigFile,
|
|
644
|
+
skipRoutes,
|
|
645
|
+
validateConfig
|
|
646
|
+
});
|
|
589
647
|
if (!initialConfigResult.ok) {
|
|
590
648
|
throw new Error(initialConfigResult.error);
|
|
591
649
|
}
|
package/dist/config.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ type ServerModuleFormat = "esm" | "cjs";
|
|
|
39
39
|
interface FutureConfig {
|
|
40
40
|
unstable_optimizeDeps: boolean;
|
|
41
41
|
v8_passThroughRequests: boolean;
|
|
42
|
-
|
|
42
|
+
v8_trailingSlashAwareDataRequests: boolean;
|
|
43
43
|
/**
|
|
44
44
|
* Prerender with Vite Preview server
|
|
45
45
|
*/
|
package/dist/config.js
CHANGED
package/dist/routes.js
CHANGED
package/dist/vite/cloudflare.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v7.
|
|
2
|
+
* @react-router/dev v7.17.0
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -338,7 +338,8 @@ async function resolveConfig({
|
|
|
338
338
|
viteNodeContext,
|
|
339
339
|
reactRouterConfigFile,
|
|
340
340
|
skipRoutes,
|
|
341
|
-
validateConfig
|
|
341
|
+
validateConfig,
|
|
342
|
+
shouldLogFutureFlagWarnings
|
|
342
343
|
}) {
|
|
343
344
|
let reactRouterUserConfig = {};
|
|
344
345
|
if (reactRouterConfigFile) {
|
|
@@ -540,6 +541,11 @@ async function resolveConfig({
|
|
|
540
541
|
"The `future.unstable_passThroughRequests` flag has been stabilized as `future.v8_passThroughRequests`"
|
|
541
542
|
);
|
|
542
543
|
}
|
|
544
|
+
if ("unstable_trailingSlashAwareDataRequests" in futureConfig) {
|
|
545
|
+
return err(
|
|
546
|
+
"The `future.unstable_trailingSlashAwareDataRequests` flag has been stabilized as `future.v8_trailingSlashAwareDataRequests`"
|
|
547
|
+
);
|
|
548
|
+
}
|
|
543
549
|
if ("unstable_subResourceIntegrity" in futureConfig) {
|
|
544
550
|
return err(
|
|
545
551
|
"The `future.unstable_subResourceIntegrity` flag has been stabilized and moved to a top-level `config.subResourceIntegrity` field"
|
|
@@ -549,7 +555,7 @@ async function resolveConfig({
|
|
|
549
555
|
let future = {
|
|
550
556
|
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
551
557
|
v8_passThroughRequests: userAndPresetConfigs.future?.v8_passThroughRequests ?? false,
|
|
552
|
-
|
|
558
|
+
v8_trailingSlashAwareDataRequests: userAndPresetConfigs.future?.v8_trailingSlashAwareDataRequests ?? false,
|
|
553
559
|
unstable_previewServerPrerendering: userAndPresetConfigs.future?.unstable_previewServerPrerendering ?? false,
|
|
554
560
|
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
555
561
|
v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
|
|
@@ -577,14 +583,59 @@ async function resolveConfig({
|
|
|
577
583
|
for (let preset of reactRouterUserConfig.presets ?? []) {
|
|
578
584
|
await preset.reactRouterConfigResolved?.({ reactRouterConfig });
|
|
579
585
|
}
|
|
586
|
+
if (shouldLogFutureFlagWarnings) {
|
|
587
|
+
logFutureFlagWarnings(userAndPresetConfigs.future || {});
|
|
588
|
+
}
|
|
580
589
|
return ok(reactRouterConfig);
|
|
581
590
|
}
|
|
591
|
+
function logFutureFlagWarning(flag, message) {
|
|
592
|
+
console.log(
|
|
593
|
+
import_picocolors.default.yellow(
|
|
594
|
+
` \u26A0\uFE0F Future Flag Warning: ${message}
|
|
595
|
+
You can use the \`future.${flag}\` flag to opt in early.
|
|
596
|
+
-> https://reactrouter.com/v7/upgrading/future#future${flag.toLowerCase()}`
|
|
597
|
+
)
|
|
598
|
+
);
|
|
599
|
+
}
|
|
600
|
+
function logFutureFlagWarnings(future) {
|
|
601
|
+
if (future.v8_middleware === void 0) {
|
|
602
|
+
logFutureFlagWarning(
|
|
603
|
+
"v8_middleware",
|
|
604
|
+
"Route middleware support is changing in React Router v8."
|
|
605
|
+
);
|
|
606
|
+
}
|
|
607
|
+
if (future.v8_splitRouteModules === void 0) {
|
|
608
|
+
logFutureFlagWarning(
|
|
609
|
+
"v8_splitRouteModules",
|
|
610
|
+
"Route module splitting behavior is changing in React Router v8."
|
|
611
|
+
);
|
|
612
|
+
}
|
|
613
|
+
if (future.v8_viteEnvironmentApi === void 0) {
|
|
614
|
+
logFutureFlagWarning(
|
|
615
|
+
"v8_viteEnvironmentApi",
|
|
616
|
+
"Vite Environment API usage is changing in React Router v8."
|
|
617
|
+
);
|
|
618
|
+
}
|
|
619
|
+
if (future.v8_passThroughRequests === void 0) {
|
|
620
|
+
logFutureFlagWarning(
|
|
621
|
+
"v8_passThroughRequests",
|
|
622
|
+
"Request handling behavior is changing in React Router v8."
|
|
623
|
+
);
|
|
624
|
+
}
|
|
625
|
+
if (future.v8_trailingSlashAwareDataRequests === void 0) {
|
|
626
|
+
logFutureFlagWarning(
|
|
627
|
+
"v8_trailingSlashAwareDataRequests",
|
|
628
|
+
"Data request URL formats are changing in React Router v8."
|
|
629
|
+
);
|
|
630
|
+
}
|
|
631
|
+
}
|
|
582
632
|
async function createConfigLoader({
|
|
583
633
|
rootDirectory: root,
|
|
584
634
|
watch,
|
|
585
635
|
mode,
|
|
586
636
|
skipRoutes,
|
|
587
|
-
validateConfig
|
|
637
|
+
validateConfig,
|
|
638
|
+
shouldLogFutureFlagWarnings
|
|
588
639
|
}) {
|
|
589
640
|
root = import_pathe3.default.normalize(root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd());
|
|
590
641
|
let vite2 = await import("vite");
|
|
@@ -608,10 +659,17 @@ async function createConfigLoader({
|
|
|
608
659
|
viteNodeContext,
|
|
609
660
|
reactRouterConfigFile,
|
|
610
661
|
skipRoutes,
|
|
611
|
-
validateConfig
|
|
662
|
+
validateConfig,
|
|
663
|
+
shouldLogFutureFlagWarnings
|
|
612
664
|
});
|
|
613
665
|
let appDirectory;
|
|
614
|
-
let initialConfigResult = await
|
|
666
|
+
let initialConfigResult = await resolveConfig({
|
|
667
|
+
root,
|
|
668
|
+
viteNodeContext,
|
|
669
|
+
reactRouterConfigFile,
|
|
670
|
+
skipRoutes,
|
|
671
|
+
validateConfig
|
|
672
|
+
});
|
|
615
673
|
if (!initialConfigResult.ok) {
|
|
616
674
|
throw new Error(initialConfigResult.error);
|
|
617
675
|
}
|
package/dist/vite.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v7.
|
|
2
|
+
* @react-router/dev v7.17.0
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -375,7 +375,8 @@ async function resolveConfig({
|
|
|
375
375
|
viteNodeContext,
|
|
376
376
|
reactRouterConfigFile,
|
|
377
377
|
skipRoutes,
|
|
378
|
-
validateConfig
|
|
378
|
+
validateConfig,
|
|
379
|
+
shouldLogFutureFlagWarnings
|
|
379
380
|
}) {
|
|
380
381
|
let reactRouterUserConfig = {};
|
|
381
382
|
if (reactRouterConfigFile) {
|
|
@@ -577,6 +578,11 @@ async function resolveConfig({
|
|
|
577
578
|
"The `future.unstable_passThroughRequests` flag has been stabilized as `future.v8_passThroughRequests`"
|
|
578
579
|
);
|
|
579
580
|
}
|
|
581
|
+
if ("unstable_trailingSlashAwareDataRequests" in futureConfig) {
|
|
582
|
+
return err(
|
|
583
|
+
"The `future.unstable_trailingSlashAwareDataRequests` flag has been stabilized as `future.v8_trailingSlashAwareDataRequests`"
|
|
584
|
+
);
|
|
585
|
+
}
|
|
580
586
|
if ("unstable_subResourceIntegrity" in futureConfig) {
|
|
581
587
|
return err(
|
|
582
588
|
"The `future.unstable_subResourceIntegrity` flag has been stabilized and moved to a top-level `config.subResourceIntegrity` field"
|
|
@@ -586,7 +592,7 @@ async function resolveConfig({
|
|
|
586
592
|
let future = {
|
|
587
593
|
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
588
594
|
v8_passThroughRequests: userAndPresetConfigs.future?.v8_passThroughRequests ?? false,
|
|
589
|
-
|
|
595
|
+
v8_trailingSlashAwareDataRequests: userAndPresetConfigs.future?.v8_trailingSlashAwareDataRequests ?? false,
|
|
590
596
|
unstable_previewServerPrerendering: userAndPresetConfigs.future?.unstable_previewServerPrerendering ?? false,
|
|
591
597
|
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
592
598
|
v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
|
|
@@ -614,14 +620,59 @@ async function resolveConfig({
|
|
|
614
620
|
for (let preset of reactRouterUserConfig.presets ?? []) {
|
|
615
621
|
await preset.reactRouterConfigResolved?.({ reactRouterConfig });
|
|
616
622
|
}
|
|
623
|
+
if (shouldLogFutureFlagWarnings) {
|
|
624
|
+
logFutureFlagWarnings(userAndPresetConfigs.future || {});
|
|
625
|
+
}
|
|
617
626
|
return ok(reactRouterConfig);
|
|
618
627
|
}
|
|
628
|
+
function logFutureFlagWarning(flag, message) {
|
|
629
|
+
console.log(
|
|
630
|
+
import_picocolors.default.yellow(
|
|
631
|
+
` \u26A0\uFE0F Future Flag Warning: ${message}
|
|
632
|
+
You can use the \`future.${flag}\` flag to opt in early.
|
|
633
|
+
-> https://reactrouter.com/v7/upgrading/future#future${flag.toLowerCase()}`
|
|
634
|
+
)
|
|
635
|
+
);
|
|
636
|
+
}
|
|
637
|
+
function logFutureFlagWarnings(future) {
|
|
638
|
+
if (future.v8_middleware === void 0) {
|
|
639
|
+
logFutureFlagWarning(
|
|
640
|
+
"v8_middleware",
|
|
641
|
+
"Route middleware support is changing in React Router v8."
|
|
642
|
+
);
|
|
643
|
+
}
|
|
644
|
+
if (future.v8_splitRouteModules === void 0) {
|
|
645
|
+
logFutureFlagWarning(
|
|
646
|
+
"v8_splitRouteModules",
|
|
647
|
+
"Route module splitting behavior is changing in React Router v8."
|
|
648
|
+
);
|
|
649
|
+
}
|
|
650
|
+
if (future.v8_viteEnvironmentApi === void 0) {
|
|
651
|
+
logFutureFlagWarning(
|
|
652
|
+
"v8_viteEnvironmentApi",
|
|
653
|
+
"Vite Environment API usage is changing in React Router v8."
|
|
654
|
+
);
|
|
655
|
+
}
|
|
656
|
+
if (future.v8_passThroughRequests === void 0) {
|
|
657
|
+
logFutureFlagWarning(
|
|
658
|
+
"v8_passThroughRequests",
|
|
659
|
+
"Request handling behavior is changing in React Router v8."
|
|
660
|
+
);
|
|
661
|
+
}
|
|
662
|
+
if (future.v8_trailingSlashAwareDataRequests === void 0) {
|
|
663
|
+
logFutureFlagWarning(
|
|
664
|
+
"v8_trailingSlashAwareDataRequests",
|
|
665
|
+
"Data request URL formats are changing in React Router v8."
|
|
666
|
+
);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
619
669
|
async function createConfigLoader({
|
|
620
670
|
rootDirectory: root,
|
|
621
671
|
watch: watch2,
|
|
622
672
|
mode,
|
|
623
673
|
skipRoutes,
|
|
624
|
-
validateConfig
|
|
674
|
+
validateConfig,
|
|
675
|
+
shouldLogFutureFlagWarnings
|
|
625
676
|
}) {
|
|
626
677
|
root = import_pathe3.default.normalize(root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd());
|
|
627
678
|
let vite2 = await import("vite");
|
|
@@ -645,10 +696,17 @@ async function createConfigLoader({
|
|
|
645
696
|
viteNodeContext,
|
|
646
697
|
reactRouterConfigFile,
|
|
647
698
|
skipRoutes,
|
|
648
|
-
validateConfig
|
|
699
|
+
validateConfig,
|
|
700
|
+
shouldLogFutureFlagWarnings
|
|
649
701
|
});
|
|
650
702
|
let appDirectory;
|
|
651
|
-
let initialConfigResult = await
|
|
703
|
+
let initialConfigResult = await resolveConfig({
|
|
704
|
+
root,
|
|
705
|
+
viteNodeContext,
|
|
706
|
+
reactRouterConfigFile,
|
|
707
|
+
skipRoutes,
|
|
708
|
+
validateConfig
|
|
709
|
+
});
|
|
652
710
|
if (!initialConfigResult.ok) {
|
|
653
711
|
throw new Error(initialConfigResult.error);
|
|
654
712
|
}
|
|
@@ -3527,7 +3585,8 @@ var reactRouterVitePlugin = () => {
|
|
|
3527
3585
|
reactRouterConfigLoader = await createConfigLoader({
|
|
3528
3586
|
rootDirectory,
|
|
3529
3587
|
mode,
|
|
3530
|
-
watch: viteCommand === "serve"
|
|
3588
|
+
watch: viteCommand === "serve",
|
|
3589
|
+
shouldLogFutureFlagWarnings: viteCommand !== "build" || viteConfigEnv.isSsrBuild === true
|
|
3531
3590
|
});
|
|
3532
3591
|
await updatePluginContext();
|
|
3533
3592
|
let environments = await getEnvironmentsOptions(ctx, viteCommand, {
|
|
@@ -4986,7 +5045,7 @@ function getStaticPrerenderPaths(routes) {
|
|
|
4986
5045
|
}
|
|
4987
5046
|
async function prerenderData(handler, prerenderPath, onlyRoutes, clientBuildDirectory, reactRouterConfig, viteConfig, requestInit) {
|
|
4988
5047
|
let dataRequestPath;
|
|
4989
|
-
if (reactRouterConfig.future.
|
|
5048
|
+
if (reactRouterConfig.future.v8_trailingSlashAwareDataRequests) {
|
|
4990
5049
|
if (prerenderPath.endsWith("/")) {
|
|
4991
5050
|
dataRequestPath = `${prerenderPath}_.data`;
|
|
4992
5051
|
} else {
|
|
@@ -6105,6 +6164,13 @@ if (import.meta.hot) {
|
|
|
6105
6164
|
}
|
|
6106
6165
|
};
|
|
6107
6166
|
}
|
|
6167
|
+
function createClientRouteModuleForOptimizeDepsScan(code) {
|
|
6168
|
+
const ast = import_parser.parse(code, {
|
|
6169
|
+
sourceType: "module"
|
|
6170
|
+
});
|
|
6171
|
+
removeExports(ast, SERVER_ROUTE_EXPORTS);
|
|
6172
|
+
return generate(ast);
|
|
6173
|
+
}
|
|
6108
6174
|
function createId(id, type, value) {
|
|
6109
6175
|
let [base, ...rest] = id.split("?");
|
|
6110
6176
|
const searchParams = new URLSearchParams(rest.join("?"));
|
|
@@ -6361,6 +6427,15 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
6361
6427
|
reactRouterConfig: config
|
|
6362
6428
|
});
|
|
6363
6429
|
let viteNormalizePath = (await import("vite")).normalizePath;
|
|
6430
|
+
let optimizeDepsEntries = getOptimizeDepsEntries({
|
|
6431
|
+
entryClientFilePath: entries.client,
|
|
6432
|
+
reactRouterConfig: config
|
|
6433
|
+
});
|
|
6434
|
+
let routeFiles = new Set(
|
|
6435
|
+
Object.values(config.routes).map(
|
|
6436
|
+
(route) => resolveRelativeRouteFilePath(route, config)
|
|
6437
|
+
)
|
|
6438
|
+
);
|
|
6364
6439
|
return {
|
|
6365
6440
|
resolve: {
|
|
6366
6441
|
dedupe: [
|
|
@@ -6383,15 +6458,18 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
6383
6458
|
]
|
|
6384
6459
|
},
|
|
6385
6460
|
optimizeDeps: {
|
|
6386
|
-
entries:
|
|
6387
|
-
entryClientFilePath: entries.client,
|
|
6388
|
-
reactRouterConfig: config
|
|
6389
|
-
}),
|
|
6461
|
+
entries: optimizeDepsEntries,
|
|
6390
6462
|
...defineOptimizeDepsCompilerOptions({
|
|
6391
6463
|
rolldown: {
|
|
6392
6464
|
transform: {
|
|
6393
6465
|
jsx: "react-jsx"
|
|
6394
|
-
}
|
|
6466
|
+
},
|
|
6467
|
+
plugins: config.future.unstable_optimizeDeps ? [
|
|
6468
|
+
createRSCOptimizeDepsRouteModulesPlugin({
|
|
6469
|
+
routeFiles,
|
|
6470
|
+
transformToJs
|
|
6471
|
+
})
|
|
6472
|
+
] : []
|
|
6395
6473
|
},
|
|
6396
6474
|
esbuild: {
|
|
6397
6475
|
jsx: "automatic"
|
|
@@ -6842,6 +6920,32 @@ function invalidateVirtualModules2(viteDevServer) {
|
|
|
6842
6920
|
function getRootDirectory(viteUserConfig) {
|
|
6843
6921
|
return viteUserConfig.root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd();
|
|
6844
6922
|
}
|
|
6923
|
+
var jsRouteModuleRE = /\.[cm]?[jt]sx?$/;
|
|
6924
|
+
function createRSCOptimizeDepsRouteModulesPlugin({
|
|
6925
|
+
routeFiles,
|
|
6926
|
+
transformToJs
|
|
6927
|
+
}) {
|
|
6928
|
+
return {
|
|
6929
|
+
name: "react-router:rsc-optimize-deps-route-modules",
|
|
6930
|
+
transform: {
|
|
6931
|
+
filter: { id: jsRouteModuleRE },
|
|
6932
|
+
async handler(code, id) {
|
|
6933
|
+
let filename2 = id.split("?")[0];
|
|
6934
|
+
let normalizedFilename = getVite().normalizePath(filename2);
|
|
6935
|
+
if (!routeFiles.has(normalizedFilename)) {
|
|
6936
|
+
return;
|
|
6937
|
+
}
|
|
6938
|
+
let js2 = await transformToJs(code, filename2);
|
|
6939
|
+
let generated = createClientRouteModuleForOptimizeDepsScan(js2);
|
|
6940
|
+
return {
|
|
6941
|
+
code: generated.code,
|
|
6942
|
+
map: null,
|
|
6943
|
+
moduleType: "js"
|
|
6944
|
+
};
|
|
6945
|
+
}
|
|
6946
|
+
}
|
|
6947
|
+
};
|
|
6948
|
+
}
|
|
6845
6949
|
var getClientBuildDirectory2 = (reactRouterConfig) => import_pathe6.default.join(reactRouterConfig.buildDirectory, "client");
|
|
6846
6950
|
function getPrerenderConcurrencyConfig2(reactRouterConfig) {
|
|
6847
6951
|
let concurrency = 1;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-router/dev",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.17.0",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"tinyglobby": "^0.2.14",
|
|
93
93
|
"valibot": "^1.2.0",
|
|
94
94
|
"vite-node": "^3.2.2",
|
|
95
|
-
"@react-router/node": "7.
|
|
95
|
+
"@react-router/node": "7.17.0"
|
|
96
96
|
},
|
|
97
97
|
"devDependencies": {
|
|
98
98
|
"@types/babel__core": "^7.20.5",
|
|
@@ -116,8 +116,8 @@
|
|
|
116
116
|
"vite": "^6.3.0",
|
|
117
117
|
"wireit": "0.14.9",
|
|
118
118
|
"wrangler": "^4.23.0",
|
|
119
|
-
"
|
|
120
|
-
"react-router": "
|
|
119
|
+
"react-router": "^7.17.0",
|
|
120
|
+
"@react-router/serve": "7.17.0"
|
|
121
121
|
},
|
|
122
122
|
"peerDependencies": {
|
|
123
123
|
"@vitejs/plugin-rsc": "~0.5.21",
|
|
@@ -125,8 +125,8 @@
|
|
|
125
125
|
"typescript": "^5.1.0 || ^6.0.0",
|
|
126
126
|
"vite": "^5.1.0 || ^6.0.0 || ^7.0.0 || ^8.0.0",
|
|
127
127
|
"wrangler": "^3.28.2 || ^4.0.0",
|
|
128
|
-
"@react-router/serve": "^7.
|
|
129
|
-
"react-router": "^7.
|
|
128
|
+
"@react-router/serve": "^7.17.0",
|
|
129
|
+
"react-router": "^7.17.0"
|
|
130
130
|
},
|
|
131
131
|
"peerDependenciesMeta": {
|
|
132
132
|
"@vitejs/plugin-rsc": {
|