59 lines
1.3 KiB
Plaintext
59 lines
1.3 KiB
Plaintext
const chalk = require("chalk")
|
|
const kleur = require("kleur")
|
|
|
|
// user kleur if we are in the browser
|
|
const colorLib = (process && process.stdout) ? chalk : kleur
|
|
|
|
const stripAnsi = require("strip-ansi")
|
|
|
|
module.exports.style = (str, ...colors) => {
|
|
const out = colors.reduce(function (input, color) {
|
|
return colorLib[color](input)
|
|
}, str)
|
|
return out
|
|
}
|
|
|
|
module.exports.styleEachChar = (str, ...colors) => {
|
|
// strip existing ansi chars so we dont loop them
|
|
// @ TODO create a really clever workaround so that you can accrete styles
|
|
const chars = [...stripAnsi(str)]
|
|
|
|
// style each character
|
|
const out = chars.reduce((prev, current) => {
|
|
const coded = colors.reduce((input, color) => {
|
|
return colorLib[color](input)
|
|
}, current)
|
|
return prev + coded
|
|
}, "")
|
|
|
|
return out
|
|
}
|
|
|
|
module.exports.resetStyle = function (str) {
|
|
this.configure({ reset: true })
|
|
return stripAnsi(str)
|
|
}
|
|
|
|
module.exports.colorizeCell = (str, cellOptions, rowType) => {
|
|
let color = false // false will keep terminal default
|
|
|
|
switch (true) {
|
|
case (rowType === "body"):
|
|
color = cellOptions.color || color
|
|
break
|
|
|
|
case (rowType === "header"):
|
|
color = cellOptions.headerColor || color
|
|
break
|
|
|
|
default:
|
|
color = cellOptions.footerColor || color
|
|
}
|
|
|
|
if (color) {
|
|
str = exports.style(str, color)
|
|
}
|
|
|
|
return str
|
|
}
|