diff --git a/integration/client-data-test.ts b/integration/client-data-test.ts index a3938ea43c..bceee0d01c 100644 --- a/integration/client-data-test.ts +++ b/integration/client-data-test.ts @@ -149,7 +149,7 @@ test.describe("Client Data", () => { templateName, files: { "react-router.config.ts": reactRouterConfig({ - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/root.tsx": js` import { Form, Outlet, Scripts } from "react-router" diff --git a/integration/helpers/vite.ts b/integration/helpers/vite.ts index 1f985a433f..5c089a9977 100644 --- a/integration/helpers/vite.ts +++ b/integration/helpers/vite.ts @@ -23,41 +23,7 @@ const __dirname = url.fileURLToPath(new URL(".", import.meta.url)); const root = path.resolve(__dirname, "../.."); const TMP_DIR = path.join(root, ".tmp/integration"); -export const reactRouterConfig = ({ - ssr, - basename, - prerender, - appDirectory, - v8_middleware, - v8_splitRouteModules, - v8_viteEnvironmentApi, - unstable_subResourceIntegrity, - routeDiscovery, -}: { - ssr?: boolean; - basename?: string; - prerender?: boolean | string[]; - appDirectory?: string; - v8_middleware?: boolean; - v8_splitRouteModules?: NonNullable["v8_splitRouteModules"]; - v8_viteEnvironmentApi?: boolean; - unstable_subResourceIntegrity?: boolean; - routeDiscovery?: Config["routeDiscovery"]; -}) => { - let config: Config = { - ssr, - basename, - prerender, - appDirectory, - routeDiscovery, - future: { - v8_middleware, - v8_splitRouteModules, - v8_viteEnvironmentApi, - unstable_subResourceIntegrity, - }, - }; - +export const reactRouterConfig = (config: Partial) => { return dedent` import type { Config } from "@react-router/dev/config"; diff --git a/integration/middleware-test.ts b/integration/middleware-test.ts index e1ab85a48a..3f25f6201f 100644 --- a/integration/middleware-test.ts +++ b/integration/middleware-test.ts @@ -40,7 +40,7 @@ test.describe("Middleware", () => { // ...existing code... "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_middleware: true, + future: { v8_middleware: true }, }), "vite.config.ts": js` import { defineConfig } from "vite"; @@ -368,8 +368,7 @@ test.describe("Middleware", () => { files: { "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_middleware: true, - v8_splitRouteModules: true, + future: { v8_middleware: true, v8_splitRouteModules: true }, }), "vite.config.ts": js` import { defineConfig } from "vite"; @@ -466,7 +465,7 @@ test.describe("Middleware", () => { fixture = await createFixture({ files: { "react-router.config.ts": reactRouterConfig({ - v8_middleware: true, + future: { v8_middleware: true }, }), "vite.config.ts": js` import { defineConfig } from "vite"; @@ -773,7 +772,7 @@ test.describe("Middleware", () => { let fixture = await createFixture({ files: { "react-router.config.ts": reactRouterConfig({ - v8_middleware: true, + future: { v8_middleware: true }, }), "vite.config.ts": js` import { defineConfig } from "vite"; @@ -895,7 +894,7 @@ test.describe("Middleware", () => { let fixture = await createFixture({ files: { "react-router.config.ts": reactRouterConfig({ - v8_middleware: true, + future: { v8_middleware: true }, }), "vite.config.ts": js` import { defineConfig } from "vite"; @@ -1060,8 +1059,7 @@ test.describe("Middleware", () => { fixture = await createFixture({ files: { "react-router.config.ts": reactRouterConfig({ - v8_middleware: true, - v8_splitRouteModules: true, + future: { v8_middleware: true, v8_splitRouteModules: true }, }), "vite.config.ts": js` import { defineConfig } from "vite"; @@ -1156,7 +1154,9 @@ test.describe("Middleware", () => { test.beforeAll(async () => { fixture = await createFixture({ files: { - "react-router.config.ts": reactRouterConfig({ v8_middleware: true }), + "react-router.config.ts": reactRouterConfig({ + future: { v8_middleware: true }, + }), "vite.config.ts": js` import { defineConfig } from "vite"; import { reactRouter } from "@react-router/dev/vite"; @@ -1983,7 +1983,7 @@ test.describe("Middleware", () => { { files: { "react-router.config.ts": reactRouterConfig({ - v8_middleware: true, + future: { v8_middleware: true }, }), "vite.config.ts": js` import { defineConfig } from "vite"; diff --git a/integration/split-route-modules-test.ts b/integration/split-route-modules-test.ts index dbb6f77629..f1fa353ad0 100644 --- a/integration/split-route-modules-test.ts +++ b/integration/split-route-modules-test.ts @@ -259,7 +259,7 @@ test.describe("Split route modules", async () => { port = await getPort(); cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "vite.config.js": await viteConfig.basic({ port }), ...files, @@ -366,7 +366,7 @@ test.describe("Split route modules", async () => { port = await getPort(); cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "vite.config.js": await viteConfig.basic({ port }), ...files, @@ -457,7 +457,7 @@ test.describe("Split route modules", async () => { port = await getPort(); cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "vite.config.js": await viteConfig.basic({ port }), // Make unsplittable routes valid so the build can pass @@ -477,7 +477,7 @@ test.describe("Split route modules", async () => { port = await getPort(); cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "vite.config.js": await viteConfig.basic({ port }), "app/root.tsx": js` @@ -505,7 +505,7 @@ test.describe("Split route modules", async () => { port = await getPort(); cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "vite.config.js": await viteConfig.basic({ port }), "app/root.tsx": js` @@ -534,7 +534,7 @@ test.describe("Split route modules", async () => { port = await getPort(); cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "vite.config.js": await viteConfig.basic({ port }), ...files, diff --git a/integration/sri-test.ts b/integration/sri-test.ts index 20a1fa477d..7e45bad97a 100644 --- a/integration/sri-test.ts +++ b/integration/sri-test.ts @@ -19,7 +19,7 @@ test.describe("CSub-Resource Integrity", () => { fixture = await createFixture({ files: { "react-router.config.ts": reactRouterConfig({ - unstable_subResourceIntegrity: true, + future: { unstable_subResourceIntegrity: true }, }), "app/root.tsx": js` import { Links, Meta, Outlet, Scripts } from "react-router"; diff --git a/integration/vite-build-test.ts b/integration/vite-build-test.ts index 0e934202de..2103652bb8 100644 --- a/integration/vite-build-test.ts +++ b/integration/vite-build-test.ts @@ -38,7 +38,7 @@ test.describe("Build", () => { ENV_VAR_FROM_DOTENV_FILE=true `, "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi, + future: { v8_viteEnvironmentApi }, }), "vite.config.ts": js` import { defineConfig } from "vite"; diff --git a/integration/vite-cloudflare-test.ts b/integration/vite-cloudflare-test.ts index e80df136af..e07f3c898c 100644 --- a/integration/vite-cloudflare-test.ts +++ b/integration/vite-cloudflare-test.ts @@ -10,7 +10,9 @@ function getFiles({ v8_viteEnvironmentApi: boolean; }): Files { return async ({ port }) => ({ - "react-router.config.ts": reactRouterConfig({ v8_viteEnvironmentApi }), + "react-router.config.ts": reactRouterConfig({ + future: { v8_viteEnvironmentApi }, + }), "vite.config.ts": ` import { reactRouter } from "@react-router/dev/vite"; import { cloudflareDevProxy } from "@react-router/dev/vite/cloudflare"; diff --git a/integration/vite-css-test.ts b/integration/vite-css-test.ts index 0be48cb2ef..e3a415cd71 100644 --- a/integration/vite-css-test.ts +++ b/integration/vite-css-test.ts @@ -216,7 +216,9 @@ test.describe("Vite CSS", () => { cwd = await createProject( { "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: templateName !== "vite-5-template", + future: { + v8_viteEnvironmentApi: templateName !== "vite-5-template", + }, }), "vite.config.ts": await viteConfig.basic({ port, @@ -258,7 +260,9 @@ test.describe("Vite CSS", () => { cwd = await createProject( { "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: templateName !== "vite-5-template", + future: { + v8_viteEnvironmentApi: templateName !== "vite-5-template", + }, basename: base, }), "vite.config.ts": await viteConfig.basic({ @@ -301,7 +305,9 @@ test.describe("Vite CSS", () => { cwd = await createProject( { "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: templateName !== "vite-5-template", + future: { + v8_viteEnvironmentApi: templateName !== "vite-5-template", + }, }), "vite.config.ts": await viteConfig.basic({ port, @@ -343,7 +349,9 @@ test.describe("Vite CSS", () => { cwd = await createProject( { "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: templateName !== "vite-5-template", + future: { + v8_viteEnvironmentApi: templateName !== "vite-5-template", + }, }), "vite.config.ts": await viteConfig.basic({ port, @@ -414,7 +422,9 @@ test.describe("Vite CSS", () => { cwd = await createProject( { "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: templateName !== "vite-5-template", + future: { + v8_viteEnvironmentApi: templateName !== "vite-5-template", + }, }), "vite.config.ts": await viteConfig.basic({ port, diff --git a/integration/vite-dev-test.ts b/integration/vite-dev-test.ts index 8b46824375..570d3b7253 100644 --- a/integration/vite-dev-test.ts +++ b/integration/vite-dev-test.ts @@ -37,7 +37,7 @@ test.describe("Vite dev", () => { test.describe(`template: ${templateName} viteEnvironmentApi: ${v8_viteEnvironmentApi}`, () => { const files: Files = async ({ port }) => ({ "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi, + future: { v8_viteEnvironmentApi }, }), "vite.config.ts": await viteConfig.basic({ port, diff --git a/integration/vite-plugin-order-validation-test.ts b/integration/vite-plugin-order-validation-test.ts index 767a5caca0..a3121503ca 100644 --- a/integration/vite-plugin-order-validation-test.ts +++ b/integration/vite-plugin-order-validation-test.ts @@ -43,7 +43,7 @@ test.describe("Vite plugin order validation", () => { }); `, "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: true, + future: { v8_viteEnvironmentApi: true }, }), }, "rsc-vite-framework", @@ -72,7 +72,7 @@ test.describe("Vite plugin order validation", () => { }); `, "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: true, + future: { v8_viteEnvironmentApi: true }, }), }, "rsc-vite-framework", diff --git a/integration/vite-preview-test.ts b/integration/vite-preview-test.ts index bdf23eecf8..719713336c 100644 --- a/integration/vite-preview-test.ts +++ b/integration/vite-preview-test.ts @@ -14,7 +14,7 @@ test.describe("Vite preview", () => { test("serves built app with vite preview", async ({ vitePreview, page }) => { const files: Files = async ({ port }) => ({ "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: true, + future: { v8_viteEnvironmentApi: true }, }), "vite.config.ts": await viteConfig.basic({ port, @@ -97,7 +97,7 @@ test.describe("Vite preview", () => { test("handles navigation between routes", async ({ vitePreview, page }) => { const files: Files = async ({ port }) => ({ "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: true, + future: { v8_viteEnvironmentApi: true }, }), "vite.config.ts": await viteConfig.basic({ port, @@ -173,7 +173,7 @@ test.describe("Vite preview", () => { test("handles loader data correctly", async ({ vitePreview, page }) => { const files: Files = async ({ port }) => ({ "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: true, + future: { v8_viteEnvironmentApi: true }, }), "vite.config.ts": await viteConfig.basic({ port, @@ -247,7 +247,7 @@ test.describe("Vite preview", () => { }) => { const files: Files = async ({ port }) => ({ "react-router.config.ts": reactRouterConfig({ - v8_viteEnvironmentApi: true, + future: { v8_viteEnvironmentApi: true }, }), "vite.config.ts": await viteConfig.basic({ port, @@ -322,7 +322,7 @@ test.describe("Vite preview", () => { const files: Files = async ({ port }) => ({ "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_viteEnvironmentApi: true, + future: { v8_viteEnvironmentApi: true }, }), "vite.config.ts": await viteConfig.basic({ port, diff --git a/integration/vite-spa-mode-test.ts b/integration/vite-spa-mode-test.ts index b8049565c4..74b4a3c8cf 100644 --- a/integration/vite-spa-mode-test.ts +++ b/integration/vite-spa-mode-test.ts @@ -24,7 +24,7 @@ test.describe("SPA Mode", () => { let cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/routes/invalid-exports.tsx": String.raw` // Invalid exports @@ -51,7 +51,7 @@ test.describe("SPA Mode", () => { let cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/root.tsx": String.raw` // Invalid exports @@ -83,7 +83,7 @@ test.describe("SPA Mode", () => { let cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/routes/invalid-exports.tsx": String.raw` // Invalid exports @@ -108,7 +108,7 @@ test.describe("SPA Mode", () => { let cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/entry.server.tsx": js` import { ServerRouter } from "react-router"; @@ -176,7 +176,7 @@ test.describe("SPA Mode", () => { let cwd = await createProject({ "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/root.tsx": String.raw` export function HydrateFallback() { @@ -199,7 +199,7 @@ test.describe("SPA Mode", () => { files: { "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/root.tsx": js` import { Outlet, Scripts } from "react-router"; @@ -238,7 +238,7 @@ test.describe("SPA Mode", () => { let fixture = await createFixture({ files: { "react-router.config.ts": reactRouterConfig({ - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/root.tsx": js` import { Outlet, Scripts } from "react-router"; @@ -272,7 +272,7 @@ test.describe("SPA Mode", () => { "react-router.config.ts": reactRouterConfig({ basename: "/base/", ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/root.tsx": js` import { Outlet, Scripts } from "react-router"; @@ -345,7 +345,7 @@ test.describe("SPA Mode", () => { files: { "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/index.html": String.raw` @@ -529,7 +529,7 @@ test.describe("SPA Mode", () => { // file below appDirectory: "src", ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "src/routes.ts": js` import { type RouteConfig } from "@react-router/dev/routes"; @@ -611,7 +611,7 @@ test.describe("SPA Mode", () => { // file below appDirectory: "src", ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "src/routes.ts": js` import { type RouteConfig } from "@react-router/dev/routes"; @@ -677,7 +677,7 @@ test.describe("SPA Mode", () => { files: { "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/routes/_index.tsx": js` import { Link } from 'react-router'; @@ -732,7 +732,7 @@ test.describe("SPA Mode", () => { files: { "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "app/root.tsx": js` import { @@ -805,7 +805,7 @@ test.describe("SPA Mode", () => { files: { "react-router.config.ts": reactRouterConfig({ ssr: false, - v8_splitRouteModules, + future: { v8_splitRouteModules }, }), "vite.config.ts": js` import { defineConfig } from "vite";