| 'use strict'; | 
|   | 
| var fs = require('fs') | 
|   , path = require('path') | 
|   , browserify = require('browserify') | 
|   , uglify = require('uglify-js'); | 
|   | 
| var pkg = process.argv[2] | 
|   , standalone = process.argv[3] | 
|   , compress = process.argv[4]; | 
|   | 
| var packageDir = path.join(__dirname, '..'); | 
| if (pkg != '.') packageDir = path.join(packageDir, 'node_modules', pkg); | 
|   | 
| var json = require(path.join(packageDir, 'package.json')); | 
|   | 
| var distDir = path.join(__dirname, '..', 'dist'); | 
| if (!fs.existsSync(distDir)) fs.mkdirSync(distDir); | 
|   | 
| var bOpts = {}; | 
| if (standalone) bOpts.standalone = standalone; | 
|   | 
| browserify(bOpts) | 
| .require(path.join(packageDir, json.main), {expose: json.name}) | 
| .bundle(function (err, buf) { | 
|   if (err) { | 
|     console.error('browserify error:', err); | 
|     process.exit(1); | 
|   } | 
|   | 
|   var outputFile = path.join(distDir, json.name); | 
|   var uglifyOpts = { | 
|     warnings: true, | 
|     compress: {}, | 
|     output: { | 
|       preamble: '/* ' + json.name + ' ' + json.version + ': ' + json.description + ' */' | 
|     } | 
|   }; | 
|   if (compress) { | 
|     var compressOpts = compress.split(','); | 
|     for (var i=0, il = compressOpts.length; i<il; ++i) { | 
|       var pair = compressOpts[i].split('='); | 
|       uglifyOpts.compress[pair[0]] = pair.length < 1 || pair[1] != 'false'; | 
|     } | 
|   } | 
|   if (standalone) { | 
|     uglifyOpts.sourceMap = { | 
|       filename: json.name + '.min.js', | 
|       url: json.name + '.min.js.map' | 
|     }; | 
|   } | 
|   | 
|   var result = uglify.minify(buf.toString(), uglifyOpts); | 
|   fs.writeFileSync(outputFile + '.min.js', result.code); | 
|   if (result.map) fs.writeFileSync(outputFile + '.min.js.map', result.map); | 
|   if (standalone) fs.writeFileSync(outputFile + '.bundle.js', buf); | 
|   if (result.warnings) { | 
|     for (var j=0, jl = result.warnings.length; j<jl; ++j) | 
|       console.warn('UglifyJS warning:', result.warnings[j]); | 
|   } | 
| }); |