report.js
3.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
var template = require("lodash.template");
var gutil = require("gulp-util");
var api = require("./extra_api");
var extend = require("node.extend");
var path = require("path");
"use strict";
var defaults = {
error: {
icon: path.join(__dirname, '..', 'assets', 'gulp-error.png'),
sound: 'Frog'
},
regular: {
icon: path.join(__dirname, '..', 'assets', 'gulp.png')
}
};
module.exports = function (reporter, message, options, templateOptions, callback) {
var self = this;
callback = callback || function () {};
if (!reporter) return callback(new gutil.PluginError("gulp-notify", "No reporter specified."));
// Try/catch the only way to go to ensure catching all errors? Domains?
try {
var options = constructOptions(options, message, templateOptions);
if (!options) {
return callback();
}
api.logError(options, (message instanceof Error));
reporter(options, function (err) {
if (err) return callback(new gutil.PluginError("gulp-notify", err));
return callback();
});
} catch (err) {
return callback(new gutil.PluginError("gulp-notify", err));
}
};
function generate (outputData, object, title, message, subtitle, open, templateOptions) {
if (object instanceof Error) {
var titleTemplate = template(title);
var messageTemplate = template(message);
var openTemplate = template(open);
var subtitleTemplate = template(subtitle);
return extend(defaults.error, outputData, {
title: titleTemplate({
error: object,
options: templateOptions
}),
message: messageTemplate({
error: object,
options: templateOptions
}),
open: openTemplate({
error: object,
options: templateOptions
}),
subtitle: subtitleTemplate({
error: object,
options: templateOptions
})
});
}
return extend(defaults.regular, outputData, {
title: gutil.template(title, {
file: object,
options: templateOptions
}),
message: gutil.template(message, {
file: object,
options: templateOptions
})
});
}
function constructOptions (options, object, templateOptions) {
var message = object.path || object.message || object,
title = !(object instanceof Error) ? "Gulp notification" : "Error running Gulp",
open = "",
subtitle = "",
outputData = {};
if (typeof options === "function") {
message = options(object);
if (typeof message === "object") {
options = message;
}
if (!message) {
return false;
}
}
if (typeof options === "string") {
message = options;
}
if (typeof options === "object") {
outputData = extend(true, {}, options);
if (typeof outputData.title === "function") {
title = outputData.title(object);
} else {
title = outputData.title || title;
}
if (typeof outputData.subtitle === "function") {
subtitle = outputData.subtitle(object);
} else {
subtitle = outputData.subtitle || subtitle;
}
if (typeof outputData.open === "function") {
open = outputData.open(object);
} else {
open = outputData.open || open;
}
if (typeof outputData.message === "function") {
message = outputData.message(object);
if (!message) {
return false;
}
} else {
message = outputData.message || message;
}
}
return generate(outputData, object, title, message, subtitle, open, templateOptions);
}