{"version":3,"sources":["jsdelivr-header.js","/npm/fuzzyset.js@1.0.7/dist/fuzzyset.js"],"names":[],"mappings":"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","file":"/npm/fuzzyset.js@1.0.7/dist/fuzzyset.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/fuzzyset.js@1.0.7/dist/fuzzyset.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var FuzzySet = (function () {\n  'use strict';\n\n  const FuzzySet = function(arr, useLevenshtein, gramSizeLower, gramSizeUpper) {\n      var fuzzyset = {\n\n      };\n\n      // default options\n      arr = arr || [];\n      fuzzyset.gramSizeLower = gramSizeLower || 2;\n      fuzzyset.gramSizeUpper = gramSizeUpper || 3;\n      fuzzyset.useLevenshtein = (typeof useLevenshtein !== 'boolean') ? true : useLevenshtein;\n\n      // define all the object functions and attributes\n      fuzzyset.exactSet = {};\n      fuzzyset.matchDict = {};\n      fuzzyset.items = {};\n\n      // helper functions\n      var levenshtein = function(str1, str2) {\n          var current = [], prev, value;\n\n          for (var i = 0; i <= str2.length; i++)\n              for (var j = 0; j <= str1.length; j++) {\n              if (i && j)\n                  if (str1.charAt(j - 1) === str2.charAt(i - 1))\n                  value = prev;\n                  else\n                  value = Math.min(current[j], current[j - 1], prev) + 1;\n              else\n                  value = i + j;\n\n              prev = current[j];\n              current[j] = value;\n              }\n\n          return current.pop();\n      };\n\n      // return an edit distance from 0 to 1\n      var _distance = function(str1, str2) {\n          if (str1 === null && str2 === null) throw 'Trying to compare two null values';\n          if (str1 === null || str2 === null) return 0;\n          str1 = String(str1); str2 = String(str2);\n\n          var distance = levenshtein(str1, str2);\n          if (str1.length > str2.length) {\n              return 1 - distance / str1.length;\n          } else {\n              return 1 - distance / str2.length;\n          }\n      };\n\n      // u00C0-u00FF is latin characters\n      // u0621-u064a is arabic letters\n      // u0660-u0669 is arabic numerals\n      // TODO: figure out way to do this for more languages\n      var _nonWordRe = /[^a-zA-Z0-9\\u00C0-\\u00FF\\u0621-\\u064A\\u0660-\\u0669, ]+/g;\n\n      var _iterateGrams = function(value, gramSize) {\n          gramSize = gramSize || 2;\n          var simplified = '-' + value.toLowerCase().replace(_nonWordRe, '') + '-',\n              lenDiff = gramSize - simplified.length,\n              results = [];\n          if (lenDiff > 0) {\n              for (var i = 0; i < lenDiff; ++i) {\n                  simplified += '-';\n              }\n          }\n          for (var i = 0; i < simplified.length - gramSize + 1; ++i) {\n              results.push(simplified.slice(i, i + gramSize));\n          }\n          return results;\n      };\n\n      var _gramCounter = function(value, gramSize) {\n          // return an object where key=gram, value=number of occurrences\n          gramSize = gramSize || 2;\n          var result = {},\n              grams = _iterateGrams(value, gramSize),\n              i = 0;\n          for (i; i < grams.length; ++i) {\n              if (grams[i] in result) {\n                  result[grams[i]] += 1;\n              } else {\n                  result[grams[i]] = 1;\n              }\n          }\n          return result;\n      };\n\n      // the main functions\n      fuzzyset.get = function(value, defaultValue, minMatchScore) {\n          // check for value in set, returning defaultValue or null if none found\n          if (minMatchScore === undefined) {\n              minMatchScore = .33;\n          }\n          var result = this._get(value, minMatchScore);\n          if (!result && typeof defaultValue !== 'undefined') {\n              return defaultValue;\n          }\n          return result;\n      };\n\n      fuzzyset._get = function(value, minMatchScore) {\n          var results = [];\n          // start with high gram size and if there are no results, go to lower gram sizes\n          for (var gramSize = this.gramSizeUpper; gramSize >= this.gramSizeLower; --gramSize) {\n              results = this.__get(value, gramSize, minMatchScore);\n              if (results && results.length > 0) {\n                  return results;\n              }\n          }\n          return null;\n      };\n\n      fuzzyset.__get = function(value, gramSize, minMatchScore) {\n          var normalizedValue = this._normalizeStr(value),\n              matches = {},\n              gramCounts = _gramCounter(normalizedValue, gramSize),\n              items = this.items[gramSize],\n              sumOfSquareGramCounts = 0,\n              gram,\n              gramCount,\n              i,\n              index,\n              otherGramCount;\n\n          for (gram in gramCounts) {\n              gramCount = gramCounts[gram];\n              sumOfSquareGramCounts += Math.pow(gramCount, 2);\n              if (gram in this.matchDict) {\n                  for (i = 0; i < this.matchDict[gram].length; ++i) {\n                      index = this.matchDict[gram][i][0];\n                      otherGramCount = this.matchDict[gram][i][1];\n                      if (index in matches) {\n                          matches[index] += gramCount * otherGramCount;\n                      } else {\n                          matches[index] = gramCount * otherGramCount;\n                      }\n                  }\n              }\n          }\n\n          function isEmptyObject(obj) {\n              for(var prop in obj) {\n                  if(obj.hasOwnProperty(prop))\n                      return false;\n              }\n              return true;\n          }\n\n          if (isEmptyObject(matches)) {\n              return null;\n          }\n\n          var vectorNormal = Math.sqrt(sumOfSquareGramCounts),\n              results = [],\n              matchScore;\n          // build a results list of [score, str]\n          for (var matchIndex in matches) {\n              matchScore = matches[matchIndex];\n              results.push([matchScore / (vectorNormal * items[matchIndex][0]), items[matchIndex][1]]);\n          }\n          var sortDescending = function(a, b) {\n              if (a[0] < b[0]) {\n                  return 1;\n              } else if (a[0] > b[0]) {\n                  return -1;\n              } else {\n                  return 0;\n              }\n          };\n          results.sort(sortDescending);\n          if (this.useLevenshtein) {\n              var newResults = [],\n                  endIndex = Math.min(50, results.length);\n              // truncate somewhat arbitrarily to 50\n              for (var i = 0; i < endIndex; ++i) {\n                  newResults.push([_distance(results[i][1], normalizedValue), results[i][1]]);\n              }\n              results = newResults;\n              results.sort(sortDescending);\n          }\n          newResults = [];\n          results.forEach(function(scoreWordPair) {\n              if (scoreWordPair[0] >= minMatchScore) {\n                  newResults.push([scoreWordPair[0], this.exactSet[scoreWordPair[1]]]);\n              }\n          }.bind(this));\n          return newResults;\n      };\n\n      fuzzyset.add = function(value) {\n          var normalizedValue = this._normalizeStr(value);\n          if (normalizedValue in this.exactSet) {\n              return false;\n          }\n\n          var i = this.gramSizeLower;\n          for (i; i < this.gramSizeUpper + 1; ++i) {\n              this._add(value, i);\n          }\n      };\n\n      fuzzyset._add = function(value, gramSize) {\n          var normalizedValue = this._normalizeStr(value),\n              items = this.items[gramSize] || [],\n              index = items.length;\n\n          items.push(0);\n          var gramCounts = _gramCounter(normalizedValue, gramSize),\n              sumOfSquareGramCounts = 0,\n              gram, gramCount;\n          for (gram in gramCounts) {\n              gramCount = gramCounts[gram];\n              sumOfSquareGramCounts += Math.pow(gramCount, 2);\n              if (gram in this.matchDict) {\n                  this.matchDict[gram].push([index, gramCount]);\n              } else {\n                  this.matchDict[gram] = [[index, gramCount]];\n              }\n          }\n          var vectorNormal = Math.sqrt(sumOfSquareGramCounts);\n          items[index] = [vectorNormal, normalizedValue];\n          this.items[gramSize] = items;\n          this.exactSet[normalizedValue] = value;\n      };\n\n      fuzzyset._normalizeStr = function(str) {\n          if (Object.prototype.toString.call(str) !== '[object String]') throw 'Must use a string as argument to FuzzySet functions';\n          return str.toLowerCase();\n      };\n\n      // return length of items in set\n      fuzzyset.length = function() {\n          var count = 0,\n              prop;\n          for (prop in this.exactSet) {\n              if (this.exactSet.hasOwnProperty(prop)) {\n                  count += 1;\n              }\n          }\n          return count;\n      };\n\n      // return is set is empty\n      fuzzyset.isEmpty = function() {\n          for (var prop in this.exactSet) {\n              if (this.exactSet.hasOwnProperty(prop)) {\n                  return false;\n              }\n          }\n          return true;\n      };\n\n      // return list of values loaded into set\n      fuzzyset.values = function() {\n          var values = [],\n              prop;\n          for (prop in this.exactSet) {\n              if (this.exactSet.hasOwnProperty(prop)) {\n                  values.push(this.exactSet[prop]);\n              }\n          }\n          return values;\n      };\n\n\n      // initialization\n      var i = fuzzyset.gramSizeLower;\n      for (i; i < fuzzyset.gramSizeUpper + 1; ++i) {\n          fuzzyset.items[i] = [];\n      }\n      // add all the items to the set\n      for (i = 0; i < arr.length; ++i) {\n          fuzzyset.add(arr[i]);\n      }\n\n      return fuzzyset;\n  };\n\n  return FuzzySet;\n\n}());\n"]}