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
Dependencies
Source
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