@@ -2,9 +2,25 @@ import {
2
2
getAndRemoveConfig ,
3
3
getAndRemoveDocisfyIgnoreConfig ,
4
4
} from '../../core/render/utils.js' ;
5
+ import Dexie from 'dexie' ;
5
6
6
7
let INDEXS = { } ;
7
8
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
+
8
24
const LOCAL_STORAGE = {
9
25
EXPIRE_KEY : 'docsify.search.expires' ,
10
26
INDEX_KEY : 'docsify.search.index' ,
@@ -73,11 +89,6 @@ function getListData(token) {
73
89
return token . text ;
74
90
}
75
91
76
- function saveData ( maxAge , expireKey , indexKey ) {
77
- localStorage . setItem ( expireKey , Date . now ( ) + maxAge ) ;
78
- localStorage . setItem ( indexKey , JSON . stringify ( INDEXS ) ) ;
79
- }
80
-
81
92
export function genIndex ( path , content = '' , router , depth ) {
82
93
const tokens = window . marked . lexer ( content ) ;
83
94
const slugify = window . Docsify . slugify ;
@@ -240,7 +251,7 @@ export function search(query) {
240
251
return matchingResults . sort ( ( r1 , r2 ) => r2 . score - r1 . score ) ;
241
252
}
242
253
243
- export function init ( config , vm ) {
254
+ export async function init ( config , vm ) {
244
255
const isAuto = config . paths === 'auto' ;
245
256
const paths = isAuto ? getAllPaths ( vm . router ) : config . paths ;
246
257
@@ -274,9 +285,9 @@ export function init(config, vm) {
274
285
const expireKey = resolveExpireKey ( config . namespace ) + namespaceSuffix ;
275
286
const indexKey = resolveIndexKey ( config . namespace ) + namespaceSuffix ;
276
287
277
- const isExpired = localStorage . getItem ( expireKey ) < Date . now ( ) ;
288
+ const isExpired = await getData ( expireKey ) < Date . now ( ) ;
278
289
279
- INDEXS = JSON . parse ( localStorage . getItem ( indexKey ) ) ;
290
+ INDEXS = JSON . parse ( await getData ( indexKey ) ) ;
280
291
281
292
if ( isExpired ) {
282
293
INDEXS = { } ;
@@ -293,9 +304,11 @@ export function init(config, vm) {
293
304
}
294
305
295
306
Docsify . get ( vm . router . getFile ( path ) , false , vm . config . requestHeaders ) . then (
296
- result => {
307
+ async result => {
297
308
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
+ }
299
312
} ,
300
313
) ;
301
314
} ) ;
0 commit comments