import chalk from 'chalk' import { ORIGIN_STDOUT_WRITE } from './constants' import { EOutputLevel, EOutputPrefix } from './constants' const prefixs = [EOutputPrefix.frontend, EOutputPrefix.backend] const prefixColumnSize = Math.max(...prefixs.map((prefix) => prefix.length)) const prefixColorFn: Record string> = { [EOutputPrefix.frontend]: chalk.green, [EOutputPrefix.backend]: chalk.cyan, [EOutputPrefix.info]: chalk.magenta, } function linePrefix(prefix: EOutputPrefix) { return prefixColorFn[prefix]( chalk.bold(`${prefix}${' '.repeat(prefixColumnSize - prefix.length)} ${'|'} `), ) } function originOutput(str: string) { return ORIGIN_STDOUT_WRITE.call(process.stdout, str) } function output(level: EOutputLevel, str: string, prefix: EOutputPrefix): boolean { const lines = str.split(/\n/g) for (let i = 0, l = lines.length; i < l; i++) { const line = lines[i] switch (level) { case EOutputLevel.error: originOutput(`${linePrefix(prefix)}${chalk.red(line)}`) break default: originOutput(`${linePrefix(prefix)}${line}`) break } originOutput('\n') } return true } export default output