|
|
import figures from 'figures';import { gray, bold, redBright, yellowBright,} from 'yoctocolors';
// Default when `verbose` is not a function
export const defaultVerboseFunction = ({ type, message, timestamp, piped, commandId, result: {failed = false} = {}, options: {reject = true},}) => { const timestampString = serializeTimestamp(timestamp); const icon = ICONS[type]({failed, reject, piped}); const color = COLORS[type]({reject}); return `${gray(`[${timestampString}]`)} ${gray(`[${commandId}]`)} ${color(icon)} ${color(message)}`;};
// Prepending the timestamp allows debugging the slow paths of a subprocess
const serializeTimestamp = timestamp => `${padField(timestamp.getHours(), 2)}:${padField(timestamp.getMinutes(), 2)}:${padField(timestamp.getSeconds(), 2)}.${padField(timestamp.getMilliseconds(), 3)}`;
const padField = (field, padding) => String(field).padStart(padding, '0');
const getFinalIcon = ({failed, reject}) => { if (!failed) { return figures.tick; }
return reject ? figures.cross : figures.warning;};
const ICONS = { command: ({piped}) => piped ? '|' : '$', output: () => ' ', ipc: () => '*', error: getFinalIcon, duration: getFinalIcon,};
const identity = string => string;
const COLORS = { command: () => bold, output: () => identity, ipc: () => identity, error: ({reject}) => reject ? redBright : yellowBright, duration: () => gray,};
|