rindle

Collection of utilities for working with Streams

Usage no npm install needed!

<script type="module">
  import rindle from 'https://cdn.skypack.dev/rindle';
</script>

README

rindle

npm version dependencies Build Status Build status

Collection of utilities for working with Streams.

Description

This is a collection of functions that operate on streams to encapsulate some of the tasks I usually have to do in my project. I'll be adding more as I encounter more patterns.

Installation

Install rindle by running:

$ npm install --save rindle

Documentation

rindle.wait(stream, callback)

This functions listens for the following events:

  • close.
  • end.
  • done.

If those events pass any argument when being emitted, you'll be able to access them as arguments to the callback.

Kind: static method of rindle
Summary: Wait for a stream to close
Access: public

Param Type Description
stream Stream stream
callback function callback (error, args...)

Example

var fs = require('fs');
var rindle = require('rindle');

var input = fs.createReadStream('foo/bar');
var output = fs.createWriteStream('foo/baz');

input.pipe(output);

rindle.wait(output, function(error) {
  if (error) throw error;
  console.log('The output stream was closed!');
});

rindle.extract(stream, callback)

Notice this function only extracts the remaining data from the stream.

Kind: static method of rindle
Summary: Extract data from readable stream
Access: public

Param Type Description
stream StreamReadable stream
callback function callback (error, data)

Example

var fs = require('fs');
var rindle = require('rindle');

var input = fs.createReadStream('foo/bar');

rindle.extract(input, function(error, data) {
  if (error) throw error;
  console.log('The file contains: ' + data);
});

rindle.bifurcate(stream, output1, output2, callback)

The callback is called when both output stream close.

Kind: static method of rindle
Summary: Bifurcate readable stream to two writable streams
Access: public

Param Type Description
stream StreamReadable input stream
output1 StreamWritable first output stream
output2 StreamWritable second output stream
callback function callback (error)

Example

var fs = require('fs');
var rindle = require('rindle');

var input = fs.createReadStream('foo/bar');
var output1 = fs.createWriteStream('foo/baz');
var output2 = fs.createWriteStream('foo/qux');

rindle.bifurcate(input, output1, output2, function(error) {
  if (error) throw error;

  console.log('All files written!');
});

rindle.pipeWithEvents(stream, output, events) ⇒ StreamReadable

Kind: static method of rindle
Summary: Pipe a stream along with certain events
Returns: StreamReadable - resulting stream
Access: public

Param Type Description
stream StreamReadable input stream
output StreamWritable output stream
events Array.<String> events to pipe

Example

var rindle = require('rindle');

rindle.pipeWithEvents(input, output, [
  'response',
  'request'
]);

rindle.onEvent(stream, event, callback)

Kind: static method of rindle
Summary: Wait for a stream to emit a certain event
Access: public

Param Type Description
stream Stream stream
event String event name
callback function callback (error, args...)

Example

var rindle = require('rindle');
var fs = require('fs');

rindle.onEvent(fs.createReadStream('foo/bar'), 'open', function(error, fd) {
  if (error) throw error;

  console.log('The "open" event was emitted');
  console.log(fd);
});

rindle.getStreamFromString(string) ⇒ ReadableStream

Kind: static method of rindle
Summary: Get a readable stream from a string
Returns: ReadableStream - - string stream
Access: public

Param Type Description
string String input string

Example

var rindle = require('rindle');
rindle.getStreamFromString('Hello World!').pipe(process.stdout);

Support

If you're having any problem, please raise an issue on GitHub and I'll be happy to help.

Tests

Run the test suite by doing:

$ gulp test

Contribute

Before submitting a PR, please make sure that you include tests, and that jshint runs without any warning:

$ gulp lint

License

The project is licensed under the MIT license.