Skip to content

Commit 28d79ee

Browse files
fix(events): File events were not emitted if files have been cached in the persistent cache.
1 parent 4cce797 commit 28d79ee

File tree

3 files changed

+60
-5
lines changed

3 files changed

+60
-5
lines changed

index.js

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,6 @@ Deps.prototype.readFile = function (file, id, pkg) {
206206
var rs = fs.createReadStream(file, {
207207
encoding: 'utf8'
208208
});
209-
rs.on('error', function (err) { self.emit('error', err) });
210-
this.emit('file', file, id);
211209
return rs;
212210
};
213211

@@ -235,7 +233,9 @@ Deps.prototype.getTransforms = function (file, pkg, opts) {
235233

236234
for (var i = 0; i < transforms.length; i++) (function (i) {
237235
makeTransform(transforms[i], function (err, trs) {
238-
if (err) return self.emit('error', err)
236+
if (err) {
237+
return dup.emit('error', err);
238+
}
239239
streams[i] = trs;
240240
if (-- pending === 0) done();
241241
});
@@ -247,7 +247,7 @@ Deps.prototype.getTransforms = function (file, pkg, opts) {
247247
middle.on('error', function (err) {
248248
err.message += ' while parsing file: ' + file;
249249
if (!err.filename) err.filename = file;
250-
self.emit('error', err);
250+
dup.emit('error', err);
251251
});
252252
input.pipe(middle).pipe(output);
253253
}
@@ -346,6 +346,9 @@ Deps.prototype.walk = function (id, parent, cb) {
346346
file = rec.file;
347347

348348
var ts = self.getTransforms(file, pkg);
349+
ts.on('error', function (err) {
350+
self.emit('error', err);
351+
});
349352
ts.pipe(concat(function (body) {
350353
rec.source = body.toString('utf8');
351354
fromSource(file, rec.source, pkg);
@@ -368,6 +371,9 @@ Deps.prototype.walk = function (id, parent, cb) {
368371

369372
if (rec.source) {
370373
var ts = self.getTransforms(file, pkg);
374+
ts.on('error', function (err) {
375+
self.emit('error', err);
376+
});
371377
ts.pipe(concat(function (body) {
372378
rec.source = body.toString('utf8');
373379
fromSource(file, rec.source, pkg);
@@ -379,6 +385,7 @@ Deps.prototype.walk = function (id, parent, cb) {
379385
if (c) return fromDeps(file, c.source, c.package, fakePath, Object.keys(c.deps));
380386

381387
self.persistentCache(file, id, pkg, persistentCacheFallback, function (err, c) {
388+
self.emit('file', file, id);
382389
if (err) {
383390
self.emit('error', err);
384391
return;
@@ -387,12 +394,13 @@ Deps.prototype.walk = function (id, parent, cb) {
387394
});
388395

389396
function persistentCacheFallback (dataAsString, cb) {
390-
var stream = dataAsString ? toStream(dataAsString) : self.readFile(file, id, pkg);
397+
var stream = dataAsString ? toStream(dataAsString) : self.readFile(file, id, pkg).on('error', cb);
391398
stream
392399
.pipe(self.getTransforms(fakePath || file, pkg, {
393400
builtin: builtin,
394401
inNodeModules: parent.inNodeModules
395402
}))
403+
.on('error', cb)
396404
.pipe(concat(function (body) {
397405
var src = body.toString('utf8');
398406
var deps = getDeps(file, src);

test/cache_persistent.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,45 @@ test('allow passing of the raw source as string', function (t) {
7878
});
7979
});
8080

81+
test('send file event with persistent cache', function (t) {
82+
t.plan(2);
83+
var p = parser({
84+
persistentCache: function (file, id, pkg, fallback, cb) {
85+
cb(null, {
86+
source: 'file at ' + file + '@' + id,
87+
package: pkg,
88+
deps: {}
89+
});
90+
}
91+
});
92+
p.end({ id: 'foo', file: files.foo, entry: false });
93+
p.on('file', function (file, id) {
94+
t.same(file, path.resolve(files.foo));
95+
t.same(id, path.resolve(files.foo));
96+
});
97+
});
98+
99+
test('errors of transforms occur in the correct order with a persistent cache', function (t) {
100+
t.plan(3);
101+
var p = parser({
102+
transform: [
103+
path.join(__dirname, 'cache_persistent', 'error_transform')
104+
],
105+
persistentCache: function (file, id, pkg, fallback, cb) {
106+
fallback(fs.readFileSync(files.foo, 'utf8'), cb);
107+
}
108+
});
109+
p.end({ id: 'foo', file: files.foo, entry: false });
110+
var order = 0;
111+
p.on('file', function (file, id) {
112+
t.same(order, 0);
113+
order += 1;
114+
});
115+
p.on('error', function (err) {
116+
t.same(order, 1);
117+
t.same(err.message, 'rawr while parsing file: ' + path.resolve(files.foo));
118+
});
119+
});
120+
121+
81122
function cmp (a, b) { return a.id < b.id ? -1 : 1 }
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
var through = require('through2');
2+
module.exports = function (file) {
3+
return through(function (chunk, enc, callback) {
4+
callback(new Error('rawr'));
5+
});
6+
};

0 commit comments

Comments
 (0)