Home / Function/ compareDeps() — react Function Reference

compareDeps() — react Function Reference

Architecture documentation for the compareDeps() function in ValidatePreservedManualMemoization.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  7573a044_2ed6_cf56_fa09_ada521a0c1c2["compareDeps()"]
  24b95621_3482_c406_4b63_5b9d9e94b5af["ValidatePreservedManualMemoization.ts"]
  7573a044_2ed6_cf56_fa09_ada521a0c1c2 -->|defined in| 24b95621_3482_c406_4b63_5b9d9e94b5af
  6216fd83_7c2d_7eac_782b_6a1697ce7175["validateInferredDep()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 7573a044_2ed6_cf56_fa09_ada521a0c1c2
  style 7573a044_2ed6_cf56_fa09_ada521a0c1c2 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts lines 161–212

function compareDeps(
  inferred: ManualMemoDependency,
  source: ManualMemoDependency,
): CompareDependencyResult {
  const rootsEqual =
    (inferred.root.kind === 'Global' &&
      source.root.kind === 'Global' &&
      inferred.root.identifierName === source.root.identifierName) ||
    (inferred.root.kind === 'NamedLocal' &&
      source.root.kind === 'NamedLocal' &&
      inferred.root.value.identifier.id === source.root.value.identifier.id);
  if (!rootsEqual) {
    return CompareDependencyResult.RootDifference;
  }

  let isSubpath = true;
  for (let i = 0; i < Math.min(inferred.path.length, source.path.length); i++) {
    if (inferred.path[i].property !== source.path[i].property) {
      isSubpath = false;
      break;
    } else if (inferred.path[i].optional !== source.path[i].optional) {
      /**
       * The inferred path must be at least as precise as the manual path:
       * if the inferred path is optional, then the source path must have
       * been optional too.
       */
      return CompareDependencyResult.PathDifference;
    }
  }

  if (
    isSubpath &&
    (source.path.length === inferred.path.length ||
      (inferred.path.length >= source.path.length &&
        !inferred.path.some(token => token.property === 'current')))
  ) {
    return CompareDependencyResult.Ok;
  } else {
    if (isSubpath) {
      if (
        source.path.some(token => token.property === 'current') ||
        inferred.path.some(token => token.property === 'current')
      ) {
        return CompareDependencyResult.RefAccessDifference;
      } else {
        return CompareDependencyResult.Subpath;
      }
    } else {
      return CompareDependencyResult.PathDifference;
    }
  }
}

Domain

Subdomains

Frequently Asked Questions

What does compareDeps() do?
compareDeps() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts.
Where is compareDeps() defined?
compareDeps() is defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts at line 161.
What calls compareDeps()?
compareDeps() is called by 1 function(s): validateInferredDep.

Analyze Your Own Codebase

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

Try Supermodel Free