From 1d4362d11e1d3fa55a8d804b48e99fc4a67ea45c Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Fri, 17 Dec 2021 12:38:35 +0100 Subject: [PATCH 1/2] workaround pipeTo --- .../next-middleware-ssr-loader/render.ts | 4 ++ packages/next/server/render.tsx | 38 +++++++++++-------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/packages/next/build/webpack/loaders/next-middleware-ssr-loader/render.ts b/packages/next/build/webpack/loaders/next-middleware-ssr-loader/render.ts index cf35f0439ca9d45..53b2a3e930c901b 100644 --- a/packages/next/build/webpack/loaders/next-middleware-ssr-loader/render.ts +++ b/packages/next/build/webpack/loaders/next-middleware-ssr-loader/render.ts @@ -101,6 +101,10 @@ export function getRender({ renderOpts ) } catch (err: any) { + console.error( + 'An error occurred while rendering the initial result:', + err + ) const errorRes = { statusCode: 500, err } try { result = await renderToHTML( diff --git a/packages/next/server/render.tsx b/packages/next/server/render.tsx index dd53c1d13c9d290..0f51be0f891fd49 100644 --- a/packages/next/server/render.tsx +++ b/packages/next/server/render.tsx @@ -298,28 +298,34 @@ function createRSCHook() { entry = createFromReadableStream(renderStream) rscCache.set(id, entry) - const transfomer = new TransformStream({ - start(controller) { - if (bootstrap) { - controller.enqueue( + let bootstrapped = false + const forwardReader = forwardStream.getReader() + const writer = writable.getWriter() + function process() { + forwardReader.read().then(({ done, value }) => { + if (bootstrap && !bootstrapped) { + writer.write( `` ) } - }, - transform(chunk, controller) { - controller.enqueue( - `` - ) - }, - }) - forwardStream.pipeThrough(transfomer).pipeTo(writable) + if (done) { + writer.close() + } else { + writer.write( + `` + ) + process() + } + }) + } + process() } return entry } From 0137e131f88c1bfe3619a8b54f184f900cf86fc1 Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Fri, 17 Dec 2021 12:58:27 +0100 Subject: [PATCH 2/2] fix missing condition --- packages/next/server/render.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/next/server/render.tsx b/packages/next/server/render.tsx index 0f51be0f891fd49..f6ec26ca0aa1368 100644 --- a/packages/next/server/render.tsx +++ b/packages/next/server/render.tsx @@ -304,6 +304,7 @@ function createRSCHook() { function process() { forwardReader.read().then(({ done, value }) => { if (bootstrap && !bootstrapped) { + bootstrapped = true writer.write( `