(async () => { try { await api({measureUpload: cli.flags.upload}).forEach(result => { data = result; }); exit(); } catch (error) { console.error(error.message); process.exit(1); } })();
const speedText = () => cli.flags.upload ? `${downloadColor(downloadSpeed())} ${chalk.dim('/')} ${uploadColor(uploadSpeed())}` : downloadColor(downloadSpeed())
function exit() { if (process.stdout.isTTY) { logUpdate(`${lineBreak(2)}${spacing(4)}${speed()}`); } else { let output = `${data.downloadSpeed} ${data.downloadUnit}`; if (cli.flags.upload) { output += `\n${data.uploadSpeed} ${data.uploadUnit}`; } console.log(output); } process.exit(); }
init(subarg(cli.input, options)._, cli.flags).catch(error => { console.error(error); process.exit(1); });
st.on('uploadspeedprogress', speed => { if (state === 'upload' && cli.flags.json !== true) { speed *= multiplier; const upload = roundTo(speed, speed >= 10 ? 0 : 1); stats.upload = chalk.yellow(`${upload} ${chalk.dim(unit)}`); } });
const logError = error => { if (cli.flags.json) { console.error(JSON.stringify({error})); } else { console.error(logSymbols.error, error); } }
setTimeout(() => { animation.stop(); }, cli.flags.duration);
function render() { if (cli.flags.json) { console.log(JSON.stringify(stats)); return; } let output = ` Ping ${getSpinnerFromState('ping')}${stats.ping} Download ${getSpinnerFromState('download')}${stats.download} Upload ${getSpinnerFromState('upload')}${stats.upload}`; if (cli.flags.verbose) { output += [ '', ' Server ' + (stats.data === undefined ? '' : chalk.cyan(stats.data.server.host)), ' Location ' + (stats.data === undefined ? '' : chalk.cyan(stats.data.server.location + chalk.dim(' (' + stats.data.server.country + ')'))), ' Distance ' + (stats.data === undefined ? '' : chalk.cyan(roundTo(stats.data.server.distance, 1) + chalk.dim(' km'))) ].join('\n'); } logUpdate(output); }
const spacing = amount => (cli.flags.singleLine ? '' : ' '.repeat(amount))
st.on('data', data => { if (cli.flags.verbose) { stats.data = data; } render(); });
st.on('downloadspeedprogress', speed => { if (state === 'download' && cli.flags.json !== true) { speed *= multiplier; const download = roundTo(speed, speed >= 10 ? 0 : 1); stats.download = chalk.yellow(`${download} ${chalk.dim(unit)}`); } });
const lineBreak = amount => (cli.flags.singleLine ? '' : '\n'.repeat(amount))