Home / Function/ assetImportMetaUrlPlugin() — vite Function Reference

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

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