@react-router/dev 0.0.0-experimental-303421afa → 0.0.0-experimental-112589a91
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/dist/cli/index.js +24 -13
- package/dist/config/default-rsc-entries/entry.rsc.tsx +1 -1
- package/dist/config/default-rsc-entries/entry.ssr.tsx +2 -2
- package/dist/config.d.ts +5 -5
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.js +16 -5
- package/dist/vite.js +41 -30
- package/package.json +7 -7
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @react-router/dev v0.0.0-experimental-
|
|
3
|
+
* @react-router/dev v0.0.0-experimental-112589a91
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -492,12 +492,23 @@ async function resolveConfig({
|
|
|
492
492
|
);
|
|
493
493
|
}
|
|
494
494
|
}
|
|
495
|
+
let futureConfig = userAndPresetConfigs.future;
|
|
496
|
+
if (futureConfig?.unstable_splitRouteModules !== void 0) {
|
|
497
|
+
return err(
|
|
498
|
+
'The "future.unstable_splitRouteModules" flag has been stabilized as "future.v8_splitRouteModules"'
|
|
499
|
+
);
|
|
500
|
+
}
|
|
501
|
+
if (futureConfig?.unstable_viteEnvironmentApi !== void 0) {
|
|
502
|
+
return err(
|
|
503
|
+
'The "future.unstable_viteEnvironmentApi" flag has been stabilized as "future.v8_viteEnvironmentApi"'
|
|
504
|
+
);
|
|
505
|
+
}
|
|
495
506
|
let future = {
|
|
496
|
-
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
497
507
|
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
498
|
-
unstable_splitRouteModules: userAndPresetConfigs.future?.unstable_splitRouteModules ?? false,
|
|
499
508
|
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
500
|
-
|
|
509
|
+
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
510
|
+
v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
|
|
511
|
+
v8_viteEnvironmentApi: userAndPresetConfigs.future?.v8_viteEnvironmentApi ?? false
|
|
501
512
|
};
|
|
502
513
|
let reactRouterConfig = deepFreeze({
|
|
503
514
|
appDirectory,
|
|
@@ -1673,8 +1684,8 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1673
1684
|
return mergeEnvironmentOptions(getBaseOptions({ viteUserConfig }), {
|
|
1674
1685
|
resolve: {
|
|
1675
1686
|
external: (
|
|
1676
|
-
// If `
|
|
1677
|
-
ctx.reactRouterConfig.future.
|
|
1687
|
+
// If `v8_viteEnvironmentApi` is `true`, `resolve.external` is set in the `configEnvironment` hook
|
|
1688
|
+
ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? void 0 : ssrExternals
|
|
1678
1689
|
),
|
|
1679
1690
|
conditions: [...baseConditions, ...maybeDefaultServerConditions],
|
|
1680
1691
|
externalConditions: [...baseConditions, ...defaultExternalConditions]
|
|
@@ -1689,7 +1700,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1689
1700
|
copyPublicDir: false,
|
|
1690
1701
|
// The client only uses assets in the public directory
|
|
1691
1702
|
rollupOptions: {
|
|
1692
|
-
input: (ctx.reactRouterConfig.future.
|
|
1703
|
+
input: (ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual.serverBuild.id,
|
|
1693
1704
|
output: {
|
|
1694
1705
|
entryFileNames: serverBuildFile,
|
|
1695
1706
|
format: serverModuleFormat
|
|
@@ -1714,14 +1725,14 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1714
1725
|
let code = (0, import_node_fs3.readFileSync)(routeFilePath, "utf-8");
|
|
1715
1726
|
return [
|
|
1716
1727
|
`${routeFilePath}${BUILD_CLIENT_ROUTE_QUERY_STRING}`,
|
|
1717
|
-
...ctx.reactRouterConfig.future.
|
|
1728
|
+
...ctx.reactRouterConfig.future.v8_splitRouteModules && !isRootRoute ? routeChunkExportNames.map(
|
|
1718
1729
|
(exportName) => code.includes(exportName) ? getRouteChunkModuleId(routeFilePath, exportName) : null
|
|
1719
1730
|
) : []
|
|
1720
1731
|
].filter(isNonNullable);
|
|
1721
1732
|
}
|
|
1722
1733
|
)
|
|
1723
1734
|
],
|
|
1724
|
-
output: (ctx.reactRouterConfig.future.
|
|
1735
|
+
output: (ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.rollupOptions?.output : viteUserConfig?.build?.rollupOptions?.output) ?? {
|
|
1725
1736
|
entryFileNames: ({ moduleIds }) => {
|
|
1726
1737
|
let routeChunkModuleId = moduleIds.find(isRouteChunkModuleId);
|
|
1727
1738
|
let routeChunkName = routeChunkModuleId ? getRouteChunkNameFromModuleId(routeChunkModuleId)?.replace(
|
|
@@ -1729,7 +1740,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1729
1740
|
""
|
|
1730
1741
|
) : null;
|
|
1731
1742
|
let routeChunkSuffix = routeChunkName ? `-${(0, import_kebabCase.default)(routeChunkName)}` : "";
|
|
1732
|
-
let assetsDir = (ctx.reactRouterConfig.future.
|
|
1743
|
+
let assetsDir = (ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.assetsDir : null) ?? viteUserConfig?.build?.assetsDir ?? "assets";
|
|
1733
1744
|
return path7.posix.join(
|
|
1734
1745
|
assetsDir,
|
|
1735
1746
|
`[name]${routeChunkSuffix}-[hash].js`
|
|
@@ -1902,12 +1913,12 @@ async function build(root, viteBuildOptions) {
|
|
|
1902
1913
|
}
|
|
1903
1914
|
let config = configResult.value;
|
|
1904
1915
|
let viteMajor = parseInt(vite2.version.split(".")[0], 10);
|
|
1905
|
-
if (config.future.
|
|
1916
|
+
if (config.future.v8_viteEnvironmentApi && viteMajor === 5) {
|
|
1906
1917
|
throw new Error(
|
|
1907
|
-
"The future.
|
|
1918
|
+
"The future.v8_viteEnvironmentApi option is not supported in Vite 5"
|
|
1908
1919
|
);
|
|
1909
1920
|
}
|
|
1910
|
-
const useViteEnvironmentApi = config.future.
|
|
1921
|
+
const useViteEnvironmentApi = config.future.v8_viteEnvironmentApi || await hasReactRouterRscPlugin({ root, viteBuildOptions });
|
|
1911
1922
|
return await (useViteEnvironmentApi ? viteAppBuild(root, viteBuildOptions) : viteBuild(root, viteBuildOptions));
|
|
1912
1923
|
}
|
|
1913
1924
|
async function viteAppBuild(root, {
|
|
@@ -37,7 +37,7 @@ export default async function handler(request: Request) {
|
|
|
37
37
|
const ssr = await import.meta.viteRsc.loadModule<
|
|
38
38
|
typeof import("./entry.ssr")
|
|
39
39
|
>("ssr", "index");
|
|
40
|
-
return ssr.default(request,
|
|
40
|
+
return ssr.default(request, fetchServer);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
if (import.meta.hot) {
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
|
|
9
9
|
export default async function handler(
|
|
10
10
|
request: Request,
|
|
11
|
-
|
|
11
|
+
fetchServer: (request: Request) => Promise<Response>,
|
|
12
12
|
) {
|
|
13
13
|
const bootstrapScriptContent =
|
|
14
14
|
await import.meta.viteRsc.loadBootstrapScriptContent("index");
|
|
15
15
|
|
|
16
16
|
return routeRSCServerRequest({
|
|
17
17
|
request,
|
|
18
|
-
|
|
18
|
+
fetchServer,
|
|
19
19
|
createFromReadableStream,
|
|
20
20
|
async renderHTML(getPayload) {
|
|
21
21
|
const payload = getPayload();
|
package/dist/config.d.ts
CHANGED
|
@@ -37,20 +37,20 @@ type ServerBundlesBuildManifest = BaseBuildManifest & {
|
|
|
37
37
|
};
|
|
38
38
|
type ServerModuleFormat = "esm" | "cjs";
|
|
39
39
|
interface FutureConfig {
|
|
40
|
+
unstable_optimizeDeps: boolean;
|
|
41
|
+
unstable_subResourceIntegrity: boolean;
|
|
40
42
|
/**
|
|
41
43
|
* Enable route middleware
|
|
42
44
|
*/
|
|
43
45
|
v8_middleware: boolean;
|
|
44
|
-
unstable_optimizeDeps: boolean;
|
|
45
46
|
/**
|
|
46
47
|
* Automatically split route modules into multiple chunks when possible.
|
|
47
48
|
*/
|
|
48
|
-
|
|
49
|
-
unstable_subResourceIntegrity: boolean;
|
|
49
|
+
v8_splitRouteModules: boolean | "enforce";
|
|
50
50
|
/**
|
|
51
|
-
* Use Vite Environment API
|
|
51
|
+
* Use Vite Environment API
|
|
52
52
|
*/
|
|
53
|
-
|
|
53
|
+
v8_viteEnvironmentApi: boolean;
|
|
54
54
|
}
|
|
55
55
|
type BuildManifest = DefaultBuildManifest | ServerBundlesBuildManifest;
|
|
56
56
|
type BuildEndHook = (args: {
|
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 v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-112589a91
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -522,12 +522,23 @@ async function resolveConfig({
|
|
|
522
522
|
);
|
|
523
523
|
}
|
|
524
524
|
}
|
|
525
|
+
let futureConfig = userAndPresetConfigs.future;
|
|
526
|
+
if (futureConfig?.unstable_splitRouteModules !== void 0) {
|
|
527
|
+
return err(
|
|
528
|
+
'The "future.unstable_splitRouteModules" flag has been stabilized as "future.v8_splitRouteModules"'
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
if (futureConfig?.unstable_viteEnvironmentApi !== void 0) {
|
|
532
|
+
return err(
|
|
533
|
+
'The "future.unstable_viteEnvironmentApi" flag has been stabilized as "future.v8_viteEnvironmentApi"'
|
|
534
|
+
);
|
|
535
|
+
}
|
|
525
536
|
let future = {
|
|
526
|
-
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
527
537
|
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
528
|
-
unstable_splitRouteModules: userAndPresetConfigs.future?.unstable_splitRouteModules ?? false,
|
|
529
538
|
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
530
|
-
|
|
539
|
+
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
540
|
+
v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
|
|
541
|
+
v8_viteEnvironmentApi: userAndPresetConfigs.future?.v8_viteEnvironmentApi ?? false
|
|
531
542
|
};
|
|
532
543
|
let reactRouterConfig = deepFreeze({
|
|
533
544
|
appDirectory,
|
|
@@ -786,7 +797,7 @@ var cloudflareDevProxyVitePlugin = (options = {}) => {
|
|
|
786
797
|
};
|
|
787
798
|
},
|
|
788
799
|
configEnvironment: async (name, options2) => {
|
|
789
|
-
if (!future.
|
|
800
|
+
if (!future.v8_viteEnvironmentApi) {
|
|
790
801
|
return;
|
|
791
802
|
}
|
|
792
803
|
if (name !== "client") {
|
package/dist/vite.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-112589a91
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -549,12 +549,23 @@ async function resolveConfig({
|
|
|
549
549
|
);
|
|
550
550
|
}
|
|
551
551
|
}
|
|
552
|
+
let futureConfig = userAndPresetConfigs.future;
|
|
553
|
+
if (futureConfig?.unstable_splitRouteModules !== void 0) {
|
|
554
|
+
return err(
|
|
555
|
+
'The "future.unstable_splitRouteModules" flag has been stabilized as "future.v8_splitRouteModules"'
|
|
556
|
+
);
|
|
557
|
+
}
|
|
558
|
+
if (futureConfig?.unstable_viteEnvironmentApi !== void 0) {
|
|
559
|
+
return err(
|
|
560
|
+
'The "future.unstable_viteEnvironmentApi" flag has been stabilized as "future.v8_viteEnvironmentApi"'
|
|
561
|
+
);
|
|
562
|
+
}
|
|
552
563
|
let future = {
|
|
553
|
-
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
554
564
|
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
555
|
-
unstable_splitRouteModules: userAndPresetConfigs.future?.unstable_splitRouteModules ?? false,
|
|
556
565
|
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
557
|
-
|
|
566
|
+
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
567
|
+
v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
|
|
568
|
+
v8_viteEnvironmentApi: userAndPresetConfigs.future?.v8_viteEnvironmentApi ?? false
|
|
558
569
|
};
|
|
559
570
|
let reactRouterConfig = deepFreeze({
|
|
560
571
|
appDirectory,
|
|
@@ -2735,7 +2746,7 @@ var getServerBundleRouteIds = (vitePluginContext, ctx) => {
|
|
|
2735
2746
|
if (!ctx.buildManifest) {
|
|
2736
2747
|
return void 0;
|
|
2737
2748
|
}
|
|
2738
|
-
let environmentName = ctx.reactRouterConfig.future.
|
|
2749
|
+
let environmentName = ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? vitePluginContext.environment.name : ctx.environmentBuildContext?.name;
|
|
2739
2750
|
if (!environmentName || !isSsrBundleEnvironmentName(environmentName)) {
|
|
2740
2751
|
return void 0;
|
|
2741
2752
|
}
|
|
@@ -2785,7 +2796,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2785
2796
|
}
|
|
2786
2797
|
return;
|
|
2787
2798
|
}
|
|
2788
|
-
let injectedPluginContext = !reactRouterConfig.future.
|
|
2799
|
+
let injectedPluginContext = !reactRouterConfig.future.v8_viteEnvironmentApi && viteCommand === "build" ? extractPluginContext(viteUserConfig) : void 0;
|
|
2789
2800
|
let { entryClientFilePath, entryServerFilePath } = await resolveEntryFiles({
|
|
2790
2801
|
rootDirectory,
|
|
2791
2802
|
reactRouterConfig
|
|
@@ -2879,7 +2890,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2879
2890
|
}`;
|
|
2880
2891
|
}).join(",\n ")}
|
|
2881
2892
|
};
|
|
2882
|
-
${ctx.reactRouterConfig.future.
|
|
2893
|
+
${ctx.reactRouterConfig.future.v8_viteEnvironmentApi && viteCommand === "serve" ? `
|
|
2883
2894
|
export const unstable_getCriticalCss = ({ pathname }) => {
|
|
2884
2895
|
return {
|
|
2885
2896
|
rel: "stylesheet",
|
|
@@ -2957,7 +2968,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2957
2968
|
viteChildCompiler,
|
|
2958
2969
|
ctx
|
|
2959
2970
|
);
|
|
2960
|
-
let enforceSplitRouteModules = ctx.reactRouterConfig.future.
|
|
2971
|
+
let enforceSplitRouteModules = ctx.reactRouterConfig.future.v8_splitRouteModules === "enforce";
|
|
2961
2972
|
for (let route of Object.values(ctx.reactRouterConfig.routes)) {
|
|
2962
2973
|
let routeFile = path6.join(ctx.reactRouterConfig.appDirectory, route.file);
|
|
2963
2974
|
let sourceExports = routeManifestExports[route.id];
|
|
@@ -3069,7 +3080,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3069
3080
|
viteChildCompiler,
|
|
3070
3081
|
ctx
|
|
3071
3082
|
);
|
|
3072
|
-
let enforceSplitRouteModules = ctx.reactRouterConfig.future.
|
|
3083
|
+
let enforceSplitRouteModules = ctx.reactRouterConfig.future.v8_splitRouteModules === "enforce";
|
|
3073
3084
|
for (let [key, route] of Object.entries(ctx.reactRouterConfig.routes)) {
|
|
3074
3085
|
let routeFile = route.file;
|
|
3075
3086
|
let sourceExports = routeManifestExports[key];
|
|
@@ -3264,7 +3275,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3264
3275
|
// will throw an error that the file is not allowed to be read.
|
|
3265
3276
|
// https://vitejs.dev/config/server-options#server-fs-allow
|
|
3266
3277
|
server: viteUserConfig.server?.fs?.allow ? { fs: { allow: defaultEntries } } : void 0,
|
|
3267
|
-
...ctx.reactRouterConfig.future.
|
|
3278
|
+
...ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? {
|
|
3268
3279
|
environments,
|
|
3269
3280
|
build: {
|
|
3270
3281
|
// This isn't honored by the SSR environment config (which seems
|
|
@@ -3303,7 +3314,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3303
3314
|
};
|
|
3304
3315
|
},
|
|
3305
3316
|
configEnvironment(name, options) {
|
|
3306
|
-
if (ctx.reactRouterConfig.future.
|
|
3317
|
+
if (ctx.reactRouterConfig.future.v8_viteEnvironmentApi && (ctx.buildManifest?.serverBundles ? isSsrBundleEnvironmentName(name) : name === "ssr")) {
|
|
3307
3318
|
const vite2 = getVite();
|
|
3308
3319
|
return {
|
|
3309
3320
|
resolve: {
|
|
@@ -3439,7 +3450,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3439
3450
|
}
|
|
3440
3451
|
}
|
|
3441
3452
|
);
|
|
3442
|
-
if (ctx.reactRouterConfig.future.
|
|
3453
|
+
if (ctx.reactRouterConfig.future.v8_viteEnvironmentApi) {
|
|
3443
3454
|
viteDevServer.middlewares.use(async (req, res, next) => {
|
|
3444
3455
|
let [reqPathname, reqSearch] = (req.url ?? "").split("?");
|
|
3445
3456
|
if (reqPathname.endsWith("/@react-router/critical.css")) {
|
|
@@ -3467,7 +3478,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3467
3478
|
viteDevServer.middlewares.use(async (req, res, next) => {
|
|
3468
3479
|
try {
|
|
3469
3480
|
let build;
|
|
3470
|
-
if (ctx.reactRouterConfig.future.
|
|
3481
|
+
if (ctx.reactRouterConfig.future.v8_viteEnvironmentApi) {
|
|
3471
3482
|
let vite2 = getVite();
|
|
3472
3483
|
let ssrEnvironment = viteDevServer.environments.ssr;
|
|
3473
3484
|
if (!vite2.isRunnableDevEnvironment(ssrEnvironment)) {
|
|
@@ -3504,17 +3515,17 @@ var reactRouterVitePlugin = () => {
|
|
|
3504
3515
|
// the SSR build and move server-only assets to client assets directory
|
|
3505
3516
|
async handler() {
|
|
3506
3517
|
let { future } = ctx.reactRouterConfig;
|
|
3507
|
-
if (future.
|
|
3518
|
+
if (future.v8_viteEnvironmentApi ? this.environment.name === "client" : !viteConfigEnv.isSsrBuild) {
|
|
3508
3519
|
return;
|
|
3509
3520
|
}
|
|
3510
3521
|
invariant(viteConfig);
|
|
3511
3522
|
let clientBuildDirectory = getClientBuildDirectory(
|
|
3512
3523
|
ctx.reactRouterConfig
|
|
3513
3524
|
);
|
|
3514
|
-
let serverBuildDirectory = future.
|
|
3525
|
+
let serverBuildDirectory = future.v8_viteEnvironmentApi ? this.environment.config?.build?.outDir : ctx.environmentBuildContext?.options.build?.outDir ?? getServerBuildDirectory(ctx.reactRouterConfig);
|
|
3515
3526
|
let ssrViteManifest = await loadViteManifest(serverBuildDirectory);
|
|
3516
3527
|
let ssrAssetPaths = getViteManifestAssetPaths(ssrViteManifest);
|
|
3517
|
-
let userSsrEmitAssets = (ctx.reactRouterConfig.future.
|
|
3528
|
+
let userSsrEmitAssets = (ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.ssrEmitAssets ?? viteUserConfig.environments?.ssr?.build?.emitAssets : null) ?? viteUserConfig.build?.ssrEmitAssets ?? false;
|
|
3518
3529
|
let movedAssetPaths = [];
|
|
3519
3530
|
let removedAssetPaths = [];
|
|
3520
3531
|
let copiedAssetPaths = [];
|
|
@@ -3728,7 +3739,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3728
3739
|
reason: "Split round modules disabled"
|
|
3729
3740
|
});
|
|
3730
3741
|
}
|
|
3731
|
-
let enforceSplitRouteModules = ctx.reactRouterConfig.future.
|
|
3742
|
+
let enforceSplitRouteModules = ctx.reactRouterConfig.future.v8_splitRouteModules === "enforce";
|
|
3732
3743
|
if (enforceSplitRouteModules && chunkName === "main" && chunk) {
|
|
3733
3744
|
let exportNames = getExportNames(chunk.code);
|
|
3734
3745
|
validateRouteChunks({
|
|
@@ -4640,7 +4651,7 @@ async function detectRouteChunksIfEnabled(cache, ctx, id, input) {
|
|
|
4640
4651
|
}
|
|
4641
4652
|
};
|
|
4642
4653
|
}
|
|
4643
|
-
if (!ctx.reactRouterConfig.future.
|
|
4654
|
+
if (!ctx.reactRouterConfig.future.v8_splitRouteModules) {
|
|
4644
4655
|
return noRouteChunks();
|
|
4645
4656
|
}
|
|
4646
4657
|
if (isRootRouteModuleId(ctx, id)) {
|
|
@@ -4654,7 +4665,7 @@ async function detectRouteChunksIfEnabled(cache, ctx, id, input) {
|
|
|
4654
4665
|
return detectRouteChunks(code, cache, cacheKey);
|
|
4655
4666
|
}
|
|
4656
4667
|
async function getRouteChunkIfEnabled(cache, ctx, id, chunkName, input) {
|
|
4657
|
-
if (!ctx.reactRouterConfig.future.
|
|
4668
|
+
if (!ctx.reactRouterConfig.future.v8_splitRouteModules) {
|
|
4658
4669
|
return null;
|
|
4659
4670
|
}
|
|
4660
4671
|
let code = await resolveRouteFileCode(ctx, input);
|
|
@@ -4758,7 +4769,7 @@ async function getBuildManifest({
|
|
|
4758
4769
|
if (typeof serverBundleId !== "string") {
|
|
4759
4770
|
throw new Error(`The "serverBundles" function must return a string`);
|
|
4760
4771
|
}
|
|
4761
|
-
if (reactRouterConfig.future.
|
|
4772
|
+
if (reactRouterConfig.future.v8_viteEnvironmentApi) {
|
|
4762
4773
|
if (!/^[a-zA-Z0-9_]+$/.test(serverBundleId)) {
|
|
4763
4774
|
throw new Error(
|
|
4764
4775
|
`The "serverBundles" function must only return strings containing alphanumeric characters and underscores.`
|
|
@@ -4846,8 +4857,8 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4846
4857
|
return mergeEnvironmentOptions(getBaseOptions({ viteUserConfig }), {
|
|
4847
4858
|
resolve: {
|
|
4848
4859
|
external: (
|
|
4849
|
-
// If `
|
|
4850
|
-
ctx.reactRouterConfig.future.
|
|
4860
|
+
// If `v8_viteEnvironmentApi` is `true`, `resolve.external` is set in the `configEnvironment` hook
|
|
4861
|
+
ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? void 0 : ssrExternals
|
|
4851
4862
|
),
|
|
4852
4863
|
conditions: [...baseConditions, ...maybeDefaultServerConditions],
|
|
4853
4864
|
externalConditions: [...baseConditions, ...defaultExternalConditions]
|
|
@@ -4862,7 +4873,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4862
4873
|
copyPublicDir: false,
|
|
4863
4874
|
// The client only uses assets in the public directory
|
|
4864
4875
|
rollupOptions: {
|
|
4865
|
-
input: (ctx.reactRouterConfig.future.
|
|
4876
|
+
input: (ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual.serverBuild.id,
|
|
4866
4877
|
output: {
|
|
4867
4878
|
entryFileNames: serverBuildFile,
|
|
4868
4879
|
format: serverModuleFormat
|
|
@@ -4887,14 +4898,14 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4887
4898
|
let code = (0, import_node_fs2.readFileSync)(routeFilePath, "utf-8");
|
|
4888
4899
|
return [
|
|
4889
4900
|
`${routeFilePath}${BUILD_CLIENT_ROUTE_QUERY_STRING}`,
|
|
4890
|
-
...ctx.reactRouterConfig.future.
|
|
4901
|
+
...ctx.reactRouterConfig.future.v8_splitRouteModules && !isRootRoute ? routeChunkExportNames.map(
|
|
4891
4902
|
(exportName) => code.includes(exportName) ? getRouteChunkModuleId(routeFilePath, exportName) : null
|
|
4892
4903
|
) : []
|
|
4893
4904
|
].filter(isNonNullable);
|
|
4894
4905
|
}
|
|
4895
4906
|
)
|
|
4896
4907
|
],
|
|
4897
|
-
output: (ctx.reactRouterConfig.future.
|
|
4908
|
+
output: (ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.rollupOptions?.output : viteUserConfig?.build?.rollupOptions?.output) ?? {
|
|
4898
4909
|
entryFileNames: ({ moduleIds }) => {
|
|
4899
4910
|
let routeChunkModuleId = moduleIds.find(isRouteChunkModuleId);
|
|
4900
4911
|
let routeChunkName = routeChunkModuleId ? getRouteChunkNameFromModuleId(routeChunkModuleId)?.replace(
|
|
@@ -4902,7 +4913,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4902
4913
|
""
|
|
4903
4914
|
) : null;
|
|
4904
4915
|
let routeChunkSuffix = routeChunkName ? `-${(0, import_kebabCase.default)(routeChunkName)}` : "";
|
|
4905
|
-
let assetsDir = (ctx.reactRouterConfig.future.
|
|
4916
|
+
let assetsDir = (ctx.reactRouterConfig.future.v8_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.assetsDir : null) ?? viteUserConfig?.build?.assetsDir ?? "assets";
|
|
4906
4917
|
return path6.posix.join(
|
|
4907
4918
|
assetsDir,
|
|
4908
4919
|
`[name]${routeChunkSuffix}-[hash].js`
|
|
@@ -5352,12 +5363,12 @@ function reactRouterRSCVitePlugin() {
|
|
|
5352
5363
|
if (userConfig.routeDiscovery) errors.push("routeDiscovery");
|
|
5353
5364
|
if (userConfig.serverBundles) errors.push("serverBundles");
|
|
5354
5365
|
if (userConfig.ssr === false) errors.push("ssr: false");
|
|
5355
|
-
if (userConfig.future?.unstable_splitRouteModules)
|
|
5356
|
-
errors.push("future.unstable_splitRouteModules");
|
|
5357
|
-
if (userConfig.future?.unstable_viteEnvironmentApi === false)
|
|
5358
|
-
errors.push("future.unstable_viteEnvironmentApi: false");
|
|
5359
5366
|
if (userConfig.future?.v8_middleware === false)
|
|
5360
5367
|
errors.push("future.v8_middleware: false");
|
|
5368
|
+
if (userConfig.future?.v8_splitRouteModules)
|
|
5369
|
+
errors.push("future.v8_splitRouteModules");
|
|
5370
|
+
if (userConfig.future?.v8_viteEnvironmentApi === false)
|
|
5371
|
+
errors.push("future.v8_viteEnvironmentApi: false");
|
|
5361
5372
|
if (userConfig.future?.unstable_subResourceIntegrity)
|
|
5362
5373
|
errors.push("future.unstable_subResourceIntegrity");
|
|
5363
5374
|
if (errors.length) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-router/dev",
|
|
3
|
-
"version": "0.0.0-experimental-
|
|
3
|
+
"version": "0.0.0-experimental-112589a91",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -85,9 +85,9 @@
|
|
|
85
85
|
"react-refresh": "^0.14.0",
|
|
86
86
|
"semver": "^7.3.7",
|
|
87
87
|
"tinyglobby": "^0.2.14",
|
|
88
|
-
"valibot": "^1.
|
|
88
|
+
"valibot": "^1.2.0",
|
|
89
89
|
"vite-node": "^3.2.2",
|
|
90
|
-
"@react-router/node": "0.0.0-experimental-
|
|
90
|
+
"@react-router/node": "0.0.0-experimental-112589a91"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"@types/babel__core": "^7.20.5",
|
|
@@ -110,16 +110,16 @@
|
|
|
110
110
|
"vite": "^6.3.0",
|
|
111
111
|
"wireit": "0.14.9",
|
|
112
112
|
"wrangler": "^4.23.0",
|
|
113
|
-
"react-router": "
|
|
114
|
-
"
|
|
113
|
+
"@react-router/serve": "0.0.0-experimental-112589a91",
|
|
114
|
+
"react-router": "^0.0.0-experimental-112589a91"
|
|
115
115
|
},
|
|
116
116
|
"peerDependencies": {
|
|
117
117
|
"@vitejs/plugin-rsc": "*",
|
|
118
118
|
"typescript": "^5.1.0",
|
|
119
119
|
"vite": "^5.1.0 || ^6.0.0 || ^7.0.0",
|
|
120
120
|
"wrangler": "^3.28.2 || ^4.0.0",
|
|
121
|
-
"@react-router/serve": "^0.0.0-experimental-
|
|
122
|
-
"react-router": "^0.0.0-experimental-
|
|
121
|
+
"@react-router/serve": "^0.0.0-experimental-112589a91",
|
|
122
|
+
"react-router": "^0.0.0-experimental-112589a91"
|
|
123
123
|
},
|
|
124
124
|
"peerDependenciesMeta": {
|
|
125
125
|
"@vitejs/plugin-rsc": {
|