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