Home / File/ idResolver.ts — vite Source File

idResolver.ts — vite Source File

Architecture documentation for idResolver.ts, a typescript file in the vite codebase. 14 imports, 7 dependents.

File typescript ViteCore ConfigEngine 14 imports 7 dependents 3 functions

Entity Profile

Dependency Diagram

graph LR
  55b2a3d2_8787_d760_1a76_1d2854a39807["idResolver.ts"]
  7da774f9_eca5_d54e_6e01_6bee7d460a2b["config.ts"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 7da774f9_eca5_d54e_6e01_6bee7d460a2b
  eb5604c2_58e1_1c00_5a1a_5d97ea5236ad["ResolvedConfig"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> eb5604c2_58e1_1c00_5a1a_5d97ea5236ad
  3b8df068_35d0_2c94_3ad1_e93c93d1d613["pluginContainer.ts"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 3b8df068_35d0_2c94_3ad1_e93c93d1d613
  285b1044_dd20_6f59_7cf5_0ad094eeacee["EnvironmentPluginContainer"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 285b1044_dd20_6f59_7cf5_0ad094eeacee
  1abc446c_e46b_1be0_59f5_51bdfded0f6c["createEnvironmentPluginContainer"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 1abc446c_e46b_1be0_59f5_51bdfded0f6c
  dcff87b0_a8ea_57a2_3b29_a7b8f19986f3["resolve.ts"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> dcff87b0_a8ea_57a2_3b29_a7b8f19986f3
  0ac6860f_bc2f_9818_86d4_22179cc9c8ba["oxcResolvePlugin"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 0ac6860f_bc2f_9818_86d4_22179cc9c8ba
  3b063797_1fb9_a959_f5c1_af0fc226ed57["InternalResolveOptions"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 3b063797_1fb9_a959_f5c1_af0fc226ed57
  0c33ff62_54e9_5c90_902b_b26728e71fca["environment.ts"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 0c33ff62_54e9_5c90_902b_b26728e71fca
  7e6f7c83_3515_4e0d_5362_4eb9515b4a86["Environment"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 7e6f7c83_3515_4e0d_5362_4eb9515b4a86
  84057c57_14eb_2f16_cd5c_1899e8da6db0["baseEnvironment.ts"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 84057c57_14eb_2f16_cd5c_1899e8da6db0
  dc928824_33f2_0b61_b231_90d8800b77a5["PartialEnvironment"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> dc928824_33f2_0b61_b231_90d8800b77a5
  693ca867_249b_3e5a_0ce1_8930413b7fcd["rolldown"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> 693ca867_249b_3e5a_0ce1_8930413b7fcd
  cfd8b1e7_9c65_e0bc_3035_8612251693cd["plugin-alias"]
  55b2a3d2_8787_d760_1a76_1d2854a39807 --> cfd8b1e7_9c65_e0bc_3035_8612251693cd
  style 55b2a3d2_8787_d760_1a76_1d2854a39807 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import type { PartialResolvedId } from 'rolldown'
import aliasPlugin from '@rollup/plugin-alias'
import type { ResolvedConfig } from './config'
import type { EnvironmentPluginContainer } from './server/pluginContainer'
import { createEnvironmentPluginContainer } from './server/pluginContainer'
import { oxcResolvePlugin } from './plugins/resolve'
import type { InternalResolveOptions } from './plugins/resolve'
import type { Environment } from './environment'
import type { PartialEnvironment } from './baseEnvironment'

export type ResolveIdFn = (
  environment: PartialEnvironment,
  id: string,
  importer?: string,
  aliasOnly?: boolean,
) => Promise<string | undefined>

/**
 * Some projects like Astro were overriding config.createResolver to add a custom
 * alias plugin. For the client and ssr environments, we root through it to avoid
 * breaking changes for now.
 */
export function createBackCompatIdResolver(
  config: ResolvedConfig,
  options?: Partial<InternalResolveOptions>,
): ResolveIdFn {
  const compatResolve = config.createResolver(options)
  let resolve: ResolveIdFn
  return async (environment, id, importer, aliasOnly) => {
    if (environment.name === 'client' || environment.name === 'ssr') {
      return compatResolve(id, importer, aliasOnly, environment.name === 'ssr')
    }
    resolve ??= createIdResolver(config, options)
    return resolve(environment, id, importer, aliasOnly)
  }
}

/**
 * Create an internal resolver to be used in special scenarios, e.g.
 * optimizer and handling css @imports
 */
export function createIdResolver(
  config: ResolvedConfig,
  options?: Partial<InternalResolveOptions>,
): ResolveIdFn {
  const scan = options?.scan

  const pluginContainerMap = new Map<
    PartialEnvironment,
    EnvironmentPluginContainer
  >()
  async function resolve(
    environment: PartialEnvironment,
    id: string,
    importer?: string,
  ): Promise<PartialResolvedId | null> {
    let pluginContainer = pluginContainerMap.get(environment)
    if (!pluginContainer) {
      pluginContainer = await createEnvironmentPluginContainer(
        environment as Environment,
        [
          // @ts-expect-error  the aliasPlugin uses rollup types
          aliasPlugin({ entries: environment.config.resolve.alias }),
          ...oxcResolvePlugin(
            {
              root: config.root,
              isProduction: config.isProduction,
              isBuild: config.command === 'build',
              asSrc: true,
              preferRelative: false,
              tryIndex: true,
              ...options,
              // Ignore sideEffects and other computations as we only need the id
              idOnly: true,
            },
            environment.config,
          ),
        ],
        undefined,
        false,
      )
      pluginContainerMap.set(environment, pluginContainer)
    }
    return await pluginContainer.resolveId(id, importer, { scan })
  }

  const aliasOnlyPluginContainerMap = new Map<
    PartialEnvironment,
    EnvironmentPluginContainer
  >()
  async function resolveAlias(
    environment: PartialEnvironment,
    id: string,
    importer?: string,
  ): Promise<PartialResolvedId | null> {
    let pluginContainer = aliasOnlyPluginContainerMap.get(environment)
    if (!pluginContainer) {
      pluginContainer = await createEnvironmentPluginContainer(
        environment as Environment,
        // @ts-expect-error  the aliasPlugin uses rollup types
        [aliasPlugin({ entries: environment.config.resolve.alias })],
        undefined,
        false,
      )
      aliasOnlyPluginContainerMap.set(environment, pluginContainer)
    }
    return await pluginContainer.resolveId(id, importer, { scan })
  }

  return async (environment, id, importer, aliasOnly) => {
    const resolveFn = aliasOnly ? resolveAlias : resolve
    // aliasPlugin and resolvePlugin are implemented to function with a Environment only,
    // we cast it as PluginEnvironment to be able to use the pluginContainer
    const resolved = await resolveFn(environment, id, importer)
    return resolved?.id
  }
}

Domain

Subdomains

Types

Frequently Asked Questions

What does idResolver.ts do?
idResolver.ts is a source file in the vite codebase, written in typescript. It belongs to the ViteCore domain, ConfigEngine subdomain.
What functions are defined in idResolver.ts?
idResolver.ts defines 3 function(s): createBackCompatIdResolver, createIdResolver, environment.
What does idResolver.ts depend on?
idResolver.ts imports 14 module(s): Environment, EnvironmentPluginContainer, InternalResolveOptions, PartialEnvironment, ResolvedConfig, baseEnvironment.ts, config.ts, createEnvironmentPluginContainer, and 6 more.
What files import idResolver.ts?
idResolver.ts is imported by 7 file(s): assetImportMetaUrl.ts, config.ts, css.ts, dynamicImportVars.ts, resolve.ts, rolldownDepPlugin.ts, workerImportMetaUrl.ts.
Where is idResolver.ts in the architecture?
idResolver.ts is located at packages/vite/src/node/idResolver.ts (domain: ViteCore, subdomain: ConfigEngine, directory: packages/vite/src/node).

Analyze Your Own Codebase

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

Try Supermodel Free