rapid
Version:
A simple tool for rapidly creating components
114 lines (84 loc) • 2.95 kB
JavaScript
// tooling
const color = require('./color');
const readline = require('readline');
// symbols
const isWin32 = process.platform === 'win32';
const tick = isWin32 ? '√' : '✔';
const cross = isWin32 ? '×' : '✖';
// log methods
Object.assign(exports, {
// log with a passing appearance
pass(name = '', message = '', size = '') {
clearInterval(exports.interval);
// reset current stream line
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0);
process.stdout.write(color.green(tick) + ' ' + name + ' ' + color.dim(message) + (size ? ' ' + color.green('[' + size + ']') : '') + '\n');
return exports;
},
// log with a failing appearance
fail(name = '', message = '', errors) {
clearInterval(exports.interval);
// reset current stream line
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0);
process.stdout.write(color.red(cross) + ' ' + name + ' ' + color.dim(message) + '\n');
if (Array.isArray(errors)) {
errors.forEach((error) => {
process.stdout.write(' → ' + color.dim(color.underline(error.filename)) + '\n');
error.messages.forEach(
(errormessage) => {
process.stdout.write(' ' + [
(errormessage.line + ':' + errormessage.column + ' ').slice(0, 7),
color.dim(errormessage.message),
color.green('[' + errormessage.id + ']')
].join(' ') + '\n');
}
);
});
} else {
process.stdout.write(' → ' + errors + '\n');
}
return exports;
},
// log with a pending appearance
pend(name = '', message = '') {
// reset current stream line
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0);
process.stdout.write(color.yellow('…') + ' ' + name + ' ' + color.dim(message));
return exports;
},
// log with a waiting appearance
wait(name = '', message = '') {
const spinner = isWin32 ? '-–—–-' : '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';
let index = 0;
clearInterval(exports.interval);
// reset current stream line
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0);
process.stdout.write(color.yellow(spinner[index]) + ' ' + name + ' ' + color.dim(message));
exports.interval = setInterval(() => {
index = (index + 1) % spinner.length;
readline.cursorTo(process.stdout, 0);
process.stdout.write(color.yellow(spinner[index]) + ' ' + name + ' ' + color.dim(message));
}, 60);
return exports;
},
// stopped waiting log
stop() {
clearInterval(exports.interval);
// reset current stream line
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0);
return exports;
},
// log
line(message = '') {
// reset current stream line
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0);
process.stdout.write(Array.isArray(message) ? message.join('\n') + '\n' : String(message) + '\n');
return exports;
}
});