fix(search): Lunr result fields highlight

Signed-off-by: Camila Belo <camilaibs@gmail.com>
This commit is contained in:
Camila Belo
2023-07-21 09:46:51 +02:00
parent a9bea981ae
commit 70d4f7b0ed
2 changed files with 36 additions and 2 deletions
@@ -1145,6 +1145,35 @@ describe('parseHighlightFields', () => {
bar: 'ghi <>jkl</>',
});
});
it('should filter out non array positions', () => {
expect(
parseHighlightFields({
preTag: '<>',
postTag: '</>',
doc: { foo: 'abc def', bar: 'ghi jkl' },
positionMetadata: {
test: {
foo: {
// invalid position item
position: [null as unknown as number[]],
},
},
anotherTest: {
foo: {
position: [[4, 3]],
},
bar: {
position: [[4, 3]],
},
},
},
}),
).toEqual({
foo: 'abc <>def</>',
bar: 'ghi <>jkl</>',
});
});
});
describe('stopword testing', () => {
@@ -309,8 +309,13 @@ export function parseHighlightFields({
const highlightFieldPositions = Object.values(positionMetadata).reduce(
(fieldPositions, metadata) => {
Object.keys(metadata).map(fieldKey => {
fieldPositions[fieldKey] = fieldPositions[fieldKey] ?? [];
fieldPositions[fieldKey].push(...metadata[fieldKey].position);
const validFieldMetadataPositions = metadata[
fieldKey
]?.position?.filter(position => Array.isArray(position));
if (validFieldMetadataPositions.length) {
fieldPositions[fieldKey] = fieldPositions[fieldKey] ?? [];
fieldPositions[fieldKey].push(...validFieldMetadataPositions);
}
});
return fieldPositions;