Home / File/ frontend.js — react Source File

frontend.js — react Source File

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

File javascript 6 imports

Entity Profile

Dependency Diagram

graph LR
  7d10adeb_e9ed_3604_192e_59bec7664aaa["frontend.js"]
  ac587885_e294_a1e9_b13f_5e7b920fdb42["react"]
  7d10adeb_e9ed_3604_192e_59bec7664aaa --> ac587885_e294_a1e9_b13f_5e7b920fdb42
  4077b620_5c59_61c2_0910_273f565da757["bridge"]
  7d10adeb_e9ed_3604_192e_59bec7664aaa --> 4077b620_5c59_61c2_0910_273f565da757
  baf70b0e_4867_b3ed_962a_e5c9ae820fef["store"]
  7d10adeb_e9ed_3604_192e_59bec7664aaa --> baf70b0e_4867_b3ed_962a_e5c9ae820fef
  ce034302_61e9_5cdc_95e6_1e120df583e4["DevTools"]
  7d10adeb_e9ed_3604_192e_59bec7664aaa --> ce034302_61e9_5cdc_95e6_1e120df583e4
  627bb742_21aa_b4fd_fe2d_4a963a1f9278["utils"]
  7d10adeb_e9ed_3604_192e_59bec7664aaa --> 627bb742_21aa_b4fd_fe2d_4a963a1f9278
  aec7978f_0a19_ba93_de9e_ac8cf5ddc74b["types"]
  7d10adeb_e9ed_3604_192e_59bec7664aaa --> aec7978f_0a19_ba93_de9e_ac8cf5ddc74b
  style 7d10adeb_e9ed_3604_192e_59bec7664aaa fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @flow */

import * as React from 'react';
import {forwardRef} from 'react';
import Bridge from 'react-devtools-shared/src/bridge';
import Store from 'react-devtools-shared/src/devtools/store';
import DevTools from 'react-devtools-shared/src/devtools/views/DevTools';
import {getSavedComponentFilters} from 'react-devtools-shared/src/utils';

import type {Wall} from 'react-devtools-shared/src/frontend/types';
import type {FrontendBridge} from 'react-devtools-shared/src/bridge';
import type {Props} from 'react-devtools-shared/src/devtools/views/DevTools';
import type {Config} from 'react-devtools-shared/src/devtools/store';

export function createStore(bridge: FrontendBridge, config?: Config): Store {
  return new Store(bridge, {
    checkBridgeProtocolCompatibility: true,
    supportsTraceUpdates: true,
    supportsTimeline: true,
    ...config,
  });
}

export function createBridge(contentWindow: any, wall?: Wall): FrontendBridge {
  if (wall == null) {
    wall = {
      listen(fn) {
        // $FlowFixMe[missing-local-annot]
        const onMessage = ({data}) => {
          fn(data);
        };
        window.addEventListener('message', onMessage);
        return () => {
          window.removeEventListener('message', onMessage);
        };
      },
      send(event: string, payload: any, transferable?: Array<any>) {
        contentWindow.postMessage({event, payload}, '*', transferable);
      },
    };
  }

  return (new Bridge(wall): FrontendBridge);
}

export function initialize(
  contentWindow: any,
  {
    bridge,
    store,
  }: {
    bridge?: FrontendBridge,
    store?: Store,
  } = {},
): component(...props: Props) {
  if (bridge == null) {
    bridge = createBridge(contentWindow);
  }

  // Type refinement.
  const frontendBridge = ((bridge: any): FrontendBridge);

  if (store == null) {
    store = createStore(frontendBridge);
  }

  const onGetSavedPreferences = () => {
    // This is the only message we're listening for,
    // so it's safe to cleanup after we've received it.
    frontendBridge.removeListener('getSavedPreferences', onGetSavedPreferences);

    const data = {
      componentFilters: getSavedComponentFilters(),
    };

    // The renderer interface can't read saved preferences directly,
    // because they are stored in localStorage within the context of the extension.
    // Instead it relies on the extension to pass them through.
    frontendBridge.send('savedPreferences', data);
  };

  frontendBridge.addListener('getSavedPreferences', onGetSavedPreferences);

  const ForwardRef = forwardRef<Props, mixed>((props, ref) => (
    <DevTools ref={ref} bridge={frontendBridge} store={store} {...props} />
  ));
  ForwardRef.displayName = 'DevTools';

  return ForwardRef;
}

Dependencies

  • DevTools
  • bridge
  • react
  • store
  • types
  • utils

Frequently Asked Questions

What does frontend.js do?
frontend.js is a source file in the react codebase, written in javascript.
What does frontend.js depend on?
frontend.js imports 6 module(s): DevTools, bridge, react, store, types, utils.
Where is frontend.js in the architecture?
frontend.js is located at packages/react-devtools-inline/src/frontend.js (directory: packages/react-devtools-inline/src).

Analyze Your Own Codebase

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

Try Supermodel Free