Home / Function/ extractExportsData() — vite Function Reference

extractExportsData() — vite Function Reference

Architecture documentation for the extractExportsData() function in index.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  60451d3e_8c58_53f5_26c6_c17035d9a884["extractExportsData()"]
  2f328851_91ee_fb05_63f0_4f466b9d6250["index.ts"]
  60451d3e_8c58_53f5_26c6_c17035d9a884 -->|defined in| 2f328851_91ee_fb05_63f0_4f466b9d6250
  9b7b17a5_d5ad_52e2_bb45_a7dd0edefa69["toDiscoveredDependencies()"]
  9b7b17a5_d5ad_52e2_bb45_a7dd0edefa69 -->|calls| 60451d3e_8c58_53f5_26c6_c17035d9a884
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf["prepareRolldownOptimizerRun()"]
  27cb44a2_ca79_d2a4_e536_a5e4bc22ffbf -->|calls| 60451d3e_8c58_53f5_26c6_c17035d9a884
  d7d28d2f_0a7a_bed9_0e0f_6db71b4e1368["optimizedDepNeedsInterop()"]
  d7d28d2f_0a7a_bed9_0e0f_6db71b4e1368 -->|calls| 60451d3e_8c58_53f5_26c6_c17035d9a884
  d40c38f0_b6c1_b93f_a735_b3f1e17bea5b["createDepsOptimizer()"]
  d40c38f0_b6c1_b93f_a735_b3f1e17bea5b -->|calls| 60451d3e_8c58_53f5_26c6_c17035d9a884
  40f91c1f_e515_2c03_9628_3e4ba2691b70["asyncFlatten()"]
  60451d3e_8c58_53f5_26c6_c17035d9a884 -->|calls| 40f91c1f_e515_2c03_9628_3e4ba2691b70
  19ce2051_6a74_4b8b_104d_ec006cd7075f["arraify()"]
  60451d3e_8c58_53f5_26c6_c17035d9a884 -->|calls| 19ce2051_6a74_4b8b_104d_ec006cd7075f
  047aa0d5_25bc_9eb0_8c41_99a2be202642["transformWithOxc()"]
  60451d3e_8c58_53f5_26c6_c17035d9a884 -->|calls| 047aa0d5_25bc_9eb0_8c41_99a2be202642
  style 60451d3e_8c58_53f5_26c6_c17035d9a884 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/node/optimizer/index.ts lines 1092–1170

export async function extractExportsData(
  environment: Environment,
  filePath: string,
): Promise<ExportsData> {
  await init

  const { optimizeDeps } = environment.config

  const rolldownOptions = optimizeDeps.rolldownOptions ?? {}
  if (optimizeDeps.extensions?.some((ext) => filePath.endsWith(ext))) {
    // For custom supported extensions, build the entry file to transform it into JS,
    // and then parse with es-module-lexer. Note that the `bundle` option is not `true`,
    // so only the entry file is being transformed.
    const { plugins: pluginsFromConfig = [], ...remainingRolldownOptions } =
      rolldownOptions
    const plugins = await asyncFlatten(arraify(pluginsFromConfig))
    plugins.unshift({
      name: 'externalize',
      resolveId(id, importer) {
        if (importer !== undefined) {
          return { id, external: true }
        }
      },
    })
    const build = await rolldown({
      ...remainingRolldownOptions,
      plugins,
      input: [filePath],
      // TODO: remove this and enable rolldown's CSS support later
      moduleTypes: {
        '.css': 'js',
        ...remainingRolldownOptions.moduleTypes,
      },
    })
    const result = await build.generate({
      ...rolldownOptions.output,
      format: 'esm',
      sourcemap: false,
    })
    const [, exports, , hasModuleSyntax] = parse(result.output[0].code)
    return {
      hasModuleSyntax,
      exports: exports.map((e) => e.n),
    }
  }

  let parseResult: ReturnType<typeof parse>
  let usedJsxLoader = false

  const entryContent = fs.readFileSync(filePath, 'utf-8')
  try {
    parseResult = parse(entryContent)
  } catch {
    const lang = rolldownOptions.moduleTypes?.[path.extname(filePath)] || 'jsx'
    debug?.(
      `Unable to parse: ${filePath}.\n Trying again with a ${lang} transform.`,
    )
    if (lang !== 'jsx' && lang !== 'tsx' && lang !== 'ts') {
      throw new Error(`Unable to parse : ${filePath}.`)
    }
    const transformed = await transformWithOxc(
      entryContent,
      filePath,
      { lang },
      undefined,
      environment.config,
    )
    parseResult = parse(transformed.code)
    usedJsxLoader = true
  }

  const [, exports, , hasModuleSyntax] = parseResult
  const exportsData: ExportsData = {
    hasModuleSyntax,
    exports: exports.map((e) => e.n),
    jsxLoader: usedJsxLoader,
  }
  return exportsData
}

Subdomains

Frequently Asked Questions

What does extractExportsData() do?
extractExportsData() is a function in the vite codebase, defined in packages/vite/src/node/optimizer/index.ts.
Where is extractExportsData() defined?
extractExportsData() is defined in packages/vite/src/node/optimizer/index.ts at line 1092.
What does extractExportsData() call?
extractExportsData() calls 3 function(s): arraify, asyncFlatten, transformWithOxc.
What calls extractExportsData()?
extractExportsData() is called by 4 function(s): createDepsOptimizer, optimizedDepNeedsInterop, prepareRolldownOptimizerRun, toDiscoveredDependencies.

Analyze Your Own Codebase

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

Try Supermodel Free