| 1 | 'use strict';
|
|---|
| 2 |
|
|---|
| 3 | const { FORCE_COLOR, NODE_DISABLE_COLORS, TERM } = process.env;
|
|---|
| 4 |
|
|---|
| 5 | const $ = {
|
|---|
| 6 | enabled: !NODE_DISABLE_COLORS && TERM !== 'dumb' && FORCE_COLOR !== '0',
|
|---|
| 7 |
|
|---|
| 8 | // modifiers
|
|---|
| 9 | reset: init(0, 0),
|
|---|
| 10 | bold: init(1, 22),
|
|---|
| 11 | dim: init(2, 22),
|
|---|
| 12 | italic: init(3, 23),
|
|---|
| 13 | underline: init(4, 24),
|
|---|
| 14 | inverse: init(7, 27),
|
|---|
| 15 | hidden: init(8, 28),
|
|---|
| 16 | strikethrough: init(9, 29),
|
|---|
| 17 |
|
|---|
| 18 | // colors
|
|---|
| 19 | black: init(30, 39),
|
|---|
| 20 | red: init(31, 39),
|
|---|
| 21 | green: init(32, 39),
|
|---|
| 22 | yellow: init(33, 39),
|
|---|
| 23 | blue: init(34, 39),
|
|---|
| 24 | magenta: init(35, 39),
|
|---|
| 25 | cyan: init(36, 39),
|
|---|
| 26 | white: init(37, 39),
|
|---|
| 27 | gray: init(90, 39),
|
|---|
| 28 | grey: init(90, 39),
|
|---|
| 29 |
|
|---|
| 30 | // background colors
|
|---|
| 31 | bgBlack: init(40, 49),
|
|---|
| 32 | bgRed: init(41, 49),
|
|---|
| 33 | bgGreen: init(42, 49),
|
|---|
| 34 | bgYellow: init(43, 49),
|
|---|
| 35 | bgBlue: init(44, 49),
|
|---|
| 36 | bgMagenta: init(45, 49),
|
|---|
| 37 | bgCyan: init(46, 49),
|
|---|
| 38 | bgWhite: init(47, 49)
|
|---|
| 39 | };
|
|---|
| 40 |
|
|---|
| 41 | function run(arr, str) {
|
|---|
| 42 | let i=0, tmp, beg='', end='';
|
|---|
| 43 | for (; i < arr.length; i++) {
|
|---|
| 44 | tmp = arr[i];
|
|---|
| 45 | beg += tmp.open;
|
|---|
| 46 | end += tmp.close;
|
|---|
| 47 | if (str.includes(tmp.close)) {
|
|---|
| 48 | str = str.replace(tmp.rgx, tmp.close + tmp.open);
|
|---|
| 49 | }
|
|---|
| 50 | }
|
|---|
| 51 | return beg + str + end;
|
|---|
| 52 | }
|
|---|
| 53 |
|
|---|
| 54 | function chain(has, keys) {
|
|---|
| 55 | let ctx = { has, keys };
|
|---|
| 56 |
|
|---|
| 57 | ctx.reset = $.reset.bind(ctx);
|
|---|
| 58 | ctx.bold = $.bold.bind(ctx);
|
|---|
| 59 | ctx.dim = $.dim.bind(ctx);
|
|---|
| 60 | ctx.italic = $.italic.bind(ctx);
|
|---|
| 61 | ctx.underline = $.underline.bind(ctx);
|
|---|
| 62 | ctx.inverse = $.inverse.bind(ctx);
|
|---|
| 63 | ctx.hidden = $.hidden.bind(ctx);
|
|---|
| 64 | ctx.strikethrough = $.strikethrough.bind(ctx);
|
|---|
| 65 |
|
|---|
| 66 | ctx.black = $.black.bind(ctx);
|
|---|
| 67 | ctx.red = $.red.bind(ctx);
|
|---|
| 68 | ctx.green = $.green.bind(ctx);
|
|---|
| 69 | ctx.yellow = $.yellow.bind(ctx);
|
|---|
| 70 | ctx.blue = $.blue.bind(ctx);
|
|---|
| 71 | ctx.magenta = $.magenta.bind(ctx);
|
|---|
| 72 | ctx.cyan = $.cyan.bind(ctx);
|
|---|
| 73 | ctx.white = $.white.bind(ctx);
|
|---|
| 74 | ctx.gray = $.gray.bind(ctx);
|
|---|
| 75 | ctx.grey = $.grey.bind(ctx);
|
|---|
| 76 |
|
|---|
| 77 | ctx.bgBlack = $.bgBlack.bind(ctx);
|
|---|
| 78 | ctx.bgRed = $.bgRed.bind(ctx);
|
|---|
| 79 | ctx.bgGreen = $.bgGreen.bind(ctx);
|
|---|
| 80 | ctx.bgYellow = $.bgYellow.bind(ctx);
|
|---|
| 81 | ctx.bgBlue = $.bgBlue.bind(ctx);
|
|---|
| 82 | ctx.bgMagenta = $.bgMagenta.bind(ctx);
|
|---|
| 83 | ctx.bgCyan = $.bgCyan.bind(ctx);
|
|---|
| 84 | ctx.bgWhite = $.bgWhite.bind(ctx);
|
|---|
| 85 |
|
|---|
| 86 | return ctx;
|
|---|
| 87 | }
|
|---|
| 88 |
|
|---|
| 89 | function init(open, close) {
|
|---|
| 90 | let blk = {
|
|---|
| 91 | open: `\x1b[${open}m`,
|
|---|
| 92 | close: `\x1b[${close}m`,
|
|---|
| 93 | rgx: new RegExp(`\\x1b\\[${close}m`, 'g')
|
|---|
| 94 | };
|
|---|
| 95 | return function (txt) {
|
|---|
| 96 | if (this !== void 0 && this.has !== void 0) {
|
|---|
| 97 | this.has.includes(open) || (this.has.push(open),this.keys.push(blk));
|
|---|
| 98 | return txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';
|
|---|
| 99 | }
|
|---|
| 100 | return txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';
|
|---|
| 101 | };
|
|---|
| 102 | }
|
|---|
| 103 |
|
|---|
| 104 | module.exports = $;
|
|---|