UNPKG

fedtools-utilities

Version:
109 lines (92 loc) 2.47 kB
/** * Fedtools justification * * Adding the option to decompress .tar.gz or .tar * instead of always assuming a gzip file. * Original: https://github.com/miskun/targz * */ var path = require('path'), fs = require('fs'), tar = require('tar-fs'), zlib = require('zlib'); module.exports = { compress: function (opts, callback) { // utility var error = function (error) { callback(error); }; // ensure callback callback = callback || function () {}; // ensure opts opts = opts || {}; opts.tar = opts.tar || {}; opts.gz = opts.gz || {}; // default gzip config opts.gz.level = opts.gz.level || 6; opts.gz.memLevel = opts.gz.memLevel || 6; // ensure src and dest if (!opts.src) { return error('No source for compress!'); } if (!opts.dest) { return error('No destination for compress!'); } // go process.nextTick(function () { tar.pack(opts.src, opts.tar) .on('error', error) .pipe(zlib.createGzip(opts.gz) .on('error', error)) .pipe(fs.createWriteStream(opts.dest) .on('error', error) .on('finish', callback)); }); }, decompress: function (opts, callback) { // utility var error = function (error) { callback(error); }; // ensure callback callback = callback || function () {}; // ensure opts opts = opts || {}; opts.tar = opts.tar || {}; opts.gz = opts.gz || {}; // ensure src and dest if (!opts.src) { return error('No source for decompress!'); } if (!opts.dest) { return error('No destination for decompress!'); } // find out what to do. Tar, tar.gz, tar.gzip? switch (path.extname(opts.src)) { case '.gz': case '.gzip': process.nextTick(function () { fs.createReadStream(opts.src) .on('error', error) .pipe(zlib.createGunzip(opts.gz) .on('error', error)) .pipe(tar.extract(opts.dest, opts.tar) .on('error', error) .on('finish', callback)); }); break; case '.tar': process.nextTick(function () { fs.createReadStream(opts.src) .on('error', error) .pipe(tar.extract(opts.dest, opts.tar) .on('error', error) .on('finish', callback)); }); break; default: return error('Invalid source for decompress!'); } } };