bankai
Version:
The easiest way to compile JavaScript, HTML and CSS
51 lines (40 loc) • 1.35 kB
JavaScript
var trackDir = require('./track-dir')
var path = require('path')
var dirs = [
'assets',
'content',
'public'
]
// This module handles all static assets. It only ever links to files, and
// always reads them from disk. Else files might make Node run out of memory
// (e.g. video files). The following steps are taken
//
// 1. Read out all files in the directory lists.
// 2. Write all file names to a list, and emit `list`.
// 3. Estimate total size of all files combined, and emit `size`.
//
// TODO: optimize assets (on the fly); e.g. convert images to webp, etc.
module.exports = node
function node (state, createEdge) {
var basedir = state.metadata.dirname
var self = this
if (state.tracker) return
var tracker = state.tracker = trackDir()
tracker.start(basedir, dirs, { watch: state.metadata.watch })
state.metadata.assets = tracker.files
tracker.on('error', function (err) {
self.emit('error', 'assets', 'tracker', err)
})
tracker.on('change', function () {
var list = tracker.list().map(function (file) {
return path.posix.format(path.parse(path.relative(basedir, file)))
})
createEdge('list', Buffer.from(list.join(',')))
})
tracker.on('progress', function (progress) {
self.emit('progress', 'assets', progress)
})
this.on('close', function () {
tracker.unwatch()
})
}