let readFileAsync = util.promisify(fs.readFile)
let statAsync = util.promisify(fs.stat)
+let build_cache_js = new BuildCache()
+let req_js = async path => {
+ let result = await build_cache_js.get(path)
+ if (result === undefined) {
+ console.log('compiling', path)
+ result = await jstemplate(path)
+ build_cache_js.set(path, result)
+ }
+ return result
+}
+
+let build_cache_json = new BuildCache()
+let req_json = async path => {
+ let result = await build_cache_json.get(path)
+ if (result === undefined) {
+ console.log('parsing', path)
+ result = JSON.parse(await readFileAsync(path))
+ build_cache_json.set(path, result)
+ }
+ return result
+}
+
+let build_cache_less = new BuildCache()
+let req_less = async (path, site_root, dir_name) => {
+ let result = await build_cache_less.get(path)
+ if (result === undefined) {
+ console.log('compiling', path)
+ let render = await less.render(
+ await readFileAsync(path, {encoding: 'utf-8'}),
+ {
+ //color: true,
+ //compress: false,
+ //depends: false,
+ filename: path,
+ //globalVars: null,
+ //ieCompat: false,
+ //insecure: false,
+ //javascriptEnabled: false,
+ //lint: false,
+ //math: 0,
+ //modifyVars: null,
+ paths: [site_root + dir_name],
+ //plugins: [],
+ //reUsePluginManager: true,
+ //rewriteUrls: false,
+ rootpath: site_root//,
+ //strictImports: false,
+ //strictUnits: false,
+ //urlArgs: ''
+ }
+ )
+ result = new Buffer(render.css, 'utf-8')
+ build_cache_less.set(path, result, render.imports)
+ }
+ return result
+}
+
+let build_cache_text = new BuildCache()
+let req_text = async path => {
+ let result = await build_cache_text.get(path)
+ if (result === undefined) {
+ console.log('reading', path)
+ result = await readFileAsync(path, {encoding: 'utf-8'})
+ build_cache_text.set(path, result)
+ }
+ return result
+}
+
+let build_cache_zet = new BuildCache()
+let req_zet = async path => {
+ let result = await build_cache_zet.get(path)
+ if (result === undefined) {
+ console.log('opening', path)
+ result = new zetjs.Index(path)
+ build_cache_zet.set(
+ path,
+ result,
+ [
+ path + '.map.0',
+ path + '.param.0',
+ path + '.v.0',
+ path + '.vocab.0'
+ ]
+ )
+ }
+ return result
+}
+
commander.version('1.0.0').option(
'-c, --enable-caching',
'Enable caching'
let mime_type_default = 'application/octet-stream'
let mime_type_css = mime_types['css'] || mime_type_default
let mime_type_html = mime_types['html'] || mime_type_default
-let build_cache_js = new BuildCache()
-let build_cache_json = new BuildCache()
-let build_cache_less = new BuildCache()
-let build_cache_text = new BuildCache()
-let build_cache_zet = new BuildCache()
let serve = (res, status, mime_type, data) => {
res.statusCode = status
let page = dir_name + '/' + file_name, data
if (dir_name_is_pub) {
try {
- data = await readFileAsync(site_root + page)
+ let data = await readFileAsync(site_root + page)
console.log(
site,
'serving',
page,
'length',
data.length,
- 'from filesystem'
+ 'from pub'
)
serve(res, 200, mime_type, data)
return
else {
temp = page + '.pub'
try {
- data = await readFileAsync(site_root + temp)
+ let data = await readFileAsync(site_root + temp)
console.log(
site,
'serving',
temp,
'length',
data.length,
- 'from filesystem'
+ 'from pub'
)
serve(res, 200, mime_type, data)
return
}
let out = str => {buffers.push(Buffer.from(str))}
let req = async (str, type) => {
- let key = (
+ let path = (
str.length > 0 && str.charAt(0) === '/' ?
site_root :
site_root + dir_name + '/'
) + str, result
switch (type) {
case undefined:
+ result = await (await req_js(path))(env, out, req)
+ break
case 'js':
- let render_func = await build_cache_js.get(key)
- if (render_func === undefined) {
- console.log(site, 'compiling', key)
- render_func = await jstemplate(key)
- build_cache_js.set(key, render_func)
- }
- result = await render_func(env, out, req)
+ result = await req_js(path)
break
case 'json':
- result = await build_cache_json.get(key)
- if (result === undefined) {
- console.log(site, 'parsing', key)
- result = JSON.parse(await readFileAsync(key))
- build_cache_json.set(key, result)
- }
+ result = await req_json(path)
break
case 'text':
- result = await build_cache_text.get(key)
- if (result === undefined) {
- console.log(site, 'reading', key)
- result = await readFileAsync(key, {encoding: 'utf-8'})
- build_cache_text.set(key, result)
- }
+ result = await req_text(path)
break
case 'zet':
- result = await build_cache_zet.get(key)
- if (result === undefined) {
- console.log(site, 'opening', key)
- result = new zetjs.Index(key)
- build_cache_zet.set(
- key,
- result,
- [
- key + '.map.0',
- key + '.param.0',
- key + '.v.0',
- key + '.vocab.0'
- ]
- )
- }
+ result = await req_zet(path)
break
default:
assert(false)
return result
}
await req(temp)
- data = Buffer.concat(buffers)
+ let data = Buffer.concat(buffers)
console.log(
site,
'serving',
temp,
'length',
data.length,
- 'from js render'
+ 'from js'
)
serve(res, 200, mime_type, data)
return
case 'css':
temp = page + '.less'
try {
- let key = site_root + temp
- let data = await build_cache_less.get(key)
- if (data === undefined) {
- console.log(site, 'compiling', key)
- let result = await less.render(
- await readFileAsync(site_root + temp, {encoding: 'utf-8'}),
- {
- //color: true,
- //compress: false,
- //depends: false,
- filename: temp,
- //globalVars: null,
- //ieCompat: false,
- //insecure: false,
- //javascriptEnabled: false,
- //lint: false,
- //math: 0,
- //modifyVars: null,
- paths: [site_root + dir_name],
- //plugins: [],
- //reUsePluginManager: true,
- //rewriteUrls: false,
- rootpath: site_root//,
- //strictImports: false,
- //strictUnits: false,
- //urlArgs: ''
- }
- )
- data = new Buffer(result.css, 'utf-8')
- build_cache_less.set(key, data, result.imports)
- }
+ let data = await req_less(site_root + temp, site_root, dir_name)
console.log(
site,
'serving',
temp,
'length',
data.length,
- 'from less render'
+ 'from less'
)
serve(res, 200, mime_type, data)
return