doushio
Version:
Real-time imageboard
73 lines (67 loc) • 1.67 kB
JavaScript
var async = require('async'),
crypto = require('crypto'),
deps = require('./deps'),
etc = require('./etc'),
fs = require('fs'),
make_client = require('./make_client'),
tmp_file = require('tmp').file;
function (cb) {
var md5 = crypto.createHash('MD5');
tmp_file({dir: '.build', postfix: '.gen.js'}, function (err, tmp, fd) {
if (err)
return cb(err);
var stream = fs.createWriteStream(null, {fd: fd});
stream.once('error', cb);
async.eachSeries(deps.VENDOR_DEPS, function (file, cb) {
fs.readFile(file, function (err, buf) {
if (err)
return cb(err);
md5.update(buf);
stream.write(buf);
md5.update('\n');
stream.write('\n');
cb(null);
});
}, function (err) {
if (err)
return cb(err);
var hash = md5.digest('hex').slice(0, 10);
var fnm = 'vendor-' + hash + '.min.js';
stream.end(function () {
etc.move(tmp, 'www/js/'+fnm, function (err) {
if (err)
return cb(err);
cb(null, fnm);
});
});
});
});
}
function commit_assets(metadata, cb) {
tmp_file({dir: '.build', postfix: '.json'}, function (err, tmp, fd) {
if (err)
return cb(err);
var stream = fs.createWriteStream(null, {fd: fd});
stream.once('error', cb);
stream.end(JSON.stringify(metadata) + '\n', function () {
etc.move(tmp, 'assets.json', cb);
});
});
}
function build(cb) {
etc.checked_mkdir('.build', function (err) {
if (err) return cb(err);
build_vendor_js(function (err, vendorjs) {
if (err)
return cb(err);
commit_assets({
vendor: vendorjs,
}, cb);
});
});
}
if (require.main === module) {
build(function (err) {
if (err) throw err;
});
}