Home / Class/ TemplateRenderer Class — vue Architecture

TemplateRenderer Class — vue Architecture

Architecture documentation for the TemplateRenderer class in index.ts from the vue codebase.

Entity Profile

Dependency Diagram

graph TD
  6267c156_f90f_17b7_4f37_300535e21f45["TemplateRenderer"]
  70b92f4c_021d_4bb1_d973_4e94bcad69f8["index.ts"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|defined in| 70b92f4c_021d_4bb1_d973_4e94bcad69f8
  cb7fcd4e_839f_4b0e_63b8_6edbf71089f4["constructor()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| cb7fcd4e_839f_4b0e_63b8_6edbf71089f4
  5d2cd3b5_081a_3cb2_2e2c_6698f0a2c907["bindRenderFns()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| 5d2cd3b5_081a_3cb2_2e2c_6698f0a2c907
  31737441_3215_1599_6096_babd073ce4a3["render()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| 31737441_3215_1599_6096_babd073ce4a3
  5894a37d_9192_b727_818d_1e75532b2f51["renderStyles()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| 5894a37d_9192_b727_818d_1e75532b2f51
  7c7d334f_3782_7894_ca93_084f14d54628["renderResourceHints()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| 7c7d334f_3782_7894_ca93_084f14d54628
  ab85e43a_7e1f_51d8_5aae_6749fe8b8c37["getPreloadFiles()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| ab85e43a_7e1f_51d8_5aae_6749fe8b8c37
  48f78087_f8f3_e196_d371_cd23f6e72848["renderPreloadLinks()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| 48f78087_f8f3_e196_d371_cd23f6e72848
  93579226_b296_644d_0e3d_02b82c460f30["renderPrefetchLinks()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| 93579226_b296_644d_0e3d_02b82c460f30
  a7382fc7_2a1c_21c4_593d_a281d216bdcd["renderState()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| a7382fc7_2a1c_21c4_593d_a281d216bdcd
  774bdfd4_b797_21a8_42aa_0b7360c53c24["renderScripts()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| 774bdfd4_b797_21a8_42aa_0b7360c53c24
  fde736a8_bc07_cd25_e4d6_4b13d5140b97["getUsedAsyncFiles()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| fde736a8_bc07_cd25_e4d6_4b13d5140b97
  7a01e46c_cb57_f4b6_f87e_9ad369aa019d["createStream()"]
  6267c156_f90f_17b7_4f37_300535e21f45 -->|method| 7a01e46c_cb57_f4b6_f87e_9ad369aa019d

Relationship Graph

Source Code

packages/server-renderer/src/template-renderer/index.ts lines 42–280

export default class TemplateRenderer {
  options: TemplateRendererOptions
  inject: boolean
  parsedTemplate: ParsedTemplate | Function | null
  //@ts-expect-error
  publicPath: string
  //@ts-expect-error
  clientManifest: ClientManifest
  //@ts-expect-error
  preloadFiles: Array<Resource>
  //@ts-expect-error
  prefetchFiles: Array<Resource>
  //@ts-expect-error
  mapFiles: AsyncFileMapper
  serialize: Function

  constructor(options: TemplateRendererOptions) {
    this.options = options
    this.inject = options.inject !== false
    // if no template option is provided, the renderer is created
    // as a utility object for rendering assets like preload links and scripts.

    const { template } = options
    this.parsedTemplate = template
      ? typeof template === 'string'
        ? parseTemplate(template)
        : template
      : null

    // function used to serialize initial state JSON
    this.serialize =
      options.serializer ||
      (state => {
        return serialize(state, { isJSON: true })
      })

    // extra functionality with client manifest
    if (options.clientManifest) {
      const clientManifest = (this.clientManifest = options.clientManifest)
      // ensure publicPath ends with /
      this.publicPath =
        clientManifest.publicPath === ''
          ? ''
          : clientManifest.publicPath.replace(/([^\/])$/, '$1/')
      // preload/prefetch directives
      this.preloadFiles = (clientManifest.initial || []).map(normalizeFile)
      this.prefetchFiles = (clientManifest.async || []).map(normalizeFile)
      // initial async chunk mapping
      this.mapFiles = createMapper(clientManifest)
    }
  }

  bindRenderFns(context: Record<string, any>) {
    const renderer: any = this
    ;['ResourceHints', 'State', 'Scripts', 'Styles'].forEach(type => {
      context[`render${type}`] = renderer[`render${type}`].bind(
        renderer,
        context
      )
    })
    // also expose getPreloadFiles, useful for HTTP/2 push
    context.getPreloadFiles = renderer.getPreloadFiles.bind(renderer, context)
  }

  // render synchronously given rendered app content and render context
  render(
    content: string,
    context: Record<string, any> | null
  ): string | Promise<string> {
    const template = this.parsedTemplate
    if (!template) {
      throw new Error('render cannot be called without a template.')
    }
    context = context || {}

    if (typeof template === 'function') {
      return template(content, context)
    }

    if (this.inject) {
      return (

Frequently Asked Questions

What is the TemplateRenderer class?
TemplateRenderer is a class in the vue codebase, defined in packages/server-renderer/src/template-renderer/index.ts.
Where is TemplateRenderer defined?
TemplateRenderer is defined in packages/server-renderer/src/template-renderer/index.ts at line 42.

Analyze Your Own Codebase

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

Try Supermodel Free