aboutsummaryrefslogtreecommitdiff
path: root/node_modules/gulp-zip/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/gulp-zip/index.js')
-rw-r--r--node_modules/gulp-zip/index.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/node_modules/gulp-zip/index.js b/node_modules/gulp-zip/index.js
new file mode 100644
index 000000000..82733be43
--- /dev/null
+++ b/node_modules/gulp-zip/index.js
@@ -0,0 +1,74 @@
+'use strict';
+var path = require('path');
+var gutil = require('gulp-util');
+var through = require('through2');
+var chalk = require('chalk');
+var Yazl = require('yazl');
+var concatStream = require('concat-stream');
+
+module.exports = function (filename, opts) {
+ if (!filename) {
+ throw new gutil.PluginError('gulp-zip', chalk.blue('filename') + ' required');
+ }
+
+ opts = opts || {};
+ opts.compress = typeof opts.compress === 'boolean' ? opts.compress : true;
+
+ var firstFile;
+ var zip = new Yazl.ZipFile();
+
+ return through.obj(function (file, enc, cb) {
+ if (!firstFile) {
+ firstFile = file;
+ }
+
+ // because Windows...
+ var pathname = file.relative.replace(/\\/g, '/');
+
+ if (!pathname) {
+ cb();
+ return;
+ }
+
+ if (file.isNull() && file.stat && file.stat.isDirectory && file.stat.isDirectory()) {
+ zip.addEmptyDirectory(pathname, {
+ mtime: file.stat.mtime || new Date(),
+ mode: file.stat.mode
+ });
+ } else {
+ var stat = {
+ compress: opts.compress,
+ mtime: file.stat ? file.stat.mtime : new Date(),
+ mode: file.stat ? file.stat.mode : null
+ };
+
+ if (file.isStream()) {
+ zip.addReadStream(file.contents, pathname, stat);
+ }
+
+ if (file.isBuffer()) {
+ zip.addBuffer(file.contents, pathname, stat);
+ }
+ }
+
+ cb();
+ }, function (cb) {
+ if (!firstFile) {
+ cb();
+ return;
+ }
+
+ zip.end(function () {
+ zip.outputStream.pipe(concatStream(function (data) {
+ this.push(new gutil.File({
+ cwd: firstFile.cwd,
+ base: firstFile.base,
+ path: path.join(firstFile.base, filename),
+ contents: data
+ }));
+
+ cb();
+ }.bind(this)));
+ }.bind(this));
+ });
+};