diff --git a/lib/colors.js b/lib/colors.js index 76c6d564..9c7f1d14 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 11887b04..11c21c88 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);