Comparing version 0.5.12 to 0.6.0
{ | ||
"name": "lunr.js", | ||
"version": "0.5.12", | ||
"version": "0.6.0", | ||
"main": "lunr.js", | ||
@@ -5,0 +5,0 @@ "ignore": [ |
{ | ||
"name": "lunr", | ||
"repo": "olivernn/lunr.js", | ||
"version": "0.5.12", | ||
"version": "0.6.0", | ||
"description": "Simple full-text search in your browser.", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
@@ -115,2 +115,5 @@ /*! | ||
* | ||
* The value of ref can be of any type but it _must_ be stably comparable and | ||
* orderable. | ||
* | ||
* @param {String} refName The property to use to uniquely identify the | ||
@@ -323,4 +326,11 @@ * documents in the index. | ||
// add all the documents that have this key into a set | ||
Object.keys(self.tokenStore.get(key)).forEach(function (ref) { set.add(ref) }) | ||
// ensuring that the type of key is preserved | ||
var matchingDocuments = self.tokenStore.get(key), | ||
refs = Object.keys(matchingDocuments), | ||
refsLen = refs.length | ||
for (var i = 0; i < refsLen; i++) { | ||
set.add(matchingDocuments[refs[i]].ref) | ||
} | ||
return memo.union(set) | ||
@@ -327,0 +337,0 @@ }, new lunr.SortedSet) |
@@ -198,6 +198,6 @@ /*! | ||
token = this._stack[j](token, i, tokens) | ||
if (token === void 0) break | ||
if (token === void 0 || token === '') break | ||
}; | ||
if (token !== void 0) out.push(token) | ||
if (token !== void 0 && token !== '') out.push(token) | ||
}; | ||
@@ -204,0 +204,0 @@ |
@@ -7,2 +7,26 @@ /*! | ||
/** | ||
* lunr.generateStopWordFilter builds a stopWordFilter function from the provided | ||
* list of stop words. | ||
* | ||
* The built in lunr.stopWordFilter is built using this generator and can be used | ||
* to generate custom stopWordFilters for applications or non English languages. | ||
* | ||
* @module | ||
* @param {Array} token The token to pass through the filter | ||
* @returns {Function} | ||
* @see lunr.Pipeline | ||
* @see lunr.stopWordFilter | ||
*/ | ||
lunr.generateStopWordFilter = function (stopWords) { | ||
var words = stopWords.reduce(function (memo, stopWord) { | ||
memo[stopWord] = stopWord | ||
return memo | ||
}, {}) | ||
return function (token) { | ||
if (token && words[token] !== token) return token | ||
} | ||
} | ||
/** | ||
* lunr.stopWordFilter is an English language stop word list filter, any words | ||
@@ -19,128 +43,124 @@ * contained in the list will not be passed through the filter. | ||
*/ | ||
lunr.stopWordFilter = function (token) { | ||
if (token && lunr.stopWordFilter.stopWords[token] !== token) return token; | ||
} | ||
lunr.stopWordFilter = lunr.generateStopWordFilter([ | ||
'a', | ||
'able', | ||
'about', | ||
'across', | ||
'after', | ||
'all', | ||
'almost', | ||
'also', | ||
'am', | ||
'among', | ||
'an', | ||
'and', | ||
'any', | ||
'are', | ||
'as', | ||
'at', | ||
'be', | ||
'because', | ||
'been', | ||
'but', | ||
'by', | ||
'can', | ||
'cannot', | ||
'could', | ||
'dear', | ||
'did', | ||
'do', | ||
'does', | ||
'either', | ||
'else', | ||
'ever', | ||
'every', | ||
'for', | ||
'from', | ||
'get', | ||
'got', | ||
'had', | ||
'has', | ||
'have', | ||
'he', | ||
'her', | ||
'hers', | ||
'him', | ||
'his', | ||
'how', | ||
'however', | ||
'i', | ||
'if', | ||
'in', | ||
'into', | ||
'is', | ||
'it', | ||
'its', | ||
'just', | ||
'least', | ||
'let', | ||
'like', | ||
'likely', | ||
'may', | ||
'me', | ||
'might', | ||
'most', | ||
'must', | ||
'my', | ||
'neither', | ||
'no', | ||
'nor', | ||
'not', | ||
'of', | ||
'off', | ||
'often', | ||
'on', | ||
'only', | ||
'or', | ||
'other', | ||
'our', | ||
'own', | ||
'rather', | ||
'said', | ||
'say', | ||
'says', | ||
'she', | ||
'should', | ||
'since', | ||
'so', | ||
'some', | ||
'than', | ||
'that', | ||
'the', | ||
'their', | ||
'them', | ||
'then', | ||
'there', | ||
'these', | ||
'they', | ||
'this', | ||
'tis', | ||
'to', | ||
'too', | ||
'twas', | ||
'us', | ||
'wants', | ||
'was', | ||
'we', | ||
'were', | ||
'what', | ||
'when', | ||
'where', | ||
'which', | ||
'while', | ||
'who', | ||
'whom', | ||
'why', | ||
'will', | ||
'with', | ||
'would', | ||
'yet', | ||
'you', | ||
'your' | ||
]) | ||
lunr.stopWordFilter.stopWords = { | ||
'a': 'a', | ||
'able': 'able', | ||
'about': 'about', | ||
'across': 'across', | ||
'after': 'after', | ||
'all': 'all', | ||
'almost': 'almost', | ||
'also': 'also', | ||
'am': 'am', | ||
'among': 'among', | ||
'an': 'an', | ||
'and': 'and', | ||
'any': 'any', | ||
'are': 'are', | ||
'as': 'as', | ||
'at': 'at', | ||
'be': 'be', | ||
'because': 'because', | ||
'been': 'been', | ||
'but': 'but', | ||
'by': 'by', | ||
'can': 'can', | ||
'cannot': 'cannot', | ||
'could': 'could', | ||
'dear': 'dear', | ||
'did': 'did', | ||
'do': 'do', | ||
'does': 'does', | ||
'either': 'either', | ||
'else': 'else', | ||
'ever': 'ever', | ||
'every': 'every', | ||
'for': 'for', | ||
'from': 'from', | ||
'get': 'get', | ||
'got': 'got', | ||
'had': 'had', | ||
'has': 'has', | ||
'have': 'have', | ||
'he': 'he', | ||
'her': 'her', | ||
'hers': 'hers', | ||
'him': 'him', | ||
'his': 'his', | ||
'how': 'how', | ||
'however': 'however', | ||
'i': 'i', | ||
'if': 'if', | ||
'in': 'in', | ||
'into': 'into', | ||
'is': 'is', | ||
'it': 'it', | ||
'its': 'its', | ||
'just': 'just', | ||
'least': 'least', | ||
'let': 'let', | ||
'like': 'like', | ||
'likely': 'likely', | ||
'may': 'may', | ||
'me': 'me', | ||
'might': 'might', | ||
'most': 'most', | ||
'must': 'must', | ||
'my': 'my', | ||
'neither': 'neither', | ||
'no': 'no', | ||
'nor': 'nor', | ||
'not': 'not', | ||
'of': 'of', | ||
'off': 'off', | ||
'often': 'often', | ||
'on': 'on', | ||
'only': 'only', | ||
'or': 'or', | ||
'other': 'other', | ||
'our': 'our', | ||
'own': 'own', | ||
'rather': 'rather', | ||
'said': 'said', | ||
'say': 'say', | ||
'says': 'says', | ||
'she': 'she', | ||
'should': 'should', | ||
'since': 'since', | ||
'so': 'so', | ||
'some': 'some', | ||
'than': 'than', | ||
'that': 'that', | ||
'the': 'the', | ||
'their': 'their', | ||
'them': 'them', | ||
'then': 'then', | ||
'there': 'there', | ||
'these': 'these', | ||
'they': 'they', | ||
'this': 'this', | ||
'tis': 'tis', | ||
'to': 'to', | ||
'too': 'too', | ||
'twas': 'twas', | ||
'us': 'us', | ||
'wants': 'wants', | ||
'was': 'was', | ||
'we': 'we', | ||
'were': 'were', | ||
'what': 'what', | ||
'when': 'when', | ||
'where': 'where', | ||
'which': 'which', | ||
'while': 'while', | ||
'who': 'who', | ||
'whom': 'whom', | ||
'why': 'why', | ||
'will': 'will', | ||
'with': 'with', | ||
'would': 'would', | ||
'yet': 'yet', | ||
'you': 'you', | ||
'your': 'your' | ||
} | ||
lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') |
@@ -49,3 +49,3 @@ /*! | ||
var root = root || this.root, | ||
key = token[0], | ||
key = token.charAt(0), | ||
rest = token.slice(1) | ||
@@ -80,5 +80,5 @@ | ||
for (var i = 0; i < token.length; i++) { | ||
if (!node[token[i]]) return false | ||
if (!node[token.charAt(i)]) return false | ||
node = node[token[i]] | ||
node = node[token.charAt(i)] | ||
} | ||
@@ -107,5 +107,5 @@ | ||
for (var i = 0; i < token.length; i++) { | ||
if (!node[token[i]]) return {} | ||
if (!node[token.charAt(i)]) return {} | ||
node = node[token[i]] | ||
node = node[token.charAt(i)] | ||
} | ||
@@ -152,4 +152,4 @@ | ||
for (var i = 0; i < token.length; i++) { | ||
if (!(token[i] in node)) return | ||
node = node[token[i]] | ||
if (!(token.charAt(i) in node)) return | ||
node = node[token.charAt(i)] | ||
} | ||
@@ -197,2 +197,1 @@ | ||
} | ||
@@ -8,6 +8,8 @@ /*! | ||
* A function for splitting a string into tokens ready to be inserted into | ||
* the search index. | ||
* the search index. Uses `lunr.tokenizer.seperator` to split strings, change | ||
* the value of this property to change how strings are split into tokens. | ||
* | ||
* @module | ||
* @param {String} obj The string to convert into tokens | ||
* @see lunr.tokenizer.seperator | ||
* @returns {Array} | ||
@@ -17,6 +19,14 @@ */ | ||
if (!arguments.length || obj == null || obj == undefined) return [] | ||
if (Array.isArray(obj)) return obj.map(function (t) { return t.toLowerCase() }) | ||
if (Array.isArray(obj)) return obj.map(function (t) { return lunr.utils.asString(t).toLowerCase() }) | ||
return obj.toString().trim().toLowerCase().split(/[\s\-]+/) | ||
return obj.toString().trim().toLowerCase().split(lunr.tokenizer.seperator) | ||
} | ||
/** | ||
* The sperator used to split a string into tokens. Override this property to change the behaviour of | ||
* `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. | ||
* | ||
* @static | ||
* @see lunr.tokenizer | ||
*/ | ||
lunr.tokenizer.seperator = /[\s\-]+/ |
@@ -21,7 +21,5 @@ /*! | ||
lunr.trimmer = function (token) { | ||
var result = token.replace(/^\W+/, '') | ||
.replace(/\W+$/, '') | ||
return result === '' ? undefined : result | ||
return token.replace(/^\W+/, '').replace(/\W+$/, '') | ||
} | ||
lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') |
@@ -25,1 +25,19 @@ /*! | ||
/** | ||
* Convert an object to a string. | ||
* | ||
* In the case of `null` and `undefined` the function returns | ||
* the empty string, in all other cases the result of calling | ||
* `toString` on the passed object is returned. | ||
* | ||
* @param {Any} obj The object to convert to a string. | ||
* @return {String} string representation of the passed object. | ||
* @memberOf Utils | ||
*/ | ||
lunr.utils.asString = function (obj) { | ||
if (obj === void 0 || obj === null) { | ||
return "" | ||
} else { | ||
return obj.toString() | ||
} | ||
} |
343
lunr.js
/** | ||
* lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.12 | ||
* lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.6.0 | ||
* Copyright (C) 2015 Oliver Nightingale | ||
@@ -59,3 +59,3 @@ * MIT Licensed | ||
lunr.version = "0.5.12" | ||
lunr.version = "0.6.0" | ||
/*! | ||
@@ -85,2 +85,20 @@ * lunr.utils | ||
/** | ||
* Convert an object to a string. | ||
* | ||
* In the case of `null` and `undefined` the function returns | ||
* the empty string, in all other cases the result of calling | ||
* `toString` on the passed object is returned. | ||
* | ||
* @param {Any} obj The object to convert to a string. | ||
* @return {String} string representation of the passed object. | ||
* @memberOf Utils | ||
*/ | ||
lunr.utils.asString = function (obj) { | ||
if (obj === void 0 || obj === null) { | ||
return "" | ||
} else { | ||
return obj.toString() | ||
} | ||
} | ||
/*! | ||
@@ -175,6 +193,8 @@ * lunr.EventEmitter | ||
* A function for splitting a string into tokens ready to be inserted into | ||
* the search index. | ||
* the search index. Uses `lunr.tokenizer.seperator` to split strings, change | ||
* the value of this property to change how strings are split into tokens. | ||
* | ||
* @module | ||
* @param {String} obj The string to convert into tokens | ||
* @see lunr.tokenizer.seperator | ||
* @returns {Array} | ||
@@ -184,7 +204,15 @@ */ | ||
if (!arguments.length || obj == null || obj == undefined) return [] | ||
if (Array.isArray(obj)) return obj.map(function (t) { return t.toLowerCase() }) | ||
if (Array.isArray(obj)) return obj.map(function (t) { return lunr.utils.asString(t).toLowerCase() }) | ||
return obj.toString().trim().toLowerCase().split(/[\s\-]+/) | ||
return obj.toString().trim().toLowerCase().split(lunr.tokenizer.seperator) | ||
} | ||
/** | ||
* The sperator used to split a string into tokens. Override this property to change the behaviour of | ||
* `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens. | ||
* | ||
* @static | ||
* @see lunr.tokenizer | ||
*/ | ||
lunr.tokenizer.seperator = /[\s\-]+/ | ||
/*! | ||
@@ -387,6 +415,6 @@ * lunr.Pipeline | ||
token = this._stack[j](token, i, tokens) | ||
if (token === void 0) break | ||
if (token === void 0 || token === '') break | ||
}; | ||
if (token !== void 0) out.push(token) | ||
if (token !== void 0 && token !== '') out.push(token) | ||
}; | ||
@@ -906,2 +934,5 @@ | ||
* | ||
* The value of ref can be of any type but it _must_ be stably comparable and | ||
* orderable. | ||
* | ||
* @param {String} refName The property to use to uniquely identify the | ||
@@ -1114,4 +1145,11 @@ * documents in the index. | ||
// add all the documents that have this key into a set | ||
Object.keys(self.tokenStore.get(key)).forEach(function (ref) { set.add(ref) }) | ||
// ensuring that the type of key is preserved | ||
var matchingDocuments = self.tokenStore.get(key), | ||
refs = Object.keys(matchingDocuments), | ||
refsLen = refs.length | ||
for (var i = 0; i < refsLen; i++) { | ||
set.add(matchingDocuments[refs[i]].ref) | ||
} | ||
return memo.union(set) | ||
@@ -1535,2 +1573,26 @@ }, new lunr.SortedSet) | ||
/** | ||
* lunr.generateStopWordFilter builds a stopWordFilter function from the provided | ||
* list of stop words. | ||
* | ||
* The built in lunr.stopWordFilter is built using this generator and can be used | ||
* to generate custom stopWordFilters for applications or non English languages. | ||
* | ||
* @module | ||
* @param {Array} token The token to pass through the filter | ||
* @returns {Function} | ||
* @see lunr.Pipeline | ||
* @see lunr.stopWordFilter | ||
*/ | ||
lunr.generateStopWordFilter = function (stopWords) { | ||
var words = stopWords.reduce(function (memo, stopWord) { | ||
memo[stopWord] = stopWord | ||
return memo | ||
}, {}) | ||
return function (token) { | ||
if (token && words[token] !== token) return token | ||
} | ||
} | ||
/** | ||
* lunr.stopWordFilter is an English language stop word list filter, any words | ||
@@ -1547,128 +1609,124 @@ * contained in the list will not be passed through the filter. | ||
*/ | ||
lunr.stopWordFilter = function (token) { | ||
if (token && lunr.stopWordFilter.stopWords[token] !== token) return token; | ||
} | ||
lunr.stopWordFilter = lunr.generateStopWordFilter([ | ||
'a', | ||
'able', | ||
'about', | ||
'across', | ||
'after', | ||
'all', | ||
'almost', | ||
'also', | ||
'am', | ||
'among', | ||
'an', | ||
'and', | ||
'any', | ||
'are', | ||
'as', | ||
'at', | ||
'be', | ||
'because', | ||
'been', | ||
'but', | ||
'by', | ||
'can', | ||
'cannot', | ||
'could', | ||
'dear', | ||
'did', | ||
'do', | ||
'does', | ||
'either', | ||
'else', | ||
'ever', | ||
'every', | ||
'for', | ||
'from', | ||
'get', | ||
'got', | ||
'had', | ||
'has', | ||
'have', | ||
'he', | ||
'her', | ||
'hers', | ||
'him', | ||
'his', | ||
'how', | ||
'however', | ||
'i', | ||
'if', | ||
'in', | ||
'into', | ||
'is', | ||
'it', | ||
'its', | ||
'just', | ||
'least', | ||
'let', | ||
'like', | ||
'likely', | ||
'may', | ||
'me', | ||
'might', | ||
'most', | ||
'must', | ||
'my', | ||
'neither', | ||
'no', | ||
'nor', | ||
'not', | ||
'of', | ||
'off', | ||
'often', | ||
'on', | ||
'only', | ||
'or', | ||
'other', | ||
'our', | ||
'own', | ||
'rather', | ||
'said', | ||
'say', | ||
'says', | ||
'she', | ||
'should', | ||
'since', | ||
'so', | ||
'some', | ||
'than', | ||
'that', | ||
'the', | ||
'their', | ||
'them', | ||
'then', | ||
'there', | ||
'these', | ||
'they', | ||
'this', | ||
'tis', | ||
'to', | ||
'too', | ||
'twas', | ||
'us', | ||
'wants', | ||
'was', | ||
'we', | ||
'were', | ||
'what', | ||
'when', | ||
'where', | ||
'which', | ||
'while', | ||
'who', | ||
'whom', | ||
'why', | ||
'will', | ||
'with', | ||
'would', | ||
'yet', | ||
'you', | ||
'your' | ||
]) | ||
lunr.stopWordFilter.stopWords = { | ||
'a': 'a', | ||
'able': 'able', | ||
'about': 'about', | ||
'across': 'across', | ||
'after': 'after', | ||
'all': 'all', | ||
'almost': 'almost', | ||
'also': 'also', | ||
'am': 'am', | ||
'among': 'among', | ||
'an': 'an', | ||
'and': 'and', | ||
'any': 'any', | ||
'are': 'are', | ||
'as': 'as', | ||
'at': 'at', | ||
'be': 'be', | ||
'because': 'because', | ||
'been': 'been', | ||
'but': 'but', | ||
'by': 'by', | ||
'can': 'can', | ||
'cannot': 'cannot', | ||
'could': 'could', | ||
'dear': 'dear', | ||
'did': 'did', | ||
'do': 'do', | ||
'does': 'does', | ||
'either': 'either', | ||
'else': 'else', | ||
'ever': 'ever', | ||
'every': 'every', | ||
'for': 'for', | ||
'from': 'from', | ||
'get': 'get', | ||
'got': 'got', | ||
'had': 'had', | ||
'has': 'has', | ||
'have': 'have', | ||
'he': 'he', | ||
'her': 'her', | ||
'hers': 'hers', | ||
'him': 'him', | ||
'his': 'his', | ||
'how': 'how', | ||
'however': 'however', | ||
'i': 'i', | ||
'if': 'if', | ||
'in': 'in', | ||
'into': 'into', | ||
'is': 'is', | ||
'it': 'it', | ||
'its': 'its', | ||
'just': 'just', | ||
'least': 'least', | ||
'let': 'let', | ||
'like': 'like', | ||
'likely': 'likely', | ||
'may': 'may', | ||
'me': 'me', | ||
'might': 'might', | ||
'most': 'most', | ||
'must': 'must', | ||
'my': 'my', | ||
'neither': 'neither', | ||
'no': 'no', | ||
'nor': 'nor', | ||
'not': 'not', | ||
'of': 'of', | ||
'off': 'off', | ||
'often': 'often', | ||
'on': 'on', | ||
'only': 'only', | ||
'or': 'or', | ||
'other': 'other', | ||
'our': 'our', | ||
'own': 'own', | ||
'rather': 'rather', | ||
'said': 'said', | ||
'say': 'say', | ||
'says': 'says', | ||
'she': 'she', | ||
'should': 'should', | ||
'since': 'since', | ||
'so': 'so', | ||
'some': 'some', | ||
'than': 'than', | ||
'that': 'that', | ||
'the': 'the', | ||
'their': 'their', | ||
'them': 'them', | ||
'then': 'then', | ||
'there': 'there', | ||
'these': 'these', | ||
'they': 'they', | ||
'this': 'this', | ||
'tis': 'tis', | ||
'to': 'to', | ||
'too': 'too', | ||
'twas': 'twas', | ||
'us': 'us', | ||
'wants': 'wants', | ||
'was': 'was', | ||
'we': 'we', | ||
'were': 'were', | ||
'what': 'what', | ||
'when': 'when', | ||
'where': 'where', | ||
'which': 'which', | ||
'while': 'while', | ||
'who': 'who', | ||
'whom': 'whom', | ||
'why': 'why', | ||
'will': 'will', | ||
'with': 'with', | ||
'would': 'would', | ||
'yet': 'yet', | ||
'you': 'you', | ||
'your': 'your' | ||
} | ||
lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') | ||
@@ -1695,5 +1753,3 @@ /*! | ||
lunr.trimmer = function (token) { | ||
var result = token.replace(/^\W+/, '') | ||
.replace(/\W+$/, '') | ||
return result === '' ? undefined : result | ||
return token.replace(/^\W+/, '').replace(/\W+$/, '') | ||
} | ||
@@ -1750,3 +1806,3 @@ | ||
var root = root || this.root, | ||
key = token[0], | ||
key = token.charAt(0), | ||
rest = token.slice(1) | ||
@@ -1781,5 +1837,5 @@ | ||
for (var i = 0; i < token.length; i++) { | ||
if (!node[token[i]]) return false | ||
if (!node[token.charAt(i)]) return false | ||
node = node[token[i]] | ||
node = node[token.charAt(i)] | ||
} | ||
@@ -1808,5 +1864,5 @@ | ||
for (var i = 0; i < token.length; i++) { | ||
if (!node[token[i]]) return {} | ||
if (!node[token.charAt(i)]) return {} | ||
node = node[token[i]] | ||
node = node[token.charAt(i)] | ||
} | ||
@@ -1853,4 +1909,4 @@ | ||
for (var i = 0; i < token.length; i++) { | ||
if (!(token[i] in node)) return | ||
node = node[token[i]] | ||
if (!(token.charAt(i) in node)) return | ||
node = node[token.charAt(i)] | ||
} | ||
@@ -1899,3 +1955,2 @@ | ||
/** | ||
@@ -1902,0 +1957,0 @@ * export the module via AMD, CommonJS or as a browser global |
/** | ||
* lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.12 | ||
* lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.6.0 | ||
* Copyright (C) 2015 Oliver Nightingale | ||
@@ -7,2 +7,2 @@ * MIT Licensed | ||
*/ | ||
!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.5.12",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(t){return arguments.length&&null!=t&&void 0!=t?Array.isArray(t)?t.map(function(t){return t.toLowerCase()}):t.toString().trim().toLowerCase().split(/[\s\-]+/):[]},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,o=0;n>o;o++){for(var r=t[o],s=0;i>s&&(r=this._stack[s](r,o,t),void 0!==r);s++);void 0!==r&&e.push(r)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(e<i.idx)return this.list=new t.Vector.Node(e,n,i),this.length++;for(var o=i,r=i.next;void 0!=r;){if(e<r.idx)return o.next=new t.Vector.Node(e,n,r),this.length++;o=r,r=r.next}return o.next=new t.Vector.Node(e,n,r),this.length++},t.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var t,e=this.list,n=0;e;)t=e.val,n+=t*t,e=e.next;return this._magnitude=Math.sqrt(n)},t.Vector.prototype.dot=function(t){for(var e=this.list,n=t.list,i=0;e&&n;)e.idx<n.idx?e=e.next:e.idx>n.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t<arguments.length;t++)e=arguments[t],~this.indexOf(e)||this.elements.splice(this.locationFor(e),0,e);this.length=this.elements.length},t.SortedSet.prototype.toArray=function(){return this.elements.slice()},t.SortedSet.prototype.map=function(t,e){return this.elements.map(t,e)},t.SortedSet.prototype.forEach=function(t,e){return this.elements.forEach(t,e)},t.SortedSet.prototype.indexOf=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;){if(r===t)return o;t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o]}return r===t?o:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,o=e+Math.floor(i/2),r=this.elements[o];i>1;)t>r&&(e=o),r>t&&(n=o),i=n-e,o=e+Math.floor(i/2),r=this.elements[o];return r>t?o:t>r?o+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,o=0,r=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>r-1||o>s-1)break;a[i]!==h[o]?a[i]<h[o]?i++:a[i]>h[o]&&o++:(n.add(a[i]),i++,o++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},o=new t.SortedSet,r=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=r,t.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),t.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s<o.length;s++){var a=o.elements[s],h=this._fields.reduce(function(t,e){var n=i[e.name].length;if(!n)return t;var o=i[e.name].filter(function(t){return t===a}).length;return t+o/n*e.boost},0);this.tokenStore.add(a,{ref:r,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,o=[],r=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*r,h=this,l=this.tokenStore.expand(e).reduce(function(n,o){var r=h.corpusTokens.indexOf(o),s=h.idf(o),l=1,u=new t.SortedSet;if(o!==e){var c=Math.max(3,o.length-e.length);l=1/Math.log(c)}return r>-1&&i.insert(r,a*s*l),Object.keys(h.tokenStore.get(o)).forEach(function(t){u.add(t)}),n.union(u)},new t.SortedSet);o.push(l)},this);var a=o.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,o=new t.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*h)}return o},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,a="^("+o+")?"+r+o+"("+r+")?$",h="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,u=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(l),p=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,y=/^(.+?)(ed|ing)$/,g=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+o+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp("^"+o+i+"[^aeiouwxy]$"),T=function(n){var i,o,r,s,a,h,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=m,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=y,s.test(n)){var T=s.exec(n);s=u,s.test(T[1])&&(s=g,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,l=x,a.test(n)?n+="e":h.test(n)?(s=g,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+t[o])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],o=T[2],s=u,s.test(i)&&(n=i+e[o])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=g,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==e?e:void 0},t.stopWordFilter.stopWords={a:"a",able:"able",about:"about",across:"across",after:"after",all:"all",almost:"almost",also:"also",am:"am",among:"among",an:"an",and:"and",any:"any",are:"are",as:"as",at:"at",be:"be",because:"because",been:"been",but:"but",by:"by",can:"can",cannot:"cannot",could:"could",dear:"dear",did:"did","do":"do",does:"does",either:"either","else":"else",ever:"ever",every:"every","for":"for",from:"from",get:"get",got:"got",had:"had",has:"has",have:"have",he:"he",her:"her",hers:"hers",him:"him",his:"his",how:"how",however:"however",i:"i","if":"if","in":"in",into:"into",is:"is",it:"it",its:"its",just:"just",least:"least",let:"let",like:"like",likely:"likely",may:"may",me:"me",might:"might",most:"most",must:"must",my:"my",neither:"neither",no:"no",nor:"nor",not:"not",of:"of",off:"off",often:"often",on:"on",only:"only",or:"or",other:"other",our:"our",own:"own",rather:"rather",said:"said",say:"say",says:"says",she:"she",should:"should",since:"since",so:"so",some:"some",than:"than",that:"that",the:"the",their:"their",them:"them",then:"then",there:"there",these:"these",they:"they","this":"this",tis:"tis",to:"to",too:"too",twas:"twas",us:"us",wants:"wants",was:"was",we:"we",were:"were",what:"what",when:"when",where:"where",which:"which","while":"while",who:"who",whom:"whom",why:"why",will:"will","with":"with",would:"would",yet:"yet",you:"you",your:"your"},t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){var e=t.replace(/^\W+/,"").replace(/\W+$/,"");return""===e?void 0:e},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t[0],o=t.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(o,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n<t.length;n++){if(!e[t[n]])return!1;e=e[t[n]]}return!0},t.TokenStore.prototype.getNode=function(t){if(!t)return{};for(var e=this.root,n=0;n<t.length;n++){if(!e[t[n]])return{};e=e[t[n]]}return e},t.TokenStore.prototype.get=function(t,e){return this.getNode(t,e).docs||{}},t.TokenStore.prototype.count=function(t,e){return Object.keys(this.get(t,e)).length},t.TokenStore.prototype.remove=function(t,e){if(t){for(var n=this.root,i=0;i<t.length;i++){if(!(t[i]in n))return;n=n[t[i]]}delete n.docs[e]}},t.TokenStore.prototype.expand=function(t,e){var n=this.getNode(t),i=n.docs||{},e=e||[];return Object.keys(i).length&&e.push(t),Object.keys(n).forEach(function(n){"docs"!==n&&e.concat(this.expand(t+n,e))},this),e},t.TokenStore.prototype.toJSON=function(){return{root:this.root,length:this.length}},function(t,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():t.lunr=e()}(this,function(){return t})}(); | ||
!function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.6.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(e<i.idx)return this.list=new t.Vector.Node(e,n,i),this.length++;for(var r=i,o=i.next;void 0!=o;){if(e<o.idx)return r.next=new t.Vector.Node(e,n,o),this.length++;r=o,o=o.next}return r.next=new t.Vector.Node(e,n,o),this.length++},t.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var t,e=this.list,n=0;e;)t=e.val,n+=t*t,e=e.next;return this._magnitude=Math.sqrt(n)},t.Vector.prototype.dot=function(t){for(var e=this.list,n=t.list,i=0;e&&n;)e.idx<n.idx?e=e.next:e.idx>n.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t<arguments.length;t++)e=arguments[t],~this.indexOf(e)||this.elements.splice(this.locationFor(e),0,e);this.length=this.elements.length},t.SortedSet.prototype.toArray=function(){return this.elements.slice()},t.SortedSet.prototype.map=function(t,e){return this.elements.map(t,e)},t.SortedSet.prototype.forEach=function(t,e){return this.elements.forEach(t,e)},t.SortedSet.prototype.indexOf=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]<h[r]?i++:a[i]>h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;return this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone(),i.add.apply(i,n.toArray()),i},t.SortedSet.prototype.toJSON=function(){return this.toArray()},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.Store,this.tokenStore=new t.TokenStore,this.corpusTokens=new t.SortedSet,this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var t=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,t)},t.Index.prototype.off=function(t,e){return this.eventEmitter.removeListener(t,e)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;return n._fields=e.fields,n._ref=e.ref,n.documentStore=t.Store.load(e.documentStore),n.tokenStore=t.TokenStore.load(e.tokenStore),n.corpusTokens=t.SortedSet.load(e.corpusTokens),n.pipeline=t.Pipeline.load(e.pipeline),n},t.Index.prototype.field=function(t,e){var e=e||{},n={name:t,boost:e.boost||1};return this._fields.push(n),this},t.Index.prototype.ref=function(t){return this._ref=t,this},t.Index.prototype.add=function(e,n){var i={},r=new t.SortedSet,o=e[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n.name]));i[n.name]=o,t.SortedSet.prototype.add.apply(r,o)},this),this.documentStore.set(o,r),t.SortedSet.prototype.add.apply(this.corpusTokens,r.toArray());for(var s=0;s<r.length;s++){var a=r.elements[s],h=this._fields.reduce(function(t,e){var n=i[e.name].length;if(!n)return t;var r=i[e.name].filter(function(t){return t===a}).length;return t+r/n*e.boost},0);this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(t.tokenizer(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),p=Object.keys(f),d=p.length,v=0;d>v;v++)l.add(f[p[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),p=new RegExp(u),d=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,m=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+r+i+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,_=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,P=/ll$/,N=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=d,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=m,a=g,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=p,a.test(i)&&(n=i,a=S,h=w,u=x,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=k,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=_,a=F,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=O,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=N,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=P,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n<t.length;n++){if(!e[t.charAt(n)])return!1;e=e[t.charAt(n)]}return!0},t.TokenStore.prototype.getNode=function(t){if(!t)return{};for(var e=this.root,n=0;n<t.length;n++){if(!e[t.charAt(n)])return{};e=e[t.charAt(n)]}return e},t.TokenStore.prototype.get=function(t,e){return this.getNode(t,e).docs||{}},t.TokenStore.prototype.count=function(t,e){return Object.keys(this.get(t,e)).length},t.TokenStore.prototype.remove=function(t,e){if(t){for(var n=this.root,i=0;i<t.length;i++){if(!(t.charAt(i)in n))return;n=n[t.charAt(i)]}delete n.docs[e]}},t.TokenStore.prototype.expand=function(t,e){var n=this.getNode(t),i=n.docs||{},e=e||[];return Object.keys(i).length&&e.push(t),Object.keys(n).forEach(function(n){"docs"!==n&&e.concat(this.expand(t+n,e))},this),e},t.TokenStore.prototype.toJSON=function(){return{root:this.root,length:this.length}},function(t,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():t.lunr=e()}(this,function(){return t})}(); |
{ | ||
"name": "lunr", | ||
"description": "Simple full-text search in your browser.", | ||
"version": "0.5.12", | ||
"version": "0.6.0", | ||
"author": "Oliver Nightingale", | ||
@@ -6,0 +6,0 @@ "keywords": ["search"], |
@@ -168,2 +168,22 @@ module('lunr.Pipeline', { | ||
test("run should filter out any empty string values at each stage in the pipeline", function () { | ||
var pipeline = new lunr.Pipeline, | ||
fn2Count = 0, | ||
fn1 = function (t) { | ||
if (t === "foo") { | ||
return "" | ||
} else { | ||
return t | ||
} | ||
}, | ||
fn2 = function (t) { fn2Count++ ; return t } | ||
pipeline.add(fn1, fn2) | ||
var output = pipeline.run(["foo", "bar", "baz", ""]) | ||
equal(fn2Count, 2) | ||
equal(output.length, 2) | ||
deepEqual(output, ["bar", "baz"]) | ||
}) | ||
test('toJSON', function () { | ||
@@ -170,0 +190,0 @@ var pipeline = new lunr.Pipeline, |
@@ -78,1 +78,24 @@ module('search', { | ||
}) | ||
test('ref type is not changed to a string', function () { | ||
var idx = new lunr.Index | ||
idx.field('type') | ||
var objKey = {}, | ||
arrKey = [], | ||
dateKey = new Date, | ||
numKey = 1, | ||
strKey = "foo" | ||
idx.add({id: objKey, type: "object"}) | ||
idx.add({id: arrKey, type: "array"}) | ||
idx.add({id: dateKey, type: "date"}) | ||
idx.add({id: numKey, type: "number"}) | ||
idx.add({id: strKey, type: "string"}) | ||
deepEqual(idx.search("object")[0].ref, objKey) | ||
deepEqual(idx.search("array")[0].ref, arrKey) | ||
deepEqual(idx.search("date")[0].ref, dateKey) | ||
deepEqual(idx.search("number")[0].ref, numKey) | ||
deepEqual(idx.search("string")[0].ref, strKey) | ||
}) |
@@ -18,3 +18,3 @@ module('lunr.tokenizer') | ||
test('handling arrays', function () { | ||
test('handling arrays of strings', function () { | ||
var tags = ['foo', 'bar'], | ||
@@ -26,2 +26,9 @@ tokens = lunr.tokenizer(tags) | ||
test('handling arrays with undefined or null values', function () { | ||
var arr = ['foo', undefined, null, 'bar'], | ||
tokens = lunr.tokenizer(arr) | ||
deepEqual(tokens, ['foo', '', '', 'bar']) | ||
}) | ||
test('handling multiple white spaces', function () { | ||
@@ -28,0 +35,0 @@ var testString = ' foo bar ', |
@@ -28,6 +28,1 @@ module('lunr.trimmer') | ||
}) | ||
test('empty tokens should return undefined', function () { | ||
var token = '???' | ||
equal(lunr.trimmer(token), void 0) | ||
}) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2952073
27627
93