What is through2-filter?
The through2-filter npm package is a thin wrapper around node's transform streams designed to create filtering streams using a simple function. It is built on top of through2 and allows users to easily filter chunks of data in a stream based on a condition specified in a function.
What are through2-filter's main functionalities?
Synchronous Filtering
This feature allows for synchronous filtering of stream data. The provided code creates a filter stream that only passes through chunks of data that are longer than 10 characters.
const through2Filter = require('through2-filter');
const filterStream = through2Filter(chunk => chunk.length > 10);
process.stdin.pipe(filterStream).pipe(process.stdout);
Asynchronous Filtering
This feature supports asynchronous filtering. The example demonstrates filtering objects based on the 'age' property, allowing only those with an age greater than 20 to pass through, using an asynchronous test with a timeout.
const through2Filter = require('through2-filter').obj;
const filterStream = through2Filter((chunk, enc, callback) => {
setTimeout(() => {
callback(null, chunk.age > 20);
}, 100);
});
process.stdin.pipe(filterStream).pipe(process.stdout);
Other packages similar to through2-filter
through2
through2 is a base package for through2-filter, providing a simple API for creating readable and writable streams. While through2 itself does not provide filtering capabilities, it serves as the foundation for through2-filter by handling stream transformations.
stream-filter
stream-filter offers similar functionality to through2-filter, allowing users to filter data chunks in streams based on a predicate function. It compares to through2-filter by providing a similar API but may differ in implementation details and additional options.
through2-filter
This is a super thin wrapper around through2 that works like Array.prototype.filter
but for streams.
For when through2 is just too verbose :wink:
Note you will NOT be able to alter the content of the chunks. This is intended for filtering only. If you want to modify the stream content, use either through2
or through2-map
.
var filter = require("through2-filter")
var skip = filter(function (chunk) {
return chunk.length < 100
})
var skip = through2(function (chunk, encoding, callback) {
if (chunk.length < 100) this.push(chunk)
return callback()
})
source.pipe(skip).pipe(sink)
var alphanum = new RegExp("^[A-Za-z0-1]+$")
var scrub = filter({wantStrings: true}, function (str) {
return alphanum.exec(str)
})
var skip10 = filter(function (element, index) {
return index > 10
})
*Differences from Array.prototype.filter
:
- No third
array
callback argument. That would require realizing the entire stream, which is generally counter-productive to stream operations. Array.prototype.filter
doesn't modify the source Array, which is somewhat nonsensical when applied to streams.
API
require("through2-filter")([options], fn)
Create a through2-filter
instance that will call fn(chunk)
. If fn(chunk)
returns "true" the chunk will be passed downstream. Otherwise it will be dropped.
require("through2-filter").ctor([options], fn)
Create a through2-filter
Type that can be instantiated via new Type()
or Type()
to create reusable spies.
require("through2-filter").obj([options], fn)
Create a through2-filter
that defaults to objectMode = true
.
require("through2-filter").objCtor([options], fn)
Create a through2-filter
Type that defaults to objectMode = true
.
Options
- wantStrings: Automatically call chunk.toString() for the super lazy.
- all other through2 options
LICENSE
MIT