# through2-filter

> A through2 to create an Array.prototype.filter analog for streams.

Latest version **4.0.0** (published 2024-04-20) · MIT license · 0 weekly downloads

## Install

```sh
npm install through2-filter
pnpm add through2-filter
yarn add through2-filter
bun add through2-filter
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 4.0.0 |
| Published | 2024-04-20 |
| First published | 2013-08-06 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >= 6 |
| Dependencies | 1 |
| Unpacked size | 5.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 34 |
| Author | Bryce B. Baril |
| Maintainers | bryce |
| Keywords | streams, through, through2, filter |

## Links

- npm: https://www.npmjs.com/package/through2-filter
- Repository: https://github.com/brycebaril/through2-filter
- Homepage: https://github.com/brycebaril/through2-filter#readme
- Issues: https://github.com/brycebaril/through2-filter/issues
- npm.io page: https://npm.io/package/through2-filter

## Dependencies (1)

- [through2](https://npm.io/package/through2.md) ^4.0.2

## Alternatives

- [byte-size](https://npm.io/package/byte-size.md) — 2.1M weekly downloads
- [speed-limiter](https://npm.io/package/speed-limiter.md) — 16.0K weekly downloads
- [@powersync/node](https://npm.io/package/@powersync/node.md) — 10.9K weekly downloads
- [@ledgerhq/coin-cardano](https://npm.io/package/@ledgerhq/coin-cardano.md) — 1.0K weekly downloads
- [@jayesol/jayeson.lib.streamfinder](https://npm.io/package/@jayesol/jayeson.lib.streamfinder.md) — 1.0K weekly downloads

## Recent versions

- 4.0.0 (latest) — 2024-04-20
- 3.1.0 — 2024-04-12
- 3.0.0 — 2018-06-21
- 2.0.0 — 2015-06-17
- 1.4.1 — 2015-01-25
- 1.4.0 — 2014-06-20
- 1.3.1 — 2014-01-31
- 1.3.0 — 2013-09-23
- 1.2.0 — 2013-09-20
- 1.1.0 — 2013-08-07
- 1.0.2 — 2013-08-06
- 1.0.1 — 2013-08-06
- 1.0.0 — 2013-08-06

## README

through2-filter
===============

[![NPM](https://nodei.co/npm/through2-filter.png)](https://nodei.co/npm/through2-filter/)

This is a super thin wrapper around [through2](http://npm.im/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`.

```js
var filter = require("through2-filter")

var skip = filter(function (chunk) {
  // skip buffers longer than 100
  return chunk.length < 100
})

// vs. with through2:
var skip = through2(function (chunk, encoding, callback) {
  // skip buffers longer than 100
  if (chunk.length < 100) this.push(chunk)
  return callback()
})

// Then use your filter:
source.pipe(skip).pipe(sink)

// Additionally accepts `wantStrings` argument to conver buffers into strings
var alphanum = new RegExp("^[A-Za-z0-1]+$")
var scrub = filter({wantStrings: true}, function (str) {
  return alphanum.exec(str)
})

// Works like `Array.prototype.filter` meaning you can specify a function that
// takes up to two* arguments: fn(element, index)
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

---
_Source: https://npm.io/package/through2-filter · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
