| Server IP : 68.183.124.220 / Your IP : 216.73.217.137 Web Server : Apache/2.4.18 (Ubuntu) System : Linux Sandbox-A 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : gavin ( 1000) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/gavin/workspace/happymandarin/node_modules/decompress-unzip/ |
Upload File : |
'use strict';
var fs = require('fs');
var isZip = require('is-zip');
var StatMode = require('stat-mode');
var readAllStream = require('read-all-stream');
var stripDirs = require('strip-dirs');
var through = require('through2');
var Vinyl = require('vinyl');
var yauzl = require('yauzl');
module.exports = function (opts) {
opts = opts || {};
opts.strip = Number(opts.strip) || 0;
return through.obj(function (file, enc, cb) {
var self = this;
if (file.isNull()) {
cb(null, file);
return;
}
if (file.isStream()) {
cb(new Error('Streaming is not supported'));
return;
}
if (!file.extract || !isZip(file.contents)) {
cb(null, file);
return;
}
yauzl.fromBuffer(file.contents, function (err, zipFile) {
var count = 0;
if (err) {
cb(err);
return;
}
zipFile.on('error', cb);
zipFile.on('entry', function (entry) {
var filePath = stripDirs(entry.fileName, opts.strip);
if (filePath === '.') {
if (++count === zipFile.entryCount) {
cb();
}
return;
}
var stat = new fs.Stats();
var mode = (entry.externalFileAttributes >> 16) & 0xFFFF;
stat.mode = mode;
if (entry.getLastModDate()) {
stat.mtime = entry.getLastModDate();
}
if (entry.fileName.charAt(entry.fileName.length - 1) === '/') {
if (!mode) {
new StatMode(stat).isDirectory(true);
}
self.push(new Vinyl({
path: filePath,
stat: stat
}));
if (++count === zipFile.entryCount) {
cb();
}
return;
}
zipFile.openReadStream(entry, function (err, readStream) {
if (err) {
cb(err);
return;
}
readAllStream(readStream, null, function (err, data) {
if (err) {
cb(err);
return;
}
if (!mode) {
new StatMode(stat).isFile(true);
}
self.push(new Vinyl({
contents: data,
path: filePath,
stat: stat
}));
if (++count === zipFile.entryCount) {
cb();
}
});
});
});
});
});
};