Home / File/ installHook.js — react Source File

installHook.js — react Source File

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

File javascript BabelCompiler Validation 6 imports 3 functions

Entity Profile

Dependency Diagram

graph LR
  1fa3327b_cae1_5cf2_9f33_dbea00aaa3ee["installHook.js"]
  59285050_8b13_751c_3b39_93ecdb0aa385["messages.js"]
  1fa3327b_cae1_5cf2_9f33_dbea00aaa3ee --> 59285050_8b13_751c_3b39_93ecdb0aa385
  b9e76cd2_712c_d143_3531_87d4f39c2083["postMessage"]
  1fa3327b_cae1_5cf2_9f33_dbea00aaa3ee --> b9e76cd2_712c_d143_3531_87d4f39c2083
  40bf6909_04ae_bfb6_965f_14cfe98b94de["types"]
  1fa3327b_cae1_5cf2_9f33_dbea00aaa3ee --> 40bf6909_04ae_bfb6_965f_14cfe98b94de
  aec7978f_0a19_ba93_de9e_ac8cf5ddc74b["types"]
  1fa3327b_cae1_5cf2_9f33_dbea00aaa3ee --> aec7978f_0a19_ba93_de9e_ac8cf5ddc74b
  bdc0f51e_4952_e5a8_d3d8_502a65e31437["hook"]
  1fa3327b_cae1_5cf2_9f33_dbea00aaa3ee --> bdc0f51e_4952_e5a8_d3d8_502a65e31437
  627bb742_21aa_b4fd_fe2d_4a963a1f9278["utils"]
  1fa3327b_cae1_5cf2_9f33_dbea00aaa3ee --> 627bb742_21aa_b4fd_fe2d_4a963a1f9278
  style 1fa3327b_cae1_5cf2_9f33_dbea00aaa3ee fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/** @flow */

import type {UnknownMessageEvent} from './messages';
import type {DevToolsHookSettings} from 'react-devtools-shared/src/backend/types';
import type {ComponentFilter} from 'react-devtools-shared/src/frontend/types';

import {installHook} from 'react-devtools-shared/src/hook';
import {
  getIfReloadedAndProfiling,
  getProfilingSettings,
} from 'react-devtools-shared/src/utils';
import {postMessage} from './messages';

let resolveHookSettingsInjection: (settings: DevToolsHookSettings) => void;
let resolveComponentFiltersInjection: (filters: Array<ComponentFilter>) => void;

function messageListener(event: UnknownMessageEvent) {
  if (event.source !== window) {
    return;
  }

  if (event.data.source === 'react-devtools-settings-injector') {
    const payload = event.data.payload;
    // In case handshake message was sent prior to hookSettingsInjector execution
    // We can't guarantee order
    if (payload.handshake) {
      postMessage({
        source: 'react-devtools-hook-installer',
        payload: {handshake: true},
      });
    } else if (payload.hookSettings) {
      window.removeEventListener('message', messageListener);
      resolveHookSettingsInjection(payload.hookSettings);
      resolveComponentFiltersInjection(payload.componentFilters);
    }
  }
}

// Avoid double execution
if (!window.hasOwnProperty('__REACT_DEVTOOLS_GLOBAL_HOOK__')) {
  const hookSettingsPromise = new Promise<DevToolsHookSettings>(resolve => {
    resolveHookSettingsInjection = resolve;
  });
  const componentFiltersPromise = new Promise<Array<ComponentFilter>>(
    resolve => {
      resolveComponentFiltersInjection = resolve;
    },
  );

  window.addEventListener('message', messageListener);
  postMessage({
    source: 'react-devtools-hook-installer',
    payload: {handshake: true},
  });

  const shouldStartProfiling = getIfReloadedAndProfiling();
  const profilingSettings = getProfilingSettings();
  // Can't delay hook installation, inject settings lazily
  installHook(
    window,
    componentFiltersPromise,
    hookSettingsPromise,
    shouldStartProfiling,
    profilingSettings,
  );

  // Detect React
  window.__REACT_DEVTOOLS_GLOBAL_HOOK__.on(
    'renderer',
    function ({reactBuildType}) {
      window.postMessage(
        {
          source: 'react-devtools-hook',
          payload: {
            type: 'react-renderer-attached',
            reactBuildType,
          },
        },
        '*',
      );
    },
  );
}

Domain

Subdomains

Dependencies

Frequently Asked Questions

What does installHook.js do?
installHook.js is a source file in the react codebase, written in javascript. It belongs to the BabelCompiler domain, Validation subdomain.
What functions are defined in installHook.js?
installHook.js defines 3 function(s): componentFiltersPromise, hookSettingsPromise, messageListener.
What does installHook.js depend on?
installHook.js imports 6 module(s): hook, messages.js, postMessage, types, types, utils.
Where is installHook.js in the architecture?
installHook.js is located at packages/react-devtools-extensions/src/contentScripts/installHook.js (domain: BabelCompiler, subdomain: Validation, directory: packages/react-devtools-extensions/src/contentScripts).

Analyze Your Own Codebase

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

Try Supermodel Free