Home / Function/ workerImportMetaUrlPlugin() — vite Function Reference

workerImportMetaUrlPlugin() — vite Function Reference

Architecture documentation for the workerImportMetaUrlPlugin() function in workerImportMetaUrl.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  cc381763_acbd_6aeb_4970_907e43d5b95f["workerImportMetaUrlPlugin()"]
  f241296c_aba8_08ac_c4f9_aed85a9eb247["workerImportMetaUrl.ts"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|defined in| f241296c_aba8_08ac_c4f9_aed85a9eb247
  7f71f89c_a2bd_87a9_0341_0f09d35da72f["createWorkerImportMetaUrlPluginTransform()"]
  7f71f89c_a2bd_87a9_0341_0f09d35da72f -->|calls| cc381763_acbd_6aeb_4970_907e43d5b95f
  b1b40b5b_3e43_2197_dea0_d36389d312a1["resolvePlugins()"]
  b1b40b5b_3e43_2197_dea0_d36389d312a1 -->|calls| cc381763_acbd_6aeb_4970_907e43d5b95f
  fcb9c288_b3dc_c5f2_7476_d243d97d0e75["getWorkerType()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| fcb9c288_b3dc_c5f2_7476_d243d97d0e75
  f094d39d_cd97_2548_86c3_38902c2f3301["slash()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| f094d39d_cd97_2548_86c3_38902c2f3301
  2c262e8e_4e5d_80f3_98ab_102647c58f78["tryFsResolve()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| 2c262e8e_4e5d_80f3_98ab_102647c58f78
  7ee86c21_2650_c869_2f5d_720909757e00["createBackCompatIdResolver()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| 7ee86c21_2650_c869_2f5d_720909757e00
  10b9dea8_362c_1af2_93be_afa4dd9aed9e["cleanUrl()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| 10b9dea8_362c_1af2_93be_afa4dd9aed9e
  2263fc73_3545_6a6d_f020_363141e760f3["workerFileToUrl()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| 2263fc73_3545_6a6d_f020_363141e760f3
  b8f7857f_eb38_9730_a8eb_658b77a590c9["toOutputFilePathInJSForBundledDev()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| b8f7857f_eb38_9730_a8eb_658b77a590c9
  13b5d2b4_0a9d_90ef_9bfa_129b74a9d64e["fileToUrl()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| 13b5d2b4_0a9d_90ef_9bfa_129b74a9d64e
  1948f092_e5a5_076b_2f59_79ef22dec191["injectQuery()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| 1948f092_e5a5_076b_2f59_79ef22dec191
  6841c80c_8127_d8ce_ac5d_bb48de9eee42["transformStableResult()"]
  cc381763_acbd_6aeb_4970_907e43d5b95f -->|calls| 6841c80c_8127_d8ce_ac5d_bb48de9eee42
  style cc381763_acbd_6aeb_4970_907e43d5b95f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/node/plugins/workerImportMetaUrl.ts lines 186–297

export function workerImportMetaUrlPlugin(config: ResolvedConfig): Plugin {
  const isBundled = config.isBundled
  let workerResolver: ResolveIdFn

  const fsResolveOptions: InternalResolveOptions = {
    ...config.resolve,
    root: config.root,
    isProduction: config.isProduction,
    isBuild: config.command === 'build',
    packageCache: config.packageCache,
    asSrc: true,
  }

  return {
    name: 'vite:worker-import-meta-url',

    applyToEnvironment(environment) {
      return environment.config.consumer === 'client'
    },

    transform: {
      filter: { code: workerImportMetaUrlRE },
      async handler(code, id) {
        let s: MagicString | undefined
        const cleanString = stripLiteral(code)
        const workerImportMetaUrlRE =
          /\bnew\s+(?:Worker|SharedWorker)\s*\(\s*(new\s+URL\s*\(\s*('[^']+'|"[^"]+"|`[^`]+`)\s*,\s*import\.meta\.url\s*(?:,\s*)?\))/dg

        let match: RegExpExecArray | null
        while ((match = workerImportMetaUrlRE.exec(cleanString))) {
          const [[, endIndex], [expStart, expEnd], [urlStart, urlEnd]] =
            match.indices!

          const rawUrl = code.slice(urlStart, urlEnd)

          // potential dynamic template string
          if (rawUrl[0] === '`' && rawUrl.includes('${')) {
            this.error(
              `\`new URL(url, import.meta.url)\` is not supported in dynamic template string.`,
              expStart,
            )
          }

          s ||= new MagicString(code)
          const workerType = await getWorkerType(code, cleanString, endIndex)
          const url = rawUrl.slice(1, -1)
          let file: string | undefined
          if (url[0] === '.') {
            file = path.resolve(path.dirname(id), url)
            file = slash(tryFsResolve(file, fsResolveOptions) ?? file)
          } else {
            workerResolver ??= createBackCompatIdResolver(config, {
              extensions: [],
              tryIndex: false,
              preferRelative: true,
            })
            file = await workerResolver(this.environment, url, id)
            file ??=
              url[0] === '/'
                ? slash(path.join(config.publicDir, url))
                : slash(path.resolve(path.dirname(id), url))
          }

          if (
            isBundled &&
            config.isWorker &&
            config.bundleChain.at(-1) === cleanUrl(file)
          ) {
            s.update(expStart, expEnd, 'self.location.href')
          } else {
            let builtUrl: string
            if (isBundled) {
              const result = await workerFileToUrl(config, file)
              if (
                this.environment.config.command === 'serve' &&
                this.environment.config.experimental.bundledDev
              ) {
                builtUrl = toOutputFilePathInJSForBundledDev(
                  this.environment,
                  result.entryFilename,
                )

Domain

Subdomains

Frequently Asked Questions

What does workerImportMetaUrlPlugin() do?
workerImportMetaUrlPlugin() is a function in the vite codebase, defined in packages/vite/src/node/plugins/workerImportMetaUrl.ts.
Where is workerImportMetaUrlPlugin() defined?
workerImportMetaUrlPlugin() is defined in packages/vite/src/node/plugins/workerImportMetaUrl.ts at line 186.
What does workerImportMetaUrlPlugin() call?
workerImportMetaUrlPlugin() calls 10 function(s): cleanUrl, createBackCompatIdResolver, fileToUrl, getWorkerType, injectQuery, slash, toOutputFilePathInJSForBundledDev, transformStableResult, and 2 more.
What calls workerImportMetaUrlPlugin()?
workerImportMetaUrlPlugin() is called by 2 function(s): createWorkerImportMetaUrlPluginTransform, resolvePlugins.

Analyze Your Own Codebase

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

Try Supermodel Free