mirror of
https://github.com/zebrajr/react.git
synced 2025-12-06 12:20:20 +01:00
[Flight] Clarify that location field is a FunctionLocation not a CallSite (#33141)
Follow up to #33136. This clarifies in the types where the conversion happens from a CallSite which we use to simulate getting the enclosing line/col to a FunctionLocation which doesn't represent a CallSite but actually just the function which only has an enclosing line/col.
This commit is contained in:
parent
4206fe4982
commit
a437c99ff7
|
|
@ -15,7 +15,7 @@ import type {
|
|||
ReactAsyncInfo,
|
||||
ReactTimeInfo,
|
||||
ReactStackTrace,
|
||||
ReactCallSite,
|
||||
ReactFunctionLocation,
|
||||
ReactErrorInfoDev,
|
||||
} from 'shared/ReactTypes';
|
||||
import type {LazyComponent} from 'react/src/ReactLazy';
|
||||
|
|
@ -1074,7 +1074,7 @@ function loadServerReference<A: Iterable<any>, T>(
|
|||
bound: null | Thenable<Array<any>>,
|
||||
name?: string, // DEV-only
|
||||
env?: string, // DEV-only
|
||||
location?: ReactCallSite, // DEV-only
|
||||
location?: ReactFunctionLocation, // DEV-only
|
||||
},
|
||||
parentObject: Object,
|
||||
key: string,
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import type {
|
|||
FulfilledThenable,
|
||||
RejectedThenable,
|
||||
ReactCustomFormAction,
|
||||
ReactCallSite,
|
||||
ReactFunctionLocation,
|
||||
} from 'shared/ReactTypes';
|
||||
import type {LazyComponent} from 'react/src/ReactLazy';
|
||||
import type {TemporaryReferenceSet} from './ReactFlightTemporaryReferences';
|
||||
|
|
@ -1248,7 +1248,7 @@ export function createBoundServerReference<A: Iterable<any>, T>(
|
|||
bound: null | Thenable<Array<any>>,
|
||||
name?: string, // DEV-only
|
||||
env?: string, // DEV-only
|
||||
location?: ReactCallSite, // DEV-only
|
||||
location?: ReactFunctionLocation, // DEV-only
|
||||
},
|
||||
callServer: CallServerCallback,
|
||||
encodeFormAction?: EncodeFormActionCallback,
|
||||
|
|
@ -1309,7 +1309,7 @@ const v8FrameRegExp =
|
|||
// filename:0:0
|
||||
const jscSpiderMonkeyFrameRegExp = /(?:(.*)@)?(.*):(\d+):(\d+)/;
|
||||
|
||||
function parseStackLocation(error: Error): null | ReactCallSite {
|
||||
function parseStackLocation(error: Error): null | ReactFunctionLocation {
|
||||
// This parsing is special in that we know that the calling function will always
|
||||
// be a module that initializes the server action. We also need this part to work
|
||||
// cross-browser so not worth a Config. It's DEV only so not super code size
|
||||
|
|
@ -1354,7 +1354,7 @@ function parseStackLocation(error: Error): null | ReactCallSite {
|
|||
const line = +(parsed[3] || parsed[6]);
|
||||
const col = +(parsed[4] || parsed[7]);
|
||||
|
||||
return [name, filename, line, col, line, col];
|
||||
return [name, filename, line, col];
|
||||
}
|
||||
|
||||
export function createServerReference<A: Iterable<any>, T>(
|
||||
|
|
|
|||
14
packages/react-server/src/ReactFlightServer.js
vendored
14
packages/react-server/src/ReactFlightServer.js
vendored
|
|
@ -62,7 +62,7 @@ import type {
|
|||
ReactAsyncInfo,
|
||||
ReactTimeInfo,
|
||||
ReactStackTrace,
|
||||
ReactCallSite,
|
||||
ReactFunctionLocation,
|
||||
ReactErrorInfo,
|
||||
ReactErrorInfoDev,
|
||||
} from 'shared/ReactTypes';
|
||||
|
|
@ -2089,7 +2089,7 @@ function serializeServerReference(
|
|||
const bound = boundArgs === null ? null : Promise.resolve(boundArgs);
|
||||
const id = getServerReferenceId(request.bundlerConfig, serverReference);
|
||||
|
||||
let location: null | ReactCallSite = null;
|
||||
let location: null | ReactFunctionLocation = null;
|
||||
if (__DEV__) {
|
||||
const error = getServerReferenceLocation(
|
||||
request.bundlerConfig,
|
||||
|
|
@ -2098,7 +2098,13 @@ function serializeServerReference(
|
|||
if (error) {
|
||||
const frames = parseStackTrace(error, 1);
|
||||
if (frames.length > 0) {
|
||||
location = frames[0];
|
||||
const firstFrame = frames[0];
|
||||
location = [
|
||||
firstFrame[0],
|
||||
firstFrame[1],
|
||||
firstFrame[2], // The line and col of the callsite represents the
|
||||
firstFrame[3], // enclosing line and col of the function.
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2108,7 +2114,7 @@ function serializeServerReference(
|
|||
bound: null | Promise<Array<any>>,
|
||||
name?: string, // DEV-only
|
||||
env?: string, // DEV-only
|
||||
location?: ReactCallSite, // DEV-only
|
||||
location?: ReactFunctionLocation, // DEV-only
|
||||
} =
|
||||
__DEV__ && location !== null
|
||||
? {
|
||||
|
|
|
|||
|
|
@ -192,6 +192,13 @@ export type ReactCallSite = [
|
|||
|
||||
export type ReactStackTrace = Array<ReactCallSite>;
|
||||
|
||||
export type ReactFunctionLocation = [
|
||||
string, // function name
|
||||
string, // file name TODO: model nested eval locations as nested arrays
|
||||
number, // enclosing line number
|
||||
number, // enclosing column number
|
||||
];
|
||||
|
||||
export type ReactComponentInfo = {
|
||||
+name: string,
|
||||
+env?: string,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user