Merge pull request #18749 from backstage/camilal/search-fix-fields-highlight

[Search] Fix Lunr fields highlight parsing
This commit is contained in:
Camila Belo
2023-07-21 12:36:09 +02:00
committed by GitHub
3 changed files with 41 additions and 2 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-search-backend-node': patch
---
Fix Lunr search engine highlight by ignoring invalid metadata positions.
@@ -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;