@@ -10,22 +10,16 @@ let indexReadyPromise;
1010// Initialize the index
1111self . onmessage = async function ( event ) {
1212 if ( event . data . type === 'init' ) {
13- const regexResults = versionRegex . exec ( event . data . currentPath ) ;
14- const version = regexResults
15- ? regexResults [ 1 ]
16- : undefined ;
1713 indexReadyPromise = new Promise ( async ( resolve , reject ) => {
1814 try {
1915 const rawIndex = await fetch ( event . data . rawIndexUrl ) ;
2016 let json = await rawIndex . json ( ) ;
2117 json . forEach ( ( doc ) => {
22- if ( version === undefined || doc . ref . startsWith ( version ) ) {
23- resultDetails . set ( doc . ref , {
24- version : doc . version ,
25- title : doc . title ,
26- excerpt : doc . excerpt ,
27- } ) ;
28- }
18+ resultDetails . set ( doc . ref , {
19+ version : doc . version ,
20+ title : doc . title ,
21+ excerpt : doc . excerpt ,
22+ } ) ;
2923 } ) ;
3024
3125 const lunrIndex = await fetch ( event . data . lunrIndexUrl ) ;
@@ -41,6 +35,11 @@ self.onmessage = async function (event) {
4135 } else if ( event . data . type === 'search' ) {
4236 try {
4337 await indexReadyPromise ;
38+ const regexResults = versionRegex . exec ( event . data . currentPath ) ;
39+ const version = regexResults
40+ ? regexResults [ 0 ]
41+ : undefined ;
42+
4443 const results = idx
4544 . query ( ( q ) => {
4645 const tokens = lunr . tokenizer ( event . data . query . toLowerCase ( ) ) ;
@@ -57,20 +56,32 @@ self.onmessage = async function (event) {
5756 editDistance : 2 ,
5857 } ) ;
5958 } ) ;
60- } )
61- . filter ( ( result ) => resultDetails . has ( result . ref ) )
62- . slice ( 0 , event . data . maxResults ) ;
59+ } ) ;
6360
6461 const docs = new Map ( ) ;
65- results . forEach ( ( result ) => {
62+ let count = 0 ;
63+
64+ for ( const result of results ) {
65+ if ( count >= event . data . maxResults ) {
66+ break ;
67+ }
68+
6669 if ( resultDetails . get ( result . ref ) === undefined ) {
67- return ;
70+ continue ;
6871 }
6972
70- docs . set ( result . ref , resultDetails . get ( result . ref ) ) ;
71- } ) ;
73+ if ( version === undefined ) {
74+ docs . set ( result . ref , resultDetails . get ( result . ref ) ) ;
75+ } else if ( result . ref . startsWith ( version ) ) {
76+ docs . set ( result . ref , resultDetails . get ( result . ref ) ) ;
77+ } else {
78+ continue ;
79+ }
80+
81+ count ++ ;
82+ }
7283
73- self . postMessage ( { type : 'search' , status : 'success' , docs : docs } ) ;
84+ self . postMessage ( { type : 'search' , status : 'success' , query : event . data . query , docs : docs } ) ;
7485 } catch ( error ) {
7586 self . postMessage ( { type : 'search' , status : 'error' , message : 'Index not ready' } ) ;
7687 }
0 commit comments