Skip to content

Commit 2cfb221

Browse files
authored
[Flight] Allow passing DEV only startTime as an option (facebook#34912)
When you use the `createFromFetch` API we assume that the start time of the request is the same time as when you call `createFromFetch` but in principle you could use it with a Promise that starts earlier and just happens to resolve to a `Response`. When you use `createFromReadableStream` that is almost definitely the case. E.g. you might have started it way earlier and you don't call `createFromReadableStream` until you get the headers back (the fetch promise resolves). This adds an option to pass in the start time for debug purposes if you started the request before starting to parse it.
1 parent 58bdc0b commit 2cfb221

File tree

13 files changed

+52
-1
lines changed

13 files changed

+52
-1
lines changed

packages/react-client/src/ReactFlightClient.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2561,6 +2561,7 @@ function ResponseInstance(
25612561
findSourceMapURL: void | FindSourceMapURLCallback, // DEV-only
25622562
replayConsole: boolean, // DEV-only
25632563
environmentName: void | string, // DEV-only
2564+
debugStartTime: void | number, // DEV-only
25642565
debugChannel: void | DebugChannel, // DEV-only
25652566
) {
25662567
const chunks: Map<number, SomeChunk<any>> = new Map();
@@ -2621,7 +2622,8 @@ function ResponseInstance(
26212622
// Note: createFromFetch allows this to be marked at the start of the fetch
26222623
// where as if you use createFromReadableStream from the body of the fetch
26232624
// then the start time is when the headers resolved.
2624-
this._debugStartTime = performance.now();
2625+
this._debugStartTime =
2626+
debugStartTime == null ? performance.now() : debugStartTime;
26252627
this._debugIOStarted = false;
26262628
// We consider everything before the first setTimeout task to be cached data
26272629
// and is not considered I/O required to load the stream.
@@ -2669,6 +2671,7 @@ export function createResponse(
26692671
findSourceMapURL: void | FindSourceMapURLCallback, // DEV-only
26702672
replayConsole: boolean, // DEV-only
26712673
environmentName: void | string, // DEV-only
2674+
debugStartTime: void | number, // DEV-only
26722675
debugChannel: void | DebugChannel, // DEV-only
26732676
): WeakResponse {
26742677
return getWeakResponse(
@@ -2684,6 +2687,7 @@ export function createResponse(
26842687
findSourceMapURL,
26852688
replayConsole,
26862689
environmentName,
2690+
debugStartTime,
26872691
debugChannel,
26882692
),
26892693
);

packages/react-markup/src/ReactMarkupServer.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ export function experimental_renderToHTML(
9191
undefined,
9292
undefined,
9393
false,
94+
undefined,
95+
undefined,
96+
undefined,
9497
);
9598
const streamState = createFlightStreamState(flightResponse, null);
9699
const flightDestination = {

packages/react-server-dom-esm/src/client/ReactFlightDOMClientBrowser.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export type Options = {
5252
findSourceMapURL?: FindSourceMapURLCallback,
5353
replayConsoleLogs?: boolean,
5454
environmentName?: string,
55+
startTime?: number,
5556
};
5657

5758
function createDebugCallbackFromWritableStream(
@@ -103,6 +104,9 @@ function createResponseFromOptions(options: void | Options) {
103104
__DEV__ && options && options.environmentName
104105
? options.environmentName
105106
: undefined,
107+
__DEV__ && options && options.startTime != null
108+
? options.startTime
109+
: undefined,
106110
debugChannel,
107111
);
108112
}

packages/react-server-dom-esm/src/client/ReactFlightDOMClientNode.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export type Options = {
5757
findSourceMapURL?: FindSourceMapURLCallback,
5858
replayConsoleLogs?: boolean,
5959
environmentName?: string,
60+
startTime?: number,
6061
// For the Node.js client we only support a single-direction debug channel.
6162
debugChannel?: Readable,
6263
};
@@ -112,6 +113,9 @@ function createFromNodeStream<T>(
112113
__DEV__ && options && options.environmentName
113114
? options.environmentName
114115
: undefined,
116+
__DEV__ && options && options.startTime != null
117+
? options.startTime
118+
: undefined,
115119
debugChannel,
116120
);
117121

packages/react-server-dom-parcel/src/client/ReactFlightDOMClientBrowser.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ function createResponseFromOptions(options: void | Options) {
129129
__DEV__ && options && options.environmentName
130130
? options.environmentName
131131
: undefined,
132+
__DEV__ && options && options.startTime != null
133+
? options.startTime
134+
: undefined,
132135
debugChannel,
133136
);
134137
}
@@ -205,6 +208,7 @@ export type Options = {
205208
temporaryReferences?: TemporaryReferenceSet,
206209
replayConsoleLogs?: boolean,
207210
environmentName?: string,
211+
startTime?: number,
208212
};
209213

210214
export function createFromReadableStream<T>(

packages/react-server-dom-parcel/src/client/ReactFlightDOMClientEdge.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export type Options = {
7979
temporaryReferences?: TemporaryReferenceSet,
8080
replayConsoleLogs?: boolean,
8181
environmentName?: string,
82+
startTime?: number,
8283
// For the Edge client we only support a single-direction debug channel.
8384
debugChannel?: {readable?: ReadableStream, ...},
8485
};
@@ -107,6 +108,9 @@ function createResponseFromOptions(options?: Options) {
107108
__DEV__ && options && options.environmentName
108109
? options.environmentName
109110
: undefined,
111+
__DEV__ && options && options.startTime != null
112+
? options.startTime
113+
: undefined,
110114
debugChannel,
111115
);
112116
}

packages/react-server-dom-parcel/src/client/ReactFlightDOMClientNode.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export type Options = {
5252
encodeFormAction?: EncodeFormActionCallback,
5353
replayConsoleLogs?: boolean,
5454
environmentName?: string,
55+
startTime?: number,
5556
// For the Node.js client we only support a single-direction debug channel.
5657
debugChannel?: Readable,
5758
};
@@ -103,6 +104,9 @@ export function createFromNodeStream<T>(
103104
__DEV__ && options && options.environmentName
104105
? options.environmentName
105106
: undefined,
107+
__DEV__ && options && options.startTime != null
108+
? options.startTime
109+
: undefined,
106110
debugChannel,
107111
);
108112

packages/react-server-dom-turbopack/src/client/ReactFlightDOMClientBrowser.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export type Options = {
5151
findSourceMapURL?: FindSourceMapURLCallback,
5252
replayConsoleLogs?: boolean,
5353
environmentName?: string,
54+
startTime?: number,
5455
};
5556

5657
function createDebugCallbackFromWritableStream(
@@ -102,6 +103,9 @@ function createResponseFromOptions(options: void | Options) {
102103
__DEV__ && options && options.environmentName
103104
? options.environmentName
104105
: undefined,
106+
__DEV__ && options && options.startTime != null
107+
? options.startTime
108+
: undefined,
105109
debugChannel,
106110
);
107111
}

packages/react-server-dom-turbopack/src/client/ReactFlightDOMClientEdge.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export type Options = {
7979
findSourceMapURL?: FindSourceMapURLCallback,
8080
replayConsoleLogs?: boolean,
8181
environmentName?: string,
82+
startTime?: number,
8283
// For the Edge client we only support a single-direction debug channel.
8384
debugChannel?: {readable?: ReadableStream, ...},
8485
};
@@ -109,6 +110,9 @@ function createResponseFromOptions(options: Options) {
109110
__DEV__ && options && options.environmentName
110111
? options.environmentName
111112
: undefined,
113+
__DEV__ && options && options.startTime != null
114+
? options.startTime
115+
: undefined,
112116
debugChannel,
113117
);
114118
}

packages/react-server-dom-turbopack/src/client/ReactFlightDOMClientNode.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export type Options = {
6060
findSourceMapURL?: FindSourceMapURLCallback,
6161
replayConsoleLogs?: boolean,
6262
environmentName?: string,
63+
startTime?: number,
6364
// For the Node.js client we only support a single-direction debug channel.
6465
debugChannel?: Readable,
6566
};
@@ -114,6 +115,9 @@ function createFromNodeStream<T>(
114115
__DEV__ && options && options.environmentName
115116
? options.environmentName
116117
: undefined,
118+
__DEV__ && options && options.startTime != null
119+
? options.startTime
120+
: undefined,
117121
debugChannel,
118122
);
119123

0 commit comments

Comments
 (0)