48 lines
1019 B
JavaScript
48 lines
1019 B
JavaScript
'use strict';
|
|
|
|
var archiveType = require('archive-type');
|
|
var Decompress = require('decompress');
|
|
var gutil = require('gulp-util');
|
|
var Transform = require('readable-stream/transform');
|
|
|
|
module.exports = function (opts) {
|
|
opts = opts || {};
|
|
|
|
return new Transform({
|
|
objectMode: true,
|
|
transform: function (file, enc, cb) {
|
|
if (file.isNull()) {
|
|
cb(null, file);
|
|
return;
|
|
}
|
|
|
|
if (file.isStream()) {
|
|
cb(new gutil.PluginError('gulp-decompress', 'Streaming is not supported'));
|
|
return;
|
|
}
|
|
|
|
if (!archiveType(file.contents)) {
|
|
cb(null, file);
|
|
return;
|
|
}
|
|
|
|
var decompress = new Decompress()
|
|
.src(file.contents)
|
|
.use(Decompress.tar(opts))
|
|
.use(Decompress.tarbz2(opts))
|
|
.use(Decompress.targz(opts))
|
|
.use(Decompress.zip(opts));
|
|
|
|
decompress.run(function (err, files) {
|
|
if (err) {
|
|
cb(new gutil.PluginError('gulp-decompress:', err, {fileName: file.path}));
|
|
return;
|
|
}
|
|
|
|
files.forEach(this.push.bind(this));
|
|
cb();
|
|
}.bind(this));
|
|
}
|
|
});
|
|
};
|