Skip to content

Commit dd6a86c

Browse files
committed
Remove entry.server.spa.tsx
1 parent 531b286 commit dd6a86c

File tree

4 files changed

+9
-177
lines changed

4 files changed

+9
-177
lines changed

packages/remix-dev/cli/commands.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,7 @@ export async function generateEntry(
144144

145145
let defaultEntryServer = path.resolve(
146146
defaultsDirectory,
147-
ctx?.reactRouterConfig.ssr === false
148-
? `entry.server.spa.tsx`
149-
: `entry.server.${serverRuntime}.tsx`
147+
`entry.server.${serverRuntime}.tsx`
150148
);
151149

152150
let isServerEntry = entry === "entry.server";

packages/remix-dev/config.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -465,8 +465,7 @@ export async function resolveEntryFiles({
465465
rootDirectory: string;
466466
reactRouterConfig: ResolvedVitePluginConfig;
467467
}) {
468-
let { appDirectory, future } = reactRouterConfig;
469-
let isSpaMode = !reactRouterConfig.ssr;
468+
let { appDirectory } = reactRouterConfig;
470469

471470
let defaultsDirectory = path.resolve(__dirname, "config", "defaults");
472471

@@ -479,17 +478,7 @@ export async function resolveEntryFiles({
479478
let pkgJson = await PackageJson.load(rootDirectory);
480479
let deps = pkgJson.content.dependencies ?? {};
481480

482-
if (isSpaMode) {
483-
// This is a super-simple default since we don't need streaming in SPA Mode.
484-
// We can include this in a remix-spa template, but right now `npx remix reveal`
485-
// will still expose the streaming template since that command doesn't have
486-
// access to the `ssr:false` flag in the vite config (the streaming template
487-
// works just fine so maybe instead of having this we _only have this version
488-
// in the template...). We let users manage an entry.server file in SPA Mode
489-
// so they can de ide if they want to hydrate the full document or just an
490-
// embedded `<div id="app">` or whatever.
491-
entryServerFile = "entry.server.spa.tsx";
492-
} else if (userEntryServerFile) {
481+
if (userEntryServerFile) {
493482
entryServerFile = userEntryServerFile;
494483
} else {
495484
let serverRuntime = deps["@react-router/deno"]

packages/remix-dev/config/defaults/entry.server.node.tsx

Lines changed: 6 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { PassThrough } from "node:stream";
33
import type { AppLoadContext, EntryContext } from "@react-router/node";
44
import { createReadableStreamFromReadable } from "@react-router/node";
55
import { RemixServer } from "react-router";
6-
import * as isbotModule from "isbot";
76
import { renderToPipeableStream } from "react-dom/server";
87

98
const ABORT_DELAY = 5_000;
@@ -15,43 +14,12 @@ export default function handleRequest(
1514
remixContext: EntryContext,
1615
loadContext: AppLoadContext
1716
) {
18-
let prohibitOutOfOrderStreaming =
19-
isBotRequest(request.headers.get("user-agent")) || remixContext.isSpaMode;
20-
21-
return prohibitOutOfOrderStreaming
22-
? handleBotRequest(
23-
request,
24-
responseStatusCode,
25-
responseHeaders,
26-
remixContext
27-
)
28-
: handleBrowserRequest(
29-
request,
30-
responseStatusCode,
31-
responseHeaders,
32-
remixContext
33-
);
34-
}
35-
36-
// We have some Remix apps in the wild already running with isbot@3 so we need
37-
// to maintain backwards compatibility even though we want new apps to use
38-
// isbot@4. That way, we can ship this as a minor Semver update to @react-router/dev.
39-
function isBotRequest(userAgent: string | null) {
40-
if (!userAgent) {
41-
return false;
42-
}
43-
44-
// isbot >= 3.8.0, >4
45-
if ("isbot" in isbotModule && typeof isbotModule.isbot === "function") {
46-
return isbotModule.isbot(userAgent);
47-
}
48-
49-
// isbot < 3.8.0
50-
if ("default" in isbotModule && typeof isbotModule.default === "function") {
51-
return isbotModule.default(userAgent);
52-
}
53-
54-
return false;
17+
return handleBotRequest(
18+
request,
19+
responseStatusCode,
20+
responseHeaders,
21+
remixContext
22+
);
5523
}
5624

5725
function handleBotRequest(
@@ -103,53 +71,3 @@ function handleBotRequest(
10371
setTimeout(abort, ABORT_DELAY);
10472
});
10573
}
106-
107-
function handleBrowserRequest(
108-
request: Request,
109-
responseStatusCode: number,
110-
responseHeaders: Headers,
111-
remixContext: EntryContext
112-
) {
113-
return new Promise((resolve, reject) => {
114-
let shellRendered = false;
115-
const { pipe, abort } = renderToPipeableStream(
116-
<RemixServer
117-
context={remixContext}
118-
url={request.url}
119-
abortDelay={ABORT_DELAY}
120-
/>,
121-
{
122-
onShellReady() {
123-
shellRendered = true;
124-
const body = new PassThrough();
125-
const stream = createReadableStreamFromReadable(body);
126-
127-
responseHeaders.set("Content-Type", "text/html");
128-
129-
resolve(
130-
new Response(stream, {
131-
headers: responseHeaders,
132-
status: responseStatusCode,
133-
})
134-
);
135-
136-
pipe(body);
137-
},
138-
onShellError(error: unknown) {
139-
reject(error);
140-
},
141-
onError(error: unknown) {
142-
responseStatusCode = 500;
143-
// Log streaming rendering errors from inside the shell. Don't log
144-
// errors encountered during initial shell rendering since they'll
145-
// reject and get logged in handleDocumentRequest.
146-
if (shellRendered) {
147-
console.error(error);
148-
}
149-
},
150-
}
151-
);
152-
153-
setTimeout(abort, ABORT_DELAY);
154-
});
155-
}

packages/remix-dev/config/defaults/entry.server.spa.tsx

Lines changed: 0 additions & 73 deletions
This file was deleted.

0 commit comments

Comments
 (0)