liqe
Version:
Lightweight and performant Lucene-like parser, serializer and search engine.
44 lines (43 loc) • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.highlight = void 0;
const escapeRegexString_1 = require("./escapeRegexString");
const internalFilter_1 = require("./internalFilter");
const highlight = (ast, data) => {
const highlights = [];
(0, internalFilter_1.internalFilter)(ast, [data], false, [], highlights);
const aggregatedHighlights = [];
for (const highlightNode of highlights) {
let aggregatedHighlight = aggregatedHighlights.find((maybeTarget) => {
return maybeTarget.path === highlightNode.path;
});
if (!aggregatedHighlight) {
aggregatedHighlight = {
keywords: [],
path: highlightNode.path,
};
aggregatedHighlights.push(aggregatedHighlight);
}
if (highlightNode.keyword) {
aggregatedHighlight.keywords.push(highlightNode.keyword);
}
}
return aggregatedHighlights.map((aggregatedHighlight) => {
if (aggregatedHighlight.keywords.length > 0) {
return {
path: aggregatedHighlight.path,
query: new RegExp('(' +
aggregatedHighlight.keywords
.map((keyword) => {
return (0, escapeRegexString_1.escapeRegexString)(keyword.trim());
})
.join('|') +
')'),
};
}
return {
path: aggregatedHighlight.path,
};
});
};
exports.highlight = highlight;