Home / Function/ validateInferredDep() — react Function Reference

validateInferredDep() — react Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  6216fd83_7c2d_7eac_782b_6a1697ce7175["validateInferredDep()"]
  24b95621_3482_c406_4b63_5b9d9e94b5af["ValidatePreservedManualMemoization.ts"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|defined in| 24b95621_3482_c406_4b63_5b9d9e94b5af
  7d870135_2212_e6ce_9c8d_5751aca84f6f["visitScope()"]
  7d870135_2212_e6ce_9c8d_5751aca84f6f -->|calls| 6216fd83_7c2d_7eac_782b_6a1697ce7175
  041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e
  7573a044_2ed6_cf56_fa09_ada521a0c1c2["compareDeps()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 7573a044_2ed6_cf56_fa09_ada521a0c1c2
  b42fd0ee_c076_ff19_9197_9e0ca92918f7["merge()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| b42fd0ee_c076_ff19_9197_9e0ca92918f7
  02303def_636f_c5b3_a751_1cf138fcea69["pushDiagnostic()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 02303def_636f_c5b3_a751_1cf138fcea69
  ac13f5c1_be17_dd7a_6bd3_66d91c46aadf["create()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| ac13f5c1_be17_dd7a_6bd3_66d91c46aadf
  9cc8d7c1_31b9_c406_4383_965a12142dd4["prettyPrintScopeDependency()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 9cc8d7c1_31b9_c406_4383_965a12142dd4
  7791fd4d_5296_2b3e_4771_a3069a4070ed["printManualMemoDependency()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 7791fd4d_5296_2b3e_4771_a3069a4070ed
  f04b57f7_ad71_01a6_bf26_abaf67e8da58["getCompareDependencyResultDescription()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| f04b57f7_ad71_01a6_bf26_abaf67e8da58
  1a2b7047_24c8_62d6_b328_5f07307d27ab["withDetails()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 1a2b7047_24c8_62d6_b328_5f07307d27ab
  8e8b7ee8_d3c2_f98d_17e1_c5ff5fff1940["map()"]
  6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 8e8b7ee8_d3c2_f98d_17e1_c5ff5fff1940
  style 6216fd83_7c2d_7eac_782b_6a1697ce7175 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts lines 231–316

function validateInferredDep(
  dep: ReactiveScopeDependency,
  temporaries: Map<IdentifierId, ManualMemoDependency>,
  declsWithinMemoBlock: Set<DeclarationId>,
  validDepsInMemoBlock: Array<ManualMemoDependency>,
  errorState: CompilerError,
  memoLocation: SourceLocation,
): void {
  let normalizedDep: ManualMemoDependency;
  const maybeNormalizedRoot = temporaries.get(dep.identifier.id);
  if (maybeNormalizedRoot != null) {
    normalizedDep = {
      root: maybeNormalizedRoot.root,
      path: [...maybeNormalizedRoot.path, ...dep.path],
      loc: maybeNormalizedRoot.loc,
    };
  } else {
    CompilerError.invariant(dep.identifier.name?.kind === 'named', {
      reason:
        'ValidatePreservedManualMemoization: expected scope dependency to be named',
      loc: GeneratedSource,
    });
    normalizedDep = {
      root: {
        kind: 'NamedLocal',
        value: {
          kind: 'Identifier',
          identifier: dep.identifier,
          loc: GeneratedSource,
          effect: Effect.Read,
          reactive: false,
        },
        constant: false,
      },
      path: [...dep.path],
      loc: GeneratedSource,
    };
  }
  for (const decl of declsWithinMemoBlock) {
    if (
      normalizedDep.root.kind === 'NamedLocal' &&
      decl === normalizedDep.root.value.identifier.declarationId
    ) {
      return;
    }
  }
  let errorDiagnostic: CompareDependencyResult | null = null;
  for (const originalDep of validDepsInMemoBlock) {
    const compareResult = compareDeps(normalizedDep, originalDep);
    if (compareResult === CompareDependencyResult.Ok) {
      return;
    } else {
      errorDiagnostic = merge(errorDiagnostic ?? compareResult, compareResult);
    }
  }
  errorState.pushDiagnostic(
    CompilerDiagnostic.create({
      category: ErrorCategory.PreserveManualMemo,
      reason: 'Existing memoization could not be preserved',
      description: [
        'React Compiler has skipped optimizing this component because the existing manual memoization could not be preserved. ',
        'The inferred dependencies did not match the manually specified dependencies, which could cause the value to change more or less frequently than expected. ',
        DEBUG ||
        // If the dependency is a named variable then we can report it. Otherwise only print in debug mode
        (dep.identifier.name != null && dep.identifier.name.kind === 'named')
          ? `The inferred dependency was \`${prettyPrintScopeDependency(
              dep,
            )}\`, but the source dependencies were [${validDepsInMemoBlock
              .map(dep => printManualMemoDependency(dep, true))
              .join(', ')}]. ${
              errorDiagnostic
                ? getCompareDependencyResultDescription(errorDiagnostic)
                : 'Inferred dependency not present in source'
            }`
          : '',
      ]
        .join('')
        .trim(),
      suggestions: null,
    }).withDetails({
      kind: 'error',

Domain

Subdomains

Called By

Frequently Asked Questions

What does validateInferredDep() do?
validateInferredDep() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts.
Where is validateInferredDep() defined?
validateInferredDep() is defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts at line 231.
What does validateInferredDep() call?
validateInferredDep() calls 10 function(s): compareDeps, create, getCompareDependencyResultDescription, invariant, map, merge, prettyPrintScopeDependency, printManualMemoDependency, and 2 more.
What calls validateInferredDep()?
validateInferredDep() is called by 1 function(s): visitScope.

Analyze Your Own Codebase

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

Try Supermodel Free