fumadocs-core 13.4.10 → 14.0.0
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/dist/{search-algolia/client.js → algolia-NTWLS6J3.js} +10 -27
- package/dist/breadcrumb.d.ts +15 -7
- package/dist/breadcrumb.js +47 -25
- package/dist/chunk-2V6SCS43.js +12 -0
- package/dist/chunk-2ZSMGYVH.js +78 -0
- package/dist/{chunk-UQV4A7HQ.js → chunk-4MNUWZIW.js} +9 -7
- package/dist/{chunk-KGMG4N3Y.js → chunk-I5BWASD6.js} +2 -2
- package/dist/dynamic-link.js +2 -1
- package/dist/fetch-4K7QOPFM.js +17 -0
- package/dist/i18n/index.js +64 -3
- package/dist/mdx-plugins/index.d.ts +20 -5
- package/dist/mdx-plugins/index.js +140 -14
- package/dist/{page-tree-BTCDMLTU.d.ts → page-tree-r8qjoUla.d.ts} +7 -4
- package/dist/{search-algolia/server.d.ts → search/algolia.d.ts} +1 -1
- package/dist/{search-algolia/server.js → search/algolia.js} +1 -1
- package/dist/search/client.d.ts +37 -7
- package/dist/search/client.js +74 -22
- package/dist/search/server.d.ts +65 -32
- package/dist/search/server.js +272 -234
- package/dist/server/index.d.ts +56 -4
- package/dist/server/index.js +59 -1
- package/dist/sidebar.js +7 -5
- package/dist/source/index.d.ts +14 -23
- package/dist/source/index.js +89 -81
- package/dist/static-5GPJ7RUY.js +60 -0
- package/dist/toc.js +1 -1
- package/dist/{search/shared.d.ts → types-Ch8gnVgO.d.ts} +1 -1
- package/dist/utils/use-on-change.d.ts +6 -1
- package/dist/utils/use-on-change.js +1 -1
- package/package.json +27 -86
- package/dist/chunk-MXOJWF66.js +0 -67
- package/dist/chunk-NREWOIVI.js +0 -19
- package/dist/middleware.d.ts +0 -3
- package/dist/middleware.js +0 -7
- package/dist/search/shared.js +0 -0
- package/dist/search-algolia/client.d.ts +0 -37
package/dist/sidebar.js
CHANGED
|
@@ -19,11 +19,13 @@ function useSidebarContext() {
|
|
|
19
19
|
}
|
|
20
20
|
function SidebarProvider(props) {
|
|
21
21
|
const [openInner, setOpenInner] = useState(false);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
return /* @__PURE__ */ jsx(
|
|
23
|
+
SidebarContext.Provider,
|
|
24
|
+
{
|
|
25
|
+
value: [props.open ?? openInner, props.onOpenChange ?? setOpenInner],
|
|
26
|
+
children: props.children
|
|
27
|
+
}
|
|
28
|
+
);
|
|
27
29
|
}
|
|
28
30
|
function SidebarTrigger({
|
|
29
31
|
as,
|
package/dist/source/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ReactElement } from 'react';
|
|
2
2
|
import { I as I18nConfig } from '../config-inq6kP6y.js';
|
|
3
|
-
import { R as Root, I as Item, F as Folder$1, S as Separator } from '../page-tree-
|
|
3
|
+
import { R as Root, I as Item, F as Folder$1, S as Separator } from '../page-tree-r8qjoUla.js';
|
|
4
4
|
|
|
5
5
|
interface FileInfo {
|
|
6
|
+
/**
|
|
7
|
+
* The locale extension of file
|
|
8
|
+
*/
|
|
6
9
|
locale?: string;
|
|
7
10
|
/**
|
|
8
11
|
* Original path of file
|
|
@@ -76,20 +79,6 @@ interface LoaderOptions {
|
|
|
76
79
|
* Configure i18n
|
|
77
80
|
*/
|
|
78
81
|
i18n?: I18nConfig;
|
|
79
|
-
/**
|
|
80
|
-
* Accepted languages.
|
|
81
|
-
*
|
|
82
|
-
* A page tree will be built for each language.
|
|
83
|
-
*
|
|
84
|
-
* @deprecated Use `i18n` instead
|
|
85
|
-
*/
|
|
86
|
-
languages?: string[];
|
|
87
|
-
/**
|
|
88
|
-
* Default locale when locale is not provided.
|
|
89
|
-
*
|
|
90
|
-
* @deprecated Use `i18n` instead
|
|
91
|
-
*/
|
|
92
|
-
defaultLanguage?: string;
|
|
93
82
|
}
|
|
94
83
|
interface Source<Config extends SourceConfig> {
|
|
95
84
|
/**
|
|
@@ -103,6 +92,7 @@ interface Page<Data = PageData> {
|
|
|
103
92
|
slugs: string[];
|
|
104
93
|
url: string;
|
|
105
94
|
data: Data;
|
|
95
|
+
locale?: string | undefined;
|
|
106
96
|
}
|
|
107
97
|
interface Meta<Data = MetaData> {
|
|
108
98
|
file: FileInfo;
|
|
@@ -114,7 +104,7 @@ interface LanguageEntry<Data = PageData> {
|
|
|
114
104
|
}
|
|
115
105
|
interface LoaderOutput<Config extends LoaderConfig> {
|
|
116
106
|
pageTree: Config['i18n'] extends true ? Record<string, Root> : Root;
|
|
117
|
-
|
|
107
|
+
_i18n?: I18nConfig;
|
|
118
108
|
/**
|
|
119
109
|
* Get list of pages from language, empty if language hasn't specified
|
|
120
110
|
*
|
|
@@ -126,17 +116,19 @@ interface LoaderOutput<Config extends LoaderConfig> {
|
|
|
126
116
|
* @param language - If empty, the default language will be used
|
|
127
117
|
*/
|
|
128
118
|
getPage: (slugs: string[] | undefined, language?: string) => Page<Config['source']['pageData']> | undefined;
|
|
119
|
+
getNodePage: (node: Item) => Page<Config['source']['pageData']> | undefined;
|
|
120
|
+
getNodeMeta: (node: Folder$1) => Meta<Config['source']['metaData']> | undefined;
|
|
129
121
|
/**
|
|
130
122
|
* generate static params for Next.js SSG
|
|
131
123
|
*/
|
|
132
124
|
generateParams: <TSlug extends string = 'slug', TLang extends string = 'lang'>(slug?: TSlug, lang?: TLang) => (Record<TSlug, string[]> & Record<TLang, string>)[];
|
|
133
125
|
}
|
|
134
|
-
declare function createGetUrl(baseUrl: string): UrlFn;
|
|
126
|
+
declare function createGetUrl(baseUrl: string, i18n?: I18nConfig): UrlFn;
|
|
135
127
|
declare function getSlugs(info: FileInfo): string[];
|
|
136
128
|
type InferSourceConfig<T> = T extends Source<infer Config> ? Config : never;
|
|
137
129
|
declare function loader<Options extends LoaderOptions>(options: Options): LoaderOutput<{
|
|
138
130
|
source: InferSourceConfig<Options['source']>;
|
|
139
|
-
i18n: Options['i18n'] extends I18nConfig ? true :
|
|
131
|
+
i18n: Options['i18n'] extends I18nConfig ? true : false;
|
|
140
132
|
}>;
|
|
141
133
|
|
|
142
134
|
interface MetaData {
|
|
@@ -145,6 +137,7 @@ interface MetaData {
|
|
|
145
137
|
root?: boolean | undefined;
|
|
146
138
|
pages?: string[] | undefined;
|
|
147
139
|
defaultOpen?: boolean | undefined;
|
|
140
|
+
description?: string | undefined;
|
|
148
141
|
}
|
|
149
142
|
interface PageData {
|
|
150
143
|
icon?: string | undefined;
|
|
@@ -160,9 +153,7 @@ type UrlFn = (slugs: string[], locale?: string) => string;
|
|
|
160
153
|
interface MetaFile {
|
|
161
154
|
file: FileInfo;
|
|
162
155
|
format: 'meta';
|
|
163
|
-
data:
|
|
164
|
-
data: MetaData;
|
|
165
|
-
};
|
|
156
|
+
data: MetaData;
|
|
166
157
|
}
|
|
167
158
|
interface PageFile {
|
|
168
159
|
file: FileInfo;
|
|
@@ -215,11 +206,11 @@ declare namespace fileSystem {
|
|
|
215
206
|
|
|
216
207
|
interface BuildPageTreeOptions {
|
|
217
208
|
/**
|
|
218
|
-
*
|
|
209
|
+
* Remove references to the file path of original nodes (`$ref`)
|
|
219
210
|
*
|
|
220
211
|
* @defaultValue false
|
|
221
212
|
*/
|
|
222
|
-
|
|
213
|
+
noRef?: boolean;
|
|
223
214
|
attachFile?: (node: Item, file?: PageFile) => Item;
|
|
224
215
|
attachFolder?: (node: Folder$1, folder: Folder, meta?: MetaFile) => Folder$1;
|
|
225
216
|
attachSeparator?: (node: Separator) => Separator;
|
package/dist/source/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
removeUndefined
|
|
3
|
+
} from "../chunk-2V6SCS43.js";
|
|
1
4
|
import {
|
|
2
5
|
slash
|
|
3
6
|
} from "../chunk-UWEEHUJV.js";
|
|
@@ -145,7 +148,7 @@ function buildFolderNode(folder, isGlobalRoot, ctx) {
|
|
|
145
148
|
resolvePath(folder.file.flattenedPath, "index"),
|
|
146
149
|
"page"
|
|
147
150
|
);
|
|
148
|
-
const metadata = meta?.data
|
|
151
|
+
const metadata = meta?.data;
|
|
149
152
|
const index = indexFile ? buildFileNode(indexFile, ctx) : void 0;
|
|
150
153
|
let children;
|
|
151
154
|
if (!meta) {
|
|
@@ -175,30 +178,27 @@ function buildFolderNode(folder, isGlobalRoot, ctx) {
|
|
|
175
178
|
icon: ctx.options.resolveIcon?.(metadata?.icon) ?? index?.icon,
|
|
176
179
|
root: metadata?.root,
|
|
177
180
|
defaultOpen: metadata?.defaultOpen,
|
|
181
|
+
description: metadata?.description,
|
|
178
182
|
index,
|
|
179
|
-
children
|
|
183
|
+
children,
|
|
184
|
+
$ref: !ctx.options.noRef ? {
|
|
185
|
+
metaFile: meta?.file.path
|
|
186
|
+
} : void 0
|
|
180
187
|
};
|
|
181
|
-
if (ctx.options.attachFolderIds) {
|
|
182
|
-
node.id = folder.file.flattenedPath;
|
|
183
|
-
}
|
|
184
188
|
return removeUndefined(
|
|
185
189
|
ctx.options.attachFolder?.(node, folder, meta) ?? node
|
|
186
190
|
);
|
|
187
191
|
}
|
|
188
192
|
function buildFileNode(file, ctx) {
|
|
189
|
-
let urlLocale;
|
|
190
193
|
const localized = findLocalizedFile(file.file.flattenedPath, "page", ctx) ?? file;
|
|
191
|
-
const hideLocale = ctx.i18n?.hideLocale ?? "never";
|
|
192
|
-
if (hideLocale === "never") {
|
|
193
|
-
urlLocale = ctx.lang;
|
|
194
|
-
} else if (hideLocale === "default-locale" && ctx.lang !== ctx.i18n?.defaultLanguage) {
|
|
195
|
-
urlLocale = ctx.lang;
|
|
196
|
-
}
|
|
197
194
|
const item = {
|
|
198
195
|
type: "page",
|
|
199
196
|
name: localized.data.data.title,
|
|
200
197
|
icon: ctx.options.resolveIcon?.(localized.data.data.icon),
|
|
201
|
-
url: ctx.options.getUrl(localized.data.slugs,
|
|
198
|
+
url: ctx.options.getUrl(localized.data.slugs, ctx.lang),
|
|
199
|
+
$ref: !ctx.options.noRef ? {
|
|
200
|
+
file: localized.file.path
|
|
201
|
+
} : void 0
|
|
202
202
|
};
|
|
203
203
|
return removeUndefined(ctx.options.attachFile?.(item, file) ?? item);
|
|
204
204
|
}
|
|
@@ -248,13 +248,6 @@ function pathToName(name, resolveGroup = false) {
|
|
|
248
248
|
}
|
|
249
249
|
return result.join("");
|
|
250
250
|
}
|
|
251
|
-
function removeUndefined(value) {
|
|
252
|
-
const obj = value;
|
|
253
|
-
Object.keys(obj).forEach((key) => {
|
|
254
|
-
if (obj[key] === void 0) delete obj[key];
|
|
255
|
-
});
|
|
256
|
-
return value;
|
|
257
|
-
}
|
|
258
251
|
|
|
259
252
|
// src/source/file-system.ts
|
|
260
253
|
var file_system_exports = {};
|
|
@@ -329,9 +322,7 @@ function loadFiles(files, options) {
|
|
|
329
322
|
});
|
|
330
323
|
}
|
|
331
324
|
if (file.type === "meta") {
|
|
332
|
-
storage.write(relativePath, file.type,
|
|
333
|
-
data: file.data
|
|
334
|
-
});
|
|
325
|
+
storage.write(relativePath, file.type, file.data);
|
|
335
326
|
}
|
|
336
327
|
}
|
|
337
328
|
for (const transformer of transformers) {
|
|
@@ -344,30 +335,47 @@ function loadFiles(files, options) {
|
|
|
344
335
|
}
|
|
345
336
|
|
|
346
337
|
// src/source/loader.ts
|
|
347
|
-
function
|
|
348
|
-
const
|
|
338
|
+
function indexPages(storage, getUrl, languages = []) {
|
|
339
|
+
const i18n = /* @__PURE__ */ new Map();
|
|
340
|
+
const pages = /* @__PURE__ */ new Map();
|
|
341
|
+
const metas = /* @__PURE__ */ new Map();
|
|
349
342
|
const defaultMap = /* @__PURE__ */ new Map();
|
|
350
|
-
|
|
343
|
+
i18n.set("", defaultMap);
|
|
351
344
|
for (const file of storage.list()) {
|
|
352
|
-
if (file.format
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
345
|
+
if (file.format === "meta") metas.set(file.file.path, fileToMeta(file));
|
|
346
|
+
if (file.format === "page") {
|
|
347
|
+
const page = fileToPage(file, getUrl, file.file.locale);
|
|
348
|
+
pages.set(file.file.path, page);
|
|
349
|
+
if (file.file.locale) continue;
|
|
350
|
+
defaultMap.set(page.slugs.join("/"), page);
|
|
351
|
+
for (const lang of languages) {
|
|
352
|
+
const langMap = i18n.get(lang) ?? /* @__PURE__ */ new Map();
|
|
353
|
+
const localized = storage.read(
|
|
354
|
+
`${file.file.flattenedPath}.${lang}`,
|
|
355
|
+
"page"
|
|
356
|
+
);
|
|
357
|
+
const localizedPage = fileToPage(localized ?? file, getUrl, lang);
|
|
358
|
+
langMap.set(localizedPage.slugs.join("/"), localizedPage);
|
|
359
|
+
i18n.set(lang, langMap);
|
|
360
|
+
}
|
|
364
361
|
}
|
|
365
362
|
}
|
|
366
|
-
return
|
|
363
|
+
return {
|
|
364
|
+
i18n,
|
|
365
|
+
pathToPage: pages,
|
|
366
|
+
pathToMeta: metas
|
|
367
|
+
};
|
|
367
368
|
}
|
|
368
|
-
function createGetUrl(baseUrl) {
|
|
369
|
+
function createGetUrl(baseUrl, i18n) {
|
|
369
370
|
return (slugs, locale) => {
|
|
370
|
-
const
|
|
371
|
+
const hideLocale = i18n?.hideLocale ?? "never";
|
|
372
|
+
let urlLocale;
|
|
373
|
+
if (hideLocale === "never") {
|
|
374
|
+
urlLocale = locale;
|
|
375
|
+
} else if (hideLocale === "default-locale" && locale !== i18n?.defaultLanguage) {
|
|
376
|
+
urlLocale = locale;
|
|
377
|
+
}
|
|
378
|
+
const paths = urlLocale ? [urlLocale, ...baseUrl.split("/"), ...slugs] : [...baseUrl.split("/"), ...slugs];
|
|
371
379
|
return `/${paths.filter((v) => v.length > 0).join("/")}`;
|
|
372
380
|
};
|
|
373
381
|
}
|
|
@@ -381,62 +389,47 @@ function getSlugs(info) {
|
|
|
381
389
|
);
|
|
382
390
|
}
|
|
383
391
|
function loader(options) {
|
|
384
|
-
if (options.languages) {
|
|
385
|
-
console.warn(
|
|
386
|
-
"Fumadocs: It's highly recommended to use `i18n` config instead of passing `languages` to loader."
|
|
387
|
-
);
|
|
388
|
-
return createOutput({
|
|
389
|
-
...options,
|
|
390
|
-
i18n: {
|
|
391
|
-
languages: options.languages,
|
|
392
|
-
defaultLanguage: options.defaultLanguage
|
|
393
|
-
}
|
|
394
|
-
});
|
|
395
|
-
}
|
|
396
392
|
return createOutput(options);
|
|
397
393
|
}
|
|
398
|
-
function createOutput({
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
pageTree: pageTreeOptions = {},
|
|
407
|
-
i18n
|
|
408
|
-
}) {
|
|
394
|
+
function createOutput(options) {
|
|
395
|
+
const {
|
|
396
|
+
source,
|
|
397
|
+
rootDir = "",
|
|
398
|
+
baseUrl = "/",
|
|
399
|
+
slugs: slugsFn = getSlugs,
|
|
400
|
+
url: getUrl = createGetUrl(baseUrl, options.i18n)
|
|
401
|
+
} = options;
|
|
409
402
|
const storage = loadFiles(
|
|
410
403
|
typeof source.files === "function" ? source.files(rootDir) : source.files,
|
|
411
404
|
{
|
|
412
|
-
transformers,
|
|
405
|
+
transformers: options.transformers,
|
|
413
406
|
rootDir,
|
|
414
407
|
getSlugs: slugsFn
|
|
415
408
|
}
|
|
416
409
|
);
|
|
417
|
-
const
|
|
410
|
+
const walker = indexPages(storage, getUrl, options.i18n?.languages);
|
|
418
411
|
const builder = createPageTreeBuilder();
|
|
419
|
-
const pageTree = i18n === void 0 ? builder.build({
|
|
412
|
+
const pageTree = options.i18n === void 0 ? builder.build({
|
|
420
413
|
storage,
|
|
421
|
-
resolveIcon,
|
|
414
|
+
resolveIcon: options.icon,
|
|
422
415
|
getUrl,
|
|
423
|
-
...
|
|
416
|
+
...options.pageTree
|
|
424
417
|
}) : builder.buildI18n({
|
|
425
418
|
storage,
|
|
426
|
-
resolveIcon,
|
|
419
|
+
resolveIcon: options.icon,
|
|
427
420
|
getUrl,
|
|
428
|
-
i18n,
|
|
429
|
-
...
|
|
421
|
+
i18n: options.i18n,
|
|
422
|
+
...options.pageTree
|
|
430
423
|
});
|
|
431
424
|
return {
|
|
425
|
+
_i18n: options.i18n,
|
|
432
426
|
pageTree,
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
return Array.from(i18nMap.get(language)?.values() ?? []);
|
|
427
|
+
getPages(language = options.i18n?.defaultLanguage ?? "") {
|
|
428
|
+
return Array.from(walker.i18n.get(language)?.values() ?? []);
|
|
436
429
|
},
|
|
437
430
|
getLanguages() {
|
|
438
431
|
const list = [];
|
|
439
|
-
for (const [language, pages] of
|
|
432
|
+
for (const [language, pages] of walker.i18n) {
|
|
440
433
|
if (language === "") continue;
|
|
441
434
|
list.push({
|
|
442
435
|
language,
|
|
@@ -445,12 +438,20 @@ function createOutput({
|
|
|
445
438
|
}
|
|
446
439
|
return list;
|
|
447
440
|
},
|
|
448
|
-
getPage(slugs = [], language = i18n?.defaultLanguage ?? "") {
|
|
449
|
-
return
|
|
441
|
+
getPage(slugs = [], language = options.i18n?.defaultLanguage ?? "") {
|
|
442
|
+
return walker.i18n.get(language)?.get(slugs.join("/"));
|
|
443
|
+
},
|
|
444
|
+
getNodeMeta(node) {
|
|
445
|
+
if (!node.$ref?.metaFile) return;
|
|
446
|
+
return walker.pathToMeta.get(node.$ref.metaFile);
|
|
447
|
+
},
|
|
448
|
+
getNodePage(node) {
|
|
449
|
+
if (!node.$ref?.file) return;
|
|
450
|
+
return walker.pathToPage.get(node.$ref.file);
|
|
450
451
|
},
|
|
451
452
|
// @ts-expect-error -- ignore this
|
|
452
453
|
generateParams(slug, lang) {
|
|
453
|
-
if (i18n) {
|
|
454
|
+
if (options.i18n) {
|
|
454
455
|
return this.getLanguages().flatMap(
|
|
455
456
|
(entry) => entry.pages.map((page) => ({
|
|
456
457
|
[slug ?? "slug"]: page.slugs,
|
|
@@ -458,18 +459,25 @@ function createOutput({
|
|
|
458
459
|
}))
|
|
459
460
|
);
|
|
460
461
|
}
|
|
461
|
-
return Array.from(
|
|
462
|
+
return Array.from(walker.i18n.get("")?.values() ?? []).map((page) => ({
|
|
462
463
|
[slug ?? "slug"]: page.slugs
|
|
463
464
|
}));
|
|
464
465
|
}
|
|
465
466
|
};
|
|
466
467
|
}
|
|
468
|
+
function fileToMeta(file) {
|
|
469
|
+
return {
|
|
470
|
+
file: file.file,
|
|
471
|
+
data: file.data
|
|
472
|
+
};
|
|
473
|
+
}
|
|
467
474
|
function fileToPage(file, getUrl, locale) {
|
|
468
475
|
return {
|
|
469
476
|
file: file.file,
|
|
470
477
|
url: getUrl(file.data.slugs, locale),
|
|
471
478
|
slugs: file.data.slugs,
|
|
472
|
-
data: file.data.data
|
|
479
|
+
data: file.data.data,
|
|
480
|
+
locale
|
|
473
481
|
};
|
|
474
482
|
}
|
|
475
483
|
export {
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import {
|
|
2
|
+
searchAdvanced,
|
|
3
|
+
searchSimple
|
|
4
|
+
} from "./chunk-2ZSMGYVH.js";
|
|
5
|
+
import "./chunk-2V6SCS43.js";
|
|
6
|
+
import "./chunk-MLKGABMK.js";
|
|
7
|
+
|
|
8
|
+
// src/search/client/static.ts
|
|
9
|
+
import {
|
|
10
|
+
create,
|
|
11
|
+
load
|
|
12
|
+
} from "@orama/orama";
|
|
13
|
+
function createStaticClient({
|
|
14
|
+
from = "/api/search"
|
|
15
|
+
}) {
|
|
16
|
+
const dbs = /* @__PURE__ */ new Map();
|
|
17
|
+
async function init() {
|
|
18
|
+
const res = await fetch(from);
|
|
19
|
+
if (!res.ok)
|
|
20
|
+
throw new Error(
|
|
21
|
+
`failed to fetch exported search indexes from ${from}, make sure the search database is exported and available for client.`
|
|
22
|
+
);
|
|
23
|
+
const data = await res.json();
|
|
24
|
+
if (data.type === "i18n") {
|
|
25
|
+
Object.entries(data.data).forEach(([k, v]) => {
|
|
26
|
+
const db = create({ schema: { _: "string" } });
|
|
27
|
+
load(db, v);
|
|
28
|
+
dbs.set(k, {
|
|
29
|
+
type: v.type,
|
|
30
|
+
db
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
} else {
|
|
34
|
+
const db = create({ schema: { _: "string" } });
|
|
35
|
+
load(db, data);
|
|
36
|
+
dbs.set("", {
|
|
37
|
+
type: data.type,
|
|
38
|
+
db
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const get = init();
|
|
43
|
+
return {
|
|
44
|
+
async search(query, locale, tag) {
|
|
45
|
+
await get;
|
|
46
|
+
const cached = dbs.get(locale ?? "");
|
|
47
|
+
if (!cached) return [];
|
|
48
|
+
if (cached.type === "simple")
|
|
49
|
+
return searchSimple(cached, query);
|
|
50
|
+
return searchAdvanced(
|
|
51
|
+
cached.db,
|
|
52
|
+
query,
|
|
53
|
+
tag
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
createStaticClient
|
|
60
|
+
};
|
package/dist/toc.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @param value - state to watch
|
|
3
|
+
* @param onChange - when the state changed
|
|
4
|
+
* @param isUpdated - a function that determines if the state is updated
|
|
5
|
+
*/
|
|
6
|
+
declare function useOnChange<T>(value: T, onChange: (current: T, previous: T) => void, isUpdated?: (prev: T, current: T) => boolean): void;
|
|
2
7
|
|
|
3
8
|
export { useOnChange };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "14.0.0",
|
|
4
4
|
"description": "The library for building a documentation website in Next.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"NextJs",
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
"import": "./dist/search/client.js",
|
|
29
29
|
"types": "./dist/search/client.d.ts"
|
|
30
30
|
},
|
|
31
|
-
"./search/shared": {
|
|
32
|
-
"import": "./dist/search/shared.js",
|
|
33
|
-
"types": "./dist/search/shared.d.ts"
|
|
34
|
-
},
|
|
35
31
|
"./search/server": {
|
|
36
32
|
"import": "./dist/search/server.js",
|
|
37
33
|
"types": "./dist/search/server.d.ts"
|
|
38
34
|
},
|
|
35
|
+
"./search/algolia": {
|
|
36
|
+
"import": "./dist/search/algolia.js",
|
|
37
|
+
"types": "./dist/search/algolia.d.ts"
|
|
38
|
+
},
|
|
39
39
|
"./server": {
|
|
40
40
|
"import": "./dist/server/index.js",
|
|
41
41
|
"types": "./dist/server/index.d.ts"
|
|
@@ -52,116 +52,57 @@
|
|
|
52
52
|
"import": "./dist/link.js",
|
|
53
53
|
"types": "./dist/link.d.ts"
|
|
54
54
|
},
|
|
55
|
-
"./middleware": {
|
|
56
|
-
"import": "./dist/middleware.js",
|
|
57
|
-
"types": "./dist/middleware.d.ts"
|
|
58
|
-
},
|
|
59
55
|
"./mdx-plugins": {
|
|
60
56
|
"import": "./dist/mdx-plugins/index.js",
|
|
61
57
|
"types": "./dist/mdx-plugins/index.d.ts"
|
|
62
58
|
},
|
|
63
|
-
"./search-algolia/client": {
|
|
64
|
-
"import": "./dist/search-algolia/client.js",
|
|
65
|
-
"types": "./dist/search-algolia/client.d.ts"
|
|
66
|
-
},
|
|
67
|
-
"./search-algolia/server": {
|
|
68
|
-
"import": "./dist/search-algolia/server.js",
|
|
69
|
-
"types": "./dist/search-algolia/server.d.ts"
|
|
70
|
-
},
|
|
71
59
|
"./i18n": {
|
|
72
60
|
"import": "./dist/i18n/index.js",
|
|
73
61
|
"types": "./dist/i18n/index.d.ts"
|
|
74
62
|
}
|
|
75
63
|
},
|
|
76
|
-
"typesVersions": {
|
|
77
|
-
"*": {
|
|
78
|
-
"sidebar": [
|
|
79
|
-
"./dist/sidebar.d.ts"
|
|
80
|
-
],
|
|
81
|
-
"breadcrumb": [
|
|
82
|
-
"./dist/breadcrumb.d.ts"
|
|
83
|
-
],
|
|
84
|
-
"toc": [
|
|
85
|
-
"./dist/toc.d.ts"
|
|
86
|
-
],
|
|
87
|
-
"search/client": [
|
|
88
|
-
"./dist/search/client.d.ts"
|
|
89
|
-
],
|
|
90
|
-
"search/shared": [
|
|
91
|
-
"./dist/search/shared.d.ts"
|
|
92
|
-
],
|
|
93
|
-
"search/server": [
|
|
94
|
-
"./dist/search/server.d.ts"
|
|
95
|
-
],
|
|
96
|
-
"server": [
|
|
97
|
-
"./dist/server/index.d.ts"
|
|
98
|
-
],
|
|
99
|
-
"source": [
|
|
100
|
-
"./dist/source/index.d.ts"
|
|
101
|
-
],
|
|
102
|
-
"link": [
|
|
103
|
-
"./dist/link.d.ts"
|
|
104
|
-
],
|
|
105
|
-
"middleware": [
|
|
106
|
-
"./dist/middleware.d.ts"
|
|
107
|
-
],
|
|
108
|
-
"utils/use-on-change": [
|
|
109
|
-
"./dist/utils/use-on-change.d.ts"
|
|
110
|
-
],
|
|
111
|
-
"mdx-plugins": [
|
|
112
|
-
"./dist/mdx-plugins/index.d.ts"
|
|
113
|
-
],
|
|
114
|
-
"search-algolia/client": [
|
|
115
|
-
"./dist/search-algolia/client.d.ts"
|
|
116
|
-
],
|
|
117
|
-
"search-algolia/server": [
|
|
118
|
-
"./dist/search-algolia/server.d.ts"
|
|
119
|
-
],
|
|
120
|
-
"i18n": [
|
|
121
|
-
"./dist/i18n/index.d.ts"
|
|
122
|
-
]
|
|
123
|
-
}
|
|
124
|
-
},
|
|
125
64
|
"files": [
|
|
126
65
|
"dist/*"
|
|
127
66
|
],
|
|
128
67
|
"dependencies": {
|
|
129
|
-
"@formatjs/intl-localematcher": "^0.5.
|
|
130
|
-
"@
|
|
131
|
-
"@shikijs/
|
|
132
|
-
"
|
|
68
|
+
"@formatjs/intl-localematcher": "^0.5.5",
|
|
69
|
+
"@orama/orama": "^3.0.1",
|
|
70
|
+
"@shikijs/rehype": "^1.22.0",
|
|
71
|
+
"@shikijs/transformers": "^1.22.0",
|
|
133
72
|
"github-slugger": "^2.0.0",
|
|
73
|
+
"hast-util-to-estree": "^3.1.0",
|
|
134
74
|
"image-size": "^1.1.1",
|
|
135
|
-
"negotiator": "^0.
|
|
136
|
-
"
|
|
137
|
-
"react-remove-scroll": "^2.5.10",
|
|
75
|
+
"negotiator": "^1.0.0",
|
|
76
|
+
"react-remove-scroll": "^2.6.0",
|
|
138
77
|
"remark": "^15.0.0",
|
|
139
78
|
"remark-gfm": "^4.0.0",
|
|
140
|
-
"remark-mdx": "^3.0.1",
|
|
141
79
|
"scroll-into-view-if-needed": "^3.1.0",
|
|
142
|
-
"shiki": "^1.
|
|
143
|
-
"swr": "^2.2.5",
|
|
80
|
+
"shiki": "^1.22.0",
|
|
144
81
|
"unist-util-visit": "^5.0.0"
|
|
145
82
|
},
|
|
146
83
|
"devDependencies": {
|
|
147
|
-
"@algolia/client-search": "
|
|
148
|
-
"@mdx-js/mdx": "^3.0
|
|
84
|
+
"@algolia/client-search": "4.24.0",
|
|
85
|
+
"@mdx-js/mdx": "^3.1.0",
|
|
149
86
|
"@types/estree-jsx": "^1.0.5",
|
|
150
|
-
"@types/flexsearch": "0.7.6",
|
|
151
87
|
"@types/hast": "^3.0.4",
|
|
152
88
|
"@types/mdast": "^4.0.3",
|
|
153
89
|
"@types/negotiator": "^0.6.3",
|
|
154
|
-
"@types/node": "22.
|
|
155
|
-
"@types/react": "^18.3.
|
|
156
|
-
"@types/react-dom": "^18.3.
|
|
157
|
-
"algoliasearch": "
|
|
158
|
-
"
|
|
90
|
+
"@types/node": "22.7.7",
|
|
91
|
+
"@types/react": "^18.3.11",
|
|
92
|
+
"@types/react-dom": "^18.3.1",
|
|
93
|
+
"algoliasearch": "4.24.0",
|
|
94
|
+
"mdast-util-mdx-jsx": "^3.1.3",
|
|
95
|
+
"mdast-util-mdxjs-esm": "^2.0.1",
|
|
96
|
+
"next": "^15.0.0",
|
|
97
|
+
"remark-mdx": "^3.1.0",
|
|
98
|
+
"remark-rehype": "^11.1.1",
|
|
159
99
|
"unified": "^11.0.5",
|
|
160
100
|
"eslint-config-custom": "0.0.0",
|
|
161
101
|
"tsconfig": "0.0.0"
|
|
162
102
|
},
|
|
163
|
-
"
|
|
164
|
-
"
|
|
103
|
+
"optionalDependencies": {
|
|
104
|
+
"algoliasearch": "4.24.0",
|
|
105
|
+
"next": "15.0.0",
|
|
165
106
|
"react": ">= 18",
|
|
166
107
|
"react-dom": ">= 18"
|
|
167
108
|
},
|