HMRContext Class — vite Architecture
Architecture documentation for the HMRContext class in hmr.ts from the vite codebase.
Entity Profile
Dependency Diagram
graph TD d86a8333_3c9a_922b_57b2_926575326289["HMRContext"] 56154347_d0e1_1403_ce0e_25508620362c["hmr.ts"] d86a8333_3c9a_922b_57b2_926575326289 -->|defined in| 56154347_d0e1_1403_ce0e_25508620362c 99e78c4e_c5fd_cc5a_c78d_d4a1f68ab5ce["constructor()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| 99e78c4e_c5fd_cc5a_c78d_d4a1f68ab5ce 84526a55_d2ac_9585_b652_69e0e81df1a9["data()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| 84526a55_d2ac_9585_b652_69e0e81df1a9 f0b7b836_2021_adcb_4b70_ecd5293b9089["accept()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| f0b7b836_2021_adcb_4b70_ecd5293b9089 3d354a6c_d47c_7e0f_a3c9_c335e4eb5721["acceptExports()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| 3d354a6c_d47c_7e0f_a3c9_c335e4eb5721 b0e854be_b32c_d548_8cce_50eee722b15e["dispose()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| b0e854be_b32c_d548_8cce_50eee722b15e 5e2ee04a_805b_189d_e857_9ca523f61c13["prune()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| 5e2ee04a_805b_189d_e857_9ca523f61c13 030186c4_078d_bee6_8038_20c37ac16377["decline()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| 030186c4_078d_bee6_8038_20c37ac16377 8734724b_d91d_59c5_6ae1_9c54c972eea0["invalidate()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| 8734724b_d91d_59c5_6ae1_9c54c972eea0 e9e2f4e6_b4f1_9171_926a_46f9ab95209e["on()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| e9e2f4e6_b4f1_9171_926a_46f9ab95209e 0e7590d6_da27_d1a7_ad53_e83555f6c9e5["off()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| 0e7590d6_da27_d1a7_ad53_e83555f6c9e5 6cbd2953_6c7a_3620_4afe_54813dab91b1["send()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| 6cbd2953_6c7a_3620_4afe_54813dab91b1 73d5c6b6_4669_9083_4698_693c1d9a8117["acceptDeps()"] d86a8333_3c9a_922b_57b2_926575326289 -->|method| 73d5c6b6_4669_9083_4698_693c1d9a8117
Relationship Graph
Source Code
packages/vite/src/shared/hmr.ts lines 24–168
export class HMRContext implements ViteHotContext {
private newListeners: CustomListenersMap
constructor(
private hmrClient: HMRClient,
private ownerPath: string,
) {
if (!hmrClient.dataMap.has(ownerPath)) {
hmrClient.dataMap.set(ownerPath, {})
}
// when a file is hot updated, a new context is created
// clear its stale callbacks
const mod = hmrClient.hotModulesMap.get(ownerPath)
if (mod) {
mod.callbacks = []
}
// clear stale custom event listeners
const staleListeners = hmrClient.ctxToListenersMap.get(ownerPath)
if (staleListeners) {
for (const [event, staleFns] of staleListeners) {
const listeners = hmrClient.customListenersMap.get(event)
if (listeners) {
hmrClient.customListenersMap.set(
event,
listeners.filter((l) => !staleFns.includes(l)),
)
}
}
}
this.newListeners = new Map()
hmrClient.ctxToListenersMap.set(ownerPath, this.newListeners)
}
get data(): any {
return this.hmrClient.dataMap.get(this.ownerPath)
}
accept(deps?: any, callback?: any): void {
if (typeof deps === 'function' || !deps) {
// self-accept: hot.accept(() => {})
this.acceptDeps([this.ownerPath], ([mod]) => deps?.(mod))
} else if (typeof deps === 'string') {
// explicit deps
this.acceptDeps([deps], ([mod]) => callback?.(mod))
} else if (Array.isArray(deps)) {
this.acceptDeps(deps, callback)
} else {
throw new Error(`invalid hot.accept() usage.`)
}
}
// export names (first arg) are irrelevant on the client side, they're
// extracted in the server for propagation
acceptExports(
_: string | readonly string[],
callback?: (data: any) => void,
): void {
this.acceptDeps([this.ownerPath], ([mod]) => callback?.(mod))
}
dispose(cb: (data: any) => void): void {
this.hmrClient.disposeMap.set(this.ownerPath, cb)
}
prune(cb: (data: any) => void): void {
this.hmrClient.pruneMap.set(this.ownerPath, cb)
}
// Kept for backward compatibility (#11036)
// eslint-disable-next-line @typescript-eslint/no-empty-function
decline(): void {}
invalidate(message: string): void {
const firstInvalidatedBy =
this.hmrClient.currentFirstInvalidatedBy ?? this.ownerPath
this.hmrClient.notifyListeners('vite:invalidate', {
path: this.ownerPath,
message,
Domain
Defined In
Source
Frequently Asked Questions
What is the HMRContext class?
HMRContext is a class in the vite codebase, defined in packages/vite/src/shared/hmr.ts.
Where is HMRContext defined?
HMRContext is defined in packages/vite/src/shared/hmr.ts at line 24.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free