You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					105 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					105 lines
				
				2.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const { FORCE_COLOR, NODE_DISABLE_COLORS, TERM } = process.env;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const $ = {
							 | 
						||
| 
								 | 
							
									enabled: !NODE_DISABLE_COLORS && TERM !== 'dumb' && FORCE_COLOR !== '0',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// modifiers
							 | 
						||
| 
								 | 
							
									reset: init(0, 0),
							 | 
						||
| 
								 | 
							
									bold: init(1, 22),
							 | 
						||
| 
								 | 
							
									dim: init(2, 22),
							 | 
						||
| 
								 | 
							
									italic: init(3, 23),
							 | 
						||
| 
								 | 
							
									underline: init(4, 24),
							 | 
						||
| 
								 | 
							
									inverse: init(7, 27),
							 | 
						||
| 
								 | 
							
									hidden: init(8, 28),
							 | 
						||
| 
								 | 
							
									strikethrough: init(9, 29),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// colors
							 | 
						||
| 
								 | 
							
									black: init(30, 39),
							 | 
						||
| 
								 | 
							
									red: init(31, 39),
							 | 
						||
| 
								 | 
							
									green: init(32, 39),
							 | 
						||
| 
								 | 
							
									yellow: init(33, 39),
							 | 
						||
| 
								 | 
							
									blue: init(34, 39),
							 | 
						||
| 
								 | 
							
									magenta: init(35, 39),
							 | 
						||
| 
								 | 
							
									cyan: init(36, 39),
							 | 
						||
| 
								 | 
							
									white: init(37, 39),
							 | 
						||
| 
								 | 
							
									gray: init(90, 39),
							 | 
						||
| 
								 | 
							
									grey: init(90, 39),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// background colors
							 | 
						||
| 
								 | 
							
									bgBlack: init(40, 49),
							 | 
						||
| 
								 | 
							
									bgRed: init(41, 49),
							 | 
						||
| 
								 | 
							
									bgGreen: init(42, 49),
							 | 
						||
| 
								 | 
							
									bgYellow: init(43, 49),
							 | 
						||
| 
								 | 
							
									bgBlue: init(44, 49),
							 | 
						||
| 
								 | 
							
									bgMagenta: init(45, 49),
							 | 
						||
| 
								 | 
							
									bgCyan: init(46, 49),
							 | 
						||
| 
								 | 
							
									bgWhite: init(47, 49)
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function run(arr, str) {
							 | 
						||
| 
								 | 
							
									let i=0, tmp, beg='', end='';
							 | 
						||
| 
								 | 
							
									for (; i < arr.length; i++) {
							 | 
						||
| 
								 | 
							
										tmp = arr[i];
							 | 
						||
| 
								 | 
							
										beg += tmp.open;
							 | 
						||
| 
								 | 
							
										end += tmp.close;
							 | 
						||
| 
								 | 
							
										if (str.includes(tmp.close)) {
							 | 
						||
| 
								 | 
							
											str = str.replace(tmp.rgx, tmp.close + tmp.open);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return beg + str + end;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function chain(has, keys) {
							 | 
						||
| 
								 | 
							
									let ctx = { has, keys };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ctx.reset = $.reset.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.bold = $.bold.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.dim = $.dim.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.italic = $.italic.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.underline = $.underline.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.inverse = $.inverse.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.hidden = $.hidden.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.strikethrough = $.strikethrough.bind(ctx);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ctx.black = $.black.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.red = $.red.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.green = $.green.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.yellow = $.yellow.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.blue = $.blue.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.magenta = $.magenta.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.cyan = $.cyan.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.white = $.white.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.gray = $.gray.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.grey = $.grey.bind(ctx);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ctx.bgBlack = $.bgBlack.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.bgRed = $.bgRed.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.bgGreen = $.bgGreen.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.bgYellow = $.bgYellow.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.bgBlue = $.bgBlue.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.bgMagenta = $.bgMagenta.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.bgCyan = $.bgCyan.bind(ctx);
							 | 
						||
| 
								 | 
							
									ctx.bgWhite = $.bgWhite.bind(ctx);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return ctx;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function init(open, close) {
							 | 
						||
| 
								 | 
							
									let blk = {
							 | 
						||
| 
								 | 
							
										open: `\x1b[${open}m`,
							 | 
						||
| 
								 | 
							
										close: `\x1b[${close}m`,
							 | 
						||
| 
								 | 
							
										rgx: new RegExp(`\\x1b\\[${close}m`, 'g')
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
									return function (txt) {
							 | 
						||
| 
								 | 
							
										if (this !== void 0 && this.has !== void 0) {
							 | 
						||
| 
								 | 
							
											this.has.includes(open) || (this.has.push(open),this.keys.push(blk));
							 | 
						||
| 
								 | 
							
											return txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = $;
							 |