fedtools-utilities
Version:
Set of utilites for fedtools within nodejs
109 lines (92 loc) • 2.47 kB
JavaScript
/**
* 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!');
}
}
};