Home / Function/ parseSourceAST() — react Function Reference

parseSourceAST() — react Function Reference

Architecture documentation for the parseSourceAST() function in parseSourceAndMetadata.js from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  9d4ba273_e848_2a3f_3413_5c52ec3c7da7["parseSourceAST()"]
  76da1f28_5fe1_2c37_5657_67756acc6f55["parseSourceAndMetadata.js"]
  9d4ba273_e848_2a3f_3413_5c52ec3c7da7 -->|defined in| 76da1f28_5fe1_2c37_5657_67756acc6f55
  fba84d46_f44f_7ea7_9af3_a0121e3e1415["parseSourceAndMetadata()"]
  fba84d46_f44f_7ea7_9af3_a0121e3e1415 -->|calls| 9d4ba273_e848_2a3f_3413_5c52ec3c7da7
  e143ca4a_ec05_68bf_1723_c70d5b1ab460["areSourceMapsAppliedToErrors()"]
  9d4ba273_e848_2a3f_3413_5c52ec3c7da7 -->|calls| e143ca4a_ec05_68bf_1723_c70d5b1ab460
  31b4a475_0699_69a6_a66b_1b98c50a5785["hasHookMap()"]
  9d4ba273_e848_2a3f_3413_5c52ec3c7da7 -->|calls| 31b4a475_0699_69a6_a66b_1b98c50a5785
  style 9d4ba273_e848_2a3f_3413_5c52ec3c7da7 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/react-devtools-shared/src/hooks/parseHookNames/parseSourceAndMetadata.js lines 222–381

function parseSourceAST(
  locationKeyToHookSourceAndMetadata: LocationKeyToHookSourceAndMetadata,
  locationKeyToHookParsedMetadata: LocationKeyToHookParsedMetadata,
): void {
  locationKeyToHookSourceAndMetadata.forEach(
    (hookSourceAndMetadata, locationKey) => {
      const hookParsedMetadata =
        locationKeyToHookParsedMetadata.get(locationKey);
      if (hookParsedMetadata == null) {
        throw Error(`Expected to find HookParsedMetadata for "${locationKey}"`);
      }

      if (hookParsedMetadata.originalSourceAST !== null) {
        // Use cached metadata.
        return;
      }

      if (
        hookParsedMetadata.originalSourceURL != null &&
        hookParsedMetadata.originalSourceCode != null &&
        hookParsedMetadata.originalSourceColumnNumber != null &&
        hookParsedMetadata.originalSourceLineNumber != null
      ) {
        // Use cached metadata.
        return;
      }

      const {lineNumber, columnNumber} = hookSourceAndMetadata.hookSource;
      if (lineNumber == null || columnNumber == null) {
        throw Error('Hook source code location not found.');
      }

      const {metadataConsumer, sourceMapConsumer} = hookParsedMetadata;
      const runtimeSourceCode =
        ((hookSourceAndMetadata.runtimeSourceCode: any): string);
      let hasHookMap = false;
      let originalSourceURL;
      let originalSourceCode;
      let originalSourceColumnNumber;
      let originalSourceLineNumber;
      if (areSourceMapsAppliedToErrors() || sourceMapConsumer === null) {
        // Either the current environment automatically applies source maps to errors,
        // or the current code had no source map to begin with.
        // Either way, we don't need to convert the Error stack frame locations.
        originalSourceColumnNumber = columnNumber;
        originalSourceLineNumber = lineNumber;
        // There's no source map to parse here so we can just parse the original source itself.
        originalSourceCode = runtimeSourceCode;
        // TODO (named hooks) This mixes runtimeSourceURLs with source mapped URLs in the same cache key space.
        // Namespace them?
        originalSourceURL = hookSourceAndMetadata.runtimeSourceURL;
      } else {
        const {column, line, sourceContent, sourceURL} =
          sourceMapConsumer.originalPositionFor({
            columnNumber,
            lineNumber,
          });
        if (sourceContent === null || sourceURL === null) {
          throw Error(
            `Could not find original source for line:${lineNumber} and column:${columnNumber}`,
          );
        }

        originalSourceColumnNumber = column;
        originalSourceLineNumber = line;
        originalSourceCode = sourceContent;
        originalSourceURL = sourceURL;
      }

      hookParsedMetadata.originalSourceCode = originalSourceCode;
      hookParsedMetadata.originalSourceURL = originalSourceURL;
      hookParsedMetadata.originalSourceLineNumber = originalSourceLineNumber;
      hookParsedMetadata.originalSourceColumnNumber =
        originalSourceColumnNumber;

      if (
        metadataConsumer != null &&
        metadataConsumer.hasHookMap(originalSourceURL)
      ) {
        hasHookMap = true;
      }

Domain

Subdomains

Frequently Asked Questions

What does parseSourceAST() do?
parseSourceAST() is a function in the react codebase, defined in packages/react-devtools-shared/src/hooks/parseHookNames/parseSourceAndMetadata.js.
Where is parseSourceAST() defined?
parseSourceAST() is defined in packages/react-devtools-shared/src/hooks/parseHookNames/parseSourceAndMetadata.js at line 222.
What does parseSourceAST() call?
parseSourceAST() calls 2 function(s): areSourceMapsAppliedToErrors, hasHookMap.
What calls parseSourceAST()?
parseSourceAST() is called by 1 function(s): parseSourceAndMetadata.

Analyze Your Own Codebase

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

Try Supermodel Free