From d9cd275b4e69ba79448e3004d6a4ada0ca8b525d Mon Sep 17 00:00:00 2001 From: Josh Junon Date: Tue, 17 Jan 2017 02:41:45 -0800 Subject: [PATCH] add RGB color support --- index.js | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/index.js b/index.js index 1a36334..c0b870a 100644 --- a/index.js +++ b/index.js @@ -6,6 +6,9 @@ var supportsColor = require('supports-color'); var defineProps = Object.defineProperties; var isSimpleWindowsTerm = process.platform === 'win32' && !/^xterm/i.test(process.env.TERM); +var levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; +var skipModels = ['gray']; + function Chalk(options) { // detect level if not set manually this.level = !options || options.level === undefined ? supportsColor.level : options.level; @@ -29,6 +32,43 @@ Object.keys(ansiStyles).forEach(function (key) { }; }); +ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); +Object.keys(ansiStyles.color.ansi).forEach(function (model) { + if (skipModels.indexOf(model) !== -1) { + return; + } + + styles[model] = { + get: function () { + var level = this.level; + return function () { + var open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); + var codes = {open: open, close: ansiStyles.color.close, closeRe: ansiStyles.color.closeRe}; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], model); + }; + } + }; +}); + +ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); +Object.keys(ansiStyles.bgColor.ansi).forEach(function (model) { + if (skipModels.indexOf(model) !== -1) { + return; + } + + var bgModel = 'bg' + model.charAt(0).toUpperCase() + model.substring(1); + styles[bgModel] = { + get: function () { + var level = this.level; + return function () { + var open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); + var codes = {open: open, close: ansiStyles.bgColor.close, closeRe: ansiStyles.bgColor.closeRe}; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], model); + }; + } + }; +}); + // eslint-disable-next-line func-names var proto = defineProps(function chalk() {}, styles);