diff --git a/doc/api/streams.markdown b/doc/api/streams.markdown index 98cee1efff4..0fc4aadf3b8 100644 --- a/doc/api/streams.markdown +++ b/doc/api/streams.markdown @@ -125,6 +125,12 @@ Emitted on error with the exception `exception`. Emitted when the underlying file descriptor has been closed. +### Event: 'pipe' + +`function (src) { }` + +Emitted when the stream is passed to a readable stream's pipe method. + ### stream.writable A boolean that is `true` by default, but turns `false` after an `'error'` diff --git a/lib/stream.js b/lib/stream.js index 98f0c37fcbc..c5fcd2a4c2f 100644 --- a/lib/stream.js +++ b/lib/stream.js @@ -67,4 +67,6 @@ Stream.prototype.pipe = function(dest, options) { dest.on('resume', function() { if (source.readable) source.resume(); }); + + dest.emit('pipe', source); }; diff --git a/test/simple/test-stream-pipe-event.js b/test/simple/test-stream-pipe-event.js new file mode 100644 index 00000000000..a480d60f90e --- /dev/null +++ b/test/simple/test-stream-pipe-event.js @@ -0,0 +1,27 @@ +var stream = require('stream'); +var assert = require('assert'); +var util = require('util'); + +function Writable () { + this.writable = true; + stream.Stream.call(this); +} +util.inherits(Writable, stream.Stream); + +function Readable () { + this.readable = true; + stream.Stream.call(this); +} +util.inherits(Readable, stream.Stream); + +var passed = false; + +var w = new Writable(); +w.on('pipe', function (src) { + passed = true; +}); + +var r = new Readable(); +r.pipe(w); + +assert.ok(passed)