UNPKG

grunt-closure-compiler-build

Version:

Download, unzip Google Closure Compiler for "grunt-closure-compiler"

65 lines (56 loc) 2.43 kB
module.exports = function (grunt) { 'use strict'; var http = require('http'), fs = require('node-fs'), unzip = require('unzip'); grunt.registerMultiTask('closure-compiler-build', 'Closure Cobpiler Build', function () { var config = this.data, src = config.dir + config.filename + '.zip', dist = config.dir + config.filename + '.jar', done = this.async(), file; if (!fs.existsSync(config.dir)) { fs.mkdir(config.dir, function (err) { if (err) { grunt.warn('[' + err.errno + ']: ' + err.message); } }); } if (!fs.existsSync(dist) || config.update) { file = fs.createWriteStream(src); http.get(config.url, function (response) { response.pipe(file); }); file.on('finish', function () { file.close(function () { if (file.bytesWritten > 0) { grunt.log.writeln('Download: ' + config.url + ' (' + file.bytesWritten + ' B)'); fs.createReadStream(src) .pipe(unzip.Parse()) .on('entry', function (entry) { if (entry.path.indexOf('.jar') > 0) { entry.pipe(fs.createWriteStream(dist) .on('error', function () { grunt.warn('Extract: ' + entry.path); }) .on('finish', function () { grunt.log.writeln('Extract: ' + entry.path); grunt.log.writeln('Save: ' + dist); }) ); } }); } else { grunt.warn('Download: ' + config.url + ' (0 B)'); } fs.unlink(src); }); }); file.on('error', function (err) { fs.unlink(src, function () { grunt.warn('[' + err.errno + ']: ' + err.message); }); }); } }); };