Home / Class/ EvaluatedModules Class — vite Architecture

EvaluatedModules Class — vite Architecture

Architecture documentation for the EvaluatedModules class in evaluatedModules.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  d84d2810_d37a_ae7f_1268_3cbf7c3dad5f["EvaluatedModules"]
  9f67d7a4_f300_a592_a5b0_c8f97c2d3564["evaluatedModules.ts"]
  d84d2810_d37a_ae7f_1268_3cbf7c3dad5f -->|defined in| 9f67d7a4_f300_a592_a5b0_c8f97c2d3564
  24b233d7_77c1_26bc_480a_2a23dd944099["getModuleById()"]
  d84d2810_d37a_ae7f_1268_3cbf7c3dad5f -->|method| 24b233d7_77c1_26bc_480a_2a23dd944099
  b4f3a569_9e49_d9e7_0b37_74b09b01dec9["getModulesByFile()"]
  d84d2810_d37a_ae7f_1268_3cbf7c3dad5f -->|method| b4f3a569_9e49_d9e7_0b37_74b09b01dec9
  94683a8f_44e5_a8a7_40ff_e13ec7f883d8["getModuleByUrl()"]
  d84d2810_d37a_ae7f_1268_3cbf7c3dad5f -->|method| 94683a8f_44e5_a8a7_40ff_e13ec7f883d8
  d784e6cc_4e2b_6dd3_a857_d698343d213a["ensureModule()"]
  d84d2810_d37a_ae7f_1268_3cbf7c3dad5f -->|method| d784e6cc_4e2b_6dd3_a857_d698343d213a
  2f69cb50_c4b7_e6c7_8485_18ff0f8f604e["invalidateModule()"]
  d84d2810_d37a_ae7f_1268_3cbf7c3dad5f -->|method| 2f69cb50_c4b7_e6c7_8485_18ff0f8f604e
  e81a4d92_bae8_27e6_4a9c_4bd47c82e4ad["getModuleSourceMapById()"]
  d84d2810_d37a_ae7f_1268_3cbf7c3dad5f -->|method| e81a4d92_bae8_27e6_4a9c_4bd47c82e4ad
  bf817ccf_20f0_f838_748b_a867ba859947["clear()"]
  d84d2810_d37a_ae7f_1268_3cbf7c3dad5f -->|method| bf817ccf_20f0_f838_748b_a867ba859947

Relationship Graph

Source Code

packages/vite/src/module-runner/evaluatedModules.ts lines 29–130

export class EvaluatedModules {
  public readonly idToModuleMap: Map<string, EvaluatedModuleNode> = new Map()
  public readonly fileToModulesMap: Map<string, Set<EvaluatedModuleNode>> =
    new Map()
  public readonly urlToIdModuleMap: Map<string, EvaluatedModuleNode> = new Map()

  /**
   * Returns the module node by the resolved module ID. Usually, module ID is
   * the file system path with query and/or hash. It can also be a virtual module.
   *
   * Module runner graph will have 1 to 1 mapping with the server module graph.
   * @param id Resolved module ID
   */
  public getModuleById(id: string): EvaluatedModuleNode | undefined {
    return this.idToModuleMap.get(id)
  }

  /**
   * Returns all modules related to the file system path. Different modules
   * might have different query parameters or hash, so it's possible to have
   * multiple modules for the same file.
   * @param file The file system path of the module
   */
  public getModulesByFile(file: string): Set<EvaluatedModuleNode> | undefined {
    return this.fileToModulesMap.get(file)
  }

  /**
   * Returns the module node by the URL that was used in the import statement.
   * Unlike module graph on the server, the URL is not resolved and is used as is.
   * @param url Server URL that was used in the import statement
   */
  public getModuleByUrl(url: string): EvaluatedModuleNode | undefined {
    return this.urlToIdModuleMap.get(unwrapId(url))
  }

  /**
   * Ensure that module is in the graph. If the module is already in the graph,
   * it will return the existing module node. Otherwise, it will create a new
   * module node and add it to the graph.
   * @param id Resolved module ID
   * @param url URL that was used in the import statement
   */
  public ensureModule(id: string, url: string): EvaluatedModuleNode {
    id = normalizeModuleId(id)
    if (this.idToModuleMap.has(id)) {
      const moduleNode = this.idToModuleMap.get(id)!
      this.urlToIdModuleMap.set(url, moduleNode)
      return moduleNode
    }
    const moduleNode = new EvaluatedModuleNode(id, url)
    this.idToModuleMap.set(id, moduleNode)
    this.urlToIdModuleMap.set(url, moduleNode)

    const fileModules = this.fileToModulesMap.get(moduleNode.file) || new Set()
    fileModules.add(moduleNode)
    this.fileToModulesMap.set(moduleNode.file, fileModules)
    return moduleNode
  }

  public invalidateModule(node: EvaluatedModuleNode): void {
    node.evaluated = false
    node.meta = undefined
    node.map = undefined
    node.promise = undefined
    node.exports = undefined
    // remove imports in case they are changed,
    // don't remove the importers because otherwise it will be empty after evaluation
    // this can create a bug when file was removed but it still triggers full-reload
    // we are fine with the bug for now because it's not a common case
    node.imports.clear()
  }

  /**
   * Extracts the inlined source map from the module code and returns the decoded
   * source map. If the source map is not inlined, it will return null.
   * @param id Resolved module ID
   */
  getModuleSourceMapById(id: string): DecodedMap | null {
    const mod = this.getModuleById(id)
    if (!mod) return null

Domain

Frequently Asked Questions

What is the EvaluatedModules class?
EvaluatedModules is a class in the vite codebase, defined in packages/vite/src/module-runner/evaluatedModules.ts.
Where is EvaluatedModules defined?
EvaluatedModules is defined in packages/vite/src/module-runner/evaluatedModules.ts at line 29.

Analyze Your Own Codebase

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

Try Supermodel Free