Skip to content

Commit

Permalink
Remove entry.server.spa.tsx
Browse files Browse the repository at this point in the history
  • Loading branch information
brophdawg11 committed May 8, 2024
1 parent 531b286 commit dd6a86c
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 177 deletions.
4 changes: 1 addition & 3 deletions packages/remix-dev/cli/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,7 @@ export async function generateEntry(

let defaultEntryServer = path.resolve(
defaultsDirectory,
ctx?.reactRouterConfig.ssr === false
? `entry.server.spa.tsx`
: `entry.server.${serverRuntime}.tsx`
`entry.server.${serverRuntime}.tsx`
);

let isServerEntry = entry === "entry.server";
Expand Down
15 changes: 2 additions & 13 deletions packages/remix-dev/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -465,8 +465,7 @@ export async function resolveEntryFiles({
rootDirectory: string;
reactRouterConfig: ResolvedVitePluginConfig;
}) {
let { appDirectory, future } = reactRouterConfig;
let isSpaMode = !reactRouterConfig.ssr;
let { appDirectory } = reactRouterConfig;

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

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

if (isSpaMode) {
// 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
// access to the `ssr:false` flag in the vite config (the streaming template
// works just fine so maybe instead of having this we _only have this version
// in the template...). We let users manage an entry.server file in SPA Mode
// so they can de ide if they want to hydrate the full document or just an
// embedded `<div id="app">` or whatever.
entryServerFile = "entry.server.spa.tsx";
} else if (userEntryServerFile) {
if (userEntryServerFile) {
entryServerFile = userEntryServerFile;
} else {
let serverRuntime = deps["@react-router/deno"]
Expand Down
94 changes: 6 additions & 88 deletions packages/remix-dev/config/defaults/entry.server.node.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { PassThrough } from "node:stream";
import type { AppLoadContext, EntryContext } from "@react-router/node";
import { createReadableStreamFromReadable } from "@react-router/node";
import { RemixServer } from "react-router";
import * as isbotModule from "isbot";
import { renderToPipeableStream } from "react-dom/server";

const ABORT_DELAY = 5_000;
Expand All @@ -15,43 +14,12 @@ export default function handleRequest(
remixContext: EntryContext,
loadContext: AppLoadContext
) {
let prohibitOutOfOrderStreaming =
isBotRequest(request.headers.get("user-agent")) || remixContext.isSpaMode;

return prohibitOutOfOrderStreaming
? handleBotRequest(
request,
responseStatusCode,
responseHeaders,
remixContext
)
: handleBrowserRequest(
request,
responseStatusCode,
responseHeaders,
remixContext
);
}

// We have some Remix apps in the wild already running with isbot@3 so we need
// to maintain backwards compatibility even though we want new apps to use
// isbot@4. That way, we can ship this as a minor Semver update to @react-router/dev.
function isBotRequest(userAgent: string | null) {
if (!userAgent) {
return false;
}

// isbot >= 3.8.0, >4
if ("isbot" in isbotModule && typeof isbotModule.isbot === "function") {
return isbotModule.isbot(userAgent);
}

// isbot < 3.8.0
if ("default" in isbotModule && typeof isbotModule.default === "function") {
return isbotModule.default(userAgent);
}

return false;
return handleBotRequest(
request,
responseStatusCode,
responseHeaders,
remixContext
);
}

function handleBotRequest(
Expand Down Expand Up @@ -103,53 +71,3 @@ function handleBotRequest(
setTimeout(abort, ABORT_DELAY);
});
}

function handleBrowserRequest(
request: Request,
responseStatusCode: number,
responseHeaders: Headers,
remixContext: EntryContext
) {
return new Promise((resolve, reject) => {
let shellRendered = false;
const { pipe, abort } = renderToPipeableStream(
<RemixServer
context={remixContext}
url={request.url}
abortDelay={ABORT_DELAY}
/>,
{
onShellReady() {
shellRendered = true;
const body = new PassThrough();
const stream = createReadableStreamFromReadable(body);

responseHeaders.set("Content-Type", "text/html");

resolve(
new Response(stream, {
headers: responseHeaders,
status: responseStatusCode,
})
);

pipe(body);
},
onShellError(error: unknown) {
reject(error);
},
onError(error: unknown) {
responseStatusCode = 500;
// Log streaming rendering errors from inside the shell. Don't log
// errors encountered during initial shell rendering since they'll
// reject and get logged in handleDocumentRequest.
if (shellRendered) {
console.error(error);
}
},
}
);

setTimeout(abort, ABORT_DELAY);
});
}
73 changes: 0 additions & 73 deletions packages/remix-dev/config/defaults/entry.server.spa.tsx

This file was deleted.

0 comments on commit dd6a86c

Please sign in to comment.