|  | 3 years ago | |
|---|---|---|
| .. | ||
| .github/workflows | 3 years ago | |
| lib | 3 years ago | |
| test | 3 years ago | |
| .eslintrc.js | 3 years ago | |
| LICENSE | 3 years ago | |
| README.md | 3 years ago | |
| package.json | 3 years ago | |
		
			
				
				README.md
			
		
		
			
			
		
	
	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
- node.js -- v10.0.0 or newer
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));
  // output:
  //
  // data: 'foo'
  // data: ' bar'
  // match!
  // data: 'baz, hello'
  // match!
  // data: ' world.'
  // match!
  // data: ' Node.JS rules!!'
  // match!
  // data: ''
  // match!
API
Properties
- 
maxMatches - < integer > - The maximum number of matches. Defaults to Infinity.
- 
matches - < integer > - The current match count. 
Functions
- 
(constructor)(< mixed >needle, < function >callback) - Creates and returns a new instance for searching for a Buffer or string needle.callbackis called any time there is non-matching data and/or there is a needle match.callbackwill 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 indatawhere the non-matching data begins (inclusive).
- 
end- integer - The index indatawhere the non-matching data ends (exclusive).
- 
isSafeData- boolean - Indicates if it is safe to store a reference todata(e.g. as-is or viadata.slice()) or not, as in some casesdatamay 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 inchunk+ 1.
- 
reset() - (void) - Resets internal state. Useful for when you wish to start searching a new/different stream for example.