{"version":3,"file":"sifter.mjs","sources":["src/diacritics.js","src/utils.js","src/sifter.js"],"sourcesContent":["export default {\n    'a': '[aḀḁĂăÂâǍǎȺⱥȦȧẠạÄäÀàÁáĀāÃãÅåąĄÃąĄ]',\n    'b': '[b␢βΒB฿𐌁ᛒ]',\n    'c': '[cĆćĈĉČčĊċC̄c̄ÇçḈḉȻȼƇƈɕᴄＣｃ]',\n    'd': '[dĎďḊḋḐḑḌḍḒḓḎḏĐđD̦d̦ƉɖƊɗƋƌᵭᶁᶑȡᴅＤｄð]',\n    'e': '[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀềỄễỂểḜḝḖḗḔḕȆȇẸẹỆệⱸᴇＥｅɘǝƏƐε]',\n    'f': '[fƑƒḞḟ]',\n    'g': '[gɢ₲ǤǥĜĝĞğĢģƓɠĠġ]',\n    'h': '[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]',\n    'i': '[iÍíÌìĬĭÎîǏǐÏïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪＩｉ]',\n    'j': '[jȷĴĵɈɉʝɟʲ]',\n    'k': '[kƘƙꝀꝁḰḱǨǩḲḳḴḵκϰ₭]',\n    'l': '[lŁłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟＬｌ]',\n    'n': '[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ƝɲȠƞᵰᶇɳȵɴＮｎŊŋ]',\n    'o': '[oØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌōÕõǪǫȌȍՕօ]',\n    'p': '[pṔṕṖṗⱣᵽƤƥᵱ]',\n    'q': '[qꝖꝗʠɊɋꝘꝙq̃]',\n    'r': '[rŔŕɌɍŘřŖŗṘṙȐȑȒȓṚṛⱤɽ]',\n    's': '[sŚśṠṡṢṣꞨꞩŜŝŠšŞşȘșS̈s̈]',\n    't': '[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]',\n    'u': '[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]',\n    'v': '[vṼṽṾṿƲʋꝞꝟⱱʋ]',\n    'w': '[wẂẃẀẁŴŵẄẅẆẇẈẉ]',\n    'x': '[xẌẍẊẋχ]',\n    'y': '[yÝýỲỳŶŷŸÿỸỹẎẏỴỵɎɏƳƴ]',\n    'z': '[zŹźẐẑŽžŻżẒẓẔẕƵƶ]'\n};\n","import DIACRITICS from './diacritics'\n\nvar asciifold = (function() {\n    var i, n, k, chunk;\n    var foreignletters = '';\n    var lookup = {};\n    for (k in DIACRITICS) {\n        if (DIACRITICS.hasOwnProperty(k)) {\n            chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1);\n            foreignletters += chunk;\n            for (i = 0, n = chunk.length; i < n; i++) {\n                lookup[chunk.charAt(i)] = k;\n            }\n        }\n    }\n    var regexp = new RegExp('[' +  foreignletters + ']', 'g');\n    return function(str) {\n        return str.replace(regexp, function(foreignletter) {\n            return lookup[foreignletter];\n        }).toLowerCase();\n    };\n})();\n\nexport function cmp(a, b) {\n    if (typeof a === 'number' && typeof b === 'number') {\n        return a > b ? 1 : (a < b ? -1 : 0);\n    }\n    a = asciifold(String(a || ''));\n    b = asciifold(String(b || ''));\n    if (a > b) return 1;\n    if (b > a) return -1;\n    return 0;\n}\n\nexport function extend(a, b) {\n    var i, n, k, object;\n    for (i = 1, n = arguments.length; i < n; i++) {\n        object = arguments[i];\n        if (!object) continue;\n        for (k in object) {\n            if (object.hasOwnProperty(k)) {\n                a[k] = object[k];\n            }\n        }\n    }\n    return a;\n}\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @param  {Boolean} nesting Handle nesting or not\n * @return {Object}          The resolved property value\n */\nexport function getattr(obj, name, nesting) {\n    if (!obj || !name) return;\n    if (!nesting) return obj[name];\n    var names = name.split('.');\n    while(names.length && (obj = obj[names.shift()]));\n    return obj;\n}\n\nexport function trim(str) {\n    return (str + '').replace(/^\\s+|\\s+$|/g, '');\n}\n\nexport function escapeRegex(str) {\n    return (str + '').replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\n}\n\nexport const isArray = Array.isArray || (typeof $ !== 'undefined' && $.isArray) || function(object) {\n    return Object.prototype.toString.call(object) === '[object Array]';\n};\n","/**\n * sifter.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\n/**\n * Textually searches arrays and hashes of objects\n * by property (or multiple properties). Designed\n * specifically for autocomplete.\n *\n * @constructor\n * @param {array|object} items\n * @param {object} items\n */\nimport {cmp, extend, escapeRegex, isArray, getattr, trim} from './utils';\nimport DIACRITICS from './diacritics';\n\n\nexport default function Sifter(items, settings) {\n    this.items = items;\n    this.settings = settings || {diacritics: true};\n}\n\n/**\n * Splits a search string into an array of individual\n * regexps to be used to match results.\n *\n * @param {string} query\n * @returns {array}\n */\nSifter.prototype.tokenize = function(query) {\n    query = trim(String(query || '').toLowerCase());\n    if (!query || !query.length) return [];\n\n    var i, n, regex, letter;\n    var tokens = [];\n    var words = query.split(/ +/);\n\n    for (i = 0, n = words.length; i < n; i++) {\n        regex = escapeRegex(words[i]);\n        if (this.settings.diacritics) {\n            for (letter in DIACRITICS) {\n                if (DIACRITICS.hasOwnProperty(letter)) {\n                    regex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]);\n                }\n            }\n        }\n        tokens.push({\n            string : words[i],\n            regex  : new RegExp(regex, 'i')\n        });\n    }\n\n    return tokens;\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * this.iterator(this.items, function(item, id) {\n *    // invoked for each item\n * });\n * ```\n *\n * @param {array|object} object\n */\nSifter.prototype.iterator = function(object, callback) {\n    var iterator;\n    if (isArray(object)) {\n        iterator = Array.prototype.forEach || function(callback) {\n            for (var i = 0, n = this.length; i < n; i++) {\n                callback(this[i], i, this);\n            }\n        };\n    } else {\n        iterator = function(callback) {\n            for (var key in this) {\n                if (this.hasOwnProperty(key)) {\n                    callback(this[key], key, this);\n                }\n            }\n        };\n    }\n\n    iterator.apply(object, [callback]);\n};\n\n/**\n * Returns a function to be used to score individual results.\n *\n * Good matches will have a higher score than poor matches.\n * If an item is not a match, 0 will be returned by the function.\n *\n * @param {object|string} search\n * @param {object} options (optional)\n * @returns {function}\n */\nSifter.prototype.getScoreFunction = function(search, options) {\n    var self, fields, tokens, tokenCount, nesting;\n\n    self       = this;\n    search     = self.prepareSearch(search, options);\n    tokens     = search.tokens;\n    fields     = search.options.fields;\n    tokenCount = tokens.length;\n    nesting    = search.options.nesting;\n\n    /**\n     * Calculates how close of a match the\n     * given value is against a search token.\n     *\n     * @param {mixed} value\n     * @param {object} token\n     * @return {number}\n     */\n     function scoreValue(value, token) {\n        var score, pos;\n\n        if (!value) return 0;\n        value = String(value || '');\n        pos = value.search(token.regex);\n        if (pos === -1) return 0;\n        score = token.string.length / value.length;\n        if (pos === 0) score += 0.5;\n        return score;\n    }\n\n    /**\n     * Calculates the score of an object\n     * against the search query.\n     *\n     * @param {object} token\n     * @param {object} data\n     * @return {number}\n     */\n    var scoreObject = (function() {\n        var fieldCount = fields.length;\n        if (!fieldCount) {\n            return function() { return 0; };\n        }\n        if (fieldCount === 1) {\n            return function(token, data) {\n                return scoreValue(getattr(data, fields[0], nesting), token);\n            };\n        }\n        return function(token, data) {\n            for (var i = 0, sum = 0; i < fieldCount; i++) {\n                sum += scoreValue(getattr(data, fields[i], nesting), token);\n            }\n            return sum / fieldCount;\n        };\n    })();\n\n    if (!tokenCount) {\n        return function() { return 0; };\n    }\n    if (tokenCount === 1) {\n        return function(data) {\n            return scoreObject(tokens[0], data);\n        };\n    }\n\n    if (search.options.conjunction === 'and') {\n        return function(data) {\n            var score;\n            for (var i = 0, sum = 0; i < tokenCount; i++) {\n                score = scoreObject(tokens[i], data);\n                if (score <= 0) return 0;\n                sum += score;\n            }\n            return sum / tokenCount;\n        };\n    } else {\n        return function(data) {\n            for (var i = 0, sum = 0; i < tokenCount; i++) {\n                sum += scoreObject(tokens[i], data);\n            }\n            return sum / tokenCount;\n        };\n    }\n};\n\n/**\n * Returns a function that can be used to compare two\n * results, for sorting purposes. If no sorting should\n * be performed, `null` will be returned.\n *\n * @param {string|object} search\n * @param {object} options\n * @return function(a,b)\n */\nSifter.prototype.getSortFunction = function(search, options) {\n    var i, n, self, field, fields, fieldsCount, multiplier, multipliers, sort, implicitScore;\n\n    self   = this;\n    search = self.prepareSearch(search, options);\n    sort   = (!search.query && options.sortEmpty) || options.sort;\n\n    /**\n     * Fetches the specified sort field value\n     * from a search result item.\n     *\n     * @param  {string} name\n     * @param  {object} result\n     * @return {mixed}\n     */\n    function getField(name, result) {\n        if (name === '$score') return result.score;\n        return getattr(self.items[result.id], name, options.nesting);\n    }\n\n    // parse options\n    fields = [];\n    if (sort) {\n        for (i = 0, n = sort.length; i < n; i++) {\n            if (search.query || sort[i].field !== '$score') {\n                fields.push(sort[i]);\n            }\n        }\n    }\n\n    // the \"$score\" field is implied to be the primary\n    // sort field, unless it's manually specified\n    if (search.query) {\n        implicitScore = true;\n        for (i = 0, n = fields.length; i < n; i++) {\n            if (fields[i].field === '$score') {\n                implicitScore = false;\n                break;\n            }\n        }\n        if (implicitScore) {\n            fields.unshift({field: '$score', direction: 'desc'});\n        }\n    } else {\n        for (i = 0, n = fields.length; i < n; i++) {\n            if (fields[i].field === '$score') {\n                fields.splice(i, 1);\n                break;\n            }\n        }\n    }\n\n    multipliers = [];\n    for (i = 0, n = fields.length; i < n; i++) {\n        multipliers.push(fields[i].direction === 'desc' ? -1 : 1);\n    }\n\n    // build function\n    fieldsCount = fields.length;\n    if (!fieldsCount) {\n        return null;\n    } else if (fieldsCount === 1) {\n        field = fields[0].field;\n        multiplier = multipliers[0];\n        return function(a, b) {\n            return multiplier * cmp(\n                getField(field, a),\n                getField(field, b)\n            );\n        };\n    } else {\n        return function(a, b) {\n            var i, result, field;\n            for (i = 0; i < fieldsCount; i++) {\n                field = fields[i].field;\n                result = multipliers[i] * cmp(\n                    getField(field, a),\n                    getField(field, b)\n                );\n                if (result) return result;\n            }\n            return 0;\n        };\n    }\n};\n\n/**\n * Parses a search query and returns an object\n * with tokens and fields ready to be populated\n * with results.\n *\n * @param {string} query\n * @param {object} options\n * @returns {object}\n */\nSifter.prototype.prepareSearch = function(query, options) {\n    if (typeof query === 'object') return query;\n\n    options = extend({}, options);\n\n    var optionFields     = options.fields;\n    var optionSort       = options.sort;\n    var optionSortEmpty = options.sortEmpty;\n\n    if (optionFields && !isArray(optionFields)) options.fields = [optionFields];\n    if (optionSort && !isArray(optionSort)) options.sort = [optionSort];\n    if (optionSortEmpty && !isArray(optionSortEmpty)) options.sortEmpty = [optionSortEmpty];\n\n    return {\n        options : options,\n        query   : String(query || '').toLowerCase(),\n        tokens  : this.tokenize(query),\n        total   : 0,\n        items   : []\n    };\n};\n\n/**\n * Searches through all items and returns a sorted array of matches.\n *\n * The `options` parameter can contain:\n *\n *   - fields {string|array}\n *   - sort {array}\n *   - score {function}\n *   - filter {bool}\n *   - limit {integer}\n *\n * Returns an object containing:\n *\n *   - options {object}\n *   - query {string}\n *   - tokens {array}\n *   - total {int}\n *   - items {array}\n *\n * @param {string} query\n * @param {object} options\n * @returns {object}\n */\nSifter.prototype.search = function(query, options) {\n    var self = this, score, search;\n    var fnSort;\n    var fnScore;\n\n    search  = this.prepareSearch(query, options);\n    options = search.options;\n    query   = search.query;\n\n    // generate result scoring function\n    fnScore = options.score || self.getScoreFunction(search);\n\n    // perform search and sort\n    if (query.length) {\n        self.iterator(self.items, function(item, id) {\n            score = fnScore(item);\n            if (options.filter === false || score > 0) {\n                search.items.push({'score': score, 'id': id});\n            }\n        });\n    } else {\n        self.iterator(self.items, function(item, id) {\n            search.items.push({'score': 1, 'id': id});\n        });\n    }\n\n    fnSort = self.getSortFunction(search, options);\n    if (fnSort) search.items.sort(fnSort);\n\n    // apply limits\n    search.total = search.items.length;\n    if (typeof options.limit === 'number') {\n        search.items = search.items.slice(0, options.limit);\n    }\n\n    return search;\n};\n"],"names":[],"mappings":"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"}