Home / Function/ replaceConfusingTypeNames() — vite Function Reference

replaceConfusingTypeNames() — vite Function Reference

Architecture documentation for the replaceConfusingTypeNames() function in rolldown.dts.config.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  75c7a0b7_ad83_a9dd_0767_4aa65abcc6c7["replaceConfusingTypeNames()"]
  c2239521_b59e_589c_03c3_99028d5442bd["rolldown.dts.config.ts"]
  75c7a0b7_ad83_a9dd_0767_4aa65abcc6c7 -->|defined in| c2239521_b59e_589c_03c3_99028d5442bd
  70373351_ed91_919a_82fa_ef10cf29bd4d["escapeRegex()"]
  75c7a0b7_ad83_a9dd_0767_4aa65abcc6c7 -->|calls| 70373351_ed91_919a_82fa_ef10cf29bd4d
  75abe907_e9fa_75ac_980e_a78acea4fee9["unique()"]
  75c7a0b7_ad83_a9dd_0767_4aa65abcc6c7 -->|calls| 75abe907_e9fa_75ac_980e_a78acea4fee9
  style 75c7a0b7_ad83_a9dd_0767_4aa65abcc6c7 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/rolldown.dts.config.ts lines 267–347

function replaceConfusingTypeNames(
  this: PluginContext,
  chunk: OutputChunk,
  importBindings: ImportBindings[],
) {
  const isInternalEntry = chunk.fileName.startsWith('internal.')
  if (!isInternalEntry) {
    for (const modName in identifierReplacements) {
      const imp = importBindings.filter((imp) => imp.id === modName)
      // Validate that `identifierReplacements` is not outdated if there's no match
      if (imp.length === 0) {
        this.warn(
          `${chunk.fileName} does not import "${modName}" for replacement`,
        )
        process.exitCode = 1
        continue
      }

      const replacements = identifierReplacements[modName]
      for (const id in replacements) {
        // Validate that `identifierReplacements` is not outdated if there's no match
        if (!imp.some((i) => i.locals.includes(id))) {
          this.warn(
            `${chunk.fileName} does not import "${id}" from "${modName}" for replacement`,
          )
          process.exitCode = 1
          continue
        }

        const betterId = replacements[id]
        const regexEscapedId = escapeRegex(id)
        // If the better id accesses a namespace, the existing `Foo as Foo$1`
        // named import cannot be replaced with `Foo as Namespace.Foo`, so we
        // pre-emptively remove the whole named import
        if (betterId.includes('.')) {
          chunk.code = chunk.code.replace(
            new RegExp(`\\b\\w+\\b as ${regexEscapedId},?\\s?`),
            '',
          )
        }
        chunk.code = chunk.code.replace(
          new RegExp(`\\b${regexEscapedId}\\b`, 'g'),
          betterId,
        )
      }
    }
  }

  const identifiers = unique(
    Array.from(
      chunk.code.matchAll(identifierWithTrailingDollarRE),
      (m) => m[0],
    ),
  )
  const unreplacedIds = identifiers.filter(
    (id) => !ignoreConfusingTypeNames.includes(id),
  )
  if (unreplacedIds.length) {
    const unreplacedStr = unreplacedIds.map((id) => `\n- ${id}`).join('')
    this.warn(
      `${chunk.fileName} contains confusing identifier names${unreplacedStr}`,
    )
    process.exitCode = 1
  }

  if (!isInternalEntry) {
    const notUsedConfusingTypeNames = ignoreConfusingTypeNames.filter(
      (id) => !identifiers.includes(id),
    )
    // Validate that `identifierReplacements` is not outdated if there's no match
    if (notUsedConfusingTypeNames.length) {
      const notUsedStr = notUsedConfusingTypeNames
        .map((id) => `\n- ${id}`)
        .join('')
      this.warn(
        `${chunk.fileName} contains unused identifier names${notUsedStr}`,
      )
      process.exitCode = 1
    }
  }
}

Domain

Subdomains

Frequently Asked Questions

What does replaceConfusingTypeNames() do?
replaceConfusingTypeNames() is a function in the vite codebase, defined in packages/vite/rolldown.dts.config.ts.
Where is replaceConfusingTypeNames() defined?
replaceConfusingTypeNames() is defined in packages/vite/rolldown.dts.config.ts at line 267.
What does replaceConfusingTypeNames() call?
replaceConfusingTypeNames() calls 2 function(s): escapeRegex, unique.

Analyze Your Own Codebase

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

Try Supermodel Free