feat: automatic output escaping, closes #500

This commit is contained in:
Harttle
2022-04-22 02:19:36 +08:00
parent e69a51025e
commit f88490cd3c
9 changed files with 188 additions and 7 deletions
+8
View File
@@ -5,12 +5,20 @@ import { Context } from '../context/context'
import { Emitter } from '../emitters/emitter'
import { OutputToken } from '../tokens/output-token'
import { Liquid } from '../liquid'
import { Filter } from './filter/filter'
export class Output extends TemplateImpl<OutputToken> implements Template {
private value: Value
public constructor (token: OutputToken, liquid: Liquid) {
super(token)
this.value = new Value(token.content, liquid)
const filters = this.value.filters
const outputEscape = liquid.options.outputEscape
if (filters.length && filters[filters.length - 1].name === 'raw') {
filters.pop()
} else if (outputEscape) {
filters.push(new Filter(toString.call(outputEscape), outputEscape, [], liquid))
}
}
public * render (ctx: Context, emitter: Emitter): IterableIterator<unknown> {
const val = yield this.value.value(ctx, false)