22// The .NET Foundation licenses this file to you under the MIT license.
33
44import lunr from 'lunr'
5+ import stemmer from 'lunr-languages/lunr.stemmer.support'
6+ import multi from 'lunr-languages/lunr.multi'
57import { get , set , createStore } from 'idb-keyval'
68
79type SearchHit = {
@@ -31,14 +33,25 @@ async function loadIndexCore() {
3133 }
3234 }
3335
34- const { configureLunr } = await import ( './main.js' ) . then ( m => m . default ) as DocfxOptions
36+ const { lunrLanguages, configureLunr } = await import ( './main.js' ) . then ( m => m . default ) as DocfxOptions
37+
38+ if ( lunrLanguages && lunrLanguages . length > 0 ) {
39+ multi ( lunr )
40+ stemmer ( lunr )
41+ await Promise . all ( lunrLanguages . map ( initLanguage ) )
42+ }
3543
3644 const index = lunr ( function ( ) {
45+ lunr . tokenizer . separator = / [ \s \- . ( ) ] + /
46+
3747 this . ref ( 'href' )
3848 this . field ( 'title' , { boost : 50 } )
3949 this . field ( 'keywords' , { boost : 20 } )
4050
41- lunr . tokenizer . separator = / [ \s \- . ( ) ] + /
51+ if ( lunrLanguages && lunrLanguages . length > 0 ) {
52+ this . use ( lunr . multiLanguage ( ...lunrLanguages ) )
53+ }
54+
4255 configureLunr ?.( this )
4356
4457 for ( const key in data ) {
@@ -60,3 +73,45 @@ onmessage = function(e) {
6073 postMessage ( { e : 'query-ready' , d : search ( e . data . q ) } )
6174 }
6275}
76+
77+ const langMap = {
78+ ar : ( ) => import ( 'lunr-languages/lunr.ar.js' ) ,
79+ da : ( ) => import ( 'lunr-languages/lunr.da.js' ) ,
80+ de : ( ) => import ( 'lunr-languages/lunr.de.js' ) ,
81+ du : ( ) => import ( 'lunr-languages/lunr.du.js' ) ,
82+ el : ( ) => import ( 'lunr-languages/lunr.el.js' ) ,
83+ es : ( ) => import ( 'lunr-languages/lunr.es.js' ) ,
84+ fi : ( ) => import ( 'lunr-languages/lunr.fi.js' ) ,
85+ fr : ( ) => import ( 'lunr-languages/lunr.fr.js' ) ,
86+ he : ( ) => import ( 'lunr-languages/lunr.he.js' ) ,
87+ hi : ( ) => import ( 'lunr-languages/lunr.hi.js' ) ,
88+ hu : ( ) => import ( 'lunr-languages/lunr.hu.js' ) ,
89+ hy : ( ) => import ( 'lunr-languages/lunr.hy.js' ) ,
90+ it : ( ) => import ( 'lunr-languages/lunr.it.js' ) ,
91+ ja : ( ) => import ( 'lunr-languages/lunr.ja.js' ) ,
92+ jp : ( ) => import ( 'lunr-languages/lunr.jp.js' ) ,
93+ kn : ( ) => import ( 'lunr-languages/lunr.kn.js' ) ,
94+ ko : ( ) => import ( 'lunr-languages/lunr.ko.js' ) ,
95+ nl : ( ) => import ( 'lunr-languages/lunr.nl.js' ) ,
96+ no : ( ) => import ( 'lunr-languages/lunr.no.js' ) ,
97+ pt : ( ) => import ( 'lunr-languages/lunr.pt.js' ) ,
98+ ro : ( ) => import ( 'lunr-languages/lunr.ro.js' ) ,
99+ ru : ( ) => import ( 'lunr-languages/lunr.ru.js' ) ,
100+ sa : ( ) => import ( 'lunr-languages/lunr.sa.js' ) ,
101+ sv : ( ) => import ( 'lunr-languages/lunr.sv.js' ) ,
102+ ta : ( ) => import ( 'lunr-languages/lunr.ta.js' ) ,
103+ te : ( ) => import ( 'lunr-languages/lunr.te.js' ) ,
104+ th : ( ) => import ( 'lunr-languages/lunr.th.js' ) ,
105+ tr : ( ) => import ( 'lunr-languages/lunr.tr.js' ) ,
106+ vi : ( ) => import ( 'lunr-languages/lunr.vi.js' )
107+
108+ // zh is currently not supported due to dependency on NodeJS.
109+ // zh: () => import('lunr-languages/lunr.zh.js')
110+ }
111+
112+ async function initLanguage ( lang : string ) {
113+ if ( lang !== 'en' ) {
114+ const { default : init } = await langMap [ lang ] ( )
115+ init ( lunr )
116+ }
117+ }
0 commit comments