UNPKG

cockatoo.js

Version:

Fuzzy search library based based on Damerau Levenshtein distance algorithm for Node.js

94 lines (93 loc) 3.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function getCompleteness(search, pattern, score) { if (pattern) { var completeness = search.length / pattern.length; completeness > 1 ? completeness = 1 : null; return completeness * score; } else { return 0; } } exports.getCompleteness = getCompleteness; function applySensitiveness(text, options) { if (text) { var result = text; if (!options.accentSensitive) { result = removeAccents(result); } if (!options.caseSensitive) { result = result.toLowerCase(); } return result; } else { return undefined; } } exports.applySensitiveness = applySensitiveness; function removeAccents(text) { return text .normalize('NFD') .replace(/[\u0300-\u036f]/g, ''); } exports.removeAccents = removeAccents; function orderMatches(matches) { return matches.sort(function (a, b) { var dif = getMaxScoreDif(a, b); if (dif === 0) { dif = getMinScoreDif(a, b); } if (dif === 0) { dif = getTokenCompletenessDif(a, b); } if (dif === 0) { dif = getCompletenessDif(a, b); } if (dif === 0) { dif = getTokenMatchesDif(a, b); } return dif; }); } exports.orderMatches = orderMatches; function getMaxScoreDif(a, b) { return Math.max(b.score, b.tokenScore || 0) - Math.max(a.score, a.tokenScore || 0); } exports.getMaxScoreDif = getMaxScoreDif; function getMinScoreDif(a, b) { return Math.min(b.score, b.tokenScore || 100) - Math.min(a.score, a.tokenScore || 100); } exports.getMinScoreDif = getMinScoreDif; function getCompletenessDif(a, b) { return b.completeness - a.completeness; } exports.getCompletenessDif = getCompletenessDif; function getTokenCompletenessDif(a, b) { if (a.tokenMatches && b.tokenMatches) { var aTokenCompleteness = 0; for (var _i = 0, _a = a.tokenMatches; _i < _a.length; _i++) { var tokenMatch = _a[_i]; aTokenCompleteness += tokenMatch.completeness * tokenMatch.patternToken.length; } aTokenCompleteness /= a.tokenMatches.reduce(function (prev, curr) { return prev + curr.patternToken.length; }, 0); var bTokenCompleteness = 0; for (var _b = 0, _c = b.tokenMatches; _b < _c.length; _b++) { var tokenMatch = _c[_b]; bTokenCompleteness += tokenMatch.completeness * tokenMatch.patternToken.length; } bTokenCompleteness /= b.tokenMatches.reduce(function (prev, curr) { return prev + curr.patternToken.length; }, 0); return bTokenCompleteness - aTokenCompleteness; } return 0; } exports.getTokenCompletenessDif = getTokenCompletenessDif; function getTokenMatchesDif(a, b) { return (b.tokenMatches && b.tokenMatches.length || 1) - (a.tokenMatches && a.tokenMatches.length || 1); } exports.getTokenMatchesDif = getTokenMatchesDif;