fumadocs-core 16.4.0 → 16.4.2

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 (278) hide show
  1. package/dist/advanced-BRT5Ij43.js +80 -0
  2. package/dist/advanced-BRT5Ij43.js.map +1 -0
  3. package/dist/algolia-CBBN8R6-.d.ts +68 -0
  4. package/dist/algolia-CBBN8R6-.d.ts.map +1 -0
  5. package/dist/algolia-CQPXCnjV.js +49 -0
  6. package/dist/algolia-CQPXCnjV.js.map +1 -0
  7. package/dist/breadcrumb.d.ts +29 -27
  8. package/dist/breadcrumb.d.ts.map +1 -0
  9. package/dist/breadcrumb.js +55 -72
  10. package/dist/breadcrumb.js.map +1 -0
  11. package/dist/chunk-B-ezknvj.js +42 -0
  12. package/dist/codeblock-utils-lld8UiQo.d.ts +37 -0
  13. package/dist/codeblock-utils-lld8UiQo.d.ts.map +1 -0
  14. package/dist/content/github.d.ts +43 -32
  15. package/dist/content/github.d.ts.map +1 -0
  16. package/dist/content/github.js +29 -43
  17. package/dist/content/github.js.map +1 -0
  18. package/dist/content/index.d.ts +20 -13
  19. package/dist/content/index.d.ts.map +1 -0
  20. package/dist/content/index.js +17 -23
  21. package/dist/content/index.js.map +1 -0
  22. package/dist/content/mdx/preset-bundler.d.ts +22 -24
  23. package/dist/content/mdx/preset-bundler.d.ts.map +1 -0
  24. package/dist/content/mdx/preset-bundler.js +38 -69
  25. package/dist/content/mdx/preset-bundler.js.map +1 -0
  26. package/dist/content/mdx/preset-runtime.d.ts +22 -24
  27. package/dist/content/mdx/preset-runtime.d.ts.map +1 -0
  28. package/dist/content/mdx/preset-runtime.js +36 -68
  29. package/dist/content/mdx/preset-runtime.js.map +1 -0
  30. package/dist/content/toc.d.ts +7 -6
  31. package/dist/content/toc.d.ts.map +1 -0
  32. package/dist/content/toc.js +15 -19
  33. package/dist/content/toc.js.map +1 -0
  34. package/dist/definitions-DuxDer_c.d.ts +62 -0
  35. package/dist/definitions-DuxDer_c.d.ts.map +1 -0
  36. package/dist/dynamic-link.d.ts +7 -5
  37. package/dist/dynamic-link.d.ts.map +1 -0
  38. package/dist/dynamic-link.js +29 -27
  39. package/dist/dynamic-link.js.map +1 -0
  40. package/dist/fetch-B5e9CFfN.js +20 -0
  41. package/dist/fetch-B5e9CFfN.js.map +1 -0
  42. package/dist/framework/index.d.ts +38 -29
  43. package/dist/framework/index.d.ts.map +1 -0
  44. package/dist/framework/index.js +68 -17
  45. package/dist/framework/index.js.map +1 -0
  46. package/dist/framework/next.d.ts +15 -10
  47. package/dist/framework/next.d.ts.map +1 -0
  48. package/dist/framework/next.js +18 -26
  49. package/dist/framework/next.js.map +1 -0
  50. package/dist/framework/react-router.d.ts +15 -10
  51. package/dist/framework/react-router.d.ts.map +1 -0
  52. package/dist/framework/react-router.js +42 -55
  53. package/dist/framework/react-router.js.map +1 -0
  54. package/dist/framework/tanstack.d.ts +15 -10
  55. package/dist/framework/tanstack.d.ts.map +1 -0
  56. package/dist/framework/tanstack.js +54 -69
  57. package/dist/framework/tanstack.js.map +1 -0
  58. package/dist/framework/waku.d.ts +15 -10
  59. package/dist/framework/waku.d.ts.map +1 -0
  60. package/dist/framework/waku.js +47 -58
  61. package/dist/framework/waku.js.map +1 -0
  62. package/dist/highlight/client.d.ts +6 -7
  63. package/dist/highlight/client.d.ts.map +1 -0
  64. package/dist/highlight/client.js +22 -14
  65. package/dist/highlight/client.js.map +1 -0
  66. package/dist/highlight/index.d.ts +2 -30
  67. package/dist/highlight/index.js +3 -13
  68. package/dist/i18n/index.d.ts +2 -39
  69. package/dist/i18n/index.js +6 -7
  70. package/dist/i18n/index.js.map +1 -0
  71. package/dist/i18n/middleware.d.ts +36 -28
  72. package/dist/i18n/middleware.d.ts.map +1 -0
  73. package/dist/i18n/middleware.js +55 -73
  74. package/dist/i18n/middleware.js.map +1 -0
  75. package/dist/icon-Dt7IObrc.js +19 -0
  76. package/dist/icon-Dt7IObrc.js.map +1 -0
  77. package/dist/index-2U6Tl4--.d.ts +379 -0
  78. package/dist/index-2U6Tl4--.d.ts.map +1 -0
  79. package/dist/index-Bw-DCOra.d.ts +41 -0
  80. package/dist/index-Bw-DCOra.d.ts.map +1 -0
  81. package/dist/link.d.ts +17 -15
  82. package/dist/link.d.ts.map +1 -0
  83. package/dist/link.js +29 -9
  84. package/dist/link.js.map +1 -0
  85. package/dist/mdast-utils-mc9-X-PK.js +40 -0
  86. package/dist/mdast-utils-mc9-X-PK.js.map +1 -0
  87. package/dist/mdx-plugins/codeblock-utils.d.ts +2 -29
  88. package/dist/mdx-plugins/codeblock-utils.js +71 -9
  89. package/dist/mdx-plugins/codeblock-utils.js.map +1 -0
  90. package/dist/mdx-plugins/index.d.ts +15 -20
  91. package/dist/mdx-plugins/index.js +18 -73
  92. package/dist/mdx-plugins/rehype-code.d.ts +2 -55
  93. package/dist/mdx-plugins/rehype-code.js +5 -15
  94. package/dist/mdx-plugins/rehype-toc.d.ts +2 -14
  95. package/dist/mdx-plugins/rehype-toc.js +3 -7
  96. package/dist/mdx-plugins/remark-admonition.d.ts +2 -20
  97. package/dist/mdx-plugins/remark-admonition.js +74 -8
  98. package/dist/mdx-plugins/remark-admonition.js.map +1 -0
  99. package/dist/mdx-plugins/remark-code-tab.d.ts +2 -30
  100. package/dist/mdx-plugins/remark-code-tab.js +183 -7
  101. package/dist/mdx-plugins/remark-code-tab.js.map +1 -0
  102. package/dist/mdx-plugins/remark-directive-admonition.d.ts +2 -27
  103. package/dist/mdx-plugins/remark-directive-admonition.js +60 -7
  104. package/dist/mdx-plugins/remark-directive-admonition.js.map +1 -0
  105. package/dist/mdx-plugins/remark-gfm.d.ts +2 -1
  106. package/dist/mdx-plugins/remark-gfm.js +3 -7
  107. package/dist/mdx-plugins/remark-heading.d.ts +2 -31
  108. package/dist/mdx-plugins/remark-heading.js +45 -8
  109. package/dist/mdx-plugins/remark-heading.js.map +1 -0
  110. package/dist/mdx-plugins/remark-image.d.ts +2 -57
  111. package/dist/mdx-plugins/remark-image.js +192 -7
  112. package/dist/mdx-plugins/remark-image.js.map +1 -0
  113. package/dist/mdx-plugins/remark-mdx-files.d.ts +2 -40
  114. package/dist/mdx-plugins/remark-mdx-files.js +187 -7
  115. package/dist/mdx-plugins/remark-mdx-files.js.map +1 -0
  116. package/dist/mdx-plugins/remark-mdx-mermaid.d.ts +2 -15
  117. package/dist/mdx-plugins/remark-mdx-mermaid.js +31 -7
  118. package/dist/mdx-plugins/remark-mdx-mermaid.js.map +1 -0
  119. package/dist/mdx-plugins/remark-npm.d.ts +2 -31
  120. package/dist/mdx-plugins/remark-npm.js +68 -8
  121. package/dist/mdx-plugins/remark-npm.js.map +1 -0
  122. package/dist/mdx-plugins/remark-steps.d.ts +2 -23
  123. package/dist/mdx-plugins/remark-steps.js +77 -7
  124. package/dist/mdx-plugins/remark-steps.js.map +1 -0
  125. package/dist/mdx-plugins/remark-structure.d.ts +2 -71
  126. package/dist/mdx-plugins/remark-structure.js +105 -11
  127. package/dist/mdx-plugins/remark-structure.js.map +1 -0
  128. package/dist/mixedbread-DlByNYSd.js +88 -0
  129. package/dist/mixedbread-DlByNYSd.js.map +1 -0
  130. package/dist/negotiation/index.d.ts +6 -4
  131. package/dist/negotiation/index.d.ts.map +1 -0
  132. package/dist/negotiation/index.js +41 -11
  133. package/dist/negotiation/index.js.map +1 -0
  134. package/dist/normalize-url-DP9-1I-S.js +16 -0
  135. package/dist/normalize-url-DP9-1I-S.js.map +1 -0
  136. package/dist/orama-cloud-DH3g37zc.js +84 -0
  137. package/dist/orama-cloud-DH3g37zc.js.map +1 -0
  138. package/dist/page-tree/index.d.ts +23 -11
  139. package/dist/page-tree/index.d.ts.map +1 -0
  140. package/dist/page-tree/index.js +3 -17
  141. package/dist/path-DHIjrDBP.js +60 -0
  142. package/dist/path-DHIjrDBP.js.map +1 -0
  143. package/dist/rehype-code-CdiZ1Y6P.js +241 -0
  144. package/dist/rehype-code-CdiZ1Y6P.js.map +1 -0
  145. package/dist/rehype-code-vVWG4-ej.d.ts +58 -0
  146. package/dist/rehype-code-vVWG4-ej.d.ts.map +1 -0
  147. package/dist/rehype-toc-DJvSyE0o.d.ts +18 -0
  148. package/dist/rehype-toc-DJvSyE0o.d.ts.map +1 -0
  149. package/dist/rehype-toc-DVwJcwvA.js +143 -0
  150. package/dist/rehype-toc-DVwJcwvA.js.map +1 -0
  151. package/dist/remark-admonition-DOwBWzsH.d.ts +22 -0
  152. package/dist/remark-admonition-DOwBWzsH.d.ts.map +1 -0
  153. package/dist/remark-code-tab-CXsYlims.d.ts +32 -0
  154. package/dist/remark-code-tab-CXsYlims.d.ts.map +1 -0
  155. package/dist/remark-directive-admonition-BCm_yiU9.d.ts +36 -0
  156. package/dist/remark-directive-admonition-BCm_yiU9.d.ts.map +1 -0
  157. package/dist/remark-gfm-CeWpMwyk.d.ts +2 -0
  158. package/dist/remark-heading-CXvCY0go.d.ts +37 -0
  159. package/dist/remark-heading-CXvCY0go.d.ts.map +1 -0
  160. package/dist/remark-image-CvUis4R1.d.ts +65 -0
  161. package/dist/remark-image-CvUis4R1.d.ts.map +1 -0
  162. package/dist/remark-mdx-files-B31xFFG4.d.ts +56 -0
  163. package/dist/remark-mdx-files-B31xFFG4.d.ts.map +1 -0
  164. package/dist/remark-mdx-mermaid-BdSUUiCG.d.ts +17 -0
  165. package/dist/remark-mdx-mermaid-BdSUUiCG.d.ts.map +1 -0
  166. package/dist/remark-npm-BIvIEKT2.d.ts +36 -0
  167. package/dist/remark-npm-BIvIEKT2.d.ts.map +1 -0
  168. package/dist/remark-steps-CHJN-rtm.d.ts +28 -0
  169. package/dist/remark-steps-CHJN-rtm.d.ts.map +1 -0
  170. package/dist/remark-structure-RZD2gGKp.d.ts +77 -0
  171. package/dist/remark-structure-RZD2gGKp.d.ts.map +1 -0
  172. package/dist/remove-undefined-Cfs4o_mM.js +19 -0
  173. package/dist/remove-undefined-Cfs4o_mM.js.map +1 -0
  174. package/dist/search/algolia.d.ts +3 -69
  175. package/dist/search/algolia.js +69 -63
  176. package/dist/search/algolia.js.map +1 -0
  177. package/dist/search/client.d.ts +120 -114
  178. package/dist/search/client.d.ts.map +1 -0
  179. package/dist/search/client.js +92 -91
  180. package/dist/search/client.js.map +1 -0
  181. package/dist/search/index.d.ts +20 -18
  182. package/dist/search/index.d.ts.map +1 -0
  183. package/dist/search/index.js +3 -7
  184. package/dist/search/orama-cloud.d.ts +70 -68
  185. package/dist/search/orama-cloud.d.ts.map +1 -0
  186. package/dist/search/orama-cloud.js +46 -54
  187. package/dist/search/orama-cloud.js.map +1 -0
  188. package/dist/search/server.d.ts +6 -136
  189. package/dist/search/server.js +292 -369
  190. package/dist/search/server.js.map +1 -0
  191. package/dist/search-D6ChCLhY.js +44 -0
  192. package/dist/search-D6ChCLhY.js.map +1 -0
  193. package/dist/server-CPR_fgkH.d.ts +133 -0
  194. package/dist/server-CPR_fgkH.d.ts.map +1 -0
  195. package/dist/shiki-4oMYwHED.js +80 -0
  196. package/dist/shiki-4oMYwHED.js.map +1 -0
  197. package/dist/shiki-CIBQys54.d.ts +33 -0
  198. package/dist/shiki-CIBQys54.d.ts.map +1 -0
  199. package/dist/source/client/index.d.ts +7 -5
  200. package/dist/source/client/index.d.ts.map +1 -0
  201. package/dist/source/client/index.js +24 -35
  202. package/dist/source/client/index.js.map +1 -0
  203. package/dist/source/index.d.ts +3 -42
  204. package/dist/source/index.js +599 -752
  205. package/dist/source/index.js.map +1 -0
  206. package/dist/source/plugins/lucide-icons.d.ts +7 -7
  207. package/dist/source/plugins/lucide-icons.d.ts.map +1 -0
  208. package/dist/source/plugins/lucide-icons.js +21 -20
  209. package/dist/source/plugins/lucide-icons.js.map +1 -0
  210. package/dist/source/plugins/slugs.d.ts +3 -0
  211. package/dist/source/plugins/slugs.js +65 -0
  212. package/dist/source/plugins/slugs.js.map +1 -0
  213. package/dist/source/schema.d.ts +17 -14
  214. package/dist/source/schema.d.ts.map +1 -0
  215. package/dist/source/schema.js +26 -22
  216. package/dist/source/schema.js.map +1 -0
  217. package/dist/static-Dq8pA8Ay.js +51 -0
  218. package/dist/static-Dq8pA8Ay.js.map +1 -0
  219. package/dist/toc.d.ts +38 -25
  220. package/dist/toc.d.ts.map +1 -0
  221. package/dist/toc.js +123 -136
  222. package/dist/toc.js.map +1 -0
  223. package/dist/util-CK2ykiif.d.ts +8 -0
  224. package/dist/util-CK2ykiif.d.ts.map +1 -0
  225. package/dist/util-s9piKHsk.js +10 -0
  226. package/dist/util-s9piKHsk.js.map +1 -0
  227. package/dist/utils/use-effect-event.d.ts +3 -1
  228. package/dist/utils/use-effect-event.d.ts.map +1 -0
  229. package/dist/utils/use-effect-event.js +16 -13
  230. package/dist/utils/use-effect-event.js.map +1 -0
  231. package/dist/utils/use-media-query.d.ts +3 -1
  232. package/dist/utils/use-media-query.d.ts.map +1 -0
  233. package/dist/utils/use-media-query.js +20 -20
  234. package/dist/utils/use-media-query.js.map +1 -0
  235. package/dist/utils/use-on-change.d.ts +3 -1
  236. package/dist/utils/use-on-change.d.ts.map +1 -0
  237. package/dist/utils/use-on-change.js +23 -7
  238. package/dist/utils/use-on-change.js.map +1 -0
  239. package/dist/utils-DUvi2WkD.js +134 -0
  240. package/dist/utils-DUvi2WkD.js.map +1 -0
  241. package/package.json +60 -58
  242. package/dist/algolia-IZEDLPHE.js +0 -58
  243. package/dist/chunk-5PMI7QDD.js +0 -220
  244. package/dist/chunk-ADBHPKXG.js +0 -78
  245. package/dist/chunk-APKPSBSB.js +0 -74
  246. package/dist/chunk-CH7YHH7V.js +0 -222
  247. package/dist/chunk-EFVXL2PP.js +0 -144
  248. package/dist/chunk-EMWGTXSW.js +0 -19
  249. package/dist/chunk-FAEPKD7U.js +0 -20
  250. package/dist/chunk-FUUVPEA5.js +0 -29
  251. package/dist/chunk-GINBKBVQ.js +0 -12
  252. package/dist/chunk-GLRQBLGN.js +0 -59
  253. package/dist/chunk-JUF4WZ6G.js +0 -117
  254. package/dist/chunk-K4WNLOVQ.js +0 -75
  255. package/dist/chunk-L4JKQWCM.js +0 -131
  256. package/dist/chunk-MA6O2UUE.js +0 -50
  257. package/dist/chunk-ONG4RVCR.js +0 -8
  258. package/dist/chunk-OTD7MV33.js +0 -53
  259. package/dist/chunk-PFNP6PEB.js +0 -11
  260. package/dist/chunk-SH7BNTG7.js +0 -38
  261. package/dist/chunk-TWIDBWFG.js +0 -84
  262. package/dist/chunk-U67V476Y.js +0 -35
  263. package/dist/chunk-VLSDGCJE.js +0 -47
  264. package/dist/chunk-W6WTLKRA.js +0 -73
  265. package/dist/chunk-X2HFD5QJ.js +0 -275
  266. package/dist/chunk-XJ6ZQNEX.js +0 -91
  267. package/dist/chunk-XN2LKXFZ.js +0 -101
  268. package/dist/chunk-XOFXGHS4.js +0 -93
  269. package/dist/chunk-XZSI7AHE.js +0 -67
  270. package/dist/chunk-YVVDKJ2H.js +0 -34
  271. package/dist/chunk-ZMWYLUDP.js +0 -21
  272. package/dist/definitions-pJ7PybYY.d.ts +0 -60
  273. package/dist/fetch-IBTWQCJR.js +0 -22
  274. package/dist/loader-_E2HOdV0.d.ts +0 -333
  275. package/dist/mixedbread-A3WLENES.js +0 -117
  276. package/dist/orama-cloud-UZAPMPFV.js +0 -93
  277. package/dist/static-A2YJ5TXV.js +0 -62
  278. package/dist/util-bZU2QeJ2.d.ts +0 -6
@@ -1,99 +1,100 @@
1
- import {
2
- useOnChange
3
- } from "../chunk-EMWGTXSW.js";
4
- import "../chunk-U67V476Y.js";
1
+ import { useOnChange } from "../utils/use-on-change.js";
2
+ import { useEffect, useRef, useState } from "react";
5
3
 
6
- // src/search/client.ts
7
- import { useRef, useState as useState2 } from "react";
8
-
9
- // src/utils/use-debounce.ts
10
- import { useEffect, useState } from "react";
4
+ //#region src/utils/use-debounce.ts
11
5
  function useDebounce(value, delayMs = 1e3) {
12
- const [debouncedValue, setDebouncedValue] = useState(value);
13
- useEffect(() => {
14
- if (delayMs === 0) return;
15
- const handler = window.setTimeout(() => {
16
- setDebouncedValue(value);
17
- }, delayMs);
18
- return () => clearTimeout(handler);
19
- }, [delayMs, value]);
20
- if (delayMs === 0) return value;
21
- return debouncedValue;
6
+ const [debouncedValue, setDebouncedValue] = useState(value);
7
+ useEffect(() => {
8
+ if (delayMs === 0) return;
9
+ const handler = window.setTimeout(() => {
10
+ setDebouncedValue(value);
11
+ }, delayMs);
12
+ return () => clearTimeout(handler);
13
+ }, [delayMs, value]);
14
+ if (delayMs === 0) return value;
15
+ return debouncedValue;
22
16
  }
23
17
 
24
- // src/search/client.ts
18
+ //#endregion
19
+ //#region src/search/client.ts
25
20
  function isDeepEqual(a, b) {
26
- if (a === b) return true;
27
- if (Array.isArray(a) && Array.isArray(b)) {
28
- return b.length === a.length && a.every((v, i) => isDeepEqual(v, b[i]));
29
- }
30
- if (typeof a === "object" && a && typeof b === "object" && b) {
31
- const aKeys = Object.keys(a);
32
- const bKeys = Object.keys(b);
33
- return aKeys.length === bKeys.length && aKeys.every(
34
- (key) => Object.hasOwn(b, key) && isDeepEqual(a[key], b[key])
35
- );
36
- }
37
- return false;
21
+ if (a === b) return true;
22
+ if (Array.isArray(a) && Array.isArray(b)) return b.length === a.length && a.every((v, i) => isDeepEqual(v, b[i]));
23
+ if (typeof a === "object" && a && typeof b === "object" && b) {
24
+ const aKeys = Object.keys(a);
25
+ const bKeys = Object.keys(b);
26
+ return aKeys.length === bKeys.length && aKeys.every((key) => Object.hasOwn(b, key) && isDeepEqual(a[key], b[key]));
27
+ }
28
+ return false;
38
29
  }
30
+ /**
31
+ * Provide a hook to query different official search clients.
32
+ *
33
+ * Note: it will re-query when its parameters changed, make sure to use `useMemo()` on `clientOptions` or define `deps` array.
34
+ */
39
35
  function useDocsSearch(clientOptions, deps) {
40
- const { delayMs = 100, allowEmpty = false, ...client } = clientOptions;
41
- const [search, setSearch] = useState2("");
42
- const [results, setResults] = useState2("empty");
43
- const [error, setError] = useState2();
44
- const [isLoading, setIsLoading] = useState2(false);
45
- const debouncedValue = useDebounce(search, delayMs);
46
- const onStart = useRef(void 0);
47
- useOnChange(
48
- [deps ?? clientOptions, debouncedValue],
49
- () => {
50
- if (onStart.current) {
51
- onStart.current();
52
- onStart.current = void 0;
53
- }
54
- setIsLoading(true);
55
- let interrupt = false;
56
- onStart.current = () => {
57
- interrupt = true;
58
- };
59
- async function run() {
60
- if (debouncedValue.length === 0 && !allowEmpty) return "empty";
61
- if (client.type === "fetch") {
62
- const { fetchDocs } = await import("../fetch-IBTWQCJR.js");
63
- return fetchDocs(debouncedValue, client);
64
- }
65
- if (client.type === "algolia") {
66
- const { searchDocs } = await import("../algolia-IZEDLPHE.js");
67
- return searchDocs(debouncedValue, client);
68
- }
69
- if (client.type === "orama-cloud") {
70
- const { searchDocs } = await import("../orama-cloud-UZAPMPFV.js");
71
- return searchDocs(debouncedValue, client);
72
- }
73
- if (client.type === "static") {
74
- const { search: search2 } = await import("../static-A2YJ5TXV.js");
75
- return search2(debouncedValue, client);
76
- }
77
- if (client.type === "mixedbread") {
78
- const { search: search2 } = await import("../mixedbread-A3WLENES.js");
79
- return search2(debouncedValue, client);
80
- }
81
- throw new Error("unknown search client");
82
- }
83
- void run().then((res) => {
84
- if (interrupt) return;
85
- setError(void 0);
86
- setResults(res);
87
- }).catch((err) => {
88
- setError(err);
89
- }).finally(() => {
90
- setIsLoading(false);
91
- });
92
- },
93
- deps ? void 0 : (a, b) => !isDeepEqual(a, b)
94
- );
95
- return { search, setSearch, query: { isLoading, data: results, error } };
36
+ const { delayMs = 100, allowEmpty = false, ...client } = clientOptions;
37
+ const [search, setSearch] = useState("");
38
+ const [results, setResults] = useState("empty");
39
+ const [error, setError] = useState();
40
+ const [isLoading, setIsLoading] = useState(false);
41
+ const debouncedValue = useDebounce(search, delayMs);
42
+ const onStart = useRef(void 0);
43
+ useOnChange([deps ?? clientOptions, debouncedValue], () => {
44
+ if (onStart.current) {
45
+ onStart.current();
46
+ onStart.current = void 0;
47
+ }
48
+ setIsLoading(true);
49
+ let interrupt = false;
50
+ onStart.current = () => {
51
+ interrupt = true;
52
+ };
53
+ async function run() {
54
+ if (debouncedValue.length === 0 && !allowEmpty) return "empty";
55
+ if (client.type === "fetch") {
56
+ const { fetchDocs } = await import("../fetch-B5e9CFfN.js");
57
+ return fetchDocs(debouncedValue, client);
58
+ }
59
+ if (client.type === "algolia") {
60
+ const { searchDocs } = await import("../algolia-CQPXCnjV.js");
61
+ return searchDocs(debouncedValue, client);
62
+ }
63
+ if (client.type === "orama-cloud") {
64
+ const { searchDocs } = await import("../orama-cloud-DH3g37zc.js");
65
+ return searchDocs(debouncedValue, client);
66
+ }
67
+ if (client.type === "static") {
68
+ const { search: search$1 } = await import("../static-Dq8pA8Ay.js");
69
+ return search$1(debouncedValue, client);
70
+ }
71
+ if (client.type === "mixedbread") {
72
+ const { search: search$1 } = await import("../mixedbread-DlByNYSd.js");
73
+ return search$1(debouncedValue, client);
74
+ }
75
+ throw new Error("unknown search client");
76
+ }
77
+ run().then((res) => {
78
+ if (interrupt) return;
79
+ setError(void 0);
80
+ setResults(res);
81
+ }).catch((err) => {
82
+ setError(err);
83
+ }).finally(() => {
84
+ setIsLoading(false);
85
+ });
86
+ }, deps ? void 0 : (a, b) => !isDeepEqual(a, b));
87
+ return {
88
+ search,
89
+ setSearch,
90
+ query: {
91
+ isLoading,
92
+ data: results,
93
+ error
94
+ }
95
+ };
96
96
  }
97
- export {
98
- useDocsSearch
99
- };
97
+
98
+ //#endregion
99
+ export { useDocsSearch };
100
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
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,26 +1,28 @@
1
- import { ReactNode } from 'react';
1
+ import { ReactNode } from "react";
2
2
 
3
+ //#region src/search/index.d.ts
3
4
  interface SortedResult<Content = string> {
4
- id: string;
5
- url: string;
6
- type: 'page' | 'heading' | 'text';
7
- content: Content;
8
- /**
9
- * breadcrumbs to be displayed on UI
10
- */
11
- breadcrumbs?: Content[];
12
- contentWithHighlights?: HighlightedText<Content>[];
5
+ id: string;
6
+ url: string;
7
+ type: 'page' | 'heading' | 'text';
8
+ content: Content;
9
+ /**
10
+ * breadcrumbs to be displayed on UI
11
+ */
12
+ breadcrumbs?: Content[];
13
+ contentWithHighlights?: HighlightedText<Content>[];
13
14
  }
14
15
  type ReactSortedResult = SortedResult<ReactNode>;
15
16
  interface HighlightedText<Content = string> {
16
- type: 'text';
17
- content: Content;
18
- styles?: {
19
- highlight?: boolean;
20
- };
17
+ type: 'text';
18
+ content: Content;
19
+ styles?: {
20
+ highlight?: boolean;
21
+ };
21
22
  }
22
23
  declare function createContentHighlighter(query: string | RegExp): {
23
- highlight(content: string): HighlightedText[];
24
+ highlight(content: string): HighlightedText[];
24
25
  };
25
-
26
- export { type HighlightedText, type ReactSortedResult, type SortedResult, createContentHighlighter };
26
+ //#endregion
27
+ export { HighlightedText, ReactSortedResult, SortedResult, createContentHighlighter };
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
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,7 +1,3 @@
1
- import {
2
- createContentHighlighter
3
- } from "../chunk-OTD7MV33.js";
4
- import "../chunk-U67V476Y.js";
5
- export {
6
- createContentHighlighter
7
- };
1
+ import { t as createContentHighlighter } from "../search-D6ChCLhY.js";
2
+
3
+ export { createContentHighlighter };
@@ -1,79 +1,81 @@
1
- import { StructuredData } from '../mdx-plugins/remark-structure.js';
2
- import '../mdx-plugins/remark-heading.js';
3
- import '../mdx-plugins/remark-code-tab.js';
4
- import { OramaCloud } from '@orama/core';
5
- import 'mdast';
6
- import 'unified';
7
- import 'mdast-util-mdx-jsx';
1
+ import "../remark-gfm-CeWpMwyk.js";
2
+ import "../rehype-code-vVWG4-ej.js";
3
+ import { n as StructuredData } from "../remark-structure-RZD2gGKp.js";
4
+ import "../remark-heading-CXvCY0go.js";
5
+ import "../remark-code-tab-CXsYlims.js";
6
+ import "../mdx-plugins/index.js";
7
+ import { OramaCloud } from "@orama/core";
8
8
 
9
+ //#region src/search/orama-cloud.d.ts
9
10
  interface SyncOptions {
10
- /**
11
- * Index name to sync
12
- */
13
- index: string;
14
- documents: OramaDocument[];
15
- /**
16
- * Deploy changes
17
- *
18
- * @defaultValue true
19
- */
20
- autoDeploy?: boolean;
11
+ /**
12
+ * Index name to sync
13
+ */
14
+ index: string;
15
+ documents: OramaDocument[];
16
+ /**
17
+ * Deploy changes
18
+ *
19
+ * @defaultValue true
20
+ */
21
+ autoDeploy?: boolean;
21
22
  }
22
23
  type I18nSyncOptions = Omit<SyncOptions, 'index' | 'documents'> & {
23
- /**
24
- * Indexes to sync.
25
- *
26
- * Pairs of `locale`-`index`.
27
- **/
28
- indexes: Record<string, string>;
29
- documents: {
30
- locale: string;
31
- items: OramaDocument[];
32
- }[];
24
+ /**
25
+ * Indexes to sync.
26
+ *
27
+ * Pairs of `locale`-`index`.
28
+ **/
29
+ indexes: Record<string, string>;
30
+ documents: {
31
+ locale: string;
32
+ items: OramaDocument[];
33
+ }[];
33
34
  };
34
35
  interface OramaDocument {
35
- /**
36
- * The ID of document, must be unique
37
- */
38
- id: string;
39
- title: string;
40
- description?: string;
41
- /**
42
- * URL to the page
43
- */
44
- url: string;
45
- structured: StructuredData;
46
- /**
47
- * Tag to filter results
48
- */
49
- tag?: string;
50
- /**
51
- * Data to be added to each section index
52
- */
53
- extra_data?: object;
54
- breadcrumbs?: string[];
36
+ /**
37
+ * The ID of document, must be unique
38
+ */
39
+ id: string;
40
+ title: string;
41
+ description?: string;
42
+ /**
43
+ * URL to the page
44
+ */
45
+ url: string;
46
+ structured: StructuredData;
47
+ /**
48
+ * Tag to filter results
49
+ */
50
+ tag?: string;
51
+ /**
52
+ * Data to be added to each section index
53
+ */
54
+ extra_data?: object;
55
+ breadcrumbs?: string[];
55
56
  }
56
57
  interface OramaIndex {
57
- id: string;
58
- title: string;
59
- url: string;
60
- tag?: string;
61
- /**
62
- * The id of page, used for `group by`
63
- */
64
- page_id: string;
65
- /**
66
- * Heading content
67
- */
68
- section?: string;
69
- breadcrumbs?: string[];
70
- /**
71
- * Heading (anchor) id
72
- */
73
- section_id?: string;
74
- content: string;
58
+ id: string;
59
+ title: string;
60
+ url: string;
61
+ tag?: string;
62
+ /**
63
+ * The id of page, used for `group by`
64
+ */
65
+ page_id: string;
66
+ /**
67
+ * Heading content
68
+ */
69
+ section?: string;
70
+ breadcrumbs?: string[];
71
+ /**
72
+ * Heading (anchor) id
73
+ */
74
+ section_id?: string;
75
+ content: string;
75
76
  }
76
77
  declare function sync(orama: OramaCloud, options: SyncOptions): Promise<void>;
77
78
  declare function syncI18n(orama: OramaCloud, options: I18nSyncOptions): Promise<void>;
78
-
79
- export { type I18nSyncOptions, type OramaDocument, type OramaIndex, type SyncOptions, sync, syncI18n };
79
+ //#endregion
80
+ export { I18nSyncOptions, OramaDocument, OramaIndex, SyncOptions, sync, syncI18n };
81
+ //# sourceMappingURL=orama-cloud.d.ts.map
@@ -0,0 +1 @@
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,60 +1,52 @@
1
- import "../chunk-U67V476Y.js";
2
-
3
- // src/search/orama-cloud.ts
1
+ //#region src/search/orama-cloud.ts
4
2
  async function sync(orama, options) {
5
- const { autoDeploy = true } = options;
6
- const index = orama.index.set(options.index);
7
- await index.transaction.open();
8
- await index.transaction.insertDocuments(
9
- options.documents.flatMap(toIndex)
10
- );
11
- if (autoDeploy) await index.transaction.commit();
3
+ const { autoDeploy = true } = options;
4
+ const index = orama.index.set(options.index);
5
+ await index.transaction.open();
6
+ await index.transaction.insertDocuments(options.documents.flatMap(toIndex));
7
+ if (autoDeploy) await index.transaction.commit();
12
8
  }
13
9
  async function syncI18n(orama, options) {
14
- const { autoDeploy = true, indexes } = options;
15
- const tasks = options.documents.map(async (document) => {
16
- const index = orama.index.set(indexes[document.locale]);
17
- await index.transaction.open();
18
- await index.transaction.insertDocuments(
19
- document.items.flatMap(toIndex)
20
- );
21
- if (autoDeploy) await index.transaction.commit();
22
- });
23
- await Promise.all(tasks);
10
+ const { autoDeploy = true, indexes } = options;
11
+ const tasks = options.documents.map(async (document) => {
12
+ const index = orama.index.set(indexes[document.locale]);
13
+ await index.transaction.open();
14
+ await index.transaction.insertDocuments(document.items.flatMap(toIndex));
15
+ if (autoDeploy) await index.transaction.commit();
16
+ });
17
+ await Promise.all(tasks);
24
18
  }
25
19
  function toIndex(page) {
26
- let id = 0;
27
- const indexes = [];
28
- const scannedHeadings = /* @__PURE__ */ new Set();
29
- function createIndex(section, sectionId, content) {
30
- return {
31
- id: `${page.id}-${(id++).toString()}`,
32
- title: page.title,
33
- url: page.url,
34
- // TODO: explicit declare enums
35
- page_id: page.id,
36
- tag: page.tag,
37
- section,
38
- section_id: sectionId,
39
- content,
40
- breadcrumbs: page.breadcrumbs,
41
- ...page.extra_data
42
- };
43
- }
44
- if (page.description)
45
- indexes.push(createIndex(void 0, void 0, page.description));
46
- page.structured.contents.forEach((p) => {
47
- const heading = p.heading ? page.structured.headings.find((h) => p.heading === h.id) : null;
48
- const index = createIndex(heading?.content, heading?.id, p.content);
49
- if (heading && !scannedHeadings.has(heading.id)) {
50
- scannedHeadings.add(heading.id);
51
- indexes.push(createIndex(heading.content, heading.id, heading.content));
52
- }
53
- indexes.push(index);
54
- });
55
- return indexes;
20
+ let id = 0;
21
+ const indexes = [];
22
+ const scannedHeadings = /* @__PURE__ */ new Set();
23
+ function createIndex(section, sectionId, content) {
24
+ return {
25
+ id: `${page.id}-${(id++).toString()}`,
26
+ title: page.title,
27
+ url: page.url,
28
+ page_id: page.id,
29
+ tag: page.tag,
30
+ section,
31
+ section_id: sectionId,
32
+ content,
33
+ breadcrumbs: page.breadcrumbs,
34
+ ...page.extra_data
35
+ };
36
+ }
37
+ if (page.description) indexes.push(createIndex(void 0, void 0, page.description));
38
+ page.structured.contents.forEach((p) => {
39
+ const heading = p.heading ? page.structured.headings.find((h) => p.heading === h.id) : null;
40
+ const index = createIndex(heading?.content, heading?.id, p.content);
41
+ if (heading && !scannedHeadings.has(heading.id)) {
42
+ scannedHeadings.add(heading.id);
43
+ indexes.push(createIndex(heading.content, heading.id, heading.content));
44
+ }
45
+ indexes.push(index);
46
+ });
47
+ return indexes;
56
48
  }
57
- export {
58
- sync,
59
- syncI18n
60
- };
49
+
50
+ //#endregion
51
+ export { sync, syncI18n };
52
+ //# sourceMappingURL=orama-cloud.js.map
@@ -0,0 +1 @@
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"}