blob: 02030fbc7accb741c938163f079238ba567a2699 [file] [log] [blame]
/**
* node-archiver
*
* Copyright (c) 2012-2014 Chris Talkington, contributors.
* Licensed under the MIT license.
* https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
*/
var fs = require('fs');
var path = require('path');
var Stream = require('stream').Stream;
var PassThrough = require('readable-stream').PassThrough;
var util = module.exports = {};
util._ = require('lodash');
util.lazystream = require('lazystream');
util.file = require('./file');
util.collectStream = function(source, callback) {
var collection = [];
var size = 0;
source.on('error', callback);
source.on('data', function(chunk) {
collection.push(chunk);
size += chunk.length;
});
source.on('end', function() {
var buf = new Buffer(size, 'utf8');
var offset = 0;
collection.forEach(function(data) {
data.copy(buf, offset);
offset += data.length;
});
callback(null, buf);
});
};
util.dateify = function(dateish) {
dateish = dateish || new Date();
if (dateish instanceof Date) {
dateish = dateish;
} else if (typeof dateish === 'string') {
dateish = new Date(dateish);
} else {
dateish = new Date();
}
return dateish;
};
// this is slightly different from lodash version
util.defaults = function(object, source, guard) {
var args = arguments;
args[0] = args[0] || {};
return util._.defaults.apply(util._, args);
};
util.isStream = function(source) {
return source instanceof Stream;
};
util.lazyReadStream = function(filepath) {
return new util.lazystream.Readable(function() {
return fs.createReadStream(filepath);
});
};
util.normalizeInputSource = function(source) {
if (source === null) {
return new Buffer(0);
} else if (typeof source === 'string') {
return new Buffer(source);
} else if (util.isStream(source) && !source._readableState) {
var normalized = new PassThrough();
source.pipe(normalized);
return normalized;
}
return source;
};
util.sanitizePath = function() {
var filepath = path.join.apply(path, arguments);
return filepath.replace(/\\/g, '/').replace(/:/g, '').replace(/^\/+/, '');
};
util.trailingSlashIt = function(str) {
return str.slice(-1) !== '/' ? str + '/' : str;
};
util.unixifyPath = function() {
var filepath = path.join.apply(path, arguments);
return filepath.replace(/\\/g, '/');
};