// targz - Simple tar.gz compression and decompression for NodeJS.
// Based on https://github.com/lafin/node-targz
// Copyright (c) 2015 Miska Kaipiainen
// MIT license
var fs = require('fs');
var tar = require('tar-fs');
var 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!");
// go
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));
});
}
};