You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
陈@jkccchen123 c1c969a7c2
jk0624
11 months ago
..
.github/workflows jk0624 11 months ago
lib jk0624 11 months ago
test jk0624 11 months ago
.eslintrc.js jk0624 11 months ago
LICENSE jk0624 11 months ago
README.md jk0624 11 months ago
package.json jk0624 11 months 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

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. 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:

    1. isMatch - boolean - Indicates whether a match has been found

    2. data - mixed - If set, this contains data that did not match the needle.

    3. start - integer - The index in data where the non-matching data begins (inclusive).

    4. end - integer - The index in data where the non-matching data ends (exclusive).

    5. 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.