diff --git a/packages/react-server/src/ReactFlightAsyncSequence.js b/packages/react-server/src/ReactFlightAsyncSequence.js index 488e8e3ad2..97e2f5342e 100644 --- a/packages/react-server/src/ReactFlightAsyncSequence.js +++ b/packages/react-server/src/ReactFlightAsyncSequence.js @@ -26,7 +26,7 @@ type PromiseWithDebugInfo = interface extends Promise { export type IONode = { tag: 0, owner: null | ReactComponentInfo, - stack: ReactStackTrace, // callsite that spawned the I/O + stack: null, // callsite that spawned the I/O start: number, // start time when the first part of the I/O sequence started end: number, // we typically don't use this. only when there's no promise intermediate. promise: null, // not used on I/O @@ -37,7 +37,7 @@ export type IONode = { export type PromiseNode = { tag: 1, owner: null | ReactComponentInfo, - stack: ReactStackTrace, // callsite that created the Promise + stack: null | ReactStackTrace, // callsite that created the Promise start: number, // start time when the Promise was created end: number, // end time when the Promise was resolved. promise: WeakRef, // a reference to this Promise if still referenced @@ -48,7 +48,7 @@ export type PromiseNode = { export type AwaitNode = { tag: 2, owner: null | ReactComponentInfo, - stack: ReactStackTrace, // callsite that awaited (using await, .then(), Promise.all(), ...) + stack: null | ReactStackTrace, // callsite that awaited (using await, .then(), Promise.all(), ...) start: number, // when we started blocking. This might be later than the I/O started. end: number, // when we unblocked. This might be later than the I/O resolved if there's CPU time. promise: WeakRef, // a reference to this Promise if still referenced @@ -59,7 +59,7 @@ export type AwaitNode = { export type UnresolvedPromiseNode = { tag: 3, owner: null | ReactComponentInfo, - stack: ReactStackTrace, // callsite that created the Promise + stack: null | ReactStackTrace, // callsite that created the Promise start: number, // start time when the Promise was created end: -1.1, // set when we resolve. promise: WeakRef, // a reference to this Promise if still referenced @@ -70,7 +70,7 @@ export type UnresolvedPromiseNode = { export type UnresolvedAwaitNode = { tag: 4, owner: null | ReactComponentInfo, - stack: ReactStackTrace, // callsite that awaited (using await, .then(), Promise.all(), ...) + stack: null | ReactStackTrace, // callsite that awaited (using await, .then(), Promise.all(), ...) start: number, // when we started blocking. This might be later than the I/O started. end: -1.1, // set when we resolve. promise: WeakRef, // a reference to this Promise if still referenced diff --git a/packages/react-server/src/ReactFlightServer.js b/packages/react-server/src/ReactFlightServer.js index a69dbbab06..e6e172729f 100644 --- a/packages/react-server/src/ReactFlightServer.js +++ b/packages/react-server/src/ReactFlightServer.js @@ -251,6 +251,46 @@ function filterStackTrace( return filteredStack; } +function hasUnfilteredFrame(request: Request, stack: ReactStackTrace): boolean { + const filterStackFrame = request.filterStackFrame; + for (let i = 0; i < stack.length; i++) { + const callsite = stack[i]; + const functionName = callsite[0]; + const url = devirtualizeURL(callsite[1]); + const lineNumber = callsite[2]; + const columnNumber = callsite[3]; + if (filterStackFrame(url, functionName, lineNumber, columnNumber)) { + return true; + } + } + return false; +} + +export function isAwaitInUserspace( + request: Request, + stack: ReactStackTrace, +): boolean { + let firstFrame = 0; + while (stack.length > firstFrame && stack[firstFrame][0] === 'Promise.then') { + // Skip Promise.then frame itself. + firstFrame++; + } + if (stack.length > firstFrame) { + // Check if the very first stack frame that awaited this Promise was in user space. + // TODO: This doesn't take into account wrapper functions such as our fake .then() + // in FlightClient which will always be considered third party awaits if you call + // .then directly. + const filterStackFrame = request.filterStackFrame; + const callsite = stack[firstFrame]; + const functionName = callsite[0]; + const url = devirtualizeURL(callsite[1]); + const lineNumber = callsite[2]; + const columnNumber = callsite[3]; + return filterStackFrame(url, functionName, lineNumber, columnNumber); + } + return false; +} + initAsyncDebugInfo(); function patchConsole(consoleInst: typeof console, methodName: string) { @@ -2088,7 +2128,10 @@ function visitAsyncNode( // If the ioNode was a Promise, then that means we found one in user space since otherwise // we would've returned an IO node. We assume this has the best stack. match = ioNode; - } else if (filterStackTrace(request, node.stack).length === 0) { + } else if ( + node.stack === null || + !hasUnfilteredFrame(request, node.stack) + ) { // If this Promise was created inside only third party code, then try to use // the inner I/O node instead. This could happen if third party calls into first // party to perform some I/O. @@ -2101,7 +2144,10 @@ function visitAsyncNode( // We aborted this render. If this Promise spanned the abort time it was probably the // Promise that was aborted. This won't necessarily have I/O associated with it but // it's a point of interest. - if (filterStackTrace(request, node.stack).length > 0) { + if ( + node.stack !== null && + hasUnfilteredFrame(request, node.stack) + ) { match = node; } } @@ -2147,35 +2193,10 @@ function visitAsyncNode( // just part of a previous component's rendering. match = ioNode; } else { - let isAwaitInUserspace = false; - const fullStack = node.stack; - let firstFrame = 0; - while ( - fullStack.length > firstFrame && - fullStack[firstFrame][0] === 'Promise.then' + if ( + node.stack === null || + !isAwaitInUserspace(request, node.stack) ) { - // Skip Promise.then frame itself. - firstFrame++; - } - if (fullStack.length > firstFrame) { - // Check if the very first stack frame that awaited this Promise was in user space. - // TODO: This doesn't take into account wrapper functions such as our fake .then() - // in FlightClient which will always be considered third party awaits if you call - // .then directly. - const filterStackFrame = request.filterStackFrame; - const callsite = fullStack[firstFrame]; - const functionName = callsite[0]; - const url = devirtualizeURL(callsite[1]); - const lineNumber = callsite[2]; - const columnNumber = callsite[3]; - isAwaitInUserspace = filterStackFrame( - url, - functionName, - lineNumber, - columnNumber, - ); - } - if (!isAwaitInUserspace) { // If this await was fully filtered out, then it was inside third party code // such as in an external library. We return the I/O node and try another await. match = ioNode; @@ -2204,7 +2225,10 @@ function visitAsyncNode( awaited: ((ioNode: any): ReactIOInfo), // This is deduped by this reference. env: env, owner: node.owner, - stack: filterStackTrace(request, node.stack), + stack: + node.stack === null + ? null + : filterStackTrace(request, node.stack), }); // Mark the end time of the await. If we're aborting then we don't emit this // to signal that this never resolved inside this render. diff --git a/packages/react-server/src/ReactFlightServerConfigDebugNode.js b/packages/react-server/src/ReactFlightServerConfigDebugNode.js index 089fffb131..9c922820c8 100644 --- a/packages/react-server/src/ReactFlightServerConfigDebugNode.js +++ b/packages/react-server/src/ReactFlightServerConfigDebugNode.js @@ -7,6 +7,8 @@ * @flow */ +import type {ReactStackTrace} from 'shared/ReactTypes'; + import type { AsyncSequence, IONode, @@ -24,6 +26,7 @@ import { UNRESOLVED_AWAIT_NODE, } from './ReactFlightAsyncSequence'; import {resolveOwner} from './flight/ReactFlightCurrentOwner'; +import {resolveRequest, isAwaitInUserspace} from './ReactFlightServer'; import {createHook, executionAsyncId, AsyncResource} from 'async_hooks'; import {enableAsyncDebugInfo} from 'shared/ReactFeatureFlags'; import {parseStackTrace} from './ReactFlightServerConfig'; @@ -66,6 +69,8 @@ function resolvePromiseOrAwaitNode( return resolvedNode; } +const emptyStack: ReactStackTrace = []; + // Initialize the tracing of async operations. // We do this globally since the async work can potentially eagerly // start before the first request and once requests start they can interleave. @@ -110,10 +115,33 @@ export function initAsyncDebugInfo(): void { } // If the thing we're waiting on is another Await we still track that sequence // so that we can later pick the best stack trace in user space. + let stack = null; + if ( + trigger.stack !== null && + (trigger.tag === AWAIT_NODE || + trigger.tag === UNRESOLVED_AWAIT_NODE) + ) { + // We already had a stack for an await. In a chain of awaits we'll only need one good stack. + // We mark it with an empty stack to signal to any await on this await that we have a stack. + stack = emptyStack; + } else { + const request = resolveRequest(); + if (request === null) { + // We don't collect stacks for awaits that weren't in the scope of a specific render. + } else { + stack = parseStackTrace(new Error(), 5); + if (!isAwaitInUserspace(request, stack)) { + // If this await was not done directly in user space, then clear the stack. We won't use it + // anyway. This lets future awaits on this await know that we still need to get their stacks + // until we find one in user space. + stack = null; + } + } + } node = ({ tag: UNRESOLVED_AWAIT_NODE, owner: resolveOwner(), - stack: parseStackTrace(new Error(), 5), + stack: stack, start: performance.now(), end: -1.1, // set when resolved. promise: new WeakRef((resource: Promise)), @@ -145,7 +173,7 @@ export function initAsyncDebugInfo(): void { node = ({ tag: IO_NODE, owner: resolveOwner(), - stack: parseStackTrace(new Error(), 3), // This is only used if no native promises are used. + stack: null, start: performance.now(), end: -1.1, // Only set when pinged. promise: null, @@ -160,7 +188,7 @@ export function initAsyncDebugInfo(): void { node = ({ tag: IO_NODE, owner: resolveOwner(), - stack: parseStackTrace(new Error(), 3), + stack: null, start: performance.now(), end: -1.1, // Only set when pinged. promise: null, diff --git a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js index b874703ea8..9dda51f565 100644 --- a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js +++ b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js @@ -805,7 +805,7 @@ describe('ReactFlightAsyncDebugInfo', () => { } }); - it('can track the start of I/O when no native promise is used', async () => { + it('cannot currently track the start of I/O when no native promise is used', async () => { function Component() { const callbacks = []; setTimeout(function timer() { @@ -855,7 +855,7 @@ describe('ReactFlightAsyncDebugInfo', () => { 821, 109, 808, - 67, + 80, ], ], }, @@ -863,7 +863,7 @@ describe('ReactFlightAsyncDebugInfo', () => { "awaited": { "end": 0, "env": "Server", - "name": "setTimeout", + "name": "", "owner": { "env": "Server", "key": null, @@ -876,20 +876,10 @@ describe('ReactFlightAsyncDebugInfo', () => { 821, 109, 808, - 67, + 80, ], ], }, - "stack": [ - [ - "Component", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 811, - 7, - 809, - 5, - ], - ], "start": 0, }, "env": "Server", @@ -948,9 +938,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 917, + 907, 109, - 908, + 898, 94, ], ], @@ -1021,9 +1011,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 990, + 980, 109, - 966, + 956, 50, ], ], @@ -1105,9 +1095,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1074, + 1064, 109, - 1057, + 1047, 63, ], ], @@ -1132,9 +1122,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1070, + 1060, 24, - 1069, + 1059, 5, ], ], @@ -1164,9 +1154,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1070, + 1060, 24, - 1069, + 1059, 5, ], ], @@ -1183,17 +1173,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1059, + 1049, 13, - 1058, + 1048, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1065, + 1055, 24, - 1064, + 1054, 5, ], ], @@ -1220,90 +1210,90 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1070, - 24, - 1069, - 5, - ], - ], - }, - "stack": [ - [ - "getData", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1059, - 13, - 1058, - 5, - ], - [ - "ThirdPartyComponent", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1065, - 24, - 1064, - 5, - ], - ], - }, - { - "time": 0, - }, - { - "time": 0, - }, - { - "awaited": { - "end": 0, - "env": "third-party", - "name": "delay", - "owner": { - "env": "third-party", - "key": null, - "name": "ThirdPartyComponent", - "props": {}, - "stack": [ - [ - "fetchThirdParty", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 168, - 40, - 166, - 3, - ], - [ - "Component", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1070, - 24, - 1069, - 5, - ], - ], - }, - "stack": [ - [ - "delay", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 161, - 12, - 160, - 3, - ], - [ - "getData", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", 1060, + 24, + 1059, + 5, + ], + ], + }, + "stack": [ + [ + "getData", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1049, + 13, + 1048, + 5, + ], + [ + "ThirdPartyComponent", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1055, + 24, + 1054, + 5, + ], + ], + }, + { + "time": 0, + }, + { + "time": 0, + }, + { + "awaited": { + "end": 0, + "env": "third-party", + "name": "delay", + "owner": { + "env": "third-party", + "key": null, + "name": "ThirdPartyComponent", + "props": {}, + "stack": [ + [ + "fetchThirdParty", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 168, + 40, + 166, + 3, + ], + [ + "Component", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1060, + 24, + 1059, + 5, + ], + ], + }, + "stack": [ + [ + "delay", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 161, + 12, + 160, + 3, + ], + [ + "getData", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1050, 13, - 1058, + 1048, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1065, + 1055, 18, - 1064, + 1054, 5, ], ], @@ -1330,9 +1320,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1070, + 1060, 24, - 1069, + 1059, 5, ], ], @@ -1341,17 +1331,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1060, + 1050, 13, - 1058, + 1048, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1065, + 1055, 18, - 1064, + 1054, 5, ], ], @@ -1426,9 +1416,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1390, + 1380, 40, - 1373, + 1363, 62, ], ], @@ -1450,9 +1440,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1390, + 1380, 40, - 1373, + 1363, 62, ], ], @@ -1469,17 +1459,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1375, + 1365, 13, - 1374, + 1364, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1385, + 1375, 13, - 1384, + 1374, 5, ], ], @@ -1498,9 +1488,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1390, + 1380, 40, - 1373, + 1363, 62, ], ], @@ -1509,17 +1499,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1375, + 1365, 13, - 1374, + 1364, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1385, + 1375, 13, - 1384, + 1374, 5, ], ], @@ -1539,9 +1529,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1386, + 1376, 60, - 1384, + 1374, 5, ], ], @@ -1563,9 +1553,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1390, + 1380, 40, - 1373, + 1363, 62, ], ], @@ -1582,17 +1572,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1375, + 1365, 13, - 1374, + 1364, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1385, + 1375, 13, - 1384, + 1374, 5, ], ], @@ -1611,9 +1601,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1386, + 1376, 60, - 1384, + 1374, 5, ], ], @@ -1622,9 +1612,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Child", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1380, + 1370, 28, - 1379, + 1369, 5, ], ], @@ -1695,9 +1685,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1659, + 1649, 40, - 1643, + 1633, 57, ], ], @@ -1719,9 +1709,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1659, + 1649, 40, - 1643, + 1633, 57, ], ], @@ -1738,17 +1728,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1645, + 1635, 13, - 1644, + 1634, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1654, + 1644, 23, - 1653, + 1643, 5, ], ], @@ -1767,9 +1757,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1659, + 1649, 40, - 1643, + 1633, 57, ], ], @@ -1778,17 +1768,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1645, + 1635, 13, - 1644, + 1634, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1654, + 1644, 23, - 1653, + 1643, 5, ], ], @@ -1808,9 +1798,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1655, + 1645, 60, - 1653, + 1643, 5, ], ], @@ -1829,9 +1819,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1659, + 1649, 40, - 1643, + 1633, 57, ], ], @@ -1848,17 +1838,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1645, + 1635, 13, - 1644, + 1634, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1654, + 1644, 23, - 1653, + 1643, 5, ], ], @@ -1937,9 +1927,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1901, + 1891, 40, - 1883, + 1873, 80, ], ], @@ -1961,9 +1951,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1901, + 1891, 40, - 1883, + 1873, 80, ], ], @@ -1980,207 +1970,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTrice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1891, + 1881, 13, - 1889, + 1879, 5, ], [ "Bar", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1896, - 13, - 1895, - 5, - ], - ], - "start": 0, - "value": { - "value": undefined, - }, - }, - "env": "Server", - "owner": { - "env": "Server", - "key": null, - "name": "Bar", - "props": {}, - "stack": [ - [ - "Object.", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1901, - 40, - 1883, - 80, - ], - ], - }, - "stack": [ - [ - "delayTrice", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1891, - 13, - 1889, - 5, - ], - [ - "Bar", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1896, - 13, - 1895, - 5, - ], - ], - }, - { - "time": 0, - }, - { - "awaited": { - "end": 0, - "env": "Server", - "name": "delay", - "owner": { - "env": "Server", - "key": null, - "name": "Bar", - "props": {}, - "stack": [ - [ - "Object.", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1901, - 40, - 1883, - 80, - ], - ], - }, - "stack": [ - [ - "delay", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 161, - 12, - 160, - 3, - ], - [ - "delayTwice", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1885, - 13, - 1884, - 5, - ], - [ - "delayTrice", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1890, - 15, - 1889, - 5, - ], - [ - "Bar", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1896, - 13, - 1895, - 5, - ], - ], - "start": 0, - "value": { - "value": undefined, - }, - }, - "env": "Server", - "owner": { - "env": "Server", - "key": null, - "name": "Bar", - "props": {}, - "stack": [ - [ - "Object.", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1901, - 40, - 1883, - 80, - ], - ], - }, - "stack": [ - [ - "delayTwice", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1885, - 13, - 1884, - 5, - ], - [ - "delayTrice", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1890, - 15, - 1889, - 5, - ], - [ - "Bar", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1896, - 13, - 1895, - 5, - ], - ], - }, - { - "time": 0, - }, - { - "awaited": { - "end": 0, - "env": "Server", - "name": "delay", - "owner": { - "env": "Server", - "key": null, - "name": "Bar", - "props": {}, - "stack": [ - [ - "Object.", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1901, - 40, - 1883, - 80, - ], - ], - }, - "stack": [ - [ - "delay", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 161, - 12, - 160, - 3, - ], - [ - "delayTwice", - "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", 1886, 13, - 1884, + 1885, 5, ], ], @@ -2199,9 +1999,108 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1901, + 1891, 40, - 1883, + 1873, + 80, + ], + ], + }, + "stack": [ + [ + "delayTrice", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1881, + 13, + 1879, + 5, + ], + [ + "Bar", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1886, + 13, + 1885, + 5, + ], + ], + }, + { + "time": 0, + }, + { + "awaited": { + "end": 0, + "env": "Server", + "name": "delay", + "owner": { + "env": "Server", + "key": null, + "name": "Bar", + "props": {}, + "stack": [ + [ + "Object.", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1891, + 40, + 1873, + 80, + ], + ], + }, + "stack": [ + [ + "delay", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 161, + 12, + 160, + 3, + ], + [ + "delayTwice", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1875, + 13, + 1874, + 5, + ], + [ + "delayTrice", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1880, + 15, + 1879, + 5, + ], + [ + "Bar", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1886, + 13, + 1885, + 5, + ], + ], + "start": 0, + "value": { + "value": undefined, + }, + }, + "env": "Server", + "owner": { + "env": "Server", + "key": null, + "name": "Bar", + "props": {}, + "stack": [ + [ + "Object.", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1891, + 40, + 1873, 80, ], ], @@ -2210,9 +2109,100 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTwice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1875, + 13, + 1874, + 5, + ], + [ + "delayTrice", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1880, + 15, + 1879, + 5, + ], + [ + "Bar", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", 1886, 13, - 1884, + 1885, + 5, + ], + ], + }, + { + "time": 0, + }, + { + "awaited": { + "end": 0, + "env": "Server", + "name": "delay", + "owner": { + "env": "Server", + "key": null, + "name": "Bar", + "props": {}, + "stack": [ + [ + "Object.", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1891, + 40, + 1873, + 80, + ], + ], + }, + "stack": [ + [ + "delay", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 161, + 12, + 160, + 3, + ], + [ + "delayTwice", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1876, + 13, + 1874, + 5, + ], + ], + "start": 0, + "value": { + "value": undefined, + }, + }, + "env": "Server", + "owner": { + "env": "Server", + "key": null, + "name": "Bar", + "props": {}, + "stack": [ + [ + "Object.", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1891, + 40, + 1873, + 80, + ], + ], + }, + "stack": [ + [ + "delayTwice", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1876, + 13, + 1874, 5, ], ], @@ -2273,9 +2263,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2242, + 2232, 109, - 2231, + 2221, 58, ], ], @@ -2297,9 +2287,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2242, + 2232, 109, - 2231, + 2221, 58, ], ], @@ -2316,17 +2306,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2233, + 2223, 14, - 2232, + 2222, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2239, + 2229, 20, - 2238, + 2228, 5, ], ], @@ -2345,9 +2335,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2242, + 2232, 109, - 2231, + 2221, 58, ], ], @@ -2356,17 +2346,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2233, + 2223, 23, - 2232, + 2222, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2239, + 2229, 20, - 2238, + 2228, 5, ], ], @@ -2433,9 +2423,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2397, + 2387, 40, - 2385, + 2375, 56, ], ], @@ -2457,9 +2447,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2397, + 2387, 40, - 2385, + 2375, 56, ], ], @@ -2476,9 +2466,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2393, + 2383, 20, - 2392, + 2382, 5, ], ], @@ -2497,9 +2487,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2397, + 2387, 40, - 2385, + 2375, 56, ], ], @@ -2508,9 +2498,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2393, + 2383, 20, - 2392, + 2382, 5, ], ],