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