66 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # pump
 | ||
|  | 
 | ||
|  | pump is a small node module that pipes streams together and destroys all of them if one of them closes. | ||
|  | 
 | ||
|  | ``` | ||
|  | npm install pump | ||
|  | ``` | ||
|  | 
 | ||
|  | [](http://travis-ci.org/mafintosh/pump) | ||
|  | 
 | ||
|  | ## What problem does it solve?
 | ||
|  | 
 | ||
|  | When using standard `source.pipe(dest)` source will _not_ be destroyed if dest emits close or an error. | ||
|  | You are also not able to provide a callback to tell when then pipe has finished. | ||
|  | 
 | ||
|  | pump does these two things for you | ||
|  | 
 | ||
|  | ## Usage
 | ||
|  | 
 | ||
|  | Simply pass the streams you want to pipe together to pump and add an optional callback | ||
|  | 
 | ||
|  | ``` js | ||
|  | var pump = require('pump') | ||
|  | var fs = require('fs') | ||
|  | 
 | ||
|  | var source = fs.createReadStream('/dev/random') | ||
|  | var dest = fs.createWriteStream('/dev/null') | ||
|  | 
 | ||
|  | pump(source, dest, function(err) { | ||
|  |   console.log('pipe finished', err) | ||
|  | }) | ||
|  | 
 | ||
|  | setTimeout(function() { | ||
|  |   dest.destroy() // when dest is closed pump will destroy source | ||
|  | }, 1000) | ||
|  | ``` | ||
|  | 
 | ||
|  | You can use pump to pipe more than two streams together as well | ||
|  | 
 | ||
|  | ``` js | ||
|  | var transform = someTransformStream() | ||
|  | 
 | ||
|  | pump(source, transform, anotherTransform, dest, function(err) { | ||
|  |   console.log('pipe finished', err) | ||
|  | }) | ||
|  | ``` | ||
|  | 
 | ||
|  | If `source`, `transform`, `anotherTransform` or `dest` closes all of them will be destroyed. | ||
|  | 
 | ||
|  | Similarly to `stream.pipe()`, `pump()` returns the last stream passed in, so you can do: | ||
|  | 
 | ||
|  | ``` | ||
|  | return pump(s1, s2) // returns s2 | ||
|  | ``` | ||
|  | 
 | ||
|  | If you want to return a stream that combines *both* s1 and s2 to a single stream use | ||
|  | [pumpify](https://github.com/mafintosh/pumpify) instead. | ||
|  | 
 | ||
|  | ## License
 | ||
|  | 
 | ||
|  | MIT | ||
|  | 
 | ||
|  | ## Related
 | ||
|  | 
 | ||
|  | `pump` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one. |