@@ -2,9 +2,25 @@ import {
22 getAndRemoveConfig ,
33 getAndRemoveDocisfyIgnoreConfig ,
44} from '../../core/render/utils.js' ;
5+ import Dexie from 'dexie' ;
56
67let INDEXS = { } ;
78
9+ const db = new Dexie ( "DocsifySearchDB" ) ;
10+ db . version ( 1 ) . stores ( {
11+ search : "key, value"
12+ } ) ;
13+
14+ async function saveData ( maxAge , expireKey , indexKey ) {
15+ await db . search . put ( { key : expireKey , value : Date . now ( ) + maxAge } ) ;
16+ await db . search . put ( { key : indexKey , value : JSON . stringify ( INDEXS ) } ) ;
17+ }
18+
19+ async function getData ( key ) {
20+ const item = await db . search . get ( key ) ;
21+ return item ? item . value : null ;
22+ }
23+
824const LOCAL_STORAGE = {
925 EXPIRE_KEY : 'docsify.search.expires' ,
1026 INDEX_KEY : 'docsify.search.index' ,
@@ -73,11 +89,6 @@ function getListData(token) {
7389 return token . text ;
7490}
7591
76- function saveData ( maxAge , expireKey , indexKey ) {
77- localStorage . setItem ( expireKey , Date . now ( ) + maxAge ) ;
78- localStorage . setItem ( indexKey , JSON . stringify ( INDEXS ) ) ;
79- }
80-
8192export function genIndex ( path , content = '' , router , depth ) {
8293 const tokens = window . marked . lexer ( content ) ;
8394 const slugify = window . Docsify . slugify ;
@@ -240,7 +251,7 @@ export function search(query) {
240251 return matchingResults . sort ( ( r1 , r2 ) => r2 . score - r1 . score ) ;
241252}
242253
243- export function init ( config , vm ) {
254+ export async function init ( config , vm ) {
244255 const isAuto = config . paths === 'auto' ;
245256 const paths = isAuto ? getAllPaths ( vm . router ) : config . paths ;
246257
@@ -274,9 +285,9 @@ export function init(config, vm) {
274285 const expireKey = resolveExpireKey ( config . namespace ) + namespaceSuffix ;
275286 const indexKey = resolveIndexKey ( config . namespace ) + namespaceSuffix ;
276287
277- const isExpired = localStorage . getItem ( expireKey ) < Date . now ( ) ;
288+ const isExpired = await getData ( expireKey ) < Date . now ( ) ;
278289
279- INDEXS = JSON . parse ( localStorage . getItem ( indexKey ) ) ;
290+ INDEXS = JSON . parse ( await getData ( indexKey ) ) ;
280291
281292 if ( isExpired ) {
282293 INDEXS = { } ;
@@ -293,9 +304,11 @@ export function init(config, vm) {
293304 }
294305
295306 Docsify . get ( vm . router . getFile ( path ) , false , vm . config . requestHeaders ) . then (
296- result => {
307+ async result => {
297308 INDEXS [ path ] = genIndex ( path , result , vm . router , config . depth ) ;
298- len === ++ count && saveData ( config . maxAge , expireKey , indexKey ) ;
309+ if ( len === ++ count ) {
310+ await saveData ( config . maxAge , expireKey , indexKey ) ;
311+ }
299312 } ,
300313 ) ;
301314 } ) ;
0 commit comments