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
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64["TemplateRenderer"]
  dd60f8d3_0510_6c88_43e7_0031a6d72263["index.ts"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|defined in| dd60f8d3_0510_6c88_43e7_0031a6d72263
  4f56eba8_4bcc_ea76_3d31_b69c48b1836e["constructor()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| 4f56eba8_4bcc_ea76_3d31_b69c48b1836e
  f07ce837_f1b1_3c7f_1e83_fc7a3e6ac523["bindRenderFns()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| f07ce837_f1b1_3c7f_1e83_fc7a3e6ac523
  c2756fe6_1f1e_29d1_4e0a_75be9f92ec3b["render()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| c2756fe6_1f1e_29d1_4e0a_75be9f92ec3b
  f44f112c_5db8_7334_0114_a66283aafe69["renderStyles()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| f44f112c_5db8_7334_0114_a66283aafe69
  1e33fa19_964c_fc1d_b475_9148bf079077["renderResourceHints()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| 1e33fa19_964c_fc1d_b475_9148bf079077
  c5a33546_28a8_ada6_eaf0_9eccdf8cec76["getPreloadFiles()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| c5a33546_28a8_ada6_eaf0_9eccdf8cec76
  c77d7f70_19ea_6ee5_b5a1_f39fc8c5b2c1["renderPreloadLinks()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| c77d7f70_19ea_6ee5_b5a1_f39fc8c5b2c1
  1942cea0_d824_508f_4ddc_fb5cf2567299["renderPrefetchLinks()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| 1942cea0_d824_508f_4ddc_fb5cf2567299
  1788e29c_e4bb_9fb7_3ffa_5decd1d21123["renderState()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| 1788e29c_e4bb_9fb7_3ffa_5decd1d21123
  0887ee34_8d99_7e8a_1cbb_dc5cefba6b9d["renderScripts()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| 0887ee34_8d99_7e8a_1cbb_dc5cefba6b9d
  3884fbd0_8831_d753_c6b2_9634b8a270c5["getUsedAsyncFiles()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| 3884fbd0_8831_d753_c6b2_9634b8a270c5
  0e1a08dc_34b7_e3a6_2c6e_9ccddca3d0de["createStream()"]
  a6b6f41b_6598_1b32_00b3_8bbaa08b8c64 -->|method| 0e1a08dc_34b7_e3a6_2c6e_9ccddca3d0de

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