zopfli 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/env node
  2. 'use strict';
  3. var program = require('commander');
  4. var fs = require('fs');
  5. var zopfli = require('../lib/zopfli');
  6. program
  7. .version(require('../package.json').version)
  8. .usage('[options] [files...]')
  9. .option('--deflate', 'raw deflate (without container)')
  10. .option('--zlib', 'deflate using zlib container')
  11. .option('--gzip', 'deflate using gzip container')
  12. .option('-e, --ext <s>', 'overwrite default file extension')
  13. .option('-i, --iterations <n>', 'number of iterations (higher = smaller = slower)', parseInt)
  14. .option('-v, --verbose', 'Verbose')
  15. .parse(process.argv);
  16. var options = {
  17. verbose: false,
  18. verbose_more: false,
  19. numiterations: 15,
  20. blocksplitting: true,
  21. blocksplittinglast: false,
  22. blocksplittingmax: 15
  23. };
  24. if (program.iterations) options.numiterations = parseInt(program.iterations, 10);
  25. if (program.verbose) options.verbose = program.verbose;
  26. var method = zopfli.createGzip;
  27. var extension = 'gz';
  28. if (program.deflate) {
  29. method = zopfli.createDeflate;
  30. extension = 'deflate';
  31. }
  32. if (program.zlib) {
  33. method = zopfli.createZlib;
  34. extension = 'zlib';
  35. }
  36. if (program.ext) {
  37. extension = program.ext;
  38. }
  39. if (program.args.length === 0) {
  40. program.outputHelp();
  41. process.exit(1);
  42. } else {
  43. Promise.all(
  44. program.args.map(function(item) {
  45. return new Promise(function(resolve, reject) {
  46. fs.createReadStream(item)
  47. .on('error', reject)
  48. .pipe(new method(options))
  49. .on('error', reject)
  50. .pipe(fs.createWriteStream(item + '.' + extension))
  51. .on('error', reject)
  52. .on('finish', resolve);
  53. });
  54. })
  55. );
  56. }