idResolver.ts — vite Source File
Architecture documentation for idResolver.ts, a typescript file in the vite codebase. 14 imports, 7 dependents.
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
Dependencies
Imported By
- packages/vite/src/node/plugins/assetImportMetaUrl.ts
- packages/vite/src/node/config.ts
- packages/vite/src/node/plugins/css.ts
- packages/vite/src/node/plugins/dynamicImportVars.ts
- packages/vite/src/node/optimizer/resolve.ts
- packages/vite/src/node/optimizer/rolldownDepPlugin.ts
- packages/vite/src/node/plugins/workerImportMetaUrl.ts
Source
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