UNPKG

@launchmenu/applet-notes

Version:
122 lines 9.83 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createCustomSearchPatternMatcher = void 0; const regexp_match_indices_1 = __importDefault(require("regexp-match-indices")); const core_1 = require("@launchmenu/core"); const model_react_1 = require("model-react"); /** * Creates a custom search pattern matcher according to some user search pattern * @param getPattern The pattern to use, may use capture groups prefixed with `$` for text to be included in the search, and capture groups `#fff` or similar hex patterns for highlighting * @returns The search pattern matcher */ function createCustomSearchPatternMatcher(getPattern) { const searchPatternMatcher = new model_react_1.DataCacher((hook, prev) => { // Retrieve the updated pattern and make sure it changes const pattern = getPattern(hook); if (prev && pattern == (prev === null || prev === void 0 ? void 0 : prev.pattern)) return prev; if (pattern == undefined) return { pattern }; // Try to create a regex matcher const regex = /\/(.*)\/(.*)/; const match = regex.exec(pattern); if (match) try { const regex = new RegExp(match[1], match[2]); return { pattern, matcher: ({ search }) => { // Try to match the regex const match = regexp_match_indices_1.default(regex, search); if (!match) return; // Compute the search text const groups = match.indices.groups; let highlight = [ { start: match.index, end: match[0].length, text: match[0], tags: [], }, ]; let searchText = search.substring(match[0].length); if (groups) { const result = getNodesFromGroups(groups, highlight, searchText); highlight = result.highlight; searchText = result.searchText + searchText; } // Return the selection and text return { name: this.getName(), id: pattern, searchText, highlight, }; }, }; } catch (e) { } // Create a literal text matcher return { pattern, matcher: core_1.createStandardSearchPatternMatcher({ name: this.getName(), id: pattern, matcher: ({ search }) => search.slice(0, pattern.length) ? [{ start: 0, end: pattern.length }] : undefined, }), }; }); /** Return the pattern matcher */ return (query, hook) => { var _a, _b; return (_b = (_a = searchPatternMatcher.get(hook)).matcher) === null || _b === void 0 ? void 0 : _b.call(_a, query, hook); }; } exports.createCustomSearchPatternMatcher = createCustomSearchPatternMatcher; /** * Retrieves the highlight nodes and search text from the regex groups * @param groups The regex groups * @param highlight The highlight nodes * @param search The search text * @returns The search text and highlight nodes */ function getNodesFromGroups(groups, highlight, search) { const { nodes, textItems } = Object.entries(groups).reduce(({ nodes, textItems }, [key, [start, end]]) => { if (key[0] == "#") { // Add a highlight node const node = { start, end, text: search.substring(start, end), tags: [], style: { color: key }, }; return { nodes: core_1.mergeHighlightNodes([node], nodes), textItems, }; } else if (key[0] == "$") { // Add a text range return { nodes, textItems: [{ index: start, text: key }, ...textItems], }; } return { nodes, textItems }; }, { nodes: highlight, textItems: [], }); // Retrieve the search text and highlight nodes return { highlight: nodes, searchText: textItems .sort(({ index: a }, { index: b }) => a - b) .reduce((allText, { text, index }, i, items) => { var _a; return allText + text.substr(0, (((_a = items[i + 1]) === null || _a === void 0 ? void 0 : _a.index) || Infinity) - index); }, ""), }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ3VzdG9tU2VhcmNoUGF0dGVybk1hdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YU1vZGVsL2NyZWF0ZUN1c3RvbVNlYXJjaFBhdHRlcm5NYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdGQUFtRDtBQUNuRCwyQ0FLMEI7QUFDMUIsNkNBQXVEO0FBRXZEOzs7O0dBSUc7QUFDSCxTQUFnQixnQ0FBZ0MsQ0FDNUMsVUFBOEM7SUFFOUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLHdCQUFVLENBR3hDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ2Qsd0RBQXdEO1FBQ3hELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE9BQU8sQ0FBQTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2xELElBQUksT0FBTyxJQUFJLFNBQVM7WUFBRSxPQUFPLEVBQUMsT0FBTyxFQUFDLENBQUM7UUFFM0MsZ0NBQWdDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSztZQUNMLElBQUk7Z0JBQ0EsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPO29CQUNILE9BQU87b0JBQ1AsT0FBTyxFQUFFLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFFO3dCQUNsQix5QkFBeUI7d0JBQ3pCLE1BQU0sS0FBSyxHQUFHLDhCQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUM3QyxJQUFJ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