UNPKG

@puls-atlas/cli

Version:

The Puls Atlas CLI tool for managing Atlas projects

97 lines 2.86 kB
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() };