Skip to content

Commit c4459cb

Browse files
committed
Split createRequest into createRequest, createPrerenderRequest and resumeRequest
This is what encodes what type of work we'll do.
1 parent ccb8c47 commit c4459cb

7 files changed

Lines changed: 115 additions & 24 deletions

File tree

packages/react-dom/src/server/ReactDOMFizzServerBrowser.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import ReactVersion from 'shared/ReactVersion';
1616

1717
import {
1818
createRequest,
19+
resumeRequest,
1920
startWork,
2021
startFlowing,
2122
abort,
@@ -171,16 +172,14 @@ function resume(
171172
allReady.catch(() => {});
172173
reject(error);
173174
}
174-
const request = createRequest(
175+
const request = resumeRequest(
175176
children,
176-
postponedState.resumableState,
177+
postponedState,
177178
createRenderState(
178179
postponedState.resumableState,
179180
options ? options.nonce : undefined,
180181
undefined, // importMap
181182
),
182-
postponedState.rootFormatContext,
183-
postponedState.progressiveChunkSize,
184183
options ? options.onError : undefined,
185184
onAllReady,
186185
onShellReady,

packages/react-dom/src/server/ReactDOMFizzServerEdge.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import ReactVersion from 'shared/ReactVersion';
1616

1717
import {
1818
createRequest,
19+
resumeRequest,
1920
startWork,
2021
startFlowing,
2122
abort,
@@ -171,16 +172,14 @@ function resume(
171172
allReady.catch(() => {});
172173
reject(error);
173174
}
174-
const request = createRequest(
175+
const request = resumeRequest(
175176
children,
176-
postponedState.resumableState,
177+
postponedState,
177178
createRenderState(
178179
postponedState.resumableState,
179180
options ? options.nonce : undefined,
180181
undefined, // importMap
181182
),
182-
postponedState.rootFormatContext,
183-
postponedState.progressiveChunkSize,
184183
options ? options.onError : undefined,
185184
onAllReady,
186185
onShellReady,

packages/react-dom/src/server/ReactDOMFizzServerNode.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import ReactVersion from 'shared/ReactVersion';
1818

1919
import {
2020
createRequest,
21+
resumeRequest,
2122
startWork,
2223
startFlowing,
2324
abort,
@@ -140,16 +141,14 @@ function resumeRequestImpl(
140141
postponedState: PostponedState,
141142
options: void | ResumeOptions,
142143
) {
143-
return createRequest(
144+
return resumeRequest(
144145
children,
145-
postponedState.resumableState,
146+
postponedState,
146147
createRenderState(
147148
postponedState.resumableState,
148149
options ? options.nonce : undefined,
149150
undefined, // importMap
150151
),
151-
postponedState.rootFormatContext,
152-
postponedState.progressiveChunkSize,
153152
options ? options.onError : undefined,
154153
options ? options.onAllReady : undefined,
155154
options ? options.onShellReady : undefined,

packages/react-dom/src/server/ReactDOMFizzStaticBrowser.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import type {ImportMap} from '../shared/ReactDOMTypes';
1515
import ReactVersion from 'shared/ReactVersion';
1616

1717
import {
18-
createRequest,
18+
createPrerenderRequest,
1919
startWork,
2020
startFlowing,
2121
abort,
@@ -80,7 +80,7 @@ function prerender(
8080
options ? options.bootstrapModules : undefined,
8181
options ? options.unstable_externalRuntimeSrc : undefined,
8282
);
83-
const request = createRequest(
83+
const request = createPrerenderRequest(
8484
children,
8585
resources,
8686
createRenderState(

packages/react-dom/src/server/ReactDOMFizzStaticEdge.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import type {ImportMap} from '../shared/ReactDOMTypes';
1515
import ReactVersion from 'shared/ReactVersion';
1616

1717
import {
18-
createRequest,
18+
createPrerenderRequest,
1919
startWork,
2020
startFlowing,
2121
abort,
@@ -80,7 +80,7 @@ function prerender(
8080
options ? options.bootstrapModules : undefined,
8181
options ? options.unstable_externalRuntimeSrc : undefined,
8282
);
83-
const request = createRequest(
83+
const request = createPrerenderRequest(
8484
children,
8585
resources,
8686
createRenderState(

packages/react-dom/src/server/ReactDOMFizzStaticNode.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {Writable, Readable} from 'stream';
1717
import ReactVersion from 'shared/ReactVersion';
1818

1919
import {
20-
createRequest,
20+
createPrerenderRequest,
2121
startWork,
2222
startFlowing,
2323
abort,
@@ -94,7 +94,7 @@ function prerenderToNodeStream(
9494
options ? options.bootstrapModules : undefined,
9595
options ? options.unstable_externalRuntimeSrc : undefined,
9696
);
97-
const request = createRequest(
97+
const request = createPrerenderRequest(
9898
children,
9999
resumableState,
100100
createRenderState(

packages/react-server/src/ReactFizzServer.js

Lines changed: 100 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,106 @@ export function createRequest(
396396
return request;
397397
}
398398

399+
export function createPrerenderRequest(
400+
children: ReactNodeList,
401+
resumableState: ResumableState,
402+
renderState: RenderState,
403+
rootFormatContext: FormatContext,
404+
progressiveChunkSize: void | number,
405+
onError: void | ((error: mixed) => ?string),
406+
onAllReady: void | (() => void),
407+
onShellReady: void | (() => void),
408+
onShellError: void | ((error: mixed) => void),
409+
onFatalError: void | ((error: mixed) => void),
410+
onPostpone: void | ((reason: string) => void),
411+
): Request {
412+
const request = createRequest(
413+
children,
414+
resumableState,
415+
renderState,
416+
rootFormatContext,
417+
progressiveChunkSize,
418+
onError,
419+
onAllReady,
420+
onShellReady,
421+
onShellError,
422+
onFatalError,
423+
onPostpone,
424+
);
425+
// Start tracking postponed holes during this render.
426+
request.trackedPostpones = {workingMap: new Map(), root: []};
427+
return request;
428+
}
429+
430+
export function resumeRequest(
431+
children: ReactNodeList,
432+
postponedState: PostponedState,
433+
renderState: RenderState,
434+
onError: void | ((error: mixed) => ?string),
435+
onAllReady: void | (() => void),
436+
onShellReady: void | (() => void),
437+
onShellError: void | ((error: mixed) => void),
438+
onFatalError: void | ((error: mixed) => void),
439+
onPostpone: void | ((reason: string) => void),
440+
): Request {
441+
prepareHostDispatcher();
442+
const pingedTasks: Array<Task> = [];
443+
const abortSet: Set<Task> = new Set();
444+
const request: Request = {
445+
destination: null,
446+
flushScheduled: false,
447+
resumableState: postponedState.resumableState,
448+
renderState,
449+
rootFormatContext: postponedState.rootFormatContext,
450+
progressiveChunkSize: postponedState.progressiveChunkSize,
451+
status: OPEN,
452+
fatalError: null,
453+
nextSegmentId: 0,
454+
allPendingTasks: 0,
455+
pendingRootTasks: 0,
456+
completedRootSegment: null,
457+
abortableTasks: abortSet,
458+
pingedTasks: pingedTasks,
459+
clientRenderedBoundaries: ([]: Array<SuspenseBoundary>),
460+
completedBoundaries: ([]: Array<SuspenseBoundary>),
461+
partialBoundaries: ([]: Array<SuspenseBoundary>),
462+
trackedPostpones: null,
463+
onError: onError === undefined ? defaultErrorHandler : onError,
464+
onPostpone: onPostpone === undefined ? noop : onPostpone,
465+
onAllReady: onAllReady === undefined ? noop : onAllReady,
466+
onShellReady: onShellReady === undefined ? noop : onShellReady,
467+
onShellError: onShellError === undefined ? noop : onShellError,
468+
onFatalError: onFatalError === undefined ? noop : onFatalError,
469+
};
470+
// This segment represents the root fallback.
471+
const rootSegment = createPendingSegment(
472+
request,
473+
0,
474+
null,
475+
postponedState.rootFormatContext,
476+
// Root segments are never embedded in Text on either edge
477+
false,
478+
false,
479+
);
480+
// There is no parent so conceptually, we're unblocked to flush this segment.
481+
rootSegment.parentFlushed = true;
482+
const rootTask = createTask(
483+
request,
484+
null,
485+
children,
486+
null,
487+
rootSegment,
488+
abortSet,
489+
null,
490+
postponedState.rootFormatContext,
491+
emptyContextObject,
492+
rootContextSnapshot,
493+
emptyTreeContext,
494+
);
495+
pingedTasks.push(rootTask);
496+
return request;
497+
}
498+
399499
let currentRequest: null | Request = null;
400500

401501
export function resolveRequest(): null | Request {
@@ -2760,12 +2860,6 @@ export function startWork(request: Request): void {
27602860
}
27612861
}
27622862

2763-
export function startPrerenderWork(request: Request): void {
2764-
// Start tracking postponed holes during this render.
2765-
request.trackedPostpones = {workingMap: new Map(), root: []};
2766-
startWork(request);
2767-
}
2768-
27692863
function enqueueFlush(request: Request): void {
27702864
if (
27712865
request.flushScheduled === false &&

0 commit comments

Comments
 (0)