Home / File/ registerDevToolsEventLogger.js — react Source File

registerDevToolsEventLogger.js — react Source File

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

File javascript BabelCompiler Validation 2 imports 2 functions

Entity Profile

Dependency Diagram

graph LR
  9fcc0f85_da91_af3b_b9f1_df70d15dc6a8["registerDevToolsEventLogger.js"]
  2b832bf7_5b5b_7f08_2faa_1e7c8d8acc6d["Logger"]
  9fcc0f85_da91_af3b_b9f1_df70d15dc6a8 --> 2b832bf7_5b5b_7f08_2faa_1e7c8d8acc6d
  ae1017d8_c18a_3ecd_18f4_bf7a64bbd91a["react-devtools-feature-flags"]
  9fcc0f85_da91_af3b_b9f1_df70d15dc6a8 --> ae1017d8_c18a_3ecd_18f4_bf7a64bbd91a
  style 9fcc0f85_da91_af3b_b9f1_df70d15dc6a8 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 strict-local
 */

import type {LoggerEvent} from 'react-devtools-shared/src/Logger';

import {registerEventLogger} from 'react-devtools-shared/src/Logger';
import {enableLogger} from 'react-devtools-feature-flags';

let currentLoggingIFrame = null;
let currentSessionId = null;
let missedEvents: Array<LoggerEvent> = [];

type LoggerContext = {
  page_url: ?string,
};

export function registerDevToolsEventLogger(
  surface: string,
  fetchAdditionalContext?:
    | (() => LoggerContext)
    | (() => Promise<LoggerContext>),
): void {
  async function logEvent(event: LoggerEvent) {
    if (enableLogger) {
      if (currentLoggingIFrame != null && currentSessionId != null) {
        const {metadata, ...eventWithoutMetadata} = event;
        const additionalContext: LoggerContext | {} =
          fetchAdditionalContext != null ? await fetchAdditionalContext() : {};

        currentLoggingIFrame?.contentWindow?.postMessage(
          {
            source: 'react-devtools-logging',
            event: eventWithoutMetadata,
            context: {
              ...additionalContext,
              metadata: metadata != null ? JSON.stringify(metadata) : '',
              session_id: currentSessionId,
              surface,
              version: process.env.DEVTOOLS_VERSION,
            },
          },
          '*',
        );
      } else {
        missedEvents.push(event);
      }
    }
  }

  function handleLoggingIFrameLoaded(iframe: HTMLIFrameElement) {
    currentLoggingIFrame = iframe;

    if (missedEvents.length > 0) {
      missedEvents.forEach(event => logEvent(event));
      missedEvents = [];
    }
  }

  // If logger is enabled, register a logger that captures logged events
  // and render iframe where the logged events will be reported to
  if (enableLogger) {
    const loggingUrl = process.env.LOGGING_URL;
    const body = document.body;

    if (
      typeof loggingUrl === 'string' &&
      loggingUrl.length > 0 &&
      body != null &&
      currentLoggingIFrame == null
    ) {
      registerEventLogger(logEvent);
      currentSessionId = window.crypto.randomUUID();

      const iframe = document.createElement('iframe');

      iframe.onload = () => handleLoggingIFrameLoaded(iframe);
      iframe.src = loggingUrl;

      body.appendChild(iframe);
    }
  }
}

Domain

Subdomains

Dependencies

  • Logger
  • react-devtools-feature-flags

Frequently Asked Questions

What does registerDevToolsEventLogger.js do?
registerDevToolsEventLogger.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 registerDevToolsEventLogger.js?
registerDevToolsEventLogger.js defines 2 function(s): iframe, registerDevToolsEventLogger.
What does registerDevToolsEventLogger.js depend on?
registerDevToolsEventLogger.js imports 2 module(s): Logger, react-devtools-feature-flags.
Where is registerDevToolsEventLogger.js in the architecture?
registerDevToolsEventLogger.js is located at packages/react-devtools-shared/src/registerDevToolsEventLogger.js (domain: BabelCompiler, subdomain: Validation, directory: packages/react-devtools-shared/src).

Analyze Your Own Codebase

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

Try Supermodel Free