1 let BuildCache = require('build_cache')
2 let emailjs = require('emailjs')
4 let JSONCache = require('json_cache')
5 let less = require('less/lib/less-node')
6 var stream_buffers = require('stream-buffers')
7 let util = require('util')
8 let yauzl = require('yauzl')
9 let zetjs = require('zetjs')
11 let fs_mkdir = util.promisify(fs.mkdir)
12 let fs_readFile = util.promisify(fs.readFile)
13 let yauzl_open = util.promisify(yauzl.open)
15 let build_cache_email = new BuildCache()
16 let get_email = path => build_cache_email.get(
19 console.log('parsing', path)
20 result.value = emailjs.server.connect(
21 JSON.parse(await fs_readFile(path))
26 // this is for read-only JSON files
27 // they will be reloaded from disk if modified
28 let build_cache_json = new BuildCache()
29 let get_json = path => build_cache_json.get(
32 console.log('parsing', path)
33 result.value = JSON.parse(await fs_readFile(path))
37 let build_cache_less = new BuildCache()
38 let get_less = (path, site_root, dir_name) => build_cache_less.get(
41 console.log('compiling', path)
42 let render = await less.render(
43 await fs_readFile(path, {encoding: 'utf-8'}),
52 //javascriptEnabled: false,
56 paths: [site_root + dir_name],
58 //reUsePluginManager: true,
60 rootpath: site_root//,
61 //strictImports: false,
66 result.deps.concat(render.imports)
67 result.value = Buffer.from(render.css)
71 let build_cache_text = new BuildCache()
72 let get_text = path => build_cache_text.get(
75 console.log('reading', path)
76 result.value = await fs_readFile(path, {encoding: 'utf-8'})
80 let build_cache_zip = new BuildCache()
81 let get_zip = path => build_cache_zip.get(
84 console.log('decompressing', path)
86 let zipfile = await yauzl_open(path, {autoClose: false})
89 (resolve, reject) => {
91 on('entry', entry => {entries.push(entry)}).
92 on('end', () => resolve())
95 for (let i = 0; i < entries.length; ++i) {
96 let read_stream = await new Promise(
97 (resolve, reject) => {
98 zipfile.openReadStream(
108 let write_stream = new stream_buffers.WritableStreamBuffer()
109 let data = new Promise(
110 (resolve, reject) => {
112 on('finish', () => {resolve(write_stream.getContents())}).
113 on('error', () => {reject()})
116 read_stream.pipe(write_stream)
117 let path = '/' + entries[i].fileName
119 console.log('entry path', path, 'size', data.length)
120 result.value[path] = data
122 await zipfile.close()
126 let build_cache_zet = new BuildCache()
127 let get_zet = path => build_cache_zet.get(
130 console.log('opening', path)
137 result.value = new zetjs.Index(path)
141 // this is for read/write JSON files
142 // they will not be reloaded from disk if modified
143 let try_mkdir = async path => {
148 if (err.code !== 'EEXIST') // should check error type
152 let json_cache = new JSONCache()
153 json_cache.diag = true
155 exports.get_email = get_email
156 exports.get_json = get_json
157 exports.get_less = get_less
158 exports.get_text = get_text
159 exports.get_zip = get_zip
160 exports.get_zet = get_zet
161 exports.try_mkdir = try_mkdir
162 exports.json_cache = json_cache