FaC: Das alte Flag von Terminen, die in die Zeiterfassung übernommen worden sind, wird ebenfalls berücksichtigt.
112 lines
2.6 KiB
JavaScript
112 lines
2.6 KiB
JavaScript
// inspired by https://github.com/raszi/node-tmp, but only
|
|
// provides tmp paths.
|
|
|
|
var
|
|
fs = require('fs'),
|
|
path = require('path'),
|
|
os = require('os'),
|
|
utils = require('./utils');
|
|
|
|
function _isUndefined(obj) {
|
|
return typeof obj === 'undefined';
|
|
}
|
|
|
|
function _parseArguments() {
|
|
var fargs = utils.varargs(arguments);
|
|
var callback = fargs.callback;
|
|
var options = fargs.all[0];
|
|
return [ options, callback ];
|
|
}
|
|
|
|
/**
|
|
* Gets the temp directory.
|
|
*
|
|
* @return {String}
|
|
* @api private
|
|
*/
|
|
function _getTMPDir() {
|
|
var tmpNames = [ 'TMPDIR', 'TMP', 'TEMP' ];
|
|
|
|
for (var i = 0, length = tmpNames.length; i < length; i++) {
|
|
if (_isUndefined(process.env[tmpNames[i]])) { continue; }
|
|
|
|
return process.env[tmpNames[i]];
|
|
}
|
|
|
|
// fallback to the default
|
|
return '/tmp';
|
|
}
|
|
|
|
var
|
|
exists = fs.exists || path.exists,
|
|
tmpDir = os.tmpdir || os.tmpDir || _getTMPDir,
|
|
_TMP = tmpDir(),
|
|
randomChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz",
|
|
randomCharsLength = randomChars.length;
|
|
|
|
/**
|
|
* Gets a temporary file name.
|
|
*
|
|
* @param {Object} opts
|
|
* @param {Function} cb
|
|
* @api private
|
|
*/
|
|
function _getTmpName(options, callback) {
|
|
var
|
|
args = _parseArguments(options, callback),
|
|
opts = args[0],
|
|
cb = args[1],
|
|
template = opts.template,
|
|
templateDefined = !_isUndefined(template),
|
|
tries = opts.tries || 3;
|
|
|
|
if (isNaN(tries) || tries < 0)
|
|
{ return cb(new Error('Invalid tries')); }
|
|
|
|
if (templateDefined && !template.match(/XXXXXX/))
|
|
{ return cb(new Error('Invalid template provided')); }
|
|
|
|
function _getName() {
|
|
|
|
// prefix and postfix
|
|
if (!templateDefined) {
|
|
var name = [
|
|
(_isUndefined(opts.prefix)) ? 'tmp-' : opts.prefix,
|
|
process.pid,
|
|
(Math.random() * 0x1000000000).toString(36),
|
|
opts.postfix
|
|
].join('');
|
|
|
|
return path.join(opts.dir || _TMP, name);
|
|
}
|
|
|
|
// mkstemps like template
|
|
var chars = [];
|
|
|
|
for (var i = 0; i < 6; i++) {
|
|
chars.push(randomChars.substr(Math.floor(Math.random() * randomCharsLength), 1));
|
|
}
|
|
|
|
return template.replace(/XXXXXX/, chars.join(''));
|
|
}
|
|
|
|
(function _getUniqueName() {
|
|
var name = _getName();
|
|
|
|
// check whether the path exists then retry if needed
|
|
exists(name, function _pathExists(pathExists) {
|
|
if (pathExists) {
|
|
if (tries-- > 0) { return _getUniqueName(); }
|
|
|
|
return cb(new Error('Could not get a unique tmp filename, max tries reached'));
|
|
}
|
|
|
|
cb(null, name);
|
|
});
|
|
}());
|
|
}
|
|
|
|
// exporting all the needed methods
|
|
module.exports.tmpdir = _TMP;
|
|
module.exports.tmpName = _getTmpName;
|