@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.
Files changed (261) hide show
  1. package/README.md +3 -3
  2. package/dist/{advanced-BRT5Ij43.js → advanced-BH0syJ-M.js} +3 -4
  3. package/dist/{algolia-CQPXCnjV.js → algolia-C7Crg8-5.js} +2 -3
  4. package/dist/breadcrumb.d.ts +2 -3
  5. package/dist/breadcrumb.js +3 -4
  6. package/dist/{chunk-B-ezknvj.js → chunk-CaR5F9JI.js} +3 -3
  7. package/dist/content/github.d.ts +1 -2
  8. package/dist/content/github.js +1 -2
  9. package/dist/content/index.d.ts +3 -4
  10. package/dist/content/index.js +1 -2
  11. package/dist/content/mdx/preset-bundler.d.ts +9 -10
  12. package/dist/content/mdx/preset-bundler.js +2 -3
  13. package/dist/content/mdx/preset-runtime.d.ts +9 -10
  14. package/dist/content/mdx/preset-runtime.js +2 -3
  15. package/dist/content/toc.d.ts +1 -3
  16. package/dist/content/toc.js +4 -5
  17. package/dist/create-i18n-Cv3Cocbs.d.ts +51 -0
  18. package/dist/{definitions-DuxDer_c.d.ts → definitions-DSNTbAwC.d.ts} +1 -2
  19. package/dist/dynamic-link.d.ts +3 -4
  20. package/dist/dynamic-link.js +1 -3
  21. package/dist/{fetch-B5e9CFfN.js → fetch-HotVeLLF.js} +1 -2
  22. package/dist/framework/index.d.ts +5 -6
  23. package/dist/framework/index.js +18 -19
  24. package/dist/framework/next.d.ts +3 -4
  25. package/dist/framework/next.js +1 -2
  26. package/dist/framework/react-router.d.ts +1 -2
  27. package/dist/framework/react-router.js +1 -2
  28. package/dist/framework/tanstack.d.ts +4 -5
  29. package/dist/framework/tanstack.js +2 -3
  30. package/dist/framework/waku.d.ts +1 -2
  31. package/dist/framework/waku.js +1 -2
  32. package/dist/hast-utils-BmGqqmvo.js +15 -0
  33. package/dist/highlight/client.d.ts +2 -4
  34. package/dist/highlight/client.js +7 -13
  35. package/dist/highlight/config.d.ts +15 -0
  36. package/dist/highlight/config.js +18 -0
  37. package/dist/highlight/core/client.d.ts +31 -0
  38. package/dist/highlight/core/client.js +68 -0
  39. package/dist/highlight/core/index.d.ts +27 -0
  40. package/dist/highlight/core/index.js +69 -0
  41. package/dist/highlight/index.d.ts +34 -2
  42. package/dist/highlight/index.js +57 -2
  43. package/dist/i18n/index.d.ts +39 -1
  44. package/dist/i18n/index.js +1 -2
  45. package/dist/i18n/middleware.d.ts +2 -3
  46. package/dist/i18n/middleware.js +1 -2
  47. package/dist/{icon-BWwSDabM.js → icon-OtPFhyk1.js} +1 -2
  48. package/dist/link.d.ts +3 -4
  49. package/dist/link.js +1 -2
  50. package/dist/{mdast-utils-mc9-X-PK.js → mdast-utils-gJMY143g.js} +1 -2
  51. package/dist/mdx-plugins/codeblock-utils.d.ts +35 -1
  52. package/dist/mdx-plugins/codeblock-utils.js +2 -3
  53. package/dist/mdx-plugins/index.d.ts +18 -15
  54. package/dist/mdx-plugins/index.js +7 -5
  55. package/dist/mdx-plugins/rehype-code.core.d.ts +38 -0
  56. package/dist/mdx-plugins/rehype-code.core.js +104 -0
  57. package/dist/mdx-plugins/rehype-code.d.ts +18 -2
  58. package/dist/mdx-plugins/rehype-code.js +24 -3
  59. package/dist/mdx-plugins/rehype-toc.d.ts +16 -1
  60. package/dist/mdx-plugins/rehype-toc.js +127 -1
  61. package/dist/mdx-plugins/remark-admonition.d.ts +20 -1
  62. package/dist/mdx-plugins/remark-admonition.js +2 -3
  63. package/dist/mdx-plugins/remark-code-tab.d.ts +30 -1
  64. package/dist/mdx-plugins/remark-code-tab.js +4 -5
  65. package/dist/mdx-plugins/remark-directive-admonition.d.ts +34 -1
  66. package/dist/mdx-plugins/remark-directive-admonition.js +1 -2
  67. package/dist/mdx-plugins/remark-feedback-block.d.ts +51 -0
  68. package/dist/mdx-plugins/remark-feedback-block.js +47 -0
  69. package/dist/mdx-plugins/remark-gfm.d.ts +2 -2
  70. package/dist/mdx-plugins/remark-heading.d.ts +35 -1
  71. package/dist/mdx-plugins/remark-heading.js +2 -3
  72. package/dist/mdx-plugins/remark-image.d.ts +63 -1
  73. package/dist/mdx-plugins/remark-image.js +1 -2
  74. package/dist/mdx-plugins/remark-mdx-files.d.ts +55 -2
  75. package/dist/mdx-plugins/remark-mdx-files.js +103 -13
  76. package/dist/mdx-plugins/remark-mdx-mermaid.d.ts +15 -1
  77. package/dist/mdx-plugins/remark-mdx-mermaid.js +1 -2
  78. package/dist/mdx-plugins/remark-npm.d.ts +34 -1
  79. package/dist/mdx-plugins/remark-npm.js +1 -2
  80. package/dist/mdx-plugins/remark-steps.d.ts +26 -1
  81. package/dist/mdx-plugins/remark-steps.js +1 -2
  82. package/dist/mdx-plugins/remark-structure.d.ts +75 -1
  83. package/dist/mdx-plugins/remark-structure.js +7 -8
  84. package/dist/{mixedbread-DlByNYSd.js → mixedbread-Bx9drx9S.js} +6 -5
  85. package/dist/negotiation/index.d.ts +1 -2
  86. package/dist/negotiation/index.js +1 -2
  87. package/dist/{normalize-url-DP9-1I-S.js → normalize-url-DUHbcuVM.js} +2 -3
  88. package/dist/{orama-cloud-DH3g37zc.js → orama-cloud-ByznDyOk.js} +6 -7
  89. package/dist/orama-cloud-legacy-BbgJnf5f.js +81 -0
  90. package/dist/page-tree/index.d.ts +3 -45
  91. package/dist/page-tree/index.js +1 -1
  92. package/dist/{index-2U6Tl4--.d.ts → path-B77y3W0_.d.ts} +111 -98
  93. package/dist/{path-DHIjrDBP.js → path-D0Bwm6Fs.js} +2 -3
  94. package/dist/{remove-undefined-Cfs4o_mM.js → remove-undefined-CJm9cyrC.js} +1 -2
  95. package/dist/search/algolia.d.ts +66 -2
  96. package/dist/search/algolia.js +1 -2
  97. package/dist/search/client.d.ts +31 -8
  98. package/dist/search/client.js +27 -22
  99. package/dist/search/index.d.ts +1 -2
  100. package/dist/search/index.js +41 -1
  101. package/dist/search/orama-cloud-legacy.d.ts +77 -0
  102. package/dist/search/orama-cloud-legacy.js +49 -0
  103. package/dist/search/orama-cloud.d.ts +5 -9
  104. package/dist/search/orama-cloud.js +1 -2
  105. package/dist/search/server.d.ts +87 -4
  106. package/dist/search/server.js +7 -8
  107. package/dist/source/client/index.d.ts +13 -11
  108. package/dist/source/client/index.js +22 -13
  109. package/dist/source/index.d.ts +5 -3
  110. package/dist/source/index.js +428 -333
  111. package/dist/source/plugins/lucide-icons.d.ts +5 -4
  112. package/dist/source/plugins/lucide-icons.js +2 -3
  113. package/dist/source/plugins/slugs.d.ts +24 -2
  114. package/dist/source/plugins/slugs.js +2 -3
  115. package/dist/source/plugins/status-badges.d.ts +52 -0
  116. package/dist/source/plugins/status-badges.js +54 -0
  117. package/dist/source/schema.d.ts +1 -3
  118. package/dist/source/schema.js +1 -2
  119. package/dist/{static-Dq8pA8Ay.js → static-DTxK4eHk.js} +5 -6
  120. package/dist/toc.d.ts +5 -6
  121. package/dist/toc.js +1 -2
  122. package/dist/{rehype-code-CdiZ1Y6P.js → transformer-icon-BYedaeE8.js} +1 -96
  123. package/dist/transformer-icon-D7-6aFzt.d.ts +18 -0
  124. package/dist/types-BSnJn7kF.d.ts +6 -0
  125. package/dist/{util-CK2ykiif.d.ts → util-C60LmklF.d.ts} +1 -2
  126. package/dist/{util-s9piKHsk.js → util-De0ALHOx.js} +1 -2
  127. package/dist/utils/use-media-query.d.ts +1 -2
  128. package/dist/utils/use-media-query.js +1 -2
  129. package/dist/utils/use-on-change.d.ts +1 -2
  130. package/dist/utils/use-on-change.js +1 -2
  131. package/dist/{utils-DUvi2WkD.js → utils-Bc53B3CJ.js} +8 -7
  132. package/dist/utils-IgHyYnrz.d.ts +45 -0
  133. package/package.json +58 -28
  134. package/dist/advanced-BRT5Ij43.js.map +0 -1
  135. package/dist/algolia-CBBN8R6-.d.ts +0 -68
  136. package/dist/algolia-CBBN8R6-.d.ts.map +0 -1
  137. package/dist/algolia-CQPXCnjV.js.map +0 -1
  138. package/dist/breadcrumb.d.ts.map +0 -1
  139. package/dist/breadcrumb.js.map +0 -1
  140. package/dist/codeblock-utils-lld8UiQo.d.ts +0 -37
  141. package/dist/codeblock-utils-lld8UiQo.d.ts.map +0 -1
  142. package/dist/content/github.d.ts.map +0 -1
  143. package/dist/content/github.js.map +0 -1
  144. package/dist/content/index.d.ts.map +0 -1
  145. package/dist/content/index.js.map +0 -1
  146. package/dist/content/mdx/preset-bundler.d.ts.map +0 -1
  147. package/dist/content/mdx/preset-bundler.js.map +0 -1
  148. package/dist/content/mdx/preset-runtime.d.ts.map +0 -1
  149. package/dist/content/mdx/preset-runtime.js.map +0 -1
  150. package/dist/content/toc.d.ts.map +0 -1
  151. package/dist/content/toc.js.map +0 -1
  152. package/dist/definitions-DuxDer_c.d.ts.map +0 -1
  153. package/dist/dynamic-link.d.ts.map +0 -1
  154. package/dist/dynamic-link.js.map +0 -1
  155. package/dist/fetch-B5e9CFfN.js.map +0 -1
  156. package/dist/framework/index.d.ts.map +0 -1
  157. package/dist/framework/index.js.map +0 -1
  158. package/dist/framework/next.d.ts.map +0 -1
  159. package/dist/framework/next.js.map +0 -1
  160. package/dist/framework/react-router.d.ts.map +0 -1
  161. package/dist/framework/react-router.js.map +0 -1
  162. package/dist/framework/tanstack.d.ts.map +0 -1
  163. package/dist/framework/tanstack.js.map +0 -1
  164. package/dist/framework/waku.d.ts.map +0 -1
  165. package/dist/framework/waku.js.map +0 -1
  166. package/dist/highlight/client.d.ts.map +0 -1
  167. package/dist/highlight/client.js.map +0 -1
  168. package/dist/i18n/index.js.map +0 -1
  169. package/dist/i18n/middleware.d.ts.map +0 -1
  170. package/dist/i18n/middleware.js.map +0 -1
  171. package/dist/icon-BWwSDabM.js.map +0 -1
  172. package/dist/index-2U6Tl4--.d.ts.map +0 -1
  173. package/dist/index-Bw-DCOra.d.ts +0 -41
  174. package/dist/index-Bw-DCOra.d.ts.map +0 -1
  175. package/dist/link.d.ts.map +0 -1
  176. package/dist/link.js.map +0 -1
  177. package/dist/mdast-utils-mc9-X-PK.js.map +0 -1
  178. package/dist/mdx-plugins/codeblock-utils.js.map +0 -1
  179. package/dist/mdx-plugins/remark-admonition.js.map +0 -1
  180. package/dist/mdx-plugins/remark-code-tab.js.map +0 -1
  181. package/dist/mdx-plugins/remark-directive-admonition.js.map +0 -1
  182. package/dist/mdx-plugins/remark-heading.js.map +0 -1
  183. package/dist/mdx-plugins/remark-image.js.map +0 -1
  184. package/dist/mdx-plugins/remark-mdx-files.js.map +0 -1
  185. package/dist/mdx-plugins/remark-mdx-mermaid.js.map +0 -1
  186. package/dist/mdx-plugins/remark-npm.js.map +0 -1
  187. package/dist/mdx-plugins/remark-steps.js.map +0 -1
  188. package/dist/mdx-plugins/remark-structure.js.map +0 -1
  189. package/dist/mixedbread-DlByNYSd.js.map +0 -1
  190. package/dist/negotiation/index.d.ts.map +0 -1
  191. package/dist/negotiation/index.js.map +0 -1
  192. package/dist/normalize-url-DP9-1I-S.js.map +0 -1
  193. package/dist/orama-cloud-DH3g37zc.js.map +0 -1
  194. package/dist/page-tree/index.d.ts.map +0 -1
  195. package/dist/path-DHIjrDBP.js.map +0 -1
  196. package/dist/rehype-code-CdiZ1Y6P.js.map +0 -1
  197. package/dist/rehype-code-vVWG4-ej.d.ts +0 -58
  198. package/dist/rehype-code-vVWG4-ej.d.ts.map +0 -1
  199. package/dist/rehype-toc-DJvSyE0o.d.ts +0 -18
  200. package/dist/rehype-toc-DJvSyE0o.d.ts.map +0 -1
  201. package/dist/rehype-toc-DVwJcwvA.js +0 -143
  202. package/dist/rehype-toc-DVwJcwvA.js.map +0 -1
  203. package/dist/remark-admonition-DOwBWzsH.d.ts +0 -22
  204. package/dist/remark-admonition-DOwBWzsH.d.ts.map +0 -1
  205. package/dist/remark-code-tab-CXsYlims.d.ts +0 -32
  206. package/dist/remark-code-tab-CXsYlims.d.ts.map +0 -1
  207. package/dist/remark-directive-admonition-BCm_yiU9.d.ts +0 -36
  208. package/dist/remark-directive-admonition-BCm_yiU9.d.ts.map +0 -1
  209. package/dist/remark-gfm-CeWpMwyk.d.ts +0 -2
  210. package/dist/remark-heading-CXvCY0go.d.ts +0 -37
  211. package/dist/remark-heading-CXvCY0go.d.ts.map +0 -1
  212. package/dist/remark-image-CvUis4R1.d.ts +0 -65
  213. package/dist/remark-image-CvUis4R1.d.ts.map +0 -1
  214. package/dist/remark-mdx-files-DOYafA4x.d.ts +0 -42
  215. package/dist/remark-mdx-files-DOYafA4x.d.ts.map +0 -1
  216. package/dist/remark-mdx-mermaid-BdSUUiCG.d.ts +0 -17
  217. package/dist/remark-mdx-mermaid-BdSUUiCG.d.ts.map +0 -1
  218. package/dist/remark-npm-BIvIEKT2.d.ts +0 -36
  219. package/dist/remark-npm-BIvIEKT2.d.ts.map +0 -1
  220. package/dist/remark-steps-CHJN-rtm.d.ts +0 -28
  221. package/dist/remark-steps-CHJN-rtm.d.ts.map +0 -1
  222. package/dist/remark-structure-RZD2gGKp.d.ts +0 -77
  223. package/dist/remark-structure-RZD2gGKp.d.ts.map +0 -1
  224. package/dist/remove-undefined-Cfs4o_mM.js.map +0 -1
  225. package/dist/search/algolia.js.map +0 -1
  226. package/dist/search/client.d.ts.map +0 -1
  227. package/dist/search/client.js.map +0 -1
  228. package/dist/search/index.d.ts.map +0 -1
  229. package/dist/search/orama-cloud.d.ts.map +0 -1
  230. package/dist/search/orama-cloud.js.map +0 -1
  231. package/dist/search/server.js.map +0 -1
  232. package/dist/search-D6ChCLhY.js +0 -44
  233. package/dist/search-D6ChCLhY.js.map +0 -1
  234. package/dist/server-CPR_fgkH.d.ts +0 -133
  235. package/dist/server-CPR_fgkH.d.ts.map +0 -1
  236. package/dist/shiki-4oMYwHED.js +0 -80
  237. package/dist/shiki-4oMYwHED.js.map +0 -1
  238. package/dist/shiki-CIBQys54.d.ts +0 -33
  239. package/dist/shiki-CIBQys54.d.ts.map +0 -1
  240. package/dist/source/client/index.d.ts.map +0 -1
  241. package/dist/source/client/index.js.map +0 -1
  242. package/dist/source/index.js.map +0 -1
  243. package/dist/source/plugins/lucide-icons.d.ts.map +0 -1
  244. package/dist/source/plugins/lucide-icons.js.map +0 -1
  245. package/dist/source/plugins/slugs.js.map +0 -1
  246. package/dist/source/schema.d.ts.map +0 -1
  247. package/dist/source/schema.js.map +0 -1
  248. package/dist/static-Dq8pA8Ay.js.map +0 -1
  249. package/dist/toc.d.ts.map +0 -1
  250. package/dist/toc.js.map +0 -1
  251. package/dist/util-CK2ykiif.d.ts.map +0 -1
  252. package/dist/util-s9piKHsk.js.map +0 -1
  253. package/dist/utils/use-effect-event.d.ts +0 -11
  254. package/dist/utils/use-effect-event.d.ts.map +0 -1
  255. package/dist/utils/use-effect-event.js +0 -19
  256. package/dist/utils/use-effect-event.js.map +0 -1
  257. package/dist/utils/use-media-query.d.ts.map +0 -1
  258. package/dist/utils/use-media-query.js.map +0 -1
  259. package/dist/utils/use-on-change.d.ts.map +0 -1
  260. package/dist/utils/use-on-change.js.map +0 -1
  261. 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,2 +0,0 @@
1
- import remarkGfm$1, { Options as RemarkGfmOptions } from "remark-gfm";
2
- export { remarkGfm$1 as n, RemarkGfmOptions as t };
@@ -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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"}
@@ -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"}