30s
Version:
A command-line application for 30 seconds of code snippets
37 lines (24 loc) • 1.48 kB
JavaScript
;
require("core-js/modules/es6.array.sort");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.searchSnippets = exports.getSnippetsByTag = exports.getSnippet = void 0;
var _ramda = require("ramda");
var _helpers = require("./helpers");
const fuzzyMatch = query => x => new RegExp(query).test(x.id);
const getSnippet = (snippets, id) => (0, _ramda.find)(x => x.id === id, snippets);
exports.getSnippet = getSnippet;
const getSnippetsByTag = (snippets, id) => (0, _ramda.filter)(x => (0, _ramda.any)(y => y === id, x.tags), snippets);
exports.getSnippetsByTag = getSnippetsByTag;
const computeRelevance = (id, query) => {
const base = query.length * 10;
const diffInChars = id.replace(query, '').length + 1;
const divideByDiffInChars = (0, _ramda.flip)(_ramda.divide)(diffInChars);
const multi = (0, _ramda.ifElse)((0, _ramda.always)((0, _helpers.startsOrEndsWith)(id, query)), (0, _ramda.multiply)(0.75), (0, _ramda.multiply)(0.5));
if (id === query) return base;
return (0, _ramda.compose)(divideByDiffInChars, multi)(base);
};
const setSearchRelevance = query => x => (0, _ramda.set)((0, _ramda.lensProp)('relevance'), computeRelevance(x.id, query), x);
const searchSnippets = (snippets, query) => (0, _ramda.compose)((0, _ramda.sort)((0, _ramda.descend)((0, _ramda.prop)('relevance'))), (0, _ramda.map)(setSearchRelevance(query)), (0, _ramda.filter)(fuzzyMatch(query)))(snippets);
exports.searchSnippets = searchSnippets;