@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
90 lines • 2.4 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 log = (message = '', severity = null) => {
if (message === '') {
return console.log('');
}
if (typeof message === 'function') {
message = message(chalk);
}
if (severity === 'banner') {
const lines = message.match(/.{1,70}(\s|$)/g);
const maxLength = lines.map(line => line.length).reduce((prev, curr) => {
if (curr > prev) {
return curr;
}
return prev;
}, 70) + 2;
console.log(chalk.blue('-'.repeat(maxLength)));
lines.forEach(line => log(line, 'info'));
console.log(chalk.blue('-'.repeat(maxLength)));
} 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: message => log(message, 'info'),
banner: message => log(message, 'banner'),
success: message => log(message, 'success'),
warning: message => log(message, 'warning'),
debug: message => log(message, '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()
};