From 90d3478c52d020aaa763dd9777a928f004139f82 Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Tue, 19 Apr 2022 19:20:20 +0200 Subject: [PATCH] Use renderToStaticMarkup to render documentHTML (#36213) There wasn't a strong reason to choose `renderToStream` over `renderToStaticMarkup` for the document wrapper. But due to problems like #35870, we can switch back to the static renderer for now. Fixes #35870. ## Bug - [x] Related issues linked using `fixes #number` - [x] Integration tests added - [ ] Errors have helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `yarn lint` Co-authored-by: JJ Kasper <22380829+ijjk@users.noreply.github.com> --- packages/next/server/node-web-streams-helper.ts | 4 +++- packages/next/server/render.tsx | 13 +------------ .../app/pages/index.server.js | 1 + .../test/basic.js | 5 +++++ 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/packages/next/server/node-web-streams-helper.ts b/packages/next/server/node-web-streams-helper.ts index 9512d9cbffa658c..692c80f0b9e6e27 100644 --- a/packages/next/server/node-web-streams-helper.ts +++ b/packages/next/server/node-web-streams-helper.ts @@ -1,3 +1,5 @@ +import { nonNullable } from '../lib/non-nullable' + export function readableStreamTee( readable: ReadableStream ): [ReadableStream, ReadableStream] { @@ -172,7 +174,7 @@ export async function continueFromInitialStream({ suffixUnclosed != null ? createPrefixStream(suffixUnclosed) : null, dataStream ? createInlineDataStream(dataStream) : null, suffixUnclosed != null ? createSuffixStream(closeTag) : null, - ].filter(Boolean) as any + ].filter(nonNullable) return transforms.reduce( (readable, transform) => readable.pipeThrough(transform), diff --git a/packages/next/server/render.tsx b/packages/next/server/render.tsx index 221adf792a47b7e..6f9191547645c00 100644 --- a/packages/next/server/render.tsx +++ b/packages/next/server/render.tsx @@ -72,7 +72,6 @@ import { streamToString, chainStreams, createBufferedTransformStream, - renderToStream, renderToInitialStream, continueFromInitialStream, } from './node-web-streams-helper' @@ -1628,17 +1627,7 @@ export async function renderToHTML( ) - let documentHTML: string - if (hasConcurrentFeatures) { - const documentStream = await renderToStream({ - ReactDOMServer, - element: document, - generateStaticHTML: true, - }) - documentHTML = await streamToString(documentStream) - } else { - documentHTML = ReactDOMServer.renderToStaticMarkup(document) - } + const documentHTML = ReactDOMServer.renderToStaticMarkup(document) if (process.env.NODE_ENV !== 'production') { const nonRenderedComponents = [] diff --git a/test/integration/react-streaming-and-server-components/app/pages/index.server.js b/test/integration/react-streaming-and-server-components/app/pages/index.server.js index 89723996bfd083f..d7eb0906e41d0c0 100644 --- a/test/integration/react-streaming-and-server-components/app/pages/index.server.js +++ b/test/integration/react-streaming-and-server-components/app/pages/index.server.js @@ -10,6 +10,7 @@ export default function Index({ header }) {
+ hello, {envVar}

{`component:index.server`}

{'env:' + envVar}
diff --git a/test/integration/react-streaming-and-server-components/test/basic.js b/test/integration/react-streaming-and-server-components/test/basic.js index 43c18775269fe6e..852a870ea0c06c2 100644 --- a/test/integration/react-streaming-and-server-components/test/basic.js +++ b/test/integration/react-streaming-and-server-components/test/basic.js @@ -10,6 +10,11 @@ export default async function basic(context, { env }) { expect(pathNotFoundHTML).toContain('custom-404-page') }) + it('should render title correctly', async () => { + const res = await renderViaHTTP(context.appPort, '/') + expect(res).toContain('hello, env_var_test') + }) + it('should support api routes', async () => { const res = await renderViaHTTP(context.appPort, '/api/ping') expect(res).toContain('pong')