Files
BeWoPlaner/BeWoPlanerMobil/node_modules/wd/lib/tmp.js
Lyndon Jetten fda2c306b5 MoK: Report Viewer hinzugefügt
FaC: Das alte Flag von Terminen, die in die Zeiterfassung übernommen worden sind, wird ebenfalls berücksichtigt.
2023-03-13 19:39:04 +01:00

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;