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
  f05845f9_ab92_f302_7c35_d458f3105a3d["TemplateStream"]
  93d70dd6_8b08_c5e1_f821_d322263718c1["template-stream.ts"]
  f05845f9_ab92_f302_7c35_d458f3105a3d -->|defined in| 93d70dd6_8b08_c5e1_f821_d322263718c1
  3288e0bb_762b_d897_a5dc_75b8394d701c["constructor()"]
  f05845f9_ab92_f302_7c35_d458f3105a3d -->|method| 3288e0bb_762b_d897_a5dc_75b8394d701c
  2c9c5d50_b676_44a9_62a3_74b3629ac4aa["_transform()"]
  f05845f9_ab92_f302_7c35_d458f3105a3d -->|method| 2c9c5d50_b676_44a9_62a3_74b3629ac4aa
  411ddda2_962f_2863_118c_4eadeb763c91["start()"]
  f05845f9_ab92_f302_7c35_d458f3105a3d -->|method| 411ddda2_962f_2863_118c_4eadeb763c91
  b5113cab_d984_a93c_89b1_a197387b5da3["_flush()"]
  f05845f9_ab92_f302_7c35_d458f3105a3d -->|method| b5113cab_d984_a93c_89b1_a197387b5da3

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