let assert = require('assert')
let transform = require('./transform')
+let html_escape = require('html-escape')
let html_body = (node, st, c) => {
let tag, arguments
if (value_expr !== undefined) {
prefix += '="'
if (value_expr.type === 'Literal')
- prefix += value_expr.value
+ prefix += html_escape(value_expr.value)
else {
expr1 = {
type: 'Literal',
end: node.end
},
operator: '+',
- right: value_expr
+ right: {
+ type: 'CallExpression',
+ callee: {
+ type: 'Identifier',
+ name: '_esc'
+ },
+ arguments: [
+ {
+ type: 'CallExpression',
+ callee: {
+ type: 'MemberExpression',
+ object: value_expr,
+ property: {
+ type: 'Identifier',
+ name: 'toString'
+ },
+ computed: false
+ },
+ arguments: [
+ ]
+ }
+ ]
+ }
}
prefix = ''
}
type: 'MemberExpression',
object: {
type: 'Identifier',
- name: '_html'
+ name: '_out'
},
property: {
type: 'Identifier',
type: 'MemberExpression',
object: {
type: 'Identifier',
- name: '_html'
+ name: '_out'
},
property: {
type: 'Identifier',
type: 'MemberExpression',
object: {
type: 'Identifier',
- name: '_html'
+ name: '_out'
},
property: {
type: 'Identifier',
computed: false
},
arguments: [
- c(node.expression, st, 'Expression')
+ {
+ type: 'CallExpression',
+ callee: {
+ type: 'Identifier',
+ name: '_esc'
+ },
+ arguments: [
+ c(node.expression, st, 'Expression')
+ ]
+ }
]
}
} :
type: 'VariableDeclarator',
id: {
type: 'Identifier',
- name: '_html'
+ name: '_out'
},
init: {
type: 'ArrayExpression',
type: 'MemberExpression',
object: {
type: 'Identifier',
- name: '_html'
+ name: '_out'
},
property: {
type: 'Identifier',
let fs = require('fs')
let template = require('./template')
let transform = require('./transform')
+let html_escape = require('html-escape')
-let page = fs.readFileSync('page.jst', {encoding: 'utf-8'})
-console.log(
- eval(
- astring.generate(
- transform.transform(
- template,
- acorn.parse(
- '(() => {' + page + '})()'
- )
- ),
- {indent: ''}
+;(
+ async () => {
+ let _esc = html_escape, page = eval(
+ astring.generate(
+ transform.transform(
+ template,
+ acorn.parse(
+ fs.readFileSync('page.jst', {encoding: 'utf-8'})
+ )
+ ),
+ {indent: ''}
+ )
)
- )
-)
+
+ console.log(await page({lang: 'en', val: '<html>'}))
+ }
+)()