var fs = require('fs'), sys = require('sys'), util = require('util'), uglify = require('uglify-js'); function copyFile(src, dst, cb) { function copy(err) { var is, os; if (!err) { return cb(new Error("File " + dst + " exists.")); } fs.stat(src, function (err) { if (err) { return cb(err); } is = fs.createReadStream(src); os = fs.createWriteStream(dst); util.pump(is, os, cb); }); } fs.stat(dst, copy); } function makeDirectoryIfNotExists(path) { try { var stats = fs.statSync(path); if (!stats.isDirectory()) { fs.mkdirSync(path, 0); } } catch (e) { fs.mkdirSync(path, 0); } } desc('Obfuscation and Compression'); task('minify', function() { var all = fs.readFileSync('mustache.js').toString(), out = fs.openSync('mustache.min.js', 'w+'), ast = uglify.parser.parse(all); ast = uglify.uglify.ast_mangle(ast); ast = uglify.uglify.ast_squeeze(ast); fs.writeSync(out, uglify.uglify.gen_code(ast)); }); task('package', function() { function package(id, location) { var files = [ , 'mustache.js' ]; files.unshift('mustache-' + id + '/mustache.js.tpl.pre'); files.push('mustache-' + id + '/mustache.js.tpl.post'); var all = ''; files.forEach(function(file, i) { all += fs.readFileSync(file).toString(); all += '\n'; }); var outPath; if (location) { makeDirectoryIfNotExists('packages/' + id); if (location === true) { outPath = 'packages/' + id + '/mustache.js'; } else { outPath = 'packages/' + id + '/' + location + '/mustache.js'; makeDirectoryIfNotExists('packages/' + id + '/' + location); } } else { outPath = 'packages/' + id + '.mustache.js'; } var out = fs.openSync(outPath, 'w+'); fs.writeSync(out, all); } var params = Array.prototype.slice.call(arguments); makeDirectoryIfNotExists('packages'); for (var i = 0, n = params.length; i