feat: renderFileToNodeStream(filepath, scope)

This commit is contained in:
harttle
2021-10-03 21:21:25 +08:00
parent dd325362f9
commit 68c4cfcfb6
7 changed files with 107 additions and 4 deletions
+6 -2
View File
@@ -1,11 +1,15 @@
import { stringify } from '../util/underscore'
import { Emitter } from './emitter'
export class StreamedEmitter {
export class StreamedEmitter implements Emitter {
public buffer = '';
public stream = new (require('stream').PassThrough)()
public stream: NodeJS.ReadWriteStream = new (require('stream').PassThrough)()
public write (html: any) {
this.stream.write(stringify(html))
}
public error (err: Error) {
this.stream.emit('error', err)
}
public end () {
this.stream.end()
}
+4
View File
@@ -84,6 +84,10 @@ export class Liquid {
const templates = this.parseFileSync(file)
return this.renderSync(templates, ctx)
}
public async renderFileToNodeStream (file: string, scope?: object) {
const templates = await this.parseFile(file)
return this.renderToNodeStream(templates, scope)
}
public _evalValue (str: string, ctx: Context): IterableIterator<any> {
const value = new Value(str, this)
+2 -1
View File
@@ -10,7 +10,8 @@ import { KeepingTypeEmitter } from '../emitters/keeping-type-emitter'
export class Render {
public renderTemplatesToNodeStream (templates: Template[], ctx: Context): NodeJS.ReadableStream {
const emitter = new StreamedEmitter()
toThenable(this.renderTemplates(templates, ctx, emitter)).then(() => emitter.end())
toThenable(this.renderTemplates(templates, ctx, emitter))
.then(() => emitter.end(), err => emitter.error(err))
return emitter.stream
}
public * renderTemplates (templates: Template[], ctx: Context, emitter?: Emitter): IterableIterator<any> {