From 861d9489257aa2e493e08f074f42d4c2314315dc Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Tue, 19 Mar 2024 11:13:39 -0400 Subject: [PATCH] Fix SPA mode when single fetch is enabled (#9063) --- packages/remix-dev/cli/commands.ts | 3 ++- packages/remix-dev/config.ts | 2 +- packages/remix-dev/config/defaults/entry.server.node.tsx | 5 ++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/remix-dev/cli/commands.ts b/packages/remix-dev/cli/commands.ts index eabd6edbb0..7eeded3c27 100644 --- a/packages/remix-dev/cli/commands.ts +++ b/packages/remix-dev/cli/commands.ts @@ -303,7 +303,8 @@ export async function generateEntry( let defaultEntryClient = path.resolve(defaultsDirectory, "entry.client.tsx"); let defaultEntryServer = path.resolve( defaultsDirectory, - ctx?.remixConfig.ssr === false + ctx?.remixConfig.ssr === false && + ctx?.remixConfig.future.unstable_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 ac576095f4..4ddf67780d 100644 --- a/packages/remix-dev/config.ts +++ b/packages/remix-dev/config.ts @@ -469,7 +469,7 @@ export async function resolveConfig( let pkgJson = await PackageJson.load(rootDirectory); let deps = pkgJson.content.dependencies ?? {}; - if (isSpaMode) { + if (isSpaMode && appConfig.future?.unstable_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 diff --git a/packages/remix-dev/config/defaults/entry.server.node.tsx b/packages/remix-dev/config/defaults/entry.server.node.tsx index 5005bc6917..65ad16eb8b 100644 --- a/packages/remix-dev/config/defaults/entry.server.node.tsx +++ b/packages/remix-dev/config/defaults/entry.server.node.tsx @@ -15,7 +15,10 @@ export default function handleRequest( remixContext: EntryContext, loadContext: AppLoadContext ) { - return isBotRequest(request.headers.get("user-agent")) + let prohibitOutOfOrderStreaming = + isBotRequest(request.headers.get("user-agent")) || remixContext.isSpaMode; + + return prohibitOutOfOrderStreaming ? handleBotRequest( request, responseStatusCode,