From cdf0ac6aa9116612ffc4cab7aeb09746234484e7 Mon Sep 17 00:00:00 2001 From: Nick Taylor Date: Tue, 21 Feb 2023 17:07:28 -0500 Subject: [PATCH] chore: updated demo site to renderReadableStream --- package-lock.json | 16 +++++++- package.json | 3 +- packages/edge-demo-site/app/entry.client.tsx | 42 +++++++++++--------- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77b750eaf..785a31754 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,8 @@ "dependencies": { "@netlify/edge-functions": "^2.0.0", "husky": "^8.0.3", - "if-env": "^1.0.4" + "if-env": "^1.0.4", + "isbot": "^3.6.6" }, "devDependencies": { "@netlify/eslint-config-node": "^7.0.1", @@ -10226,6 +10227,14 @@ "dev": true, "license": "MIT" }, + "node_modules/isbot": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-3.6.6.tgz", + "integrity": "sha512-98aGl1Spbx1led422YFrusDJ4ZutSNOymb2avZ2V4BCCjF3MqAF2k+J2zoaLYahubaFkb+3UyvbVDVlk/Ngrew==", + "engines": { + "node": ">=12" + } + }, "node_modules/isexe": { "version": "2.0.0", "license": "ISC" @@ -23204,6 +23213,11 @@ "version": "2.0.5", "dev": true }, + "isbot": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-3.6.6.tgz", + "integrity": "sha512-98aGl1Spbx1led422YFrusDJ4ZutSNOymb2avZ2V4BCCjF3MqAF2k+J2zoaLYahubaFkb+3UyvbVDVlk/Ngrew==" + }, "isexe": { "version": "2.0.0" }, diff --git a/package.json b/package.json index bbd6962b8..1d12f2290 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,8 @@ "dependencies": { "@netlify/edge-functions": "^2.0.0", "husky": "^8.0.3", - "if-env": "^1.0.4" + "if-env": "^1.0.4", + "isbot": "^3.6.6" }, "engines": { "node": ">=14" diff --git a/packages/edge-demo-site/app/entry.client.tsx b/packages/edge-demo-site/app/entry.client.tsx index 65258e665..6c76169d3 100644 --- a/packages/edge-demo-site/app/entry.client.tsx +++ b/packages/edge-demo-site/app/entry.client.tsx @@ -1,22 +1,28 @@ -import { RemixBrowser } from '@remix-run/react' -import { startTransition, StrictMode } from 'react' -import { hydrateRoot } from 'react-dom/client' +import type { EntryContext } from '@remix-run/server-runtime' +import { RemixServer } from '@remix-run/react' +import { renderToReadableStream } from 'react-dom/server' +import isbot from 'isbot' -function hydrate() { - startTransition(() => { - hydrateRoot( - document, - - - , - ) +export default async function handleRequest( + request: Request, + responseStatusCode: number, + responseHeaders: Headers, + remixContext: EntryContext, +) { + const body = await renderToReadableStream(, { + onError() { + responseStatusCode = 500 + }, }) -} -if (typeof requestIdleCallback === 'function') { - requestIdleCallback(hydrate) -} else { - // Safari doesn't support requestIdleCallback - // https://caniuse.com/requestidlecallback - setTimeout(hydrate, 1) + if (isbot(request.headers.get('user-agent'))) { + await body.allReady + } + + responseHeaders.set('Content-Type', 'text/html') + + return new Response(body, { + status: responseStatusCode, + headers: responseHeaders, + }) }