Skip to content

Commit 2fca6bc

Browse files
committed
[Incomplete] Hook up temporary references
1 parent 6a5db87 commit 2fca6bc

File tree

7 files changed

+34
-10
lines changed

7 files changed

+34
-10
lines changed

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,9 @@ export async function handleAction({
398398
type: 'done'
399399
result: RenderResult | undefined
400400
formState?: any
401-
temporaryReferences: unknown
401+
temporaryReferences:
402+
| import('react-dom/server.edge').TemporaryReferencesSet
403+
| undefined
402404
}
403405
> {
404406
const contentType = req.headers['content-type']
@@ -561,6 +563,9 @@ export async function handleAction({
561563
}
562564
}
563565

566+
let temporaryReferences:
567+
| import('react-dom/server.edge').TemporaryReferencesSet
568+
| undefined
564569
try {
565570
await actionAsyncStorage.run({ isAction: true }, async () => {
566571
if (
@@ -579,7 +584,7 @@ export async function handleAction({
579584
if (!req.body) {
580585
throw new Error('invariant: Missing request body.')
581586
}
582-
const temporaryReferences = createTemporaryReferenceSet()
587+
temporaryReferences = createTemporaryReferenceSet()
583588

584589
// TODO: add body limit
585590

@@ -651,7 +656,7 @@ export async function handleAction({
651656
decodeAction,
652657
decodeFormState,
653658
} = require(`./react-server.node`)
654-
const temporaryReferences = createTemporaryReferenceSet()
659+
temporaryReferences = createTemporaryReferenceSet()
655660

656661
const { Transform } =
657662
require('node:stream') as typeof import('node:stream')
@@ -822,7 +827,7 @@ export async function handleAction({
822827
type: 'done',
823828
result: actionResult,
824829
formState,
825-
temporaryReferences: undefined,
830+
temporaryReferences,
826831
}
827832
} catch (err) {
828833
if (isRedirectError(err)) {
@@ -895,7 +900,7 @@ export async function handleAction({
895900
actionResult: promise,
896901
asNotFound: true,
897902
}),
898-
temporaryReferences: undefined,
903+
temporaryReferences,
899904
}
900905
}
901906
return {
@@ -930,7 +935,7 @@ export async function handleAction({
930935
skipFlight:
931936
!staticGenerationStore.pathWasRevalidated || actionWasForwarded,
932937
}),
933-
temporaryReferences: undefined,
938+
temporaryReferences,
934939
}
935940
}
936941

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ async function generateFlight(
367367
{
368368
onError: ctx.flightDataRendererErrorHandler,
369369
nonce: ctx.nonce,
370+
temporaryReferences: undefined,
370371
}
371372
)
372373

@@ -388,7 +389,9 @@ type RenderToStreamOptions = {
388389
asNotFound: boolean
389390
tree: LoaderTree
390391
formState: any
391-
temporaryReferences: unknown
392+
temporaryReferences:
393+
| import('react-dom/server.edge').TemporaryReferencesSet
394+
| undefined
392395
}
393396

394397
/**
@@ -919,6 +922,7 @@ async function renderToHTMLOrFlightImpl(
919922
asNotFound,
920923
tree,
921924
formState,
925+
temporaryReferences,
922926
}: RenderToStreamOptions): Promise<RenderToStreamResult> => {
923927
const tracingMetadata = getTracedMetadata(
924928
getTracer().getTracePropagationData(),
@@ -960,6 +964,7 @@ async function renderToHTMLOrFlightImpl(
960964
{
961965
onError: serverComponentsErrorHandler,
962966
nonce,
967+
temporaryReferences,
963968
}
964969
)
965970

@@ -1292,6 +1297,7 @@ async function renderToHTMLOrFlightImpl(
12921297
{
12931298
onError: serverComponentsErrorHandler,
12941299
nonce,
1300+
temporaryReferences,
12951301
}
12961302
)
12971303

@@ -1311,6 +1317,7 @@ async function renderToHTMLOrFlightImpl(
13111317
// Include hydration scripts in the HTML
13121318
bootstrapScripts: [errorBootstrapScript],
13131319
formState,
1320+
temporaryReferences,
13141321
},
13151322
})
13161323

packages/next/src/server/app-render/make-get-server-inserted-html.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ export function makeGetServerInsertedHTML({
110110
// Larger chunk because this isn't sent over the network.
111111
// Let's set it to 1MB.
112112
progressiveChunkSize: 1024 * 1024,
113+
temporaryReferences: undefined,
113114
}
114115
)
115116

packages/next/src/server/app-render/static/static-renderer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,12 @@ export class ServerRenderer implements Renderer {
4949
private readonly renderToReadableStream = require('react-dom/server.edge')
5050
.renderToReadableStream as (typeof import('react-dom/server.edge'))['renderToReadableStream']
5151

52-
constructor(private readonly options: RenderToReadableStreamOptions) {}
52+
constructor(
53+
private readonly options: Omit<
54+
RenderToReadableStreamOptions,
55+
'temporaryReferences'
56+
>
57+
) {}
5358

5459
public async render(children: JSX.Element): Promise<RenderResult> {
5560
const stream = await this.renderToReadableStream(children, this.options)

packages/next/src/server/app-render/use-flight-response.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export async function flightRenderComplete(
9090
export function createInlinedDataReadableStream(
9191
flightStream: ReadableStream<Uint8Array>,
9292
nonce: string | undefined,
93-
formState: unknown | null
93+
formState: unknown | null,
9494
): ReadableStream<Uint8Array> {
9595
const startScriptTag = nonce
9696
? `<script nonce=${JSON.stringify(nonce)}>`

packages/next/src/server/stream-utils/node-web-streams-helper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ export function renderToInitialFizzStream({
168168
}: {
169169
ReactDOMServer: typeof import('react-dom/server.edge')
170170
element: React.ReactElement
171-
streamOptions?: any
171+
streamOptions?: import('react-dom/server.edge').Options
172172
}): Promise<ReactReadableStream> {
173173
return getTracer().trace(AppRenderSpan.renderToReadableStream, async () =>
174174
ReactDOMServer.renderToReadableStream(element, streamOptions)

packages/next/types/react-dom.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ declare module 'react-dom/server.edge' {
3131
}
3232
): Promise<ReadableStream<Uint8Array>>
3333

34+
const REACT_TEMPORARY_REFERENCES_SIGIL: unique symbol
35+
export interface TemporaryReferencesSet {
36+
[REACT_TEMPORARY_REFERENCES_SIGIL]: never
37+
}
38+
3439
/**
3540
* Options for `renderToReadableStream`.
3641
*
@@ -61,6 +66,7 @@ declare module 'react-dom/server.edge' {
6166
formState?: unknown
6267
onHeaders?: (headers: Headers) => void
6368
maxHeadersLength?: number
69+
temporaryReferences?: TemporaryReferencesSet | undefined
6470
}
6571

6672
export function renderToReadableStream(

0 commit comments

Comments
 (0)