@hanzo/docs-core 16.4.3 → 16.5.3
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/README.md +3 -3
- package/dist/{advanced-BRT5Ij43.js → advanced-BH0syJ-M.js} +3 -4
- package/dist/{algolia-CQPXCnjV.js → algolia-C7Crg8-5.js} +2 -3
- package/dist/breadcrumb.d.ts +2 -3
- package/dist/breadcrumb.js +3 -4
- package/dist/{chunk-B-ezknvj.js → chunk-CaR5F9JI.js} +3 -3
- package/dist/content/github.d.ts +1 -2
- package/dist/content/github.js +1 -2
- package/dist/content/index.d.ts +3 -4
- package/dist/content/index.js +1 -2
- package/dist/content/mdx/preset-bundler.d.ts +9 -10
- package/dist/content/mdx/preset-bundler.js +2 -3
- package/dist/content/mdx/preset-runtime.d.ts +9 -10
- package/dist/content/mdx/preset-runtime.js +2 -3
- package/dist/content/toc.d.ts +1 -3
- package/dist/content/toc.js +4 -5
- package/dist/create-i18n-Cv3Cocbs.d.ts +51 -0
- package/dist/{definitions-DuxDer_c.d.ts → definitions-DSNTbAwC.d.ts} +1 -2
- package/dist/dynamic-link.d.ts +3 -4
- package/dist/dynamic-link.js +1 -3
- package/dist/{fetch-B5e9CFfN.js → fetch-HotVeLLF.js} +1 -2
- package/dist/framework/index.d.ts +5 -6
- package/dist/framework/index.js +18 -19
- package/dist/framework/next.d.ts +3 -4
- package/dist/framework/next.js +1 -2
- package/dist/framework/react-router.d.ts +1 -2
- package/dist/framework/react-router.js +1 -2
- package/dist/framework/tanstack.d.ts +4 -5
- package/dist/framework/tanstack.js +2 -3
- package/dist/framework/waku.d.ts +1 -2
- package/dist/framework/waku.js +1 -2
- package/dist/hast-utils-BmGqqmvo.js +15 -0
- package/dist/highlight/client.d.ts +2 -4
- package/dist/highlight/client.js +7 -13
- package/dist/highlight/config.d.ts +15 -0
- package/dist/highlight/config.js +18 -0
- package/dist/highlight/core/client.d.ts +31 -0
- package/dist/highlight/core/client.js +68 -0
- package/dist/highlight/core/index.d.ts +27 -0
- package/dist/highlight/core/index.js +69 -0
- package/dist/highlight/index.d.ts +34 -2
- package/dist/highlight/index.js +57 -2
- package/dist/i18n/index.d.ts +39 -1
- package/dist/i18n/index.js +1 -2
- package/dist/i18n/middleware.d.ts +2 -3
- package/dist/i18n/middleware.js +1 -2
- package/dist/{icon-BWwSDabM.js → icon-OtPFhyk1.js} +1 -2
- package/dist/link.d.ts +3 -4
- package/dist/link.js +1 -2
- package/dist/{mdast-utils-mc9-X-PK.js → mdast-utils-gJMY143g.js} +1 -2
- package/dist/mdx-plugins/codeblock-utils.d.ts +35 -1
- package/dist/mdx-plugins/codeblock-utils.js +2 -3
- package/dist/mdx-plugins/index.d.ts +18 -15
- package/dist/mdx-plugins/index.js +7 -5
- package/dist/mdx-plugins/rehype-code.core.d.ts +38 -0
- package/dist/mdx-plugins/rehype-code.core.js +104 -0
- package/dist/mdx-plugins/rehype-code.d.ts +18 -2
- package/dist/mdx-plugins/rehype-code.js +24 -3
- package/dist/mdx-plugins/rehype-toc.d.ts +16 -1
- package/dist/mdx-plugins/rehype-toc.js +127 -1
- package/dist/mdx-plugins/remark-admonition.d.ts +20 -1
- package/dist/mdx-plugins/remark-admonition.js +2 -3
- package/dist/mdx-plugins/remark-code-tab.d.ts +30 -1
- package/dist/mdx-plugins/remark-code-tab.js +4 -5
- package/dist/mdx-plugins/remark-directive-admonition.d.ts +34 -1
- package/dist/mdx-plugins/remark-directive-admonition.js +1 -2
- package/dist/mdx-plugins/remark-feedback-block.d.ts +51 -0
- package/dist/mdx-plugins/remark-feedback-block.js +47 -0
- package/dist/mdx-plugins/remark-gfm.d.ts +2 -2
- package/dist/mdx-plugins/remark-heading.d.ts +35 -1
- package/dist/mdx-plugins/remark-heading.js +2 -3
- package/dist/mdx-plugins/remark-image.d.ts +63 -1
- package/dist/mdx-plugins/remark-image.js +1 -2
- package/dist/mdx-plugins/remark-mdx-files.d.ts +55 -2
- package/dist/mdx-plugins/remark-mdx-files.js +103 -13
- package/dist/mdx-plugins/remark-mdx-mermaid.d.ts +15 -1
- package/dist/mdx-plugins/remark-mdx-mermaid.js +1 -2
- package/dist/mdx-plugins/remark-npm.d.ts +34 -1
- package/dist/mdx-plugins/remark-npm.js +1 -2
- package/dist/mdx-plugins/remark-steps.d.ts +26 -1
- package/dist/mdx-plugins/remark-steps.js +1 -2
- package/dist/mdx-plugins/remark-structure.d.ts +75 -1
- package/dist/mdx-plugins/remark-structure.js +7 -8
- package/dist/{mixedbread-DlByNYSd.js → mixedbread-Bx9drx9S.js} +6 -5
- package/dist/negotiation/index.d.ts +1 -2
- package/dist/negotiation/index.js +1 -2
- package/dist/{normalize-url-DP9-1I-S.js → normalize-url-DUHbcuVM.js} +2 -3
- package/dist/{orama-cloud-DH3g37zc.js → orama-cloud-ByznDyOk.js} +6 -7
- package/dist/orama-cloud-legacy-BbgJnf5f.js +81 -0
- package/dist/page-tree/index.d.ts +3 -45
- package/dist/page-tree/index.js +1 -1
- package/dist/{index-2U6Tl4--.d.ts → path-B77y3W0_.d.ts} +111 -98
- package/dist/{path-DHIjrDBP.js → path-D0Bwm6Fs.js} +2 -3
- package/dist/{remove-undefined-Cfs4o_mM.js → remove-undefined-CJm9cyrC.js} +1 -2
- package/dist/search/algolia.d.ts +66 -2
- package/dist/search/algolia.js +1 -2
- package/dist/search/client.d.ts +31 -8
- package/dist/search/client.js +27 -22
- package/dist/search/index.d.ts +1 -2
- package/dist/search/index.js +41 -1
- package/dist/search/orama-cloud-legacy.d.ts +77 -0
- package/dist/search/orama-cloud-legacy.js +49 -0
- package/dist/search/orama-cloud.d.ts +5 -9
- package/dist/search/orama-cloud.js +1 -2
- package/dist/search/server.d.ts +87 -4
- package/dist/search/server.js +7 -8
- package/dist/source/client/index.d.ts +13 -11
- package/dist/source/client/index.js +22 -13
- package/dist/source/index.d.ts +5 -3
- package/dist/source/index.js +428 -333
- package/dist/source/plugins/lucide-icons.d.ts +5 -4
- package/dist/source/plugins/lucide-icons.js +2 -3
- package/dist/source/plugins/slugs.d.ts +24 -2
- package/dist/source/plugins/slugs.js +2 -3
- package/dist/source/plugins/status-badges.d.ts +52 -0
- package/dist/source/plugins/status-badges.js +54 -0
- package/dist/source/schema.d.ts +1 -3
- package/dist/source/schema.js +1 -2
- package/dist/{static-Dq8pA8Ay.js → static-DTxK4eHk.js} +5 -6
- package/dist/toc.d.ts +5 -6
- package/dist/toc.js +1 -2
- package/dist/{rehype-code-CdiZ1Y6P.js → transformer-icon-BYedaeE8.js} +1 -96
- package/dist/transformer-icon-D7-6aFzt.d.ts +18 -0
- package/dist/types-BSnJn7kF.d.ts +6 -0
- package/dist/{util-CK2ykiif.d.ts → util-C60LmklF.d.ts} +1 -2
- package/dist/{util-s9piKHsk.js → util-De0ALHOx.js} +1 -2
- package/dist/utils/use-media-query.d.ts +1 -2
- package/dist/utils/use-media-query.js +1 -2
- package/dist/utils/use-on-change.d.ts +1 -2
- package/dist/utils/use-on-change.js +1 -2
- package/dist/{utils-DUvi2WkD.js → utils-Bc53B3CJ.js} +8 -7
- package/dist/utils-IgHyYnrz.d.ts +45 -0
- package/package.json +58 -28
- package/dist/advanced-BRT5Ij43.js.map +0 -1
- package/dist/algolia-CBBN8R6-.d.ts +0 -68
- package/dist/algolia-CBBN8R6-.d.ts.map +0 -1
- package/dist/algolia-CQPXCnjV.js.map +0 -1
- package/dist/breadcrumb.d.ts.map +0 -1
- package/dist/breadcrumb.js.map +0 -1
- package/dist/codeblock-utils-lld8UiQo.d.ts +0 -37
- package/dist/codeblock-utils-lld8UiQo.d.ts.map +0 -1
- package/dist/content/github.d.ts.map +0 -1
- package/dist/content/github.js.map +0 -1
- package/dist/content/index.d.ts.map +0 -1
- package/dist/content/index.js.map +0 -1
- package/dist/content/mdx/preset-bundler.d.ts.map +0 -1
- package/dist/content/mdx/preset-bundler.js.map +0 -1
- package/dist/content/mdx/preset-runtime.d.ts.map +0 -1
- package/dist/content/mdx/preset-runtime.js.map +0 -1
- package/dist/content/toc.d.ts.map +0 -1
- package/dist/content/toc.js.map +0 -1
- package/dist/definitions-DuxDer_c.d.ts.map +0 -1
- package/dist/dynamic-link.d.ts.map +0 -1
- package/dist/dynamic-link.js.map +0 -1
- package/dist/fetch-B5e9CFfN.js.map +0 -1
- package/dist/framework/index.d.ts.map +0 -1
- package/dist/framework/index.js.map +0 -1
- package/dist/framework/next.d.ts.map +0 -1
- package/dist/framework/next.js.map +0 -1
- package/dist/framework/react-router.d.ts.map +0 -1
- package/dist/framework/react-router.js.map +0 -1
- package/dist/framework/tanstack.d.ts.map +0 -1
- package/dist/framework/tanstack.js.map +0 -1
- package/dist/framework/waku.d.ts.map +0 -1
- package/dist/framework/waku.js.map +0 -1
- package/dist/highlight/client.d.ts.map +0 -1
- package/dist/highlight/client.js.map +0 -1
- package/dist/i18n/index.js.map +0 -1
- package/dist/i18n/middleware.d.ts.map +0 -1
- package/dist/i18n/middleware.js.map +0 -1
- package/dist/icon-BWwSDabM.js.map +0 -1
- package/dist/index-2U6Tl4--.d.ts.map +0 -1
- package/dist/index-Bw-DCOra.d.ts +0 -41
- package/dist/index-Bw-DCOra.d.ts.map +0 -1
- package/dist/link.d.ts.map +0 -1
- package/dist/link.js.map +0 -1
- package/dist/mdast-utils-mc9-X-PK.js.map +0 -1
- package/dist/mdx-plugins/codeblock-utils.js.map +0 -1
- package/dist/mdx-plugins/remark-admonition.js.map +0 -1
- package/dist/mdx-plugins/remark-code-tab.js.map +0 -1
- package/dist/mdx-plugins/remark-directive-admonition.js.map +0 -1
- package/dist/mdx-plugins/remark-heading.js.map +0 -1
- package/dist/mdx-plugins/remark-image.js.map +0 -1
- package/dist/mdx-plugins/remark-mdx-files.js.map +0 -1
- package/dist/mdx-plugins/remark-mdx-mermaid.js.map +0 -1
- package/dist/mdx-plugins/remark-npm.js.map +0 -1
- package/dist/mdx-plugins/remark-steps.js.map +0 -1
- package/dist/mdx-plugins/remark-structure.js.map +0 -1
- package/dist/mixedbread-DlByNYSd.js.map +0 -1
- package/dist/negotiation/index.d.ts.map +0 -1
- package/dist/negotiation/index.js.map +0 -1
- package/dist/normalize-url-DP9-1I-S.js.map +0 -1
- package/dist/orama-cloud-DH3g37zc.js.map +0 -1
- package/dist/page-tree/index.d.ts.map +0 -1
- package/dist/path-DHIjrDBP.js.map +0 -1
- package/dist/rehype-code-CdiZ1Y6P.js.map +0 -1
- package/dist/rehype-code-vVWG4-ej.d.ts +0 -58
- package/dist/rehype-code-vVWG4-ej.d.ts.map +0 -1
- package/dist/rehype-toc-DJvSyE0o.d.ts +0 -18
- package/dist/rehype-toc-DJvSyE0o.d.ts.map +0 -1
- package/dist/rehype-toc-DVwJcwvA.js +0 -143
- package/dist/rehype-toc-DVwJcwvA.js.map +0 -1
- package/dist/remark-admonition-DOwBWzsH.d.ts +0 -22
- package/dist/remark-admonition-DOwBWzsH.d.ts.map +0 -1
- package/dist/remark-code-tab-CXsYlims.d.ts +0 -32
- package/dist/remark-code-tab-CXsYlims.d.ts.map +0 -1
- package/dist/remark-directive-admonition-BCm_yiU9.d.ts +0 -36
- package/dist/remark-directive-admonition-BCm_yiU9.d.ts.map +0 -1
- package/dist/remark-gfm-CeWpMwyk.d.ts +0 -2
- package/dist/remark-heading-CXvCY0go.d.ts +0 -37
- package/dist/remark-heading-CXvCY0go.d.ts.map +0 -1
- package/dist/remark-image-CvUis4R1.d.ts +0 -65
- package/dist/remark-image-CvUis4R1.d.ts.map +0 -1
- package/dist/remark-mdx-files-DOYafA4x.d.ts +0 -42
- package/dist/remark-mdx-files-DOYafA4x.d.ts.map +0 -1
- package/dist/remark-mdx-mermaid-BdSUUiCG.d.ts +0 -17
- package/dist/remark-mdx-mermaid-BdSUUiCG.d.ts.map +0 -1
- package/dist/remark-npm-BIvIEKT2.d.ts +0 -36
- package/dist/remark-npm-BIvIEKT2.d.ts.map +0 -1
- package/dist/remark-steps-CHJN-rtm.d.ts +0 -28
- package/dist/remark-steps-CHJN-rtm.d.ts.map +0 -1
- package/dist/remark-structure-RZD2gGKp.d.ts +0 -77
- package/dist/remark-structure-RZD2gGKp.d.ts.map +0 -1
- package/dist/remove-undefined-Cfs4o_mM.js.map +0 -1
- package/dist/search/algolia.js.map +0 -1
- package/dist/search/client.d.ts.map +0 -1
- package/dist/search/client.js.map +0 -1
- package/dist/search/index.d.ts.map +0 -1
- package/dist/search/orama-cloud.d.ts.map +0 -1
- package/dist/search/orama-cloud.js.map +0 -1
- package/dist/search/server.js.map +0 -1
- package/dist/search-D6ChCLhY.js +0 -44
- package/dist/search-D6ChCLhY.js.map +0 -1
- package/dist/server-CPR_fgkH.d.ts +0 -133
- package/dist/server-CPR_fgkH.d.ts.map +0 -1
- package/dist/shiki-4oMYwHED.js +0 -80
- package/dist/shiki-4oMYwHED.js.map +0 -1
- package/dist/shiki-CIBQys54.d.ts +0 -33
- package/dist/shiki-CIBQys54.d.ts.map +0 -1
- package/dist/source/client/index.d.ts.map +0 -1
- package/dist/source/client/index.js.map +0 -1
- package/dist/source/index.js.map +0 -1
- package/dist/source/plugins/lucide-icons.d.ts.map +0 -1
- package/dist/source/plugins/lucide-icons.js.map +0 -1
- package/dist/source/plugins/slugs.js.map +0 -1
- package/dist/source/schema.d.ts.map +0 -1
- package/dist/source/schema.js.map +0 -1
- package/dist/static-Dq8pA8Ay.js.map +0 -1
- package/dist/toc.d.ts.map +0 -1
- package/dist/toc.js.map +0 -1
- package/dist/util-CK2ykiif.d.ts.map +0 -1
- package/dist/util-s9piKHsk.js.map +0 -1
- package/dist/utils/use-effect-event.d.ts +0 -11
- package/dist/utils/use-effect-event.d.ts.map +0 -1
- package/dist/utils/use-effect-event.js +0 -19
- package/dist/utils/use-effect-event.js.map +0 -1
- package/dist/utils/use-media-query.d.ts.map +0 -1
- package/dist/utils/use-media-query.js.map +0 -1
- package/dist/utils/use-on-change.d.ts.map +0 -1
- package/dist/utils/use-on-change.js.map +0 -1
- package/dist/utils-DUvi2WkD.js.map +0 -1
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Processor, Transformer } from "unified";
|
|
2
|
-
import { Code, Root } from "mdast";
|
|
3
|
-
import { MdxJsxFlowElement } from "mdast-util-mdx-jsx";
|
|
4
|
-
|
|
5
|
-
//#region src/mdx-plugins/remark-code-tab.d.ts
|
|
6
|
-
type TabType = keyof typeof Types;
|
|
7
|
-
interface RemarkCodeTabOptions {
|
|
8
|
-
Tabs?: TabType;
|
|
9
|
-
/**
|
|
10
|
-
* Parse MDX in tab values
|
|
11
|
-
*
|
|
12
|
-
* @defaultValue false
|
|
13
|
-
*/
|
|
14
|
-
parseMdx?: boolean;
|
|
15
|
-
}
|
|
16
|
-
declare module 'mdast' {
|
|
17
|
-
interface CodeData {
|
|
18
|
-
tab?: string;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
declare const Types: {
|
|
22
|
-
CodeBlockTabs: {
|
|
23
|
-
convert(processor: Processor, nodes: Code[], withMdx?: boolean, withParent?: boolean): MdxJsxFlowElement;
|
|
24
|
-
};
|
|
25
|
-
Tabs: {
|
|
26
|
-
convert(processor: Processor, nodes: Code[], withMdx?: boolean, withParent?: boolean): MdxJsxFlowElement;
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
declare function remarkCodeTab(this: Processor, options?: RemarkCodeTabOptions): Transformer<Root, Root>;
|
|
30
|
-
//#endregion
|
|
31
|
-
export { remarkCodeTab as n, RemarkCodeTabOptions as t };
|
|
32
|
-
//# sourceMappingURL=remark-code-tab-CXsYlims.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-code-tab-CXsYlims.d.ts","names":[],"sources":["../src/mdx-plugins/remark-code-tab.ts"],"sourcesContent":[],"mappings":";;;;;KAMK,OAAA,gBAAuB;UACX,oBAAA;EADZ,IAAA,CAAA,EAEI,OAFG;EACK;AAShB;;;;EAAA,QAAA,CAAA,EAAA,OAAA;AAAA;eA6Hc,OAAA,CAAA;EACJ,UAAA,QAAA,CAAA;IAGN,GAAA,CAAA,EAAA,MAAA;EAvHU;;cAkJT,KA9ID,EAAA;EAAiB,aAAA,EAAA;IAmJN,OAAA,CAAA,SAAa,EApCd,SAoCc,EAAA,KAAA,EAnClB,IAmCkB,EAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,CAAA,EAhCxB,iBAgCwB;EACrB,CAAA;EACG,IAAA,EAAA;IACI,OAAA,CAAA,SAAA,EA1JA,SA0JA,EAAA,KAAA,EAzJJ,IAyJI,EAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,CAAA,EAtJV,iBAsJU;EAAM,CAAA;CAAlB;AAAW,iBAHE,aAAA,CAGF,IAAA,EAFN,SAEM,EAAA,OAAA,CAAA,EADH,oBACG,CAAA,EAAX,WAAW,CAAC,IAAD,EAAO,IAAP,CAAA"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Transformer } from "unified";
|
|
2
|
-
import { Root } from "mdast";
|
|
3
|
-
|
|
4
|
-
//#region src/mdx-plugins/remark-directive-admonition.d.ts
|
|
5
|
-
interface RemarkDirectiveAdmonitionOptions {
|
|
6
|
-
/**
|
|
7
|
-
* the tag names of Callout component.
|
|
8
|
-
*/
|
|
9
|
-
tags?: {
|
|
10
|
-
CalloutContainer?: string;
|
|
11
|
-
CalloutTitle?: string;
|
|
12
|
-
CalloutDescription?: string;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* All supported admonition types and their linked Callout type.
|
|
16
|
-
*
|
|
17
|
-
* When specified, all defaults will be cleared.
|
|
18
|
-
*/
|
|
19
|
-
types?: Record<string, string>;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Remark Plugin to support Admonition syntax in Docusaurus, useful for migrating from Docusaurus.
|
|
23
|
-
*
|
|
24
|
-
* Requires [`remark-directive`](https://github.com/remarkjs/remark-directive) to be configured.
|
|
25
|
-
*/
|
|
26
|
-
declare function remarkDirectiveAdmonition({
|
|
27
|
-
tags: {
|
|
28
|
-
CalloutContainer,
|
|
29
|
-
CalloutTitle,
|
|
30
|
-
CalloutDescription
|
|
31
|
-
},
|
|
32
|
-
types
|
|
33
|
-
}?: RemarkDirectiveAdmonitionOptions): Transformer<Root, Root>;
|
|
34
|
-
//#endregion
|
|
35
|
-
export { remarkDirectiveAdmonition as n, RemarkDirectiveAdmonitionOptions as t };
|
|
36
|
-
//# sourceMappingURL=remark-directive-admonition-BCm_yiU9.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-directive-admonition-BCm_yiU9.d.ts","names":[],"sources":["../src/mdx-plugins/remark-directive-admonition.ts"],"sourcesContent":[],"mappings":";;;;UAKiB,gCAAA;;AAAjB;AAuBA;EAEI,IAAA,CAAA,EAAA;IACA,gBAAA,CAAA,EAAA,MAAA;IACA,YAAA,CAAA,EAAA,MAAA;IAEF,kBAAA,CAAA,EAAA,MAAA;EASC,CAAA;EAAoD;;;;;UAvB7C;;;;;;;iBAQM,yBAAA;;;;;;;IAeb,mCAAwC,YAAY,MAAM"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Transformer } from "unified";
|
|
2
|
-
import { Heading, Root } from "mdast";
|
|
3
|
-
|
|
4
|
-
//#region src/mdx-plugins/remark-heading.d.ts
|
|
5
|
-
declare module 'mdast' {
|
|
6
|
-
interface HeadingData extends Data {
|
|
7
|
-
hProperties?: {
|
|
8
|
-
id?: string;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
interface RemarkHeadingOptions {
|
|
13
|
-
slug?: (root: Root, heading: Heading, text: string) => string;
|
|
14
|
-
/**
|
|
15
|
-
* Allow custom headings ids
|
|
16
|
-
*
|
|
17
|
-
* @defaultValue true
|
|
18
|
-
*/
|
|
19
|
-
customId?: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Attach an array of `TOCItemType` to `file.data.toc`
|
|
22
|
-
*
|
|
23
|
-
* @defaultValue true
|
|
24
|
-
*/
|
|
25
|
-
generateToc?: boolean;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Add heading ids and extract TOC
|
|
29
|
-
*/
|
|
30
|
-
declare function remarkHeading({
|
|
31
|
-
slug: defaultSlug,
|
|
32
|
-
customId,
|
|
33
|
-
generateToc
|
|
34
|
-
}?: RemarkHeadingOptions): Transformer<Root, Root>;
|
|
35
|
-
//#endregion
|
|
36
|
-
export { remarkHeading as n, RemarkHeadingOptions as t };
|
|
37
|
-
//# sourceMappingURL=remark-heading-CXvCY0go.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-heading-CXvCY0go.d.ts","names":[],"sources":["../src/mdx-plugins/remark-heading.ts"],"sourcesContent":[],"mappings":";;;;;gCAUuC;IARI,WAAA,CAAA,EAAA;MAAA,EAAA,CAAA,EAAA,MAAA;IAQJ,CAAA;EAAI;;AAS1B,UAAA,oBAAA,CAAoB;EAqBrB,IAAA,CAAA,EAAA,CAAA,IAAA,EApBA,IAoBa,EAAA,OAAA,EApBE,OAoBF,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,MAAA;EACrB;;;;;EAGyC,QAAA,CAAA,EAAA,OAAA;EAAlB;;;;;;;;;;iBAJf,aAAA;QACR;;;IAGL,uBAA4B,YAAY,MAAM"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { Transformer } from "unified";
|
|
2
|
-
import { Root } from "mdast";
|
|
3
|
-
|
|
4
|
-
//#region src/mdx-plugins/remark-image.d.ts
|
|
5
|
-
type ExternalImageOptions = {
|
|
6
|
-
/**
|
|
7
|
-
* timeout for fetching remote images (in milliseconds)
|
|
8
|
-
*/
|
|
9
|
-
timeout?: number;
|
|
10
|
-
} | boolean;
|
|
11
|
-
interface RemarkImageOptions {
|
|
12
|
-
/**
|
|
13
|
-
* Directory or base URL to resolve absolute image paths
|
|
14
|
-
*/
|
|
15
|
-
publicDir?: string;
|
|
16
|
-
/**
|
|
17
|
-
* Preferred placeholder type, only available with `useImport` + local images.
|
|
18
|
-
*
|
|
19
|
-
* @defaultValue 'blur'
|
|
20
|
-
*/
|
|
21
|
-
placeholder?: 'blur' | 'none';
|
|
22
|
-
/**
|
|
23
|
-
* Define how to handle errors when fetching image size.
|
|
24
|
-
*
|
|
25
|
-
* - `error` (default): throw an error.
|
|
26
|
-
* - `ignore`: do absolutely nothing (Next.js Image component may complain).
|
|
27
|
-
* - `hide`: remove that image element.
|
|
28
|
-
*
|
|
29
|
-
* @defaultValue 'error'
|
|
30
|
-
*/
|
|
31
|
-
onError?: 'error' | 'hide' | 'ignore' | ((error: Error) => void);
|
|
32
|
-
/**
|
|
33
|
-
* Import images in the file, and let bundlers handle it.
|
|
34
|
-
*
|
|
35
|
-
* ```tsx
|
|
36
|
-
* import MyImage from "./public/img.png";
|
|
37
|
-
*
|
|
38
|
-
* <img src={MyImage} />
|
|
39
|
-
* ```
|
|
40
|
-
*
|
|
41
|
-
* When disabled, `placeholder` will be ignored.
|
|
42
|
-
*
|
|
43
|
-
* @defaultValue true
|
|
44
|
-
*/
|
|
45
|
-
useImport?: boolean;
|
|
46
|
-
/**
|
|
47
|
-
* Fetch image size of external URLs
|
|
48
|
-
*
|
|
49
|
-
* @defaultValue true
|
|
50
|
-
*/
|
|
51
|
-
external?: ExternalImageOptions;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Turn images into Next.js Image compatible usage.
|
|
55
|
-
*/
|
|
56
|
-
declare function remarkImage({
|
|
57
|
-
placeholder,
|
|
58
|
-
external,
|
|
59
|
-
useImport,
|
|
60
|
-
onError,
|
|
61
|
-
publicDir
|
|
62
|
-
}?: RemarkImageOptions): Transformer<Root, Root>;
|
|
63
|
-
//#endregion
|
|
64
|
-
export { remarkImage as n, RemarkImageOptions as t };
|
|
65
|
-
//# sourceMappingURL=remark-image-CvUis4R1.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-image-CvUis4R1.d.ts","names":[],"sources":["../src/mdx-plugins/remark-image.ts"],"sourcesContent":[],"mappings":";;;;KAYK,oBAAA;;AAVsC;AAmB3C;EA4DgB,OAAA,CAAA,EAAA,MAAW;CACzB,GAAA,OAAA;AACA,UA9De,kBAAA,CA8Df;EACA;;;EAGC,SAAA,CAAA,EAAA,MAAA;EAAsC;;;;;;;;;;;;;;;mDA5CU;;;;;;;;;;;;;;;;;;;;aAsBtC;;;;;iBAgBG,WAAA;;;;;;IAMb,qBAA0B,YAAY,MAAM"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Transformer } from "unified";
|
|
2
|
-
import { Root } from "mdast";
|
|
3
|
-
import { MdxJsxFlowElement } from "mdast-util-mdx-jsx";
|
|
4
|
-
|
|
5
|
-
//#region src/mdx-plugins/remark-mdx-files.d.ts
|
|
6
|
-
interface FileNode {
|
|
7
|
-
depth: number;
|
|
8
|
-
type: 'file';
|
|
9
|
-
name: string;
|
|
10
|
-
}
|
|
11
|
-
interface FolderNode {
|
|
12
|
-
depth: number;
|
|
13
|
-
type: 'folder';
|
|
14
|
-
name: string;
|
|
15
|
-
children: Node[];
|
|
16
|
-
}
|
|
17
|
-
type Node = FileNode | FolderNode;
|
|
18
|
-
interface RemarkMdxFilesOptions {
|
|
19
|
-
/**
|
|
20
|
-
* @defaultValue files
|
|
21
|
-
*/
|
|
22
|
-
lang?: string;
|
|
23
|
-
toMdx?: (node: Node) => MdxJsxFlowElement;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Convert codeblocks with `files` as lang, like:
|
|
27
|
-
*
|
|
28
|
-
* ```files
|
|
29
|
-
* project
|
|
30
|
-
* ├── src
|
|
31
|
-
* │ ├── index.js
|
|
32
|
-
* │ └── utils
|
|
33
|
-
* │ └── helper.js
|
|
34
|
-
* ├── package.json
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* into MDX `<Files />` component
|
|
38
|
-
*/
|
|
39
|
-
declare function remarkMdxFiles(options?: RemarkMdxFilesOptions): Transformer<Root, Root>;
|
|
40
|
-
//#endregion
|
|
41
|
-
export { remarkMdxFiles as n, RemarkMdxFilesOptions as t };
|
|
42
|
-
//# sourceMappingURL=remark-mdx-files-DOYafA4x.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-mdx-files-DOYafA4x.d.ts","names":[],"sources":["../src/mdx-plugins/remark-mdx-files.ts"],"sourcesContent":[],"mappings":";;;;;UAKU,QAAA;;EAAA,IAAA,EAAA,MAAQ;EAMR,IAAA,EAAA,MAAA;AAIM;AAKhB,UATU,UAAA,CASO;EAkGD,KAAA,EAAA,MAAA;EAAwB,IAAA,EAAA,QAAA;EAAyC,IAAA,EAAA,MAAA;EAAM,QAAA,EAvG3E,IAuG2E,EAAA;;KApGlF,IAAA,GAAO,QAoGoE,GApGzD,UAoGyD;UAlG/D,qBAAA;;;;;iBAKA,SAAS;;;;;;;;;;;;;;;;iBA6FV,cAAA,WAAwB,wBAA6B,YAAY,MAAM"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Transformer } from "unified";
|
|
2
|
-
import { Root } from "mdast";
|
|
3
|
-
|
|
4
|
-
//#region src/mdx-plugins/remark-mdx-mermaid.d.ts
|
|
5
|
-
interface RemarkMdxMermaidOptions {
|
|
6
|
-
/**
|
|
7
|
-
* @defaultValue mermaid
|
|
8
|
-
*/
|
|
9
|
-
lang?: string;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Convert `mermaid` codeblocks into `<Mermaid />` MDX component
|
|
13
|
-
*/
|
|
14
|
-
declare function remarkMdxMermaid(options?: RemarkMdxMermaidOptions): Transformer<Root, Root>;
|
|
15
|
-
//#endregion
|
|
16
|
-
export { remarkMdxMermaid as n, RemarkMdxMermaidOptions as t };
|
|
17
|
-
//# sourceMappingURL=remark-mdx-mermaid-BdSUUiCG.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-mdx-mermaid-BdSUUiCG.d.ts","names":[],"sources":["../src/mdx-plugins/remark-mdx-mermaid.ts"],"sourcesContent":[],"mappings":";;;;UAoBiB,uBAAA;;AAAjB;AAUA;EAA0C,IAAA,CAAA,EAAA,MAAA;;;;;iBAA1B,gBAAA,WAA0B,0BAA+B,YAAY,MAAM"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Transformer } from "unified";
|
|
2
|
-
import { Root } from "mdast";
|
|
3
|
-
|
|
4
|
-
//#region src/mdx-plugins/remark-npm.d.ts
|
|
5
|
-
interface PackageManager {
|
|
6
|
-
name: string;
|
|
7
|
-
/**
|
|
8
|
-
* Default to `name`
|
|
9
|
-
*/
|
|
10
|
-
value?: string;
|
|
11
|
-
/**
|
|
12
|
-
* Convert from npm to another package manager
|
|
13
|
-
*/
|
|
14
|
-
command: (command: string) => string | undefined;
|
|
15
|
-
}
|
|
16
|
-
interface RemarkNpmOptions {
|
|
17
|
-
/**
|
|
18
|
-
* Persist Tab value (Fumadocs UI only)
|
|
19
|
-
*
|
|
20
|
-
* @defaultValue false
|
|
21
|
-
*/
|
|
22
|
-
persist?: {
|
|
23
|
-
id: string;
|
|
24
|
-
} | false;
|
|
25
|
-
packageManagers?: PackageManager[];
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* It generates multiple tabs of codeblocks for different package managers from a npm command codeblock.
|
|
29
|
-
*/
|
|
30
|
-
declare function remarkNpm({
|
|
31
|
-
persist,
|
|
32
|
-
packageManagers
|
|
33
|
-
}?: RemarkNpmOptions): Transformer<Root, Root>;
|
|
34
|
-
//#endregion
|
|
35
|
-
export { remarkNpm as n, RemarkNpmOptions as t };
|
|
36
|
-
//# sourceMappingURL=remark-npm-BIvIEKT2.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-npm-BIvIEKT2.d.ts","names":[],"sources":["../src/mdx-plugins/remark-npm.ts"],"sourcesContent":[],"mappings":";;;;UAMU,cAAA;;EAAA;AAcV;AAoBA;EACE,KAAA,CAAA,EAAA,MAAA;EACA;;;EAM2C,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,GAAA,MAAA,GAAA,SAAA;;AAAP,UA5BrB,gBAAA,CA4BqB;;;;;;;;;oBAhBlB;;;;;iBAQJ,SAAA;;;IAQb,mBAAwB,YAAY,MAAM"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Transformer } from "unified";
|
|
2
|
-
import { Root } from "mdast";
|
|
3
|
-
|
|
4
|
-
//#region src/mdx-plugins/remark-steps.d.ts
|
|
5
|
-
interface RemarkStepsOptions {
|
|
6
|
-
/**
|
|
7
|
-
* Class name for steps container
|
|
8
|
-
*
|
|
9
|
-
* @defaultValue fd-steps
|
|
10
|
-
*/
|
|
11
|
-
steps?: string;
|
|
12
|
-
/**
|
|
13
|
-
* Class name for step container
|
|
14
|
-
*
|
|
15
|
-
* @defaultValue fd-step
|
|
16
|
-
*/
|
|
17
|
-
step?: string;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Convert headings in the format of `1. Hello World` into steps.
|
|
21
|
-
*/
|
|
22
|
-
declare function remarkSteps({
|
|
23
|
-
steps,
|
|
24
|
-
step
|
|
25
|
-
}?: RemarkStepsOptions): Transformer<Root, Root>;
|
|
26
|
-
//#endregion
|
|
27
|
-
export { remarkSteps as n, RemarkStepsOptions as t };
|
|
28
|
-
//# sourceMappingURL=remark-steps-CHJN-rtm.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-steps-CHJN-rtm.d.ts","names":[],"sources":["../src/mdx-plugins/remark-steps.ts"],"sourcesContent":[],"mappings":";;;;UAKiB,kBAAA;;AAAjB;AAqBA;;;EAGG,KAAA,CAAA,EAAA,MAAA;EAAsC;;;;;;;;;;iBAHzB,WAAA;;;IAGb,qBAA0B,YAAY,MAAM"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { PluggableList, Transformer } from "unified";
|
|
2
|
-
import { Nodes, Root } from "mdast";
|
|
3
|
-
import { MdxJsxAttribute, MdxJsxExpressionAttribute, MdxJsxFlowElement } from "mdast-util-mdx-jsx";
|
|
4
|
-
|
|
5
|
-
//#region src/mdx-plugins/remark-structure.d.ts
|
|
6
|
-
interface Heading$1 {
|
|
7
|
-
id: string;
|
|
8
|
-
content: string;
|
|
9
|
-
}
|
|
10
|
-
interface Content {
|
|
11
|
-
heading: string | undefined;
|
|
12
|
-
content: string;
|
|
13
|
-
}
|
|
14
|
-
interface StructuredData {
|
|
15
|
-
headings: Heading$1[];
|
|
16
|
-
/**
|
|
17
|
-
* Refer to paragraphs, a heading may contain multiple contents as well
|
|
18
|
-
*/
|
|
19
|
-
contents: Content[];
|
|
20
|
-
}
|
|
21
|
-
interface StructureOptions {
|
|
22
|
-
/**
|
|
23
|
-
* Types to be scanned as content.
|
|
24
|
-
*
|
|
25
|
-
* @defaultValue ['heading', 'paragraph', 'blockquote', 'tableCell', 'mdxJsxFlowElement']
|
|
26
|
-
*/
|
|
27
|
-
types?: string[] | ((node: Nodes) => boolean);
|
|
28
|
-
/**
|
|
29
|
-
* A list of indexable MDX attributes, either:
|
|
30
|
-
*
|
|
31
|
-
* - an array of attribute names.
|
|
32
|
-
* - a function that determines if attribute should be indexed.
|
|
33
|
-
*/
|
|
34
|
-
allowedMdxAttributes?: string[] | ((node: MdxJsxFlowElement, attribute: MdxJsxAttribute | MdxJsxExpressionAttribute) => boolean);
|
|
35
|
-
/**
|
|
36
|
-
* export as `structuredData` or specified variable name.
|
|
37
|
-
*/
|
|
38
|
-
exportAs?: string | boolean;
|
|
39
|
-
}
|
|
40
|
-
declare module 'mdast' {
|
|
41
|
-
interface Data {
|
|
42
|
-
/**
|
|
43
|
-
* [Fumadocs] Get content of unserializable element, `remarkStructure` uses it to generate search index.
|
|
44
|
-
*/
|
|
45
|
-
_string?: string[];
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
declare module 'vfile' {
|
|
49
|
-
interface DataMap {
|
|
50
|
-
/**
|
|
51
|
-
* [Fumadocs] injected by `remarkStructure`
|
|
52
|
-
*/
|
|
53
|
-
structuredData: StructuredData;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
declare const remarkStructureDefaultOptions: {
|
|
57
|
-
types: string[];
|
|
58
|
-
allowedMdxAttributes: (node: MdxJsxFlowElement) => boolean;
|
|
59
|
-
exportAs: false;
|
|
60
|
-
};
|
|
61
|
-
/**
|
|
62
|
-
* Extract content into structured data.
|
|
63
|
-
*
|
|
64
|
-
* By default, the output is stored into VFile (`vfile.data.structuredData`), you can specify `exportAs` to export it.
|
|
65
|
-
*/
|
|
66
|
-
declare function remarkStructure({
|
|
67
|
-
types,
|
|
68
|
-
allowedMdxAttributes,
|
|
69
|
-
exportAs
|
|
70
|
-
}?: StructureOptions): Transformer<Root, Root>;
|
|
71
|
-
/**
|
|
72
|
-
* Extract data from markdown/mdx content
|
|
73
|
-
*/
|
|
74
|
-
declare function structure(content: string, remarkPlugins?: PluggableList, options?: StructureOptions): StructuredData;
|
|
75
|
-
//#endregion
|
|
76
|
-
export { structure as a, remarkStructureDefaultOptions as i, StructuredData as n, remarkStructure as r, StructureOptions as t };
|
|
77
|
-
//# sourceMappingURL=remark-structure-RZD2gGKp.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-structure-RZD2gGKp.d.ts","names":[],"sources":["../src/mdx-plugins/remark-structure.ts"],"sourcesContent":[],"mappings":";;;;;UAaU,SAAA;;EAAA,OAAA,EAAA,MAAO;AAAA;AAUjB,UALU,OAAA,CAKO;EAQA,OAAA,EAAA,MAAA,GAAA,SAAgB;EAMJ,OAAA,EAAA,MAAA;;AAYV,UA1BF,cAAA,CA0BE;EAAkB,QAAA,EAzBzB,SAyByB,EAAA;EAAyB;AAO7D;;UAAA,EA5BW,OA4BX,EAAA;;AAAA,UAzBgB,gBAAA,CAyBhB;EAAA;;;;;EAoBY,KAAA,CAAA,EAAA,MAAA,EAAA,GAAA,CAAA,CAAA,IAAA,EAvCgB,KA+CS,EAAA,GAAA,OAAA,CAAA;EAOtB;;;;;;EAI6B,oBAAA,CAAA,EAAA,MAAA,EAAA,GAAA,CAAA,CAAA,IAAA,EA/C/B,iBA+C+B,EAAA,SAAA,EA9C1B,eA8C0B,GA9CR,yBA8CQ,EAAA,GAAA,OAAA,CAAA;EAAlB;;AAwG3B;EAEiB,QAAA,CAAA,EAAA,MAAA,GAAA,OAAA;;eAEd,OAAA,CAAA;EAAc,UAAA,IAAA,CAAA;;;;;;;;;;;;oBAnIG;;;cAIP;;+BAQyB;;;;;;;;iBAOtB,eAAA;;;;IAIb,mBAAwB,YAAY,MAAM;;;;iBAwG7B,SAAA,kCAEC,yBACN,mBACR"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remove-undefined-Cfs4o_mM.js","names":[],"sources":["../src/utils/remove-undefined.ts"],"sourcesContent":["export function removeUndefined<T extends object>(value: T, deep = false): T {\n const obj = value as Record<string, unknown>;\n\n for (const key in obj) {\n if (obj[key] === undefined) delete obj[key];\n if (!deep) continue;\n\n const entry = obj[key];\n\n if (typeof entry === 'object' && entry !== null) {\n removeUndefined(entry, deep);\n continue;\n }\n\n if (Array.isArray(entry)) {\n for (const item of entry) removeUndefined(item, deep);\n }\n }\n\n return value;\n}\n"],"mappings":";AAAA,SAAgB,gBAAkC,OAAU,OAAO,OAAU;CAC3E,MAAM,MAAM;AAEZ,MAAK,MAAM,OAAO,KAAK;AACrB,MAAI,IAAI,SAAS,OAAW,QAAO,IAAI;AACvC,MAAI,CAAC,KAAM;EAEX,MAAM,QAAQ,IAAI;AAElB,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,mBAAgB,OAAO,KAAK;AAC5B;;AAGF,MAAI,MAAM,QAAQ,MAAM,CACtB,MAAK,MAAM,QAAQ,MAAO,iBAAgB,MAAM,KAAK;;AAIzD,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"algolia.js","names":["indexes: BaseIndex[]"],"sources":["../../src/search/algolia.ts"],"sourcesContent":["import type { Algoliasearch } from 'algoliasearch';\nimport type { StructuredData } from '@/mdx-plugins/remark-structure';\n\nexport interface DocumentRecord {\n /**\n * The ID of document, must be unique\n */\n _id: string;\n\n title: string;\n description?: string;\n breadcrumbs?: string[];\n\n /**\n * URL to the page\n */\n url: string;\n structured: StructuredData;\n\n /**\n * Tag to filter results\n */\n tag?: string;\n\n /**\n * Data to be added to each section index\n */\n extra_data?: object;\n}\n\nexport interface SyncOptions {\n /**\n * Index Name for documents.\n */\n indexName?: string;\n\n /**\n * Search indexes\n */\n documents: DocumentRecord[];\n}\n\n/**\n * Update index settings and replace all objects\n *\n * @param client - Algolia Admin Client\n * @param options - Index Options\n */\nexport async function sync(client: Algoliasearch, options: SyncOptions): Promise<void> {\n const { indexName = 'document', documents } = options;\n await setIndexSettings(client, indexName);\n await updateDocuments(client, indexName, documents);\n}\n\nexport async function setIndexSettings(client: Algoliasearch, indexName: string): Promise<void> {\n await client.setSettings({\n indexName,\n indexSettings: {\n attributeForDistinct: 'page_id',\n attributesToRetrieve: ['title', 'section', 'content', 'url', 'section_id', 'breadcrumbs'],\n searchableAttributes: ['title', 'section', 'content'],\n attributesToSnippet: [],\n attributesForFaceting: ['tag'],\n },\n });\n}\n\nfunction toIndex(page: DocumentRecord): BaseIndex[] {\n let id = 0;\n const indexes: BaseIndex[] = [];\n const scannedHeadings = new Set<string>();\n\n function createIndex(\n section: string | undefined,\n sectionId: string | undefined,\n content: string,\n ): BaseIndex {\n return {\n objectID: `${page._id}-${(id++).toString()}`,\n breadcrumbs: page.breadcrumbs,\n title: page.title,\n url: page.url,\n page_id: page._id,\n tag: page.tag,\n section,\n section_id: sectionId,\n content,\n ...page.extra_data,\n };\n }\n\n if (page.description) indexes.push(createIndex(undefined, undefined, page.description));\n const { headings, contents } = page.structured;\n\n for (const p of contents) {\n const heading = p.heading ? headings.find((h) => p.heading === h.id) : null;\n\n const index = createIndex(heading?.content, heading?.id, p.content);\n\n if (heading && !scannedHeadings.has(heading.id)) {\n scannedHeadings.add(heading.id);\n\n indexes.push(createIndex(heading.content, heading.id, heading.content));\n }\n\n indexes.push(index);\n }\n\n return indexes;\n}\n\nexport async function updateDocuments(\n client: Algoliasearch,\n indexName: string,\n documents: DocumentRecord[],\n): Promise<void> {\n const objects = documents.flatMap(toIndex);\n\n await client.replaceAllObjects({\n indexName,\n objects: objects as unknown as Record<string, unknown>[],\n });\n}\n\nexport interface BaseIndex {\n objectID: string;\n title: string;\n url: string;\n tag?: string;\n\n /**\n * The id of page, used for distinct\n */\n page_id: string;\n\n /**\n * Heading content\n */\n section?: string;\n\n /**\n * Heading (anchor) id\n */\n section_id?: string;\n\n breadcrumbs?: string[];\n\n content: string;\n}\n"],"mappings":";;;;;;;AAgDA,eAAsB,KAAK,QAAuB,SAAqC;CACrF,MAAM,EAAE,YAAY,YAAY,cAAc;AAC9C,OAAM,iBAAiB,QAAQ,UAAU;AACzC,OAAM,gBAAgB,QAAQ,WAAW,UAAU;;AAGrD,eAAsB,iBAAiB,QAAuB,WAAkC;AAC9F,OAAM,OAAO,YAAY;EACvB;EACA,eAAe;GACb,sBAAsB;GACtB,sBAAsB;IAAC;IAAS;IAAW;IAAW;IAAO;IAAc;IAAc;GACzF,sBAAsB;IAAC;IAAS;IAAW;IAAU;GACrD,qBAAqB,EAAE;GACvB,uBAAuB,CAAC,MAAM;GAC/B;EACF,CAAC;;AAGJ,SAAS,QAAQ,MAAmC;CAClD,IAAI,KAAK;CACT,MAAMA,UAAuB,EAAE;CAC/B,MAAM,kCAAkB,IAAI,KAAa;CAEzC,SAAS,YACP,SACA,WACA,SACW;AACX,SAAO;GACL,UAAU,GAAG,KAAK,IAAI,IAAI,MAAM,UAAU;GAC1C,aAAa,KAAK;GAClB,OAAO,KAAK;GACZ,KAAK,KAAK;GACV,SAAS,KAAK;GACd,KAAK,KAAK;GACV;GACA,YAAY;GACZ;GACA,GAAG,KAAK;GACT;;AAGH,KAAI,KAAK,YAAa,SAAQ,KAAK,YAAY,QAAW,QAAW,KAAK,YAAY,CAAC;CACvF,MAAM,EAAE,UAAU,aAAa,KAAK;AAEpC,MAAK,MAAM,KAAK,UAAU;EACxB,MAAM,UAAU,EAAE,UAAU,SAAS,MAAM,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG;EAEvE,MAAM,QAAQ,YAAY,SAAS,SAAS,SAAS,IAAI,EAAE,QAAQ;AAEnE,MAAI,WAAW,CAAC,gBAAgB,IAAI,QAAQ,GAAG,EAAE;AAC/C,mBAAgB,IAAI,QAAQ,GAAG;AAE/B,WAAQ,KAAK,YAAY,QAAQ,SAAS,QAAQ,IAAI,QAAQ,QAAQ,CAAC;;AAGzE,UAAQ,KAAK,MAAM;;AAGrB,QAAO;;AAGT,eAAsB,gBACpB,QACA,WACA,WACe;CACf,MAAM,UAAU,UAAU,QAAQ,QAAQ;AAE1C,OAAM,OAAO,kBAAkB;EAC7B;EACS;EACV,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","names":[],"sources":["../../src/search/client/fetch.ts","../../src/search/client/static.ts","../../src/search/client/algolia.ts","../../src/search/client/orama-cloud.ts","../../src/search/client/mixedbread.ts","../../src/search/client.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;UAEiB,YAAA;;;;;;;;;;;;AAAjB;;;;;;UCIiB,aAAA;;;;;;;mCAQkB,WAAW,QAAQ;;;;;EDZrC;;;;ACIjB;;;UCFiB,cAAA;;UAEP;;;;;;+DAaH;aACM,eAAe;EFlBX,CAAA,CAAA;;;;UGWA,iBAAA;UACP;;;;;;;WAOC,QAAQ;;;AHnBnB;;;;ACIA;EAQmC,MAAA,CAAA,EAAA,MAAA;;;;UGRlB,iBAAA;;;;;;;;UASP;;;AJbV;;;;ACIA;EAQmC,MAAA,CAAA,EAAA,MAAA;;;;UIJzB,aAAA;;;;;WAKC;ILbM,KAAA,CAAA,EKcL,KLdiB;;;KKkBjB,MAAA;EJdK,IAAA,EAAA,OAAA;CAQkB,GIS3B,YJT2B,CAAA,GAAA,CAAA;EAAmB,IAAA,EAAA,QAAA;CAAR,GIYtC,aJZsC,CAAA,GAAA,CAAA;EAAO,IAAA,EAAA,SAAA;IIe7C;;IAGA;EH5BS,IAAA,EAAA,YAAc;CAErB,GG6BF,iBH7BE,CAAA;;;;;;iBG2DM,aAAA,gBACC;;AFrDjB;;;;EAQkB,OAAA,CAAA,EAAA,MAAA;;;;ACflB;;;UC2ES,iBACN"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["search"],"sources":["../../src/utils/use-debounce.ts","../../src/search/client.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDebounce<T>(value: T, delayMs = 1000): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n if (delayMs === 0) return;\n const handler = window.setTimeout(() => {\n setDebouncedValue(value);\n }, delayMs);\n\n return () => clearTimeout(handler);\n }, [delayMs, value]);\n\n if (delayMs === 0) return value;\n return debouncedValue;\n}\n","import { type DependencyList, useRef, useState } from 'react';\nimport { useDebounce } from '@/utils/use-debounce';\nimport { type FetchOptions } from '@/search/client/fetch';\nimport { useOnChange } from '@/utils/use-on-change';\nimport { type StaticOptions } from '@/search/client/static';\nimport { type AlgoliaOptions } from '@/search/client/algolia';\nimport { type OramaCloudOptions } from '@/search/client/orama-cloud';\nimport { type MixedbreadOptions } from '@/search/client/mixedbread';\nimport type { SortedResult } from '@/search';\n\ninterface UseDocsSearch {\n search: string;\n setSearch: (v: string) => void;\n query: {\n isLoading: boolean;\n data?: SortedResult[] | 'empty';\n error?: Error;\n };\n}\n\nexport type Client =\n | ({\n type: 'fetch';\n } & FetchOptions)\n | ({\n type: 'static';\n } & StaticOptions)\n | ({\n type: 'algolia';\n } & AlgoliaOptions)\n | ({\n type: 'orama-cloud';\n } & OramaCloudOptions)\n | ({\n type: 'mixedbread';\n } & MixedbreadOptions);\n\nfunction isDeepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n return b.length === a.length && a.every((v, i) => isDeepEqual(v, b[i]));\n }\n\n if (typeof a === 'object' && a && typeof b === 'object' && b) {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n\n return (\n aKeys.length === bKeys.length &&\n aKeys.every(\n (key) =>\n Object.hasOwn(b, key) && isDeepEqual(a[key as keyof object], b[key as keyof object]),\n )\n );\n }\n\n return false;\n}\n\n/**\n * Provide a hook to query different official search clients.\n *\n * Note: it will re-query when its parameters changed, make sure to use `useMemo()` on `clientOptions` or define `deps` array.\n */\nexport function useDocsSearch(\n clientOptions: Client & {\n /**\n * The debounced delay for performing a search (in ms).\n * .\n * @defaultValue 100\n */\n delayMs?: number;\n\n /**\n * still perform search even if query is empty.\n *\n * @defaultValue false\n */\n allowEmpty?: boolean;\n },\n deps?: DependencyList,\n): UseDocsSearch {\n const { delayMs = 100, allowEmpty = false, ...client } = clientOptions;\n\n const [search, setSearch] = useState('');\n const [results, setResults] = useState<SortedResult[] | 'empty'>('empty');\n const [error, setError] = useState<Error>();\n const [isLoading, setIsLoading] = useState(false);\n const debouncedValue = useDebounce(search, delayMs);\n const onStart = useRef<() => void>(undefined);\n\n useOnChange(\n [deps ?? clientOptions, debouncedValue],\n () => {\n if (onStart.current) {\n onStart.current();\n onStart.current = undefined;\n }\n\n setIsLoading(true);\n let interrupt = false;\n onStart.current = () => {\n interrupt = true;\n };\n\n async function run(): Promise<SortedResult[] | 'empty'> {\n if (debouncedValue.length === 0 && !allowEmpty) return 'empty';\n\n if (client.type === 'fetch') {\n const { fetchDocs } = await import('./client/fetch');\n return fetchDocs(debouncedValue, client);\n }\n\n if (client.type === 'algolia') {\n const { searchDocs } = await import('./client/algolia');\n return searchDocs(debouncedValue, client);\n }\n\n if (client.type === 'orama-cloud') {\n const { searchDocs } = await import('./client/orama-cloud');\n return searchDocs(debouncedValue, client);\n }\n\n if (client.type === 'static') {\n const { search } = await import('./client/static');\n return search(debouncedValue, client);\n }\n\n if (client.type === 'mixedbread') {\n const { search } = await import('./client/mixedbread');\n return search(debouncedValue, client);\n }\n\n throw new Error('unknown search client');\n }\n\n void run()\n .then((res) => {\n if (interrupt) return;\n\n setError(undefined);\n setResults(res);\n })\n .catch((err: Error) => {\n setError(err);\n })\n .finally(() => {\n setIsLoading(false);\n });\n },\n deps ? undefined : (a, b) => !isDeepEqual(a, b),\n );\n\n return { search, setSearch, query: { isLoading, data: results, error } };\n}\n\nexport type { OramaCloudOptions, FetchOptions, StaticOptions, AlgoliaOptions };\n"],"mappings":";;;;AAEA,SAAgB,YAAe,OAAU,UAAU,KAAS;CAC1D,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,MAAM;AAE3D,iBAAgB;AACd,MAAI,YAAY,EAAG;EACnB,MAAM,UAAU,OAAO,iBAAiB;AACtC,qBAAkB,MAAM;KACvB,QAAQ;AAEX,eAAa,aAAa,QAAQ;IACjC,CAAC,SAAS,MAAM,CAAC;AAEpB,KAAI,YAAY,EAAG,QAAO;AAC1B,QAAO;;;;;ACsBT,SAAS,YAAY,GAAY,GAAqB;AACpD,KAAI,MAAM,EAAG,QAAO;AAEpB,KAAI,MAAM,QAAQ,EAAE,IAAI,MAAM,QAAQ,EAAE,CACtC,QAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,YAAY,GAAG,EAAE,GAAG,CAAC;AAGzE,KAAI,OAAO,MAAM,YAAY,KAAK,OAAO,MAAM,YAAY,GAAG;EAC5D,MAAM,QAAQ,OAAO,KAAK,EAAE;EAC5B,MAAM,QAAQ,OAAO,KAAK,EAAE;AAE5B,SACE,MAAM,WAAW,MAAM,UACvB,MAAM,OACH,QACC,OAAO,OAAO,GAAG,IAAI,IAAI,YAAY,EAAE,MAAsB,EAAE,KAAqB,CACvF;;AAIL,QAAO;;;;;;;AAQT,SAAgB,cACd,eAeA,MACe;CACf,MAAM,EAAE,UAAU,KAAK,aAAa,OAAO,GAAG,WAAW;CAEzD,MAAM,CAAC,QAAQ,aAAa,SAAS,GAAG;CACxC,MAAM,CAAC,SAAS,cAAc,SAAmC,QAAQ;CACzE,MAAM,CAAC,OAAO,YAAY,UAAiB;CAC3C,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;CACjD,MAAM,iBAAiB,YAAY,QAAQ,QAAQ;CACnD,MAAM,UAAU,OAAmB,OAAU;AAE7C,aACE,CAAC,QAAQ,eAAe,eAAe,QACjC;AACJ,MAAI,QAAQ,SAAS;AACnB,WAAQ,SAAS;AACjB,WAAQ,UAAU;;AAGpB,eAAa,KAAK;EAClB,IAAI,YAAY;AAChB,UAAQ,gBAAgB;AACtB,eAAY;;EAGd,eAAe,MAAyC;AACtD,OAAI,eAAe,WAAW,KAAK,CAAC,WAAY,QAAO;AAEvD,OAAI,OAAO,SAAS,SAAS;IAC3B,MAAM,EAAE,cAAc,MAAM,OAAO;AACnC,WAAO,UAAU,gBAAgB,OAAO;;AAG1C,OAAI,OAAO,SAAS,WAAW;IAC7B,MAAM,EAAE,eAAe,MAAM,OAAO;AACpC,WAAO,WAAW,gBAAgB,OAAO;;AAG3C,OAAI,OAAO,SAAS,eAAe;IACjC,MAAM,EAAE,eAAe,MAAM,OAAO;AACpC,WAAO,WAAW,gBAAgB,OAAO;;AAG3C,OAAI,OAAO,SAAS,UAAU;IAC5B,MAAM,EAAE,qBAAW,MAAM,OAAO;AAChC,WAAOA,SAAO,gBAAgB,OAAO;;AAGvC,OAAI,OAAO,SAAS,cAAc;IAChC,MAAM,EAAE,qBAAW,MAAM,OAAO;AAChC,WAAOA,SAAO,gBAAgB,OAAO;;AAGvC,SAAM,IAAI,MAAM,wBAAwB;;AAG1C,EAAK,KAAK,CACP,MAAM,QAAQ;AACb,OAAI,UAAW;AAEf,YAAS,OAAU;AACnB,cAAW,IAAI;IACf,CACD,OAAO,QAAe;AACrB,YAAS,IAAI;IACb,CACD,cAAc;AACb,gBAAa,MAAM;IACnB;IAEN,OAAO,UAAa,GAAG,MAAM,CAAC,YAAY,GAAG,EAAE,CAChD;AAED,QAAO;EAAE;EAAQ;EAAW,OAAO;GAAE;GAAW,MAAM;GAAS;GAAO;EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/search/index.ts"],"sourcesContent":[],"mappings":";;;UAEiB;;EAAA,GAAA,EAAA,MAAA;EAIN,IAAA,EAAA,MAAA,GAAA,SAAA,GAAA,MAAA;EAKK,OAAA,EALL,OAKK;EAC0B;;;EAG9B,WAAA,CAAA,EAJI,OAIa,EAAA;EAEZ,qBAAe,CAAA,EALN,eAOf,CAP+B,OAOxB,CAAA,EAAA;AA0BlB;KA9BY,iBAAA,GAAoB,aAAa;UAE5B;;WAEN;;;;;iBA0BK,wBAAA,iBAAyC;8BAIzB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orama-cloud.d.ts","names":[],"sources":["../../src/search/orama-cloud.ts"],"sourcesContent":[],"mappings":";;;;;;;;;UAGiB,WAAA;;;;;aAMJ;;AANb;AAgBA;;;EAMW,UAAA,CAAA,EAAA,OAAA;;AAIa,KAVZ,eAAA,GAAkB,IAUN,CAVW,WAUX,EAAA,OAAA,GAAA,WAAA,CAAA,GAAA;EAIP;AA2BjB;AA4BA;;;EAAqE,OAAA,EA/D1D,MA+D0D,CAAA,MAAA,EAAA,MAAA,CAAA;EAAO,SAAA,EAAA;IAYtD,MAAA,EAAQ,MAAA;IAAQ,KAAA,EAvE3B,aAuE2B,EAAA;EAAqB,CAAA,EAAA;CAAkB;AAAO,UAnEnE,aAAA,CAmEmE;;;;;;;;;;;cAtDtE;;;;;;;;;;;UAcG,UAAA;;;;;;;;;;;;;;;;;;;;iBA4BK,IAAA,QAAY,qBAAqB,cAAc;iBAY/C,QAAA,QAAgB,qBAAqB,kBAAkB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orama-cloud.js","names":["indexes: OramaIndex[]"],"sources":["../../src/search/orama-cloud.ts"],"sourcesContent":["import type { StructuredData } from '@/mdx-plugins';\nimport { type AnyObject, type OramaCloud } from '@orama/core';\n\nexport interface SyncOptions {\n /**\n * Index name to sync\n */\n index: string;\n\n documents: OramaDocument[];\n\n /**\n * Deploy changes\n *\n * @defaultValue true\n */\n autoDeploy?: boolean;\n}\n\nexport type I18nSyncOptions = Omit<SyncOptions, 'index' | 'documents'> & {\n /**\n * Indexes to sync.\n *\n * Pairs of `locale`-`index`.\n **/\n indexes: Record<string, string>;\n\n documents: {\n locale: string;\n items: OramaDocument[];\n }[];\n};\n\nexport interface OramaDocument {\n /**\n * The ID of document, must be unique\n */\n id: string;\n\n title: string;\n description?: string;\n\n /**\n * URL to the page\n */\n url: string;\n structured: StructuredData;\n\n /**\n * Tag to filter results\n */\n tag?: string;\n\n /**\n * Data to be added to each section index\n */\n extra_data?: object;\n breadcrumbs?: string[];\n}\n\nexport interface OramaIndex {\n id: string;\n\n title: string;\n url: string;\n\n tag?: string;\n\n /**\n * The id of page, used for `group by`\n */\n page_id: string;\n\n /**\n * Heading content\n */\n section?: string;\n\n breadcrumbs?: string[];\n\n /**\n * Heading (anchor) id\n */\n section_id?: string;\n\n content: string;\n}\n\nexport async function sync(orama: OramaCloud, options: SyncOptions): Promise<void> {\n const { autoDeploy = true } = options;\n const index = orama.index.set(options.index);\n await index.transaction.open();\n\n await index.transaction.insertDocuments(\n options.documents.flatMap(toIndex) as unknown as AnyObject[],\n );\n\n if (autoDeploy) await index.transaction.commit();\n}\n\nexport async function syncI18n(orama: OramaCloud, options: I18nSyncOptions): Promise<void> {\n const { autoDeploy = true, indexes } = options;\n\n const tasks = options.documents.map(async (document) => {\n const index = orama.index.set(indexes[document.locale]);\n await index.transaction.open();\n\n await index.transaction.insertDocuments(\n document.items.flatMap(toIndex) as unknown as AnyObject[],\n );\n\n if (autoDeploy) await index.transaction.commit();\n });\n\n await Promise.all(tasks);\n}\n\nfunction toIndex(page: OramaDocument): OramaIndex[] {\n let id = 0;\n const indexes: OramaIndex[] = [];\n const scannedHeadings = new Set<string>();\n\n function createIndex(\n section: string | undefined,\n sectionId: string | undefined,\n content: string,\n ): OramaIndex {\n return {\n id: `${page.id}-${(id++).toString()}`,\n title: page.title,\n url: page.url,\n // TODO: explicit declare enums\n page_id: page.id,\n tag: page.tag,\n section,\n section_id: sectionId,\n content,\n breadcrumbs: page.breadcrumbs,\n ...page.extra_data,\n };\n }\n\n if (page.description) indexes.push(createIndex(undefined, undefined, page.description));\n\n page.structured.contents.forEach((p) => {\n const heading = p.heading ? page.structured.headings.find((h) => p.heading === h.id) : null;\n\n const index = createIndex(heading?.content, heading?.id, p.content);\n\n if (heading && !scannedHeadings.has(heading.id)) {\n scannedHeadings.add(heading.id);\n\n indexes.push(createIndex(heading.content, heading.id, heading.content));\n }\n\n indexes.push(index);\n });\n\n return indexes;\n}\n"],"mappings":";AAwFA,eAAsB,KAAK,OAAmB,SAAqC;CACjF,MAAM,EAAE,aAAa,SAAS;CAC9B,MAAM,QAAQ,MAAM,MAAM,IAAI,QAAQ,MAAM;AAC5C,OAAM,MAAM,YAAY,MAAM;AAE9B,OAAM,MAAM,YAAY,gBACtB,QAAQ,UAAU,QAAQ,QAAQ,CACnC;AAED,KAAI,WAAY,OAAM,MAAM,YAAY,QAAQ;;AAGlD,eAAsB,SAAS,OAAmB,SAAyC;CACzF,MAAM,EAAE,aAAa,MAAM,YAAY;CAEvC,MAAM,QAAQ,QAAQ,UAAU,IAAI,OAAO,aAAa;EACtD,MAAM,QAAQ,MAAM,MAAM,IAAI,QAAQ,SAAS,QAAQ;AACvD,QAAM,MAAM,YAAY,MAAM;AAE9B,QAAM,MAAM,YAAY,gBACtB,SAAS,MAAM,QAAQ,QAAQ,CAChC;AAED,MAAI,WAAY,OAAM,MAAM,YAAY,QAAQ;GAChD;AAEF,OAAM,QAAQ,IAAI,MAAM;;AAG1B,SAAS,QAAQ,MAAmC;CAClD,IAAI,KAAK;CACT,MAAMA,UAAwB,EAAE;CAChC,MAAM,kCAAkB,IAAI,KAAa;CAEzC,SAAS,YACP,SACA,WACA,SACY;AACZ,SAAO;GACL,IAAI,GAAG,KAAK,GAAG,IAAI,MAAM,UAAU;GACnC,OAAO,KAAK;GACZ,KAAK,KAAK;GAEV,SAAS,KAAK;GACd,KAAK,KAAK;GACV;GACA,YAAY;GACZ;GACA,aAAa,KAAK;GAClB,GAAG,KAAK;GACT;;AAGH,KAAI,KAAK,YAAa,SAAQ,KAAK,YAAY,QAAW,QAAW,KAAK,YAAY,CAAC;AAEvF,MAAK,WAAW,SAAS,SAAS,MAAM;EACtC,MAAM,UAAU,EAAE,UAAU,KAAK,WAAW,SAAS,MAAM,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG;EAEvF,MAAM,QAAQ,YAAY,SAAS,SAAS,SAAS,IAAI,EAAE,QAAQ;AAEnE,MAAI,WAAW,CAAC,gBAAgB,IAAI,QAAQ,GAAG,EAAE;AAC/C,mBAAgB,IAAI,QAAQ,GAAG;AAE/B,WAAQ,KAAK,YAAY,QAAQ,SAAS,QAAQ,IAAI,QAAQ,QAAQ,CAAC;;AAGzE,UAAQ,KAAK,MAAM;GACnB;AAEF,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","names":["search","mapTo: PartialSchemaDeep<AdvancedDocument>[]","breadcrumbs: string[] | undefined","structuredData: StructuredData | undefined","STEMMERS: Record<string, string>"],"sources":["../../src/search/orama/create-endpoint.ts","../../src/search/orama/create-db.ts","../../src/search/orama/create-from-source.ts","../../src/search/orama/_stemmers.ts","../../src/search/orama/create-i18n.ts","../../src/search/server.ts"],"sourcesContent":["import { type SearchAPI, type SearchServer } from '@/search/server';\n\nexport function createEndpoint(server: SearchServer): SearchAPI {\n const { search } = server;\n\n return {\n ...server,\n async staticGET() {\n return Response.json(await server.export());\n },\n async GET(request) {\n const url = new URL(request.url);\n const query = url.searchParams.get('query');\n if (!query) return Response.json([]);\n\n return Response.json(\n await search(query, {\n tag: url.searchParams.get('tag')?.split(',') ?? undefined,\n locale: url.searchParams.get('locale') ?? undefined,\n mode: url.searchParams.get('mode') === 'vector' ? 'vector' : 'full',\n }),\n );\n },\n };\n}\n","import {\n create,\n insertMultiple,\n type Orama,\n type PartialSchemaDeep,\n type TypedDocument,\n} from '@orama/orama';\nimport { type AdvancedOptions, type SimpleOptions } from '@/search/server';\n\nexport type SimpleDocument = TypedDocument<Orama<typeof simpleSchema>>;\nexport const simpleSchema = {\n url: 'string',\n title: 'string',\n breadcrumbs: 'string[]',\n description: 'string',\n content: 'string',\n keywords: 'string',\n} as const;\n\nexport type AdvancedDocument = TypedDocument<Orama<typeof advancedSchema>>;\nexport const advancedSchema = {\n content: 'string',\n page_id: 'string',\n type: 'string',\n breadcrumbs: 'string[]',\n tags: 'enum[]',\n url: 'string',\n embeddings: 'vector[512]',\n} as const;\n\nexport async function createDB({\n indexes,\n tokenizer,\n search: _,\n ...rest\n}: AdvancedOptions): Promise<Orama<typeof advancedSchema>> {\n const items = typeof indexes === 'function' ? await indexes() : indexes;\n\n const db = create({\n schema: advancedSchema,\n ...rest,\n components: {\n ...rest.components,\n tokenizer: tokenizer ?? rest.components?.tokenizer,\n },\n }) as Orama<typeof advancedSchema>;\n\n const mapTo: PartialSchemaDeep<AdvancedDocument>[] = [];\n items.forEach((page) => {\n const pageTag = page.tag ?? [];\n const tags = Array.isArray(pageTag) ? pageTag : [pageTag];\n const data = page.structuredData;\n let id = 0;\n\n mapTo.push({\n id: page.id,\n page_id: page.id,\n type: 'page',\n content: page.title,\n breadcrumbs: page.breadcrumbs,\n tags,\n url: page.url,\n });\n\n const nextId = () => `${page.id}-${id++}`;\n\n if (page.description) {\n mapTo.push({\n id: nextId(),\n page_id: page.id,\n tags,\n type: 'text',\n url: page.url,\n content: page.description,\n });\n }\n\n for (const heading of data.headings) {\n mapTo.push({\n id: nextId(),\n page_id: page.id,\n type: 'heading',\n tags,\n url: `${page.url}#${heading.id}`,\n content: heading.content,\n });\n }\n\n for (const content of data.contents) {\n mapTo.push({\n id: nextId(),\n page_id: page.id,\n tags,\n type: 'text',\n url: content.heading ? `${page.url}#${content.heading}` : page.url,\n content: content.content,\n });\n }\n });\n\n await insertMultiple(db, mapTo);\n return db;\n}\n\nexport async function createDBSimple({\n indexes,\n tokenizer,\n ...rest\n}: SimpleOptions): Promise<Orama<typeof simpleSchema>> {\n const items = typeof indexes === 'function' ? await indexes() : indexes;\n const db = create({\n schema: simpleSchema,\n ...rest,\n components: {\n ...rest.components,\n tokenizer: tokenizer ?? rest.components?.tokenizer,\n },\n }) as Orama<typeof simpleSchema>;\n\n await insertMultiple(\n db,\n items.map((page) => ({\n title: page.title,\n description: page.description,\n breadcrumbs: page.breadcrumbs,\n url: page.url,\n content: page.content,\n keywords: page.keywords,\n })),\n );\n\n return db;\n}\n","import {\n type AdvancedIndex,\n type AdvancedOptions,\n createI18nSearchAPI,\n createSearchAPI,\n type SearchAPI,\n} from '@/search/server';\nimport type { LoaderConfig, LoaderOutput, Page } from '@/source';\nimport { type StructuredData } from '@/mdx-plugins';\nimport { basename, extname } from '@/source/path';\nimport type { I18nConfig } from '@/i18n';\nimport type { Language } from '@orama/orama';\nimport { findPath } from '@/page-tree/utils';\n\ntype Awaitable<T> = T | Promise<T>;\n\nfunction defaultBuildIndex<C extends LoaderConfig>(source: LoaderOutput<C>) {\n function isBreadcrumbItem(item: unknown): item is string {\n return typeof item === 'string' && item.length > 0;\n }\n\n return async (page: Page): Promise<AdvancedIndex> => {\n let breadcrumbs: string[] | undefined;\n let structuredData: StructuredData | undefined;\n\n if ('structuredData' in page.data) {\n structuredData = page.data.structuredData as StructuredData;\n } else if ('load' in page.data && typeof page.data.load === 'function') {\n structuredData = (await page.data.load()).structuredData;\n }\n\n if (!structuredData)\n throw new Error(\n 'Cannot find structured data from page, please define the page to index function.',\n );\n\n const pageTree = source.getPageTree(page.locale);\n const path = findPath(\n pageTree.children,\n (node) => node.type === 'page' && node.url === page.url,\n );\n if (path) {\n breadcrumbs = [];\n path.pop();\n\n if (isBreadcrumbItem(pageTree.name)) {\n breadcrumbs.push(pageTree.name);\n }\n\n for (const segment of path) {\n if (!isBreadcrumbItem(segment.name)) continue;\n\n breadcrumbs.push(segment.name);\n }\n }\n\n return {\n title: page.data.title ?? basename(page.path, extname(page.path)),\n breadcrumbs,\n description: page.data.description,\n url: page.url,\n id: page.url,\n structuredData,\n };\n };\n}\n\ninterface Options<C extends LoaderConfig> extends Omit<AdvancedOptions, 'indexes'> {\n localeMap?: {\n [K in C['i18n'] extends I18nConfig<infer Languages> ? Languages : string]?:\n | Partial<AdvancedOptions>\n | Language;\n };\n buildIndex?: (page: Page<C['source']['pageData']>) => Awaitable<AdvancedIndex>;\n}\n\nexport function createFromSource<C extends LoaderConfig>(\n source: LoaderOutput<C>,\n options?: Options<C>,\n): SearchAPI;\n\nexport function createFromSource<C extends LoaderConfig>(\n source: LoaderOutput<C>,\n options: Options<C> = {},\n): SearchAPI {\n const { buildIndex = defaultBuildIndex(source) } = options;\n\n if (source._i18n) {\n return createI18nSearchAPI('advanced', {\n ...options,\n i18n: source._i18n,\n indexes: async () => {\n const indexes = source.getLanguages().flatMap((entry) => {\n return entry.pages.map(async (page) => ({\n ...(await buildIndex(page)),\n locale: entry.language,\n }));\n });\n\n return Promise.all(indexes);\n },\n });\n }\n\n return createSearchAPI('advanced', {\n ...options,\n indexes: async () => {\n const indexes = source.getPages().map((page) => buildIndex(page));\n\n return Promise.all(indexes);\n },\n });\n}\n","/* Cloned from https://github.com/oramasearch/orama/blob/main/packages/orama/src/components/tokenizer/languages.ts */\nexport const STEMMERS: Record<string, string> = {\n arabic: 'ar',\n armenian: 'am',\n bulgarian: 'bg',\n czech: 'cz',\n danish: 'dk',\n dutch: 'nl',\n english: 'en',\n finnish: 'fi',\n french: 'fr',\n german: 'de',\n greek: 'gr',\n hungarian: 'hu',\n indian: 'in',\n indonesian: 'id',\n irish: 'ie',\n italian: 'it',\n lithuanian: 'lt',\n nepali: 'np',\n norwegian: 'no',\n portuguese: 'pt',\n romanian: 'ro',\n russian: 'ru',\n serbian: 'rs',\n slovenian: 'ru',\n spanish: 'es',\n swedish: 'se',\n tamil: 'ta',\n turkish: 'tr',\n ukrainian: 'uk',\n sanskrit: 'sk',\n};\n","import { type Language, type Tokenizer } from '@orama/orama';\nimport {\n type AdvancedIndex,\n type AdvancedOptions,\n type Dynamic,\n type Index,\n initAdvancedSearch,\n initSimpleSearch,\n type SearchAPI,\n type SearchServer,\n type SimpleOptions,\n} from '@/search/server';\nimport { createEndpoint } from '@/search/orama/create-endpoint';\nimport { type I18nConfig } from '@/i18n';\nimport { STEMMERS } from '@/search/orama/_stemmers';\n\ntype I18nOptions<O extends SimpleOptions | AdvancedOptions, Idx> = Omit<\n O,\n 'language' | 'indexes'\n> & {\n i18n: I18nConfig;\n\n /**\n * Map locale name from i18n config to Orama compatible `language` or options\n */\n localeMap?: Record<string, Language | Partial<O> | undefined>;\n\n indexes: WithLocale<Idx>[] | Dynamic<WithLocale<Idx>>;\n};\n\ntype I18nSimpleOptions = I18nOptions<SimpleOptions, Index>;\ntype I18nAdvancedOptions = I18nOptions<AdvancedOptions, AdvancedIndex>;\n\ntype WithLocale<T> = T & {\n locale: string;\n};\n\nasync function getTokenizer(\n locale: string,\n): Promise<{ language: string } | { tokenizer: Tokenizer }> {\n return {\n language: Object.keys(STEMMERS).find((lang) => STEMMERS[lang] === locale) ?? locale,\n };\n}\n\nasync function initSimple(options: I18nSimpleOptions): Promise<Map<string, SearchServer>> {\n const map = new Map<string, SearchServer>();\n if (options.i18n.languages.length === 0) {\n return map;\n }\n\n const indexes = typeof options.indexes === 'function' ? await options.indexes() : options.indexes;\n\n for (const locale of options.i18n.languages) {\n const localeIndexes = indexes.filter((index) => index.locale === locale);\n const mapped = options.localeMap?.[locale] ?? (await getTokenizer(locale));\n\n map.set(\n locale,\n typeof mapped === 'object'\n ? initSimpleSearch({\n ...options,\n ...mapped,\n indexes: localeIndexes,\n })\n : initSimpleSearch({\n ...options,\n language: mapped,\n indexes: localeIndexes,\n }),\n );\n }\n\n return map;\n}\n\nasync function initAdvanced(options: I18nAdvancedOptions): Promise<Map<string, SearchServer>> {\n const map = new Map<string, SearchServer>();\n if (options.i18n.languages.length === 0) {\n return map;\n }\n\n const indexes = typeof options.indexes === 'function' ? await options.indexes() : options.indexes;\n\n for (const locale of options.i18n.languages) {\n const localeIndexes = indexes.filter((index) => index.locale === locale);\n const mapped = options.localeMap?.[locale] ?? (await getTokenizer(locale));\n\n map.set(\n locale,\n typeof mapped === 'object'\n ? initAdvancedSearch({\n ...options,\n indexes: localeIndexes,\n ...mapped,\n })\n : initAdvancedSearch({\n ...options,\n language: mapped,\n indexes: localeIndexes,\n }),\n );\n }\n\n return map;\n}\n\nexport function createI18nSearchAPI<T extends 'simple' | 'advanced'>(\n type: T,\n options: T extends 'simple' ? I18nSimpleOptions : I18nAdvancedOptions,\n): SearchAPI {\n const get =\n type === 'simple'\n ? initSimple(options as I18nSimpleOptions)\n : initAdvanced(options as I18nAdvancedOptions);\n return createEndpoint({\n async export() {\n const map = await get;\n const entries = Array.from(map.entries()).map(async ([k, v]) => [\n k,\n await (v as SearchServer).export(),\n ]);\n\n return {\n type: 'i18n',\n data: Object.fromEntries(await Promise.all(entries)),\n };\n },\n async search(query, searchOptions) {\n const map = await get;\n\n const locale = searchOptions?.locale ?? options.i18n.defaultLanguage;\n const handler = map.get(locale);\n\n if (handler) return handler.search(query, searchOptions);\n return [];\n },\n });\n}\n","import { create, type Orama, type RawData, save, type SearchParams } from '@orama/orama';\nimport type { StructuredData } from '@/mdx-plugins/remark-structure';\nimport { createEndpoint } from '@/search/orama/create-endpoint';\nimport {\n type AdvancedDocument,\n type advancedSchema,\n createDB,\n createDBSimple,\n type SimpleDocument,\n simpleSchema,\n} from '@/search/orama/create-db';\nimport { searchSimple } from '@/search/orama/search/simple';\nimport { searchAdvanced } from '@/search/orama/search/advanced';\nimport type { SortedResult } from '@/search';\n\ntype SearchType = 'simple' | 'advanced';\n\nexport type ExportedData =\n | (RawData & { type: SearchType })\n | {\n type: 'i18n';\n data: Record<string, RawData & { type: SearchType }>;\n };\n\nexport interface SearchServer {\n search: (\n query: string,\n options?: {\n locale?: string;\n tag?: string | string[];\n mode?: 'vector' | 'full';\n },\n ) => Promise<SortedResult[]>;\n\n /**\n * Export the database\n *\n * You can reference the exported database to implement client-side search\n */\n export: () => Promise<ExportedData>;\n}\n\nexport interface SearchAPI extends SearchServer {\n GET: (request: Request) => Promise<Response>;\n\n /**\n * `GET` route handler that exports search indexes for static search.\n */\n staticGET: () => Promise<Response>;\n}\n\n/**\n * Resolve indexes dynamically\n */\nexport type Dynamic<T> = () => T[] | Promise<T[]>;\n\ntype OramaInput = Parameters<typeof create>[0];\n\ntype SharedOptions = Pick<OramaInput, 'sort' | 'components' | 'plugins'> & {\n language?: string;\n tokenizer?: Required<OramaInput>['components']['tokenizer'];\n};\n\nexport interface SimpleOptions extends SharedOptions {\n indexes: Index[] | Dynamic<Index>;\n\n /**\n * Customise search options on server\n */\n search?: Partial<SearchParams<Orama<typeof simpleSchema>, SimpleDocument>>;\n}\n\nexport interface AdvancedOptions extends SharedOptions {\n indexes: AdvancedIndex[] | Dynamic<AdvancedIndex>;\n\n /**\n * Customise search options on server\n */\n search?: Partial<SearchParams<Orama<typeof advancedSchema>, AdvancedDocument>>;\n}\n\nexport function createSearchAPI<T extends SearchType>(\n type: T,\n options: T extends 'simple' ? SimpleOptions : AdvancedOptions,\n): SearchAPI {\n if (type === 'simple') {\n return createEndpoint(initSimpleSearch(options as SimpleOptions));\n }\n\n return createEndpoint(initAdvancedSearch(options as AdvancedOptions));\n}\n\nexport interface Index {\n title: string;\n description?: string;\n breadcrumbs?: string[];\n content: string;\n url: string;\n keywords?: string;\n}\n\nexport function initSimpleSearch(options: SimpleOptions): SearchServer {\n const doc = createDBSimple(options);\n\n return {\n async export() {\n return {\n type: 'simple',\n ...save(await doc),\n };\n },\n async search(query) {\n const db = await doc;\n\n return searchSimple(db, query, options.search);\n },\n };\n}\n\nexport interface AdvancedIndex {\n id: string;\n title: string;\n description?: string;\n breadcrumbs?: string[];\n\n /**\n * Required if tag filter is enabled\n */\n tag?: string | string[];\n\n /**\n * preprocess mdx content with `structure`\n */\n structuredData: StructuredData;\n url: string;\n}\n\nexport function initAdvancedSearch(options: AdvancedOptions): SearchServer {\n const get = createDB(options);\n\n return {\n async export() {\n return {\n type: 'advanced',\n ...save(await get),\n };\n },\n async search(query, searchOptions) {\n const db = await get;\n const mode = searchOptions?.mode;\n\n return searchAdvanced(db, query, searchOptions?.tag, {\n ...options.search,\n mode: mode === 'vector' ? 'vector' : 'fulltext',\n }).catch((err) => {\n if (mode === 'vector') {\n throw new Error(\n 'failed to search, make sure you have installed `@orama/plugin-embeddings` according to their docs.',\n {\n cause: err,\n },\n );\n }\n\n throw err;\n });\n },\n };\n}\n\nexport { createFromSource } from './orama/create-from-source';\nexport { createI18nSearchAPI } from './orama/create-i18n';\nexport * from './index';\n"],"mappings":"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"}
|
package/dist/search-D6ChCLhY.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
//#region src/search/index.ts
|
|
2
|
-
function escapeRegExp(input) {
|
|
3
|
-
return input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
4
|
-
}
|
|
5
|
-
function buildRegexFromQuery(q) {
|
|
6
|
-
const trimmed = q.trim();
|
|
7
|
-
if (trimmed.length === 0) return null;
|
|
8
|
-
const terms = Array.from(new Set(trimmed.split(/\s+/).map((t) => t.trim()).filter(Boolean)));
|
|
9
|
-
if (terms.length === 0) return null;
|
|
10
|
-
const escaped = terms.map(escapeRegExp).join("|");
|
|
11
|
-
return new RegExp(`(${escaped})`, "gi");
|
|
12
|
-
}
|
|
13
|
-
function createContentHighlighter(query) {
|
|
14
|
-
const regex = typeof query === "string" ? buildRegexFromQuery(query) : query;
|
|
15
|
-
return { highlight(content) {
|
|
16
|
-
if (!regex) return [{
|
|
17
|
-
type: "text",
|
|
18
|
-
content
|
|
19
|
-
}];
|
|
20
|
-
const out = [];
|
|
21
|
-
let i = 0;
|
|
22
|
-
for (const match of content.matchAll(regex)) {
|
|
23
|
-
if (i < match.index) out.push({
|
|
24
|
-
type: "text",
|
|
25
|
-
content: content.substring(i, match.index)
|
|
26
|
-
});
|
|
27
|
-
out.push({
|
|
28
|
-
type: "text",
|
|
29
|
-
content: match[0],
|
|
30
|
-
styles: { highlight: true }
|
|
31
|
-
});
|
|
32
|
-
i = match.index + match[0].length;
|
|
33
|
-
}
|
|
34
|
-
if (i < content.length) out.push({
|
|
35
|
-
type: "text",
|
|
36
|
-
content: content.substring(i)
|
|
37
|
-
});
|
|
38
|
-
return out;
|
|
39
|
-
} };
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
//#endregion
|
|
43
|
-
export { createContentHighlighter as t };
|
|
44
|
-
//# sourceMappingURL=search-D6ChCLhY.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-D6ChCLhY.js","names":["out: HighlightedText[]"],"sources":["../src/search/index.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport interface SortedResult<Content = string> {\n id: string;\n url: string;\n type: 'page' | 'heading' | 'text';\n content: Content;\n\n /**\n * breadcrumbs to be displayed on UI\n */\n breadcrumbs?: Content[];\n contentWithHighlights?: HighlightedText<Content>[];\n}\n\nexport type ReactSortedResult = SortedResult<ReactNode>;\n\nexport interface HighlightedText<Content = string> {\n type: 'text';\n content: Content;\n styles?: {\n highlight?: boolean;\n };\n}\n\nfunction escapeRegExp(input: string): string {\n return input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction buildRegexFromQuery(q: string): RegExp | null {\n const trimmed = q.trim();\n if (trimmed.length === 0) return null;\n const terms = Array.from(\n new Set(\n trimmed\n .split(/\\s+/)\n .map((t) => t.trim())\n .filter(Boolean),\n ),\n );\n if (terms.length === 0) return null;\n const escaped = terms.map(escapeRegExp).join('|');\n return new RegExp(`(${escaped})`, 'gi');\n}\n\nexport function createContentHighlighter(query: string | RegExp) {\n const regex = typeof query === 'string' ? buildRegexFromQuery(query) : query;\n\n return {\n highlight(content: string): HighlightedText[] {\n if (!regex) return [{ type: 'text', content }];\n const out: HighlightedText[] = [];\n\n let i = 0;\n for (const match of content.matchAll(regex)) {\n if (i < match.index) {\n out.push({\n type: 'text',\n content: content.substring(i, match.index),\n });\n }\n\n out.push({\n type: 'text',\n content: match[0],\n styles: {\n highlight: true,\n },\n });\n\n i = match.index + match[0].length;\n }\n\n if (i < content.length) {\n out.push({\n type: 'text',\n content: content.substring(i),\n });\n }\n\n return out;\n },\n };\n}\n"],"mappings":";AAyBA,SAAS,aAAa,OAAuB;AAC3C,QAAO,MAAM,QAAQ,uBAAuB,OAAO;;AAGrD,SAAS,oBAAoB,GAA0B;CACrD,MAAM,UAAU,EAAE,MAAM;AACxB,KAAI,QAAQ,WAAW,EAAG,QAAO;CACjC,MAAM,QAAQ,MAAM,KAClB,IAAI,IACF,QACG,MAAM,MAAM,CACZ,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,OAAO,QAAQ,CACnB,CACF;AACD,KAAI,MAAM,WAAW,EAAG,QAAO;CAC/B,MAAM,UAAU,MAAM,IAAI,aAAa,CAAC,KAAK,IAAI;AACjD,QAAO,IAAI,OAAO,IAAI,QAAQ,IAAI,KAAK;;AAGzC,SAAgB,yBAAyB,OAAwB;CAC/D,MAAM,QAAQ,OAAO,UAAU,WAAW,oBAAoB,MAAM,GAAG;AAEvE,QAAO,EACL,UAAU,SAAoC;AAC5C,MAAI,CAAC,MAAO,QAAO,CAAC;GAAE,MAAM;GAAQ;GAAS,CAAC;EAC9C,MAAMA,MAAyB,EAAE;EAEjC,IAAI,IAAI;AACR,OAAK,MAAM,SAAS,QAAQ,SAAS,MAAM,EAAE;AAC3C,OAAI,IAAI,MAAM,MACZ,KAAI,KAAK;IACP,MAAM;IACN,SAAS,QAAQ,UAAU,GAAG,MAAM,MAAM;IAC3C,CAAC;AAGJ,OAAI,KAAK;IACP,MAAM;IACN,SAAS,MAAM;IACf,QAAQ,EACN,WAAW,MACZ;IACF,CAAC;AAEF,OAAI,MAAM,QAAQ,MAAM,GAAG;;AAG7B,MAAI,IAAI,QAAQ,OACd,KAAI,KAAK;GACP,MAAM;GACN,SAAS,QAAQ,UAAU,EAAE;GAC9B,CAAC;AAGJ,SAAO;IAEV"}
|