@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
97 lines • 2.86 kB
JavaScript
import chalk from 'chalk';
import ora from 'ora';
const bgColors = ['bgGreen', 'bgYellow', 'bgRed', 'bgBlue', 'bgMagenta', 'bgCyan', 'bgWhite'];
const format = (severity, message) => {
const severityColor = {
info: chalk.blue,
error: chalk.red,
success: chalk.green,
warning: chalk.yellow,
debug: chalk.gray,
callout: chalk.blackBright
};
const icon = {
info: 'ℹ',
error: '✖',
success: '✔',
warning: '⚠',
debug: '⚙',
callout: ''
};
return severityColor[severity](`${icon[severity].padEnd(1, ' ')} ${message}`);
};
const logBanner = (message, borderColor = 'blue', padding = 1) => {
const lines = message.match(/.{1,70}(\s|$)/g);
const maxLength = lines.map(line => line.length).reduce((prev, curr) => Math.max(prev, curr), 70) + 4;
const emptyLine = chalk[borderColor](`║${' '.repeat(maxLength - 2)}║`);
console.log(chalk[borderColor](`╔${'═'.repeat(maxLength - 2)}╗`));
for (let i = 0; i < padding; i++) {
console.log(emptyLine);
}
lines.forEach(line => {
console.log(chalk[borderColor](`║ ${chalk.white(line.padEnd(maxLength - 4, ' '))} ║`));
});
for (let i = 0; i < padding; i++) {
console.log(emptyLine);
}
console.log(chalk[borderColor](`╚${'═'.repeat(maxLength - 2)}╝`));
};
const log = (message = '', severity = null) => {
if (message === '') {
return console.log('');
}
if (typeof message === 'function') {
message = message(chalk);
}
if (severity === 'banner') {
logBanner(message);
} else {
switch (severity) {
case null:
if (Array.isArray(message)) {
console.log(...message);
} else {
console.log(message);
}
break;
case 'success':
case 'warning':
case 'info':
case 'debug':
console.log(format(severity, message));
break;
default:
console.log(format('info', message));
break;
}
}
};
export default {
log,
break: () => log(),
info: (...messages) => log(messages.join(' '), 'info'),
banner: (...messages) => log(messages.join(' '), 'banner'),
success: (...messages) => log(messages.join(' '), 'success'),
warning: (...messages) => log(messages.join(' '), 'warning'),
debug: (...messages) => log(messages.join(' '), 'debug'),
line: () => {
console.log('-'.repeat(70));
},
error: (message, exit = true) => {
console.error(format('error', message));
if (exit) {
process.exit();
}
},
callout: (message, bg = 'green') => {
let bgColor = bg.charAt(0).toUpperCase() + bg.slice(1);
if (!bgColors.includes(bgColor)) {
bgColor = 'Green';
}
console.log(format('callout', chalk[`bg${bgColor}`].bold(` ➤ ${message} `)));
},
spinner: (text, spinner = 'timeTravel') => ora({
text,
spinner
}).start()
};