| /** |
| * 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, '/'); |
| }; |