From b4d964b514037a3f06a37fa84c6fede0f0d41139 Mon Sep 17 00:00:00 2001 From: DABH Date: Sun, 22 Sep 2019 16:27:58 -0700 Subject: [PATCH] Make stylize() work for non-ASCI styles (#155) --- lib/colors.js | 11 ++++++++++- tests/basic-test.js | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/colors.js b/lib/colors.js index 76c6d56..9c7f1d1 100644 --- a/lib/colors.js +++ b/lib/colors.js @@ -62,7 +62,16 @@ var stylize = colors.stylize = function stylize(str, style) { return str+''; } - return ansiStyles[style].open + str + ansiStyles[style].close; + var styleMap = ansiStyles[style]; + + // Stylize should work for non-ANSI styles, too + if(!styleMap && style in colors){ + // Style maps like trap operate as functions on strings; + // they don't have properties like open or close. + return colors[style](str); + } + + return styleMap.open + str + styleMap.close; }; var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; diff --git a/tests/basic-test.js b/tests/basic-test.js index 11887b0..11c21c8 100644 --- a/tests/basic-test.js +++ b/tests/basic-test.js @@ -30,6 +30,12 @@ assert.equal(s.inverse, '\x1B[7m' + s + '\x1B[27m'); assert.ok(s.rainbow); +assert.equal(colors.stylize("foo", "rainbow"), '\u001b[31mf\u001b[39m\u001b[33mo\u001b[39m\u001b[32mo\u001b[39m'); +assert.ok(colors.stylize(s, "america")); +assert.ok(colors.stylize(s, "zebra")); +assert.ok(colors.stylize(s, "trap")); +assert.ok(colors.stylize(s, "random")); + aE(s, 'white', 37); aE(s, 'grey', 90); aE(s, 'black', 30);