NeahNew/node_modules/wait-on/bin/wait-on
2025-05-06 22:43:27 +02:00

102 lines
2.4 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require('fs');
const minimist = require('minimist');
const path = require('path');
const waitOn = require('../');
const interval = ['timeout', 'httpTimeout', 'tcpTimeout'];
const minimistOpts = {
string: ['c', 'd', 'i', 's', 't', 'w'].concat(interval),
boolean: ['h', 'l', 'r', 'v'],
alias: {
c: 'config',
d: 'delay',
i: 'interval',
l: 'log',
r: 'reverse',
s: 'simultaneous',
t: 'timeout',
v: 'verbose',
w: 'window',
h: 'help'
}
};
const argv = minimist(process.argv.slice(2), minimistOpts);
// if a js/json configuration file is provided require it
const configOpts = argv.config ? require(path.resolve(argv.config)) : {};
const hasResources = argv._.length || (configOpts.resources && configOpts.resources.length);
if (argv.help || !hasResources) {
// help
fs.createReadStream(path.join(__dirname, '/usage.txt'))
.pipe(process.stdout)
.on('close', function () {
process.exit(1);
});
} else {
// if resources are present in the command line then they take
// precedence over those in the config file.
if (argv._.length) {
configOpts.resources = argv._;
}
// now check for specific options and set those
const opts = [
'delay',
'httpTimeout',
'interval',
'log',
'reverse',
'simultaneous',
'timeout',
'tcpTimeout',
'verbose',
'window'
].reduce(function (accum, x) {
if (argv[x]) {
let value = argv[x];
if (interval.includes(x)) {
value = parseInterval(value);
}
accum[x] = value;
}
return accum;
}, configOpts);
waitOn(opts, function (err) {
if (err) {
return errorExit(err);
}
// success, could just let it exit on its own, however since
// rxjs window waits an extra loop before heeding the unsubscribe
// we can exit to speed things up
process.exit(0);
});
}
function errorExit(err) {
if (err.stack) {
console.error(err.stack);
} else {
console.error(String(err));
}
process.exit(1);
}
function parseInterval(arg) {
const res = /^([\d.]+)(|ms|s|m|h)$/i.exec(arg);
if (!res) {
return arg;
}
const value = parseFloat(res[1]);
switch (res[2]) {
case '':
case 'ms': return Math.floor(value);
case 's': return Math.floor(value * 1000);
case 'm': return Math.floor(value * 1000 * 60);
case 'h': return Math.floor(value * 1000 * 60 * 60);
}
}