Home / Class/ TemplateStream Class — vue Architecture

TemplateStream Class — vue Architecture

Architecture documentation for the TemplateStream class in template-stream.ts from the vue codebase.

Entity Profile

Dependency Diagram

graph TD
  28d68c7e_2c7f_5bb2_b735_7354abc74108["TemplateStream"]
  7c3caf9f_7ed4_b48a_352b_1ad68589eac6["template-stream.ts"]
  28d68c7e_2c7f_5bb2_b735_7354abc74108 -->|defined in| 7c3caf9f_7ed4_b48a_352b_1ad68589eac6
  0ef556f7_d362_84b8_707e_50d668e67c3e["constructor()"]
  28d68c7e_2c7f_5bb2_b735_7354abc74108 -->|method| 0ef556f7_d362_84b8_707e_50d668e67c3e
  97d5c3f8_7b32_5618_ac83_a1c5068bd623["_transform()"]
  28d68c7e_2c7f_5bb2_b735_7354abc74108 -->|method| 97d5c3f8_7b32_5618_ac83_a1c5068bd623
  d73c9526_09c0_71b5_ab46_cdd9dcf35673["start()"]
  28d68c7e_2c7f_5bb2_b735_7354abc74108 -->|method| d73c9526_09c0_71b5_ab46_cdd9dcf35673
  b826801b_639e_be55_d795_731fd2aa3dc5["_flush()"]
  28d68c7e_2c7f_5bb2_b735_7354abc74108 -->|method| b826801b_639e_be55_d795_731fd2aa3dc5

Relationship Graph

Source Code

packages/server-renderer/src/template-renderer/template-stream.ts lines 6–81

export default class TemplateStream extends Transform {
  started: boolean
  renderer: TemplateRenderer
  template: ParsedTemplate
  context: Record<string, any>
  inject: boolean

  constructor(
    renderer: TemplateRenderer,
    template: ParsedTemplate,
    context: Record<string, any>
  ) {
    super()
    this.started = false
    this.renderer = renderer
    this.template = template
    this.context = context || {}
    this.inject = renderer.inject
  }

  _transform(data: Buffer | string, encoding: string, done: Function) {
    if (!this.started) {
      this.emit('beforeStart')
      this.start()
    }
    this.push(data)
    done()
  }

  start() {
    this.started = true
    this.push(this.template.head(this.context))

    if (this.inject) {
      // inline server-rendered head meta information
      if (this.context.head) {
        this.push(this.context.head)
      }

      // inline preload/prefetch directives for initial/async chunks
      const links = this.renderer.renderResourceHints(this.context)
      if (links) {
        this.push(links)
      }

      // CSS files and inline server-rendered CSS collected by vue-style-loader
      const styles = this.renderer.renderStyles(this.context)
      if (styles) {
        this.push(styles)
      }
    }

    this.push(this.template.neck(this.context))
  }

  _flush(done: Function) {
    this.emit('beforeEnd')

    if (this.inject) {
      // inline initial store state
      const state = this.renderer.renderState(this.context)
      if (state) {
        this.push(state)
      }

      // embed scripts needed
      const scripts = this.renderer.renderScripts(this.context)
      if (scripts) {
        this.push(scripts)
      }
    }

    this.push(this.template.tail(this.context))
    done()
  }
}

Frequently Asked Questions

What is the TemplateStream class?
TemplateStream is a class in the vue codebase, defined in packages/server-renderer/src/template-renderer/template-stream.ts.
Where is TemplateStream defined?
TemplateStream is defined in packages/server-renderer/src/template-renderer/template-stream.ts at line 6.

Analyze Your Own Codebase

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

Try Supermodel Free