%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
# minipass-pipeline Create a pipeline of streams using Minipass. Calls `.pipe()` on all the streams in the list. Returns a stream where writes got to the first pipe in the chain, and reads are from the last. Errors are proxied along the chain and emitted on the Pipeline stream. ## USAGE ```js const Pipeline = require('minipass-pipeline') // the list of streams to pipeline together, // a bit like `input | transform | output` in bash const p = new Pipeline(input, transform, output) p.write('foo') // writes to input p.on('data', chunk => doSomething()) // reads from output stream // less contrived example (but still pretty contrived)... const decode = new bunzipDecoder() const unpack = tar.extract({ cwd: 'target-dir' }) const tbz = new Pipeline(decode, unpack) fs.createReadStream('archive.tbz').pipe(tbz) // specify any minipass options if you like, as the first argument // it'll only try to pipeline event emitters with a .pipe() method const p = new Pipeline({ objectMode: true }, input, transform, output) // If you don't know the things to pipe in right away, that's fine. // use p.push(stream) to add to the end, or p.unshift(stream) to the front const databaseDecoderStreamDoohickey = (connectionInfo) => { const p = new Pipeline() logIntoDatabase(connectionInfo).then(connection => { initializeDecoderRing(connectionInfo).then(decoderRing => { p.push(connection, decoderRing) getUpstreamSource(upstream => { p.unshift(upstream) }) }) }) // return to caller right away // emitted data will be upstream -> connection -> decoderRing pipeline return p } ``` Pipeline is a [minipass](http://npm.im/minipass) stream, so it's as synchronous as the streams it wraps. It will buffer data until there is a reader, but no longer, so make sure to attach your listeners before you pipe it somewhere else. ## `new Pipeline(opts = {}, ...streams)` Create a new Pipeline with the specified Minipass options and any streams provided. ## `pipeline.push(stream, ...)` Attach one or more streams to the pipeline at the end (read) side of the pipe chain. ## `pipeline.unshift(stream, ...)` Attach one or more streams to the pipeline at the start (write) side of the pipe chain.