{"version":3,"sources":["jsdelivr-header.js","/npm/streamsearch@1.1.0/lib/sbmh.js"],"names":[],"mappings":"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","file":"/npm/streamsearch@1.1.0/lib/sbmh.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/streamsearch@1.1.0/lib/sbmh.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n/*\n  Based heavily on the Streaming Boyer-Moore-Horspool C++ implementation\n  by Hongli Lai at: https://github.com/FooBarWidget/boyer-moore-horspool\n*/\nfunction memcmp(buf1, pos1, buf2, pos2, num) {\n  for (let i = 0; i < num; ++i) {\n    if (buf1[pos1 + i] !== buf2[pos2 + i])\n      return false;\n  }\n  return true;\n}\n\nclass SBMH {\n  constructor(needle, cb) {\n    if (typeof cb !== 'function')\n      throw new Error('Missing match callback');\n\n    if (typeof needle === 'string')\n      needle = Buffer.from(needle);\n    else if (!Buffer.isBuffer(needle))\n      throw new Error(`Expected Buffer for needle, got ${typeof needle}`);\n\n    const needleLen = needle.length;\n\n    this.maxMatches = Infinity;\n    this.matches = 0;\n\n    this._cb = cb;\n    this._lookbehindSize = 0;\n    this._needle = needle;\n    this._bufPos = 0;\n\n    this._lookbehind = Buffer.allocUnsafe(needleLen);\n\n    // Initialize occurrence table.\n    this._occ = [\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen, needleLen, needleLen,\n      needleLen, needleLen, needleLen, needleLen\n    ];\n\n    // Populate occurrence table with analysis of the needle, ignoring the last\n    // letter.\n    if (needleLen > 1) {\n      for (let i = 0; i < needleLen - 1; ++i)\n        this._occ[needle[i]] = needleLen - 1 - i;\n    }\n  }\n\n  reset() {\n    this.matches = 0;\n    this._lookbehindSize = 0;\n    this._bufPos = 0;\n  }\n\n  push(chunk, pos) {\n    let result;\n    if (!Buffer.isBuffer(chunk))\n      chunk = Buffer.from(chunk, 'latin1');\n    const chunkLen = chunk.length;\n    this._bufPos = pos || 0;\n    while (result !== chunkLen && this.matches < this.maxMatches)\n      result = feed(this, chunk);\n    return result;\n  }\n\n  destroy() {\n    const lbSize = this._lookbehindSize;\n    if (lbSize)\n      this._cb(false, this._lookbehind, 0, lbSize, false);\n    this.reset();\n  }\n}\n\nfunction feed(self, data) {\n  const len = data.length;\n  const needle = self._needle;\n  const needleLen = needle.length;\n\n  // Positive: points to a position in `data`\n  //           pos == 3 points to data[3]\n  // Negative: points to a position in the lookbehind buffer\n  //           pos == -2 points to lookbehind[lookbehindSize - 2]\n  let pos = -self._lookbehindSize;\n  const lastNeedleCharPos = needleLen - 1;\n  const lastNeedleChar = needle[lastNeedleCharPos];\n  const end = len - needleLen;\n  const occ = self._occ;\n  const lookbehind = self._lookbehind;\n\n  if (pos < 0) {\n    // Lookbehind buffer is not empty. Perform Boyer-Moore-Horspool\n    // search with character lookup code that considers both the\n    // lookbehind buffer and the current round's haystack data.\n    //\n    // Loop until\n    //   there is a match.\n    // or until\n    //   we've moved past the position that requires the\n    //   lookbehind buffer. In this case we switch to the\n    //   optimized loop.\n    // or until\n    //   the character to look at lies outside the haystack.\n    while (pos < 0 && pos <= end) {\n      const nextPos = pos + lastNeedleCharPos;\n      const ch = (nextPos < 0\n                  ? lookbehind[self._lookbehindSize + nextPos]\n                  : data[nextPos]);\n\n      if (ch === lastNeedleChar\n          && matchNeedle(self, data, pos, lastNeedleCharPos)) {\n        self._lookbehindSize = 0;\n        ++self.matches;\n        if (pos > -self._lookbehindSize)\n          self._cb(true, lookbehind, 0, self._lookbehindSize + pos, false);\n        else\n          self._cb(true, undefined, 0, 0, true);\n\n        return (self._bufPos = pos + needleLen);\n      }\n\n      pos += occ[ch];\n    }\n\n    // No match.\n\n    // There's too few data for Boyer-Moore-Horspool to run,\n    // so let's use a different algorithm to skip as much as\n    // we can.\n    // Forward pos until\n    //   the trailing part of lookbehind + data\n    //   looks like the beginning of the needle\n    // or until\n    //   pos == 0\n    while (pos < 0 && !matchNeedle(self, data, pos, len - pos))\n      ++pos;\n\n    if (pos < 0) {\n      // Cut off part of the lookbehind buffer that has\n      // been processed and append the entire haystack\n      // into it.\n      const bytesToCutOff = self._lookbehindSize + pos;\n\n      if (bytesToCutOff > 0) {\n        // The cut off data is guaranteed not to contain the needle.\n        self._cb(false, lookbehind, 0, bytesToCutOff, false);\n      }\n\n      self._lookbehindSize -= bytesToCutOff;\n      lookbehind.copy(lookbehind, 0, bytesToCutOff, self._lookbehindSize);\n      lookbehind.set(data, self._lookbehindSize);\n      self._lookbehindSize += len;\n\n      self._bufPos = len;\n      return len;\n    }\n\n    // Discard lookbehind buffer.\n    self._cb(false, lookbehind, 0, self._lookbehindSize, false);\n    self._lookbehindSize = 0;\n  }\n\n  pos += self._bufPos;\n\n  const firstNeedleChar = needle[0];\n\n  // Lookbehind buffer is now empty. Perform Boyer-Moore-Horspool\n  // search with optimized character lookup code that only considers\n  // the current round's haystack data.\n  while (pos <= end) {\n    const ch = data[pos + lastNeedleCharPos];\n\n    if (ch === lastNeedleChar\n        && data[pos] === firstNeedleChar\n        && memcmp(needle, 0, data, pos, lastNeedleCharPos)) {\n      ++self.matches;\n      if (pos > 0)\n        self._cb(true, data, self._bufPos, pos, true);\n      else\n        self._cb(true, undefined, 0, 0, true);\n\n      return (self._bufPos = pos + needleLen);\n    }\n\n    pos += occ[ch];\n  }\n\n  // There was no match. If there's trailing haystack data that we cannot\n  // match yet using the Boyer-Moore-Horspool algorithm (because the trailing\n  // data is less than the needle size) then match using a modified\n  // algorithm that starts matching from the beginning instead of the end.\n  // Whatever trailing data is left after running this algorithm is added to\n  // the lookbehind buffer.\n  while (pos < len) {\n    if (data[pos] !== firstNeedleChar\n        || !memcmp(data, pos, needle, 0, len - pos)) {\n      ++pos;\n      continue;\n    }\n    data.copy(lookbehind, 0, pos, len);\n    self._lookbehindSize = len - pos;\n    break;\n  }\n\n  // Everything until `pos` is guaranteed not to contain needle data.\n  if (pos > 0)\n    self._cb(false, data, self._bufPos, pos < len ? pos : len, true);\n\n  self._bufPos = len;\n  return len;\n}\n\nfunction matchNeedle(self, data, pos, len) {\n  const lb = self._lookbehind;\n  const lbSize = self._lookbehindSize;\n  const needle = self._needle;\n\n  for (let i = 0; i < len; ++i, ++pos) {\n    const ch = (pos < 0 ? lb[lbSize + pos] : data[pos]);\n    if (ch !== needle[i])\n      return false;\n  }\n  return true;\n}\n\nmodule.exports = SBMH;\n"]}