1 |
|
2 | var chalk = require('chalk'),
|
3 | format = require('util').format,
|
4 | _ = require('underscore'),
|
5 | Spinner = require('./spinner').Spinner;
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | var spinner, stop;
|
16 |
|
17 | var stop = function(){
|
18 | if(spinner){
|
19 | spinner.stop(' ');
|
20 | }
|
21 | };
|
22 |
|
23 | exports.stopSpinner = function() {
|
24 | spin('');
|
25 | stop();
|
26 | };
|
27 |
|
28 | var spin = exports.spin = function(message) {
|
29 | stop();
|
30 |
|
31 | spinner = new Spinner(message, space);
|
32 | spinner.setSpinnerString(3);
|
33 | spinner.start();
|
34 | };
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 | var logged, padded, space = ' ';
|
45 |
|
46 | exports.log = function(){
|
47 | log('log', arguments);
|
48 | };
|
49 |
|
50 | exports.info = function(msg){
|
51 | log('log', arguments, 'cyan');
|
52 | };
|
53 |
|
54 | exports.newline = function(){
|
55 | log('error', '', '', ' ');
|
56 | };
|
57 |
|
58 | exports.success = function(msg){
|
59 | log('log', arguments, 'green');
|
60 | };
|
61 |
|
62 | exports.warn = function(msg){
|
63 | log('log', arguments, 'yellow');
|
64 | };
|
65 |
|
66 | exports.error = function(msg){
|
67 | log('log', arguments, 'red');
|
68 | };
|
69 |
|
70 | exports.fatal = function(err){
|
71 | if (err instanceof Error) {
|
72 | err = err.stack
|
73 | .replace(/\n/g, '\n ')
|
74 | .replace(/\n$/, '\n\n');
|
75 | }
|
76 |
|
77 | log('error', arguments, 'red');
|
78 | process.exit(1);
|
79 | };
|
80 |
|
81 | exports.fatalWithMessages = function(err, messages){
|
82 | log('error', err, 'red');
|
83 | messages.forEach(function (msg) {
|
84 | log('error', msg, 'red', space + ' × ');
|
85 | });
|
86 | process.exit(1);
|
87 | };
|
88 |
|
89 | function log(type, args, color, prefixWith){
|
90 | if(typeof args === 'string'){
|
91 | args = [args];
|
92 | }
|
93 |
|
94 | pad();
|
95 | var msg = format.apply(format, args);
|
96 | if (color) msg = chalk[color](msg);
|
97 | var pre = prefixWith || prefix();
|
98 | console[type](pre, msg);
|
99 | }
|
100 |
|
101 | function prefix(){
|
102 | var pre = logged ? space : chalk.white(' bstalk ');
|
103 | logged = true;
|
104 | return pre + chalk.white('·');
|
105 | }
|
106 |
|
107 | function pad(){
|
108 | if (padded) return;
|
109 | console.log();
|
110 | process.on('exit', function(){ console.log(); });
|
111 | padded = true;
|
112 | }
|