Home / File/ ssrModuleLoader.ts — vite Source File

ssrModuleLoader.ts — vite Source File

Architecture documentation for ssrModuleLoader.ts, a typescript file in the vite codebase. 16 imports, 1 dependents.

File typescript ViteCore ConfigEngine 16 imports 1 dependents 2 functions 1 classes

Entity Profile

Dependency Diagram

graph LR
  b7a0ff91_0490_7aed_6486_84da56e8e026["ssrModuleLoader.ts"]
  a423a1ed_f7d8_0eb5_9b8f_ddfa7fa8147e["index.ts"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> a423a1ed_f7d8_0eb5_9b8f_ddfa7fa8147e
  31fbe894_2070_4b11_3ffa_96b46ed3dfa9["ViteDevServer"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> 31fbe894_2070_4b11_3ffa_96b46ed3dfa9
  abfc9e70_3c15_b3f0_a595_3cf27afb7e64["utils.ts"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> abfc9e70_3c15_b3f0_a595_3cf27afb7e64
  795dec35_22f9_80f5_ccab_9c2d170af0d3["unwrapId"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> 795dec35_22f9_80f5_ccab_9c2d170af0d3
  7916c84f_5621_2b3b_d220_a171ebce997f["environment.ts"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> 7916c84f_5621_2b3b_d220_a171ebce997f
  f634223d_ed8e_a65b_08f8_a839ec17994a["DevEnvironment"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> f634223d_ed8e_a65b_08f8_a839ec17994a
  18db4f26_79f1_5b7d_b291_4feeaf95538f["hmr.ts"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> 18db4f26_79f1_5b7d_b291_4feeaf95538f
  7c428646_092a_d4a3_4ee1_a6544a5cae8a["NormalizedServerHotChannel"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> 7c428646_092a_d4a3_4ee1_a6544a5cae8a
  09588b79_e65d_f18b_cb8c_e85991fbc94c["error.ts"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> 09588b79_e65d_f18b_cb8c_e85991fbc94c
  176d3c88_57c7_304f_2535_f2d1054b5048["buildErrorMessage"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> 176d3c88_57c7_304f_2535_f2d1054b5048
  e29c58b0_0755_ae27_7a1e_c5e90513f90f["ssrStacktrace.ts"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> e29c58b0_0755_ae27_7a1e_c5e90513f90f
  5028e255_92bf_a4fa_b8ac_c4b82ad977b0["ssrFixStacktrace"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> 5028e255_92bf_a4fa_b8ac_c4b82ad977b0
  d14cf24c_f830_6905_0df1_4e9b0f67c84b["serverModuleRunner.ts"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> d14cf24c_f830_6905_0df1_4e9b0f67c84b
  ff59ab93_7c74_485b_47bc_a4e4a58d6455["createServerModuleRunnerTransport"]
  b7a0ff91_0490_7aed_6486_84da56e8e026 --> ff59ab93_7c74_485b_47bc_a4e4a58d6455
  style b7a0ff91_0490_7aed_6486_84da56e8e026 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import colors from 'picocolors'
import type { EvaluatedModuleNode } from 'vite/module-runner'
import {
  ESModulesEvaluator,
  ModuleRunner,
  createNodeImportMeta,
} from 'vite/module-runner'
import type { ViteDevServer } from '../server'
import { unwrapId } from '../../shared/utils'
import type { DevEnvironment } from '../server/environment'
import type { NormalizedServerHotChannel } from '../server/hmr'
import { buildErrorMessage } from '../server/middlewares/error'
import { ssrFixStacktrace } from './ssrStacktrace'
import { createServerModuleRunnerTransport } from './runtime/serverModuleRunner'

type SSRModule = Record<string, any>

export async function ssrLoadModule(
  url: string,
  server: ViteDevServer,
  fixStacktrace?: boolean,
): Promise<SSRModule> {
  const environment = server.environments.ssr
  server._ssrCompatModuleRunner ||= new SSRCompatModuleRunner(environment)
  url = unwrapId(url)

  return instantiateModule(
    url,
    server._ssrCompatModuleRunner,
    environment,
    fixStacktrace,
  )
}

async function instantiateModule(
  url: string,
  runner: ModuleRunner,
  environment: DevEnvironment,
  fixStacktrace?: boolean,
): Promise<SSRModule> {
  const mod = await environment.moduleGraph.ensureEntryFromUrl(url)

  if (mod.ssrError) {
    throw mod.ssrError
  }

  try {
    return await runner.import(url)
  } catch (e: any) {
    if (e.stack && fixStacktrace) {
      ssrFixStacktrace(e, environment.moduleGraph)
    }

    environment.logger.error(
      buildErrorMessage(e, [
        colors.red(`Error when evaluating SSR module ${url}: ${e.message}`),
      ]),
      {
        timestamp: true,
        clear: environment.config.clearScreen,
        error: e,
      },
    )

    throw e
  }
}

class SSRCompatModuleRunner extends ModuleRunner {
  constructor(private environment: DevEnvironment) {
    super(
      {
        transport: createServerModuleRunnerTransport({
          channel: environment.hot as NormalizedServerHotChannel,
        }),
        createImportMeta: createNodeImportMeta,
        sourcemapInterceptor: false,
        hmr: false,
      },
      new ESModulesEvaluator(),
    )
  }

  protected override async directRequest(
    url: string,
    mod: EvaluatedModuleNode,
    callstack: string[],
  ): Promise<any> {
    const id = mod.meta && 'id' in mod.meta && mod.meta.id
    // serverId doesn't exist for external modules
    if (!id) {
      return super.directRequest(url, mod, callstack)
    }

    const viteMod = this.environment.moduleGraph.getModuleById(id)

    if (!viteMod) {
      return super.directRequest(id, mod, callstack)
    }

    try {
      const exports = await super.directRequest(id, mod, callstack)
      viteMod.ssrModule = exports
      return exports
    } catch (err) {
      viteMod.ssrError = err
      throw err
    }
  }
}

Domain

Subdomains

Types

Frequently Asked Questions

What does ssrModuleLoader.ts do?
ssrModuleLoader.ts is a source file in the vite codebase, written in typescript. It belongs to the ViteCore domain, ConfigEngine subdomain.
What functions are defined in ssrModuleLoader.ts?
ssrModuleLoader.ts defines 2 function(s): instantiateModule, ssrLoadModule.
What does ssrModuleLoader.ts depend on?
ssrModuleLoader.ts imports 16 module(s): DevEnvironment, NormalizedServerHotChannel, ViteDevServer, buildErrorMessage, createServerModuleRunnerTransport, environment.ts, error.ts, hmr.ts, and 8 more.
What files import ssrModuleLoader.ts?
ssrModuleLoader.ts is imported by 1 file(s): index.ts.
Where is ssrModuleLoader.ts in the architecture?
ssrModuleLoader.ts is located at packages/vite/src/node/ssr/ssrModuleLoader.ts (domain: ViteCore, subdomain: ConfigEngine, directory: packages/vite/src/node/ssr).

Analyze Your Own Codebase

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

Try Supermodel Free