render-stream.ts — vue Source File
Architecture documentation for render-stream.ts, a typescript file in the vue codebase. 4 imports, 1 dependents.
Entity Profile
Dependency Diagram
graph LR f3e6847d_8ff5_35b6_8fd0_7c2d8f08f289["render-stream.ts"] 317f6a4d_4539_67ed_4231_a0773646820c["write.ts"] f3e6847d_8ff5_35b6_8fd0_7c2d8f08f289 --> 317f6a4d_4539_67ed_4231_a0773646820c 208f6731_ceac_754f_49df_75211ecf996c["createWriteFunction"] f3e6847d_8ff5_35b6_8fd0_7c2d8f08f289 --> 208f6731_ceac_754f_49df_75211ecf996c 7aef85ef_4754_53fb_5d94_f8411adf9a0a["stream"] f3e6847d_8ff5_35b6_8fd0_7c2d8f08f289 --> 7aef85ef_4754_53fb_5d94_f8411adf9a0a 09aa5370_2caa_6b33_3f44_6ac5211bd11b["util"] f3e6847d_8ff5_35b6_8fd0_7c2d8f08f289 --> 09aa5370_2caa_6b33_3f44_6ac5211bd11b 53b05d28_585e_4d3e_ad81_d6a7ef6875f2["create-renderer.ts"] 53b05d28_585e_4d3e_ad81_d6a7ef6875f2 --> f3e6847d_8ff5_35b6_8fd0_7c2d8f08f289 style f3e6847d_8ff5_35b6_8fd0_7c2d8f08f289 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
/**
* Original RenderStream implementation by Sasha Aickin (@aickin)
* Licensed under the Apache License, Version 2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Modified by Evan You (@yyx990803)
*/
// const stream = require('stream')
import { Readable } from 'stream'
import { isTrue, isUndef } from 'shared/util'
import { createWriteFunction } from './write'
export default class RenderStream extends Readable {
buffer: string
render: (write: Function, done: Function) => void
expectedSize: number
write: Function
//@ts-expect-error
next: Function
end: Function
//@ts-expect-error
done: boolean
constructor(render: Function) {
super()
this.buffer = ''
//@ts-expect-error
this.render = render
this.expectedSize = 0
this.write = createWriteFunction(
(text, next) => {
const n = this.expectedSize
this.buffer += text
if (this.buffer.length >= n) {
this.next = next
this.pushBySize(n)
return true // we will decide when to call next
}
return false
},
err => {
this.emit('error', err)
}
)
this.end = () => {
this.emit('beforeEnd')
// the rendering is finished; we should push out the last of the buffer.
this.done = true
this.push(this.buffer)
}
}
pushBySize(n: number) {
const bufferToPush = this.buffer.substring(0, n)
this.buffer = this.buffer.substring(n)
this.push(bufferToPush)
}
tryRender() {
try {
this.render(this.write, this.end)
} catch (e) {
this.emit('error', e)
}
}
tryNext() {
try {
this.next()
} catch (e) {
this.emit('error', e)
}
}
_read(n: number) {
this.expectedSize = n
// it's possible that the last chunk added bumped the buffer up to > 2 * n,
// which means we will need to go through multiple read calls to drain it
// down to < n.
if (isTrue(this.done)) {
this.push(null)
return
}
if (this.buffer.length >= n) {
this.pushBySize(n)
return
}
if (isUndef(this.next)) {
// start the rendering chain.
this.tryRender()
} else {
// continue with the rendering.
this.tryNext()
}
}
}
Domain
Subdomains
Classes
Dependencies
- createWriteFunction
- stream
- util
- write.ts
Imported By
Source
Frequently Asked Questions
What does render-stream.ts do?
render-stream.ts is a source file in the vue codebase, written in typescript. It belongs to the ServerRenderer domain, BundleRenderer subdomain.
What does render-stream.ts depend on?
render-stream.ts imports 4 module(s): createWriteFunction, stream, util, write.ts.
What files import render-stream.ts?
render-stream.ts is imported by 1 file(s): create-renderer.ts.
Where is render-stream.ts in the architecture?
render-stream.ts is located at packages/server-renderer/src/render-stream.ts (domain: ServerRenderer, subdomain: BundleRenderer, directory: packages/server-renderer/src).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free