Skip to content

Commit caedbd5

Browse files
committed
feat(search): use dexie.js instead of localStorage
1 parent 90c0b02 commit caedbd5

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"*.js": "eslint --fix"
3737
},
3838
"dependencies": {
39+
"dexie": "^4.0.8",
3940
"medium-zoom": "^1.1.0",
4041
"opencollective-postinstall": "^2.0.2",
4142
"prismjs": "^1.29.0",

src/plugins/search/search.js

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,25 @@ import {
22
getAndRemoveConfig,
33
getAndRemoveDocisfyIgnoreConfig,
44
} from '../../core/render/utils.js';
5+
import Dexie from 'dexie';
56

67
let 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+
824
const 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-
8192
export 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

Comments
 (0)