You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					79 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					79 lines
				
				1.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								# merge-stream
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Merge (interleave) a bunch of streams.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[](http://travis-ci.org/grncdr/merge-stream)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Synopsis
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var stream1 = new Stream();
							 | 
						||
| 
								 | 
							
								var stream2 = new Stream();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var merged = mergeStream(stream1, stream2);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var stream3 = new Stream();
							 | 
						||
| 
								 | 
							
								merged.add(stream3);
							 | 
						||
| 
								 | 
							
								merged.isEmpty();
							 | 
						||
| 
								 | 
							
								//=> false
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Description
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This is adapted from [event-stream](https://github.com/dominictarr/event-stream) separated into a new module, using Streams3.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### `mergeStream`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Type: `function`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Merges an arbitrary number of streams. Returns a merged stream.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `merged.add`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A method to dynamically add more sources to the stream. The argument supplied to `add` can be either a source or an array of sources.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### `merged.isEmpty`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A method that tells you if the merged stream is empty.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When a stream is "empty" (aka. no sources were added), it could not be returned to a gulp task.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								So, we could do something like this:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								stream = require('merge-stream')();
							 | 
						||
| 
								 | 
							
								// Something like a loop to add some streams to the merge stream
							 | 
						||
| 
								 | 
							
								// stream.add(streamA);
							 | 
						||
| 
								 | 
							
								// stream.add(streamB);
							 | 
						||
| 
								 | 
							
								return stream.isEmpty() ? null : stream;
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Gulp example
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								An example use case for **merge-stream** is to combine parts of a task in a project's **gulpfile.js** like this:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								const gulp =          require('gulp');
							 | 
						||
| 
								 | 
							
								const htmlValidator = require('gulp-w3c-html-validator');
							 | 
						||
| 
								 | 
							
								const jsHint =        require('gulp-jshint');
							 | 
						||
| 
								 | 
							
								const mergeStream =   require('merge-stream');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function lint() {
							 | 
						||
| 
								 | 
							
								  return mergeStream(
							 | 
						||
| 
								 | 
							
								    gulp.src('src/*.html')
							 | 
						||
| 
								 | 
							
								      .pipe(htmlValidator())
							 | 
						||
| 
								 | 
							
								      .pipe(htmlValidator.reporter()),
							 | 
						||
| 
								 | 
							
								    gulp.src('src/*.js')
							 | 
						||
| 
								 | 
							
								      .pipe(jsHint())
							 | 
						||
| 
								 | 
							
								      .pipe(jsHint.reporter())
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								gulp.task('lint', lint);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## License
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								MIT
							 |