You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1019 B
47 lines
1019 B
'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)); |
|
} |
|
}); |
|
};
|
|
|