stream-toolkit
This is a loose collection of power tools for node.js streams, including helpers for improving the interface with promises.
Install
$ npm install
$ npm test
Sources and sinks
sourceStream
- create a readable stream from a string or buffer
var toolkit = require("stream-toolkit");
var source = toolkit.sourceStream("hello sailor!");
source.pipe(...);
sinkStream
- create a writable stream that fills a buffer
var toolkit = require("stream-toolkit");
var sink = toolkit.sinkStream("hello sailor!");
stuff.pipe(sink);
sink.on("finish", function () {
var buffer = sink.getBuffer();
});
nullSinkStream
- a SinkStream
that throws away data as it arrives
var toolkit = require("stream-toolkit");
garbage.pipe(toolkit.nullSinkStream());
Promise methods
promisify
adds a few promise-based methods to a stream. These methods set one-shot event handlers when necessary. If they can avoid it (because data is already available, for example), they do. Error events are converted into rejected promises.
All of the streams provided by stream-toolkit are already promisified.
readPromise
- return a promise that reads data from a readable stream
var toolkit = require("stream-toolkit");
toolkit.promisify(stream);
stream.readPromise(5).then(function (buffer) {
});
writePromise
- return a promise that data has been accepted downsteam (the "write" callback has been called)
var toolkit = require("stream-toolkit");
toolkit.promisify(stream);
stream.writePromise(new Buffer("data")).then(function () {
});
endPromise
- return a promise that a readable stream has ended
var toolkit = require("stream-toolkit");
toolkit.promisify(stream);
stream.endPromise().then(function () {
});
finishPromise
- return a promise that a writable stream has finished
var toolkit = require("stream-toolkit");
toolkit.promisify(stream);
stream.finishPromise().then(function () {
});
pipeFromBuffer
- shortcut for creating a SourceStream
, piping it into another stream, and calling endPromise
var toolkit = require("stream-toolkit");
toolkit.pipeFromBuffer("data", stream).then(function () {
});
pipeToBuffer
- shortcut for creating a SinkStream
, piping a stream into it, and calling finishPromise
var toolkit = require("stream-toolkit");
toolkit.pipeToBuffer(stream).then(function (buffer) {
});
Fancy streams
compoundStream
- create a readable stream composed of a series of other streams
compoundStream
takes a set of component streams and concatenates them together into one single continuous stream. The constructor takes a generator function. The function is called initially to provide the first stream; when that stream ends, the generator is called again to provide the next stream. When there are no more component streams, the generator should return null
and the CompoundStream
itself will end.
The generator function may return a promise for a stream instead of a stream. That's fine.
The generator function may be an array of streams if you don't need to generate them on the fly.
var toolkit = require("stream-toolkit");
var source1 = toolkit.sourceStream("hello ");
var source2 = toolkit.sourceStream("sailor");
var source3 = toolkit.sourceStream("!");
var compound = toolkit.compoundStream([ source1, source2, source3 ]);
compound.pipe(...);
limitStream
- wrap a readable stream to enforce a length limit
var toolkit = require("stream-toolkit");
var limited = toolkit.limitStream(source, 10);
stuff.pipe(limited).pipe(...);
countingStream
- simple Transform that counts the bytes going through it
The stream emits "count" events when the count changes. The event contains the total byte-count so far.
var toolkit = require("stream-toolkit");
var counter = toolkit.countingStream();
stuff.pipe(counter).pipe(...);
counter.on("count", function (byteCount) {
});
Weld
weld
- pipe a series of streams into each other, returning a virtual stream that represents the whole series
var toolkit = require("stream-toolkit");
var stream = toolkit.weld(source1, transform1, transform2);
stuff.pipe(stream).pipe(...);
Debugging
Set a debug logger function to receive detailed debugging info about stream processing and events. For example:
toolkit.setDebugLogger(console.log);
The function will receive one argument: a string to log.
License
Apache 2 (open-source) license, included in 'LICENSE.txt'.
Authors