Implement caches for json and text (svg) files, via a second argument to _req()
authorNick Downing <downing.nick@gmail.com>
Sun, 7 Oct 2018 04:42:33 +0000 (15:42 +1100)
committerNick Downing <downing.nick@gmail.com>
Sun, 7 Oct 2018 04:42:33 +0000 (15:42 +1100)
ndserver.js

index b9fea19..4b328be 100755 (executable)
@@ -42,7 +42,9 @@ var mime_type_default = 'application/octet-stream'
 var mime_type_css = mime_types['css'] || mime_type_default
 var mime_type_html = mime_types['html'] || mime_type_default
 var build_cache_js = new BuildCache()
+var build_cache_json = new BuildCache()
 var build_cache_less = new BuildCache()
+var build_cache_text = new BuildCache()
 
 var serve = function(res, status, mime_type, data) {
   res.statusCode = status
@@ -210,19 +212,43 @@ var app = async function(req, res, protocol) {
           root: site_root
         }
         var out = str => {buffers.push(Buffer.from(str))}
-        var req = async str => {
+        var req = async (str, type) => {
           var key = (
             str.length > 0 && str.charAt(0) === '/' ?
             site_root :
             site_root + dir_name + '/'
-          ) + str
-          var value = await build_cache_js.get(key)
-          if (value === undefined) {
-            console.log(site, 'compiling', key)
-            value = await jstemplate(key)
-            build_cache_js.set(key, value)
+          ) + str, result
+          switch (type) {
+          case undefined:
+          case 'js':
+            var 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)
+            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)
+            }
+            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)
+            }
+            break
+          default:
+            assert(false) 
           }
-          return await value(env, out, req)
+          return result
         }
         await req(temp)
         data = Buffer.concat(buffers)