1 let BuildCache = require('build_cache')
3 let jstemplate = require('jstemplate')
4 let less = require('less/lib/less-node')
5 var stream_buffers = require('stream-buffers')
6 let util = require('util')
7 let yauzl = require('yauzl')
8 let zetjs = require('zetjs')
10 let fs_readFile = util.promisify(fs.readFile)
11 let yauzl_open = util.promisify(yauzl.open)
13 let build_cache_js = new BuildCache()
14 let req_js = async path => {
15 let result = await build_cache_js.get(path)
16 if (result === undefined) {
17 console.log('compiling', path)
18 result = await jstemplate(path)
19 build_cache_js.set(path, result)
24 let build_cache_json = new BuildCache()
25 let req_json = async path => {
26 let result = await build_cache_json.get(path)
27 if (result === undefined) {
28 console.log('parsing', path)
29 result = JSON.parse(await fs_readFile(path))
30 build_cache_json.set(path, result)
35 let build_cache_less = new BuildCache()
36 let req_less = async (path, site_root, dir_name) => {
37 let result = await build_cache_less.get(path)
38 if (result === undefined) {
39 console.log('compiling', path)
40 let render = await less.render(
41 await fs_readFile(path, {encoding: 'utf-8'}),
50 //javascriptEnabled: false,
54 paths: [site_root + dir_name],
56 //reUsePluginManager: true,
58 rootpath: site_root//,
59 //strictImports: false,
64 result = new Buffer(render.css, 'utf-8')
65 build_cache_less.set(path, result, render.imports)
70 let build_cache_text = new BuildCache()
71 let req_text = async path => {
72 let result = await build_cache_text.get(path)
73 if (result === undefined) {
74 console.log('reading', path)
75 result = await fs_readFile(path, {encoding: 'utf-8'})
76 build_cache_text.set(path, result)
81 let build_cache_zip = new BuildCache()
82 let req_zip = async path => {
83 let result = await build_cache_zip.get(path)
84 if (result === undefined) {
85 console.log('decompressing', path)
87 let zipfile = await yauzl_open(path, {autoClose: false})
90 (resolve, reject) => {
92 on('entry', entry => {entries.push(entry)}).
93 on('end', () => resolve())
96 for (let i = 0; i < entries.length; ++i) {
97 let read_stream = await new Promise(
98 (resolve, reject) => {
99 zipfile.openReadStream(
109 let write_stream = new stream_buffers.WritableStreamBuffer()
110 let data = new Promise(
111 (resolve, reject) => {
113 on('finish', () => {resolve(write_stream.getContents())}).
114 on('error', () => {reject()})
117 read_stream.pipe(write_stream)
119 console.log('entry path', entries[i].fileName, 'size', data.length)
120 result[entries[i].fileName] = data
122 await zipfile.close()
123 build_cache_zip.set(path, result)
128 let build_cache_zet = new BuildCache()
129 let req_zet = async path => {
130 let result = await build_cache_zet.get(path)
131 if (result === undefined) {
132 console.log('opening', path)
133 result = new zetjs.Index(path)
148 exports.req_js = req_js
149 exports.req_json = req_json
150 exports.req_less = req_less
151 exports.req_text = req_text
152 exports.req_zip = req_zip
153 exports.req_zet = req_zet