Skip to content

Commit 7459460

Browse files
PinpickleTimothyGu
authored andcommitted
Propagate async errors to webpack (#78)
1 parent e1f27be commit 7459460

File tree

5 files changed

+44
-9
lines changed

5 files changed

+44
-9
lines changed

index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ module.exports = function(source) {
152152
missingFileMode = false;
153153
return;
154154
}
155-
throw e;
155+
loaderContext.callback(e);
156+
return;
156157
}
157158
var runtime = "var pug = require(" + loaderUtils.stringifyRequest(loaderContext, "!" + modulePaths.runtime) + ");\n\n";
158159
loaderContext.callback(null, runtime + tmplFunc.toString() + ";\nmodule.exports = template;");

test/extend+error.test.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
var should = require("should");
2+
3+
var fs = require("fs");
4+
var path = require("path");
5+
6+
var runLoader = require("./fakeModuleSystem");
7+
var pugLoader = require("../");
8+
9+
var fixtures = path.join(__dirname, "fixtures");
10+
11+
describe("extend+error", function() {
12+
it("should propagate async errors to Webpack", function(done) {
13+
var template = path.join(fixtures, "extend+error", "error.pug");
14+
runLoader(pugLoader, path.join(fixtures, "extend+error"), template, fs.readFileSync(template, "utf-8"), function(err, result) {
15+
should(err).be.not.null();
16+
done();
17+
});
18+
});
19+
});

test/fakeModuleSystem.js

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ var fs = require("fs");
22
var path = require("path");
33

44
module.exports = function runLoader(loader, directory, filename, arg, callback) {
5-
var async = true;
5+
var async = false;
66
var loaderContext = {
77
async: function() {
88
async = true;
@@ -17,16 +17,26 @@ module.exports = function runLoader(loader, directory, filename, arg, callback)
1717
async = true;
1818
return callback.apply(this, arguments);
1919
},
20-
resolve: function(context, request, callback) {
21-
callback(null, path.resolve(context, request));
20+
resolve: function(context, request, resolveCallback) {
21+
process.nextTick(function() {
22+
resolveCallback(null, path.resolve(context, request));
23+
});
2224
},
23-
loadModule: function(request, callback) {
25+
loadModule: function(request, loadCallback) {
2426
request = request.replace(/^-?!+/, "");
2527
request = request.split("!");
26-
var content = fs.readFileSync(request.pop(), "utf-8");
27-
if(request[0] && /stringify/.test(request[0]))
28-
content = JSON.stringify(content);
29-
return callback(null, content);
28+
fs.readFile(request.pop(), 'utf-8', function(err, content) {
29+
if (err) {
30+
loadCallback(err);
31+
return;
32+
}
33+
34+
if(request[0] && /stringify/.test(request[0])) {
35+
content = JSON.stringify(content);
36+
}
37+
38+
loadCallback(null, content);
39+
});
3040
}
3141
};
3242
var res = loader.call(loaderContext, arg);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
extend /parent.pug
2+
3+
p This will cause an error
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
block output
2+
p This might not see the light of day

0 commit comments

Comments
 (0)