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..f6ec26ca0aa1368 100644
--- a/packages/next/server/render.tsx
+++ b/packages/next/server/render.tsx
@@ -298,28 +298,35 @@ 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) {
+ bootstrapped = true
+ writer.write(
``
)
}
- },
- transform(chunk, controller) {
- controller.enqueue(
- ``
- )
- },
- })
- forwardStream.pipeThrough(transfomer).pipeTo(writable)
+ if (done) {
+ writer.close()
+ } else {
+ writer.write(
+ ``
+ )
+ process()
+ }
+ })
+ }
+ process()
}
return entry
}