Description
streamsearch is a module for node.js that allows searching a stream using the Boyer-Moore-Horspool algorithm.
This fork adds browser support, removes deprecation warnings, and includes a 1:1 conversion to TypeScript.
This module is based heavily on the Streaming Boyer-Moore-Horspool C++ implementation by Hongli Lai here.
Installation
npm install @vscode/streamsearch
Example
import StreamSearch from "@vscode/streamsearch";
import { inspect } from "util";
const needle = new Buffer([13, 10]); // CRLF
const s = new StreamSearch(needle, (isMatch, data) => {
if (data) console.log("data: " + inspect(data.toString("ascii", start, end)));
if (isMatch) console.log("match!");
});
const chunks = [
new Buffer("foo"),
new Buffer(" bar"),
new Buffer("\r"),
new Buffer("\n"),
new Buffer("baz, hello\r"),
new Buffer("\n world."),
new Buffer("\r\n Node.JS rules!!\r\n\r\n"),
];
for (const chunk of chunks) {
s.push(chunks[i]);
}
// output:
//
// data: 'foo'
// data: ' bar'
// match!
// data: 'baz, hello'
// match!
// data: ' world.'
// match!
// data: ' Node.JS rules!!'
// match!
// data: ''
// match!
API
Events
- info(< boolean >isMatch[, < Buffer >chunk, < integer >start, < integer >end]) - A match may or may not have been made. In either case, a preceding
chunk
of data may be available that did not match the needle. Data (if available) is inchunk
betweenstart
(inclusive) andend
(exclusive).
Properties
-
maxMatches - < integer > - The maximum number of matches. Defaults to Infinity.
-
matches - < integer > - The current match count.
Functions
-
(constructor)(< mixed >needle) - Creates and returns a new instance for searching for a Buffer or string
needle
. -
push(< Buffer >chunk) - integer - Processes
chunk
. The return value is the last processed index inchunk
+ 1. -
reset() - (void) - Resets internal state. Useful for when you wish to start searching a new/different stream for example.