diff --git a/index.js b/index.js index 2bad21b..b4a8488 100644 --- a/index.js +++ b/index.js @@ -16,18 +16,6 @@ if (process.platform === 'win32' && !/^xterm/i.test(process.env.TERM || '')) { ansiStyles.blue.open = '\u001b[94m'; } -function build(_styles) { - var builder = function builder() { - return applyStyle.apply(builder, arguments); - }; - builder._styles = _styles; - builder.enabled = this.enabled; - // __proto__ is used because we must return a function, but there is - // no way to create a function with a different prototype. - builder.__proto__ = proto; - return builder; -} - var styles = (function () { var ret = {}; @@ -46,11 +34,27 @@ var styles = (function () { var proto = defineProps(function chalk() {}, styles); +function build(_styles) { + var builder = function builder() { + return applyStyle.apply(builder, arguments); + }; + + builder._styles = _styles; + builder.enabled = this.enabled; + // __proto__ is used because we must return a function, but there is + // no way to create a function with a different prototype. + /*eslint no-proto: 0 */ + builder.__proto__ = proto; + + return builder; +} + function applyStyle() { // support varags, but simply cast to string in case there's only one arg var args = arguments; var argsLen = args.length; var str = argsLen !== 0 && String(arguments[0]); + if (argsLen > 1) { // don't slice `arguments`, it prevents v8 optimizations for (var a = 1; a < argsLen; a++) { @@ -62,12 +66,12 @@ function applyStyle() { return str; } - /*jshint validthis: true */ var nestedStyles = this._styles; - var i = nestedStyles.length; + while (i--) { var code = ansiStyles[nestedStyles[i]]; + // Replace any instances already present with a re-opening code // otherwise only the part of the string until said closing code // will be colored, and the rest will simply be 'plain'.