@vuepress-plume/plugin-search 1.0.0-rc.162 → 1.0.0-rc.164
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/client/composables/index.js +4 -10
- package/lib/node/index.d.ts +7 -7
- package/lib/node/index.js +149 -152
- package/package.json +2 -2
|
@@ -21,8 +21,7 @@ const defaultLocales = { "/": {
|
|
|
21
21
|
function useLocale(locales) {
|
|
22
22
|
const localesRef = toRef(locales);
|
|
23
23
|
const routeLocale = useRouteLocale();
|
|
24
|
-
|
|
25
|
-
return locale;
|
|
24
|
+
return computed(() => localesRef.value[routeLocale.value] ?? defaultLocales[routeLocale.value] ?? defaultLocales["/"]);
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
//#endregion
|
|
@@ -31,14 +30,9 @@ const searchIndexData = shallowRef(searchIndex);
|
|
|
31
30
|
function useSearchIndex() {
|
|
32
31
|
return searchIndexData;
|
|
33
32
|
}
|
|
34
|
-
if (__VUEPRESS_DEV__ && (import.meta.webpackHot || import.meta.hot)) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
};
|
|
38
|
-
__VUE_HMR_RUNTIME__.updateSearchIndex = (data) => {
|
|
39
|
-
searchIndexData.value = data;
|
|
40
|
-
};
|
|
41
|
-
}
|
|
33
|
+
if (__VUEPRESS_DEV__ && (import.meta.webpackHot || import.meta.hot)) __VUE_HMR_RUNTIME__.updateSearchIndex = (data) => {
|
|
34
|
+
searchIndexData.value = data;
|
|
35
|
+
};
|
|
42
36
|
|
|
43
37
|
//#endregion
|
|
44
38
|
export { useLocale, useSearchIndex };
|
package/lib/node/index.d.ts
CHANGED
|
@@ -2,13 +2,6 @@ import { SearchOptions, SearchPluginOptions } from "../shared/index.js";
|
|
|
2
2
|
import { App, Plugin } from "vuepress/core";
|
|
3
3
|
export * from "../shared/index.js";
|
|
4
4
|
|
|
5
|
-
//#region src/node/searchPlugin.d.ts
|
|
6
|
-
declare function searchPlugin({
|
|
7
|
-
locales,
|
|
8
|
-
isSearchable,
|
|
9
|
-
...searchOptions
|
|
10
|
-
}?: SearchPluginOptions): Plugin;
|
|
11
|
-
//#endregion
|
|
12
5
|
//#region src/node/prepareSearchIndex.d.ts
|
|
13
6
|
interface SearchIndexOptions {
|
|
14
7
|
app: App;
|
|
@@ -21,4 +14,11 @@ declare function prepareSearchIndex({
|
|
|
21
14
|
searchOptions
|
|
22
15
|
}: SearchIndexOptions): Promise<void>;
|
|
23
16
|
//#endregion
|
|
17
|
+
//#region src/node/searchPlugin.d.ts
|
|
18
|
+
declare function searchPlugin({
|
|
19
|
+
locales,
|
|
20
|
+
isSearchable,
|
|
21
|
+
...searchOptions
|
|
22
|
+
}?: SearchPluginOptions): Plugin;
|
|
23
|
+
//#endregion
|
|
24
24
|
export { prepareSearchIndex, searchPlugin };
|
package/lib/node/index.js
CHANGED
|
@@ -1,154 +1,11 @@
|
|
|
1
|
-
import { addViteOptimizeDepsInclude, getFullLocaleConfig } from "@vuepress/helper";
|
|
2
|
-
import chokidar from "chokidar";
|
|
3
|
-
import { colors, getDirname, logger, path } from "vuepress/utils";
|
|
4
1
|
import MiniSearch from "minisearch";
|
|
5
2
|
import pMap from "p-map";
|
|
3
|
+
import { colors, getDirname, logger, path } from "vuepress/utils";
|
|
4
|
+
import { addViteOptimizeDepsInclude, getFullLocaleConfig } from "@vuepress/helper";
|
|
5
|
+
import chokidar from "chokidar";
|
|
6
6
|
|
|
7
7
|
export * from "../shared/index.js"
|
|
8
8
|
|
|
9
|
-
//#region src/node/locales/de.ts
|
|
10
|
-
const deSearchLocale = {
|
|
11
|
-
placeholder: "Dokumente durchsuchen",
|
|
12
|
-
resetButtonTitle: "Suche zurücksetzen",
|
|
13
|
-
backButtonTitle: "Schließen",
|
|
14
|
-
noResultsText: "Keine Suchergebnisse:",
|
|
15
|
-
footer: {
|
|
16
|
-
selectText: "Auswählen",
|
|
17
|
-
selectKeyAriaLabel: "Eingabe",
|
|
18
|
-
navigateText: "Wechseln",
|
|
19
|
-
navigateUpKeyAriaLabel: "Nach oben",
|
|
20
|
-
navigateDownKeyAriaLabel: "Nach unten",
|
|
21
|
-
closeText: "Schließen",
|
|
22
|
-
closeKeyAriaLabel: "Beenden"
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
//#endregion
|
|
27
|
-
//#region src/node/locales/en.ts
|
|
28
|
-
const enSearchLocale = {
|
|
29
|
-
placeholder: "Search",
|
|
30
|
-
resetButtonTitle: "Reset search",
|
|
31
|
-
backButtonTitle: "Close search",
|
|
32
|
-
noResultsText: "No results for",
|
|
33
|
-
footer: {
|
|
34
|
-
selectText: "to select",
|
|
35
|
-
selectKeyAriaLabel: "enter",
|
|
36
|
-
navigateText: "to navigate",
|
|
37
|
-
navigateUpKeyAriaLabel: "up arrow",
|
|
38
|
-
navigateDownKeyAriaLabel: "down arrow",
|
|
39
|
-
closeText: "to close",
|
|
40
|
-
closeKeyAriaLabel: "escape"
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
//#endregion
|
|
45
|
-
//#region src/node/locales/fr.ts
|
|
46
|
-
const frSearchLocale = {
|
|
47
|
-
placeholder: "Rechercher dans la documentation",
|
|
48
|
-
resetButtonTitle: "Réinitialiser la recherche",
|
|
49
|
-
backButtonTitle: "Fermer",
|
|
50
|
-
noResultsText: "Aucun résultat trouvé :",
|
|
51
|
-
footer: {
|
|
52
|
-
selectText: "sélectionner",
|
|
53
|
-
selectKeyAriaLabel: "Entrée",
|
|
54
|
-
navigateText: "naviguer",
|
|
55
|
-
navigateUpKeyAriaLabel: "haut",
|
|
56
|
-
navigateDownKeyAriaLabel: "bas",
|
|
57
|
-
closeText: "fermer",
|
|
58
|
-
closeKeyAriaLabel: "sortie"
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
//#endregion
|
|
63
|
-
//#region src/node/locales/ja.ts
|
|
64
|
-
const jaSearchLocale = {
|
|
65
|
-
placeholder: "ドキュメントを検索",
|
|
66
|
-
resetButtonTitle: "検索をリセット",
|
|
67
|
-
backButtonTitle: "閉じる",
|
|
68
|
-
noResultsText: "検索結果がありません:",
|
|
69
|
-
footer: {
|
|
70
|
-
selectText: "選択",
|
|
71
|
-
selectKeyAriaLabel: "入力",
|
|
72
|
-
navigateText: "切り替え",
|
|
73
|
-
navigateUpKeyAriaLabel: "上へ",
|
|
74
|
-
navigateDownKeyAriaLabel: "下へ",
|
|
75
|
-
closeText: "閉じる",
|
|
76
|
-
closeKeyAriaLabel: "終了"
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
//#endregion
|
|
81
|
-
//#region src/node/locales/ru.ts
|
|
82
|
-
const ruSearchLocale = {
|
|
83
|
-
placeholder: "Поиск по документации",
|
|
84
|
-
resetButtonTitle: "Сбросить поиск",
|
|
85
|
-
backButtonTitle: "Закрыть",
|
|
86
|
-
noResultsText: "Нет результатов поиска:",
|
|
87
|
-
footer: {
|
|
88
|
-
selectText: "Выбрать",
|
|
89
|
-
selectKeyAriaLabel: "Ввод",
|
|
90
|
-
navigateText: "Переключить",
|
|
91
|
-
navigateUpKeyAriaLabel: "Вверх",
|
|
92
|
-
navigateDownKeyAriaLabel: "Вниз",
|
|
93
|
-
closeText: "Закрыть",
|
|
94
|
-
closeKeyAriaLabel: "Выход"
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
//#endregion
|
|
99
|
-
//#region src/node/locales/zh-tw.ts
|
|
100
|
-
const zhTwSearchLocale = {
|
|
101
|
-
placeholder: "搜索文檔",
|
|
102
|
-
resetButtonTitle: "重置搜索",
|
|
103
|
-
backButtonTitle: "關閉",
|
|
104
|
-
noResultsText: "無搜索結果:",
|
|
105
|
-
footer: {
|
|
106
|
-
selectText: "選擇",
|
|
107
|
-
selectKeyAriaLabel: "輸入",
|
|
108
|
-
navigateText: "切換",
|
|
109
|
-
navigateUpKeyAriaLabel: "向上",
|
|
110
|
-
navigateDownKeyAriaLabel: "向下",
|
|
111
|
-
closeText: "關閉",
|
|
112
|
-
closeKeyAriaLabel: "退出"
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
//#endregion
|
|
117
|
-
//#region src/node/locales/zh.ts
|
|
118
|
-
const zhSearchLocale = {
|
|
119
|
-
placeholder: "搜索文档",
|
|
120
|
-
resetButtonTitle: "重置搜索",
|
|
121
|
-
backButtonTitle: "关闭",
|
|
122
|
-
noResultsText: "无搜索结果:",
|
|
123
|
-
footer: {
|
|
124
|
-
selectText: "选择",
|
|
125
|
-
selectKeyAriaLabel: "输入",
|
|
126
|
-
navigateText: "切换",
|
|
127
|
-
navigateUpKeyAriaLabel: "向上",
|
|
128
|
-
navigateDownKeyAriaLabel: "向下",
|
|
129
|
-
closeText: "关闭",
|
|
130
|
-
closeKeyAriaLabel: "退出"
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
//#endregion
|
|
135
|
-
//#region src/node/locales/index.ts
|
|
136
|
-
const SEARCH_LOCALES = [
|
|
137
|
-
[["en", "en-US"], enSearchLocale],
|
|
138
|
-
[[
|
|
139
|
-
"zh",
|
|
140
|
-
"zh-CN",
|
|
141
|
-
"zh-Hans",
|
|
142
|
-
"zh-Hant"
|
|
143
|
-
], zhSearchLocale],
|
|
144
|
-
[["zh-TW"], zhTwSearchLocale],
|
|
145
|
-
[["de", "de-DE"], deSearchLocale],
|
|
146
|
-
[["fr", "fr-FR"], frSearchLocale],
|
|
147
|
-
[["ru", "ru-RU"], ruSearchLocale],
|
|
148
|
-
[["ja", "ja-JP"], jaSearchLocale]
|
|
149
|
-
];
|
|
150
|
-
|
|
151
|
-
//#endregion
|
|
152
9
|
//#region src/node/prepareSearchIndex.ts
|
|
153
10
|
const SEARCH_INDEX_DIR = "internal/minisearchIndex/";
|
|
154
11
|
const indexByLocales = /* @__PURE__ */ new Map();
|
|
@@ -187,15 +44,13 @@ async function prepareSearchIndex({ app, isSearchable, searchOptions }) {
|
|
|
187
44
|
if (app.env.isDebug) logger.info(`\n[${colors.green("@vuepress-plume/plugin-search")}] prepare search time spent: ${(performance.now() - start).toFixed(2)}ms`);
|
|
188
45
|
}
|
|
189
46
|
async function onSearchIndexUpdated(filepath, { app, isSearchable, searchOptions }) {
|
|
190
|
-
|
|
191
|
-
if (pages.some((p) => p.filePathRelative?.endsWith(filepath))) {
|
|
47
|
+
if ((isSearchable ? app.pages.filter(isSearchable) : app.pages).some((p) => p.filePathRelative?.endsWith(filepath))) {
|
|
192
48
|
await indexFile(app.pages.find((p) => p.filePathRelative?.endsWith(filepath)), searchOptions);
|
|
193
49
|
await writeTemp(app);
|
|
194
50
|
}
|
|
195
51
|
}
|
|
196
52
|
async function onSearchIndexRemoved(filepath, { app, isSearchable, searchOptions }) {
|
|
197
|
-
|
|
198
|
-
if (pages.some((p) => p.filePathRelative?.endsWith(filepath))) {
|
|
53
|
+
if ((isSearchable ? app.pages.filter(isSearchable) : app.pages).some((p) => p.filePathRelative?.endsWith(filepath))) {
|
|
199
54
|
const page = app.pages.find((p) => p.filePathRelative?.endsWith(filepath));
|
|
200
55
|
const fileId = page.path;
|
|
201
56
|
const locale = page.pathLocale;
|
|
@@ -209,8 +64,7 @@ async function writeTemp(app) {
|
|
|
209
64
|
const records = [];
|
|
210
65
|
for (const [locale] of indexByLocales) {
|
|
211
66
|
const index = indexByLocales.get(locale);
|
|
212
|
-
const
|
|
213
|
-
const filename = `searchBox-${localeName}.js`;
|
|
67
|
+
const filename = `searchBox-${locale.replace(/^\/|\/$/g, "").replace(/\//g, "_") || "default"}.js`;
|
|
214
68
|
records.push(`${JSON.stringify(locale)}: () => import('@${SEARCH_INDEX_DIR}${filename}')`);
|
|
215
69
|
await app.writeTemp(`${SEARCH_INDEX_DIR}${filename}`, `export default ${JSON.stringify(JSON.stringify(index) ?? {})}`);
|
|
216
70
|
}
|
|
@@ -301,6 +155,149 @@ if (import.meta.hot) {
|
|
|
301
155
|
`;
|
|
302
156
|
}
|
|
303
157
|
|
|
158
|
+
//#endregion
|
|
159
|
+
//#region src/node/locales/de.ts
|
|
160
|
+
const deSearchLocale = {
|
|
161
|
+
placeholder: "Dokumente durchsuchen",
|
|
162
|
+
resetButtonTitle: "Suche zurücksetzen",
|
|
163
|
+
backButtonTitle: "Schließen",
|
|
164
|
+
noResultsText: "Keine Suchergebnisse:",
|
|
165
|
+
footer: {
|
|
166
|
+
selectText: "Auswählen",
|
|
167
|
+
selectKeyAriaLabel: "Eingabe",
|
|
168
|
+
navigateText: "Wechseln",
|
|
169
|
+
navigateUpKeyAriaLabel: "Nach oben",
|
|
170
|
+
navigateDownKeyAriaLabel: "Nach unten",
|
|
171
|
+
closeText: "Schließen",
|
|
172
|
+
closeKeyAriaLabel: "Beenden"
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
//#endregion
|
|
177
|
+
//#region src/node/locales/en.ts
|
|
178
|
+
const enSearchLocale = {
|
|
179
|
+
placeholder: "Search",
|
|
180
|
+
resetButtonTitle: "Reset search",
|
|
181
|
+
backButtonTitle: "Close search",
|
|
182
|
+
noResultsText: "No results for",
|
|
183
|
+
footer: {
|
|
184
|
+
selectText: "to select",
|
|
185
|
+
selectKeyAriaLabel: "enter",
|
|
186
|
+
navigateText: "to navigate",
|
|
187
|
+
navigateUpKeyAriaLabel: "up arrow",
|
|
188
|
+
navigateDownKeyAriaLabel: "down arrow",
|
|
189
|
+
closeText: "to close",
|
|
190
|
+
closeKeyAriaLabel: "escape"
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
//#endregion
|
|
195
|
+
//#region src/node/locales/fr.ts
|
|
196
|
+
const frSearchLocale = {
|
|
197
|
+
placeholder: "Rechercher dans la documentation",
|
|
198
|
+
resetButtonTitle: "Réinitialiser la recherche",
|
|
199
|
+
backButtonTitle: "Fermer",
|
|
200
|
+
noResultsText: "Aucun résultat trouvé :",
|
|
201
|
+
footer: {
|
|
202
|
+
selectText: "sélectionner",
|
|
203
|
+
selectKeyAriaLabel: "Entrée",
|
|
204
|
+
navigateText: "naviguer",
|
|
205
|
+
navigateUpKeyAriaLabel: "haut",
|
|
206
|
+
navigateDownKeyAriaLabel: "bas",
|
|
207
|
+
closeText: "fermer",
|
|
208
|
+
closeKeyAriaLabel: "sortie"
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
//#endregion
|
|
213
|
+
//#region src/node/locales/ja.ts
|
|
214
|
+
const jaSearchLocale = {
|
|
215
|
+
placeholder: "ドキュメントを検索",
|
|
216
|
+
resetButtonTitle: "検索をリセット",
|
|
217
|
+
backButtonTitle: "閉じる",
|
|
218
|
+
noResultsText: "検索結果がありません:",
|
|
219
|
+
footer: {
|
|
220
|
+
selectText: "選択",
|
|
221
|
+
selectKeyAriaLabel: "入力",
|
|
222
|
+
navigateText: "切り替え",
|
|
223
|
+
navigateUpKeyAriaLabel: "上へ",
|
|
224
|
+
navigateDownKeyAriaLabel: "下へ",
|
|
225
|
+
closeText: "閉じる",
|
|
226
|
+
closeKeyAriaLabel: "終了"
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
//#endregion
|
|
231
|
+
//#region src/node/locales/ru.ts
|
|
232
|
+
const ruSearchLocale = {
|
|
233
|
+
placeholder: "Поиск по документации",
|
|
234
|
+
resetButtonTitle: "Сбросить поиск",
|
|
235
|
+
backButtonTitle: "Закрыть",
|
|
236
|
+
noResultsText: "Нет результатов поиска:",
|
|
237
|
+
footer: {
|
|
238
|
+
selectText: "Выбрать",
|
|
239
|
+
selectKeyAriaLabel: "Ввод",
|
|
240
|
+
navigateText: "Переключить",
|
|
241
|
+
navigateUpKeyAriaLabel: "Вверх",
|
|
242
|
+
navigateDownKeyAriaLabel: "Вниз",
|
|
243
|
+
closeText: "Закрыть",
|
|
244
|
+
closeKeyAriaLabel: "Выход"
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
//#endregion
|
|
249
|
+
//#region src/node/locales/zh-tw.ts
|
|
250
|
+
const zhTwSearchLocale = {
|
|
251
|
+
placeholder: "搜索文檔",
|
|
252
|
+
resetButtonTitle: "重置搜索",
|
|
253
|
+
backButtonTitle: "關閉",
|
|
254
|
+
noResultsText: "無搜索結果:",
|
|
255
|
+
footer: {
|
|
256
|
+
selectText: "選擇",
|
|
257
|
+
selectKeyAriaLabel: "輸入",
|
|
258
|
+
navigateText: "切換",
|
|
259
|
+
navigateUpKeyAriaLabel: "向上",
|
|
260
|
+
navigateDownKeyAriaLabel: "向下",
|
|
261
|
+
closeText: "關閉",
|
|
262
|
+
closeKeyAriaLabel: "退出"
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
//#endregion
|
|
267
|
+
//#region src/node/locales/zh.ts
|
|
268
|
+
const zhSearchLocale = {
|
|
269
|
+
placeholder: "搜索文档",
|
|
270
|
+
resetButtonTitle: "重置搜索",
|
|
271
|
+
backButtonTitle: "关闭",
|
|
272
|
+
noResultsText: "无搜索结果:",
|
|
273
|
+
footer: {
|
|
274
|
+
selectText: "选择",
|
|
275
|
+
selectKeyAriaLabel: "输入",
|
|
276
|
+
navigateText: "切换",
|
|
277
|
+
navigateUpKeyAriaLabel: "向上",
|
|
278
|
+
navigateDownKeyAriaLabel: "向下",
|
|
279
|
+
closeText: "关闭",
|
|
280
|
+
closeKeyAriaLabel: "退出"
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
//#endregion
|
|
285
|
+
//#region src/node/locales/index.ts
|
|
286
|
+
const SEARCH_LOCALES = [
|
|
287
|
+
[["en", "en-US"], enSearchLocale],
|
|
288
|
+
[[
|
|
289
|
+
"zh",
|
|
290
|
+
"zh-CN",
|
|
291
|
+
"zh-Hans",
|
|
292
|
+
"zh-Hant"
|
|
293
|
+
], zhSearchLocale],
|
|
294
|
+
[["zh-TW"], zhTwSearchLocale],
|
|
295
|
+
[["de", "de-DE"], deSearchLocale],
|
|
296
|
+
[["fr", "fr-FR"], frSearchLocale],
|
|
297
|
+
[["ru", "ru-RU"], ruSearchLocale],
|
|
298
|
+
[["ja", "ja-JP"], jaSearchLocale]
|
|
299
|
+
];
|
|
300
|
+
|
|
304
301
|
//#endregion
|
|
305
302
|
//#region src/node/searchPlugin.ts
|
|
306
303
|
const __dirname = getDirname(import.meta.url);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vuepress-plume/plugin-search",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.0-rc.
|
|
4
|
+
"version": "1.0.0-rc.164",
|
|
5
5
|
"description": "The Plugin for VuePress 2 - local search",
|
|
6
6
|
"author": "pengzhanbo <volodymyr@foxmail.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"chokidar": "4.0.3",
|
|
41
41
|
"focus-trap": "^7.6.5",
|
|
42
42
|
"mark.js": "^8.11.1",
|
|
43
|
-
"minisearch": "^7.
|
|
43
|
+
"minisearch": "^7.2.0",
|
|
44
44
|
"p-map": "^7.0.3",
|
|
45
45
|
"vue": "^3.5.21"
|
|
46
46
|
},
|