Skip to content

Commit 39b0031

Browse files
committed
Leverage temporary references on the server
1 parent 7ca79a5 commit 39b0031

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

packages/next/src/server/app-render/action-handler.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ export async function handleAction({
379379
requestStore,
380380
serverActions,
381381
ctx,
382+
temporaryReferences,
382383
}: {
383384
req: BaseNextRequest
384385
res: BaseNextResponse
@@ -389,6 +390,7 @@ export async function handleAction({
389390
requestStore: RequestStore
390391
serverActions?: ServerActionsConfig
391392
ctx: AppRenderContext
393+
temporaryReferences: unknown
392394
}): Promise<
393395
| undefined
394396
| {
@@ -578,7 +580,9 @@ export async function handleAction({
578580
// TODO-APP: Add streaming support
579581
const formData = await req.request.formData()
580582
if (isFetchAction) {
581-
bound = await decodeReply(formData, serverModuleMap)
583+
bound = await decodeReply(formData, serverModuleMap, {
584+
temporaryReferences: temporaryReferences,
585+
})
582586
} else {
583587
const action = await decodeAction(formData, serverModuleMap)
584588
if (typeof action === 'function') {
@@ -617,9 +621,13 @@ export async function handleAction({
617621

618622
if (isURLEncodedAction) {
619623
const formData = formDataFromSearchQueryString(actionData)
620-
bound = await decodeReply(formData, serverModuleMap)
624+
bound = await decodeReply(formData, serverModuleMap, {
625+
temporaryReferences: temporaryReferences,
626+
})
621627
} else {
622-
bound = await decodeReply(actionData, serverModuleMap)
628+
bound = await decodeReply(actionData, serverModuleMap, {
629+
temporaryReferences: temporaryReferences,
630+
})
623631
}
624632
}
625633
} else if (
@@ -681,7 +689,9 @@ export async function handleAction({
681689

682690
body.pipe(busboy)
683691

684-
bound = await decodeReplyFromBusboy(busboy, serverModuleMap)
692+
bound = await decodeReplyFromBusboy(busboy, serverModuleMap, {
693+
temporaryReferences: temporaryReferences,
694+
})
685695
} else {
686696
// React doesn't yet publish a busboy version of decodeAction
687697
// so we polyfill the parsing of FormData.
@@ -737,9 +747,13 @@ export async function handleAction({
737747

738748
if (isURLEncodedAction) {
739749
const formData = formDataFromSearchQueryString(actionData)
740-
bound = await decodeReply(formData, serverModuleMap)
750+
bound = await decodeReply(formData, serverModuleMap, {
751+
temporaryReferences: temporaryReferences,
752+
})
741753
} else {
742-
bound = await decodeReply(actionData, serverModuleMap)
754+
bound = await decodeReply(actionData, serverModuleMap, {
755+
temporaryReferences: temporaryReferences,
756+
})
743757
}
744758
}
745759
} else {

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,8 @@ async function renderToHTMLOrFlightImpl(
906906

907907
getTracer().getRootSpanAttributes()?.set('next.route', pagePath)
908908

909+
const temporaryReferences = ComponentMod.createTemporaryReferenceSet()
910+
909911
const renderToStream = getTracer().wrap(
910912
AppRenderSpan.getBodyResult,
911913
{
@@ -959,6 +961,7 @@ async function renderToHTMLOrFlightImpl(
959961
{
960962
onError: serverComponentsErrorHandler,
961963
nonce,
964+
temporaryReferences: temporaryReferences,
962965
}
963966
)
964967

@@ -1291,6 +1294,7 @@ async function renderToHTMLOrFlightImpl(
12911294
{
12921295
onError: serverComponentsErrorHandler,
12931296
nonce,
1297+
temporaryReferences: temporaryReferences,
12941298
}
12951299
)
12961300

@@ -1364,6 +1368,7 @@ async function renderToHTMLOrFlightImpl(
13641368
requestStore,
13651369
serverActions,
13661370
ctx,
1371+
temporaryReferences,
13671372
})
13681373

13691374
let formState: null | any = null

packages/next/src/server/app-render/entry-base.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export {
44
decodeReply,
55
decodeAction,
66
decodeFormState,
7+
createTemporaryReferenceSet,
78
} from 'react-server-dom-webpack/server.edge'
89

910
import AppRouter from '../../client/components/app-router'

0 commit comments

Comments
 (0)