From db95bc15087965925564628fad1410296d872bcd Mon Sep 17 00:00:00 2001 From: Mark Dalgleish Date: Thu, 6 Jun 2024 13:30:04 +1000 Subject: [PATCH] Remove unused default server entries --- packages/remix-dev/cli/commands.ts | 29 +--------- packages/remix-dev/config.ts | 54 ++---------------- .../defaults/entry.server.cloudflare.tsx | 55 ------------------- .../config/defaults/entry.server.deno.tsx | 55 ------------------- 4 files changed, 7 insertions(+), 186 deletions(-) delete mode 100644 packages/remix-dev/config/defaults/entry.server.cloudflare.tsx delete mode 100644 packages/remix-dev/config/defaults/entry.server.deno.tsx diff --git a/packages/remix-dev/cli/commands.ts b/packages/remix-dev/cli/commands.ts index 10ad58751e..a378794e37 100644 --- a/packages/remix-dev/cli/commands.ts +++ b/packages/remix-dev/cli/commands.ts @@ -75,11 +75,6 @@ let conjunctionListFormat = new Intl.ListFormat("en", { type: "conjunction", }); -let disjunctionListFormat = new Intl.ListFormat("en", { - style: "long", - type: "disjunction", -}); - export async function generateEntry( entry: string, reactRouterRoot: string, @@ -116,26 +111,8 @@ export async function generateEntry( let pkgJson = await PackageJson.load(rootDirectory); let deps = pkgJson.content.dependencies ?? {}; - let serverRuntime = deps["@react-router/deno"] - ? "deno" - : deps["@react-router/cloudflare"] - ? "cloudflare" - : deps["@react-router/node"] - ? "node" - : undefined; - - if (!serverRuntime) { - let serverRuntimes = [ - "@react-router/deno", - "@react-router/cloudflare", - "@react-router/node", - ]; - let formattedList = disjunctionListFormat.format(serverRuntimes); - console.error( - colors.error( - `Could not determine server runtime. Please install one of the following: ${formattedList}` - ) - ); + if (!deps["@react-router/node"]) { + console.error(colors.error(`No default server entry detected.`)); return; } @@ -146,7 +123,7 @@ export async function generateEntry( defaultsDirectory, ctx?.reactRouterConfig.ssr === false ? `entry.server.spa.tsx` - : `entry.server.${serverRuntime}.tsx` + : `entry.server.node.tsx` ); let isServerEntry = entry === "entry.server"; diff --git a/packages/remix-dev/config.ts b/packages/remix-dev/config.ts index 2a3ddd7a91..ac7304874b 100644 --- a/packages/remix-dev/config.ts +++ b/packages/remix-dev/config.ts @@ -474,7 +474,7 @@ export async function resolveEntryFiles({ rootDirectory: string; reactRouterConfig: ResolvedVitePluginConfig; }) { - let { appDirectory, future } = reactRouterConfig; + let { appDirectory } = reactRouterConfig; let defaultsDirectory = path.resolve(__dirname, "config", "defaults"); @@ -500,23 +500,9 @@ export async function resolveEntryFiles({ } else if (userEntryServerFile) { entryServerFile = userEntryServerFile; } else { - let serverRuntime = deps["@react-router/deno"] - ? "deno" - : deps["@react-router/cloudflare"] - ? "cloudflare" - : deps["@react-router/node"] - ? "node" - : undefined; - - if (!serverRuntime) { - let serverRuntimes = [ - "@react-router/deno", - "@react-router/cloudflare", - "@react-router/node", - ]; - let formattedList = disjunctionListFormat.format(serverRuntimes); + if (!deps["@react-router/node"]) { throw new Error( - `Could not determine server runtime. Please install one of the following: ${formattedList}` + `Could not determine server runtime. Please install @react-router/node, or provide a custom entry.server.tsx/jsx file in your app directory.` ); } @@ -542,7 +528,7 @@ export async function resolveEntryFiles({ }); } - entryServerFile = `entry.server.${serverRuntime}.tsx`; + entryServerFile = `entry.server.node.tsx`; } let entryClientFilePath = userEntryClientFile @@ -566,35 +552,3 @@ function findEntry(dir: string, basename: string): string | undefined { return undefined; } - -// adds types for `Intl.ListFormat` to the global namespace -// we could also update our `tsconfig.json` to include `lib: ["es2021"]` -declare namespace Intl { - type ListType = "conjunction" | "disjunction"; - - interface ListFormatOptions { - localeMatcher?: "lookup" | "best fit"; - type?: ListType; - style?: "long" | "short" | "narrow"; - } - - interface ListFormatPart { - type: "element" | "literal"; - value: string; - } - - class ListFormat { - constructor(locales?: string | string[], options?: ListFormatOptions); - format(values: any[]): string; - formatToParts(values: any[]): ListFormatPart[]; - supportedLocalesOf( - locales: string | string[], - options?: ListFormatOptions - ): string[]; - } -} - -let disjunctionListFormat = new Intl.ListFormat("en", { - style: "long", - type: "disjunction", -}); diff --git a/packages/remix-dev/config/defaults/entry.server.cloudflare.tsx b/packages/remix-dev/config/defaults/entry.server.cloudflare.tsx deleted file mode 100644 index 5cdfc9958b..0000000000 --- a/packages/remix-dev/config/defaults/entry.server.cloudflare.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import type { AppLoadContext, EntryContext } from "@react-router/cloudflare"; -import { RemixServer } from "react-router"; -import * as isbotModule from "isbot"; -import { renderToReadableStream } from "react-dom/server"; - -export default async function handleRequest( - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - remixContext: EntryContext, - loadContext: AppLoadContext -) { - const body = await renderToReadableStream( - , - { - signal: request.signal, - onError(error: unknown) { - // Log streaming rendering errors from inside the shell - console.error(error); - responseStatusCode = 500; - }, - } - ); - - if (isBotRequest(request.headers.get("user-agent"))) { - await body.allReady; - } - - responseHeaders.set("Content-Type", "text/html"); - return new Response(body, { - headers: responseHeaders, - status: responseStatusCode, - }); -} - -// 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; -} diff --git a/packages/remix-dev/config/defaults/entry.server.deno.tsx b/packages/remix-dev/config/defaults/entry.server.deno.tsx deleted file mode 100644 index d7150b867f..0000000000 --- a/packages/remix-dev/config/defaults/entry.server.deno.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import type { AppLoadContext, EntryContext } from "@react-router/deno"; -import { RemixServer } from "@remix-run/react"; -import * as isbotModule from "isbot"; -import { renderToReadableStream } from "react-dom/server"; - -export default async function handleRequest( - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - remixContext: EntryContext, - loadContext: AppLoadContext -) { - const body = await renderToReadableStream( - , - { - signal: request.signal, - onError(error: unknown) { - // Log streaming rendering errors from inside the shell - console.error(error); - responseStatusCode = 500; - }, - } - ); - - if (isBotRequest(request.headers.get("user-agent"))) { - await body.allReady; - } - - responseHeaders.set("Content-Type", "text/html"); - return new Response(body, { - headers: responseHeaders, - status: responseStatusCode, - }); -} - -// 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; -}