registerDevToolsEventLogger.js — react Source File
Architecture documentation for registerDevToolsEventLogger.js, a javascript file in the react codebase. 2 imports, 0 dependents.
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
Functions
Dependencies
- Logger
- react-devtools-feature-flags
Source
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