Home / Function/ ssrTransformScript() — vite Function Reference

ssrTransformScript() — vite Function Reference

Architecture documentation for the ssrTransformScript() function in ssrTransform.ts from the vite codebase.

Entity Profile

Dependency Diagram

graph TD
  027164d9_0d90_6487_4866_e21cb9d3e6c1["ssrTransformScript()"]
  20c20aaf_ad5b_4014_72b5_c8262a2b5be1["ssrTransform.ts"]
  027164d9_0d90_6487_4866_e21cb9d3e6c1 -->|defined in| 20c20aaf_ad5b_4014_72b5_c8262a2b5be1
  1ee4af98_1554_7714_4370_05ac2b2589cd["ssrTransform()"]
  1ee4af98_1554_7714_4370_05ac2b2589cd -->|calls| 027164d9_0d90_6487_4866_e21cb9d3e6c1
  7e08b9a5_2650_5312_63d2_5971015349af["numberToPos()"]
  027164d9_0d90_6487_4866_e21cb9d3e6c1 -->|calls| 7e08b9a5_2650_5312_63d2_5971015349af
  310ed049_c1b4_c917_b399_81bab290e5a2["generateCodeFrame()"]
  027164d9_0d90_6487_4866_e21cb9d3e6c1 -->|calls| 310ed049_c1b4_c917_b399_81bab290e5a2
  873ce744_c3af_fdc6_c381_1e89e98d31cf["getIdentifierNameOrLiteralValue()"]
  027164d9_0d90_6487_4866_e21cb9d3e6c1 -->|calls| 873ce744_c3af_fdc6_c381_1e89e98d31cf
  1f4d9016_899e_0522_098a_8c1386655467["walk()"]
  027164d9_0d90_6487_4866_e21cb9d3e6c1 -->|calls| 1f4d9016_899e_0522_098a_8c1386655467
  90a82f7f_608b_60ef_b83d_da1ff0dfb384["isStaticProperty()"]
  027164d9_0d90_6487_4866_e21cb9d3e6c1 -->|calls| 90a82f7f_608b_60ef_b83d_da1ff0dfb384
  c9e13c92_3046_b340_998d_d0be8193e4bf["isNodeInPattern()"]
  027164d9_0d90_6487_4866_e21cb9d3e6c1 -->|calls| c9e13c92_3046_b340_998d_d0be8193e4bf
  5f4200f5_1cdf_b284_eca0_1eecbd7bc4d3["isInDestructuringAssignment()"]
  027164d9_0d90_6487_4866_e21cb9d3e6c1 -->|calls| 5f4200f5_1cdf_b284_eca0_1eecbd7bc4d3
  cb1210e8_03e9_2eec_ef04_aa15d44d4c08["combineSourcemaps()"]
  027164d9_0d90_6487_4866_e21cb9d3e6c1 -->|calls| cb1210e8_03e9_2eec_ef04_aa15d44d4c08
  style 027164d9_0d90_6487_4866_e21cb9d3e6c1 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/vite/src/node/ssr/ssrTransform.ts lines 82–453

async function ssrTransformScript(
  code: string,
  inMap: SourceMap | { mappings: '' } | null,
  url: string,
  originalCode: string,
): Promise<TransformResult | null> {
  const s = new MagicString(code)

  let ast: any
  try {
    ast = await rolldownParseAstAsync(code)
  } catch (err) {
    // enhance known rollup errors
    // https://github.com/rollup/rollup/blob/42e587e0e37bc0661aa39fe7ad6f1d7fd33f825c/src/utils/bufferToAst.ts#L17-L22
    if (err.code === 'PARSE_ERROR') {
      err.message = `Parse failure: ${err.message}\n`
      err.id = url
      if (typeof err.pos === 'number') {
        err.loc = numberToPos(code, err.pos)
        err.loc.file = url
        err.frame = generateCodeFrame(code, err.pos)
        err.message += `At file: ${url}:${err.loc.line}:${err.loc.column}`
      } else {
        err.message += `At file: ${url}`
      }
    }
    throw err
  }

  let uid = 0
  const deps = new Set<string>()
  const dynamicDeps = new Set<string>()
  const idToImportMap = new Map<string, string>()
  const declaredConst = new Set<string>()

  // hoist at the start of the file, after the hashbang
  const fileStartIndex = hashbangRE.exec(code)?.[0].length ?? 0
  let hoistIndex = fileStartIndex

  function defineImport(
    index: number,
    importNode: (
      | ImportDeclaration
      | (ExportNamedDeclaration & { source: Literal })
      | ExportAllDeclaration
    ) & {
      start: number
      end: number
    },
    metadata?: DefineImportMetadata,
  ) {
    const source = importNode.source.value as string
    deps.add(source)

    // Reduce metadata to undefined if it's all default values
    const metadataArg =
      (metadata?.importedNames?.length ?? 0) > 0
        ? `, ${JSON.stringify(metadata)}`
        : ''

    const importId = `__vite_ssr_import_${uid++}__`
    const transformedImport = `const ${importId} = await ${ssrImportKey}(${JSON.stringify(
      source,
    )}${metadataArg});\n`

    s.update(importNode.start, importNode.end, transformedImport)

    if (importNode.start === index) {
      // no need to hoist, but update hoistIndex to keep the order
      hoistIndex = importNode.end
    } else {
      // There will be an error if the module is called before it is imported,
      // so the module import statement is hoisted to the top
      s.move(importNode.start, importNode.end, index)
    }

    return importId
  }

  function defineExport(name: string, local = name) {
    // wrap with try/catch to fallback to `undefined` for backward compat.

Domain

Subdomains

Called By

Frequently Asked Questions

What does ssrTransformScript() do?
ssrTransformScript() is a function in the vite codebase, defined in packages/vite/src/node/ssr/ssrTransform.ts.
Where is ssrTransformScript() defined?
ssrTransformScript() is defined in packages/vite/src/node/ssr/ssrTransform.ts at line 82.
What does ssrTransformScript() call?
ssrTransformScript() calls 8 function(s): combineSourcemaps, generateCodeFrame, getIdentifierNameOrLiteralValue, isInDestructuringAssignment, isNodeInPattern, isStaticProperty, numberToPos, walk.
What calls ssrTransformScript()?
ssrTransformScript() is called by 1 function(s): ssrTransform.

Analyze Your Own Codebase

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

Try Supermodel Free