assetImportMetaUrlPlugin() — vite Function Reference
Architecture documentation for the assetImportMetaUrlPlugin() function in assetImportMetaUrl.ts from the vite codebase.
Entity Profile
Dependency Diagram
graph TD 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc["assetImportMetaUrlPlugin()"] 08724e3d_5bec_d6ae_9e92_c1e2fe8f89da["assetImportMetaUrl.ts"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|defined in| 08724e3d_5bec_d6ae_9e92_c1e2fe8f89da 4bea0f1b_5f04_1db0_215b_2e5117aff16d["createAssetImportMetaurlPluginTransform()"] 4bea0f1b_5f04_1db0_215b_2e5117aff16d -->|calls| 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc b1b40b5b_3e43_2197_dea0_d36389d312a1["resolvePlugins()"] b1b40b5b_3e43_2197_dea0_d36389d312a1 -->|calls| 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc 6f691fa3_7390_63e1_f7f6_831423416cf5["getQueryDelimiterIndex()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| 6f691fa3_7390_63e1_f7f6_831423416cf5 b1af9c9a_b1bd_09fa_6d34_0a8a0582d100["buildGlobPattern()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| b1af9c9a_b1bd_09fa_6d34_0a8a0582d100 1948f092_e5a5_076b_2f59_79ef22dec191["injectQuery()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| 1948f092_e5a5_076b_2f59_79ef22dec191 298b86d6_4810_9884_d5fa_3e3077e2206a["isDataUrl()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| 298b86d6_4810_9884_d5fa_3e3077e2206a f094d39d_cd97_2548_86c3_38902c2f3301["slash()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| f094d39d_cd97_2548_86c3_38902c2f3301 2c262e8e_4e5d_80f3_98ab_102647c58f78["tryFsResolve()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| 2c262e8e_4e5d_80f3_98ab_102647c58f78 7ee86c21_2650_c869_2f5d_720909757e00["createBackCompatIdResolver()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| 7ee86c21_2650_c869_2f5d_720909757e00 d9d49dad_960b_4712_7c44_9345473c62e5["isParentDirectory()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| d9d49dad_960b_4712_7c44_9345473c62e5 13b5d2b4_0a9d_90ef_9bfa_129b74a9d64e["fileToUrl()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| 13b5d2b4_0a9d_90ef_9bfa_129b74a9d64e a9bd45ce_8339_2b77_7543_41c306ebdb02["tryStatSync()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| a9bd45ce_8339_2b77_7543_41c306ebdb02 6841c80c_8127_d8ce_ac5d_bb48de9eee42["transformStableResult()"] 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc -->|calls| 6841c80c_8127_d8ce_ac5d_bb48de9eee42 style 33523ba7_f2f0_89b0_b6ac_912e8d2dc8bc fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/vite/src/node/plugins/assetImportMetaUrl.ts lines 34–177
export function assetImportMetaUrlPlugin(config: ResolvedConfig): Plugin {
const { publicDir } = config
let assetResolver: ResolveIdFn
const fsResolveOptions: InternalResolveOptions = {
...config.resolve,
root: config.root,
isProduction: config.isProduction,
isBuild: config.command === 'build',
packageCache: config.packageCache,
asSrc: true,
}
return {
name: 'vite:asset-import-meta-url',
applyToEnvironment(environment) {
return environment.config.consumer === 'client'
},
transform: {
filter: {
id: {
exclude: [exactRegex(preloadHelperId), exactRegex(CLIENT_ENTRY)],
},
code: /new\s+URL.+import\.meta\.url/s,
},
async handler(code, id) {
let s: MagicString | undefined
const assetImportMetaUrlRE =
/\bnew\s+URL\s*\(\s*('[^']+'|"[^"]+"|`[^`]+`)\s*,\s*import\.meta\.url\s*(?:,\s*)?\)/dg
const cleanString = stripLiteral(code)
let match: RegExpExecArray | null
while ((match = assetImportMetaUrlRE.exec(cleanString))) {
const [[startIndex, endIndex], [urlStart, urlEnd]] = match.indices!
if (hasViteIgnoreRE.test(code.slice(startIndex, urlStart))) continue
const rawUrl = code.slice(urlStart, urlEnd)
if (!s) s = new MagicString(code)
// potential dynamic template string
if (rawUrl[0] === '`' && rawUrl.includes('${')) {
const queryDelimiterIndex = getQueryDelimiterIndex(rawUrl)
const hasQueryDelimiter = queryDelimiterIndex !== -1
const pureUrl = hasQueryDelimiter
? rawUrl.slice(0, queryDelimiterIndex) + '`'
: rawUrl
const queryString = hasQueryDelimiter
? rawUrl.slice(queryDelimiterIndex, -1)
: ''
const ast = this.parse(pureUrl)
const templateLiteral = (ast as any).body[0].expression
if (templateLiteral.expressions.length) {
const pattern = buildGlobPattern(templateLiteral)
if (pattern[0] === '*') {
// don't transform for patterns like this
// because users won't intend to do that in most cases
continue
}
const globOptions = {
eager: true,
import: 'default',
// A hack to allow 'as' & 'query' exist at the same time
query: injectQuery(queryString, 'url'),
}
s.update(
startIndex,
endIndex,
`new URL((import.meta.glob(${JSON.stringify(
pattern,
)}, ${JSON.stringify(
globOptions,
)}))[${pureUrl}], import.meta.url)`,
)
continue
}
}
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does assetImportMetaUrlPlugin() do?
assetImportMetaUrlPlugin() is a function in the vite codebase, defined in packages/vite/src/node/plugins/assetImportMetaUrl.ts.
Where is assetImportMetaUrlPlugin() defined?
assetImportMetaUrlPlugin() is defined in packages/vite/src/node/plugins/assetImportMetaUrl.ts at line 34.
What does assetImportMetaUrlPlugin() call?
assetImportMetaUrlPlugin() calls 11 function(s): buildGlobPattern, createBackCompatIdResolver, fileToUrl, getQueryDelimiterIndex, injectQuery, isDataUrl, isParentDirectory, slash, and 3 more.
What calls assetImportMetaUrlPlugin()?
assetImportMetaUrlPlugin() is called by 2 function(s): createAssetImportMetaurlPluginTransform, resolvePlugins.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free