Home / Function/ lexAcceptedHmrDeps() — vite Function Reference

lexAcceptedHmrDeps() — vite Function Reference

Architecture documentation for the lexAcceptedHmrDeps() function in hmr.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  8230fc64_ada4_2155_2691_f7082da49a38["lexAcceptedHmrDeps()"]
  18db4f26_79f1_5b7d_b291_4feeaf95538f["hmr.ts"]
  8230fc64_ada4_2155_2691_f7082da49a38 -->|defined in| 18db4f26_79f1_5b7d_b291_4feeaf95538f
  a1fc1de5_905b_efe7_d960_3597604fbdfe["importAnalysisPlugin()"]
  a1fc1de5_905b_efe7_d960_3597604fbdfe -->|calls| 8230fc64_ada4_2155_2691_f7082da49a38
  44e0a3d7_a7b4_cd8f_2746_4ace7f111b32["lexAcceptedHmrExports()"]
  44e0a3d7_a7b4_cd8f_2746_4ace7f111b32 -->|calls| 8230fc64_ada4_2155_2691_f7082da49a38
  2e1469ca_9e59_dcc2_bdc7_05126c765fd0["error()"]
  8230fc64_ada4_2155_2691_f7082da49a38 -->|calls| 2e1469ca_9e59_dcc2_bdc7_05126c765fd0
  style 8230fc64_ada4_2155_2691_f7082da49a38 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/node/server/hmr.ts lines 957–1059

export function lexAcceptedHmrDeps(
  code: string,
  start: number,
  urls: Set<{ url: string; start: number; end: number }>,
): boolean {
  let state: LexerState = LexerState.inCall
  // the state can only be 2 levels deep so no need for a stack
  let prevState: LexerState = LexerState.inCall
  let currentDep: string = ''

  function addDep(index: number) {
    urls.add({
      url: currentDep,
      start: index - currentDep.length - 1,
      end: index + 1,
    })
    currentDep = ''
  }

  for (let i = start; i < code.length; i++) {
    const char = code.charAt(i)
    switch (state) {
      case LexerState.inCall:
      case LexerState.inArray:
        if (char === `'`) {
          prevState = state
          state = LexerState.inSingleQuoteString
        } else if (char === `"`) {
          prevState = state
          state = LexerState.inDoubleQuoteString
        } else if (char === '`') {
          prevState = state
          state = LexerState.inTemplateString
        } else if (whitespaceRE.test(char)) {
          continue
        } else {
          if (state === LexerState.inCall) {
            if (char === `[`) {
              state = LexerState.inArray
            } else {
              // reaching here means the first arg is neither a string literal
              // nor an Array literal (direct callback) or there is no arg
              // in both case this indicates a self-accepting module
              return true // done
            }
          } else {
            if (char === `]`) {
              return false // done
            } else if (char === ',') {
              continue
            } else {
              error(i)
            }
          }
        }
        break
      case LexerState.inSingleQuoteString:
        if (char === `'`) {
          addDep(i)
          if (prevState === LexerState.inCall) {
            // accept('foo', ...)
            return false
          } else {
            state = prevState
          }
        } else {
          currentDep += char
        }
        break
      case LexerState.inDoubleQuoteString:
        if (char === `"`) {
          addDep(i)
          if (prevState === LexerState.inCall) {
            // accept('foo', ...)
            return false
          } else {
            state = prevState
          }
        } else {
          currentDep += char
        }

Domain

Subdomains

Calls

Frequently Asked Questions

What does lexAcceptedHmrDeps() do?
lexAcceptedHmrDeps() is a function in the vite codebase, defined in packages/vite/src/node/server/hmr.ts.
Where is lexAcceptedHmrDeps() defined?
lexAcceptedHmrDeps() is defined in packages/vite/src/node/server/hmr.ts at line 957.
What does lexAcceptedHmrDeps() call?
lexAcceptedHmrDeps() calls 1 function(s): error.
What calls lexAcceptedHmrDeps()?
lexAcceptedHmrDeps() is called by 2 function(s): importAnalysisPlugin, lexAcceptedHmrExports.

Analyze Your Own Codebase

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

Try Supermodel Free