UNPKG

30s

Version:

A command-line application for 30 seconds of code snippets

37 lines (24 loc) 1.48 kB
"use strict"; 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;