Skip to content

Commit 0720451

Browse files
committed
Node.js streams: Add forkpoint for continueDynamicHTMLResumeNode
1 parent 064e87d commit 0720451

4 files changed

Lines changed: 62 additions & 8 deletions

File tree

packages/next/src/server/app-render/app-render.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ import {
4242
continueFizzStream,
4343
continueDynamicPrerender,
4444
continueStaticPrerender,
45-
continueDynamicHTMLResume,
45+
continueDynamicHTMLResumeNode,
46+
continueDynamicHTMLResumeWeb,
4647
continueStaticFallbackPrerender,
4748
streamToBuffer,
4849
streamToString,
@@ -3776,7 +3777,7 @@ async function renderToStream(
37763777
// We have a complete HTML Document in the prerender but we need to
37773778
// still include the new server component render because it was not included
37783779
// in the static prelude.
3779-
const inlinedDataStream = createWebInlinedDataStream(
3780+
const inlinedDataStream = createNodeInlinedDataStream(
37803781
reactServerResult.tee(),
37813782
nonce,
37823783
formState
@@ -3827,10 +3828,10 @@ async function renderToStream(
38273828
if (renderSpan.isRecording()) renderSpan.end()
38283829
})
38293830

3830-
return await continueDynamicHTMLResume(htmlStream, {
3831+
return await continueDynamicHTMLResumeNode(htmlStream, {
38313832
delayDataUntilFirstHtmlChunk:
38323833
preludeState === DynamicHTMLPreludeState.Empty,
3833-
inlinedDataStream: createWebInlinedDataStream(
3834+
inlinedDataStream: createNodeInlinedDataStream(
38343835
reactServerResult.consume(),
38353836
nonce,
38363837
formState
@@ -3966,7 +3967,7 @@ async function renderToStream(
39663967
if (renderSpan.isRecording()) renderSpan.end()
39673968
})
39683969

3969-
return await continueDynamicHTMLResume(htmlStream, {
3970+
return await continueDynamicHTMLResumeWeb(htmlStream, {
39703971
delayDataUntilFirstHtmlChunk:
39713972
preludeState === DynamicHTMLPreludeState.Empty,
39723973
inlinedDataStream: createWebInlinedDataStream(

packages/next/src/server/app-render/stream-ops.node.ts

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,52 @@ export async function continueStaticFallbackPrerender(
812812
return webToReadable(webResult)
813813
}
814814

815-
export async function continueDynamicHTMLResume(
815+
export async function continueDynamicHTMLResumeNode(
816+
renderStream: AnyStream,
817+
{
818+
delayDataUntilFirstHtmlChunk,
819+
inlinedDataStream,
820+
getServerInsertedHTML,
821+
getServerInsertedMetadata,
822+
deploymentId,
823+
}: import('./stream-ops.web').ContinueDynamicHTMLResumeOptions
824+
): Promise<AnyStream> {
825+
await waitAtLeastOneReactRenderTask()
826+
827+
const buffered = createBufferedTransformStream()
828+
webToReadable(renderStream).pipe(buffered)
829+
830+
let source: Readable = buffered
831+
832+
if (deploymentId) {
833+
const dplId = createHtmlDataDplIdTransform(deploymentId)
834+
source.pipe(dplId)
835+
source = dplId
836+
}
837+
838+
const headInsertion = createHeadInsertionTransform(getServerInsertedHTML)
839+
source.pipe(headInsertion)
840+
source = headInsertion
841+
842+
const metadata = createMetadataTransform(getServerInsertedMetadata)
843+
source.pipe(metadata)
844+
source = metadata
845+
846+
const flightInjection = createFlightDataInjectionTransform(
847+
webToReadable(inlinedDataStream),
848+
delayDataUntilFirstHtmlChunk
849+
)
850+
source.pipe(flightInjection)
851+
source = flightInjection
852+
853+
const moveSuffix = createMoveSuffixTransform()
854+
source.pipe(moveSuffix)
855+
source = moveSuffix
856+
857+
return source
858+
}
859+
860+
export async function continueDynamicHTMLResumeWeb(
816861
renderStream: AnyStream,
817862
opts: import('./stream-ops.web').ContinueDynamicHTMLResumeOptions
818863
): Promise<AnyStream> {

packages/next/src/server/app-render/stream-ops.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ export const continueStaticPrerender = _m.continueStaticPrerender
3535
export const continueDynamicPrerender = _m.continueDynamicPrerender
3636
export const continueStaticFallbackPrerender =
3737
_m.continueStaticFallbackPrerender
38-
export const continueDynamicHTMLResume = _m.continueDynamicHTMLResume
38+
export const continueDynamicHTMLResumeNode = _m.continueDynamicHTMLResumeNode
39+
export const continueDynamicHTMLResumeWeb = _m.continueDynamicHTMLResumeWeb
3940
export const streamToBuffer = _m.streamToBuffer
4041
export const chainStreams = _m.chainStreams
4142
export const createDocumentClosingStream = _m.createDocumentClosingStream

packages/next/src/server/app-render/stream-ops.web.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ export async function continueStaticFallbackPrerender(
141141
)
142142
}
143143

144-
export async function continueDynamicHTMLResume(
144+
export async function continueDynamicHTMLResumeWeb(
145145
renderStream: AnyStream,
146146
opts: ContinueDynamicHTMLResumeOptions
147147
): Promise<AnyStream> {
@@ -154,6 +154,13 @@ export async function continueDynamicHTMLResume(
154154
)
155155
}
156156

157+
export function continueDynamicHTMLResumeNode(
158+
_renderStream: AnyStream,
159+
_opts: ContinueDynamicHTMLResumeOptions
160+
): Promise<AnyStream> {
161+
throw new Error('not implemented')
162+
}
163+
157164
export async function streamToBuffer(stream: AnyStream): Promise<Buffer> {
158165
return webStreamToBuffer(stream as ReadableStream<Uint8Array>)
159166
}

0 commit comments

Comments
 (0)