1 | 'use strict';
|
2 | var escapeStringRegexp = require('escape-string-regexp');
|
3 | var ansiStyles = require('ansi-styles');
|
4 | var stripAnsi = require('strip-ansi');
|
5 | var hasAnsi = require('has-ansi');
|
6 | var supportsColor = require('supports-color');
|
7 | var defineProps = Object.defineProperties;
|
8 | var isSimpleWindowsTerm = process.platform === 'win32' && !/^xterm/i.test(process.env.TERM);
|
9 |
|
10 | function Chalk(options) {
|
11 |
|
12 | this.enabled = !options || options.enabled === undefined ? supportsColor : options.enabled;
|
13 | }
|
14 |
|
15 |
|
16 | if (isSimpleWindowsTerm) {
|
17 | ansiStyles.blue.open = '\u001b[94m';
|
18 | }
|
19 |
|
20 | var styles = (function () {
|
21 | var ret = {};
|
22 |
|
23 | Object.keys(ansiStyles).forEach(function (key) {
|
24 | ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
|
25 |
|
26 | ret[key] = {
|
27 | get: function () {
|
28 | return build.call(this, this._styles.concat(key));
|
29 | }
|
30 | };
|
31 | });
|
32 |
|
33 | return ret;
|
34 | })();
|
35 |
|
36 | var proto = defineProps(function chalk() {}, styles);
|
37 |
|
38 | function build(_styles) {
|
39 | var builder = function () {
|
40 | return applyStyle.apply(builder, arguments);
|
41 | };
|
42 |
|
43 | builder._styles = _styles;
|
44 | builder.enabled = this.enabled;
|
45 |
|
46 |
|
47 |
|
48 | builder.__proto__ = proto;
|
49 |
|
50 | return builder;
|
51 | }
|
52 |
|
53 | function applyStyle() {
|
54 |
|
55 | var args = arguments;
|
56 | var argsLen = args.length;
|
57 | var str = argsLen !== 0 && String(arguments[0]);
|
58 |
|
59 | if (argsLen > 1) {
|
60 |
|
61 | for (var a = 1; a < argsLen; a++) {
|
62 | str += ' ' + args[a];
|
63 | }
|
64 | }
|
65 |
|
66 | if (!this.enabled || !str) {
|
67 | return str;
|
68 | }
|
69 |
|
70 | var nestedStyles = this._styles;
|
71 | var i = nestedStyles.length;
|
72 |
|
73 |
|
74 |
|
75 |
|
76 | var originalDim = ansiStyles.dim.open;
|
77 | if (isSimpleWindowsTerm && (nestedStyles.indexOf('gray') !== -1 || nestedStyles.indexOf('grey') !== -1)) {
|
78 | ansiStyles.dim.open = '';
|
79 | }
|
80 |
|
81 | while (i--) {
|
82 | var code = ansiStyles[nestedStyles[i]];
|
83 |
|
84 |
|
85 |
|
86 |
|
87 | str = code.open + str.replace(code.closeRe, code.open) + code.close;
|
88 | }
|
89 |
|
90 |
|
91 | ansiStyles.dim.open = originalDim;
|
92 |
|
93 | return str;
|
94 | }
|
95 |
|
96 | function init() {
|
97 | var ret = {};
|
98 |
|
99 | Object.keys(styles).forEach(function (name) {
|
100 | ret[name] = {
|
101 | get: function () {
|
102 | return build.call(this, [name]);
|
103 | }
|
104 | };
|
105 | });
|
106 |
|
107 | return ret;
|
108 | }
|
109 |
|
110 | defineProps(Chalk.prototype, init());
|
111 |
|
112 | module.exports = new Chalk();
|
113 | module.exports.styles = ansiStyles;
|
114 | module.exports.hasColor = hasAnsi;
|
115 | module.exports.stripColor = stripAnsi;
|
116 | module.exports.supportsColor = supportsColor;
|