From b9af1404eac698c943b52c466b9c2e4aff85cf70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Markb=C3=A5ge?= Date: Mon, 21 Jul 2025 13:21:17 -0400 Subject: [PATCH 1/3] [Flight] Use the JSX as the await stack if an await is not available (#33947) If you pass a promise to a client component to be rendered `` then there's an internal await inside Flight. There might also be user space awaits but those awaits may already have happened before we render this component. Conceptually they were part of the parent component and not this component. It's tricky to attribute which await should be used for the stack in this case. If we can't find an await we can use the JSX callsite as the stack frame. However, we don't want to do this for simple cases like if you return a non-native Promise from a Server Component. Since that would now use the stack of the thing that rendered the Server Component which is worse than the stack of the I/O. To fix this, I update the `debugOwner`/`debugTask`/`debugStack` when we start rendering inside the Server Component. Conceptually these represent the "parent" component and is used for errors referring to the parent like when we serialize client component props the parent is the JSX of the client component. However, when we're directly inside the Server Component we don't have a callsite of the parent really. Conceptually it would be the return call of the Server Component. This might negatively affect other types of errors but I think this is ok since this feature mainly exists for the case when you enter the child JSX. --- .../react-server/src/ReactFlightServer.js | 43 +- .../ReactFlightAsyncDebugInfo-test.js | 380 ++++++++++-------- 2 files changed, 239 insertions(+), 184 deletions(-) diff --git a/packages/react-server/src/ReactFlightServer.js b/packages/react-server/src/ReactFlightServer.js index b83dec914db85..7f3f5bca65ecb 100644 --- a/packages/react-server/src/ReactFlightServer.js +++ b/packages/react-server/src/ReactFlightServer.js @@ -1717,6 +1717,16 @@ function renderFunctionComponent( // Apply special cases. result = processServerComponentReturnValue(request, task, Component, result); + if (__DEV__) { + // From this point on, the parent is the component we just rendered until we + // hit another JSX element. + task.debugOwner = componentDebugInfo; + // Unfortunately, we don't have a stack frame for this position. Conceptually + // it would be the location of the `return` inside component that just rendered. + task.debugStack = null; + task.debugTask = null; + } + // Track this element's key on the Server Component on the keyPath context.. const prevKeyPath = task.keyPath; const prevImplicitSlot = task.implicitSlot; @@ -2416,13 +2426,32 @@ function emitAsyncSequence( env: env, }; if (__DEV__) { - if (owner != null) { - // $FlowFixMe[cannot-write] - debugInfo.owner = owner; - } - if (stack != null) { - // $FlowFixMe[cannot-write] - debugInfo.stack = filterStackTrace(request, parseStackTrace(stack, 1)); + if (owner === null && stack === null) { + // We have no location for the await. We can use the JSX callsite of the parent + // as the await if this was just passed as a prop. + if (task.debugOwner !== null) { + // $FlowFixMe[cannot-write] + debugInfo.owner = task.debugOwner; + } + if (task.debugStack !== null) { + // $FlowFixMe[cannot-write] + debugInfo.stack = filterStackTrace( + request, + parseStackTrace(task.debugStack, 1), + ); + } + } else { + if (owner != null) { + // $FlowFixMe[cannot-write] + debugInfo.owner = owner; + } + if (stack != null) { + // $FlowFixMe[cannot-write] + debugInfo.stack = filterStackTrace( + request, + parseStackTrace(stack, 1), + ); + } } } // We don't have a start time for this await but in case there was no start time emitted diff --git a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js index b222ef6c04cfe..cacdb4b4cc2ac 100644 --- a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js +++ b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js @@ -70,20 +70,20 @@ function normalizeIOInfo(ioInfo) { return copy; } -function normalizeDebugInfo(debugInfo) { +function normalizeDebugInfo(original) { + const {debugTask, debugStack, debugLocation, ...debugInfo} = original; + if (debugInfo.owner) { + debugInfo.owner = normalizeDebugInfo(debugInfo.owner); + } + if (debugInfo.awaited) { + debugInfo.awaited = normalizeIOInfo(debugInfo.awaited); + } + if (debugInfo.props) { + debugInfo.props = {}; + } if (Array.isArray(debugInfo.stack)) { - const {debugTask, debugStack, debugLocation, ...copy} = debugInfo; - copy.stack = normalizeStack(debugInfo.stack); - if (debugInfo.owner) { - copy.owner = normalizeDebugInfo(debugInfo.owner); - } - if (debugInfo.awaited) { - copy.awaited = normalizeIOInfo(copy.awaited); - } - if (debugInfo.props) { - copy.props = {}; - } - return copy; + debugInfo.stack = normalizeStack(debugInfo.stack); + return debugInfo; } else if (typeof debugInfo.time === 'number') { return {...debugInfo, time: 0}; } else if (debugInfo.awaited) { @@ -912,6 +912,22 @@ describe('ReactFlightAsyncDebugInfo', () => { "start": 0, }, "env": "Server", + "owner": { + "env": "Server", + "key": null, + "name": "Component", + "props": {}, + "stack": [ + [ + "Object.", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 850, + 109, + 837, + 80, + ], + ], + }, }, { "time": 0, @@ -967,9 +983,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 936, + 952, 109, - 927, + 943, 94, ], ], @@ -1040,9 +1056,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1009, + 1025, 109, - 985, + 1001, 50, ], ], @@ -1124,9 +1140,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1093, + 1109, 109, - 1076, + 1092, 63, ], ], @@ -1151,9 +1167,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1089, + 1105, 24, - 1088, + 1104, 5, ], ], @@ -1183,9 +1199,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1089, + 1105, 24, - 1088, + 1104, 5, ], ], @@ -1202,17 +1218,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1078, + 1094, 13, - 1077, + 1093, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1084, + 1100, 24, - 1083, + 1099, 5, ], ], @@ -1239,9 +1255,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1089, + 1105, 24, - 1088, + 1104, 5, ], ], @@ -1250,17 +1266,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1078, + 1094, 13, - 1077, + 1093, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1084, + 1100, 24, - 1083, + 1099, 5, ], ], @@ -1293,9 +1309,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1089, + 1105, 24, - 1088, + 1104, 5, ], ], @@ -1312,17 +1328,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1079, + 1095, 13, - 1077, + 1093, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1084, + 1100, 18, - 1083, + 1099, 5, ], ], @@ -1349,9 +1365,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1089, + 1105, 24, - 1088, + 1104, 5, ], ], @@ -1360,17 +1376,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1079, + 1095, 13, - 1077, + 1093, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1084, + 1100, 18, - 1083, + 1099, 5, ], ], @@ -1445,9 +1461,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1409, + 1425, 40, - 1392, + 1408, 62, ], [ @@ -1477,9 +1493,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1409, + 1425, 40, - 1392, + 1408, 62, ], [ @@ -1504,17 +1520,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1394, + 1410, 13, - 1393, + 1409, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1404, + 1420, 13, - 1403, + 1419, 5, ], ], @@ -1533,9 +1549,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1409, + 1425, 40, - 1392, + 1408, 62, ], [ @@ -1552,17 +1568,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1394, + 1410, 13, - 1393, + 1409, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1404, + 1420, 13, - 1403, + 1419, 5, ], ], @@ -1582,9 +1598,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1405, + 1421, 60, - 1403, + 1419, 5, ], ], @@ -1606,9 +1622,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1409, + 1425, 40, - 1392, + 1408, 62, ], [ @@ -1633,17 +1649,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1394, + 1410, 13, - 1393, + 1409, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1404, + 1420, 13, - 1403, + 1419, 5, ], ], @@ -1662,9 +1678,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1405, + 1421, 60, - 1403, + 1419, 5, ], ], @@ -1673,9 +1689,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Child", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1399, + 1415, 28, - 1398, + 1414, 5, ], ], @@ -1746,9 +1762,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1710, + 1726, 40, - 1694, + 1710, 57, ], [ @@ -1778,9 +1794,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1710, + 1726, 40, - 1694, + 1710, 57, ], [ @@ -1805,17 +1821,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1696, + 1712, 13, - 1695, + 1711, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1705, + 1721, 23, - 1704, + 1720, 5, ], ], @@ -1834,9 +1850,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1710, + 1726, 40, - 1694, + 1710, 57, ], [ @@ -1853,17 +1869,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1696, + 1712, 13, - 1695, + 1711, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1705, + 1721, 23, - 1704, + 1720, 5, ], ], @@ -1883,9 +1899,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1706, + 1722, 60, - 1704, + 1720, 5, ], ], @@ -1904,9 +1920,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1710, + 1726, 40, - 1694, + 1710, 57, ], [ @@ -1931,17 +1947,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1696, + 1712, 13, - 1695, + 1711, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1705, + 1721, 23, - 1704, + 1720, 5, ], ], @@ -1951,6 +1967,16 @@ describe('ReactFlightAsyncDebugInfo', () => { }, }, "env": "Server", + "stack": [ + [ + "Component", + "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", + 1722, + 60, + 1720, + 5, + ], + ], }, { "time": 0, @@ -2020,9 +2046,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1984, + 2010, 40, - 1966, + 1992, 80, ], [ @@ -2052,9 +2078,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1984, + 2010, 40, - 1966, + 1992, 80, ], [ @@ -2079,17 +2105,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTrice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1974, + 2000, 13, - 1972, + 1998, 5, ], [ "Bar", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1979, + 2005, 13, - 1978, + 2004, 5, ], ], @@ -2108,9 +2134,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1984, + 2010, 40, - 1966, + 1992, 80, ], [ @@ -2127,17 +2153,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTrice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1974, + 2000, 13, - 1972, + 1998, 5, ], [ "Bar", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1979, + 2005, 13, - 1978, + 2004, 5, ], ], @@ -2159,9 +2185,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1984, + 2010, 40, - 1966, + 1992, 80, ], [ @@ -2186,25 +2212,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTwice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1968, + 1994, 13, - 1967, + 1993, 5, ], [ "delayTrice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1973, + 1999, 15, - 1972, + 1998, 5, ], [ "Bar", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1979, + 2005, 13, - 1978, + 2004, 5, ], ], @@ -2223,9 +2249,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1984, + 2010, 40, - 1966, + 1992, 80, ], [ @@ -2242,25 +2268,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTwice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1968, + 1994, 13, - 1967, + 1993, 5, ], [ "delayTrice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1973, + 1999, 15, - 1972, + 1998, 5, ], [ "Bar", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1979, + 2005, 13, - 1978, + 2004, 5, ], ], @@ -2282,9 +2308,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1984, + 2010, 40, - 1966, + 1992, 80, ], [ @@ -2309,9 +2335,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTwice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1969, + 1995, 13, - 1967, + 1993, 5, ], ], @@ -2330,9 +2356,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1984, + 2010, 40, - 1966, + 1992, 80, ], [ @@ -2349,9 +2375,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTwice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1969, + 1995, 13, - 1967, + 1993, 5, ], ], @@ -2412,9 +2438,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2381, + 2407, 109, - 2370, + 2396, 58, ], ], @@ -2436,9 +2462,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2381, + 2407, 109, - 2370, + 2396, 58, ], ], @@ -2455,17 +2481,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2372, + 2398, 14, - 2371, + 2397, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2378, + 2404, 20, - 2377, + 2403, 5, ], ], @@ -2484,9 +2510,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2381, + 2407, 109, - 2370, + 2396, 58, ], ], @@ -2495,17 +2521,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2372, + 2398, 23, - 2371, + 2397, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2378, + 2404, 20, - 2377, + 2403, 5, ], ], @@ -2572,9 +2598,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2536, + 2562, 40, - 2524, + 2550, 56, ], [ @@ -2604,9 +2630,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2536, + 2562, 40, - 2524, + 2550, 56, ], [ @@ -2631,9 +2657,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2532, + 2558, 20, - 2531, + 2557, 5, ], ], @@ -2652,9 +2678,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2536, + 2562, 40, - 2524, + 2550, 56, ], [ @@ -2671,9 +2697,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2532, + 2558, 20, - 2531, + 2557, 5, ], ], @@ -2754,9 +2780,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2713, + 2739, 40, - 2692, + 2718, 42, ], [ @@ -2786,9 +2812,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2713, + 2739, 40, - 2692, + 2718, 42, ], [ @@ -2805,17 +2831,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2699, + 2725, 15, - 2698, + 2724, 15, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2708, + 2734, 19, - 2707, + 2733, 5, ], ], @@ -2834,9 +2860,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2713, + 2739, 40, - 2692, + 2718, 42, ], [ @@ -2853,17 +2879,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2699, + 2725, 15, - 2698, + 2724, 15, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2708, + 2734, 19, - 2707, + 2733, 5, ], ], @@ -2885,9 +2911,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2713, + 2739, 40, - 2692, + 2718, 42, ], [ @@ -2904,9 +2930,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2708, + 2734, 25, - 2707, + 2733, 5, ], ], @@ -2925,9 +2951,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2713, + 2739, 40, - 2692, + 2718, 42, ], [ @@ -2944,9 +2970,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2708, + 2734, 25, - 2707, + 2733, 5, ], ], From 0dca9c247182d7fc34aae7964c0856186e7d1f42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Markb=C3=A5ge?= Date: Mon, 21 Jul 2025 13:22:10 -0400 Subject: [PATCH 2/3] [Flight] Use the Promise of the first await even if that is cut off (#33948) We need a "value" to represent the I/O that was loaded. We don't normally actually use the Promise at the callsite that started the I/O because that's usually deep inside internals. Instead we override the value of the I/O entry with the Promise that was first awaited in user space. This means that you could potentially have different values depending on if multiple things await the same I/O. We just take one of them. (Maybe we should actually just write the first user space awaited Promise as the I/O entry? This might instead have other implications like less deduping.) When you pass a Promise forward, we may skip the awaits that happened in earlier components because they're not part of the currently rendering component. That's mainly for the stack and time stamps though. The value is still probably conceptually the best value because it represents the I/O value as far user space is concerned. This writes the I/O early with the first await we find in user space even if we're not going to use that particular await for the stack. --- packages/react-server/src/ReactFlightServer.js | 15 +++++++++++++++ .../__tests__/ReactFlightAsyncDebugInfo-test.js | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/react-server/src/ReactFlightServer.js b/packages/react-server/src/ReactFlightServer.js index 7f3f5bca65ecb..2ba4c0dee8277 100644 --- a/packages/react-server/src/ReactFlightServer.js +++ b/packages/react-server/src/ReactFlightServer.js @@ -2327,6 +2327,21 @@ function visitAsyncNode( // then this gets I/O ignored, which is what we want because it means it was likely // just part of a previous component's rendering. match = ioNode; + if ( + node.stack !== null && + isAwaitInUserspace(request, node.stack) + ) { + // This await happened earlier but it was done in user space. This is the first time + // that user space saw the value of the I/O. We know we'll emit the I/O eventually + // but if we do it now we can override the promise value of the I/O entry to the + // one observed by this await which will be a better value than the internals of + // the I/O entry. If it's still alive that is. + const promise = + awaited.promise === null ? undefined : awaited.promise.deref(); + if (promise !== undefined) { + serializeIONode(request, ioNode, awaited.promise); + } + } } else { if ( node.stack === null || diff --git a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js index cacdb4b4cc2ac..27357809015b8 100644 --- a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js +++ b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js @@ -491,7 +491,7 @@ describe('ReactFlightAsyncDebugInfo', () => { ], "start": 0, "value": { - "status": "halted", + "value": undefined, }, }, "env": "Server", From ac7da9d46dbfacc6a2f5072a1b2fc9f432a857b9 Mon Sep 17 00:00:00 2001 From: "Sebastian \"Sebbie\" Silbermann" Date: Mon, 21 Jul 2025 19:53:58 +0200 Subject: [PATCH 3/3] [Flight] Make it more obvious what the short name in the I/O description represents (#33944) --- .../src/ReactFlightPerformanceTrack.js | 8 +- .../ReactFlightAsyncDebugInfo-test.js | 656 ++++++++++-------- 2 files changed, 387 insertions(+), 277 deletions(-) diff --git a/packages/react-client/src/ReactFlightPerformanceTrack.js b/packages/react-client/src/ReactFlightPerformanceTrack.js index 8022a5ad7768f..0832497d9445c 100644 --- a/packages/react-client/src/ReactFlightPerformanceTrack.js +++ b/packages/react-client/src/ReactFlightPerformanceTrack.js @@ -412,7 +412,13 @@ function getIOShortName( const slashIdx = description.lastIndexOf('/', queryIdx - 1); if (queryIdx - slashIdx < descMaxLength) { // This may now be either the file name or the host. - desc = ' (' + description.slice(slashIdx + 1, queryIdx) + ')'; + // Include the slash to make it more obvious what we trimmed. + desc = ' (…' + description.slice(slashIdx, queryIdx) + ')'; + } else { + // cut out the middle to not exceed the max length + const start = description.slice(slashIdx, slashIdx + descMaxLength / 2); + const end = description.slice(queryIdx - descMaxLength / 2, queryIdx); + desc = ' (' + (slashIdx > 0 ? '…' : '') + start + '…' + end + ')'; } } } diff --git a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js index 27357809015b8..68c3431adc0c7 100644 --- a/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js +++ b/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js @@ -1,3 +1,6 @@ +/** + * @jest-environment node + */ 'use strict'; const path = require('path'); @@ -10,6 +13,7 @@ let cache; let ReactServerDOMServer; let ReactServerDOMClient; let Stream; +let observer; const streamOptions = { objectMode: true, @@ -146,6 +150,11 @@ describe('ReactFlightAsyncDebugInfo', () => { Stream = require('stream'); }); + afterEach(() => { + observer?.disconnect(); + observer = undefined; + }); + function finishLoadingStream(readable) { return new Promise(resolve => { if (readable.readableEnded) { @@ -233,9 +242,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 202, + 211, 109, - 182, + 191, 50, ], ], @@ -257,9 +266,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 202, + 211, 109, - 182, + 191, 50, ], ], @@ -268,25 +277,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 184, + 193, 13, - 183, + 192, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 191, + 200, 26, - 190, + 199, 5, ], ], @@ -305,9 +314,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 202, + 211, 109, - 182, + 191, 50, ], ], @@ -316,17 +325,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 184, + 193, 13, - 183, + 192, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 191, + 200, 26, - 190, + 199, 5, ], ], @@ -351,9 +360,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 202, + 211, 109, - 182, + 191, 50, ], ], @@ -362,25 +371,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 185, + 194, 21, - 183, + 192, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 191, + 200, 20, - 190, + 199, 5, ], ], @@ -399,9 +408,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 202, + 211, 109, - 182, + 191, 50, ], ], @@ -410,17 +419,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 186, + 195, 21, - 183, + 192, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 191, + 200, 20, - 190, + 199, 5, ], ], @@ -440,9 +449,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 193, + 202, 60, - 190, + 199, 5, ], ], @@ -464,9 +473,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 202, + 211, 109, - 182, + 191, 50, ], ], @@ -475,17 +484,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 185, + 194, 21, - 183, + 192, 5, ], ], @@ -504,9 +513,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 193, + 202, 60, - 190, + 199, 5, ], ], @@ -515,9 +524,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "InnerComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 199, + 208, 35, - 196, + 205, 5, ], ], @@ -533,6 +542,101 @@ describe('ReactFlightAsyncDebugInfo', () => { } }); + it('adds a description to I/O', async () => { + async function getData(url) { + // just wait a macrotask for this call to get picked up + await new Promise(resolve => { + setTimeout(() => { + const fakeResponse = {url}; + resolve(fakeResponse); + }, 1); + }); + } + + async function Component() { + await getData('http://github.com/facebook/react/pulls'); + await getData('http://github.com/facebook/react/pulls/'); + await getData( + 'https://this-is-a-very-long-domain-name-what-happens.app/test', + ); + await getData( + 'https://github.com/facebook/react/commit/75897c2dcd1dd3a6ca46284dd37e13d22b4b16b4', + ); + await getData('/this-is-a-very-long-directory-name-what-happens/'); + await getData('/this-is-not'); + return 'Hi, Sebbie'; + } + + const stream = ReactServerDOMServer.renderToPipeableStream(); + + const readable = new Stream.PassThrough(streamOptions); + + const result = ReactServerDOMClient.createFromNodeStream( + readable, + { + moduleMap: {}, + moduleLoading: {}, + }, + {replayConsoleLogs: true}, + ); + stream.pipe(readable); + + expect(await result).toBe('Hi, Sebbie'); + + if ( + __DEV__ && + gate( + flags => + flags.enableComponentPerformanceTrack && flags.enableAsyncDebugInfo, + ) + ) { + let gotEntries; + const hasEntries = new Promise(resolve => { + gotEntries = resolve; + }); + const entries = []; + observer = new PerformanceObserver(list => { + // eslint-disable-next-line no-for-of-loops/no-for-of-loops + for (const entry of list.getEntries()) { + const {name} = entry; + entries.push({name}); + } + gotEntries(); + }).observe({type: 'measure'}); + + await hasEntries; + await finishLoadingStream(readable); + + expect(entries).toMatchInlineSnapshot(` + [ + { + "name": "Component", + }, + { + "name": "await getData (…/pulls)", + }, + { + "name": "await getData (…/pulls)", + }, + { + "name": "await getData (…/test)", + }, + { + "name": "await getData (…/75897c2dcd…13d22b4b16b4)", + }, + { + "name": "await getData (/this-is-a-…what-happens)", + }, + { + "name": "await getData (/this-is-not)", + }, + ] + `); + } else { + await finishLoadingStream(readable); + } + }); + it('can track async information when use()d', async () => { async function getData(text) { await delay(1); @@ -591,9 +695,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 555, + 659, 40, - 536, + 640, 49, ], [ @@ -623,9 +727,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 555, + 659, 40, - 536, + 640, 49, ], [ @@ -642,25 +746,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 538, + 642, 13, - 537, + 641, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 543, + 647, 36, - 542, + 646, 5, ], ], @@ -679,9 +783,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 555, + 659, 40, - 536, + 640, 49, ], [ @@ -698,17 +802,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 538, + 642, 13, - 537, + 641, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 543, + 647, 36, - 542, + 646, 5, ], ], @@ -728,9 +832,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 545, + 649, 60, - 542, + 646, 5, ], ], @@ -749,9 +853,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 555, + 659, 40, - 536, + 640, 49, ], [ @@ -768,25 +872,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 538, + 642, 13, - 537, + 641, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 544, + 648, 22, - 542, + 646, 5, ], ], @@ -805,9 +909,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 545, + 649, 60, - 542, + 646, 5, ], ], @@ -816,9 +920,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "InnerComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 551, + 655, 40, - 548, + 652, 5, ], ], @@ -881,9 +985,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 850, + 954, 109, - 837, + 941, 80, ], ], @@ -902,9 +1006,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 850, + 954, 109, - 837, + 941, 80, ], ], @@ -921,9 +1025,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 850, + 954, 109, - 837, + 941, 80, ], ], @@ -983,9 +1087,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 952, + 1056, 109, - 943, + 1047, 94, ], ], @@ -1056,9 +1160,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1025, + 1129, 109, - 1001, + 1105, 50, ], ], @@ -1140,9 +1244,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1109, + 1213, 109, - 1092, + 1196, 63, ], ], @@ -1159,17 +1263,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "fetchThirdParty", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 167, + 176, 40, - 165, + 174, 3, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1105, + 1209, 24, - 1104, + 1208, 5, ], ], @@ -1191,17 +1295,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "fetchThirdParty", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 167, + 176, 40, - 165, + 174, 3, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1105, + 1209, 24, - 1104, + 1208, 5, ], ], @@ -1210,25 +1314,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1094, + 1198, 13, - 1093, + 1197, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1100, + 1204, 24, - 1099, + 1203, 5, ], ], @@ -1247,17 +1351,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "fetchThirdParty", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 167, + 176, 40, - 165, + 174, 3, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1105, + 1209, 24, - 1104, + 1208, 5, ], ], @@ -1266,17 +1370,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1094, + 1198, 13, - 1093, + 1197, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1100, + 1204, 24, - 1099, + 1203, 5, ], ], @@ -1301,17 +1405,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "fetchThirdParty", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 167, + 176, 40, - 165, + 174, 3, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1105, + 1209, 24, - 1104, + 1208, 5, ], ], @@ -1320,25 +1424,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1095, + 1199, 13, - 1093, + 1197, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1100, + 1204, 18, - 1099, + 1203, 5, ], ], @@ -1357,17 +1461,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "fetchThirdParty", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 167, + 176, 40, - 165, + 174, 3, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1105, + 1209, 24, - 1104, + 1208, 5, ], ], @@ -1376,17 +1480,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1095, + 1199, 13, - 1093, + 1197, 5, ], [ "ThirdPartyComponent", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1100, + 1204, 18, - 1099, + 1203, 5, ], ], @@ -1461,9 +1565,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1425, + 1529, 40, - 1408, + 1512, 62, ], [ @@ -1493,9 +1597,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1425, + 1529, 40, - 1408, + 1512, 62, ], [ @@ -1512,25 +1616,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1410, + 1514, 13, - 1409, + 1513, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1420, + 1524, 13, - 1419, + 1523, 5, ], ], @@ -1549,9 +1653,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1425, + 1529, 40, - 1408, + 1512, 62, ], [ @@ -1568,17 +1672,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1410, + 1514, 13, - 1409, + 1513, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1420, + 1524, 13, - 1419, + 1523, 5, ], ], @@ -1598,9 +1702,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1421, + 1525, 60, - 1419, + 1523, 5, ], ], @@ -1622,9 +1726,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1425, + 1529, 40, - 1408, + 1512, 62, ], [ @@ -1641,25 +1745,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1410, + 1514, 13, - 1409, + 1513, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1420, + 1524, 13, - 1419, + 1523, 5, ], ], @@ -1678,9 +1782,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1421, + 1525, 60, - 1419, + 1523, 5, ], ], @@ -1689,9 +1793,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Child", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1415, + 1519, 28, - 1414, + 1518, 5, ], ], @@ -1762,9 +1866,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1726, + 1830, 40, - 1710, + 1814, 57, ], [ @@ -1794,9 +1898,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1726, + 1830, 40, - 1710, + 1814, 57, ], [ @@ -1813,25 +1917,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1712, + 1816, 13, - 1711, + 1815, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1721, + 1825, 23, - 1720, + 1824, 5, ], ], @@ -1850,9 +1954,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1726, + 1830, 40, - 1710, + 1814, 57, ], [ @@ -1869,17 +1973,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1712, + 1816, 13, - 1711, + 1815, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1721, + 1825, 23, - 1720, + 1824, 5, ], ], @@ -1899,9 +2003,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1722, + 1826, 60, - 1720, + 1824, 5, ], ], @@ -1920,9 +2024,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1726, + 1830, 40, - 1710, + 1814, 57, ], [ @@ -1939,25 +2043,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1712, + 1816, 13, - 1711, + 1815, 25, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1721, + 1825, 23, - 1720, + 1824, 5, ], ], @@ -1971,9 +2075,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1722, + 1826, 60, - 1720, + 1824, 5, ], ], @@ -2046,9 +2150,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2010, + 2114, 40, - 1992, + 2096, 80, ], [ @@ -2078,9 +2182,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2010, + 2114, 40, - 1992, + 2096, 80, ], [ @@ -2097,25 +2201,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "delayTrice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2000, + 2104, 13, - 1998, + 2102, 5, ], [ "Bar", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2005, + 2109, 13, - 2004, + 2108, 5, ], ], @@ -2134,9 +2238,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2010, + 2114, 40, - 1992, + 2096, 80, ], [ @@ -2153,17 +2257,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTrice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2000, + 2104, 13, - 1998, + 2102, 5, ], [ "Bar", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2005, + 2109, 13, - 2004, + 2108, 5, ], ], @@ -2185,9 +2289,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2010, + 2114, 40, - 1992, + 2096, 80, ], [ @@ -2204,33 +2308,33 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "delayTwice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1994, + 2098, 13, - 1993, + 2097, 5, ], [ "delayTrice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1999, + 2103, 15, - 1998, + 2102, 5, ], [ "Bar", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2005, + 2109, 13, - 2004, + 2108, 5, ], ], @@ -2249,9 +2353,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2010, + 2114, 40, - 1992, + 2096, 80, ], [ @@ -2268,25 +2372,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTwice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1994, + 2098, 13, - 1993, + 2097, 5, ], [ "delayTrice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1999, + 2103, 15, - 1998, + 2102, 5, ], [ "Bar", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2005, + 2109, 13, - 2004, + 2108, 5, ], ], @@ -2308,9 +2412,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2010, + 2114, 40, - 1992, + 2096, 80, ], [ @@ -2327,17 +2431,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "delayTwice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1995, + 2099, 13, - 1993, + 2097, 5, ], ], @@ -2356,9 +2460,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2010, + 2114, 40, - 1992, + 2096, 80, ], [ @@ -2375,9 +2479,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delayTwice", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 1995, + 2099, 13, - 1993, + 2097, 5, ], ], @@ -2438,9 +2542,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2407, + 2511, 109, - 2396, + 2500, 58, ], ], @@ -2462,9 +2566,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2407, + 2511, 109, - 2396, + 2500, 58, ], ], @@ -2473,25 +2577,25 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2398, + 2502, 14, - 2397, + 2501, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2404, + 2508, 20, - 2403, + 2507, 5, ], ], @@ -2510,9 +2614,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2407, + 2511, 109, - 2396, + 2500, 58, ], ], @@ -2521,17 +2625,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "getData", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2398, + 2502, 23, - 2397, + 2501, 5, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2404, + 2508, 20, - 2403, + 2507, 5, ], ], @@ -2598,9 +2702,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2562, + 2666, 40, - 2550, + 2654, 56, ], [ @@ -2630,9 +2734,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2562, + 2666, 40, - 2550, + 2654, 56, ], [ @@ -2649,17 +2753,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "delay", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 160, + 169, 12, - 159, + 168, 3, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2558, + 2662, 20, - 2557, + 2661, 5, ], ], @@ -2678,9 +2782,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2562, + 2666, 40, - 2550, + 2654, 56, ], [ @@ -2697,9 +2801,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2558, + 2662, 20, - 2557, + 2661, 5, ], ], @@ -2780,9 +2884,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2739, + 2843, 40, - 2718, + 2822, 42, ], [ @@ -2812,9 +2916,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2739, + 2843, 40, - 2718, + 2822, 42, ], [ @@ -2831,17 +2935,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2725, + 2829, 15, - 2724, + 2828, 15, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2734, + 2838, 19, - 2733, + 2837, 5, ], ], @@ -2860,9 +2964,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2739, + 2843, 40, - 2718, + 2822, 42, ], [ @@ -2879,17 +2983,17 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2725, + 2829, 15, - 2724, + 2828, 15, ], [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2734, + 2838, 19, - 2733, + 2837, 5, ], ], @@ -2911,9 +3015,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2739, + 2843, 40, - 2718, + 2822, 42, ], [ @@ -2930,9 +3034,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2734, + 2838, 25, - 2733, + 2837, 5, ], ], @@ -2951,9 +3055,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Object.", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2739, + 2843, 40, - 2718, + 2822, 42, ], [ @@ -2970,9 +3074,9 @@ describe('ReactFlightAsyncDebugInfo', () => { [ "Component", "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js", - 2734, + 2838, 25, - 2733, + 2837, 5, ], ],