/dist
+/js_template-*.tgz
/node_modules
/yarn.lock
/yarn-error.log
.tern-*
+/*.jst
+/dist/acorn.mjs
+/dist/acorn.mjs.map
+/dist/bin.js
+/env.sh
+/js_template-*.tgz
/rollup.config.*
/src
+/test
+/test.js
--- /dev/null
+let _acorn = require('./dist/acorn')
+let _astring = require('astring')
+let _BuildCache = require('build_cache')
+let _fs = require('fs')
+let _html_escape = require('html-escape')
+let _path = require('path')
+let _transform = require('./transform')
+let _visitors = require('./visitors')
+let _util = require('util')
+
+let _fs_readFile = _util.promisify(_fs.readFile)
+
+let _build_cache = new _BuildCache()
+_build_cache.diag = true
+let _js_template = async (_dir, _name) => {
+ while (_name.charAt(0) === '/') {
+ _dir = '.'
+ _name = _name.slice(1)
+ }
+ _name = _path.posix.resolve(_dir, _name)
+ return _build_cache.get(
+ _name,
+ async _result => {
+ let _dir = _path.posix.dirname(_name)
+ let _req = async _name => _js_template(_dir, _name)
+ _result.value = eval(
+ _astring.generate(
+ _transform.transform(
+ _visitors,
+ _acorn.parse(
+ await _fs_readFile(_name, {encoding: 'utf-8'})
+ )
+ ),
+ {indent: ''}
+ )
+ )
+ }
+ )
+}
+
+module.exports = _js_template
{
- "name": "acorn",
- "description": "ECMAScript parser",
+ "name": "js_template",
+ "description": "JavaScript template engine",
"homepage": "https://github.com/acornjs/acorn",
- "main": "dist/acorn.js",
- "module": "dist/acorn.mjs",
+ "main": "js_template.js",
"version": "6.0.2",
"engines": {
"node": ">=0.4.0"
"scripts": {
"prepare": "cd ..; npm run build:main && npm run build:bin"
},
- "bin": {
- "acorn": "./bin/acorn"
- },
"dependencies": {
+ "build_cache": "file:../../build_cache.git/build_cache-1.0.0.tgz",
"html-escape": "^2.0.0"
}
}
-async _env => html.'cls-1'.cls-2#id-1(lang=_env.lang true=_env.val something-else="\"val\"") {
- head {}
- body {
- `hello
-& goodbye
-`
- script {
- for (let i = 0; i < 100; ++i)
- console.log(i)
+async (_env, _out) => {
+ html.'cls-1'.cls-2#id-1(lang=_env.lang true=_env.val something-else="\"val\"") {
+ head {}
+ body {
+ `hello
+ & goodbye
+ `
+ script {
+ for (let i = 0; i < 100; ++i)
+ console.log(i)
+ }
+ let page1 = await _req('test/page1.jst')
+ await page1(_env, _out)
}
}
}
--- /dev/null
+async (_env, _out) => {
+ 'page3\n'
+}
-let acorn = require('./dist/acorn')
-let assert = require('assert')
-let astring = require('astring')
-let fs = require('fs')
-let template = require('./template')
-let transform = require('./transform')
-let html_escape = require('html-escape')
+let js_template = require('./js_template')
;(
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>'}))
+ let page = await js_template('.', 'page.jst')
+ out = []
+ await page({lang: 'en', val: '<html>'}, out)
+ console.log(out.join(''))
}
)()
--- /dev/null
+async (_env, _out) => {
+ let page2 = await _req('page2.jst')
+ let page3 = await _req('/page3.jst')
+ 'page1\n'
+ await page2(_env, _out)
+ await page3(_env, _out)
+}
--- /dev/null
+async (_env, _out) => {
+ 'page2\n'
+}
type: 'CallExpression',
callee: {
type: 'Identifier',
- name: '_esc'
+ name: '_html_escape'
},
arguments: [
{
type: 'CallExpression',
callee: {
type: 'Identifier',
- name: '_esc'
+ name: '_html_escape'
},
arguments: [
c(node.expression, st, 'Expression')