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 (
Domain
Source
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