Upsilon-VsCode/Client/node_modules/gulp-vinyl-zip/lib/zip/index.js

61 lines
1.4 KiB
JavaScript
Raw Normal View History

2019-02-17 17:07:28 +00:00
'use strict';
var through = require('through2');
var yazl = require('yazl');
var File = require('../vinyl-zip');
function zip(zipPath, options) {
if (!zipPath) throw new Error('No zip path specified.');
options = options || {};
var zip = new yazl.ZipFile();
var isEmpty = true;
var stream = through.obj(function(file, enc, cb) {
var stat = file.stat || {};
var opts = {
mtime: stat.mtime,
mode: stat.mode
};
opts.compress = options.compress;
var path = file.relative.replace(/\\/g, '/');
if (stat.isSymbolicLink && stat.isSymbolicLink()) {
zip.addBuffer(new Buffer(file.symlink), path, opts);
} else if (file.isDirectory()) {
// In Windows, directories have a 666 permissions. This doesn't go well
// on OS X and Linux, where directories are expected to be 755.
if (/win32/.test(process.platform)) {
opts.mode = 16877;
}
zip.addEmptyDirectory(path, opts);
} else if (file.isBuffer()) {
zip.addBuffer(file.contents, path, opts);
} else if (file.isStream()) {
zip.addReadStream(file.contents, path, opts);
}
isEmpty = false;
cb();
}, function(cb) {
if (isEmpty && options.unlessEmpty) {
return cb();
}
stream.push(new File({path: zipPath, contents: zip.outputStream}));
zip.end(function() {
cb();
});
});
stream.resume();
return stream;
}
module.exports = zip;