Home / Function/ resolveDeepImport() — vite Function Reference

resolveDeepImport() — vite Function Reference

Architecture documentation for the resolveDeepImport() function in resolve.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  b2e6fca1_a66d_30a7_9a9e_9c6de6c46d25["resolveDeepImport()"]
  dcff87b0_a8ea_57a2_3b29_a7b8f19986f3["resolve.ts"]
  b2e6fca1_a66d_30a7_9a9e_9c6de6c46d25 -->|defined in| dcff87b0_a8ea_57a2_3b29_a7b8f19986f3
  2aff86e8_0c9d_22cb_6536_c1321e1aaa1d["isObject()"]
  b2e6fca1_a66d_30a7_9a9e_9c6de6c46d25 -->|calls| 2aff86e8_0c9d_22cb_6536_c1321e1aaa1d
  09d0a948_4a89_8bbc_50ce_129fc70dbd66["splitFileAndPostfix()"]
  b2e6fca1_a66d_30a7_9a9e_9c6de6c46d25 -->|calls| 09d0a948_4a89_8bbc_50ce_129fc70dbd66
  c10abc49_1d0c_ffeb_c31f_9afc51ce808b["resolveExportsOrImports()"]
  b2e6fca1_a66d_30a7_9a9e_9c6de6c46d25 -->|calls| c10abc49_1d0c_ffeb_c31f_9afc51ce808b
  8ff08c93_2e0c_c3ed_bfd0_267a77f07273["mapWithBrowserField()"]
  b2e6fca1_a66d_30a7_9a9e_9c6de6c46d25 -->|calls| 8ff08c93_2e0c_c3ed_bfd0_267a77f07273
  2c262e8e_4e5d_80f3_98ab_102647c58f78["tryFsResolve()"]
  b2e6fca1_a66d_30a7_9a9e_9c6de6c46d25 -->|calls| 2c262e8e_4e5d_80f3_98ab_102647c58f78
  style b2e6fca1_a66d_30a7_9a9e_9c6de6c46d25 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/node/plugins/resolve.ts lines 1042–1109

function resolveDeepImport(
  id: string,
  { setResolvedCache, getResolvedCache, dir, data }: PackageData,
  options: InternalResolveOptions,
  externalize?: boolean,
): string | undefined {
  const cache = getResolvedCache(id, options)
  if (cache) {
    return cache
  }

  let relativeId: string | undefined | void = id
  const { exports: exportsField, browser: browserField } = data

  // map relative based on exports data
  if (exportsField) {
    if (isObject(exportsField) && !Array.isArray(exportsField)) {
      // resolve without postfix (see #7098)
      const { file, postfix } = splitFileAndPostfix(relativeId)
      const exportsId = resolveExportsOrImports(
        data,
        file,
        options,
        'exports',
        externalize,
      )
      if (exportsId !== undefined) {
        relativeId = exportsId + postfix
      } else {
        relativeId = undefined
      }
    } else {
      // not exposed
      relativeId = undefined
    }
    if (!relativeId) {
      throw new Error(
        `Package subpath '${relativeId}' is not defined by "exports" in ` +
          `${path.join(dir, 'package.json')}.`,
      )
    }
  } else if (options.mainFields.includes('browser') && isObject(browserField)) {
    // resolve without postfix (see #7098)
    const { file, postfix } = splitFileAndPostfix(relativeId)
    const mapped = mapWithBrowserField(file, browserField)
    if (mapped) {
      relativeId = mapped + postfix
    } else if (mapped === false) {
      setResolvedCache(id, browserExternalId, options)
      return browserExternalId
    }
  }

  if (relativeId) {
    const resolved = tryFsResolve(
      path.join(dir, relativeId),
      options,
      !exportsField, // try index only if no exports field
    )
    if (resolved) {
      debug?.(
        `[node/deep-import] ${colors.cyan(id)} -> ${colors.dim(resolved)}`,
      )
      setResolvedCache(id, resolved, options)
      return resolved
    }
  }
}

Domain

Subdomains

Frequently Asked Questions

What does resolveDeepImport() do?
resolveDeepImport() is a function in the vite codebase, defined in packages/vite/src/node/plugins/resolve.ts.
Where is resolveDeepImport() defined?
resolveDeepImport() is defined in packages/vite/src/node/plugins/resolve.ts at line 1042.
What does resolveDeepImport() call?
resolveDeepImport() calls 5 function(s): isObject, mapWithBrowserField, resolveExportsOrImports, splitFileAndPostfix, tryFsResolve.

Analyze Your Own Codebase

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

Try Supermodel Free