/** | |
* node-zip-stream | |
* | |
* Copyright (c) 2014 Chris Talkington, contributors. | |
* Licensed under the MIT license. | |
* https://github.com/ctalkington/node-zip-stream/blob/master/LICENSE-MIT | |
*/ | |
var fs = require('fs'); | |
var path = require('path'); | |
var Stream = require('stream').Stream; | |
var PassThrough = require('readable-stream').PassThrough; | |
var _ = require('lodash'); | |
var util = module.exports = {}; | |
util.convertDateTimeDos = function(input) { | |
return new Date( | |
((input >> 25) & 0x7f) + 1980, | |
((input >> 21) & 0x0f) - 1, | |
(input >> 16) & 0x1f, | |
(input >> 11) & 0x1f, | |
(input >> 5) & 0x3f, | |
(input & 0x1f) << 1 | |
); | |
}; | |
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 _.defaults.apply(_, args); | |
}; | |
util.dosDateTime = function(d, utc) { | |
d = (d instanceof Date) ? d : util.dateify(d); | |
utc = utc || false; | |
var year = utc ? d.getUTCFullYear() : d.getFullYear(); | |
if (year < 1980) { | |
return 2162688; // 1980-1-1 00:00:00 | |
} else if (year >= 2044) { | |
return 2141175677; // 2043-12-31 23:59:58 | |
} | |
var val = { | |
year: year, | |
month: utc ? d.getUTCMonth() : d.getMonth(), | |
date: utc ? d.getUTCDate() : d.getDate(), | |
hours: utc ? d.getUTCHours() : d.getHours(), | |
minutes: utc ? d.getUTCMinutes() : d.getMinutes(), | |
seconds: utc ? d.getUTCSeconds() : d.getSeconds() | |
}; | |
return ((val.year-1980) << 25) | ((val.month+1) << 21) | (val.date << 16) | | |
(val.hours << 11) | (val.minutes << 5) | (val.seconds / 2); | |
}; | |
util.isStream = function(source) { | |
return source instanceof Stream; | |
}; | |
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.unixifyPath = function() { | |
var filepath = path.join.apply(path, arguments); | |
return filepath.replace(/\\/g, '/'); | |
}; |