Home / File/ ReactSuspenseTestUtils.js — react Source File

ReactSuspenseTestUtils.js — react Source File

Architecture documentation for ReactSuspenseTestUtils.js, a javascript file in the react codebase. 2 imports, 0 dependents.

File javascript 2 imports

Entity Profile

Dependency Diagram

graph LR
  47c09a6f_afe7_253c_6774_4ff500229ed1["ReactSuspenseTestUtils.js"]
  42892443_e223_3da0_aeb9_e1b32a408fb0["ReactInternalTypes"]
  47c09a6f_afe7_253c_6774_4ff500229ed1 --> 42892443_e223_3da0_aeb9_e1b32a408fb0
  1c5695a6_6806_ba54_2074_efc779e66da4["ReactSharedInternals"]
  47c09a6f_afe7_253c_6774_4ff500229ed1 --> 1c5695a6_6806_ba54_2074_efc779e66da4
  style 47c09a6f_afe7_253c_6774_4ff500229ed1 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow
 */

import type {AsyncDispatcher} from 'react-reconciler/src/ReactInternalTypes';
import ReactSharedInternals from 'shared/ReactSharedInternals';

export function waitForSuspense<T>(fn: () => T): Promise<T> {
  const cache: Map<Function, mixed> = new Map();
  const testDispatcher: AsyncDispatcher = {
    getCacheForType<R>(resourceType: () => R): R {
      let entry: R | void = (cache.get(resourceType): any);
      if (entry === undefined) {
        entry = resourceType();
        // TODO: Warn if undefined?
        cache.set(resourceType, entry);
      }
      return entry;
    },
    cacheSignal(): null {
      return null;
    },
    getOwner(): null {
      return null;
    },
  };
  // Not using async/await because we don't compile it.
  return new Promise((resolve, reject) => {
    function retry() {
      const prevDispatcher = ReactSharedInternals.A;
      ReactSharedInternals.A = testDispatcher;
      try {
        const result = fn();
        resolve(result);
      } catch (thrownValue) {
        if (typeof thrownValue.then === 'function') {
          thrownValue.then(retry, retry);
        } else {
          reject(thrownValue);
        }
      } finally {
        ReactSharedInternals.A = prevDispatcher;
      }
    }
    retry();
  });
}

Dependencies

  • ReactInternalTypes
  • ReactSharedInternals

Frequently Asked Questions

What does ReactSuspenseTestUtils.js do?
ReactSuspenseTestUtils.js is a source file in the react codebase, written in javascript.
What does ReactSuspenseTestUtils.js depend on?
ReactSuspenseTestUtils.js imports 2 module(s): ReactInternalTypes, ReactSharedInternals.
Where is ReactSuspenseTestUtils.js in the architecture?
ReactSuspenseTestUtils.js is located at packages/react-suspense-test-utils/src/ReactSuspenseTestUtils.js (directory: packages/react-suspense-test-utils/src).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free