Archiver.prototype.glob = function(pattern, options, data) { this._pending++; options = util.defaults(options, { stat: false }); var globber = glob(pattern, options, function(err, files) { if (err) { this.emit('error', err); return this; } files.forEach(function(file) { entryData = _.extend({}, data); if (options.cwd) { entryData.name = file; file = globber._makeAbs(file); } this._append(file, entryData); }, this); this._pending--; this._maybeFinalize(); }.bind(this)); return this; };
ZipStream.prototype._normalizeFileData = function(data) { data = util.defaults(data, { type: 'file', name: null, date: null, mode: null, store: this.options.store, comment: '' }); var isDir = data.type === 'directory'; if (data.name) { data.name = util.sanitizePath(data.name); if (data.name.slice(-1) === '/') { isDir = true; data.type = 'directory'; } else if (isDir) { data.name += '/'; } } if (isDir) { data.store = true; } data.date = util.dateify(data.date); return data; };
Archiver.prototype.glob = function(pattern, options, data) { this._pending++; options = util.defaults(options, { stat: false }); function onGlobEnd() { this._pending--; this._maybeFinalize(); } function onGlobError(err) { this.emit('error', 'glob: ' + err); } function onGlobMatch(match){ entryData = _.extend({}, data); if (options.cwd) { entryData.name = match; match = globber._makeAbs(match); } this._append(match, entryData); } var globber = glob(pattern, options); globber.on('error', onGlobError.bind(this)); globber.on('match', onGlobMatch.bind(this)); globber.on('end', onGlobEnd.bind(this)); return this; };
Archiver.prototype._normalizeEntryData = function(data, stats) { data = util.defaults(data, { type: 'file', name: null, date: null, mode: null, prefix: null, sourcePath: null, stats: false }); if (stats && data.stats === false) { data.stats = stats; } var isDir = data.type === 'directory'; if (data.name) { if (typeof data.prefix === 'string' && '' !== data.prefix) { data.name = data.prefix + '/' + data.name; data.prefix = null; } data.name = util.sanitizePath(data.name); if (data.name.slice(-1) === '/') { isDir = true; data.type = 'directory'; } else if (isDir) { data.name += '/'; } } // 511 === 0777; 493 === 0755; 438 === 0666; 420 === 0644 if (typeof data.mode === 'number') { data.mode &= 511; } else if (data.stats && data.mode === null) { data.mode = data.stats.mode & 511; // stat isn't reliable on windows; force 0755 for dir if (win32 && isDir) { data.mode = 493; } } else if (data.mode === null) { data.mode = isDir ? 493 : 420; } if (data.stats && data.date === null) { data.date = data.stats.mtime; } else { data.date = util.dateify(data.date); } return data; };
var Json = function(options) { if (!(this instanceof Json)) { return new Json(options); } options = this.options = util.defaults(options, {}); Transform.call(this, options); this.supports = { directory: true }; this.files = []; };
var Archiver = function(format, options) { if (!(this instanceof Archiver)) { return new Archiver(format, options); } if (typeof format !== 'string') { options = format; format = 'zip'; } options = this.options = util.defaults(options, { highWaterMark: 1024 * 1024, statConcurrency: 4 }); Transform.call(this, options); this._format = false; this._module = false; this._pending = 0; this._pointer = 0; this._entriesCount = 0; this._entriesProcessedCount = 0; this._fsEntriesTotalBytes = 0; this._fsEntriesProcessedBytes = 0; this._queue = async.queue(this._onQueueTask.bind(this), 1); this._queue.drain = this._onQueueDrain.bind(this); this._statQueue = async.queue(this._onStatQueueTask.bind(this), options.statConcurrency); this._state = { aborted: false, finalize: false, finalizing: false, finalized: false, modulePiped: false }; this._streams = []; };
Archiver.prototype.glob = function(pattern, options, data) { this._pending++; options = util.defaults(options, { stat: false }); glob(pattern, options, function(err, files) { if (err) { this.emit('error', err); return this; } files.forEach(function(file) { this._append(file, data); }, this); this._pending--; this._maybeFinalize(); }.bind(this)); return this; };
var Tar = function(options) { if (!(this instanceof Tar)) { return new Tar(options); } options = this.options = util.defaults(options, { gzip: false }); if (typeof options.gzipOptions !== 'object') { options.gzipOptions = {}; } this.supports = { directory: true }; this.engine = engine.pack(options); this.compressor = false; if (options.gzip) { this.compressor = zlib.createGzip(options.gzipOptions); this.compressor.on('error', this._onCompressorError.bind(this)); } };