Home / File/ moduleGraph.spec.ts — vite Source File

moduleGraph.spec.ts — vite Source File

Architecture documentation for moduleGraph.spec.ts, a typescript file in the vite codebase. 6 imports, 0 dependents.

Entity Profile

Dependency Diagram

graph LR
  782edff7_d16a_7086_847f_81dcc4da4404["moduleGraph.spec.ts"]
  a3adc511_3c03_7f25_9d76_5d3ed9987eb5["moduleGraph.ts"]
  782edff7_d16a_7086_847f_81dcc4da4404 --> a3adc511_3c03_7f25_9d76_5d3ed9987eb5
  cdb618b6_fede_c732_1a58_98b86b491151["EnvironmentModuleGraph"]
  782edff7_d16a_7086_847f_81dcc4da4404 --> cdb618b6_fede_c732_1a58_98b86b491151
  cd2f5017_5d73_e10a_7c43_22b962517f0c["mixedModuleGraph.ts"]
  782edff7_d16a_7086_847f_81dcc4da4404 --> cd2f5017_5d73_e10a_7c43_22b962517f0c
  8168c2c0_6927_0878_8876_5fb50d36ade9["ModuleNode"]
  782edff7_d16a_7086_847f_81dcc4da4404 --> 8168c2c0_6927_0878_8876_5fb50d36ade9
  c1a5c030_6aae_0cbb_cc67_256559724512["ModuleGraph"]
  782edff7_d16a_7086_847f_81dcc4da4404 --> c1a5c030_6aae_0cbb_cc67_256559724512
  a340ba46_b2b7_3048_3bb3_6907a74c8464["vitest"]
  782edff7_d16a_7086_847f_81dcc4da4404 --> a340ba46_b2b7_3048_3bb3_6907a74c8464
  style 782edff7_d16a_7086_847f_81dcc4da4404 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { describe, expect, it } from 'vitest'
import { EnvironmentModuleGraph } from '../moduleGraph'
import type { ModuleNode } from '../mixedModuleGraph'
import { ModuleGraph } from '../mixedModuleGraph'

describe('moduleGraph', () => {
  describe('invalidateModule', () => {
    it('removes an ssr error', async () => {
      const moduleGraph = new EnvironmentModuleGraph('ssr', async (url) => ({
        id: url,
      }))
      const entryUrl = '/x.js'

      const entryModule = await moduleGraph.ensureEntryFromUrl(entryUrl, false)
      entryModule.ssrError = new Error(`unable to execute module`)

      expect(entryModule.ssrError).to.be.a('error')
      moduleGraph.invalidateModule(entryModule)
      expect(entryModule.ssrError).toBe(null)
    })

    it('ensureEntryFromUrl should based on resolvedId', async () => {
      const moduleGraph = new EnvironmentModuleGraph('client', async (url) => {
        if (url === '/xx.js') {
          return { id: '/x.js' }
        } else {
          return { id: url }
        }
      })
      const meta = { vite: 'test' }

      const mod1 = await moduleGraph.ensureEntryFromUrl('/x.js', false)
      mod1.meta = meta
      const mod2 = await moduleGraph.ensureEntryFromUrl('/xx.js', false)
      expect(mod2.meta).to.equal(meta)
    })

    it('ensure backward compatibility', async () => {
      const clientModuleGraph = new EnvironmentModuleGraph(
        'client',
        async (url) => ({ id: url }),
      )
      const ssrModuleGraph = new EnvironmentModuleGraph('ssr', async (url) => ({
        id: url,
      }))
      const moduleGraph = new ModuleGraph({
        client: () => clientModuleGraph,
        ssr: () => ssrModuleGraph,
      })

      const addBrowserModule = (url: string) =>
        clientModuleGraph.ensureEntryFromUrl(url)
      const getBrowserModule = (url: string) =>
        clientModuleGraph.getModuleById(url)

      const addServerModule = (url: string) =>
        ssrModuleGraph.ensureEntryFromUrl(url)
      const getServerModule = (url: string) => ssrModuleGraph.getModuleById(url)

      const clientModule1 = await addBrowserModule('/1.js')
      const ssrModule1 = await addServerModule('/1.js')
      const module1 = moduleGraph.getModuleById('/1.js')!
      expect(module1._clientModule).toBe(clientModule1)
      expect(module1._ssrModule).toBe(ssrModule1)

      const module2b = await moduleGraph.ensureEntryFromUrl('/b/2.js')
      const module2s = await moduleGraph.ensureEntryFromUrl('/s/2.js')
      expect(module2b._clientModule).toBe(getBrowserModule('/b/2.js'))
      expect(module2s._ssrModule).toBe(getServerModule('/s/2.js'))

      const importersUrls = ['/1/a.js', '/1/b.js', '/1/c.js']
      ;(await Promise.all(importersUrls.map(addBrowserModule))).forEach((mod) =>
        clientModule1.importers.add(mod),
      )
      ;(await Promise.all(importersUrls.map(addServerModule))).forEach((mod) =>
        ssrModule1.importers.add(mod),
      )

      expect(module1.importers.size).toBe(importersUrls.length)

      const clientModule1importersValues = [...clientModule1.importers]
      const ssrModule1importersValues = [...ssrModule1.importers]

      const module1importers = module1.importers
      const module1importersValues = [...module1importers.values()]
      expect(module1importersValues.length).toBe(importersUrls.length)
      expect(module1importersValues[1]._clientModule).toBe(
        clientModule1importersValues[1],
      )
      expect(module1importersValues[1]._ssrModule).toBe(
        ssrModule1importersValues[1],
      )

      const module1importersFromForEach: ModuleNode[] = []
      module1.importers.forEach((imp) => {
        moduleGraph.invalidateModule(imp)
        module1importersFromForEach.push(imp)
      })
      expect(module1importersFromForEach.length).toBe(importersUrls.length)
      expect(module1importersFromForEach[1]._clientModule).toBe(
        clientModule1importersValues[1],
      )
      expect(module1importersFromForEach[1]._ssrModule).toBe(
        ssrModule1importersValues[1],
      )
    })
  })
})

Domain

Frequently Asked Questions

What does moduleGraph.spec.ts do?
moduleGraph.spec.ts is a source file in the vite codebase, written in typescript. It belongs to the ViteCore domain.
What does moduleGraph.spec.ts depend on?
moduleGraph.spec.ts imports 6 module(s): EnvironmentModuleGraph, ModuleGraph, ModuleNode, mixedModuleGraph.ts, moduleGraph.ts, vitest.
Where is moduleGraph.spec.ts in the architecture?
moduleGraph.spec.ts is located at packages/vite/src/node/server/__tests__/moduleGraph.spec.ts (domain: ViteCore, directory: packages/vite/src/node/server/__tests__).

Analyze Your Own Codebase

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

Try Supermodel Free