125 lines
3.3 KiB
Markdown
125 lines
3.3 KiB
Markdown
# labeled-stream-splicer
|
|
|
|
[stream splicer](https://npmjs.org/package/stream-splicer) with labels
|
|
|
|
[](http://travis-ci.org/browserify/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
|