#! /usr/bin/env node

'use strict';

var browserify = require('browserify'); var fs = require('fs'); var path = require('path'); var zlib = require('zlib');

var SOURCE = process.argv; var TARGET = process.argv; var OPTIONS = process.argv; var options; var errors = [];

if (!SOURCE) {

errors.push('source file not defined');

} else if (!fs.existsSync(SOURCE)) {

errors.push('source file ' + SOURCE + ' does not exist');

}

if (!TARGET) {

errors.push('target file not defined');

} else if (!fs.existsSync(path.dirname(TARGET))) {

errors.push('parent directory of target file ' + TARGET + ' does not exist');

}

try {

options = JSON.parse(OPTIONS);

} catch (e) {

errors.push('failed to parse Browserify options object:' + e);

}

if (errors.length !== 0) {

process.stderr.write(errors.join('\n') + '\n');
process.exit(1);

}

var outputStream = fs.createWriteStream(TARGET);

browserify(options)

.add(SOURCE)
.transform({ global: true }, 'uglifyify')
.bundle()
.pipe(outputStream);

outputStream.on('close', function() {

var gzip = zlib.createGzip({ level: zlib.BEST_COMPRESSION });
fs.createReadStream(TARGET)
  .pipe(gzip)
  .pipe(fs.createWriteStream(TARGET + '.gz'));

});