| # labeled-stream-splicer |
| |
| [stream splicer](https://npmjs.org/package/stream-splicer) with labels |
| |
| [![build status](https://secure.travis-ci.org/substack/labeled-stream-splicer.png)](http://travis-ci.org/substack/labeled-stream-splicer) |
| |
| # example |
| |
| Here's an example that exposes a label for `deps` and `pack`: |
| |
| ``` js |
| var splicer = require('labeled-stream-splicer'); |
| var through = require('through2'); |
| var deps = require('module-deps'); |
| var pack = require('browser-pack'); |
| var lstream = require('lstream'); |
| |
| var pipeline = splicer.obj([ |
| 'deps', [ deps() ], |
| 'pack', [ pack({ raw: true }) ] |
| ]); |
| |
| pipeline.get('deps').unshift(lstream()); |
| |
| pipeline.get('deps').push(through.obj(function (row, enc, next) { |
| row.source = row.source.toUpperCase(); |
| this.push(row); |
| next(); |
| })); |
| |
| process.stdin.pipe(pipeline).pipe(process.stdout); |
| ``` |
| |
| Here the `deps` sub-pipeline is augmented with a post-transformation that |
| uppercases its source input. |
| |
| # methods |
| |
| ``` js |
| var splicer = require('labeled-stream-splicer') |
| ``` |
| |
| The API is the same as |
| [stream-splicer](https://npmjs.org/package/stream-splicer), |
| except that `pipeline.get()`, `pipeline.splice()`, and `pipeline.indexOf()` can |
| accept string labels in addition to numeric indexes. |
| |
| ## var pipeline = splicer(streams, opts) |
| |
| Create a `pipeline` duplex stream given an array of `streams`. Each `stream` |
| will be piped to the next. Writes to `pipeline` get written to the first stream |
| and data for reads from `pipeline` come from the last stream. |
| |
| To signify a label, a stream may have a `.label` property or a string may be |
| placed in the `streams` array. |
| |
| For example, for streams `[ a, 'foo', b, c, 'bar', d ]`, this pipeline is |
| constructed internally: |
| |
| ``` |
| a.pipe(b).pipe(c).pipe(d) |
| ``` |
| |
| with a label `'foo`' that points to `b` and a label `'bar'` that points to `d`. |
| If `a` or `c` has a `.label` property, that label would be used for addressing. |
| |
| Input will get written into `a`. Output will be read from `d`. |
| |
| If any of the elements in `streams` are arrays, they will be converted into |
| nested labeled pipelines. This is useful if you want to expose a hookable |
| pipeline with grouped insertion points. |
| |
| ## var pipeline = splicer.obj(streams, opts) |
| |
| Create a `pipeline` with `opts.objectMode` set to true for convenience. |
| |
| ## var removed = pipeline.splice(index, howMany, stream, ...) |
| |
| Splice the pipeline starting at `index`, removing `howMany` streams and |
| replacing them with each additional `stream` argument provided. |
| |
| The streams that were removed from the splice and returned. |
| |
| `index` can be an integer index or a label. |
| |
| ## pipeline.push(stream, ...) |
| |
| Push one or more streams to the end of the pipeline. |
| |
| The stream arguments may have a `label` property that will be used for string |
| lookups. |
| |
| ## var stream = pipeline.pop() |
| |
| Pop a stream from the end of the pipeline. |
| |
| ## pipeline.unshift(stream, ...) |
| |
| Unshift one or more streams to the begining of the pipeline. |
| |
| The stream arguments may have a `label` property that will be used for string |
| lookups. |
| |
| ## var stream = pipeline.shift() |
| |
| Shift a stream from the begining of the pipeline. |
| |
| ## var stream = pipeline.get(index) |
| |
| Return the stream at index `index`. |
| |
| `index` can be an integer or a string label. |
| |
| # install |
| |
| With [npm](https://npmjs.org) do: |
| |
| ``` |
| npm install labeled-stream-splicer |
| ``` |
| |
| # license |
| |
| MIT |