UNPKG

1.93 kBJavaScriptView Raw
1//
2// Error handling in gulp
3//
4// http://www.artandlogic.com/blog/2014/05/error-handling-in-gulp/
5// https://github.com/ethanmuller/gulp-init/blob/master/error-handler.coffee
6
7var gutil = require('gulp-util');
8
9// Command line option:
10// --fatal=[warning|error|off]
11var fatalLevel = require('yargs').argv.fatal;
12
13var ERROR_LEVELS = [
14 'error',
15 'warning'
16];
17
18var ERROR_COLORS = {
19 warning: gutil.colors.yellow,
20 error: gutil.colors.red
21};
22
23var ERROR_EMOTES = {
24 warning: [
25 '¯\\_(ツ)_/¯',
26 '(╯︵╰,)',
27 '(ಠ_ಠ)'
28 ],
29 error: [
30 '(╯°□°)╯︵ ┻━┻',
31 '┻━┻ ︵ \\(°□°)/ ︵ ┻━┻',
32 'ლ (ಠ益ಠ)ლ'
33 ]
34};
35
36// If the fatalLevel is 'off', then this will always return false.
37// Defaults the fatalLevel to 'error'.
38var isFatal = function(level) {
39 var errorLevels = [
40 'error',
41 'warning'
42 ];
43 return ERROR_LEVELS.indexOf(level) <= ERROR_LEVELS.indexOf(fatalLevel || 'error');
44};
45
46// Handle an error based on its severity level.
47// Log all levels, and exit the process for fatal levels.
48var handleError = function(level, error) {
49 var emotes = ERROR_EMOTES[level];
50 var color = ERROR_COLORS[level];
51 var msg = color(level.toUpperCase()) + ' triggered by ' + gutil.colors.magenta(error.plugin);
52 var randomEmote = emotes[Math.floor(Math.random()*emotes.length)];
53
54 gutil.beep();
55 gutil.log(msg);
56 gutil.log(color(randomEmote));
57 gutil.log(color(error.message));
58 if (isFatal(level)) {
59 process.exit(1);
60 }
61};
62
63module.exports = {
64 // Convenience handler for error-level errors.
65 error: function(error) {
66 handleError.call(this, 'error', error);
67 this.emit('end');
68 },
69 // Convenience handler for warning-level errors.
70 warning: function(error) {
71 handleError.call(this, 'warning', error);
72 this.emit('end');
73 }
74};