{"version":3,"sources":["jsdelivr-header.js","/npm/fuzzy-search-mongoose@1.5.0/index.js"],"names":[],"mappings":"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","file":"/npm/fuzzy-search-mongoose@1.5.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/fuzzy-search-mongoose@1.5.0/index.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\nvar mongoose = require('mongoose');\nvar Model = mongoose.Model;\nvar replaceLanguageCharacters = require('./helpers/languageCharacters');\n\n/**\n * Reusable constant values\n * @typedef {Object} constants\n * @property {number} DEFAULT_MIN_SIZE - Default min size for anagrams.\n * @property {boolean} DEFAULT_PREFIX_ONLY - Whether return ngrams from start of word or not\n */\nvar constants = {\n  DEFAULT_MIN_SIZE: 2,\n  DEFAULT_PREFIX_ONLY: false\n}\n\n/* istanbul ignore next */\nfunction parseArguments(args, i1, i2) {\n  var options = {};\n  var callback = null;\n\n  if (args[i1] && isFunction(args[i1])) {\n    callback = args[i1];\n  } else if (args[i1] && isObject(args[i1])) {\n    options = args[i1];\n  }\n\n  if (!callback && typeof args[i2] === 'function') {\n    callback = args[i2];\n  }\n\n  return {\n    options,\n    callback\n  };\n}\n\n/**\n * Creates sequence of characters taken from the given string.\n * @param {string} text - The string for the sequence.\n * @param {number} minSize - Lower limit to start creating sequence.\n * @param {boolean} prefixOnly -Only return ngrams from start of word.\n * @return {Array} The sequence of characters in Array of Strings.\n */\nfunction nGrams(text, minSize, prefixOnly) {\n  if (minSize == null) {\n    minSize = constants.DEFAULT_MIN_SIZE;\n  }\n\n  var set = new Set();\n  var index;\n\n  if (minSize <= 0) {\n    throw new Error('minSize must be greater than 0.');\n  }\n\n  if (!text) {\n    return [];\n  }\n\n  text = text.slice ? text.toLowerCase() : String(text);\n  index = prefixOnly ? 0 : text.length - minSize + 1;\n\n  if (text.length <= minSize) {\n    return [text];\n  }\n\n  if (!prefixOnly && index < 1) {\n    return [];\n  }\n\n  if (prefixOnly) {\n    while (minSize < text.length + 1) {\n      set.add(text.slice(index, index + minSize));\n      minSize++;\n    }\n\n    return Array.from(set);\n  }\n\n  while (minSize <= text.length + 1) {\n    if (index !== 0) {\n      set.add(text.slice(--index, index + minSize));\n    } else {\n      minSize++;\n      index = text.length - minSize + 1;\n    }\n  }\n\n  return Array.from(set);\n}\n\n/**\n * Creates sequence of each word from the given string.\n * @param {string} text - The string for the sequence.\n * @param {boolean} escapeSpecialCharacters - Escape special characters from the given string.\n * @param {number} minSize - Lower limit to start creating sequence.\n * @param {boolean} prefixOnly -Only return ngrams from start of word.\n * @return {Array} The sequence of characters in Array of Strings.\n */\nfunction makeNGrams(text, escapeSpecialCharacters, minSize, prefixOnly) {\n  if (!text) {\n    return [];\n  }\n\n  var result = text\n    .split(' ')\n    .map(function (q) {\n      return nGrams(replaceSymbols(q, escapeSpecialCharacters), minSize || constants.DEFAULT_MIN_SIZE, prefixOnly || constants.DEFAULT_PREFIX_ONLY)\n    })\n    .reduce(function (acc, arr) {\n      return acc.concat(arr);\n    }, []);\n  return Array.from(new Set(result));\n}\n\n/**\n * Removes special symbols from string.\n * @param {string} text - The string to remove the characters.\n * @param {boolean} escapeSpecialCharacters - If this value is true, it will also remove all the special characters.\n * @return {string} the given text without the special characters.\n */\nfunction replaceSymbols(text, escapeSpecialCharacters) {\n  text = text.toLowerCase();\n  if (escapeSpecialCharacters) {\n    text = text.replace(/[!\\\"#%&\\'\\(\\)\\*\\+,-\\.\\/:;<=>?@\\[\\\\\\]\\^`\\{\\|\\}~]/g, ''); // remove special characters\n  }\n  text = text.replace(/_/g, ' ');\n  text = replaceLanguageCharacters(text);\n\n  return text;\n}\n\n/* istanbul ignore next */\nfunction createSchemaObject(typeValue, options) {\n  options.type = typeValue;\n  return options;\n}\n\n/**\n * Returns if the variable is an object and if the the object is empty\n * @param {any} obj\n * @return {boolean}\n */\nfunction isObject(obj) {\n  return !!obj && obj.constructor === Object && Object.keys(obj).length > 0;\n}\n\n/**\n * Returns if the variable is a Function\n * @param {any} fn\n * @return {boolean}\n */\nfunction isFunction(fn) {\n  return !!(fn && (\"function\" === typeof fn || fn instanceof Function));\n}\n\n/**\n * Converts Object to Array\n * @param {object} object - Object to convert\n * @return {array}\n */\nfunction objectToValuesPolyfill(object) {\n  return Object.keys(object).map(function (key) {\n    return object[key];\n  });\n}\n\n/* istanbul ignore next */\nfunction addToSchema(name) {\n  return {\n    [`${name}_fuzzy`]: createSchemaObject([String], {\n      default: '',\n      index: false\n    })\n  };\n}\n\n/* istanbul ignore next */\nfunction addArrayToSchema(name) {\n  return {\n    [`${name}_fuzzy`]: createSchemaObject(mongoose.Schema.Types.Mixed, {\n      default: [],\n      index: false\n    })\n  };\n}\n\n/* istanbul ignore next */\nfunction createByFieldType(fields, strCb, objectCb, objectKeysCb) {\n  fields.forEach(function (item) {\n    if (typeof item === 'string' || item instanceof String && isFunction(strCb)) {\n      strCb(item);\n    } else if (isObject(item)) {\n      if (item.keys && isFunction(objectKeysCb)) {\n        objectKeysCb(item);\n      } else if (isFunction(objectCb)) {\n        objectCb(item);\n      }\n    } else {\n      throw new TypeError('Fields items must be String or Object.');\n    }\n  });\n}\n\n/**\n * Add the fields to the collection\n * @param {object} schema - The mongoose schema\n * @param {array} fields - The fields to add to the collection\n */\n\n/* istanbul ignore next */\nfunction createFields(schema, fields) {\n  var indexes = {};\n  var weights = {};\n\n  function strCb(item) {\n    schema.add(addToSchema(item));\n    indexes[`${item}_fuzzy`] = 'text';\n  }\n\n  function objectCb(item) {\n    schema.add(addToSchema(item.name));\n    indexes[`${item.name}_fuzzy`] = 'text';\n    if (item.weight) {\n      weights[`${item.name}_fuzzy`] = item.weight;\n    }\n  }\n\n  function objectKeysCb(item) {\n    item.keys.forEach(key => {\n      indexes[`${item.name}_fuzzy.${key}_fuzzy`] = 'text';\n    });\n    schema.add(addArrayToSchema(item.name));\n  }\n\n  createByFieldType(fields, strCb, objectCb, objectKeysCb);\n  schema.index(indexes, {\n    weights\n  });\n}\n\n/**\n * Creates nGrams for the documents\n * @param {object} attributes - Schema attributes\n * @param {array} fields\n */\n\n/* istanbul ignore next */\nfunction createNGrams(attributes, fields) {\n  function strCb(item) {\n    if (attributes[item]) {\n      attributes[`${item}_fuzzy`] = makeNGrams(attributes[item]);\n    }\n  }\n\n  function objectCb(item) {\n    if (attributes[`${item.name}`]) {\n      var escapeSpecialCharacters = item.escapeSpecialCharacters !== false;\n      attributes[`${item.name}_fuzzy`] = makeNGrams(attributes[item.name], escapeSpecialCharacters, item.minSize, item.prefixOnly);\n    }\n  }\n\n  function objectKeysCb(item) {\n    if (attributes[`${item.name}`]) {\n      var escapeSpecialCharacters = item.escapeSpecialCharacters !== false;\n      var attrs = [];\n      var obj = {};\n      let data = attributes[item.name];\n      if (!data.length) data = [data];\n      data.forEach(function (data) {\n        item.keys.forEach(function (key, index) {\n          obj = Object.assign({}, obj, {\n            [`${key}_fuzzy`]: makeNGrams(data[key], escapeSpecialCharacters, item.minSize, item.prefixOnly)\n          });\n        });\n        attrs.push(obj);\n      });\n      attributes[`${item.name}_fuzzy`] = attrs;\n    }\n  }\n\n  createByFieldType(fields, strCb, objectCb, objectKeysCb);\n}\n\n/**\n * Removes fuzzy keys from the document\n * @param {array} fields - the fields to remove\n */\n\n/* istanbul ignore next */\nfunction removeFuzzyElements(fields) {\n  return function (doc, ret, opt) {\n    function strCb(item) {\n      delete ret[`${item}_fuzzy`];\n    }\n\n    function objectCb(item) {\n      delete ret[`${item.name}_fuzzy`];\n    }\n\n    createByFieldType(fields, strCb, objectCb);\n    return ret;\n  }\n}\n\n/**\n * Plugin's main function. Creates the fuzzy fields on the collection, set's a pre save middleware to create the Ngrams for the fuzzy fields\n * and creates the instance methods `fuzzySearch` which finds the guesses.\n * @param {object} schema - Mongo Collection\n * @param {object} options - plugin options\n */\nmodule.exports = function (schema, options) {\n  if (!options || (options && !options.fields)) {\n    throw new Error('You must set at least one field for fuzzy search.');\n  }\n\n  if (!Array.isArray(options.fields)) {\n    throw new TypeError('Fields must be an array.');\n  }\n\n  options.fields.forEach(function (item) {\n    if (isObject(item) && item.keys && (!Array.isArray(item.keys) && typeof item.keys !== 'string')) {\n      throw new TypeError('Key must be an array or a string.');\n    }\n  });\n\n  createFields(schema, options.fields);\n\n  var returnOptions = {\n    transform: removeFuzzyElements(options.fields),\n    getters: true,\n    setters: true,\n    virtuals: true\n  };\n  schema.set('toObject', returnOptions);\n  schema.set('toJSON', returnOptions);\n\n  function saveMiddleware(next) {\n    if (this) {\n      createNGrams(this, options.fields);\n      next();\n    }\n  }\n\n  function updateMiddleware(next) {\n    if (this._update) {\n      createNGrams(this._update, options.fields);\n      next();\n    }\n  }\n\n  function insertMany(next, docs) {\n    docs.forEach(function (doc) {\n      createNGrams(doc, options.fields)\n    });\n    next();\n  }\n\n  schema.pre('save', saveMiddleware);\n  schema.pre('update', updateMiddleware);\n  schema.pre('updateOne', updateMiddleware);\n  schema.pre('findOneAndUpdate', updateMiddleware);\n  schema.pre('insertMany', insertMany);\n  schema.pre('updateMany', updateMiddleware);\n\n  schema.statics['fuzzySearch'] = function () {\n\n    Object.values = Object.values || objectToValuesPolyfill;\n\n    var args = Object.values(arguments);\n\n\n    if (args.length === 0 && (typeof args[0] !== 'string' || !isObject(args[0]))) {\n      throw new TypeError('Fuzzy Search: First argument is mandatory and must be a string or an object.');\n    }\n\n    var queryString = isObject(args[0]) ? args[0].query : args[0];\n\n    var checkPrefixOnly = isObject(args[0]) ? args[0].prefixOnly : constants.DEFAULT_PREFIX_ONLY;\n    var defaultNgamMinSize = isObject(args[0]) ? args[0].minSize : constants.DEFAULT_MIN_SIZE;\n    var query = makeNGrams(queryString, false, defaultNgamMinSize, checkPrefixOnly).join(' ');\n\n    var parsedArguments = parseArguments(args, 1, 2);\n    var options = parsedArguments.options;\n    var callback = parsedArguments.callback;\n\n    var search;\n\n    if (!options) {\n      search = {\n        $text: {\n          $search: query,\n        }\n      }\n    } else if (query && options) {\n      search = {\n        $and: [{\n            $text: {\n              $search: query\n            }\n          },\n          options\n        ]\n      }\n    } else if (!query) {\n\n      search = options\n\n    }\n\n\n\n    if(!query) {\n      return Model['find'].apply(this, [search, callback]);\n    }\n\n    return Model['find'].apply(this, [search, {\n      confidenceScore: {\n        $meta: \"textScore\"\n      }\n    }, {\n      sort: {\n        confidenceScore: {\n          $meta: \"textScore\"\n        }\n      }\n    }, callback]);\n\n\n\n  };\n};"]}