UNPKG

@tdb/web

Version:

Common condiguration for serving a web-site and testing web-based UI components.

64 lines (51 loc) 1.65 kB
import chalk from 'chalk' import figures from 'figures' import startCase from 'lodash/startCase' const NS_SEPARATOR = chalk.blue(figures(' › ')) const ICONS = { start: figures('●'), info: figures('ℹ'), success: figures('✔'), error: figures('✖'), fatal: figures('✖'), warn: figures('⚠'), debug: figures('…'), trace: figures('…'), default: figures('❯'), ready: figures('♥') } export default class FancyReporter { constructor (stream, options = {}) { this.stream = stream || process.stderr } formatBadge (type, color = 'blue', icon) { return chalk['bg' + startCase(color)].black(` ${type.toUpperCase()} `) + ' ' } formatTag (type, color = 'blue', icon) { return chalk[color](`${icon} ${type.toLowerCase()}`) + ' ' } clear () { this.stream.write(process.platform === 'win32' ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H') } log (logObj) { let message = logObj.message if (logObj.scope) { message = (logObj.scope.replace(/:/g, '>') + '>').split('>').join(NS_SEPARATOR) + message } if (logObj.clear) { this.clear() } const icon = logObj.icon || ICONS[logObj.type] || ICONS.default if (logObj.badge) { this.stream.write('\n\n' + this.formatBadge(logObj.type, logObj.color, icon) + message + '\n\n') } else { this.stream.write(this.formatTag(logObj.type, logObj.color, icon) + message + '\n') } if (logObj.additional) { const lines = logObj.additional.split('\n').map(s => ' ' + s).join('\n') this.stream.write(chalk[logObj.additionalStyle || 'grey'](lines) + '\n') } } }