var querystring = require('querystring')
var util = require('util')
var url = require('url')
+var zetjs = require('zetjs')
var readFileAsync = util.promisify(fs.readFile)
var statAsync = util.promisify(fs.stat)
var build_cache_json = new BuildCache()
var build_cache_less = new BuildCache()
var build_cache_text = new BuildCache()
+var build_cache_zet = new BuildCache()
var serve = function(res, status, mime_type, data) {
res.statusCode = status
for (var i = 1; i < path.length - 1; ++i) {
dir_name += '/' + path[i]
if (path[i].length === 0 || path[i].charAt(0) === '.') {
- console.log(
- site,
- 'bad path component',
- dir_name
- )
+ console.log(site, 'bad path component', dir_name)
return die(res)
}
try {
catch (err2) {
if (err2.code !== 'ENOENT')
throw err2
- console.log(
- site,
- 'directory not found',
- dir_name
- )
+ console.log(site, 'directory not found', dir_name)
return die(res)
}
}
if (!stats.isDirectory()) {
- console.log(
- site,
- 'not directory',
- dir_name
- )
+ console.log(site, 'not directory', dir_name)
return die(res)
}
}
var file_type = temp === -1 ? '' : file_name.substring(temp + 1)
var mime_type = mime_types[file_type] || mime_type_default
- var site_path = dir_name + '/' + file_name, data
+ var page = dir_name + '/' + file_name, data
if (dir_name_is_pub) {
try {
- data = await readFileAsync(site_root + site_path)
+ data = await readFileAsync(site_root + page)
console.log(
site,
'serving',
- site_path,
+ page,
'length',
data.length,
'from filesystem'
}
}
else {
- temp = site_path + '.pub'
+ temp = page + '.pub'
try {
data = await readFileAsync(site_root + temp)
console.log(
switch (file_type) {
case 'html':
- temp = site_path + '.js'
+ temp = page + '.js'
try {
var buffers = []
var env = {
lang: 'en',
- page: temp,
- root: site_root
+ page: page,
+ query: parsed_url.query,
+ site: site,
+ site_root: site_root
}
var out = str => {buffers.push(Buffer.from(str))}
var req = async (str, type) => {
build_cache_text.set(key, result)
}
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'
+ ]
+ )
+ }
+ break
default:
assert(false)
}
break
case 'css':
- temp = site_path + '.less'
+ temp = page + '.less'
try {
var key = site_root + temp
var data = await build_cache_less.get(key)
}
}
- console.log(
- site,
- 'file not found',
- site_path
- )
+ console.log(site, 'file not found', page)
return die(res)
// enable this when we want to serve particular files programmatically: