stream: avoid caching prepend check
This removes the cached check for EE.prototype.prependListener because we can't have nice things. More specifically some libraries will bundle their own event emitter implementation. PR-URL: https://github.com/nodejs/node/pull/8018 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
parent
4c9b0bdf2f
commit
774146dc58
@ -13,13 +13,12 @@ var StringDecoder;
|
||||
|
||||
util.inherits(Readable, Stream);
|
||||
|
||||
var prependListener;
|
||||
if (typeof EE.prototype.prependListener === 'function') {
|
||||
prependListener = function prependListener(emitter, event, fn) {
|
||||
function prependListener(emitter, event, fn) {
|
||||
// Sadly this is not cacheable as some libraries bundle their own
|
||||
// event emitter implementation with them.
|
||||
if (typeof emitter.prependListener === 'function') {
|
||||
return emitter.prependListener(event, fn);
|
||||
};
|
||||
} else {
|
||||
prependListener = function prependListener(emitter, event, fn) {
|
||||
} else {
|
||||
// This is a hack to make sure that our error handler is attached before any
|
||||
// userland ones. NEVER DO THIS. This is here only because this code needs
|
||||
// to continue to work with older versions of Node.js that do not include
|
||||
@ -30,7 +29,7 @@ if (typeof EE.prototype.prependListener === 'function') {
|
||||
emitter._events[event].unshift(fn);
|
||||
else
|
||||
emitter._events[event] = [fn, emitter._events[event]];
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function ReadableState(options, stream) {
|
||||
|
29
test/parallel/test-stream-events-prepend.js
Normal file
29
test/parallel/test-stream-events-prepend.js
Normal file
@ -0,0 +1,29 @@
|
||||
'use strict';
|
||||
const common = require('../common');
|
||||
const stream = require('stream');
|
||||
const util = require('util');
|
||||
|
||||
function Writable() {
|
||||
this.writable = true;
|
||||
stream.Writable.call(this);
|
||||
this.prependListener = undefined;
|
||||
}
|
||||
util.inherits(Writable, stream.Writable);
|
||||
Writable.prototype._write = function(chunk, end, cb) {
|
||||
cb();
|
||||
};
|
||||
|
||||
function Readable() {
|
||||
this.readable = true;
|
||||
stream.Readable.call(this);
|
||||
}
|
||||
util.inherits(Readable, stream.Readable);
|
||||
Readable.prototype._read = function() {
|
||||
this.push(null);
|
||||
};
|
||||
|
||||
const w = new Writable();
|
||||
w.on('pipe', common.mustCall(function() {}));
|
||||
|
||||
const r = new Readable();
|
||||
r.pipe(w);
|
Loading…
x
Reference in New Issue
Block a user