2515
`);
2516
}
2517
});
2518
+
2519
+ it('can track IO in third-party code', async () => {
2520
+ async function thirdParty(endpoint) {
2521
+ return new Promise(resolve => {
2522
+ setTimeout(() => {
2523
+ resolve('third-party ' + endpoint);
2524
+ }, 10);
2525
+ }).then(async value => {
2526
+ await new Promise(resolve => {
2527
+ setTimeout(resolve, 10);
2528
+ });
2529
+
2530
+ return value;
2531
+ });
2532
+ }
2533
+
2534
+ async function Component() {
2535
+ const value = await thirdParty('hi');
2536
+ return value;
2537
+ }
2538
+
2539
+ const stream = ReactServerDOMServer.renderToPipeableStream(
2540
+ <Component />,
2541
+ {},
2542
+ {
2543
+ filterStackFrame(filename, functionName) {
2544
+ if (functionName === 'thirdParty') {
2545
+ return false;
2546
+ }
2547
+ return filterStackFrame(filename, functionName);
2548
+ },
2549
+ },
2550
+ );
2551
+
2552
+ const readable = new Stream.PassThrough(streamOptions);
2553
+
2554
+ const result = ReactServerDOMClient.createFromNodeStream(readable, {
2555
+ moduleMap: {},
2556
+ moduleLoading: {},
2557
+ });
2558
+ stream.pipe(readable);
2559
+
2560
+ expect(await result).toBe('third-party hi');
2561
+
2562
+ await finishLoadingStream(readable);
2563
+ if (
2564
+ __DEV__ &&
2565
+ gate(
2566
+ flags =>
2567
+ flags.enableComponentPerformanceTrack && flags.enableAsyncDebugInfo,
2568
+ )
2569
+ ) {
2570
+ expect(getDebugInfo(result)).toMatchInlineSnapshot(`
2571
+ [
2572
+ {
2573
+ "time": 0,
2574
+ },
2575
+ {
2576
+ "env": "Server",
2577
+ "key": null,
2578
+ "name": "Component",
2579
+ "props": {},
2580
+ "stack": [
2581
+ [
2582
+ "Object.<anonymous>",
2583
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2584
+ 2540,
2585
+ 40,
2586
+ 2519,
2587
+ 42,
2588
+ ],
2589
+ ],
2590
+ },
2591
+ {
2592
+ "time": 0,
2593
+ },
2594
+ {
2595
+ "awaited": {
2596
+ "end": 0,
2597
+ "env": "Server",
2598
+ "name": "",
2599
+ "owner": {
2600
+ "env": "Server",
2601
+ "key": null,
2602
+ "name": "Component",
2603
+ "props": {},
2604
+ "stack": [
2605
+ [
2606
+ "Object.<anonymous>",
2607
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2608
+ 2540,
2609
+ 40,
2610
+ 2519,
2611
+ 42,
2612
+ ],
2613
+ ],
2614
+ },
2615
+ "stack": [
2616
+ [
2617
+ "",
2618
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2619
+ 2526,
2620
+ 15,
2621
+ 2525,
2622
+ 15,
2623
+ ],
2624
+ [
2625
+ "Component",
2626
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2627
+ 2535,
2628
+ 19,
2629
+ 2534,
2630
+ 5,
2631
+ ],
2632
+ ],
2633
+ "start": 0,
2634
+ "value": {
2635
+ "value": undefined,
2636
+ },
2637
+ },
2638
+ "env": "Server",
2639
+ "owner": {
2640
+ "env": "Server",
2641
+ "key": null,
2642
+ "name": "Component",
2643
+ "props": {},
2644
+ "stack": [
2645
+ [
2646
+ "Object.<anonymous>",
2647
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2648
+ 2540,
2649
+ 40,
2650
+ 2519,
2651
+ 42,
2652
+ ],
2653
+ ],
2654
+ },
2655
+ "stack": [
2656
+ [
2657
+ "",
2658
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2659
+ 2526,
2660
+ 15,
2661
+ 2525,
2662
+ 15,
2663
+ ],
2664
+ [
2665
+ "Component",
2666
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2667
+ 2535,
2668
+ 19,
2669
+ 2534,
2670
+ 5,
2671
+ ],
2672
+ ],
2673
+ },
2674
+ {
2675
+ "time": 0,
2676
+ },
2677
+ {
2678
+ "awaited": {
2679
+ "end": 0,
2680
+ "env": "Server",
2681
+ "name": "thirdParty",
2682
+ "owner": {
2683
+ "env": "Server",
2684
+ "key": null,
2685
+ "name": "Component",
2686
+ "props": {},
2687
+ "stack": [
2688
+ [
2689
+ "Object.<anonymous>",
2690
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2691
+ 2540,
2692
+ 40,
2693
+ 2519,
2694
+ 42,
2695
+ ],
2696
+ ],
2697
+ },
2698
+ "stack": [
2699
+ [
2700
+ "Component",
2701
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2702
+ 2535,
2703
+ 25,
2704
+ 2534,
2705
+ 5,
2706
+ ],
2707
+ ],
2708
+ "start": 0,
2709
+ "value": {
2710
+ "value": "third-party hi",
2711
+ },
2712
+ },
2713
+ "env": "Server",
2714
+ "owner": {
2715
+ "env": "Server",
2716
+ "key": null,
2717
+ "name": "Component",
2718
+ "props": {},
2719
+ "stack": [
2720
+ [
2721
+ "Object.<anonymous>",
2722
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2723
+ 2540,
2724
+ 40,
2725
+ 2519,
2726
+ 42,
2727
+ ],
2728
+ ],
2729
+ },
2730
+ "stack": [
2731
+ [
2732
+ "Component",
2733
+ "/packages/react-server/src/__tests__/ReactFlightAsyncDebugInfo-test.js",
2734
+ 2535,
2735
+ 25,
2736
+ 2534,
2737
+ 5,
2738
+ ],
2739
+ ],
2740
+ },
2741
+ {
2742
+ "time": 0,
2743
+ },
2744
+ {
2745
+ "time": 0,
2746
+ },
2747
+ ]
2748
+ `);
2749
+ }
2750
+ });
2751
});