diff --git a/docs/guides/migrating-react-router-app.md b/docs/guides/migrating-react-router-app.md index 000532aaa92..458ab10faaa 100644 --- a/docs/guides/migrating-react-router-app.md +++ b/docs/guides/migrating-react-router-app.md @@ -47,7 +47,7 @@ Let's start by creating two new files: ```tsx filename=app/entry.server.tsx import { PassThrough } from "stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -59,20 +59,23 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { return isbot(request.headers.get("user-agent")) ? handleBotRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ) : handleBrowserRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -80,7 +83,8 @@ function handleBotRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( @@ -122,7 +126,8 @@ function handleBrowserRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( diff --git a/docs/guides/streaming.md b/docs/guides/streaming.md index 7cb609e6cee..fb0ffca46c2 100644 --- a/docs/guides/streaming.md +++ b/docs/guides/streaming.md @@ -80,12 +80,13 @@ Let's take a dive into how to accomplish this. First, to enable streaming with React 18, you'll update your `entry.server.tsx` file to use `renderToPipeableStream`. Here's a simple (and incomplete) version of that: -```tsx filename=app/entry.server.tsx lines=[1-2,17,24,29,34] +```tsx filename=app/entry.server.tsx lines=[1-2,19,26,31,36] import { PassThrough } from "stream"; import { renderToPipeableStream } from "react-dom/server"; import { RemixServer } from "@remix-run/react"; import { Response } from "@remix-run/node"; // or cloudflare/deno import type { + AppLoadContext, EntryContext, Headers, } from "@remix-run/node"; // or cloudflare/deno @@ -94,7 +95,8 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve) => { const { pipe } = renderToPipeableStream( @@ -125,7 +127,7 @@ export default function handleRequest(
For a more complete example, expand this -This handles errors and properly disables streaming for bots which you typically want to force waiting so you can display all the content for SEO purposes. +This handles errors and properly disables streaming for bots which you typically want to force waiting, so you can display all the content for SEO purposes. ```tsx filename=app/entry.server.tsx import { PassThrough } from "stream"; @@ -144,7 +146,8 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { // If the request is from a bot, we want to wait for the full // response to render before sending it to the client. This @@ -154,7 +157,8 @@ export default function handleRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -162,7 +166,8 @@ export default function handleRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -170,7 +175,8 @@ function serveTheBots( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( @@ -205,7 +211,8 @@ function serveBrowsers( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { let didError = false; diff --git a/docs/guides/styling.md b/docs/guides/styling.md index 0921058b758..e5ac5885834 100644 --- a/docs/guides/styling.md +++ b/docs/guides/styling.md @@ -862,17 +862,21 @@ Here's some sample code to show how you might use Styled Components with Remix ( 2. Your `entry.server.tsx` will look something like this: - ```tsx filename=entry.server.tsx lines=[4,12,15-20,22-23] + ```tsx filename=entry.server.tsx lines=[7,16,19-24,26-27] import { renderToString } from "react-dom/server"; import { RemixServer } from "@remix-run/react"; - import type { EntryContext } from "@remix-run/node"; // or cloudflare/deno + import type { + AppLoadContext, + EntryContext, + } from "@remix-run/node"; // or cloudflare/deno import { ServerStyleSheet } from "styled-components"; export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { const sheet = new ServerStyleSheet(); diff --git a/docs/route/headers.md b/docs/route/headers.md index f70b88b779b..a333183795d 100644 --- a/docs/route/headers.md +++ b/docs/route/headers.md @@ -91,16 +91,20 @@ All that said, you can avoid this entire problem by _not defining headers in par Note that you can also add headers in your `entry.server` file for things that should be global, for example: -```tsx lines=[16] -import { renderToString } from "react-dom/server"; +```tsx lines=[20] +import type { + AppLoadContext, + EntryContext, +} from "@remix-run/node"; // or cloudflare/deno import { RemixServer } from "@remix-run/react"; -import type { EntryContext } from "@remix-run/node"; // or cloudflare/deno +import { renderToString } from "react-dom/server"; export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { const markup = renderToString( diff --git a/integration/defer-test.ts b/integration/defer-test.ts index e705e710e1f..d873b668814 100644 --- a/integration/defer-test.ts +++ b/integration/defer-test.ts @@ -949,7 +949,7 @@ test.describe("aborted", () => { files: { "app/entry.server.tsx": js` import { PassThrough } from "stream"; - import type { EntryContext } from "@remix-run/node"; + import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -961,20 +961,23 @@ test.describe("aborted", () => { request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { return isbot(request.headers.get("user-agent")) ? handleBotRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ) : handleBrowserRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -982,7 +985,8 @@ test.describe("aborted", () => { request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { let didError = false; @@ -1027,7 +1031,8 @@ test.describe("aborted", () => { request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { let didError = false; diff --git a/packages/remix-dev/__tests__/fixtures/indie-stack/app/entry.server.tsx b/packages/remix-dev/__tests__/fixtures/indie-stack/app/entry.server.tsx index 8210793665e..33226900af8 100644 --- a/packages/remix-dev/__tests__/fixtures/indie-stack/app/entry.server.tsx +++ b/packages/remix-dev/__tests__/fixtures/indie-stack/app/entry.server.tsx @@ -1,5 +1,5 @@ import { PassThrough } from "stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import { renderToPipeableStream } from "react-dom/server"; @@ -10,7 +10,8 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { let { pipe, abort } = renderToPipeableStream( diff --git a/packages/remix-dev/__tests__/fixtures/replace-remix-magic-imports/app/entry.server.tsx b/packages/remix-dev/__tests__/fixtures/replace-remix-magic-imports/app/entry.server.tsx index 7d9846a1bd5..971c930f4a2 100644 --- a/packages/remix-dev/__tests__/fixtures/replace-remix-magic-imports/app/entry.server.tsx +++ b/packages/remix-dev/__tests__/fixtures/replace-remix-magic-imports/app/entry.server.tsx @@ -1,5 +1,5 @@ import { PassThrough } from "stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import { renderToPipeableStream } from "react-dom/server"; @@ -10,7 +10,8 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { let { pipe, abort } = renderToPipeableStream( diff --git a/packages/remix-dev/__tests__/fixtures/stack/app/entry.server.tsx b/packages/remix-dev/__tests__/fixtures/stack/app/entry.server.tsx index 068773556ca..f91d39b85ec 100644 --- a/packages/remix-dev/__tests__/fixtures/stack/app/entry.server.tsx +++ b/packages/remix-dev/__tests__/fixtures/stack/app/entry.server.tsx @@ -1,4 +1,4 @@ -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import { renderToString } from "react-dom/server"; @@ -6,7 +6,8 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { // eslint-disable-next-line testing-library/render-result-naming-convention let markup = renderToString( diff --git a/packages/remix-dev/config/defaults/cloudflare/entry.server.react-stream.tsx b/packages/remix-dev/config/defaults/cloudflare/entry.server.react-stream.tsx index 3e08f46fe53..28e2b69ed15 100644 --- a/packages/remix-dev/config/defaults/cloudflare/entry.server.react-stream.tsx +++ b/packages/remix-dev/config/defaults/cloudflare/entry.server.react-stream.tsx @@ -1,4 +1,4 @@ -import type { EntryContext } from "@remix-run/cloudflare"; +import type { AppLoadContext, EntryContext } from "@remix-run/cloudflare"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; import { renderToReadableStream } from "react-dom/server"; @@ -7,7 +7,8 @@ export default async function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { const body = await renderToReadableStream( , diff --git a/packages/remix-dev/config/defaults/cloudflare/entry.server.react-string.tsx b/packages/remix-dev/config/defaults/cloudflare/entry.server.react-string.tsx index 081e0d69a8e..3e5d9349938 100644 --- a/packages/remix-dev/config/defaults/cloudflare/entry.server.react-string.tsx +++ b/packages/remix-dev/config/defaults/cloudflare/entry.server.react-string.tsx @@ -1,4 +1,4 @@ -import type { EntryContext } from "@remix-run/cloudflare"; +import type { AppLoadContext, EntryContext } from "@remix-run/cloudflare"; import { renderToString } from "react-dom/server"; import { RemixServer } from "@remix-run/react"; @@ -6,7 +6,8 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { let markup = renderToString( diff --git a/packages/remix-dev/config/defaults/deno/entry.server.react-stream.tsx b/packages/remix-dev/config/defaults/deno/entry.server.react-stream.tsx index 7be6c748061..ada79f78db6 100644 --- a/packages/remix-dev/config/defaults/deno/entry.server.react-stream.tsx +++ b/packages/remix-dev/config/defaults/deno/entry.server.react-stream.tsx @@ -1,4 +1,4 @@ -import type { EntryContext } from "@remix-run/deno"; +import type { AppLoadContext, EntryContext } from "@remix-run/deno"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; import { renderToReadableStream } from "react-dom/server"; @@ -7,7 +7,8 @@ export default async function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { const body = await renderToReadableStream( , diff --git a/packages/remix-dev/config/defaults/deno/entry.server.react-string.tsx b/packages/remix-dev/config/defaults/deno/entry.server.react-string.tsx index 98b57994bf3..a2657cb4855 100644 --- a/packages/remix-dev/config/defaults/deno/entry.server.react-string.tsx +++ b/packages/remix-dev/config/defaults/deno/entry.server.react-string.tsx @@ -1,4 +1,4 @@ -import type { EntryContext } from "@remix-run/deno"; +import type { AppLoadContext, EntryContext } from "@remix-run/deno"; import { renderToString } from "react-dom/server"; import { RemixServer } from "@remix-run/react"; @@ -6,7 +6,8 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { let markup = renderToString( diff --git a/packages/remix-dev/config/defaults/node/entry.server.react-stream.tsx b/packages/remix-dev/config/defaults/node/entry.server.react-stream.tsx index 469de6d4329..e351df9f40e 100644 --- a/packages/remix-dev/config/defaults/node/entry.server.react-stream.tsx +++ b/packages/remix-dev/config/defaults/node/entry.server.react-stream.tsx @@ -1,5 +1,5 @@ import { PassThrough } from "stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -11,20 +11,23 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { return isbot(request.headers.get("user-agent")) ? handleBotRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ) : handleBrowserRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -32,7 +35,8 @@ function handleBotRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( @@ -74,7 +78,8 @@ function handleBrowserRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( diff --git a/packages/remix-dev/config/defaults/node/entry.server.react-string.tsx b/packages/remix-dev/config/defaults/node/entry.server.react-string.tsx index 30f77ec2f33..e1e149abbab 100644 --- a/packages/remix-dev/config/defaults/node/entry.server.react-string.tsx +++ b/packages/remix-dev/config/defaults/node/entry.server.react-string.tsx @@ -1,4 +1,4 @@ -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { renderToString } from "react-dom/server"; import { RemixServer } from "@remix-run/react"; @@ -6,7 +6,8 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { let markup = renderToString( diff --git a/scripts/playground/template/app/entry.server.tsx b/scripts/playground/template/app/entry.server.tsx index d66647db06a..79223d10e21 100644 --- a/scripts/playground/template/app/entry.server.tsx +++ b/scripts/playground/template/app/entry.server.tsx @@ -1,5 +1,5 @@ import { PassThrough } from "stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -11,7 +11,8 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { let callbackName = isbot(request.headers.get("user-agent")) ? "onAllReady" diff --git a/templates/arc/app/entry.server.tsx b/templates/arc/app/entry.server.tsx index b38c9927025..ff7fd12bad2 100644 --- a/templates/arc/app/entry.server.tsx +++ b/templates/arc/app/entry.server.tsx @@ -5,7 +5,7 @@ */ import { PassThrough } from "node:stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -17,20 +17,23 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { return isbot(request.headers.get("user-agent")) ? handleBotRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ) : handleBrowserRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -38,7 +41,8 @@ function handleBotRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( @@ -80,7 +84,8 @@ function handleBrowserRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( diff --git a/templates/cloudflare-pages/app/entry.server.tsx b/templates/cloudflare-pages/app/entry.server.tsx index 361b4560500..1642562d25a 100644 --- a/templates/cloudflare-pages/app/entry.server.tsx +++ b/templates/cloudflare-pages/app/entry.server.tsx @@ -4,7 +4,7 @@ * For more information, see https://remix.run/docs/en/main/file-conventions/entry.server */ -import type { EntryContext } from "@remix-run/cloudflare"; +import type { AppLoadContext, EntryContext } from "@remix-run/cloudflare"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; import { renderToReadableStream } from "react-dom/server"; @@ -13,7 +13,8 @@ export default async function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { const body = await renderToReadableStream( , diff --git a/templates/cloudflare-workers/app/entry.server.tsx b/templates/cloudflare-workers/app/entry.server.tsx index 361b4560500..1642562d25a 100644 --- a/templates/cloudflare-workers/app/entry.server.tsx +++ b/templates/cloudflare-workers/app/entry.server.tsx @@ -4,7 +4,7 @@ * For more information, see https://remix.run/docs/en/main/file-conventions/entry.server */ -import type { EntryContext } from "@remix-run/cloudflare"; +import type { AppLoadContext, EntryContext } from "@remix-run/cloudflare"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; import { renderToReadableStream } from "react-dom/server"; @@ -13,7 +13,8 @@ export default async function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { const body = await renderToReadableStream( , diff --git a/templates/deno/app/entry.server.tsx b/templates/deno/app/entry.server.tsx index 69103177f42..c9c534b2378 100644 --- a/templates/deno/app/entry.server.tsx +++ b/templates/deno/app/entry.server.tsx @@ -4,7 +4,7 @@ * For more information, see https://remix.run/docs/en/main/file-conventions/entry.server */ -import type { EntryContext } from "@remix-run/deno"; +import type { AppLoadContext, EntryContext } from "@remix-run/deno"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; import { renderToReadableStream } from "react-dom/server"; @@ -14,6 +14,7 @@ export default async function handleRequest( responseStatusCode: number, responseHeaders: Headers, remixContext: EntryContext, + _loadContext: AppLoadContext ) { const body = await renderToReadableStream( , @@ -23,7 +24,7 @@ export default async function handleRequest( console.error(error); responseStatusCode = 500; }, - }, + } ); if (isbot(request.headers.get("user-agent"))) { diff --git a/templates/express/app/entry.server.tsx b/templates/express/app/entry.server.tsx index b38c9927025..ff7fd12bad2 100644 --- a/templates/express/app/entry.server.tsx +++ b/templates/express/app/entry.server.tsx @@ -5,7 +5,7 @@ */ import { PassThrough } from "node:stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -17,20 +17,23 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { return isbot(request.headers.get("user-agent")) ? handleBotRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ) : handleBrowserRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -38,7 +41,8 @@ function handleBotRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( @@ -80,7 +84,8 @@ function handleBrowserRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( diff --git a/templates/fly/app/entry.server.tsx b/templates/fly/app/entry.server.tsx index b38c9927025..ff7fd12bad2 100644 --- a/templates/fly/app/entry.server.tsx +++ b/templates/fly/app/entry.server.tsx @@ -5,7 +5,7 @@ */ import { PassThrough } from "node:stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -17,20 +17,23 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { return isbot(request.headers.get("user-agent")) ? handleBotRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ) : handleBrowserRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -38,7 +41,8 @@ function handleBotRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( @@ -80,7 +84,8 @@ function handleBrowserRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( diff --git a/templates/netlify/app/entry.server.tsx b/templates/netlify/app/entry.server.tsx index b38c9927025..ff7fd12bad2 100644 --- a/templates/netlify/app/entry.server.tsx +++ b/templates/netlify/app/entry.server.tsx @@ -5,7 +5,7 @@ */ import { PassThrough } from "node:stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -17,20 +17,23 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { return isbot(request.headers.get("user-agent")) ? handleBotRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ) : handleBrowserRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -38,7 +41,8 @@ function handleBotRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( @@ -80,7 +84,8 @@ function handleBrowserRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( diff --git a/templates/remix/app/entry.server.tsx b/templates/remix/app/entry.server.tsx index b38c9927025..ff7fd12bad2 100644 --- a/templates/remix/app/entry.server.tsx +++ b/templates/remix/app/entry.server.tsx @@ -5,7 +5,7 @@ */ import { PassThrough } from "node:stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -17,20 +17,23 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { return isbot(request.headers.get("user-agent")) ? handleBotRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ) : handleBrowserRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -38,7 +41,8 @@ function handleBotRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( @@ -80,7 +84,8 @@ function handleBrowserRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( diff --git a/templates/vercel/app/entry.server.tsx b/templates/vercel/app/entry.server.tsx index b38c9927025..ff7fd12bad2 100644 --- a/templates/vercel/app/entry.server.tsx +++ b/templates/vercel/app/entry.server.tsx @@ -5,7 +5,7 @@ */ import { PassThrough } from "node:stream"; -import type { EntryContext } from "@remix-run/node"; +import type { AppLoadContext, EntryContext } from "@remix-run/node"; import { Response } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; import isbot from "isbot"; @@ -17,20 +17,23 @@ export default function handleRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + loadContext: AppLoadContext ) { return isbot(request.headers.get("user-agent")) ? handleBotRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ) : handleBrowserRequest( request, responseStatusCode, responseHeaders, - remixContext + remixContext, + loadContext ); } @@ -38,7 +41,8 @@ function handleBotRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream( @@ -80,7 +84,8 @@ function handleBrowserRequest( request: Request, responseStatusCode: number, responseHeaders: Headers, - remixContext: EntryContext + remixContext: EntryContext, + _loadContext: AppLoadContext ) { return new Promise((resolve, reject) => { const { pipe, abort } = renderToPipeableStream(