diff --git a/.changeset/stabilize-future-flags.md b/.changeset/stabilize-future-flags.md new file mode 100644 index 00000000000..b66098c5a34 --- /dev/null +++ b/.changeset/stabilize-future-flags.md @@ -0,0 +1,9 @@ +--- +"@remix-run/dev": minor +"@remix-run/react": minor +"@remix-run/server-runtime": minor +--- + +Stabilize future flags + - `future.unstable_singleFetch` -> `future.v3_singleFetch` + - `future.unstable_lazyRouteDiscovery` -> `future.v3_lazyRouteDiscovery` diff --git a/docs/components/link.md b/docs/components/link.md index fed084bad59..8a76574124c 100644 --- a/docs/components/link.md +++ b/docs/components/link.md @@ -40,7 +40,7 @@ You can also pass a `Partial` value: ### `discover` -Defines the route discovery behavior when using [`future.unstable_lazyRouteDiscovery`][lazy-route-discovery]. +Defines the route discovery behavior when using [`future.v3_lazyRouteDiscovery`][lazy-route-discovery]. ```tsx <> diff --git a/docs/guides/lazy-route-discovery.md b/docs/guides/lazy-route-discovery.md index bd2a3c2d079..9ce0a1089b6 100644 --- a/docs/guides/lazy-route-discovery.md +++ b/docs/guides/lazy-route-discovery.md @@ -6,7 +6,7 @@ title: Lazy Route Discovery This is an unstable API and will continue to change, do not adopt in production -Remix introduced support for Lazy Route Discovery (a.k.a. "Fog of War") ([RFC][rfc]) behind the `future.unstable_lazyRouteDiscovery` [Future Flag][future-flags] in [`v2.10.0`][2.10.0]. This allows you to opt-into this behavior which will become the default in the next major version of Remix - a.k.a. React Router v7 ([1][rr-v7], [2][rr-v7-2]). For more information on this feature, please check out the [blog post][blog-post]. +Remix introduced support for Lazy Route Discovery (a.k.a. "Fog of War") ([RFC][rfc]) behind the `future.unstable_lazyRouteDiscovery` [Future Flag][future-flags] in [`v2.10.0`][2.10.0] (later stabilized as `future.v3_lazyRouteDiscovery` in [`v2.13.0`][2.13.0]). This allows you to opt-into this behavior which will become the default in the next major version of Remix - a.k.a. React Router v7 ([1][rr-v7], [2][rr-v7-2]). For more information on this feature, please check out the [blog post][blog-post]. ## Current Behavior @@ -56,6 +56,7 @@ If you wish to opt-out of this eager route discovery on a per-link basis, you ca [rfc]: https://github.com/remix-run/react-router/discussions/11113 [future-flags]: ../guides/api-development-strategy [2.10.0]: https://github.com/remix-run/remix/blob/main/CHANGELOG.md#v2100 +[2.13.0]: https://github.com/remix-run/remix/blob/main/CHANGELOG.md#v2130 [link]: ../components/link [navlink]: ../components/nav-link [link-discover]: ../components/link#discover diff --git a/docs/guides/single-fetch.md b/docs/guides/single-fetch.md index 9d7904d3214..9082350d72b 100644 --- a/docs/guides/single-fetch.md +++ b/docs/guides/single-fetch.md @@ -10,7 +10,7 @@ Single Fetch is a new data loading strategy and streaming format. When you enabl ## Overview -Remix introduced support for "Single Fetch" ([RFC][rfc]) behind the [`future.unstable_singleFetch`][future-flags] flag in [`v2.9.0`][2.9.0] which allows you to opt-into this behavior. Single Fetch will be the default in [React Router v7][merging-remix-and-rr]. +Remix introduced support for "Single Fetch" ([RFC][rfc]) behind the [`future.unstable_singleFetch`][future-flags] flag in [`v2.9.0`][2.9.0] (later stabilized as `future.v3_singleFetch` in [`v2.13.0`][2.13.0]) which allows you to opt-into this behavior. Single Fetch will be the default in [React Router v7][merging-remix-and-rr]. Enabling Single Fetch is intended to be low-effort up-front, and then allow you to adopt all breaking changes iteratively over time. You can start by applying the minimal required changes to [enable Single Fetch][start], then use the [migration guide][migration-guide] to make incremental changes in your application to ensure a smooth, non-breaking upgrade to [React Router v7][merging-remix-and-rr]. @@ -26,7 +26,7 @@ export default defineConfig({ remix({ future: { // ... - unstable_singleFetch: true, + v3_singleFetch: true, }, }), // ... @@ -147,15 +147,15 @@ With Single Fetch, naked objects will be streamed directly, so the built-in type #### Enable Single Fetch types -To switch over to Single Fetch types, you should [augment][augment] Remix's `Future` interface with `unstable_singleFetch: true`. +To switch over to Single Fetch types, you should [augment][augment] Remix's `Future` interface with `v3_singleFetch: true`. You can do this in any file covered by your `tsconfig.json` > `include`. -We recommend you do this in your `vite.config.ts` to keep it colocated with the `future.unstable_singleFetch` future flag in the Remix plugin: +We recommend you do this in your `vite.config.ts` to keep it colocated with the `future.v3_singleFetch` future flag in the Remix plugin: ```ts declare module "@remix-run/node" { // or cloudflare, deno, etc. interface Future { - unstable_singleFetch: true; + v3_singleFetch: true; } } ``` @@ -465,6 +465,7 @@ Revalidation is handled via a `?_routes` query string parameter on the single fe [entry-server]: ../file-conventions/entry.server [client-loader]: ../route/client-loader [2.9.0]: https://github.com/remix-run/remix/blob/main/CHANGELOG.md#v290 +[2.13.0]: https://github.com/remix-run/remix/blob/main/CHANGELOG.md#v2130 [rfc]: https://github.com/remix-run/remix/discussions/7640 [turbo-stream]: https://github.com/jacob-ebey/turbo-stream [rendertopipeablestream]: https://react.dev/reference/react-dom/server/renderToPipeableStream diff --git a/docs/start/future-flags.md b/docs/start/future-flags.md index 522b65a0820..4c680abcc62 100644 --- a/docs/start/future-flags.md +++ b/docs/start/future-flags.md @@ -332,11 +332,11 @@ remix({ You likely won't need to adjust any code, unless you had custom logic inside of `handleError` that was matching the previous error message to differentiate it from other errors. -## unstable_singleFetch +## v3_singleFetch Opt into [Single Fetch][single-fetch] behavior (details will be expanded once the flag stabilizes). -## unstable_lazyRouteDiscovery +## v3_lazyRouteDiscovery Opt into [Lazy Route Discovery][lazy-route-discovery] behavior (details will be expanded once the flag stabilizes). diff --git a/integration/action-test.ts b/integration/action-test.ts index 3c803eea732..dc378790cbd 100644 --- a/integration/action-test.ts +++ b/integration/action-test.ts @@ -230,7 +230,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/catch-boundary-data-test.ts b/integration/catch-boundary-data-test.ts index 708f1124e2a..64ea56b69a0 100644 --- a/integration/catch-boundary-data-test.ts +++ b/integration/catch-boundary-data-test.ts @@ -258,7 +258,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/catch-boundary-test.ts b/integration/catch-boundary-test.ts index 1817988b4d6..872b9621b05 100644 --- a/integration/catch-boundary-test.ts +++ b/integration/catch-boundary-test.ts @@ -391,7 +391,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/client-data-test.ts b/integration/client-data-test.ts index 44bc613486d..e1c96145195 100644 --- a/integration/client-data-test.ts +++ b/integration/client-data-test.ts @@ -1473,7 +1473,7 @@ test.describe("single fetch", () => { ...init, config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, }, diff --git a/integration/defer-loader-test.ts b/integration/defer-loader-test.ts index 0923b99447f..6412672808d 100644 --- a/integration/defer-loader-test.ts +++ b/integration/defer-loader-test.ts @@ -108,7 +108,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/defer-test.ts b/integration/defer-test.ts index 487be7f8b03..0216d422d34 100644 --- a/integration/defer-test.ts +++ b/integration/defer-test.ts @@ -1326,7 +1326,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2289,7 +2289,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/error-boundary-test.ts b/integration/error-boundary-test.ts index dadfa3d31cf..d67a1c15cef 100644 --- a/integration/error-boundary-test.ts +++ b/integration/error-boundary-test.ts @@ -1373,7 +1373,7 @@ test.describe("single fetch", () => { { config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1835,7 +1835,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2016,7 +2016,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2379,7 +2379,7 @@ test.describe("single fetch", () => { { config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: getFiles({ includeRootErrorBoundary: false }), @@ -2455,7 +2455,7 @@ test.describe("single fetch", () => { { config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: getFiles({ includeRootErrorBoundary: true }), @@ -2525,7 +2525,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: getFiles({ @@ -2614,7 +2614,7 @@ test.describe("single fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/error-boundary-v2-test.ts b/integration/error-boundary-v2-test.ts index 8d06573154e..cb07acb504d 100644 --- a/integration/error-boundary-v2-test.ts +++ b/integration/error-boundary-v2-test.ts @@ -253,7 +253,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/error-data-request-test.ts b/integration/error-data-request-test.ts index 8e0bfaab13c..66ffd84223c 100644 --- a/integration/error-data-request-test.ts +++ b/integration/error-data-request-test.ts @@ -189,7 +189,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/error-sanitization-test.ts b/integration/error-sanitization-test.ts index ab5f27e7c0d..8f50b244d7d 100644 --- a/integration/error-sanitization-test.ts +++ b/integration/error-sanitization-test.ts @@ -680,7 +680,7 @@ test.describe("single fetch", () => { { config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: routeFiles, @@ -857,7 +857,7 @@ test.describe("single fetch", () => { { config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: routeFiles, @@ -1038,7 +1038,7 @@ test.describe("single fetch", () => { { config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/fetcher-layout-test.ts b/integration/fetcher-layout-test.ts index cd29f91a791..33479430d80 100644 --- a/integration/fetcher-layout-test.ts +++ b/integration/fetcher-layout-test.ts @@ -290,7 +290,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/fetcher-test.ts b/integration/fetcher-test.ts index ad7959f6b95..f89c1916a15 100644 --- a/integration/fetcher-test.ts +++ b/integration/fetcher-test.ts @@ -546,7 +546,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -965,7 +965,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/file-uploads-test.ts b/integration/file-uploads-test.ts index ccc95be5e9b..689f20dea9e 100644 --- a/integration/file-uploads-test.ts +++ b/integration/file-uploads-test.ts @@ -157,7 +157,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/fog-of-war-test.ts b/integration/fog-of-war-test.ts index 2a20f0e6fe5..6dc66ad62ed 100644 --- a/integration/fog-of-war-test.ts +++ b/integration/fog-of-war-test.ts @@ -105,7 +105,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -151,7 +151,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: getFiles(), @@ -175,7 +175,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: getFiles(), @@ -210,7 +210,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: getFiles(), @@ -243,7 +243,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -309,7 +309,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -370,7 +370,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -421,7 +421,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -485,7 +485,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -533,7 +533,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -604,7 +604,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -720,7 +720,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -845,7 +845,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -938,7 +938,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -1031,7 +1031,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -1125,7 +1125,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -1219,7 +1219,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -1310,7 +1310,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -1362,7 +1362,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { @@ -1405,7 +1405,7 @@ test.describe("Fog of War", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, + v3_lazyRouteDiscovery: true, }, }, files: { diff --git a/integration/form-data-test.ts b/integration/form-data-test.ts index d9cd69b7801..df6802e554c 100644 --- a/integration/form-data-test.ts +++ b/integration/form-data-test.ts @@ -68,7 +68,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/form-test.ts b/integration/form-test.ts index 6b6e4d97c12..fa947fe6fcd 100644 --- a/integration/form-test.ts +++ b/integration/form-test.ts @@ -1198,7 +1198,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/loader-test.ts b/integration/loader-test.ts index 86e64def002..e6163ce4124 100644 --- a/integration/loader-test.ts +++ b/integration/loader-test.ts @@ -151,7 +151,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -213,7 +213,7 @@ test.describe("single fetch", () => { await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/navigation-state-test.ts b/integration/navigation-state-test.ts index 01902e4d55b..2335e88db51 100644 --- a/integration/navigation-state-test.ts +++ b/integration/navigation-state-test.ts @@ -484,7 +484,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/prefetch-test.ts b/integration/prefetch-test.ts index 111f4006e7e..07d6d41b5d6 100644 --- a/integration/prefetch-test.ts +++ b/integration/prefetch-test.ts @@ -577,7 +577,7 @@ test.describe("single fetch", () => { return { config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -725,8 +725,8 @@ test.describe("single fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_lazyRouteDiscovery: true, - unstable_singleFetch: true, + v3_lazyRouteDiscovery: true, + v3_singleFetch: true, }, }, files: { @@ -945,7 +945,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1024,7 +1024,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1107,7 +1107,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/redirects-test.ts b/integration/redirects-test.ts index 77f2fe49903..c72b91ff759 100644 --- a/integration/redirects-test.ts +++ b/integration/redirects-test.ts @@ -196,7 +196,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/revalidate-test.ts b/integration/revalidate-test.ts index 8830e977a2c..f65391b43b1 100644 --- a/integration/revalidate-test.ts +++ b/integration/revalidate-test.ts @@ -305,7 +305,7 @@ test.describe("single fetch", () => { await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/set-cookie-revalidation-test.ts b/integration/set-cookie-revalidation-test.ts index 01f6b2c0567..bb4dc89007c 100644 --- a/integration/set-cookie-revalidation-test.ts +++ b/integration/set-cookie-revalidation-test.ts @@ -143,7 +143,7 @@ test.describe("single fetch", () => { fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/single-fetch-test.ts b/integration/single-fetch-test.ts index c97a9fd1442..10c9c62bf97 100644 --- a/integration/single-fetch-test.ts +++ b/integration/single-fetch-test.ts @@ -185,7 +185,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files, @@ -233,7 +233,7 @@ test.describe("single-fetch", () => { { config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files, @@ -258,7 +258,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files, @@ -280,7 +280,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files, @@ -314,7 +314,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files, @@ -338,7 +338,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files, @@ -355,7 +355,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files, @@ -376,7 +376,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files, @@ -396,7 +396,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -469,7 +469,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -571,7 +571,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -671,7 +671,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -751,7 +751,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -852,7 +852,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -952,7 +952,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1005,7 +1005,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1057,7 +1057,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1110,7 +1110,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1167,7 +1167,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1224,7 +1224,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1264,7 +1264,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1302,7 +1302,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1403,7 +1403,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1512,7 +1512,7 @@ test.describe("single-fetch", () => { remix({ basename: '/base', future: { - unstable_singleFetch: true, + v3_singleFetch: true, } }), ], @@ -1568,7 +1568,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1615,7 +1615,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1669,7 +1669,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1703,7 +1703,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1752,7 +1752,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1843,7 +1843,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1901,7 +1901,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -1969,7 +1969,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2029,7 +2029,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2121,7 +2121,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2223,7 +2223,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2333,7 +2333,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2418,7 +2418,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2503,7 +2503,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2600,7 +2600,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2703,7 +2703,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2816,7 +2816,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2870,7 +2870,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -2933,7 +2933,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -3007,7 +3007,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -3085,7 +3085,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -3172,7 +3172,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -3265,7 +3265,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -3363,7 +3363,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -3491,7 +3491,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -3577,7 +3577,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { @@ -3667,7 +3667,7 @@ test.describe("single-fetch", () => { let fixture = await createFixture({ config: { future: { - unstable_singleFetch: true, + v3_singleFetch: true, }, }, files: { diff --git a/integration/vite-hmr-hdr-test.ts b/integration/vite-hmr-hdr-test.ts index 7a0f536b6f9..aca542c36d7 100644 --- a/integration/vite-hmr-hdr-test.ts +++ b/integration/vite-hmr-hdr-test.ts @@ -128,7 +128,7 @@ test.describe("single fetch", () => { plugins: [ remix({ future: { - unstable_singleFetch: true + v3_singleFetch: true }, }) ] @@ -154,7 +154,7 @@ test.describe("single fetch", () => { plugins: [ remix({ future: { - unstable_singleFetch: true + v3_singleFetch: true }, }) ] diff --git a/packages/remix-dev/__tests__/readConfig-test.ts b/packages/remix-dev/__tests__/readConfig-test.ts index 6edf1af81de..f528c16f15e 100644 --- a/packages/remix-dev/__tests__/readConfig-test.ts +++ b/packages/remix-dev/__tests__/readConfig-test.ts @@ -36,11 +36,11 @@ describe("readConfig", () => { "entryServerFile": "entry.server.tsx", "entryServerFilePath": Any, "future": { - "unstable_lazyRouteDiscovery": false, "unstable_optimizeDeps": false, - "unstable_singleFetch": false, "v3_fetcherPersist": false, + "v3_lazyRouteDiscovery": false, "v3_relativeSplatPath": false, + "v3_singleFetch": false, "v3_throwAbortReason": false, }, "mdx": undefined, diff --git a/packages/remix-dev/cli/commands.ts b/packages/remix-dev/cli/commands.ts index 7eeded3c271..82406b1b6b4 100644 --- a/packages/remix-dev/cli/commands.ts +++ b/packages/remix-dev/cli/commands.ts @@ -304,7 +304,7 @@ export async function generateEntry( let defaultEntryServer = path.resolve( defaultsDirectory, ctx?.remixConfig.ssr === false && - ctx?.remixConfig.future.unstable_singleFetch !== true + ctx?.remixConfig.future.v3_singleFetch !== true ? `entry.server.spa.tsx` : `entry.server.${serverRuntime}.tsx` ); diff --git a/packages/remix-dev/config.ts b/packages/remix-dev/config.ts index 7234202be8f..16065ff01af 100644 --- a/packages/remix-dev/config.ts +++ b/packages/remix-dev/config.ts @@ -37,8 +37,8 @@ interface FutureConfig { v3_fetcherPersist: boolean; v3_relativeSplatPath: boolean; v3_throwAbortReason: boolean; - unstable_singleFetch: boolean; - unstable_lazyRouteDiscovery: boolean; + v3_singleFetch: boolean; + v3_lazyRouteDiscovery: boolean; unstable_optimizeDeps: boolean; } @@ -471,7 +471,7 @@ export async function resolveConfig( let pkgJson = await PackageJson.load(rootDirectory); let deps = pkgJson.content.dependencies ?? {}; - if (isSpaMode && appConfig.future?.unstable_singleFetch != true) { + if (isSpaMode && appConfig.future?.v3_singleFetch != true) { // This is a super-simple default since we don't need streaming in SPA Mode. // We can include this in a remix-spa template, but right now `npx remix reveal` // will still expose the streaming template since that command doesn't have @@ -529,12 +529,6 @@ export async function resolveConfig( entryServerFile = `entry.server.${serverRuntime}.tsx`; } - if (isSpaMode && appConfig.future?.unstable_lazyRouteDiscovery === true) { - throw new Error( - "You can not use `future.unstable_lazyRouteDiscovery` in SPA Mode (`ssr: false`)" - ); - } - let entryClientFilePath = userEntryClientFile ? path.resolve(appDirectory, userEntryClientFile) : path.resolve(defaultsDirectory, entryClientFile); @@ -609,9 +603,8 @@ export async function resolveConfig( v3_fetcherPersist: appConfig.future?.v3_fetcherPersist === true, v3_relativeSplatPath: appConfig.future?.v3_relativeSplatPath === true, v3_throwAbortReason: appConfig.future?.v3_throwAbortReason === true, - unstable_singleFetch: appConfig.future?.unstable_singleFetch === true, - unstable_lazyRouteDiscovery: - appConfig.future?.unstable_lazyRouteDiscovery === true, + v3_singleFetch: appConfig.future?.v3_singleFetch === true, + v3_lazyRouteDiscovery: appConfig.future?.v3_lazyRouteDiscovery === true, unstable_optimizeDeps: appConfig.future?.unstable_optimizeDeps === true, }; diff --git a/packages/remix-react/__tests__/deferred-scripts-test.tsx b/packages/remix-react/__tests__/deferred-scripts-test.tsx index 5b29656446f..8948dfac36e 100644 --- a/packages/remix-react/__tests__/deferred-scripts-test.tsx +++ b/packages/remix-react/__tests__/deferred-scripts-test.tsx @@ -32,7 +32,7 @@ describe(" with activeDeferreds", () => { v3_throwAbortReason: false, v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, routeModules: { root: { default: () => null } }, manifest: { diff --git a/packages/remix-react/__tests__/scroll-restoration-test.tsx b/packages/remix-react/__tests__/scroll-restoration-test.tsx index cc4ba35622c..e4ff4b51f6b 100644 --- a/packages/remix-react/__tests__/scroll-restoration-test.tsx +++ b/packages/remix-react/__tests__/scroll-restoration-test.tsx @@ -32,7 +32,7 @@ describe("", () => { future: { v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, routeModules: { root: { default: () => null } }, manifest: { diff --git a/packages/remix-react/browser.tsx b/packages/remix-react/browser.tsx index 7ce8448b4de..ab3decc320e 100644 --- a/packages/remix-react/browser.tsx +++ b/packages/remix-react/browser.tsx @@ -199,7 +199,7 @@ export function RemixBrowser(_props: RemixBrowserProps): ReactElement { if (!router) { // When single fetch is enabled, we need to suspend until the initial state // snapshot is decoded into window.__remixContext.state - if (window.__remixContext.future.unstable_singleFetch) { + if (window.__remixContext.future.v3_singleFetch) { // Note: `stateDecodingPromise` is not coupled to `router` - we'll reach this // code potentially many times waiting for our state to arrive, but we'll // then only get past here and create the `router` one time @@ -299,11 +299,11 @@ export function RemixBrowser(_props: RemixBrowserProps): ReactElement { v7_relativeSplatPath: window.__remixContext.future.v3_relativeSplatPath, // Single fetch enables this underlying behavior v7_skipActionErrorRevalidation: - window.__remixContext.future.unstable_singleFetch === true, + window.__remixContext.future.v3_singleFetch === true, }, hydrationData, mapRouteProperties, - dataStrategy: window.__remixContext.future.unstable_singleFetch + dataStrategy: window.__remixContext.future.v3_singleFetch ? getSingleFetchDataStrategy( window.__remixManifest, window.__remixRouteModules, @@ -409,7 +409,7 @@ export function RemixBrowser(_props: RemixBrowserProps): ReactElement { This fragment is important to ensure we match the JSX structure so that useId values hydrate correctly */} - {window.__remixContext.future.unstable_singleFetch ? <> : null} + {window.__remixContext.future.v3_singleFetch ? <> : null} ); } diff --git a/packages/remix-react/components.tsx b/packages/remix-react/components.tsx index 5fccf3ba25d..d0e315fae2d 100644 --- a/packages/remix-react/components.tsx +++ b/packages/remix-react/components.tsx @@ -465,7 +465,7 @@ function PrefetchPageLinksImpl({ ); let dataHrefs = React.useMemo(() => { - if (!future.unstable_singleFetch) { + if (!future.v3_singleFetch) { return getDataLinkHrefs(page, newMatchesForData, manifest); } @@ -517,7 +517,7 @@ function PrefetchPageLinksImpl({ return [url.pathname + url.search]; }, [ - future.unstable_singleFetch, + future.v3_singleFetch, loaderData, location, manifest, @@ -822,7 +822,7 @@ export function Scripts(props: ScriptProps) { let deferredScripts: any[] = []; let initialScripts = React.useMemo(() => { - let streamScript = future.unstable_singleFetch + let streamScript = future.v3_singleFetch ? // prettier-ignore "window.__remixContext.stream = new ReadableStream({" + "start(controller){" + @@ -836,7 +836,7 @@ export function Scripts(props: ScriptProps) { : " "; // When single fetch is enabled, deferred is handled by turbo-stream - let activeDeferreds = future.unstable_singleFetch + let activeDeferreds = future.v3_singleFetch ? undefined : staticContext?.activeDeferreds; diff --git a/packages/remix-react/entry.ts b/packages/remix-react/entry.ts index 51224341a2a..71b5005b87c 100644 --- a/packages/remix-react/entry.ts +++ b/packages/remix-react/entry.ts @@ -43,8 +43,8 @@ export interface EntryContext extends RemixContextObject { export interface FutureConfig { v3_fetcherPersist: boolean; v3_relativeSplatPath: boolean; - unstable_lazyRouteDiscovery: boolean; - unstable_singleFetch: boolean; + v3_lazyRouteDiscovery: boolean; + v3_singleFetch: boolean; } export interface AssetsManifest { diff --git a/packages/remix-react/fog-of-war.ts b/packages/remix-react/fog-of-war.ts index 83e5fb5086a..aa5f5cf5d95 100644 --- a/packages/remix-react/fog-of-war.ts +++ b/packages/remix-react/fog-of-war.ts @@ -26,7 +26,7 @@ const discoveredPaths = new Set(); const URL_LIMIT = 7680; export function isFogOfWarEnabled(future: FutureConfig, isSpaMode: boolean) { - return future.unstable_lazyRouteDiscovery === true && !isSpaMode; + return future.v3_lazyRouteDiscovery === true && !isSpaMode; } export function getPartialManifest(manifest: AssetsManifest, router: Router) { diff --git a/packages/remix-react/server.tsx b/packages/remix-react/server.tsx index 075644e96fa..b496f4f4387 100644 --- a/packages/remix-react/server.tsx +++ b/packages/remix-react/server.tsx @@ -96,7 +96,7 @@ export function RemixServer({ /> - {context.future.unstable_singleFetch && context.serverHandoffStream ? ( + {context.future.v3_singleFetch && context.serverHandoffStream ? ( { let address = diff --git a/packages/remix-server-runtime/__tests__/data-test.ts b/packages/remix-server-runtime/__tests__/data-test.ts index 0ae62305851..92113be3cd0 100644 --- a/packages/remix-server-runtime/__tests__/data-test.ts +++ b/packages/remix-server-runtime/__tests__/data-test.ts @@ -25,7 +25,7 @@ describe("loaders", () => { future: { v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, } as unknown as ServerBuild; @@ -69,7 +69,7 @@ describe("loaders", () => { future: { v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, } as unknown as ServerBuild; @@ -113,7 +113,7 @@ describe("loaders", () => { future: { v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, } as unknown as ServerBuild; @@ -160,7 +160,7 @@ describe("loaders", () => { future: { v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, } as unknown as ServerBuild; @@ -206,7 +206,7 @@ describe("loaders", () => { future: { v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, } as unknown as ServerBuild; @@ -250,7 +250,7 @@ describe("loaders", () => { future: { v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, } as unknown as ServerBuild; @@ -292,7 +292,7 @@ describe("loaders", () => { future: { v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, } as unknown as ServerBuild; @@ -331,7 +331,7 @@ describe("loaders", () => { future: { v3_fetcherPersist: false, v3_relativeSplatPath: false, - unstable_singleFetch: false, + v3_singleFetch: false, }, } as unknown as ServerBuild; diff --git a/packages/remix-server-runtime/entry.ts b/packages/remix-server-runtime/entry.ts index 6cb3c2ee8ba..8283e720d56 100644 --- a/packages/remix-server-runtime/entry.ts +++ b/packages/remix-server-runtime/entry.ts @@ -33,8 +33,8 @@ export interface FutureConfig { v3_fetcherPersist: boolean; v3_relativeSplatPath: boolean; v3_throwAbortReason: boolean; - unstable_lazyRouteDiscovery: boolean; - unstable_singleFetch: boolean; + v3_lazyRouteDiscovery: boolean; + v3_singleFetch: boolean; } export interface AssetsManifest { diff --git a/packages/remix-server-runtime/routes.ts b/packages/remix-server-runtime/routes.ts index 029b98469d0..6d4fbe2752f 100644 --- a/packages/remix-server-runtime/routes.ts +++ b/packages/remix-server-runtime/routes.ts @@ -99,7 +99,7 @@ export function createStaticHandlerDataRoutes( loadContext: args.context, loader: route.module.loader!, routeId: route.id, - singleFetch: future.unstable_singleFetch === true, + singleFetch: future.v3_singleFetch === true, }) : undefined, action: route.module.action @@ -110,7 +110,7 @@ export function createStaticHandlerDataRoutes( loadContext: args.context, action: route.module.action!, routeId: route.id, - singleFetch: future.unstable_singleFetch === true, + singleFetch: future.v3_singleFetch === true, }) : undefined, handle: route.module.handle, diff --git a/packages/remix-server-runtime/serialize.ts b/packages/remix-server-runtime/serialize.ts index 836e4e14ee8..99512790979 100644 --- a/packages/remix-server-runtime/serialize.ts +++ b/packages/remix-server-runtime/serialize.ts @@ -11,7 +11,7 @@ import type { Future } from "./future"; // prettier-ignore type SingleFetchEnabled = - Future extends { unstable_singleFetch: infer T extends boolean } ? T : false + Future extends { v3_singleFetch: infer T extends boolean } ? T : false // prettier-ignore /** diff --git a/packages/remix-server-runtime/server.ts b/packages/remix-server-runtime/server.ts index 14a7f680893..2451d701832 100644 --- a/packages/remix-server-runtime/server.ts +++ b/packages/remix-server-runtime/server.ts @@ -149,7 +149,7 @@ export const createRequestHandler: CreateRequestHandlerFunction = ( let response: Response; if (url.searchParams.has("_data")) { - if (_build.future.unstable_singleFetch) { + if (_build.future.v3_singleFetch) { handleError( new Error( "Warning: Single fetch-enabled apps should not be making ?_data requests, " + @@ -180,10 +180,7 @@ export const createRequestHandler: CreateRequestHandlerFunction = ( response = createRemixRedirectResponse(response, _build.basename); } } - } else if ( - _build.future.unstable_singleFetch && - url.pathname.endsWith(".data") - ) { + } else if (_build.future.v3_singleFetch && url.pathname.endsWith(".data")) { let handlerUrl = new URL(request.url); handlerUrl.pathname = handlerUrl.pathname .replace(/\.data$/, "") @@ -499,9 +496,9 @@ async function handleDocumentRequest( criticalCss, future: build.future, isSpaMode: build.isSpaMode, - ...(!build.future.unstable_singleFetch ? { state } : null), + ...(!build.future.v3_singleFetch ? { state } : null), }), - ...(build.future.unstable_singleFetch + ...(build.future.v3_singleFetch ? { serverHandoffStream: encodeViaTurboStream( state, @@ -574,9 +571,9 @@ async function handleDocumentRequest( basename: build.basename, future: build.future, isSpaMode: build.isSpaMode, - ...(!build.future.unstable_singleFetch ? { state } : null), + ...(!build.future.v3_singleFetch ? { state } : null), }), - ...(build.future.unstable_singleFetch + ...(build.future.v3_singleFetch ? { serverHandoffStream: encodeViaTurboStream( state, @@ -630,7 +627,7 @@ async function handleResourceRequest( ); } - if (build.future.unstable_singleFetch && !isResponse(response)) { + if (build.future.v3_singleFetch && !isResponse(response)) { console.warn( resourceRouteJsonWarning( request.method === "GET" ? "loader" : "action", diff --git a/packages/remix-testing/create-remix-stub.tsx b/packages/remix-testing/create-remix-stub.tsx index 72d41aa6ce1..1433659f686 100644 --- a/packages/remix-testing/create-remix-stub.tsx +++ b/packages/remix-testing/create-remix-stub.tsx @@ -106,9 +106,8 @@ export function createRemixStub( future: { v3_fetcherPersist: future?.v3_fetcherPersist === true, v3_relativeSplatPath: future?.v3_relativeSplatPath === true, - unstable_lazyRouteDiscovery: - future?.unstable_lazyRouteDiscovery === true, - unstable_singleFetch: future?.unstable_singleFetch === true, + v3_lazyRouteDiscovery: future?.v3_lazyRouteDiscovery === true, + v3_singleFetch: future?.v3_singleFetch === true, }, manifest: { routes: {},