# @slaviczavik/stream-search

> Event based module for searching streams.

Latest version **1.5.0** (published 2020-06-29) · MIT license · 0 weekly downloads

## Install

```sh
npm install @slaviczavik/stream-search
pnpm add @slaviczavik/stream-search
yarn add @slaviczavik/stream-search
bun add @slaviczavik/stream-search
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.5.0 |
| Published | 2020-06-29 |
| First published | 2018-07-14 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 23.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Jaroslav Zavodny |
| Maintainers | slaviczavik |
| Keywords | search, stream |

## Links

- npm: https://www.npmjs.com/package/@slaviczavik/stream-search
- Repository: https://github.com/slaviczavik/stream-search
- Homepage: https://github.com/slaviczavik/stream-search#readme
- Issues: https://github.com/slaviczavik/stream-search/issues
- npm.io page: https://npm.io/package/@slaviczavik/stream-search

## 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

- 1.5.0 (latest) — 2020-06-29
- 1.4.0 — 2019-11-25
- 1.3.3 — 2018-07-23
- 1.3.2 — 2018-07-23
- 1.3.1 — 2018-07-20
- 1.3.0 — 2018-07-20
- 1.2.2 — 2018-07-19
- 1.2.1 — 2018-07-19
- 1.2.0 — 2018-07-19
- 1.1.1 — 2018-07-15
- 1.1.0 — 2018-07-15
- 1.0.0 — 2018-07-14

## README

[![Build Status](https://travis-ci.com/slaviczavik/stream-search.svg?branch=master)](https://travis-ci.com/slaviczavik/stream-search)

# Description
Node.js event based module for searching streams using the Boyer–Moore–Horspool algorithm.

# Requirements
Node.js 6.14.3 or higher is required.

# Installation
```
npm i @slaviczavik/stream-search
```

# Example

## Code

```JS
const StreamSearch = require('@slaviczavik/stream-search')
const search = StreamSearch('AQD')

search.on('part', function (obj) {
  const isMatch = obj['isMatch']
  const start = obj['start']
  const end = obj['end']
  const data = obj['data']

  if (isMatch) {
    console.log(`Found! [${start} - ${end}]`)
  }
  else {
    console.log(`Not found!`)
  }

  if (data) {
    console.log(data.toString('ascii'))
  }
})

search.add('--AQD-QDD-DQD--')
search.end()
```
## Output

```
> Found! [2 - 4]
> --AQD
> Not found!
> -QDD-DQD--
```

# API

## Constructor
### `StreamSearch(needle, limit)`

| Name | Required | Type | Description | Default
| - | - | - | - | - |
| `needle` | true | `string`, `buffer` | The needle what we are searching for. | `none` |
| `limit` | false | `integer` | The maximum number of matches. | `Infinity` |

**Number of matches is reseted after the `end` method calling.**

## Methods

### `add(haystack)`
Call this method every time you receive a new stream data.
If there were some unprocessed data in the previous request, this data will be processed with this new data.

| Parameter | Required | Type | Description
| - | - | - | - |
| `haystack` | true | `string`, `buffer` | Your data you want to search. |

### `end()`
Calling this method you signals that no more data will be passed.
If there are some trailing data (too few to run the algorithm), this data will be emitted back to user.

## Events

### `part(object)`
Emitted every time a match was or was not made. In both case, a processed chunk of data is available.
If match was made, the needle is between start (inclusive) and end (inclusive).

The object contains following properties:

| Property | Type | Description
| - | - | - |
| `isMatch` | `boolean` | Bool value that data contains the needle. |
| `data` | `buffer` | Returned data from the haystack. |
| `start` | `integer`, `undefined` | Start position of needle (if any) in the haystack (inclusive). |
| `end` | `integer`, `undefined` | End position of needle (if any) in the haystack (inclusive). |

**The property end also indicates the end of the data.**

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