Description
streamsearch is a module for node.js that allows searching a stream using the Boyer-Moore-Horspool algorithm.
This module is based heavily on the Streaming Boyer-Moore-Horspool C++ implementation by Hongli Lai here.
Requirements
Installation
npm install streamsearch
Example
const { inspect } = require('util');
const StreamSearch = require('streamsearch');
const needle = Buffer.from('\r\n');
const ss = new StreamSearch(needle, (isMatch, data, start, end) => {
if (data)
console.log('data: ' + inspect(data.toString('latin1', start, end)));
if (isMatch)
console.log('match!');
});
const chunks = [
'foo',
' bar',
'\r',
'\n',
'baz, hello\r',
'\n world.',
'\r\n Node.JS rules!!\r\n\r\n',
];
for (const chunk of chunks)
ss.push(Buffer.from(chunk));
API
Properties
Functions
-
(constructor)(< mixed >needle, < function >callback) - Creates and returns a new instance for searching for a Buffer or string needle
. callback
is called any time there is non-matching data and/or there is a needle match. callback
will be called with the following arguments:
-
isMatch
- boolean - Indicates whether a match has been found
-
data
- mixed - If set, this contains data that did not match the needle.
-
start
- integer - The index in data
where the non-matching data begins (inclusive).
-
end
- integer - The index in data
where the non-matching data ends (exclusive).
-
isSafeData
- boolean - Indicates if it is safe to store a reference to data
(e.g. as-is or via data.slice()
) or not, as in some cases data
may point to a Buffer whose contents change over time.
-
destroy() - (void) - Emits any last remaining unmatched data that may still be buffered and then resets internal state.
-
push(< Buffer >chunk) - integer - Processes chunk
, searching for a match. The return value is the last processed index in chunk
+ 1.
-
reset() - (void) - Resets internal state. Useful for when you wish to start searching a new/different stream for example.