From ffda4cbdfdf66d021ff8855c5f4ebdab28e89cc1 Mon Sep 17 00:00:00 2001 From: Xon <635541+Xon@users.noreply.github.com> Date: Thu, 1 Jan 2026 01:35:42 +0800 Subject: [PATCH 1/2] Fix KMP search-as-you-type not returning results as expected --- src/scripts/search/kmp.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/scripts/search/kmp.ts b/src/scripts/search/kmp.ts index dbc58d67..03ca65f7 100644 --- a/src/scripts/search/kmp.ts +++ b/src/scripts/search/kmp.ts @@ -73,11 +73,12 @@ export class SearchByKMP implements Searcher { const field = this._fields[k]; if (field in obj && kmpSearch(needle, (obj[field] as string).toLowerCase()) !== -1) { results.push({ - item: obj[field], + item: obj, score: count, rank: count + 1, }); count++; + break; } } } From 84424c900c985a0d8fcf488e5d25dd091bc52d97 Mon Sep 17 00:00:00 2001 From: Xon <635541+Xon@users.noreply.github.com> Date: Thu, 1 Jan 2026 01:37:58 +0800 Subject: [PATCH 2/2] Fix search unit tests --- test/scripts/search/index.test.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/test/scripts/search/index.test.ts b/test/scripts/search/index.test.ts index 2d4ac834..2277d5b9 100644 --- a/test/scripts/search/index.test.ts +++ b/test/scripts/search/index.test.ts @@ -118,7 +118,15 @@ describe('search', () => { }); it('label suffix', () => { const results = searcher.search(`${haystack.length - 1}`); - expect(results.length).eq(2); + expect(results.length).eq(1); + }); + it('search order', () => { + const results = searcher.search('label'); + + expect(results.length).eq(haystack.length); + haystack.forEach((value, index) => { + expect(results[index].item.value).eq(value.value); + }); }); }); @@ -141,5 +149,13 @@ describe('search', () => { const results = searcher.search(`${haystack.length - 1}`); expect(results.length).eq(0); }); + it('search order', () => { + const results = searcher.search('label'); + + expect(results.length).eq(haystack.length); + haystack.forEach((value, index) => { + expect(results[index].item.value).eq(value.value); + }); + }); }); });