Home / Function/ createHMRHandlerForRunner() — vite Function Reference

createHMRHandlerForRunner() — vite Function Reference

Architecture documentation for the createHMRHandlerForRunner() function in hmrHandler.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  4cffe7ac_42fc_d6b8_b38b_87a95e695952["createHMRHandlerForRunner()"]
  569b12a9_015e_564e_efd3_205cedee54dd["hmrHandler.ts"]
  4cffe7ac_42fc_d6b8_b38b_87a95e695952 -->|defined in| 569b12a9_015e_564e_efd3_205cedee54dd
  8db7bac6_7d0a_15b2_5870_1fd0e71b9cf5["constructor()"]
  8db7bac6_7d0a_15b2_5870_1fd0e71b9cf5 -->|calls| 4cffe7ac_42fc_d6b8_b38b_87a95e695952
  78565810_c101_62d5_659a_9f46c4ad9d97["createHMRHandler()"]
  4cffe7ac_42fc_d6b8_b38b_87a95e695952 -->|calls| 78565810_c101_62d5_659a_9f46c4ad9d97
  2ca9c642_f3d6_040e_5699_d9c42ffa44e7["isClosed()"]
  4cffe7ac_42fc_d6b8_b38b_87a95e695952 -->|calls| 2ca9c642_f3d6_040e_5699_d9c42ffa44e7
  795dec35_22f9_80f5_ccab_9c2d170af0d3["unwrapId()"]
  4cffe7ac_42fc_d6b8_b38b_87a95e695952 -->|calls| 795dec35_22f9_80f5_ccab_9c2d170af0d3
  d1c0dc20_450c_ceda_3165_c052a37fc95f["getModulesEntrypoints()"]
  4cffe7ac_42fc_d6b8_b38b_87a95e695952 -->|calls| d1c0dc20_450c_ceda_3165_c052a37fc95f
  16304d96_41aa_6521_c9c0_02b27125f159["getModulesByFile()"]
  4cffe7ac_42fc_d6b8_b38b_87a95e695952 -->|calls| 16304d96_41aa_6521_c9c0_02b27125f159
  f094d39d_cd97_2548_86c3_38902c2f3301["slash()"]
  4cffe7ac_42fc_d6b8_b38b_87a95e695952 -->|calls| f094d39d_cd97_2548_86c3_38902c2f3301
  9dce4d17_eb31_93ad_eebc_55418c6acdde["findAllEntrypoints()"]
  4cffe7ac_42fc_d6b8_b38b_87a95e695952 -->|calls| 9dce4d17_eb31_93ad_eebc_55418c6acdde
  style 4cffe7ac_42fc_d6b8_b38b_87a95e695952 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/module-runner/hmrHandler.ts lines 7–85

export function createHMRHandlerForRunner(
  runner: ModuleRunner,
): (payload: HotPayload) => Promise<void> {
  return createHMRHandler(async (payload) => {
    const hmrClient = runner.hmrClient
    if (!hmrClient || runner.isClosed()) return
    switch (payload.type) {
      case 'connected':
        hmrClient.logger.debug(`connected.`)
        break
      case 'update':
        await hmrClient.notifyListeners('vite:beforeUpdate', payload)
        await Promise.all(
          payload.updates.map(async (update): Promise<void> => {
            if (update.type === 'js-update') {
              // runner always caches modules by their full path without /@id/ prefix
              update.acceptedPath = unwrapId(update.acceptedPath)
              update.path = unwrapId(update.path)
              return hmrClient.queueUpdate(update)
            }

            hmrClient.logger.error('css hmr is not supported in runner mode.')
          }),
        )
        await hmrClient.notifyListeners('vite:afterUpdate', payload)
        break
      case 'custom': {
        await hmrClient.notifyListeners(payload.event, payload.data)
        break
      }
      case 'full-reload': {
        const { triggeredBy } = payload
        const clearEntrypointUrls = triggeredBy
          ? getModulesEntrypoints(
              runner,
              getModulesByFile(runner, slash(triggeredBy)),
            )
          : findAllEntrypoints(runner)

        if (!clearEntrypointUrls.size) break

        hmrClient.logger.debug(`program reload`)
        await hmrClient.notifyListeners('vite:beforeFullReload', payload)
        runner.evaluatedModules.clear()

        for (const url of clearEntrypointUrls) {
          try {
            await runner.import(url)
          } catch (err) {
            if (err.code !== ERR_OUTDATED_OPTIMIZED_DEP) {
              hmrClient.logger.error(
                `An error happened during full reload\n${err.message}\n${err.stack}`,
              )
            }
          }
        }
        break
      }
      case 'prune':
        await hmrClient.notifyListeners('vite:beforePrune', payload)
        await hmrClient.prunePaths(payload.paths)
        break
      case 'error': {
        await hmrClient.notifyListeners('vite:error', payload)
        const err = payload.err
        hmrClient.logger.error(
          `Internal Server Error\n${err.message}\n${err.stack}`,
        )
        break
      }
      case 'ping': // noop
        break
      default: {
        const check: never = payload
        return check
      }
    }
  })
}

Domain

Subdomains

Called By

Frequently Asked Questions

What does createHMRHandlerForRunner() do?
createHMRHandlerForRunner() is a function in the vite codebase, defined in packages/vite/src/module-runner/hmrHandler.ts.
Where is createHMRHandlerForRunner() defined?
createHMRHandlerForRunner() is defined in packages/vite/src/module-runner/hmrHandler.ts at line 7.
What does createHMRHandlerForRunner() call?
createHMRHandlerForRunner() calls 7 function(s): createHMRHandler, findAllEntrypoints, getModulesByFile, getModulesEntrypoints, isClosed, slash, unwrapId.
What calls createHMRHandlerForRunner()?
createHMRHandlerForRunner() is called by 1 function(s): constructor.

Analyze Your Own Codebase

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

Try Supermodel Free