mirror of
				https://github.com/flynx/colors.js.git
				synced 2025-11-04 05:50:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			187 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
 | 
						|
The MIT License (MIT)
 | 
						|
 | 
						|
Original Library 
 | 
						|
  - Copyright (c) Marak Squires
 | 
						|
 | 
						|
Additional functionality
 | 
						|
 - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
 | 
						|
 | 
						|
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
						|
of this software and associated documentation files (the "Software"), to deal
 | 
						|
in the Software without restriction, including without limitation the rights
 | 
						|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
						|
copies of the Software, and to permit persons to whom the Software is
 | 
						|
furnished to do so, subject to the following conditions:
 | 
						|
 | 
						|
The above copyright notice and this permission notice shall be included in
 | 
						|
all copies or substantial portions of the Software.
 | 
						|
 | 
						|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
						|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
						|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
						|
THE SOFTWARE.
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
var colors = {};
 | 
						|
module['exports'] = colors;
 | 
						|
 | 
						|
colors.themes = {};
 | 
						|
 | 
						|
var ansiStyles = colors.styles = require('./styles');
 | 
						|
var defineProps = Object.defineProperties;
 | 
						|
 | 
						|
colors.supportsColor = require('./system/supports-colors');
 | 
						|
 | 
						|
if (typeof colors.enabled === "undefined") {
 | 
						|
  colors.enabled = colors.supportsColor;
 | 
						|
}
 | 
						|
 | 
						|
colors.stripColors = colors.strip = function(str){
 | 
						|
  return ("" + str).replace(/\x1B\[\d+m/g, '');
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
var stylize = colors.stylize = function stylize (str, style) {
 | 
						|
  if (!colors.enabled) {
 | 
						|
    return str+'';
 | 
						|
  }
 | 
						|
 | 
						|
  return ansiStyles[style].open + str + ansiStyles[style].close;
 | 
						|
}
 | 
						|
 | 
						|
var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
 | 
						|
var escapeStringRegexp = function (str) {
 | 
						|
  if (typeof str !== 'string') {
 | 
						|
    throw new TypeError('Expected a string');
 | 
						|
  }
 | 
						|
  return str.replace(matchOperatorsRe,  '\\$&');
 | 
						|
}
 | 
						|
 | 
						|
function build(_styles) {
 | 
						|
  var builder = function builder() {
 | 
						|
    return applyStyle.apply(builder, arguments);
 | 
						|
  };
 | 
						|
  builder._styles = _styles;
 | 
						|
  // __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 = {};
 | 
						|
  ansiStyles.grey = ansiStyles.gray;
 | 
						|
  Object.keys(ansiStyles).forEach(function (key) {
 | 
						|
    ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
 | 
						|
    ret[key] = {
 | 
						|
      get: function () {
 | 
						|
        return build(this._styles.concat(key));
 | 
						|
      }
 | 
						|
    };
 | 
						|
  });
 | 
						|
  return ret;
 | 
						|
})();
 | 
						|
 | 
						|
var proto = defineProps(function colors() {}, styles);
 | 
						|
 | 
						|
function applyStyle() {
 | 
						|
  var args = arguments;
 | 
						|
  var argsLen = args.length;
 | 
						|
  var str = argsLen !== 0 && String(arguments[0]);
 | 
						|
  if (argsLen > 1) {
 | 
						|
    for (var a = 1; a < argsLen; a++) {
 | 
						|
      str += ' ' + args[a];
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (!colors.enabled || !str) {
 | 
						|
    return str;
 | 
						|
  }
 | 
						|
 | 
						|
  var nestedStyles = this._styles;
 | 
						|
 | 
						|
  var i = nestedStyles.length;
 | 
						|
  while (i--) {
 | 
						|
    var code = ansiStyles[nestedStyles[i]];
 | 
						|
    str = code.open + str.replace(code.closeRe, code.open) + code.close;
 | 
						|
  }
 | 
						|
 | 
						|
  return str;
 | 
						|
}
 | 
						|
 | 
						|
function applyTheme (theme) {
 | 
						|
  for (var style in theme) {
 | 
						|
    (function(style){
 | 
						|
      colors[style] = function(str){
 | 
						|
        if (typeof theme[style] === 'object'){
 | 
						|
          var out = str;
 | 
						|
          for (var i in theme[style]){
 | 
						|
            out = colors[theme[style][i]](out);
 | 
						|
          }
 | 
						|
          return out;
 | 
						|
        }
 | 
						|
        return colors[theme[style]](str);
 | 
						|
      };
 | 
						|
    })(style)
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
colors.setTheme = function (theme) {
 | 
						|
  if (typeof theme === 'string') {
 | 
						|
    try {
 | 
						|
      colors.themes[theme] = require(theme);
 | 
						|
      applyTheme(colors.themes[theme]);
 | 
						|
      return colors.themes[theme];
 | 
						|
    } catch (err) {
 | 
						|
      console.log(err);
 | 
						|
      return err;
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    applyTheme(theme);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
function init() {
 | 
						|
  var ret = {};
 | 
						|
  Object.keys(styles).forEach(function (name) {
 | 
						|
    ret[name] = {
 | 
						|
      get: function () {
 | 
						|
        return build([name]);
 | 
						|
      }
 | 
						|
    };
 | 
						|
  });
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
var sequencer = function sequencer (map, str) {
 | 
						|
  var exploded = str.split(""), i = 0;
 | 
						|
  exploded = exploded.map(map);
 | 
						|
  return exploded.join("");
 | 
						|
};
 | 
						|
 | 
						|
// custom formatter methods
 | 
						|
colors.trap = require('./custom/trap');
 | 
						|
colors.zalgo = require('./custom/zalgo');
 | 
						|
 | 
						|
// maps
 | 
						|
colors.maps = {};
 | 
						|
colors.maps.america = require('./maps/america');
 | 
						|
colors.maps.zebra = require('./maps/zebra');
 | 
						|
colors.maps.rainbow = require('./maps/rainbow');
 | 
						|
colors.maps.random = require('./maps/random')
 | 
						|
 | 
						|
for (var map in colors.maps) {
 | 
						|
  (function(map){
 | 
						|
    colors[map] = function (str) {
 | 
						|
      return sequencer(colors.maps[map], str);
 | 
						|
    }
 | 
						|
  })(map)
 | 
						|
}
 | 
						|
 | 
						|
defineProps(colors, init()); |