What is from2?
The 'from2' npm package is a utility for creating readable streams using a simple API. It is particularly useful for stream-based operations where data needs to be generated or transformed on the fly. The package simplifies the process of creating custom readable streams by handling the underlying Node.js stream mechanics.
What are from2's main functionalities?
Creating a readable stream from a data source
This feature allows you to create a readable stream that emits data from an array. The stream reads data from the array and pushes it to the consumer until there's no data left, at which point it signals the end of the stream.
const from2 = require('from2');
const data = ['hello', 'world'];
const stream = from2(function(size, next) {
if (data.length === 0) return next(null, null);
next(null, data.shift());
});
stream.on('data', (chunk) => {
console.log(chunk.toString());
});
stream.on('end', () => {
console.log('Stream ended');
});
Creating a stream from an asynchronous data source
This example demonstrates how to create a readable stream that reads data from a file asynchronously. The stream uses the 'fs.readFile' method to read data and then pushes it to the stream consumer.
const from2 = require('from2');
const fs = require('fs');
const stream = from2(function(size, next) {
fs.readFile('/path/to/file.txt', (err, data) => {
if (err) return next(err);
next(null, data);
});
});
stream.on('data', (chunk) => {
console.log(chunk.toString());
});
stream.on('end', () => {
console.log('Stream ended');
});
Other packages similar to from2
through2
Through2 is a tiny wrapper around Node.js streams.Transform (Streams2/3) to avoid explicit subclassing noise. It is similar to from2 but focuses more on transforming streams rather than creating readable streams from data sources.
readable-stream
This package is a mirror of the Streams2 and Streams3 implementations in Node-core. Similar to from2, it provides utilities for creating custom stream implementations but offers a broader API surface for handling both readable and writable streams.
from2
from2
is a high-level module for creating readable streams that properly handle backpressure.
Convience wrapper for
readable-stream's ReadableStream
base class, with an API lifted from
from and
through2.
Usage
stream = from2([opts], read)
Where opts
are the options to pass on to the ReadableStream
constructor,
and read(size, next)
is called when data is requested from the stream.
size
is the recommended amount of data (in bytes) to retrieve.next(err)
should be called when you're ready to emit more data.
For example, here's a readable stream that emits the contents of a given
string:
var from = require('from2')
module.exports = fromString
function fromString(string) {
return from(function(size, next) {
if (string.length <= 0) return this.push(null)
var chunk = string.slice(0, size)
string = string.slice(size)
next(null, chunk)
})
}
fromString('hello world').pipe(process.stdout)
stream = from2.obj([opts], read)
Shorthand for from2({ objectMode: true }, read)
.
createStream = from2.ctor([opts], read)
If you're creating similar streams in quick succession you can improve
performance by generating a stream constructor that you can reuse instead
of creating one-off streams on each call.
Takes the same options as from2
, instead returning a constructor which you
can use to create new streams.
License
MIT. See LICENSE.md for details.