diff options
Diffstat (limited to 'node_modules/ordered-read-streams')
-rw-r--r-- | node_modules/ordered-read-streams/LICENSE | 20 | ||||
-rw-r--r-- | node_modules/ordered-read-streams/README.md | 65 | ||||
-rw-r--r-- | node_modules/ordered-read-streams/index.js | 81 | ||||
-rw-r--r-- | node_modules/ordered-read-streams/package.json | 25 |
4 files changed, 191 insertions, 0 deletions
diff --git a/node_modules/ordered-read-streams/LICENSE b/node_modules/ordered-read-streams/LICENSE new file mode 100644 index 000000000..16fd42818 --- /dev/null +++ b/node_modules/ordered-read-streams/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Artem Medeusheyev + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/ordered-read-streams/README.md b/node_modules/ordered-read-streams/README.md new file mode 100644 index 000000000..8f8be53b3 --- /dev/null +++ b/node_modules/ordered-read-streams/README.md @@ -0,0 +1,65 @@ +# ordered-read-streams [](http://badge.fury.io/js/ordered-read-streams) [](https://travis-ci.org/armed/ordered-read-streams) + +Combines array of streams into one read stream in strict order. + +## Installation + +`npm install ordered-read-streams` + +## Overview + +`ordered-read-streams` handles all data/errors from input streams in parallel, but emits data/errors in strict order in which streams are passed to constructor. This is `objectMode = true` stream. + +## Example + +```js +var through = require('through2'); +var Ordered = require('ordered-read-streams'); + +var s1 = through.obj(function (data, enc, next) { + var self = this; + setTimeout(function () { + self.push(data); + next(); + }, 200) +}); +var s2 = through.obj(function (data, enc, next) { + var self = this; + setTimeout(function () { + self.push(data); + next(); + }, 30) +}); +var s3 = through.obj(function (data, enc, next) { + var self = this; + setTimeout(function () { + self.push(data); + next(); + }, 100) +}); + +var streams = new Ordered([s1, s2, s3]); +streams.on('data', function (data) { + console.log(data); +}) + +s1.write('stream 1'); +s1.end(); + +s2.write('stream 2'); +s2.end(); + +s3.write('stream 3'); +s3.end(); +``` +Ouput will be: + +``` +stream 1 +stream 2 +stream 3 +``` + +## Licence + +MIT diff --git a/node_modules/ordered-read-streams/index.js b/node_modules/ordered-read-streams/index.js new file mode 100644 index 000000000..03e936b65 --- /dev/null +++ b/node_modules/ordered-read-streams/index.js @@ -0,0 +1,81 @@ +var Readable = require('readable-stream/readable'); +var isReadable = require('is-stream').readable; +var util = require('util'); + +function addStream(streams, stream) +{ + if(!isReadable(stream)) throw new Error('All input streams must be readable'); + + var self = this; + + stream._buffer = []; + + stream.on('readable', function() + { + var chunk = stream.read(); + if (chunk === null) + return; + + if(this === streams[0]) + self.push(chunk); + + else + this._buffer.push(chunk); + }); + + stream.on('end', function() + { + for(var stream = streams[0]; + stream && stream._readableState.ended; + stream = streams[0]) + { + while(stream._buffer.length) + self.push(stream._buffer.shift()); + + streams.shift(); + } + + if(!streams.length) self.push(null); + }); + + stream.on('error', this.emit.bind(this, 'error')); + + streams.push(stream); +} + + +function OrderedStreams(streams, options) { + if (!(this instanceof(OrderedStreams))) { + return new OrderedStreams(streams, options); + } + + streams = streams || []; + options = options || {}; + + options.objectMode = true; + + Readable.call(this, options); + + + if(!Array.isArray(streams)) streams = [streams]; + if(!streams.length) return this.push(null); // no streams, close + + + var addStream_bind = addStream.bind(this, []); + + + streams.forEach(function(item) + { + if(Array.isArray(item)) + item.forEach(addStream_bind); + + else + addStream_bind(item); + }); +} +util.inherits(OrderedStreams, Readable); + +OrderedStreams.prototype._read = function () {}; + + +module.exports = OrderedStreams; diff --git a/node_modules/ordered-read-streams/package.json b/node_modules/ordered-read-streams/package.json new file mode 100644 index 000000000..48982f604 --- /dev/null +++ b/node_modules/ordered-read-streams/package.json @@ -0,0 +1,25 @@ +{ + "name": "ordered-read-streams", + "version": "0.3.0", + "description": "Combines array of streams into one read stream in strict order", + "files": [ + "index.js" + ], + "scripts": { + "test": "jshint *.js test/*.js && mocha" + }, + "repository": "armed/ordered-read-streams", + "author": "Artem Medeusheyev <artem.medeusheyev@gmail.com>", + "license": "MIT", + "dependencies": { + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" + }, + "devDependencies": { + "should": "^7.0.1", + "mocha": "^2.2.5", + "through2": "^2.0.0", + "jshint": "^2.8.0", + "pre-commit": "^1.0.10" + } +} |