From bee4edeabb99f3afd703a79b5ccfa4c478e50c18 Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Wed, 6 Apr 2022 17:45:06 +0200 Subject: [PATCH] Code refactoring (#35937) Clean up some code in the renderer and make it more readable. ## Bug - [ ] Related issues linked using `fixes #number` - [ ] 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` --- .../next/server/node-web-streams-helper.ts | 30 +++++-------------- packages/next/server/render.tsx | 8 ++--- 2 files changed, 10 insertions(+), 28 deletions(-) diff --git a/packages/next/server/node-web-streams-helper.ts b/packages/next/server/node-web-streams-helper.ts index 04de9e57295dd6e..9bd2f6a72fa3142 100644 --- a/packages/next/server/node-web-streams-helper.ts +++ b/packages/next/server/node-web-streams-helper.ts @@ -305,28 +305,14 @@ export async function renderToStream({ generateStaticHTML: boolean flushEffectHandler?: () => Promise }): Promise> { - const closeTag = '' - const suffixUnclosed = suffix ? suffix.split(closeTag)[0] : null - const renderStream: ReadableStream & { - allReady?: Promise - } = await (ReactDOMServer as any).renderToReadableStream(element) - - if (generateStaticHTML) { - await renderStream.allReady - } - - const transforms: Array> = [ - createBufferedTransformStream(), - flushEffectHandler ? createFlushEffectStream(flushEffectHandler) : null, - suffixUnclosed != null ? createPrefixStream(suffixUnclosed) : null, - dataStream ? createInlineDataStream(dataStream) : null, - suffixUnclosed != null ? createSuffixStream(closeTag) : null, - ].filter(Boolean) as any - - return transforms.reduce( - (readable, transform) => pipeThrough(readable, transform), - renderStream - ) + const renderStream = await renderToInitialStream({ ReactDOMServer, element }) + return continueFromInitialStream({ + suffix, + dataStream, + generateStaticHTML, + flushEffectHandler, + renderStream, + }) } export function createSuffixStream( diff --git a/packages/next/server/render.tsx b/packages/next/server/render.tsx index 10140189b685612..337b07ed618589a 100644 --- a/packages/next/server/render.tsx +++ b/packages/next/server/render.tsx @@ -1424,19 +1424,15 @@ export async function renderToHTML( } } } else { - let bodyResult - - let renderStream: any - // We start rendering the shell earlier, before returning the head tags // to `documentResult`. const content = renderContent() - renderStream = await renderToInitialStream({ + const renderStream = await renderToInitialStream({ ReactDOMServer, element: content, }) - bodyResult = async (suffix: string) => { + const bodyResult = async (suffix: string) => { // this must be called inside bodyResult so appWrappers is // up to date when getWrappedApp is called