MCPcopy
hub / github.com/vitejs/vite / createHMRHandlerForRunner

Function createHMRHandlerForRunner

packages/vite/src/module-runner/hmrHandler.ts:7–87  ·  packages/vite/src/module-runner/hmrHandler.ts::createHMRHandlerForRunner
(
  runner: ModuleRunner,
)

Source from the content-addressed store, hash-verified

5import type { ModuleRunner } from class="st">'./runner'
6
7export function createHMRHandlerForRunner(
8 runner: ModuleRunner,
9): (payload: HotPayload) => Promise<void> {
10 return createHMRHandler(async (payload) => {
11 const hmrClient = runner.hmrClient
12 if (!hmrClient || runner.isClosed()) return
13 switch (payload.type) {
14 case class="st">'connected':
15 hmrClient.logger.debug(`connected.`)
16 break
17 case class="st">'update':
18 await hmrClient.notifyListeners(class="st">'vite:beforeUpdate', payload)
19 await Promise.all(
20 payload.updates.map(async (update): Promise<void> => {
21 if (update.type === class="st">'js-update') {
22 class="cm">// runner always caches modules by their full path without /@id/ prefix
23 update.acceptedPath = unwrapId(update.acceptedPath)
24 update.path = unwrapId(update.path)
25 return hmrClient.queueUpdate(update)
26 }
27
28 hmrClient.logger.error(class="st">'css hmr is not supported in runner mode.')
29 }),
30 )
31 await hmrClient.notifyListeners(class="st">'vite:afterUpdate', payload)
32 break
33 case class="st">'custom': {
34 await hmrClient.notifyListeners(payload.event, payload.data)
35 break
36 }
37 case class="st">'full-reload': {
38 const { triggeredBy } = payload
39 const clearEntrypointUrls = triggeredBy
40 ? getModulesEntrypoints(
41 runner,
42 getModulesByFile(runner, slash(triggeredBy)),
43 )
44 : findAllEntrypoints(runner)
45
46 if (!clearEntrypointUrls.size) break
47
48 hmrClient.logger.debug(`program reload`)
49 await hmrClient.notifyListeners(class="st">'vite:beforeFullReload', payload)
50 runner.evaluatedModules.clear()
51
52 for (const url of clearEntrypointUrls) {
53 if (runner.isClosed()) break
54 try {
55 await runner.import(url)
56 } catch (err) {
57 if (runner.isClosed()) break
58 if (err.code !== ERR_OUTDATED_OPTIMIZED_DEP) {
59 hmrClient.logger.error(
60 `An error happened during full reload\n${err.message}\n${err.stack}`,
61 )
62 }
63 }
64 }

Callers 1

constructorMethod · 0.90

Calls 14

createHMRHandlerFunction · 0.90
unwrapIdFunction · 0.90
slashFunction · 0.90
getModulesEntrypointsFunction · 0.85
getModulesByFileFunction · 0.85
findAllEntrypointsFunction · 0.85
isClosedMethod · 0.80
notifyListenersMethod · 0.80
queueUpdateMethod · 0.80
importMethod · 0.80
prunePathsMethod · 0.80
debugMethod · 0.65

Tested by

no test coverage detected