From: Nick Downing Date: Sun, 7 Oct 2018 09:50:48 +0000 (+1100) Subject: Modularize req() and cache system to req_XXX() that can also be used internally X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=24b715d360cab71c0410c94ebf4139cb3364a05f;p=jst_server.git Modularize req() and cache system to req_XXX() that can also be used internally --- diff --git a/ndserver.js b/ndserver.js index da129a0..ca21d4a 100755 --- a/ndserver.js +++ b/ndserver.js @@ -16,6 +16,94 @@ let zetjs = require('zetjs') 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' @@ -42,11 +130,6 @@ let mime_types = JSON.parse(fs.readFileSync('config/mime_types.json')) 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 @@ -156,14 +239,14 @@ let app = async (req, res, protocol) => { 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 @@ -176,14 +259,14 @@ let app = async (req, res, protocol) => { 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 @@ -207,54 +290,26 @@ let app = async (req, res, protocol) => { } 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) @@ -262,14 +317,14 @@ let app = async (req, res, protocol) => { 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 @@ -283,44 +338,14 @@ let app = async (req, res, protocol) => { 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