UNPKG

2.17 kBJavaScriptView Raw
1
2var chalk = require('chalk'),
3 format = require('util').format,
4 _ = require('underscore'),
5 Spinner = require('./spinner').Spinner;
6
7
8/*
9 |--------------------------------------------------------------------------
10 | Spinning
11 |--------------------------------------------------------------------------
12 |
13 */
14
15var spinner, stop;
16
17var stop = function(){
18 if(spinner){
19 spinner.stop(' ');
20 }
21 };
22
23exports.stopSpinner = function() {
24 spin('');
25 stop();
26};
27
28var 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 | Logging
40 |--------------------------------------------------------------------------
41 |
42 */
43
44var logged, padded, space = ' ';
45
46exports.log = function(){
47 log('log', arguments);
48};
49
50exports.info = function(msg){
51 log('log', arguments, 'cyan');
52};
53
54exports.newline = function(){
55 log('error', '', '', ' ');
56};
57
58exports.success = function(msg){
59 log('log', arguments, 'green');
60};
61
62exports.warn = function(msg){
63 log('log', arguments, 'yellow');
64};
65
66exports.error = function(msg){
67 log('log', arguments, 'red');
68};
69
70exports.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
81exports.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
89function 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
101function prefix(){
102 var pre = logged ? space : chalk.white(' bstalk ');
103 logged = true;
104 return pre + chalk.white('·');
105}
106
107function pad(){
108 if (padded) return;
109 console.log();
110 process.on('exit', function(){ console.log(); });
111 padded = true;
112}