fumadocs-core 16.4.6 → 16.4.7

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 (72) hide show
  1. package/dist/advanced-tbtFDsHU.js.map +1 -1
  2. package/dist/{algolia-B9GvomyW.d.ts → algolia-BFVpYDZ_.d.ts} +1 -1
  3. package/dist/{algolia-B9GvomyW.d.ts.map → algolia-BFVpYDZ_.d.ts.map} +1 -1
  4. package/dist/algolia-Dbt0kj8j.js.map +1 -1
  5. package/dist/breadcrumb.js.map +1 -1
  6. package/dist/content/index.d.ts.map +1 -1
  7. package/dist/framework/index.d.ts +4 -4
  8. package/dist/framework/next.d.ts +2 -2
  9. package/dist/framework/react-router.d.ts +2 -2
  10. package/dist/framework/react-router.js.map +1 -1
  11. package/dist/framework/tanstack.d.ts +2 -2
  12. package/dist/framework/tanstack.js.map +1 -1
  13. package/dist/framework/waku.d.ts +2 -2
  14. package/dist/framework/waku.js.map +1 -1
  15. package/dist/highlight/client.js.map +1 -1
  16. package/dist/i18n/middleware.js.map +1 -1
  17. package/dist/index-BaMZ8PEK.d.ts +45 -0
  18. package/dist/index-BaMZ8PEK.d.ts.map +1 -0
  19. package/dist/index-CmGSoB4T.d.ts +18 -0
  20. package/dist/index-CmGSoB4T.d.ts.map +1 -0
  21. package/dist/{index-k5KwKJ_c.d.ts → index-aE27-b16.d.ts} +3 -2
  22. package/dist/index-aE27-b16.d.ts.map +1 -0
  23. package/dist/mdx-plugins/codeblock-utils.js.map +1 -1
  24. package/dist/mdx-plugins/remark-code-tab.js.map +1 -1
  25. package/dist/mdx-plugins/remark-directive-admonition.js.map +1 -1
  26. package/dist/mdx-plugins/remark-feedback-block.js.map +1 -1
  27. package/dist/mdx-plugins/remark-heading.js.map +1 -1
  28. package/dist/mdx-plugins/remark-image.js.map +1 -1
  29. package/dist/mdx-plugins/remark-mdx-files.js.map +1 -1
  30. package/dist/mdx-plugins/remark-npm.js.map +1 -1
  31. package/dist/mdx-plugins/remark-steps.js.map +1 -1
  32. package/dist/mdx-plugins/remark-structure.js.map +1 -1
  33. package/dist/{mixedbread-B0TvOHtt.js → mixedbread-CPGJEgwq.js} +2 -2
  34. package/dist/mixedbread-CPGJEgwq.js.map +1 -0
  35. package/dist/negotiation/index.js.map +1 -1
  36. package/dist/orama-cloud-legacy-NJTbB19B.js.map +1 -1
  37. package/dist/orama-cloud-yicpgD0c.js.map +1 -1
  38. package/dist/page-tree/index.d.ts +2 -44
  39. package/dist/rehype-code-Ct5Pb6BZ.js.map +1 -1
  40. package/dist/rehype-toc-CTG0x7La.js.map +1 -1
  41. package/dist/search/algolia.d.ts +1 -1
  42. package/dist/search/algolia.js.map +1 -1
  43. package/dist/search/client.d.ts +5 -3
  44. package/dist/search/client.d.ts.map +1 -1
  45. package/dist/search/client.js +1 -1
  46. package/dist/search/orama-cloud-legacy.js.map +1 -1
  47. package/dist/search/orama-cloud.js.map +1 -1
  48. package/dist/search/server.d.ts +4 -2
  49. package/dist/search/server.js.map +1 -1
  50. package/dist/search-DzqmOjzV.js.map +1 -1
  51. package/dist/{server-CjGgVKx_.d.ts → server-CLPpotS9.d.ts} +2 -2
  52. package/dist/{server-CjGgVKx_.d.ts.map → server-CLPpotS9.d.ts.map} +1 -1
  53. package/dist/shiki-B4NO99XD.js.map +1 -1
  54. package/dist/source/client/index.d.ts +4 -18
  55. package/dist/source/client/index.js +16 -9
  56. package/dist/source/client/index.js.map +1 -1
  57. package/dist/source/index.d.ts +3 -1
  58. package/dist/source/index.js +10 -7
  59. package/dist/source/index.js.map +1 -1
  60. package/dist/source/plugins/lucide-icons.d.ts +3 -1
  61. package/dist/source/plugins/lucide-icons.d.ts.map +1 -1
  62. package/dist/source/plugins/slugs.d.ts +3 -1
  63. package/dist/source/plugins/slugs.js.map +1 -1
  64. package/dist/static-C_WBOzek.js.map +1 -1
  65. package/dist/toc.js.map +1 -1
  66. package/dist/utils/use-effect-event.js.map +1 -1
  67. package/dist/utils-D10VxgVc.js.map +1 -1
  68. package/package.json +5 -5
  69. package/dist/index-k5KwKJ_c.d.ts.map +0 -1
  70. package/dist/mixedbread-B0TvOHtt.js.map +0 -1
  71. package/dist/page-tree/index.d.ts.map +0 -1
  72. package/dist/source/client/index.d.ts.map +0 -1
@@ -1 +1 @@
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
+ {"version":3,"file":"algolia.js","names":[],"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,MAAM,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,9 +1,11 @@
1
1
  import "../definitions-Ca2P2viV.js";
2
2
  import "../remark-structure-ChKxMXnK.js";
3
- import { t as BaseIndex } from "../algolia-B9GvomyW.js";
3
+ import "../index-BaMZ8PEK.js";
4
+ import { t as BaseIndex } from "../algolia-BFVpYDZ_.js";
4
5
  import { SortedResult } from "./index.js";
5
- import "../server-CjGgVKx_.js";
6
- import "../index-k5KwKJ_c.js";
6
+ import "../server-CLPpotS9.js";
7
+ import "../index-aE27-b16.js";
8
+ import "../index-CmGSoB4T.js";
7
9
  import { DependencyList } from "react";
8
10
  import { AnyOrama } from "@orama/orama";
9
11
  import { LiteClient, SearchResponse } from "algoliasearch/lite";
@@ -1 +1 @@
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/orama-cloud-legacy.ts","../../src/search/client/mixedbread.ts","../../src/search/client.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;UAEiB,YAAA;;;;;;;;;;;;;AAAjB;;;;;UCIiB,aAAA;;;;;;;mCAQkB,WAAW,QAAQ;;;;;;ADZtD;;;;;;UEEiB,cAAA;;UAEP;;;;;;+DAaH;aACM,eAAe;;AFlB5B;;;UGWiB,iBAAA;UACP;;;;;;;WAOC,QAAQ;;;;EHnBF,GAAA,CAAA,EAAA,MAAA;;;;ECIA,MAAA,CAAA,EAAA,MAAA;;;;UGOA,uBAAA;UACP;;;;;;;WAOC;;;;EJnBM,GAAA,CAAA,EAAA,MAAA;;;;ECIA,MAAA,CAAA,EAAA,MAAA;;;;UIAA,iBAAA;;;;;;;;UASP;;;;ELbO,GAAA,CAAA,EAAA,MAAA;;;;ECIA,MAAA,CAAA,EAAA,MAAA;;;;UKKP,aAAA;;;;;WAKC;INdM,KAAA,CAAA,EMeL,KNfiB;;;KMmBjB,MAAA;ELfK,IAAA,EAAA,OAAA;CAQkB,GKU3B,YLV2B,CAAA,GAAA,CAAA;EAAmB,IAAA,EAAA,QAAA;CAAR,GKatC,aLbsC,CAAA,GAAA,CAAA;EAAO,IAAA,EAAA,SAAA;IKgB7C;;IAGA;EJ7BS,IAAA,EAAA,oBAAc;CAErB,GI8BF,uBJ9BE,CAAA,GAAA,CAAA;EAckB,IAAA,EAAA,YAAA;CAAf,GImBL,iBJnBK,CAAA;;;;;;ACPI,iBGwDD,aAAA,CHxDkB,aAAA,EGyDjB,MHzDiB,GAAA;EACxB;;;;;;;ACDV;;;;ECPiB,UAAA,CAAA,EAAA,OAAiB;UC+EzB,iBACN"}
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/orama-cloud-legacy.ts","../../src/search/client/mixedbread.ts","../../src/search/client.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;UAEiB,YAAA;;;;;;;;;;;;;;;AAAjB;;;UCIiB,aAAA;;;;;;;mCAQkB,WAAW,QAAQ;;;;;;;;EDZrC,MAAA,CAAA,EAAA,MAAY;;;;UEEZ,cAAA;;UAEP;;;;;;+DAaH;aACM,eAAe;;;;;UCPX,iBAAA;UACP;;;;;;;WAOC,QAAQ;;;;;;AHnBnB;;;;;;UIWiB,uBAAA;UACP;;;;;;;WAOC;;;;;;AJnBX;;;;;;UKIiB,iBAAA;;;;;;;;UASP;;;;;;ALbV;;;;;;UMSU,aAAA;;;;;WAKC;YACC;;ANfZ;KMmBY,MAAA;;IAGJ;ELlBS,IAAA,EAAA,QAAA;CAQkB,GKa3B,aLb2B,CAAA,GAAA,CAAA;EAAmB,IAAA,EAAA,SAAA;CAAR,GKgBtC,cLhBsC,CAAA,GAAA,CAAA;EAAO,IAAA,EAAA,aAAA;IKmB7C;;IAGA;EJhCS,IAAA,EAAA,YAAc;CAErB,GIiCF,iBJjCE,CAAA;;;;;;iBI+DM,aAAA,gBACC;;AHzDjB;;;;EAQkB,OAAA,CAAA,EAAA,MAAA;;;;ACRlB;;;UEwES,iBACN"}
@@ -70,7 +70,7 @@ function useDocsSearch(clientOptions, deps) {
70
70
  return searchDocs(debouncedValue, client);
71
71
  }
72
72
  case "mixedbread": {
73
- const { search: search$1 } = await import("../mixedbread-B0TvOHtt.js");
73
+ const { search: search$1 } = await import("../mixedbread-CPGJEgwq.js");
74
74
  return search$1(debouncedValue, client);
75
75
  }
76
76
  case "static": {
@@ -1 +1 @@
1
- {"version":3,"file":"orama-cloud-legacy.js","names":["indexes: OramaIndex[]"],"sources":["../../src/search/orama-cloud-legacy.ts"],"sourcesContent":["import type { CloudManager } from '@oramacloud/client';\nimport type { StructuredData } from '@/mdx-plugins';\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 interface I18nSyncOptions extends 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(cloudManager: CloudManager, options: SyncOptions): Promise<void> {\n const { autoDeploy = true } = options;\n const index = cloudManager.index(options.index);\n\n await index.snapshot(options.documents.flatMap(toIndex));\n if (autoDeploy) await index.deploy();\n}\n\nexport async function syncI18n(\n cloudManager: CloudManager,\n options: I18nSyncOptions,\n): Promise<void> {\n const { autoDeploy = true } = options;\n\n const tasks = options.documents.map(async (document) => {\n const index = cloudManager.index(options.indexes[document.locale]);\n\n await index.snapshot(document.items.flatMap(toIndex));\n if (autoDeploy) await index.deploy();\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 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,cAA4B,SAAqC;CAC1F,MAAM,EAAE,aAAa,SAAS;CAC9B,MAAM,QAAQ,aAAa,MAAM,QAAQ,MAAM;AAE/C,OAAM,MAAM,SAAS,QAAQ,UAAU,QAAQ,QAAQ,CAAC;AACxD,KAAI,WAAY,OAAM,MAAM,QAAQ;;AAGtC,eAAsB,SACpB,cACA,SACe;CACf,MAAM,EAAE,aAAa,SAAS;CAE9B,MAAM,QAAQ,QAAQ,UAAU,IAAI,OAAO,aAAa;EACtD,MAAM,QAAQ,aAAa,MAAM,QAAQ,QAAQ,SAAS,QAAQ;AAElE,QAAM,MAAM,SAAS,SAAS,MAAM,QAAQ,QAAQ,CAAC;AACrD,MAAI,WAAY,OAAM,MAAM,QAAQ;GACpC;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;GACV,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
+ {"version":3,"file":"orama-cloud-legacy.js","names":[],"sources":["../../src/search/orama-cloud-legacy.ts"],"sourcesContent":["import type { CloudManager } from '@oramacloud/client';\nimport type { StructuredData } from '@/mdx-plugins';\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 interface I18nSyncOptions extends 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(cloudManager: CloudManager, options: SyncOptions): Promise<void> {\n const { autoDeploy = true } = options;\n const index = cloudManager.index(options.index);\n\n await index.snapshot(options.documents.flatMap(toIndex));\n if (autoDeploy) await index.deploy();\n}\n\nexport async function syncI18n(\n cloudManager: CloudManager,\n options: I18nSyncOptions,\n): Promise<void> {\n const { autoDeploy = true } = options;\n\n const tasks = options.documents.map(async (document) => {\n const index = cloudManager.index(options.indexes[document.locale]);\n\n await index.snapshot(document.items.flatMap(toIndex));\n if (autoDeploy) await index.deploy();\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 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,cAA4B,SAAqC;CAC1F,MAAM,EAAE,aAAa,SAAS;CAC9B,MAAM,QAAQ,aAAa,MAAM,QAAQ,MAAM;AAE/C,OAAM,MAAM,SAAS,QAAQ,UAAU,QAAQ,QAAQ,CAAC;AACxD,KAAI,WAAY,OAAM,MAAM,QAAQ;;AAGtC,eAAsB,SACpB,cACA,SACe;CACf,MAAM,EAAE,aAAa,SAAS;CAE9B,MAAM,QAAQ,QAAQ,UAAU,IAAI,OAAO,aAAa;EACtD,MAAM,QAAQ,aAAa,MAAM,QAAQ,QAAQ,SAAS,QAAQ;AAElE,QAAM,MAAM,SAAS,SAAS,MAAM,QAAQ,QAAQ,CAAC;AACrD,MAAI,WAAY,OAAM,MAAM,QAAQ;GACpC;AAEF,OAAM,QAAQ,IAAI,MAAM;;AAG1B,SAAS,QAAQ,MAAmC;CAClD,IAAI,KAAK;CACT,MAAM,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;GACV,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 +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 interface I18nSyncOptions extends 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
+ {"version":3,"file":"orama-cloud.js","names":[],"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 interface I18nSyncOptions extends 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,MAAM,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,6 +1,8 @@
1
1
  import "../definitions-Ca2P2viV.js";
2
2
  import "../remark-structure-ChKxMXnK.js";
3
+ import "../index-BaMZ8PEK.js";
3
4
  import { HighlightedText, ReactSortedResult, SortedResult, createContentHighlighter } from "./index.js";
4
- import { a as Index, c as SimpleOptions, d as initSimpleSearch, f as createI18nSearchAPI, i as ExportedData, l as createSearchAPI, n as AdvancedOptions, o as SearchAPI, p as createFromSource, r as Dynamic, s as SearchServer, t as AdvancedIndex, u as initAdvancedSearch } from "../server-CjGgVKx_.js";
5
- import "../index-k5KwKJ_c.js";
5
+ import { a as Index, c as SimpleOptions, d as initSimpleSearch, f as createI18nSearchAPI, i as ExportedData, l as createSearchAPI, n as AdvancedOptions, o as SearchAPI, p as createFromSource, r as Dynamic, s as SearchServer, t as AdvancedIndex, u as initAdvancedSearch } from "../server-CLPpotS9.js";
6
+ import "../index-aE27-b16.js";
7
+ import "../index-CmGSoB4T.js";
6
8
  export { AdvancedIndex, AdvancedOptions, Dynamic, ExportedData, HighlightedText, Index, ReactSortedResult, SearchAPI, SearchServer, SimpleOptions, SortedResult, createContentHighlighter, createFromSource, createI18nSearchAPI, createSearchAPI, initAdvancedSearch, initSimpleSearch };
@@ -1 +1 @@
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
+ {"version":3,"file":"server.js","names":["search"],"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 +1 @@
1
- {"version":3,"file":"search-DzqmOjzV.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"}
1
+ {"version":3,"file":"search-DzqmOjzV.js","names":[],"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,MAAM,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"}
@@ -1,7 +1,7 @@
1
1
  import { n as StructuredData } from "./remark-structure-ChKxMXnK.js";
2
2
  import { t as I18nConfig } from "./index-DxhhLscI.js";
3
3
  import { SortedResult } from "./search/index.js";
4
- import { i as LoaderConfig, o as LoaderOutput, u as Page } from "./index-k5KwKJ_c.js";
4
+ import { i as LoaderConfig, o as LoaderOutput, u as Page } from "./index-aE27-b16.js";
5
5
  import { Language, Orama, RawData, SearchParams, TypedDocument, create } from "@orama/orama";
6
6
 
7
7
  //#region src/search/orama/create-db.d.ts
@@ -130,4 +130,4 @@ interface AdvancedIndex {
130
130
  declare function initAdvancedSearch(options: AdvancedOptions): SearchServer;
131
131
  //#endregion
132
132
  export { Index as a, SimpleOptions as c, initSimpleSearch as d, createI18nSearchAPI as f, ExportedData as i, createSearchAPI as l, AdvancedOptions as n, SearchAPI as o, createFromSource as p, Dynamic as r, SearchServer as s, AdvancedIndex as t, initAdvancedSearch as u };
133
- //# sourceMappingURL=server-CjGgVKx_.d.ts.map
133
+ //# sourceMappingURL=server-CLPpotS9.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-CjGgVKx_.d.ts","names":[],"sources":["../src/search/orama/create-db.ts","../src/search/orama/create-from-source.ts","../src/search/orama/create-i18n.ts","../src/search/server.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"server-CLPpotS9.d.ts","names":[],"sources":["../src/search/orama/create-db.ts","../src/search/orama/create-from-source.ts","../src/search/orama/create-i18n.ts","../src/search/server.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shiki-B4NO99XD.js","names":["themes: CodeOptionsThemes<BundledTheme>"],"sources":["../src/highlight/shiki.ts"],"sourcesContent":["import {\n type BundledHighlighterOptions,\n type BundledLanguage,\n type CodeOptionsMeta,\n type CodeOptionsThemes,\n type CodeToHastOptionsCommon,\n type Highlighter,\n} from 'shiki';\nimport type { BundledTheme } from 'shiki/themes';\nimport {\n type Components,\n type Options as ToJsxOptions,\n toJsxRuntime,\n} from 'hast-util-to-jsx-runtime';\nimport { Fragment, type ReactNode } from 'react';\nimport { jsx, jsxs } from 'react/jsx-runtime';\nimport type { Root } from 'hast';\n\nexport const defaultThemes = {\n light: 'github-light',\n dark: 'github-dark',\n};\n\nexport type HighlightOptionsCommon = CodeToHastOptionsCommon<BundledLanguage> &\n CodeOptionsMeta & {\n /**\n * The Regex Engine for Shiki\n *\n * @defaultValue 'js'\n */\n engine?: 'js' | 'oniguruma';\n components?: Partial<Components>;\n\n fallbackLanguage?: BundledLanguage;\n };\n\nexport type HighlightOptionsThemes = CodeOptionsThemes<BundledTheme>;\n\nexport type HighlightOptions = HighlightOptionsCommon &\n (HighlightOptionsThemes | Record<never, never>);\n\nconst highlighters = new Map<string, Promise<Highlighter>>();\n\nexport async function highlightHast(code: string, options: HighlightOptions): Promise<Root> {\n const { lang: initialLang, fallbackLanguage, components: _, engine = 'js', ...rest } = options;\n let lang = initialLang;\n let themes: CodeOptionsThemes<BundledTheme>;\n let themesToLoad;\n\n if ('theme' in options && options.theme) {\n themes = { theme: options.theme };\n themesToLoad = [themes.theme];\n } else {\n themes = {\n themes: 'themes' in options && options.themes ? options.themes : defaultThemes,\n };\n themesToLoad = Object.values(themes.themes).filter((v) => v !== undefined);\n }\n\n const highlighter = await getHighlighter(engine, {\n langs: [],\n themes: themesToLoad,\n });\n\n try {\n await highlighter.loadLanguage(lang as BundledLanguage);\n } catch {\n lang = fallbackLanguage ?? 'text';\n await highlighter.loadLanguage(lang as BundledLanguage);\n }\n\n return highlighter.codeToHast(code, {\n lang,\n ...rest,\n ...themes,\n defaultColor: 'themes' in themes ? false : undefined,\n });\n}\n\nexport function hastToJsx(hast: Root, options?: Partial<ToJsxOptions>) {\n return toJsxRuntime(hast, {\n jsx,\n jsxs,\n development: false,\n Fragment,\n ...options,\n });\n}\n\n/**\n * Get Shiki highlighter instance of Fumadocs (mostly for internal use, you should use Shiki directly over this).\n *\n * @param engineType - Shiki Regex engine to use.\n * @param options - Shiki options.\n */\nexport async function getHighlighter(\n engineType: 'js' | 'oniguruma',\n options: Omit<BundledHighlighterOptions<BundledLanguage, BundledTheme>, 'engine'>,\n) {\n const { createHighlighter } = await import('shiki');\n let highlighter = highlighters.get(engineType);\n\n if (!highlighter) {\n let engine;\n\n if (engineType === 'js') {\n engine = import('shiki/engine/javascript').then((res) => res.createJavaScriptRegexEngine());\n } else {\n engine = import('shiki/engine/oniguruma').then((res) =>\n res.createOnigurumaEngine(import('shiki/wasm')),\n );\n }\n\n highlighter = createHighlighter({\n ...options,\n engine,\n });\n\n highlighters.set(engineType, highlighter);\n return highlighter;\n }\n\n return highlighter.then(async (instance) => {\n await Promise.all([\n // @ts-expect-error unknown\n instance.loadLanguage(...options.langs),\n // @ts-expect-error unknown\n instance.loadTheme(...options.themes),\n ]);\n\n return instance;\n });\n}\n\nexport async function highlight(code: string, options: HighlightOptions): Promise<ReactNode> {\n return hastToJsx(await highlightHast(code, options), {\n components: options.components,\n });\n}\n"],"mappings":";;;;;AAkBA,MAAa,gBAAgB;CAC3B,OAAO;CACP,MAAM;CACP;AAoBD,MAAM,+BAAe,IAAI,KAAmC;AAE5D,eAAsB,cAAc,MAAc,SAA0C;CAC1F,MAAM,EAAE,MAAM,aAAa,kBAAkB,YAAY,GAAG,SAAS,MAAM,GAAG,SAAS;CACvF,IAAI,OAAO;CACX,IAAIA;CACJ,IAAI;AAEJ,KAAI,WAAW,WAAW,QAAQ,OAAO;AACvC,WAAS,EAAE,OAAO,QAAQ,OAAO;AACjC,iBAAe,CAAC,OAAO,MAAM;QACxB;AACL,WAAS,EACP,QAAQ,YAAY,WAAW,QAAQ,SAAS,QAAQ,SAAS,eAClE;AACD,iBAAe,OAAO,OAAO,OAAO,OAAO,CAAC,QAAQ,MAAM,MAAM,OAAU;;CAG5E,MAAM,cAAc,MAAM,eAAe,QAAQ;EAC/C,OAAO,EAAE;EACT,QAAQ;EACT,CAAC;AAEF,KAAI;AACF,QAAM,YAAY,aAAa,KAAwB;SACjD;AACN,SAAO,oBAAoB;AAC3B,QAAM,YAAY,aAAa,KAAwB;;AAGzD,QAAO,YAAY,WAAW,MAAM;EAClC;EACA,GAAG;EACH,GAAG;EACH,cAAc,YAAY,SAAS,QAAQ;EAC5C,CAAC;;AAGJ,SAAgB,UAAU,MAAY,SAAiC;AACrE,QAAO,aAAa,MAAM;EACxB;EACA;EACA,aAAa;EACb;EACA,GAAG;EACJ,CAAC;;;;;;;;AASJ,eAAsB,eACpB,YACA,SACA;CACA,MAAM,EAAE,sBAAsB,MAAM,OAAO;CAC3C,IAAI,cAAc,aAAa,IAAI,WAAW;AAE9C,KAAI,CAAC,aAAa;EAChB,IAAI;AAEJ,MAAI,eAAe,KACjB,UAAS,OAAO,2BAA2B,MAAM,QAAQ,IAAI,6BAA6B,CAAC;MAE3F,UAAS,OAAO,0BAA0B,MAAM,QAC9C,IAAI,sBAAsB,OAAO,cAAc,CAChD;AAGH,gBAAc,kBAAkB;GAC9B,GAAG;GACH;GACD,CAAC;AAEF,eAAa,IAAI,YAAY,YAAY;AACzC,SAAO;;AAGT,QAAO,YAAY,KAAK,OAAO,aAAa;AAC1C,QAAM,QAAQ,IAAI,CAEhB,SAAS,aAAa,GAAG,QAAQ,MAAM,EAEvC,SAAS,UAAU,GAAG,QAAQ,OAAO,CACtC,CAAC;AAEF,SAAO;GACP;;AAGJ,eAAsB,UAAU,MAAc,SAA+C;AAC3F,QAAO,UAAU,MAAM,cAAc,MAAM,QAAQ,EAAE,EACnD,YAAY,QAAQ,YACrB,CAAC"}
1
+ {"version":3,"file":"shiki-B4NO99XD.js","names":[],"sources":["../src/highlight/shiki.ts"],"sourcesContent":["import {\n type BundledHighlighterOptions,\n type BundledLanguage,\n type CodeOptionsMeta,\n type CodeOptionsThemes,\n type CodeToHastOptionsCommon,\n type Highlighter,\n} from 'shiki';\nimport type { BundledTheme } from 'shiki/themes';\nimport {\n type Components,\n type Options as ToJsxOptions,\n toJsxRuntime,\n} from 'hast-util-to-jsx-runtime';\nimport { Fragment, type ReactNode } from 'react';\nimport { jsx, jsxs } from 'react/jsx-runtime';\nimport type { Root } from 'hast';\n\nexport const defaultThemes = {\n light: 'github-light',\n dark: 'github-dark',\n};\n\nexport type HighlightOptionsCommon = CodeToHastOptionsCommon<BundledLanguage> &\n CodeOptionsMeta & {\n /**\n * The Regex Engine for Shiki\n *\n * @defaultValue 'js'\n */\n engine?: 'js' | 'oniguruma';\n components?: Partial<Components>;\n\n fallbackLanguage?: BundledLanguage;\n };\n\nexport type HighlightOptionsThemes = CodeOptionsThemes<BundledTheme>;\n\nexport type HighlightOptions = HighlightOptionsCommon &\n (HighlightOptionsThemes | Record<never, never>);\n\nconst highlighters = new Map<string, Promise<Highlighter>>();\n\nexport async function highlightHast(code: string, options: HighlightOptions): Promise<Root> {\n const { lang: initialLang, fallbackLanguage, components: _, engine = 'js', ...rest } = options;\n let lang = initialLang;\n let themes: CodeOptionsThemes<BundledTheme>;\n let themesToLoad;\n\n if ('theme' in options && options.theme) {\n themes = { theme: options.theme };\n themesToLoad = [themes.theme];\n } else {\n themes = {\n themes: 'themes' in options && options.themes ? options.themes : defaultThemes,\n };\n themesToLoad = Object.values(themes.themes).filter((v) => v !== undefined);\n }\n\n const highlighter = await getHighlighter(engine, {\n langs: [],\n themes: themesToLoad,\n });\n\n try {\n await highlighter.loadLanguage(lang as BundledLanguage);\n } catch {\n lang = fallbackLanguage ?? 'text';\n await highlighter.loadLanguage(lang as BundledLanguage);\n }\n\n return highlighter.codeToHast(code, {\n lang,\n ...rest,\n ...themes,\n defaultColor: 'themes' in themes ? false : undefined,\n });\n}\n\nexport function hastToJsx(hast: Root, options?: Partial<ToJsxOptions>) {\n return toJsxRuntime(hast, {\n jsx,\n jsxs,\n development: false,\n Fragment,\n ...options,\n });\n}\n\n/**\n * Get Shiki highlighter instance of Fumadocs (mostly for internal use, you should use Shiki directly over this).\n *\n * @param engineType - Shiki Regex engine to use.\n * @param options - Shiki options.\n */\nexport async function getHighlighter(\n engineType: 'js' | 'oniguruma',\n options: Omit<BundledHighlighterOptions<BundledLanguage, BundledTheme>, 'engine'>,\n) {\n const { createHighlighter } = await import('shiki');\n let highlighter = highlighters.get(engineType);\n\n if (!highlighter) {\n let engine;\n\n if (engineType === 'js') {\n engine = import('shiki/engine/javascript').then((res) => res.createJavaScriptRegexEngine());\n } else {\n engine = import('shiki/engine/oniguruma').then((res) =>\n res.createOnigurumaEngine(import('shiki/wasm')),\n );\n }\n\n highlighter = createHighlighter({\n ...options,\n engine,\n });\n\n highlighters.set(engineType, highlighter);\n return highlighter;\n }\n\n return highlighter.then(async (instance) => {\n await Promise.all([\n // @ts-expect-error unknown\n instance.loadLanguage(...options.langs),\n // @ts-expect-error unknown\n instance.loadTheme(...options.themes),\n ]);\n\n return instance;\n });\n}\n\nexport async function highlight(code: string, options: HighlightOptions): Promise<ReactNode> {\n return hastToJsx(await highlightHast(code, options), {\n components: options.components,\n });\n}\n"],"mappings":";;;;;AAkBA,MAAa,gBAAgB;CAC3B,OAAO;CACP,MAAM;CACP;AAoBD,MAAM,+BAAe,IAAI,KAAmC;AAE5D,eAAsB,cAAc,MAAc,SAA0C;CAC1F,MAAM,EAAE,MAAM,aAAa,kBAAkB,YAAY,GAAG,SAAS,MAAM,GAAG,SAAS;CACvF,IAAI,OAAO;CACX,IAAI;CACJ,IAAI;AAEJ,KAAI,WAAW,WAAW,QAAQ,OAAO;AACvC,WAAS,EAAE,OAAO,QAAQ,OAAO;AACjC,iBAAe,CAAC,OAAO,MAAM;QACxB;AACL,WAAS,EACP,QAAQ,YAAY,WAAW,QAAQ,SAAS,QAAQ,SAAS,eAClE;AACD,iBAAe,OAAO,OAAO,OAAO,OAAO,CAAC,QAAQ,MAAM,MAAM,OAAU;;CAG5E,MAAM,cAAc,MAAM,eAAe,QAAQ;EAC/C,OAAO,EAAE;EACT,QAAQ;EACT,CAAC;AAEF,KAAI;AACF,QAAM,YAAY,aAAa,KAAwB;SACjD;AACN,SAAO,oBAAoB;AAC3B,QAAM,YAAY,aAAa,KAAwB;;AAGzD,QAAO,YAAY,WAAW,MAAM;EAClC;EACA,GAAG;EACH,GAAG;EACH,cAAc,YAAY,SAAS,QAAQ;EAC5C,CAAC;;AAGJ,SAAgB,UAAU,MAAY,SAAiC;AACrE,QAAO,aAAa,MAAM;EACxB;EACA;EACA,aAAa;EACb;EACA,GAAG;EACJ,CAAC;;;;;;;;AASJ,eAAsB,eACpB,YACA,SACA;CACA,MAAM,EAAE,sBAAsB,MAAM,OAAO;CAC3C,IAAI,cAAc,aAAa,IAAI,WAAW;AAE9C,KAAI,CAAC,aAAa;EAChB,IAAI;AAEJ,MAAI,eAAe,KACjB,UAAS,OAAO,2BAA2B,MAAM,QAAQ,IAAI,6BAA6B,CAAC;MAE3F,UAAS,OAAO,0BAA0B,MAAM,QAC9C,IAAI,sBAAsB,OAAO,cAAc,CAChD;AAGH,gBAAc,kBAAkB;GAC9B,GAAG;GACH;GACD,CAAC;AAEF,eAAa,IAAI,YAAY,YAAY;AACzC,SAAO;;AAGT,QAAO,YAAY,KAAK,OAAO,aAAa;AAC1C,QAAM,QAAQ,IAAI,CAEhB,SAAS,aAAa,GAAG,QAAQ,MAAM,EAEvC,SAAS,UAAU,GAAG,QAAQ,OAAO,CACtC,CAAC;AAEF,SAAO;GACP;;AAGJ,eAAsB,UAAU,MAAc,SAA+C;AAC3F,QAAO,UAAU,MAAM,cAAc,MAAM,QAAQ,EAAE,EACnD,YAAY,QAAQ,YACrB,CAAC"}
@@ -1,18 +1,4 @@
1
- import { i as Root } from "../../definitions-Ca2P2viV.js";
2
- import "../../page-tree/index.js";
3
-
4
- //#region src/source/client/index.d.ts
5
- declare function deserializePageTree(root: Root): Root;
6
- /**
7
- * Deserialize data passed from server-side loader.
8
- *
9
- * It only receives the serialized data from server-side, hence not sharing plugins and some properties.
10
- */
11
- declare function useFumadocsLoader<V extends {
12
- pageTree?: object;
13
- }>(serialized: V): {
14
- pageTree: V["pageTree"] extends object ? Root : undefined;
15
- };
16
- //#endregion
17
- export { deserializePageTree, useFumadocsLoader };
18
- //# sourceMappingURL=index.d.ts.map
1
+ import "../../definitions-Ca2P2viV.js";
2
+ import "../../index-BaMZ8PEK.js";
3
+ import { n as deserializePageTree, r as useFumadocsLoader, t as SerializedPageTree } from "../../index-CmGSoB4T.js";
4
+ export { SerializedPageTree, deserializePageTree, useFumadocsLoader };
@@ -3,10 +3,11 @@ import { useMemo } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
5
5
  //#region src/source/client/index.tsx
6
- function deserializePageTree(root) {
7
- function deserializeHTML(html) {
8
- return /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: html } });
9
- }
6
+ function deserializeHTML(html) {
7
+ return /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: html } });
8
+ }
9
+ function deserializePageTree(serialized) {
10
+ const root = serialized.data;
10
11
  visit(root, (item) => {
11
12
  if ("icon" in item && typeof item.icon === "string") item.icon = deserializeHTML(item.icon);
12
13
  if (typeof item.name === "string") item.name = deserializeHTML(item.name);
@@ -14,15 +15,21 @@ function deserializePageTree(root) {
14
15
  return root;
15
16
  }
16
17
  /**
17
- * Deserialize data passed from server-side loader.
18
+ * Deserialize loader data that is serialized by the server-side Fumadocs `loader()`, supported:
19
+ * - Page Tree
18
20
  *
19
- * It only receives the serialized data from server-side, hence not sharing plugins and some properties.
21
+ * other unrelated properties are kept in the output.
20
22
  */
21
23
  function useFumadocsLoader(serialized) {
22
- const { pageTree } = serialized;
23
24
  return useMemo(() => {
24
- return { pageTree: pageTree ? deserializePageTree(pageTree) : void 0 };
25
- }, [pageTree]);
25
+ const out = {};
26
+ for (const k in serialized) {
27
+ const v = serialized[k];
28
+ if (typeof v === "object" && v !== null && "$fumadocs_loader" in v && v.$fumadocs_loader === "page-tree" && "data" in v && typeof v.data === "object") out[k] = deserializePageTree(v);
29
+ else out[k] = v;
30
+ }
31
+ return out;
32
+ }, [serialized]);
26
33
  }
27
34
 
28
35
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/source/client/index.tsx"],"sourcesContent":["import type * as PageTree from '@/page-tree';\nimport { visit } from '@/page-tree/utils';\nimport { useMemo } from 'react';\n\nexport function deserializePageTree(root: PageTree.Root): PageTree.Root {\n function deserializeHTML(html: string) {\n return (\n <span\n dangerouslySetInnerHTML={{\n __html: html,\n }}\n />\n );\n }\n visit(root, (item) => {\n if ('icon' in item && typeof item.icon === 'string') {\n item.icon = deserializeHTML(item.icon);\n }\n if (typeof item.name === 'string') {\n item.name = deserializeHTML(item.name);\n }\n });\n\n return root;\n}\n\n/**\n * Deserialize data passed from server-side loader.\n *\n * It only receives the serialized data from server-side, hence not sharing plugins and some properties.\n */\nexport function useFumadocsLoader<\n V extends {\n pageTree?: object;\n },\n>(serialized: V) {\n const { pageTree } = serialized;\n\n return useMemo(() => {\n return {\n pageTree: pageTree ? deserializePageTree(pageTree as PageTree.Root) : undefined,\n } as {\n pageTree: V['pageTree'] extends object ? PageTree.Root : undefined;\n };\n }, [pageTree]);\n}\n"],"mappings":";;;;;AAIA,SAAgB,oBAAoB,MAAoC;CACtE,SAAS,gBAAgB,MAAc;AACrC,SACE,oBAAC,UACC,yBAAyB,EACvB,QAAQ,MACT,GACD;;AAGN,OAAM,OAAO,SAAS;AACpB,MAAI,UAAU,QAAQ,OAAO,KAAK,SAAS,SACzC,MAAK,OAAO,gBAAgB,KAAK,KAAK;AAExC,MAAI,OAAO,KAAK,SAAS,SACvB,MAAK,OAAO,gBAAgB,KAAK,KAAK;GAExC;AAEF,QAAO;;;;;;;AAQT,SAAgB,kBAId,YAAe;CACf,MAAM,EAAE,aAAa;AAErB,QAAO,cAAc;AACnB,SAAO,EACL,UAAU,WAAW,oBAAoB,SAA0B,GAAG,QACvE;IAGA,CAAC,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/source/client/index.tsx"],"sourcesContent":["import type * as PageTree from '@/page-tree';\nimport { visit } from '@/page-tree/utils';\nimport { useMemo } from 'react';\n\nexport interface SerializedPageTree {\n $fumadocs_loader: 'page-tree';\n data: object;\n}\n\nfunction deserializeHTML(html: string) {\n return (\n <span\n dangerouslySetInnerHTML={{\n __html: html,\n }}\n />\n );\n}\n\nexport function deserializePageTree(serialized: SerializedPageTree): PageTree.Root {\n const root = serialized.data as PageTree.Root;\n visit(root, (item) => {\n if ('icon' in item && typeof item.icon === 'string') {\n item.icon = deserializeHTML(item.icon);\n }\n if (typeof item.name === 'string') {\n item.name = deserializeHTML(item.name);\n }\n });\n\n return root;\n}\n\n/**\n * Deserialize loader data that is serialized by the server-side Fumadocs `loader()`, supported:\n * - Page Tree\n *\n * other unrelated properties are kept in the output.\n */\nexport function useFumadocsLoader<V>(serialized: V): {\n [K in keyof V]: V[K] extends SerializedPageTree ? PageTree.Root : V[K];\n} {\n return useMemo(() => {\n const out: Record<string, unknown> = {};\n for (const k in serialized) {\n const v: unknown = serialized[k];\n if (\n typeof v === 'object' &&\n v !== null &&\n '$fumadocs_loader' in v &&\n v.$fumadocs_loader === 'page-tree' &&\n 'data' in v &&\n typeof v.data === 'object'\n ) {\n out[k] = deserializePageTree(v as SerializedPageTree);\n } else {\n out[k] = v;\n }\n }\n\n return out as {\n [K in keyof V]: V[K] extends SerializedPageTree ? PageTree.Root : V[K];\n };\n }, [serialized]);\n}\n"],"mappings":";;;;;AASA,SAAS,gBAAgB,MAAc;AACrC,QACE,oBAAC,UACC,yBAAyB,EACvB,QAAQ,MACT,GACD;;AAIN,SAAgB,oBAAoB,YAA+C;CACjF,MAAM,OAAO,WAAW;AACxB,OAAM,OAAO,SAAS;AACpB,MAAI,UAAU,QAAQ,OAAO,KAAK,SAAS,SACzC,MAAK,OAAO,gBAAgB,KAAK,KAAK;AAExC,MAAI,OAAO,KAAK,SAAS,SACvB,MAAK,OAAO,gBAAgB,KAAK,KAAK;GAExC;AAEF,QAAO;;;;;;;;AAST,SAAgB,kBAAqB,YAEnC;AACA,QAAO,cAAc;EACnB,MAAM,MAA+B,EAAE;AACvC,OAAK,MAAM,KAAK,YAAY;GAC1B,MAAM,IAAa,WAAW;AAC9B,OACE,OAAO,MAAM,YACb,MAAM,QACN,sBAAsB,KACtB,EAAE,qBAAqB,eACvB,UAAU,KACV,OAAO,EAAE,SAAS,SAElB,KAAI,KAAK,oBAAoB,EAAwB;OAErD,KAAI,KAAK;;AAIb,SAAO;IAGN,CAAC,WAAW,CAAC"}
@@ -1,3 +1,5 @@
1
1
  import "../definitions-Ca2P2viV.js";
2
- import { A as PageData, C as ContentStorage, D as buildContentStorage, E as ContentStoragePageFile, F as _SourceUpdate_, I as multiple, L as source, M as SourceConfig, N as VirtualFile, O as FileSystem, P as _ConfigUnion_, R as update, S as createPageTreeBuilder, T as ContentStorageMetaFile, a as LoaderOptions, b as PageTreeOptions, c as LoaderPluginOption, d as ResolvedLoaderConfig, f as createGetUrl, h as getSlugs, i as LoaderConfig, j as Source, k as MetaData, l as Meta, n as InferMetaType, o as LoaderOutput, p as loader, r as InferPageType, s as LoaderPlugin, t as path_d_exports, u as Page, v as PageTreeBuilder, w as ContentStorageFile, x as PageTreeTransformer, y as PageTreeBuilderContext } from "../index-k5KwKJ_c.js";
2
+ import "../index-BaMZ8PEK.js";
3
+ import { A as PageData, C as ContentStorage, D as buildContentStorage, E as ContentStoragePageFile, F as _SourceUpdate_, I as multiple, L as source, M as SourceConfig, N as VirtualFile, O as FileSystem, P as _ConfigUnion_, R as update, S as createPageTreeBuilder, T as ContentStorageMetaFile, a as LoaderOptions, b as PageTreeOptions, c as LoaderPluginOption, d as ResolvedLoaderConfig, f as createGetUrl, h as getSlugs, i as LoaderConfig, j as Source, k as MetaData, l as Meta, n as InferMetaType, o as LoaderOutput, p as loader, r as InferPageType, s as LoaderPlugin, t as path_d_exports, u as Page, v as PageTreeBuilder, w as ContentStorageFile, x as PageTreeTransformer, y as PageTreeBuilderContext } from "../index-aE27-b16.js";
4
+ import "../index-CmGSoB4T.js";
3
5
  export { ContentStorage, ContentStorageFile, ContentStorageMetaFile, ContentStoragePageFile, FileSystem, InferMetaType, InferPageType, LoaderConfig, LoaderOptions, LoaderOutput, LoaderPlugin, LoaderPluginOption, Meta, MetaData, Page, PageData, PageTreeBuilder, PageTreeBuilderContext, PageTreeOptions, PageTreeTransformer, path_d_exports as PathUtils, ResolvedLoaderConfig, Source, SourceConfig, VirtualFile, _ConfigUnion_, _SourceUpdate_, buildContentStorage, createGetUrl, createPageTreeBuilder, getSlugs, loader, multiple, source, update };
@@ -591,13 +591,16 @@ function loader(...args) {
591
591
  },
592
592
  async serializePageTree(tree) {
593
593
  const { renderToString } = await import("react-dom/server.edge");
594
- return visit(tree, (node) => {
595
- node = { ...node };
596
- if ("icon" in node && node.icon) node.icon = renderToString(node.icon);
597
- if (node.name) node.name = renderToString(node.name);
598
- if ("children" in node) node.children = [...node.children];
599
- return node;
600
- });
594
+ return {
595
+ $fumadocs_loader: "page-tree",
596
+ data: visit(tree, (node) => {
597
+ node = { ...node };
598
+ if ("icon" in node && node.icon) node.icon = renderToString(node.icon);
599
+ if (node.name) node.name = renderToString(node.name);
600
+ if ("children" in node) node.children = [...node.children];
601
+ return node;
602
+ })
603
+ };
601
604
  }
602
605
  };
603
606
  }