Home / Class/ ModuleGraph Class — vite Architecture

ModuleGraph Class — vite Architecture

Architecture documentation for the ModuleGraph class in mixedModuleGraph.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  c1a5c030_6aae_0cbb_cc67_256559724512["ModuleGraph"]
  cd2f5017_5d73_e10a_7c43_22b962517f0c["mixedModuleGraph.ts"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|defined in| cd2f5017_5d73_e10a_7c43_22b962517f0c
  c0aa07ef_4d55_81af_2c31_675206f54019["_client()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| c0aa07ef_4d55_81af_2c31_675206f54019
  fda3ee91_e2ce_c6c4_8e7d_df72bc36899c["_ssr()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| fda3ee91_e2ce_c6c4_8e7d_df72bc36899c
  3acdf189_b419_0a41_c750_a3225ac83e3d["constructor()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 3acdf189_b419_0a41_c750_a3225ac83e3d
  b9c8cc4b_5575_ccfe_9243_d12c9ec34e91["getModuleById()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| b9c8cc4b_5575_ccfe_9243_d12c9ec34e91
  bb2dfb3b_2e6d_7715_aedc_b7f63a711219["getModuleByUrl()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| bb2dfb3b_2e6d_7715_aedc_b7f63a711219
  98b45b52_fdf0_c791_ef33_cf0bce10f788["getModulesByFile()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 98b45b52_fdf0_c791_ef33_cf0bce10f788
  217003c7_7ef6_1189_ea67_68b8e94a636e["onFileChange()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 217003c7_7ef6_1189_ea67_68b8e94a636e
  203367d7_c98f_d7fc_5ab5_bbf0df602fe2["onFileDelete()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 203367d7_c98f_d7fc_5ab5_bbf0df602fe2
  1c40d8da_e1ab_2df6_f9b3_a9ddbed0bb4b["_getModuleGraph()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 1c40d8da_e1ab_2df6_f9b3_a9ddbed0bb4b
  f3ee260b_149d_7a3c_7489_7c6e940fce67["invalidateModule()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| f3ee260b_149d_7a3c_7489_7c6e940fce67
  699e7c37_64e5_966a_fd87_42a032acb6af["invalidateAll()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 699e7c37_64e5_966a_fd87_42a032acb6af
  1d65aaf8_13f0_8f65_96f9_9d8c05b8369a["ensureEntryFromUrl()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| 1d65aaf8_13f0_8f65_96f9_9d8c05b8369a
  b9490db6_4909_a1e6_c6d4_5948602ea2f9["createFileOnlyEntry()"]
  c1a5c030_6aae_0cbb_cc67_256559724512 -->|method| b9490db6_4909_a1e6_c6d4_5948602ea2f9

Relationship Graph

Source Code

packages/vite/src/node/server/mixedModuleGraph.ts lines 248–518

export class ModuleGraph {
  /** @internal */
  _moduleGraphs: {
    client: () => EnvironmentModuleGraph
    ssr: () => EnvironmentModuleGraph
  }

  /** @internal */
  get _client(): EnvironmentModuleGraph {
    return this._moduleGraphs.client()
  }

  /** @internal */
  get _ssr(): EnvironmentModuleGraph {
    return this._moduleGraphs.ssr()
  }

  urlToModuleMap: Map<string, ModuleNode>
  idToModuleMap: Map<string, ModuleNode>
  etagToModuleMap: Map<string, ModuleNode>

  fileToModulesMap: Map<string, Set<ModuleNode>>

  private moduleNodeCache = new DualWeakMap<
    EnvironmentModuleNode,
    EnvironmentModuleNode,
    ModuleNode
  >()

  constructor(moduleGraphs: {
    client: () => EnvironmentModuleGraph
    ssr: () => EnvironmentModuleGraph
  }) {
    this._moduleGraphs = moduleGraphs

    const getModuleMapUnion =
      (prop: 'urlToModuleMap' | 'idToModuleMap') => () => {
        // A good approximation to the previous logic that returned the union of
        // the importedModules and importers from both the browser and server
        if (this._ssr[prop].size === 0) {
          return this._client[prop]
        }
        const map = new Map(this._client[prop])
        for (const [key, module] of this._ssr[prop]) {
          if (!map.has(key)) {
            map.set(key, module)
          }
        }
        return map
      }

    this.urlToModuleMap = createBackwardCompatibleModuleMap(
      this,
      'urlToModuleMap',
      getModuleMapUnion('urlToModuleMap'),
    )
    this.idToModuleMap = createBackwardCompatibleModuleMap(
      this,
      'idToModuleMap',
      getModuleMapUnion('idToModuleMap'),
    )
    this.etagToModuleMap = createBackwardCompatibleModuleMap(
      this,
      'etagToModuleMap',
      () => this._client.etagToModuleMap,
    )
    this.fileToModulesMap = createBackwardCompatibleFileToModulesMap(this)
  }

  getModuleById(id: string): ModuleNode | undefined {
    const clientModule = this._client.getModuleById(id)
    const ssrModule = this._ssr.getModuleById(id)
    if (!clientModule && !ssrModule) {
      return
    }
    return this.getBackwardCompatibleModuleNodeDual(clientModule, ssrModule)
  }

  async getModuleByUrl(
    url: string,
    _ssr?: boolean,

Domain

Frequently Asked Questions

What is the ModuleGraph class?
ModuleGraph is a class in the vite codebase, defined in packages/vite/src/node/server/mixedModuleGraph.ts.
Where is ModuleGraph defined?
ModuleGraph is defined in packages/vite/src/node/server/mixedModuleGraph.ts at line 248.

Analyze Your Own Codebase

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

Try Supermodel Free