fumadocs-core 16.4.7 → 16.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{advanced-tbtFDsHU.js → advanced-BiZjLx5X.js} +3 -4
- package/dist/{algolia-BFVpYDZ_.d.ts → algolia-DWUn4vqa.d.ts} +2 -3
- package/dist/{algolia-Dbt0kj8j.js → algolia-IT2aRQE6.js} +2 -3
- package/dist/breadcrumb.d.ts +2 -3
- package/dist/breadcrumb.js +3 -4
- package/dist/{codeblock-utils-CdA7nXLP.d.ts → codeblock-utils-DA5Ql7wp.d.ts} +1 -2
- package/dist/content/github.d.ts +1 -2
- package/dist/content/github.js +1 -2
- package/dist/content/index.d.ts +3 -4
- package/dist/content/index.js +1 -2
- package/dist/content/mdx/preset-bundler.d.ts +9 -10
- package/dist/content/mdx/preset-bundler.js +2 -3
- package/dist/content/mdx/preset-runtime.d.ts +9 -10
- package/dist/content/mdx/preset-runtime.js +2 -3
- package/dist/content/toc.d.ts +1 -2
- package/dist/content/toc.js +2 -3
- package/dist/{definitions-Ca2P2viV.d.ts → definitions-fBNEDML4.d.ts} +1 -2
- package/dist/dynamic-link.d.ts +1 -2
- package/dist/dynamic-link.js +1 -2
- package/dist/{fetch-CiphcAUR.js → fetch-B9AxBORJ.js} +1 -2
- package/dist/framework/index.d.ts +1 -2
- package/dist/framework/index.js +1 -2
- package/dist/framework/next.d.ts +1 -2
- package/dist/framework/next.js +1 -2
- package/dist/framework/react-router.d.ts +1 -2
- package/dist/framework/react-router.js +1 -2
- package/dist/framework/tanstack.d.ts +3 -4
- package/dist/framework/tanstack.js +1 -2
- package/dist/framework/waku.d.ts +3 -4
- package/dist/framework/waku.js +1 -2
- package/dist/highlight/client.d.ts +2 -3
- package/dist/highlight/client.js +2 -3
- package/dist/highlight/index.d.ts +1 -1
- package/dist/highlight/index.js +1 -1
- package/dist/i18n/index.d.ts +1 -1
- package/dist/i18n/index.js +1 -2
- package/dist/i18n/middleware.d.ts +2 -3
- package/dist/i18n/middleware.js +1 -2
- package/dist/{icon-CL3r1pNG.js → icon-D9W4ODUt.js} +1 -2
- package/dist/{index-aE27-b16.d.ts → index-Bn_dIR1t.d.ts} +5 -6
- package/dist/{index-DxhhLscI.d.ts → index-CNd0mkPr.d.ts} +1 -2
- package/dist/{index-BaMZ8PEK.d.ts → index-DbVQNAN8.d.ts} +2 -3
- package/dist/{index-CmGSoB4T.d.ts → index-Skpc1DNd.d.ts} +4 -4
- package/dist/link.d.ts +3 -4
- package/dist/link.js +1 -2
- package/dist/{mdast-utils-B8O-41y4.js → mdast-utils-BqE5966y.js} +1 -2
- package/dist/mdx-plugins/codeblock-utils.d.ts +1 -1
- package/dist/mdx-plugins/codeblock-utils.js +1 -2
- package/dist/mdx-plugins/index.d.ts +15 -15
- package/dist/mdx-plugins/index.js +4 -4
- package/dist/mdx-plugins/rehype-code.d.ts +1 -1
- package/dist/mdx-plugins/rehype-code.js +2 -2
- package/dist/mdx-plugins/rehype-toc.d.ts +1 -1
- package/dist/mdx-plugins/rehype-toc.js +1 -1
- package/dist/mdx-plugins/remark-admonition.d.ts +1 -1
- package/dist/mdx-plugins/remark-admonition.js +2 -3
- package/dist/mdx-plugins/remark-code-tab.d.ts +1 -1
- package/dist/mdx-plugins/remark-code-tab.js +1 -2
- package/dist/mdx-plugins/remark-directive-admonition.d.ts +1 -1
- package/dist/mdx-plugins/remark-directive-admonition.js +1 -2
- package/dist/mdx-plugins/remark-feedback-block.d.ts +1 -1
- package/dist/mdx-plugins/remark-feedback-block.js +2 -3
- package/dist/mdx-plugins/remark-gfm.d.ts +1 -1
- package/dist/mdx-plugins/remark-heading.d.ts +1 -1
- package/dist/mdx-plugins/remark-heading.js +2 -3
- package/dist/mdx-plugins/remark-image.d.ts +1 -1
- package/dist/mdx-plugins/remark-image.js +1 -2
- package/dist/mdx-plugins/remark-mdx-files.d.ts +1 -1
- package/dist/mdx-plugins/remark-mdx-files.js +1 -2
- package/dist/mdx-plugins/remark-mdx-mermaid.d.ts +1 -1
- package/dist/mdx-plugins/remark-mdx-mermaid.js +1 -2
- package/dist/mdx-plugins/remark-npm.d.ts +1 -1
- package/dist/mdx-plugins/remark-npm.js +1 -2
- package/dist/mdx-plugins/remark-steps.d.ts +1 -1
- package/dist/mdx-plugins/remark-steps.js +1 -2
- package/dist/mdx-plugins/remark-structure.d.ts +1 -1
- package/dist/mdx-plugins/remark-structure.js +2 -3
- package/dist/{mixedbread-CPGJEgwq.js → mixedbread-B4x0e8AJ.js} +5 -4
- package/dist/negotiation/index.d.ts +1 -2
- package/dist/negotiation/index.js +1 -2
- package/dist/{normalize-url-CEfNKxaE.js → normalize-url-D88zV54r.js} +1 -2
- package/dist/{orama-cloud-yicpgD0c.js → orama-cloud-CiI54EU9.js} +3 -4
- package/dist/{orama-cloud-legacy-NJTbB19B.js → orama-cloud-legacy-DG0asrcn.js} +3 -4
- package/dist/page-tree/index.d.ts +2 -2
- package/dist/page-tree/index.js +1 -1
- package/dist/{path-CECfI3nn.js → path-B48ZWv8k.js} +2 -3
- package/dist/{rehype-code-Ct5Pb6BZ.js → rehype-code-8Te7jiPm.js} +2 -3
- package/dist/{rehype-code-BUrju-yF.d.ts → rehype-code-9wJ_hsjl.d.ts} +1 -2
- package/dist/{rehype-toc-Dcgzd_Vy.d.ts → rehype-toc-Bt9Ng_4w.d.ts} +1 -2
- package/dist/{rehype-toc-CTG0x7La.js → rehype-toc-CRXB92Tc.js} +1 -2
- package/dist/{remark-admonition-BvgS4oU1.d.ts → remark-admonition-DVevS9Wn.d.ts} +1 -2
- package/dist/{remark-code-tab-Ds_BdYXz.d.ts → remark-code-tab-DwGhoHpj.d.ts} +1 -2
- package/dist/{remark-directive-admonition-02cR5K1L.d.ts → remark-directive-admonition-DA7-ewEx.d.ts} +1 -2
- package/dist/{remark-feedback-block-fAyt4LdQ.d.ts → remark-feedback-block-PpERWDdJ.d.ts} +1 -2
- package/dist/{remark-heading-CSButCYt.d.ts → remark-heading-B02bkQ09.d.ts} +1 -2
- package/dist/{remark-image-C3MnP-3r.d.ts → remark-image-k8SDn3Hf.d.ts} +1 -2
- package/dist/{remark-mdx-files-BXUiiX3M.d.ts → remark-mdx-files-DXQKQsPS.d.ts} +1 -2
- package/dist/{remark-mdx-mermaid-C5ZBxx8x.d.ts → remark-mdx-mermaid-CzeZXfYX.d.ts} +1 -2
- package/dist/{remark-npm-DADZg0pf.d.ts → remark-npm-DS3cHDxB.d.ts} +1 -2
- package/dist/{remark-steps-CWEE34cT.d.ts → remark-steps-Bz-6C0tE.d.ts} +1 -2
- package/dist/{remark-structure-ChKxMXnK.d.ts → remark-structure-dZprfvCG.d.ts} +1 -2
- package/dist/{remove-undefined-Buxsprgu.js → remove-undefined-CiwokjLP.js} +1 -2
- package/dist/search/algolia.d.ts +2 -2
- package/dist/search/algolia.js +1 -2
- package/dist/search/client.d.ts +8 -9
- package/dist/search/client.js +7 -8
- package/dist/search/index.d.ts +1 -2
- package/dist/search/index.js +1 -1
- package/dist/search/orama-cloud-legacy.d.ts +6 -7
- package/dist/search/orama-cloud-legacy.js +1 -2
- package/dist/search/orama-cloud.d.ts +6 -7
- package/dist/search/orama-cloud.js +1 -2
- package/dist/search/server.d.ts +6 -6
- package/dist/search/server.js +5 -6
- package/dist/{search-DzqmOjzV.js → search-CBAFoCmV.js} +1 -2
- package/dist/{server-CLPpotS9.d.ts → server-BqqfVZaS.d.ts} +4 -5
- package/dist/{shiki-B4NO99XD.js → shiki-BMakKE6A.js} +1 -2
- package/dist/{shiki-vKy7H_iw.d.ts → shiki-BjMLCq9L.d.ts} +1 -2
- package/dist/source/client/index.d.ts +4 -4
- package/dist/source/client/index.js +6 -4
- package/dist/source/index.d.ts +4 -4
- package/dist/source/index.js +108 -59
- package/dist/source/plugins/lucide-icons.d.ts +5 -6
- package/dist/source/plugins/lucide-icons.js +2 -3
- package/dist/source/plugins/slugs.d.ts +4 -4
- package/dist/source/plugins/slugs.js +2 -3
- package/dist/source/plugins/status-badges.d.ts +53 -0
- package/dist/source/plugins/status-badges.js +54 -0
- package/dist/source/schema.d.ts +1 -2
- package/dist/source/schema.js +1 -2
- package/dist/{static-C_WBOzek.js → static-Dg4_dKaf.js} +2 -3
- package/dist/toc.d.ts +1 -2
- package/dist/toc.js +1 -2
- package/dist/{util-d5FlPx1Z.d.ts → util-C1pcIt82.d.ts} +1 -2
- package/dist/{util-Dn-wseQ5.js → util-E8U2ttCR.js} +1 -2
- package/dist/utils/use-effect-event.d.ts +1 -2
- package/dist/utils/use-effect-event.js +1 -2
- package/dist/utils/use-media-query.d.ts +1 -2
- package/dist/utils/use-media-query.js +1 -2
- package/dist/utils/use-on-change.d.ts +1 -2
- package/dist/utils/use-on-change.js +1 -2
- package/dist/{utils-D10VxgVc.js → utils-BllAiz19.js} +1 -2
- package/package.json +13 -13
- package/dist/advanced-tbtFDsHU.js.map +0 -1
- package/dist/algolia-BFVpYDZ_.d.ts.map +0 -1
- package/dist/algolia-Dbt0kj8j.js.map +0 -1
- package/dist/breadcrumb.d.ts.map +0 -1
- package/dist/breadcrumb.js.map +0 -1
- package/dist/codeblock-utils-CdA7nXLP.d.ts.map +0 -1
- package/dist/content/github.d.ts.map +0 -1
- package/dist/content/github.js.map +0 -1
- package/dist/content/index.d.ts.map +0 -1
- package/dist/content/index.js.map +0 -1
- package/dist/content/mdx/preset-bundler.d.ts.map +0 -1
- package/dist/content/mdx/preset-bundler.js.map +0 -1
- package/dist/content/mdx/preset-runtime.d.ts.map +0 -1
- package/dist/content/mdx/preset-runtime.js.map +0 -1
- package/dist/content/toc.d.ts.map +0 -1
- package/dist/content/toc.js.map +0 -1
- package/dist/definitions-Ca2P2viV.d.ts.map +0 -1
- package/dist/dynamic-link.d.ts.map +0 -1
- package/dist/dynamic-link.js.map +0 -1
- package/dist/fetch-CiphcAUR.js.map +0 -1
- package/dist/framework/index.d.ts.map +0 -1
- package/dist/framework/index.js.map +0 -1
- package/dist/framework/next.d.ts.map +0 -1
- package/dist/framework/next.js.map +0 -1
- package/dist/framework/react-router.d.ts.map +0 -1
- package/dist/framework/react-router.js.map +0 -1
- package/dist/framework/tanstack.d.ts.map +0 -1
- package/dist/framework/tanstack.js.map +0 -1
- package/dist/framework/waku.d.ts.map +0 -1
- package/dist/framework/waku.js.map +0 -1
- package/dist/highlight/client.d.ts.map +0 -1
- package/dist/highlight/client.js.map +0 -1
- package/dist/i18n/index.js.map +0 -1
- package/dist/i18n/middleware.d.ts.map +0 -1
- package/dist/i18n/middleware.js.map +0 -1
- package/dist/icon-CL3r1pNG.js.map +0 -1
- package/dist/index-BaMZ8PEK.d.ts.map +0 -1
- package/dist/index-CmGSoB4T.d.ts.map +0 -1
- package/dist/index-DxhhLscI.d.ts.map +0 -1
- package/dist/index-aE27-b16.d.ts.map +0 -1
- package/dist/link.d.ts.map +0 -1
- package/dist/link.js.map +0 -1
- package/dist/mdast-utils-B8O-41y4.js.map +0 -1
- package/dist/mdx-plugins/codeblock-utils.js.map +0 -1
- package/dist/mdx-plugins/remark-admonition.js.map +0 -1
- package/dist/mdx-plugins/remark-code-tab.js.map +0 -1
- package/dist/mdx-plugins/remark-directive-admonition.js.map +0 -1
- package/dist/mdx-plugins/remark-feedback-block.js.map +0 -1
- package/dist/mdx-plugins/remark-heading.js.map +0 -1
- package/dist/mdx-plugins/remark-image.js.map +0 -1
- package/dist/mdx-plugins/remark-mdx-files.js.map +0 -1
- package/dist/mdx-plugins/remark-mdx-mermaid.js.map +0 -1
- package/dist/mdx-plugins/remark-npm.js.map +0 -1
- package/dist/mdx-plugins/remark-steps.js.map +0 -1
- package/dist/mdx-plugins/remark-structure.js.map +0 -1
- package/dist/mixedbread-CPGJEgwq.js.map +0 -1
- package/dist/negotiation/index.d.ts.map +0 -1
- package/dist/negotiation/index.js.map +0 -1
- package/dist/normalize-url-CEfNKxaE.js.map +0 -1
- package/dist/orama-cloud-legacy-NJTbB19B.js.map +0 -1
- package/dist/orama-cloud-yicpgD0c.js.map +0 -1
- package/dist/path-CECfI3nn.js.map +0 -1
- package/dist/rehype-code-BUrju-yF.d.ts.map +0 -1
- package/dist/rehype-code-Ct5Pb6BZ.js.map +0 -1
- package/dist/rehype-toc-CTG0x7La.js.map +0 -1
- package/dist/rehype-toc-Dcgzd_Vy.d.ts.map +0 -1
- package/dist/remark-admonition-BvgS4oU1.d.ts.map +0 -1
- package/dist/remark-code-tab-Ds_BdYXz.d.ts.map +0 -1
- package/dist/remark-directive-admonition-02cR5K1L.d.ts.map +0 -1
- package/dist/remark-feedback-block-fAyt4LdQ.d.ts.map +0 -1
- package/dist/remark-heading-CSButCYt.d.ts.map +0 -1
- package/dist/remark-image-C3MnP-3r.d.ts.map +0 -1
- package/dist/remark-mdx-files-BXUiiX3M.d.ts.map +0 -1
- package/dist/remark-mdx-mermaid-C5ZBxx8x.d.ts.map +0 -1
- package/dist/remark-npm-DADZg0pf.d.ts.map +0 -1
- package/dist/remark-steps-CWEE34cT.d.ts.map +0 -1
- package/dist/remark-structure-ChKxMXnK.d.ts.map +0 -1
- package/dist/remove-undefined-Buxsprgu.js.map +0 -1
- package/dist/search/algolia.js.map +0 -1
- package/dist/search/client.d.ts.map +0 -1
- package/dist/search/client.js.map +0 -1
- package/dist/search/index.d.ts.map +0 -1
- package/dist/search/orama-cloud-legacy.d.ts.map +0 -1
- package/dist/search/orama-cloud-legacy.js.map +0 -1
- package/dist/search/orama-cloud.d.ts.map +0 -1
- package/dist/search/orama-cloud.js.map +0 -1
- package/dist/search/server.js.map +0 -1
- package/dist/search-DzqmOjzV.js.map +0 -1
- package/dist/server-CLPpotS9.d.ts.map +0 -1
- package/dist/shiki-B4NO99XD.js.map +0 -1
- package/dist/shiki-vKy7H_iw.d.ts.map +0 -1
- package/dist/source/client/index.js.map +0 -1
- package/dist/source/index.js.map +0 -1
- package/dist/source/plugins/lucide-icons.d.ts.map +0 -1
- package/dist/source/plugins/lucide-icons.js.map +0 -1
- package/dist/source/plugins/slugs.js.map +0 -1
- package/dist/source/schema.d.ts.map +0 -1
- package/dist/source/schema.js.map +0 -1
- package/dist/static-C_WBOzek.js.map +0 -1
- package/dist/toc.d.ts.map +0 -1
- package/dist/toc.js.map +0 -1
- package/dist/util-Dn-wseQ5.js.map +0 -1
- package/dist/util-d5FlPx1Z.d.ts.map +0 -1
- package/dist/utils/use-effect-event.d.ts.map +0 -1
- package/dist/utils/use-effect-event.js.map +0 -1
- package/dist/utils/use-media-query.d.ts.map +0 -1
- package/dist/utils/use-media-query.js.map +0 -1
- package/dist/utils/use-on-change.d.ts.map +0 -1
- package/dist/utils/use-on-change.js.map +0 -1
- package/dist/utils-D10VxgVc.js.map +0 -1
- /package/dist/{chunk-C9UIFEcR.js → chunk-CQNP8FC4.js} +0 -0
- /package/dist/{remark-gfm-jrvaEZw5.d.ts → remark-gfm-Cvcfjik1.d.ts} +0 -0
|
@@ -130,5 +130,4 @@ function visit(root, visitor) {
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
//#endregion
|
|
133
|
-
export { flattenTree as a, visit as c, findSiblings as i, findParent as n, getPageTreePeers as o, findPath as r, getPageTreeRoots as s, findNeighbour as t };
|
|
134
|
-
//# sourceMappingURL=utils-D10VxgVc.js.map
|
|
133
|
+
export { flattenTree as a, visit as c, findSiblings as i, findParent as n, getPageTreePeers as o, findPath as r, getPageTreeRoots as s, findNeighbour as t };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumadocs-core",
|
|
3
|
-
"version": "16.4.
|
|
3
|
+
"version": "16.4.8",
|
|
4
4
|
"description": "The React.js library for building a documentation website",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Docs",
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"access": "public"
|
|
113
113
|
},
|
|
114
114
|
"dependencies": {
|
|
115
|
-
"@formatjs/intl-localematcher": "^0.
|
|
115
|
+
"@formatjs/intl-localematcher": "^0.8.0",
|
|
116
116
|
"@orama/orama": "^3.1.18",
|
|
117
117
|
"@shikijs/rehype": "^3.21.0",
|
|
118
118
|
"@shikijs/transformers": "^3.21.0",
|
|
@@ -130,36 +130,36 @@
|
|
|
130
130
|
"scroll-into-view-if-needed": "^3.1.0",
|
|
131
131
|
"shiki": "^3.21.0",
|
|
132
132
|
"tinyglobby": "^0.2.15",
|
|
133
|
-
"unist-util-visit": "^5.
|
|
133
|
+
"unist-util-visit": "^5.1.0"
|
|
134
134
|
},
|
|
135
135
|
"devDependencies": {
|
|
136
136
|
"@mdx-js/mdx": "^3.1.1",
|
|
137
|
-
"@mixedbread/sdk": "^0.50.
|
|
137
|
+
"@mixedbread/sdk": "^0.50.1",
|
|
138
138
|
"@orama/core": "^1.2.16",
|
|
139
139
|
"@oramacloud/client": "^2.1.4",
|
|
140
|
-
"@tanstack/react-router": "1.
|
|
140
|
+
"@tanstack/react-router": "1.154.13",
|
|
141
141
|
"@types/estree-jsx": "^1.0.5",
|
|
142
142
|
"@types/hast": "^3.0.4",
|
|
143
143
|
"@types/mdast": "^4.0.4",
|
|
144
144
|
"@types/negotiator": "^0.6.4",
|
|
145
|
-
"@types/node": "25.0.
|
|
146
|
-
"@types/react": "^19.2.
|
|
145
|
+
"@types/node": "25.0.10",
|
|
146
|
+
"@types/react": "^19.2.9",
|
|
147
147
|
"@types/react-dom": "^19.2.3",
|
|
148
|
-
"algoliasearch": "5.
|
|
149
|
-
"lucide-react": "^0.
|
|
148
|
+
"algoliasearch": "5.47.0",
|
|
149
|
+
"lucide-react": "^0.563.0",
|
|
150
150
|
"mdast-util-mdx-jsx": "^3.2.0",
|
|
151
151
|
"mdast-util-mdxjs-esm": "^2.0.1",
|
|
152
|
-
"next": "16.1.
|
|
152
|
+
"next": "16.1.4",
|
|
153
153
|
"react-router": "^7.12.0",
|
|
154
154
|
"remark-directive": "^4.0.0",
|
|
155
155
|
"remark-mdx": "^3.1.1",
|
|
156
|
-
"remove-markdown": "^0.6.
|
|
156
|
+
"remove-markdown": "^0.6.3",
|
|
157
157
|
"tsdown": "^0.19.0",
|
|
158
158
|
"typescript": "^5.9.3",
|
|
159
159
|
"unified": "^11.0.5",
|
|
160
160
|
"vfile": "^6.0.3",
|
|
161
|
-
"waku": "1.0.0-alpha.
|
|
162
|
-
"zod": "^4.3.
|
|
161
|
+
"waku": "1.0.0-alpha.2",
|
|
162
|
+
"zod": "^4.3.6",
|
|
163
163
|
"eslint-config-custom": "0.0.0",
|
|
164
164
|
"tsconfig": "0.0.0"
|
|
165
165
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"advanced-tbtFDsHU.js","names":[],"sources":["../src/search/orama/search/simple.ts","../src/search/orama/search/advanced.ts"],"sourcesContent":["import { type Orama, search, type SearchParams } from '@orama/orama';\nimport { type SimpleDocument, type simpleSchema } from '@/search/orama/create-db';\nimport { createContentHighlighter, type SortedResult } from '@/search';\n\nexport async function searchSimple(\n db: Orama<typeof simpleSchema>,\n query: string,\n params: Partial<SearchParams<Orama<typeof simpleSchema>, SimpleDocument>> = {},\n): Promise<SortedResult[]> {\n const highlighter = createContentHighlighter(query);\n const result = await search(db, {\n term: query,\n tolerance: 1,\n ...params,\n boost: {\n title: 2,\n ...('boost' in params ? params.boost : undefined),\n },\n });\n\n return result.hits.map<SortedResult>((hit) => ({\n type: 'page',\n content: hit.document.title,\n breadcrumbs: hit.document.breadcrumbs,\n contentWithHighlights: highlighter.highlight(hit.document.title),\n id: hit.document.url,\n url: hit.document.url,\n }));\n}\n","import { getByID, type Orama, search, type SearchParams } from '@orama/orama';\nimport { type AdvancedDocument, type advancedSchema } from '@/search/orama/create-db';\nimport { removeUndefined } from '@/utils/remove-undefined';\nimport { createContentHighlighter, type SortedResult } from '@/search';\n\nexport async function searchAdvanced(\n db: Orama<typeof advancedSchema>,\n query: string,\n tag: string | string[] = [],\n {\n mode = 'fulltext',\n ...override\n }: Partial<SearchParams<Orama<typeof advancedSchema>, AdvancedDocument>> = {},\n): Promise<SortedResult[]> {\n if (typeof tag === 'string') tag = [tag];\n\n let params = {\n ...override,\n mode,\n where: removeUndefined({\n tags:\n tag.length > 0\n ? {\n containsAll: tag,\n }\n : undefined,\n ...override.where,\n }),\n groupBy: {\n properties: ['page_id'],\n maxResult: 8,\n ...override.groupBy,\n },\n } as SearchParams<typeof db, AdvancedDocument>;\n\n if (query.length > 0) {\n params = {\n ...params,\n term: query,\n properties: mode === 'fulltext' ? ['content'] : ['content', 'embeddings'],\n } as SearchParams<typeof db, AdvancedDocument>;\n }\n\n const highlighter = createContentHighlighter(query);\n const result = await search(db, params);\n const list: SortedResult[] = [];\n for (const item of result.groups ?? []) {\n const pageId = item.values[0] as string;\n\n const page = getByID(db, pageId);\n if (!page) continue;\n\n list.push({\n id: pageId,\n type: 'page',\n content: page.content,\n breadcrumbs: page.breadcrumbs,\n contentWithHighlights: highlighter.highlight(page.content),\n url: page.url,\n });\n\n for (const hit of item.result) {\n if (hit.document.type === 'page') continue;\n\n list.push({\n id: hit.document.id.toString(),\n content: hit.document.content,\n breadcrumbs: hit.document.breadcrumbs,\n contentWithHighlights: highlighter.highlight(hit.document.content),\n type: hit.document.type as SortedResult['type'],\n url: hit.document.url,\n });\n }\n }\n return list;\n}\n"],"mappings":";;;;;AAIA,eAAsB,aACpB,IACA,OACA,SAA4E,EAAE,EACrD;CACzB,MAAM,cAAc,yBAAyB,MAAM;AAWnD,SAVe,MAAM,OAAO,IAAI;EAC9B,MAAM;EACN,WAAW;EACX,GAAG;EACH,OAAO;GACL,OAAO;GACP,GAAI,WAAW,SAAS,OAAO,QAAQ;GACxC;EACF,CAAC,EAEY,KAAK,KAAmB,SAAS;EAC7C,MAAM;EACN,SAAS,IAAI,SAAS;EACtB,aAAa,IAAI,SAAS;EAC1B,uBAAuB,YAAY,UAAU,IAAI,SAAS,MAAM;EAChE,IAAI,IAAI,SAAS;EACjB,KAAK,IAAI,SAAS;EACnB,EAAE;;;;;ACtBL,eAAsB,eACpB,IACA,OACA,MAAyB,EAAE,EAC3B,EACE,OAAO,YACP,GAAG,aACsE,EAAE,EACpD;AACzB,KAAI,OAAO,QAAQ,SAAU,OAAM,CAAC,IAAI;CAExC,IAAI,SAAS;EACX,GAAG;EACH;EACA,OAAO,gBAAgB;GACrB,MACE,IAAI,SAAS,IACT,EACE,aAAa,KACd,GACD;GACN,GAAG,SAAS;GACb,CAAC;EACF,SAAS;GACP,YAAY,CAAC,UAAU;GACvB,WAAW;GACX,GAAG,SAAS;GACb;EACF;AAED,KAAI,MAAM,SAAS,EACjB,UAAS;EACP,GAAG;EACH,MAAM;EACN,YAAY,SAAS,aAAa,CAAC,UAAU,GAAG,CAAC,WAAW,aAAa;EAC1E;CAGH,MAAM,cAAc,yBAAyB,MAAM;CACnD,MAAM,SAAS,MAAM,OAAO,IAAI,OAAO;CACvC,MAAM,OAAuB,EAAE;AAC/B,MAAK,MAAM,QAAQ,OAAO,UAAU,EAAE,EAAE;EACtC,MAAM,SAAS,KAAK,OAAO;EAE3B,MAAM,OAAO,QAAQ,IAAI,OAAO;AAChC,MAAI,CAAC,KAAM;AAEX,OAAK,KAAK;GACR,IAAI;GACJ,MAAM;GACN,SAAS,KAAK;GACd,aAAa,KAAK;GAClB,uBAAuB,YAAY,UAAU,KAAK,QAAQ;GAC1D,KAAK,KAAK;GACX,CAAC;AAEF,OAAK,MAAM,OAAO,KAAK,QAAQ;AAC7B,OAAI,IAAI,SAAS,SAAS,OAAQ;AAElC,QAAK,KAAK;IACR,IAAI,IAAI,SAAS,GAAG,UAAU;IAC9B,SAAS,IAAI,SAAS;IACtB,aAAa,IAAI,SAAS;IAC1B,uBAAuB,YAAY,UAAU,IAAI,SAAS,QAAQ;IAClE,MAAM,IAAI,SAAS;IACnB,KAAK,IAAI,SAAS;IACnB,CAAC;;;AAGN,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"algolia-BFVpYDZ_.d.ts","names":[],"sources":["../src/search/algolia.ts"],"sourcesContent":[],"mappings":";;;;UAGiB,cAAA;;AAAjB;AA2BA;EAkBsB,GAAA,EAAA,MAAI;EAAS,KAAA,EAAA,MAAA;EAAwB,WAAA,CAAA,EAAA,MAAA;EAAc,WAAA,CAAA,EAAA,MAAA,EAAA;EAAO;AAMhF;AAyDA;EACU,GAAA,EAAA,MAAA;EAEG,UAAA,EAjGC,cAiGD;EACV;;AASH;;;;;;;UA9FiB,WAAA;;;;;;;;aASJ;;;;;;;;iBASS,IAAA,SAAa,wBAAwB,cAAc;iBAMnD,gBAAA,SAAyB,mCAAmC;iBAyD5D,eAAA,SACZ,6CAEG,mBACV;UASc,SAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"algolia-Dbt0kj8j.js","names":[],"sources":["../src/search/client/algolia.ts"],"sourcesContent":["import type { BaseIndex } from '@/search/algolia';\nimport type { Hit, LiteClient, SearchResponse } from 'algoliasearch/lite';\nimport { createContentHighlighter, type SortedResult } from '@/search';\n\nexport interface AlgoliaOptions {\n indexName: string;\n client: LiteClient;\n\n /**\n * Filter results with specific tag.\n */\n tag?: string;\n\n locale?: string;\n\n onSearch?: (\n query: string,\n tag?: string,\n locale?: string,\n ) => Promise<{\n results: SearchResponse<BaseIndex>[];\n }>;\n}\n\nexport function groupResults(hits: Hit<BaseIndex>[]): SortedResult[] {\n const grouped: SortedResult[] = [];\n const scannedUrls = new Set<string>();\n\n for (const hit of hits) {\n if (!scannedUrls.has(hit.url)) {\n scannedUrls.add(hit.url);\n\n grouped.push({\n id: hit.url,\n type: 'page',\n breadcrumbs: hit.breadcrumbs,\n url: hit.url,\n content: hit.title,\n });\n }\n\n grouped.push({\n id: hit.objectID,\n type: hit.content === hit.section ? 'heading' : 'text',\n url: hit.section_id ? `${hit.url}#${hit.section_id}` : hit.url,\n content: hit.content,\n });\n }\n\n return grouped;\n}\n\nexport async function searchDocs(\n query: string,\n { indexName, onSearch, client, locale, tag }: AlgoliaOptions,\n): Promise<SortedResult[]> {\n if (query.trim().length === 0) return [];\n\n const result = onSearch\n ? await onSearch(query, tag, locale)\n : await client.searchForHits<BaseIndex>({\n requests: [\n {\n type: 'default',\n indexName,\n query,\n distinct: 5,\n hitsPerPage: 10,\n filters: tag ? `tag:${tag}` : undefined,\n },\n ],\n });\n\n const highlighter = createContentHighlighter(query);\n return groupResults(result.results[0].hits).flatMap((hit) => {\n if (hit.type === 'page') {\n return {\n ...hit,\n contentWithHighlights: hit.contentWithHighlights ?? highlighter.highlight(hit.content),\n };\n }\n\n return [];\n });\n}\n"],"mappings":";;;AAwBA,SAAgB,aAAa,MAAwC;CACnE,MAAM,UAA0B,EAAE;CAClC,MAAM,8BAAc,IAAI,KAAa;AAErC,MAAK,MAAM,OAAO,MAAM;AACtB,MAAI,CAAC,YAAY,IAAI,IAAI,IAAI,EAAE;AAC7B,eAAY,IAAI,IAAI,IAAI;AAExB,WAAQ,KAAK;IACX,IAAI,IAAI;IACR,MAAM;IACN,aAAa,IAAI;IACjB,KAAK,IAAI;IACT,SAAS,IAAI;IACd,CAAC;;AAGJ,UAAQ,KAAK;GACX,IAAI,IAAI;GACR,MAAM,IAAI,YAAY,IAAI,UAAU,YAAY;GAChD,KAAK,IAAI,aAAa,GAAG,IAAI,IAAI,GAAG,IAAI,eAAe,IAAI;GAC3D,SAAS,IAAI;GACd,CAAC;;AAGJ,QAAO;;AAGT,eAAsB,WACpB,OACA,EAAE,WAAW,UAAU,QAAQ,QAAQ,OACd;AACzB,KAAI,MAAM,MAAM,CAAC,WAAW,EAAG,QAAO,EAAE;CAExC,MAAM,SAAS,WACX,MAAM,SAAS,OAAO,KAAK,OAAO,GAClC,MAAM,OAAO,cAAyB,EACpC,UAAU,CACR;EACE,MAAM;EACN;EACA;EACA,UAAU;EACV,aAAa;EACb,SAAS,MAAM,OAAO,QAAQ;EAC/B,CACF,EACF,CAAC;CAEN,MAAM,cAAc,yBAAyB,MAAM;AACnD,QAAO,aAAa,OAAO,QAAQ,GAAG,KAAK,CAAC,SAAS,QAAQ;AAC3D,MAAI,IAAI,SAAS,OACf,QAAO;GACL,GAAG;GACH,uBAAuB,IAAI,yBAAyB,YAAY,UAAU,IAAI,QAAQ;GACvF;AAGH,SAAO,EAAE;GACT"}
|
package/dist/breadcrumb.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"breadcrumb.d.ts","names":[],"sources":["../src/breadcrumb.tsx"],"sourcesContent":[],"mappings":";;;;UAKiB,cAAA;QACT;EADS,GAAA,CAAA,EAAA,MAAA;AAKjB;AA8BgB,UA9BC,iBAAA,CA8BY;EAErB;;;;AAMR;EAEQ,WAAA,CAAA,EAAA,OAAA,GAAA;IACG;;;IAKK,GAAA,EAAA,MAAA;EACR,CAAA;EACA;;;;AAyDR;;;;;;;;;iBA3EgB,aAAA,oBAER,gBACI,oBACT;iBAIa,kBAAA,oBAER,gBACG,oBACR;iBAIa,0BAAA,OACR,YACA,iBACG,oBACR;;;;;;;;;iBAuDa,UAAA,QAAkB,sBAA+B"}
|
package/dist/breadcrumb.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"breadcrumb.js","names":[],"sources":["../src/breadcrumb.tsx"],"sourcesContent":["import { type ReactNode, useMemo } from 'react';\nimport type * as PageTree from '@/page-tree/definitions';\nimport { normalizeUrl } from '@/utils/normalize-url';\nimport { findPath } from '@/page-tree/utils';\n\nexport interface BreadcrumbItem {\n name: ReactNode;\n url?: string;\n}\n\nexport interface BreadcrumbOptions {\n /**\n * Include the root folders in the breadcrumb items array.\n *\n * @defaultValue false\n */\n includeRoot?:\n | boolean\n | {\n /**\n * Specify the url of root\n */\n url: string;\n };\n\n /**\n * Include the page itself in the breadcrumb items array\n *\n * @defaultValue false\n */\n includePage?: boolean;\n\n /**\n * Count separator as an item\n *\n * @defaultValue false\n */\n includeSeparator?: boolean;\n}\n\nexport function useBreadcrumb(\n url: string,\n tree: PageTree.Root,\n options?: BreadcrumbOptions,\n): BreadcrumbItem[] {\n return useMemo(() => getBreadcrumbItems(url, tree, options), [tree, url, options]);\n}\n\nexport function getBreadcrumbItems(\n url: string,\n tree: PageTree.Root,\n options: BreadcrumbOptions = {},\n): BreadcrumbItem[] {\n return getBreadcrumbItemsFromPath(tree, searchPath(tree.children, url) ?? [], options);\n}\n\nexport function getBreadcrumbItemsFromPath(\n tree: PageTree.Root,\n path: PageTree.Node[],\n options: BreadcrumbOptions,\n): BreadcrumbItem[] {\n const { includePage = false, includeSeparator = false, includeRoot = false } = options;\n let items: BreadcrumbItem[] = [];\n for (let i = 0; i < path.length; i++) {\n const item = path[i];\n\n switch (item.type) {\n case 'page':\n if (includePage)\n items.push({\n name: item.name,\n url: item.url,\n });\n break;\n case 'folder':\n if (item.root && !includeRoot) {\n items = [];\n break;\n }\n\n // only show the index node of folders if possible\n if (i === path.length - 1 || item.index !== path[i + 1]) {\n items.push({\n name: item.name,\n url: item.index?.url,\n });\n }\n break;\n case 'separator':\n if (item.name && includeSeparator)\n items.push({\n name: item.name,\n });\n break;\n }\n }\n\n if (includeRoot) {\n items.unshift({\n name: tree.name,\n url: typeof includeRoot === 'object' ? includeRoot.url : undefined,\n });\n }\n\n return items;\n}\n\n/**\n * Search the path of a node in the tree by a specified url\n *\n * - When the page doesn't exist, return null\n *\n * @returns The path to the target node from root\n * @internal Don't use this on your own\n */\nexport function searchPath(nodes: PageTree.Node[], url: string): PageTree.Node[] | null {\n const normalizedUrl = normalizeUrl(url);\n\n return findPath(nodes, (node) => node.type === 'page' && node.url === normalizedUrl);\n}\n"],"mappings":";;;;;AAwCA,SAAgB,cACd,KACA,MACA,SACkB;AAClB,QAAO,cAAc,mBAAmB,KAAK,MAAM,QAAQ,EAAE;EAAC;EAAM;EAAK;EAAQ,CAAC;;AAGpF,SAAgB,mBACd,KACA,MACA,UAA6B,EAAE,EACb;AAClB,QAAO,2BAA2B,MAAM,WAAW,KAAK,UAAU,IAAI,IAAI,EAAE,EAAE,QAAQ;;AAGxF,SAAgB,2BACd,MACA,MACA,SACkB;CAClB,MAAM,EAAE,cAAc,OAAO,mBAAmB,OAAO,cAAc,UAAU;CAC/E,IAAI,QAA0B,EAAE;AAChC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,OAAO,KAAK;AAElB,UAAQ,KAAK,MAAb;GACE,KAAK;AACH,QAAI,YACF,OAAM,KAAK;KACT,MAAM,KAAK;KACX,KAAK,KAAK;KACX,CAAC;AACJ;GACF,KAAK;AACH,QAAI,KAAK,QAAQ,CAAC,aAAa;AAC7B,aAAQ,EAAE;AACV;;AAIF,QAAI,MAAM,KAAK,SAAS,KAAK,KAAK,UAAU,KAAK,IAAI,GACnD,OAAM,KAAK;KACT,MAAM,KAAK;KACX,KAAK,KAAK,OAAO;KAClB,CAAC;AAEJ;GACF,KAAK;AACH,QAAI,KAAK,QAAQ,iBACf,OAAM,KAAK,EACT,MAAM,KAAK,MACZ,CAAC;AACJ;;;AAIN,KAAI,YACF,OAAM,QAAQ;EACZ,MAAM,KAAK;EACX,KAAK,OAAO,gBAAgB,WAAW,YAAY,MAAM;EAC1D,CAAC;AAGJ,QAAO;;;;;;;;;;AAWT,SAAgB,WAAW,OAAwB,KAAqC;CACtF,MAAM,gBAAgB,aAAa,IAAI;AAEvC,QAAO,SAAS,QAAQ,SAAS,KAAK,SAAS,UAAU,KAAK,QAAQ,cAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codeblock-utils-CdA7nXLP.d.ts","names":[],"sources":["../src/mdx-plugins/codeblock-utils.ts"],"sourcesContent":[],"mappings":";;;;UAGiB,oBAAA;eACF;EADE,YAAA,CAAA,EAAA,MAAA;EACF,OAAA,CAAA,EAAA;IASA,EAAA,EAAA,MAAA;EAAe,CAAA,GAAA,KAAA;EAIhB,QAAA,EAAA;IAAY,KAAA,EAAA,MAAA;IAIV,QAAA,EAAA,CARD,YAQsB,GARP,IAQO,CAAA,EAAA;EACnC,CAAA,EAAA;EACA,IAAA,EAAA;IACA,KAAA,EAAA,MAAA;IACA,QAAA,EARY,YAQZ,EAAA;EAEC,CAAA,EAAA;;AAAwC,iBAN3B,qBAAA,CAM2B;EAAA,OAAA;EAAA,YAAA;EAAA,QAAA;EAAA,IAAA;EAAA,GAAA;AAAA,CAAA,EAAxC,oBAAwC,CAAA,EAAjB,iBAAiB;AA6D1B,UAAA,mBAAmB,CAAA,aAAA,MAAA,GAAA,MAAA,CAAA,CAAA;EACP,UAAA,EAAf,OAAe,CAAP,MAAO,CAAA,IAAA,EAAA,MAAA,GAAA,IAAA,CAAA,CAAA;EAAP,IAAA,EAAA,MAAA;;;AAOtB;;AAGuB,iBAHP,wBAGO,CAAA,aAAA,MAAA,GAAA,MAAA,CAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EADN,IACM,EAAA,CAAA,EAApB,mBAAoB,CAAA,IAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","names":[],"sources":["../../src/content/github.ts"],"sourcesContent":[],"mappings":";UAQiB,0BAAA;EAAA;AA6CjB;;EAEE,IAAA,EAAA,MAAA;EACA;EACA,KAAA,EAAA,MAAA;EACA;;;EAGQ,IAAA,EAAA,MAAA;EACP;;;EAAoC,KAAA,CAAA,EAAA,MAAA;;;;;;;;;;;;;;WApB5B;YAEC;;;;;;;;iBASU,iBAAA;;;;;;;;UAQZ;GACP,6BAA6B,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","names":[],"sources":["../../src/content/github.ts"],"sourcesContent":["type Response = {\n commit: {\n committer: {\n date: string;\n };\n };\n}[];\n\nexport interface GetGithubLastCommitOptions {\n /**\n * Repository name, like \"fumadocs\"\n */\n repo: string;\n\n /** Owner of repository */\n owner: string;\n\n /**\n * Path to file\n */\n path: string;\n\n /**\n * GitHub access token\n */\n token?: string;\n\n /**\n * SHA or ref (branch or tag) name.\n */\n sha?: string;\n\n /**\n * Base URL for GitHub API\n * @default \"https://api.github.com\"\n * @link https://docs.github.com/en/get-started/using-github-docs/about-versions-of-github-docs#determining-which-github-product-you-use\n */\n baseUrl?: string;\n\n /**\n * Custom query parameters\n */\n params?: Record<string, string>;\n\n options?: RequestInit;\n}\n\n/**\n * Get the last edit time of a file using GitHub API\n *\n * By default, this will cache the result forever.\n * Set `options.next.revalidate` to customise this.\n */\nexport async function getGithubLastEdit({\n repo,\n token,\n owner,\n path,\n sha,\n baseUrl = 'https://api.github.com',\n options = {},\n params: customParams = {},\n}: GetGithubLastCommitOptions): Promise<Date | null> {\n const headers = new Headers(options.headers);\n const params = new URLSearchParams();\n params.set('path', path);\n params.set('page', '1');\n params.set('per_page', '1');\n\n if (sha) params.set('sha', sha);\n\n for (const [key, value] of Object.entries(customParams)) {\n params.set(key, value);\n }\n\n if (token) {\n headers.append('authorization', token);\n }\n\n const res = await fetch(`${baseUrl}/repos/${owner}/${repo}/commits?${params.toString()}`, {\n cache: 'force-cache',\n ...options,\n headers,\n });\n\n if (!res.ok) throw new Error(`Failed to fetch last edit time from Git ${await res.text()}`);\n const data = (await res.json()) as Response;\n\n if (data.length === 0) return null;\n return new Date(data[0].commit.committer.date);\n}\n"],"mappings":";;;;;;;AAqDA,eAAsB,kBAAkB,EACtC,MACA,OACA,OACA,MACA,KACA,UAAU,0BACV,UAAU,EAAE,EACZ,QAAQ,eAAe,EAAE,IAC0B;CACnD,MAAM,UAAU,IAAI,QAAQ,QAAQ,QAAQ;CAC5C,MAAM,SAAS,IAAI,iBAAiB;AACpC,QAAO,IAAI,QAAQ,KAAK;AACxB,QAAO,IAAI,QAAQ,IAAI;AACvB,QAAO,IAAI,YAAY,IAAI;AAE3B,KAAI,IAAK,QAAO,IAAI,OAAO,IAAI;AAE/B,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,aAAa,CACrD,QAAO,IAAI,KAAK,MAAM;AAGxB,KAAI,MACF,SAAQ,OAAO,iBAAiB,MAAM;CAGxC,MAAM,MAAM,MAAM,MAAM,GAAG,QAAQ,SAAS,MAAM,GAAG,KAAK,WAAW,OAAO,UAAU,IAAI;EACxF,OAAO;EACP,GAAG;EACH;EACD,CAAC;AAEF,KAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,2CAA2C,MAAM,IAAI,MAAM,GAAG;CAC3F,MAAM,OAAQ,MAAM,IAAI,MAAM;AAE9B,KAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,QAAO,IAAI,KAAK,KAAK,GAAG,OAAO,UAAU,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/content/index.ts"],"sourcesContent":[],"mappings":";;;;;;;UAqBiB,aAAA;eACF;;AADE,iBAIK,QAAA,CAHP;EAAA,QAAU,EAIb,OAJa;EAAA,aAAA;EAAA,aAAA;EAAA,GAAA;CAAA,EAQtB,aARsB,GAAA;EAGH,aAAQ,CAAA,EAMZ,aANY;EAClB,aAAA,CAAA,EAMM,aANN;EACV,QAAA,EAMU,UANV;CACA,CAAA,EAMD,OANC,CAMD,MAAA,CAAA,YANC,CAAA,OAAA,EAAA,MAAA,GAKoB,MAAA,CACrB,qBANC,CAAA,GAAA,CAAA,CAAA,GAMD,QANC,CAMD,SANC,CAAA,GAAA,CAAA,MAAA,GAAA,MAAA,GAAA,MAAA,GAAA,OAAA,GAMD,MAAA,CAAA,WAAA,GAAA,MAAA,CAAA,YANC,CAAA,OAAA,EAAA,MAAA,GAMD,MAAA,CAAA,qBANC,CAAA,GAAA,CAAA,CAAA,GAMD,QANC,CAMD,SANC,CAAA,GAAA,IAAA,GAAA,SAAA,CAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/content/index.ts"],"sourcesContent":["import { remark } from 'remark';\nimport remarkGfm from 'remark-gfm';\nimport remarkRehype from 'remark-rehype';\nimport type { Compatible } from 'vfile';\nimport { type Components, toJsxRuntime } from 'hast-util-to-jsx-runtime';\nimport type { Root } from 'hast';\nimport * as JsxRuntime from 'react/jsx-runtime';\nimport type { PluggableList, Processor } from 'unified';\nimport type { ReactNode } from 'react';\n\nfunction rehypeReact(this: Processor, options: MarkdownProps = {}) {\n this.compiler = (tree, file) => {\n return toJsxRuntime(tree as Root, {\n development: false,\n filePath: file.path,\n ...JsxRuntime,\n ...options,\n });\n };\n}\n\nexport interface MarkdownProps {\n components?: Components;\n}\n\nexport async function Markdown({\n children: content,\n remarkPlugins = [],\n rehypePlugins = [],\n ...options\n}: MarkdownProps & {\n remarkPlugins?: PluggableList;\n rehypePlugins?: PluggableList;\n children: Compatible;\n}) {\n const processor = remark()\n .use(remarkGfm)\n .use(remarkPlugins)\n .use(remarkRehype)\n .use(rehypePlugins)\n .use(rehypeReact, options);\n\n return (await processor.process(content)).result as ReactNode;\n}\n"],"mappings":";;;;;;;AAUA,SAAS,YAA6B,UAAyB,EAAE,EAAE;AACjE,MAAK,YAAY,MAAM,SAAS;AAC9B,SAAO,aAAa,MAAc;GAChC,aAAa;GACb,UAAU,KAAK;GACf,GAAG;GACH,GAAG;GACJ,CAAC;;;AAQN,eAAsB,SAAS,EAC7B,UAAU,SACV,gBAAgB,EAAE,EAClB,gBAAgB,EAAE,EAClB,GAAG,WAKF;AAQD,SAAQ,MAPU,QAAQ,CACvB,IAAI,UAAU,CACd,IAAI,cAAc,CAClB,IAAI,aAAa,CACjB,IAAI,cAAc,CAClB,IAAI,aAAa,QAAQ,CAEJ,QAAQ,QAAQ,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preset-bundler.d.ts","names":[],"sources":["../../../src/content/mdx/preset-bundler.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;KAIY,uBAAA,GAA0B,KACpC,YAAY;kBAGI;kBACA;2BAES;yBACF;uBACF;yBACE;qBACJ;sBACC;AAZtB,CAAA;;;;AAIkB,iBAcI,SAAA,CAdJ,OAAA,CAAA,EAcuB,uBAdvB,CAAA,EAcsD,OAdtD,CAc8D,gBAd9D,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preset-bundler.js","names":[],"sources":["../../../src/content/mdx/preset-bundler.ts"],"sourcesContent":["import type { ProcessorOptions } from '@mdx-js/mdx';\nimport type * as Plugins from '@/mdx-plugins';\nimport { resolvePlugins, type ResolvePlugins } from '@/content/mdx/util';\n\nexport type MDXBundlerPresetOptions = Omit<\n NonNullable<ProcessorOptions>,\n 'rehypePlugins' | 'remarkPlugins'\n> & {\n rehypePlugins?: ResolvePlugins;\n remarkPlugins?: ResolvePlugins;\n\n remarkStructureOptions?: Plugins.StructureOptions | false;\n remarkHeadingOptions?: Plugins.RemarkHeadingOptions;\n remarkImageOptions?: Plugins.RemarkImageOptions | false;\n remarkCodeTabOptions?: Plugins.RemarkCodeTabOptions | false;\n remarkNpmOptions?: Plugins.RemarkNpmOptions | false;\n rehypeCodeOptions?: Plugins.RehypeCodeOptions | false;\n};\n\n/**\n * apply MDX processor presets\n */\nexport async function mdxPreset(options: MDXBundlerPresetOptions = {}): Promise<ProcessorOptions> {\n const {\n rehypeCodeOptions,\n remarkImageOptions,\n remarkHeadingOptions,\n remarkStructureOptions,\n remarkCodeTabOptions,\n remarkNpmOptions,\n ...mdxOptions\n } = options;\n\n const remarkPlugins = await resolvePlugins(\n (v) => [\n import('remark-gfm').then((mod) => mod.default),\n import('@/mdx-plugins/remark-heading').then((mod) => [\n mod.remarkHeading,\n {\n generateToc: false,\n ...remarkHeadingOptions,\n },\n ]),\n remarkImageOptions !== false &&\n import('@/mdx-plugins/remark-image').then((mod) => [\n mod.remarkImage,\n {\n ...remarkImageOptions,\n useImport: remarkImageOptions?.useImport ?? true,\n },\n ]),\n remarkCodeTabOptions !== false &&\n import('@/mdx-plugins/remark-code-tab').then((mod) => [\n mod.remarkCodeTab,\n remarkCodeTabOptions,\n ]),\n remarkNpmOptions !== false &&\n import('@/mdx-plugins/remark-npm').then((mod) => [mod.remarkNpm, remarkNpmOptions]),\n ...v,\n remarkStructureOptions !== false &&\n import('@/mdx-plugins/remark-structure').then((mod) => [\n mod.remarkStructure,\n {\n exportAs: 'structuredData',\n ...remarkStructureOptions,\n } satisfies Plugins.StructureOptions,\n ]),\n ],\n mdxOptions.remarkPlugins,\n );\n\n const rehypePlugins = await resolvePlugins(\n (v) => [\n rehypeCodeOptions !== false &&\n import('@/mdx-plugins/rehype-code').then((mod) => [mod.rehypeCode, rehypeCodeOptions]),\n ...v,\n import('@/mdx-plugins/rehype-toc').then((mod) => mod.rehypeToc),\n ],\n mdxOptions.rehypePlugins,\n );\n\n return {\n ...mdxOptions,\n remarkPlugins,\n rehypePlugins,\n };\n}\n"],"mappings":";;;;;;AAsBA,eAAsB,UAAU,UAAmC,EAAE,EAA6B;CAChG,MAAM,EACJ,mBACA,oBACA,sBACA,wBACA,sBACA,kBACA,GAAG,eACD;CAEJ,MAAM,gBAAgB,MAAM,gBACzB,MAAM;EACL,OAAO,cAAc,MAAM,QAAQ,IAAI,QAAQ;EAC/C,OAAO,uCAAgC,MAAM,QAAQ,CACnD,IAAI,eACJ;GACE,aAAa;GACb,GAAG;GACJ,CACF,CAAC;EACF,uBAAuB,SACrB,OAAO,qCAA8B,MAAM,QAAQ,CACjD,IAAI,aACJ;GACE,GAAG;GACH,WAAW,oBAAoB,aAAa;GAC7C,CACF,CAAC;EACJ,yBAAyB,SACvB,OAAO,wCAAiC,MAAM,QAAQ,CACpD,IAAI,eACJ,qBACD,CAAC;EACJ,qBAAqB,SACnB,OAAO,mCAA4B,MAAM,QAAQ,CAAC,IAAI,WAAW,iBAAiB,CAAC;EACrF,GAAG;EACH,2BAA2B,SACzB,OAAO,yCAAkC,MAAM,QAAQ,CACrD,IAAI,iBACJ;GACE,UAAU;GACV,GAAG;GACJ,CACF,CAAC;EACL,EACD,WAAW,cACZ;CAED,MAAM,gBAAgB,MAAM,gBACzB,MAAM;EACL,sBAAsB,SACpB,OAAO,oCAA6B,MAAM,QAAQ,CAAC,IAAI,YAAY,kBAAkB,CAAC;EACxF,GAAG;EACH,OAAO,mCAA4B,MAAM,QAAQ,IAAI,UAAU;EAChE,EACD,WAAW,cACZ;AAED,QAAO;EACL,GAAG;EACH;EACA;EACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preset-runtime.d.ts","names":[],"sources":["../../../src/content/mdx/preset-runtime.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;KAIY,uBAAA,GAA0B,KACpC,YAAY;kBAGI;kBACA;2BAES;yBACF;uBACF;yBACE;qBACJ;sBACC;AAZtB,CAAA;;;;AAIkB,iBAcI,SAAA,CAdJ,OAAA,CAAA,EAcuB,uBAdvB,CAAA,EAcsD,OAdtD,CAc8D,gBAd9D,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preset-runtime.js","names":[],"sources":["../../../src/content/mdx/preset-runtime.ts"],"sourcesContent":["import type { ProcessorOptions } from '@mdx-js/mdx';\nimport type * as Plugins from '@/mdx-plugins';\nimport { resolvePlugins, type ResolvePlugins } from '@/content/mdx/util';\n\nexport type MDXRuntimePresetOptions = Omit<\n NonNullable<ProcessorOptions>,\n 'rehypePlugins' | 'remarkPlugins'\n> & {\n rehypePlugins?: ResolvePlugins;\n remarkPlugins?: ResolvePlugins;\n\n remarkStructureOptions?: Plugins.StructureOptions | false;\n remarkHeadingOptions?: Plugins.RemarkHeadingOptions;\n remarkImageOptions?: Plugins.RemarkImageOptions | false;\n remarkCodeTabOptions?: Plugins.RemarkCodeTabOptions | false;\n remarkNpmOptions?: Plugins.RemarkNpmOptions | false;\n rehypeCodeOptions?: Plugins.RehypeCodeOptions | false;\n};\n\n/**\n * apply MDX processor presets\n */\nexport async function mdxPreset(options: MDXRuntimePresetOptions = {}): Promise<ProcessorOptions> {\n const {\n rehypeCodeOptions,\n remarkImageOptions,\n remarkHeadingOptions,\n remarkStructureOptions,\n remarkCodeTabOptions,\n remarkNpmOptions,\n outputFormat = 'function-body',\n ...mdxOptions\n } = options;\n\n const remarkPlugins = await resolvePlugins(\n (v) => [\n import('remark-gfm').then((mod) => mod.default),\n import('@/mdx-plugins/remark-heading').then((mod) => [\n mod.remarkHeading,\n {\n generateToc: false,\n ...remarkHeadingOptions,\n },\n ]),\n remarkImageOptions !== false &&\n import('@/mdx-plugins/remark-image').then((mod) => [mod.remarkImage, remarkImageOptions]),\n remarkCodeTabOptions !== false &&\n import('@/mdx-plugins/remark-code-tab').then((mod) => [\n mod.remarkCodeTab,\n remarkCodeTabOptions,\n ]),\n remarkNpmOptions !== false &&\n import('@/mdx-plugins/remark-npm').then((mod) => [mod.remarkNpm, remarkNpmOptions]),\n ...v,\n remarkStructureOptions !== false &&\n import('@/mdx-plugins/remark-structure').then((mod) => [\n mod.remarkStructure,\n {\n exportAs: 'structuredData',\n ...remarkStructureOptions,\n } satisfies Plugins.StructureOptions,\n ]),\n ],\n mdxOptions.remarkPlugins,\n );\n\n const rehypePlugins = await resolvePlugins(\n (v) => [\n rehypeCodeOptions !== false &&\n import('@/mdx-plugins/rehype-code').then((mod) => [mod.rehypeCode, rehypeCodeOptions]),\n ...v,\n import('@/mdx-plugins/rehype-toc').then((mod) => mod.rehypeToc),\n ],\n mdxOptions.rehypePlugins,\n );\n\n return {\n ...mdxOptions,\n outputFormat,\n remarkPlugins,\n rehypePlugins,\n };\n}\n"],"mappings":";;;;;;AAsBA,eAAsB,UAAU,UAAmC,EAAE,EAA6B;CAChG,MAAM,EACJ,mBACA,oBACA,sBACA,wBACA,sBACA,kBACA,eAAe,iBACf,GAAG,eACD;CAEJ,MAAM,gBAAgB,MAAM,gBACzB,MAAM;EACL,OAAO,cAAc,MAAM,QAAQ,IAAI,QAAQ;EAC/C,OAAO,uCAAgC,MAAM,QAAQ,CACnD,IAAI,eACJ;GACE,aAAa;GACb,GAAG;GACJ,CACF,CAAC;EACF,uBAAuB,SACrB,OAAO,qCAA8B,MAAM,QAAQ,CAAC,IAAI,aAAa,mBAAmB,CAAC;EAC3F,yBAAyB,SACvB,OAAO,wCAAiC,MAAM,QAAQ,CACpD,IAAI,eACJ,qBACD,CAAC;EACJ,qBAAqB,SACnB,OAAO,mCAA4B,MAAM,QAAQ,CAAC,IAAI,WAAW,iBAAiB,CAAC;EACrF,GAAG;EACH,2BAA2B,SACzB,OAAO,yCAAkC,MAAM,QAAQ,CACrD,IAAI,iBACJ;GACE,UAAU;GACV,GAAG;GACJ,CACF,CAAC;EACL,EACD,WAAW,cACZ;CAED,MAAM,gBAAgB,MAAM,gBACzB,MAAM;EACL,sBAAsB,SACpB,OAAO,oCAA6B,MAAM,QAAQ,CAAC,IAAI,YAAY,kBAAkB,CAAC;EACxF,GAAG;EACH,OAAO,mCAA4B,MAAM,QAAQ,IAAI,UAAU;EAChE,EACD,WAAW,cACZ;AAED,QAAO;EACL,GAAG;EACH;EACA;EACA;EACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toc.d.ts","names":[],"sources":["../../src/content/toc.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAWA;AAQA;;AAEiB,iBAVD,kBAAA,CAUC,OAAA,EAV2B,UAU3B,CAAA,EAVwC,WAUxC,EAAA;;;;;;;iBAFD,kBAAA,UACL,2BACM,gBACd,QAAQ"}
|
package/dist/content/toc.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toc.js","names":["result"],"sources":["../../src/content/toc.ts"],"sourcesContent":["import { remark } from 'remark';\nimport { remarkHeading } from '@/mdx-plugins/remark-heading';\nimport type { PluggableList } from 'unified';\nimport type { Compatible } from 'vfile';\nimport type { TOCItemType } from '@/toc';\n\n/**\n * Get Table of Contents from markdown/mdx document (using remark)\n *\n * @param content - Markdown content or file\n */\nexport function getTableOfContents(content: Compatible): TOCItemType[];\n\n/**\n * Get Table of Contents from markdown/mdx document (using remark)\n *\n * @param content - Markdown content or file\n * @param remarkPlugins - remark plugins to be applied first\n */\nexport function getTableOfContents(\n content: Compatible,\n remarkPlugins: PluggableList,\n): Promise<TOCItemType[]>;\n\nexport function getTableOfContents(\n content: Compatible,\n remarkPlugins?: PluggableList,\n): TOCItemType[] | Promise<TOCItemType[]> {\n if (remarkPlugins) {\n return remark()\n .use(remarkPlugins)\n .use(remarkHeading)\n .process(content)\n .then((result) => {\n if ('toc' in result.data) return result.data.toc as TOCItemType[];\n\n return [];\n });\n }\n\n // compatible with sync usages\n const result = remark().use(remarkHeading).processSync(content);\n\n if ('toc' in result.data) return result.data.toc as TOCItemType[];\n return [];\n}\n"],"mappings":";;;;;AAwBA,SAAgB,mBACd,SACA,eACwC;AACxC,KAAI,cACF,QAAO,QAAQ,CACZ,IAAI,cAAc,CAClB,IAAI,cAAc,CAClB,QAAQ,QAAQ,CAChB,MAAM,aAAW;AAChB,MAAI,SAASA,SAAO,KAAM,QAAOA,SAAO,KAAK;AAE7C,SAAO,EAAE;GACT;CAIN,MAAM,SAAS,QAAQ,CAAC,IAAI,cAAc,CAAC,YAAY,QAAQ;AAE/D,KAAI,SAAS,OAAO,KAAM,QAAO,OAAO,KAAK;AAC7C,QAAO,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"definitions-Ca2P2viV.d.ts","names":[],"sources":["../src/page-tree/definitions.ts"],"sourcesContent":[],"mappings":";;;UAEU,EAAA;;AAF6B;AASvC;EACQ,GAAA,CAAA,EAAA,MAAA;;AAKK,UANI,IAAA,SAAa,EAMjB,CAAA;EANiB,IAAA,EACtB,SADsB;EAAE,QAAA,EAEpB,IAFoB,EAAA;EASpB;;;EAA0B,QAAA,CAAA,EAHzB,IAGyB;;AAErB,KAFL,IAAA,GAAO,IAEG,GAFI,SAEJ,GAFgB,MAEhB;AASd,UATS,IAAA,SAAa,EAStB,CAAA;EASQ;;;EAlBgB,IAAA,CAAA,EAAA;IAsBf,IAAA,EAAA,MAAU;EAElB,CAAA;EACA,IAAA,EAAA,MAAA;EAH0B,IAAA,EAb3B,SAa2B;EAAE,GAAA,EAAA,MAAA;EAMpB;;;;;EAgBL,QAAA,CAAA,EAAA,OAAA;EAhBoB,WAAA,CAAA,EAVhB,SAUgB;EAAE,IAAA,CAAA,EATzB,SASyB;;UANjB,SAAA,SAAkB;;SAE1B;SACA;;UAGQ,MAAA,SAAe;;;;;;;;QASxB;gBACQ;;;;UAIN;SACD;YACG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-link.d.ts","names":[],"sources":["../src/dynamic-link.tsx"],"sourcesContent":[],"mappings":";;;;KAMY,gBAAA,GAAmB;;;AAA/B;AAQA;;AAAwB,cAAX,WAAW,EAAA,MAAA,CAAA,yBAAA,CAAA,SAAA,GAAA,MAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,CAAA"}
|
package/dist/dynamic-link.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-link.js","names":[],"sources":["../src/dynamic-link.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, useMemo } from 'react';\nimport Link, { type LinkProps } from './link';\nimport { useParams } from '@/framework';\n\nexport type DynamicLinkProps = LinkProps;\n\n/**\n * Extends the default `Link` component\n *\n * It supports dynamic hrefs, which means you can use `/[lang]/my-page` with `dynamicHrefs` enabled\n */\n\nexport const DynamicLink = forwardRef<HTMLAnchorElement, DynamicLinkProps>(\n ({ href, ...props }, ref) => {\n const params = useParams();\n\n const url = useMemo(() => {\n return href?.replace(/\\[.*]/, (key) => {\n const mappedKey = key.slice(1, -1);\n const value = mappedKey in params ? params[mappedKey] : undefined;\n if (!value) return '';\n\n return typeof value === 'string' ? value : value.join('/');\n });\n }, [params, href]);\n\n return <Link ref={ref} href={url} {...props} />;\n },\n);\n\nDynamicLink.displayName = 'DynamicLink';\n\nexport default DynamicLink;\n"],"mappings":";;;;;;;;;;;;;AAcA,MAAa,cAAc,YACxB,EAAE,MAAM,GAAG,SAAS,QAAQ;CAC3B,MAAM,SAAS,WAAW;AAY1B,QAAO,oBAAC;EAAU;EAAK,MAVX,cAAc;AACxB,UAAO,MAAM,QAAQ,UAAU,QAAQ;IACrC,MAAM,YAAY,IAAI,MAAM,GAAG,GAAG;IAClC,MAAM,QAAQ,aAAa,SAAS,OAAO,aAAa;AACxD,QAAI,CAAC,MAAO,QAAO;AAEnB,WAAO,OAAO,UAAU,WAAW,QAAQ,MAAM,KAAK,IAAI;KAC1D;KACD,CAAC,QAAQ,KAAK,CAAC;EAEgB,GAAI;GAAS;EAElD;AAED,YAAY,cAAc;AAE1B,2BAAe"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-CiphcAUR.js","names":[],"sources":["../src/search/client/fetch.ts"],"sourcesContent":["import type { SortedResult } from '@/search';\n\nexport interface FetchOptions {\n /**\n * API route for search endpoint, support absolute URLs.\n *\n * @defaultValue '/api/search'\n */\n api?: string;\n\n /**\n * Filter results with specific tag(s).\n */\n tag?: string | string[];\n\n /**\n * Filter by locale\n */\n locale?: string;\n}\n\nconst cache = new Map<string, SortedResult[]>();\n\nexport async function fetchDocs(\n query: string,\n { api = '/api/search', locale, tag }: FetchOptions,\n): Promise<SortedResult[]> {\n const url = new URL(api, window.location.origin);\n url.searchParams.set('query', query);\n if (locale) url.searchParams.set('locale', locale);\n if (tag) url.searchParams.set('tag', Array.isArray(tag) ? tag.join(',') : tag);\n\n const key = url.toString();\n const cached = cache.get(key);\n if (cached) return cached;\n\n const res = await fetch(url);\n if (!res.ok) throw new Error(await res.text());\n const result = (await res.json()) as SortedResult[];\n cache.set(key, result);\n return result;\n}\n"],"mappings":";AAqBA,MAAM,wBAAQ,IAAI,KAA6B;AAE/C,eAAsB,UACpB,OACA,EAAE,MAAM,eAAe,QAAQ,OACN;CACzB,MAAM,MAAM,IAAI,IAAI,KAAK,OAAO,SAAS,OAAO;AAChD,KAAI,aAAa,IAAI,SAAS,MAAM;AACpC,KAAI,OAAQ,KAAI,aAAa,IAAI,UAAU,OAAO;AAClD,KAAI,IAAK,KAAI,aAAa,IAAI,OAAO,MAAM,QAAQ,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;CAE9E,MAAM,MAAM,IAAI,UAAU;CAC1B,MAAM,SAAS,MAAM,IAAI,IAAI;AAC7B,KAAI,OAAQ,QAAO;CAEnB,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5B,KAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,MAAM,IAAI,MAAM,CAAC;CAC9C,MAAM,SAAU,MAAM,IAAI,MAAM;AAChC,OAAM,IAAI,KAAK,OAAO;AACtB,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/framework/index.tsx"],"sourcesContent":[],"mappings":";;;;;UAKiB,UAAA,SAAmB,KAAK;;;AAAzC;;EAMiB,GAAA,CAAA,EAAA,MAAA,GAAA,YAAA;EANmB;;AAYnC;EAMgB,QAAA,CAAM,EAAA,OAAA;AAKvB;UATU,SAAA,SAAkB,cAWT,CAAA,GAAA,CAAA,CAAA;EACA,QAAA,CAAA,EAAA,OAAA;;AAEV,UAVQ,MAAA,CAUR;EAMI,IAAA,EAAA,CAAA,GAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAH,OAAA,EAAA,GAAA,GAAA,IAAA;;AAaM,UAxBC,SAAA,CAwBgB;EAC/B,WAAA,EAAA,GAAA,GAAA,MAAA;EACA,SAAA,EAAA,GAAA,GAxBiB,MAwBjB,CAAA,MAAA,EAAA,MAAA,GAAA,MAAA,EAAA,CAAA;EACA,SAAA,EAAA,GAAA,GAxBiB,MAwBjB;EACA,IAAA,CAAA,EAvBO,EAuBP,CAtBE,cAsBF,CAAA,GAAA,CAAA,GAAA;IACA,QAAA,CAAA,EAAA,OAAA;EACA,CAAA,CAAA;EACC,KAAA,CAAA,EApBO,EAoBP,CApBU,UAoBV,CAAA;;AAAmC,iBAPtB,iBAAA,CAOsB;EAAA,IAAA;EAAA,SAAA;EAAA,SAAA;EAAA,WAAA;EAAA,KAAA;EAAA;AAetC,CAfsC,EAAnC,SAAmC,GAAA;EAAA,QAAA,EAAX,SAAW;AAetC,CAAA,CAAA,EAfsC,kBAAA,CAAA,GAAA,CAAA,OAeX;AAIX,iBAJA,WAAA,CAAA,CAIS,EAAA,MAAA;AAIT,iBAJA,SAAA,CAAA,CAIS,EAJA,MAIA;AAIT,iBAJA,SAAA,CAAA,CAIa,EAJJ,MAIc,CAAA,MAAA,EAAA,MAAA,GAAA,MAAA,EAAA,CAAA;AAavB,iBAbA,KAAA,CAaY,KAAS,EAbR,UAaQ,CAAA,EAbE,kBAAA,CAAA,GAAA,CAAA,OAaF;iBAArB,IAAA,QAAY,YAAS,kBAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Link","usePathname","useRouter","useParams","Image"],"sources":["../../src/framework/index.tsx"],"sourcesContent":["'use client';\nimport type { ComponentProps, FC, ReactNode } from 'react';\nimport { createContext, use, useMemo } from 'react';\nimport type { StaticImport } from 'next/dist/shared/lib/get-img-props';\n\nexport interface ImageProps extends Omit<ComponentProps<'img'>, 'src'> {\n sizes?: string;\n\n /**\n * Next.js Image component has other allowed type for `src`\n */\n src?: string | StaticImport;\n\n /**\n * priority of image (from Next.js)\n */\n priority?: boolean;\n}\n\ninterface LinkProps extends ComponentProps<'a'> {\n prefetch?: boolean;\n}\n\nexport interface Router {\n push: (url: string) => void;\n refresh: () => void;\n}\n\nexport interface Framework {\n usePathname: () => string;\n useParams: () => Record<string, string | string[]>;\n useRouter: () => Router;\n\n Link?: FC<\n ComponentProps<'a'> & {\n prefetch?: boolean;\n }\n >;\n\n Image?: FC<ImageProps>;\n}\n\nconst notImplemented = () => {\n throw new Error('You need to wrap your application inside `FrameworkProvider`.');\n};\n\nconst FrameworkContext = createContext<Framework>({\n useParams: notImplemented,\n useRouter: notImplemented,\n usePathname: notImplemented,\n});\n\nexport function FrameworkProvider({\n Link,\n useRouter,\n useParams,\n usePathname,\n Image,\n children,\n}: Framework & { children: ReactNode }) {\n const framework = useMemo(\n () => ({\n usePathname,\n useRouter,\n Link,\n Image,\n useParams,\n }),\n [Link, usePathname, useRouter, useParams, Image],\n );\n\n return <FrameworkContext value={framework}>{children}</FrameworkContext>;\n}\n\nexport function usePathname() {\n return use(FrameworkContext).usePathname();\n}\n\nexport function useRouter() {\n return use(FrameworkContext).useRouter();\n}\n\nexport function useParams() {\n return use(FrameworkContext).useParams();\n}\n\nexport function Image(props: ImageProps) {\n const { Image } = use(FrameworkContext);\n if (!Image) {\n const { src, alt, priority, ...rest } = props;\n\n return (\n <img alt={alt} src={src as string} fetchPriority={priority ? 'high' : 'auto'} {...rest} />\n );\n }\n\n return <Image {...props} />;\n}\n\nexport function Link(props: LinkProps) {\n const { Link } = use(FrameworkContext);\n if (!Link) {\n const { href, prefetch: _, ...rest } = props;\n return <a href={href} {...rest} />;\n }\n\n return <Link {...props} />;\n}\n"],"mappings":";;;;;;AA0CA,MAAM,uBAAuB;AAC3B,OAAM,IAAI,MAAM,gEAAgE;;AAGlF,MAAM,mBAAmB,cAAyB;CAChD,WAAW;CACX,WAAW;CACX,aAAa;CACd,CAAC;AAEF,SAAgB,kBAAkB,EAChC,cACA,wBACA,wBACA,4BACA,gBACA,YACsC;AAYtC,QAAO,oBAAC;EAAiB,OAXP,eACT;GACL;GACA;GACA;GACA;GACA;GACD,GACD;GAACA;GAAMC;GAAaC;GAAWC;GAAWC;GAAM,CACjD;EAE2C;GAA4B;;AAG1E,SAAgB,cAAc;AAC5B,QAAO,IAAI,iBAAiB,CAAC,aAAa;;AAG5C,SAAgB,YAAY;AAC1B,QAAO,IAAI,iBAAiB,CAAC,WAAW;;AAG1C,SAAgB,YAAY;AAC1B,QAAO,IAAI,iBAAiB,CAAC,WAAW;;AAG1C,SAAgB,MAAM,OAAmB;CACvC,MAAM,EAAE,mBAAU,IAAI,iBAAiB;AACvC,KAAI,CAACA,SAAO;EACV,MAAM,EAAE,KAAK,KAAK,UAAU,GAAG,SAAS;AAExC,SACE,oBAAC;GAAS;GAAU;GAAe,eAAe,WAAW,SAAS;GAAQ,GAAI;IAAQ;;AAI9F,QAAO,oBAACA,WAAM,GAAI,QAAS;;AAG7B,SAAgB,KAAK,OAAkB;CACrC,MAAM,EAAE,iBAAS,IAAI,iBAAiB;AACtC,KAAI,CAACJ,QAAM;EACT,MAAM,EAAE,MAAM,UAAU,GAAG,GAAG,SAAS;AACvC,SAAO,oBAAC;GAAQ;GAAM,GAAI;IAAQ;;AAGpC,QAAO,oBAACA,UAAK,GAAI,QAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.ts","names":[],"sources":["../../src/framework/next.tsx"],"sourcesContent":[],"mappings":";;;;;iBAOgB,YAAA;;QAER;SACC;;YAEG;SACH;EANO,KAAA,CAAA,EAON,SAPkB,CAAA,OAAA,CAAA;CAC1B,CAAA,EAOD,kBAAA,CAAA,GAAA,CAAA,OAPC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"next.js","names":[],"sources":["../../src/framework/next.tsx"],"sourcesContent":["'use client';\nimport { type Framework, FrameworkProvider } from '@/framework/index';\nimport type { ReactNode } from 'react';\nimport { useParams, usePathname, useRouter } from 'next/navigation';\nimport Link from 'next/link';\nimport Image from 'next/image';\n\nexport function NextProvider({\n children,\n Link: CustomLink,\n Image: CustomImage,\n}: {\n children: ReactNode;\n Link?: Framework['Link'];\n Image?: Framework['Image'];\n}) {\n return (\n <FrameworkProvider\n usePathname={usePathname}\n useRouter={useRouter}\n useParams={useParams}\n Link={CustomLink ?? (Link as Framework['Link'])}\n Image={CustomImage ?? (Image as Framework['Image'])}\n >\n {children}\n </FrameworkProvider>\n );\n}\n"],"mappings":";;;;;;;;;AAOA,SAAgB,aAAa,EAC3B,UACA,MAAM,YACN,OAAO,eAKN;AACD,QACE,oBAAC;EACc;EACF;EACA;EACX,MAAM,cAAe;EACrB,OAAO,eAAgB;EAEtB;GACiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"react-router.d.ts","names":[],"sources":["../../src/framework/react-router.tsx"],"sourcesContent":[],"mappings":";;;;;iBAoCgB,mBAAA;;QAER;SACC;;YAEG;SACH;EANO,KAAA,CAAA,EAON,SAPM,CAAA,OAAmB,CAAA;CACjC,CAAA,EAOD,kBAAA,CAAA,GAAA,CAAA,OAPC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"react-router.js","names":[],"sources":["../../src/framework/react-router.tsx"],"sourcesContent":["import { type ReactNode, useMemo } from 'react';\nimport { type Framework, FrameworkProvider } from '@/framework/index';\nimport { Link, useLocation, useNavigate, useParams, useRevalidator } from 'react-router';\n\nconst framework: Framework = {\n usePathname() {\n return useLocation().pathname;\n },\n useParams() {\n return useParams() as Record<string, string | string[]>;\n },\n useRouter() {\n const navigate = useNavigate();\n const revalidator = useRevalidator();\n\n return useMemo(\n () => ({\n push(url) {\n navigate(url);\n },\n refresh() {\n void revalidator.revalidate();\n },\n }),\n [navigate, revalidator],\n );\n },\n Link({ href, prefetch, ...props }) {\n return (\n <Link to={href!} prefetch={prefetch ? 'intent' : 'none'} {...props}>\n {props.children}\n </Link>\n );\n },\n};\n\nexport function ReactRouterProvider({\n children,\n Link: CustomLink,\n Image: CustomImage,\n}: {\n children: ReactNode;\n Link?: Framework['Link'];\n Image?: Framework['Image'];\n}) {\n return (\n <FrameworkProvider\n {...framework}\n Link={CustomLink ?? framework.Link}\n Image={CustomImage ?? framework.Image}\n >\n {children}\n </FrameworkProvider>\n );\n}\n"],"mappings":";;;;;;AAIA,MAAM,YAAuB;CAC3B,cAAc;AACZ,SAAO,aAAa,CAAC;;CAEvB,YAAY;AACV,SAAO,WAAW;;CAEpB,YAAY;EACV,MAAM,WAAW,aAAa;EAC9B,MAAM,cAAc,gBAAgB;AAEpC,SAAO,eACE;GACL,KAAK,KAAK;AACR,aAAS,IAAI;;GAEf,UAAU;AACR,IAAK,YAAY,YAAY;;GAEhC,GACD,CAAC,UAAU,YAAY,CACxB;;CAEH,KAAK,EAAE,MAAM,UAAU,GAAG,SAAS;AACjC,SACE,oBAAC;GAAK,IAAI;GAAO,UAAU,WAAW,WAAW;GAAQ,GAAI;aAC1D,MAAM;IACF;;CAGZ;AAED,SAAgB,oBAAoB,EAClC,UACA,MAAM,YACN,OAAO,eAKN;AACD,QACE,oBAAC;EACC,GAAI;EACJ,MAAM,cAAc,UAAU;EAC9B,OAAO,eAAe,UAAU;EAE/B;GACiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack.d.ts","names":[],"sources":["../../src/framework/tanstack.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAuDgB,iBAAA,gBAAA,CAAgB;EAAA,QAAA;EAAA,IAAA,EAExB,UAFwB;EAAA,KAAA,EAGvB;CAHuB,EAAA;EAC9B,QAAA,EAIU,SAJV;EACM,IAAA,CAAA,EAIC,SAJD,CAAA,MAAA,CAAA;EACC,KAAA,CAAA,EAIC,SAJD,CAAA,OAAA,CAAA;CAEG,CAAA,EAGX,kBAAA,CAAA,GAAA,CAAA,OAHW"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack.js","names":[],"sources":["../../src/framework/tanstack.tsx"],"sourcesContent":["import { type ReactNode, useRef, useMemo } from 'react';\nimport { type Framework, FrameworkProvider } from '@/framework/index';\nimport { useParams, Link, useRouter, useRouterState } from '@tanstack/react-router';\n\nconst framework: Framework = {\n Link({ href, prefetch = true, ...props }) {\n return (\n <Link to={href} preload={prefetch ? 'intent' : false} {...props}>\n {props.children}\n </Link>\n );\n },\n usePathname() {\n const { isLoading, pathname } = useRouterState({\n select: (state) => ({\n isLoading: state.isLoading,\n pathname: state.location.pathname,\n }),\n });\n\n const activePathname = useRef(pathname);\n return useMemo(() => {\n if (isLoading) {\n return activePathname.current;\n }\n\n activePathname.current = pathname;\n return pathname;\n }, [isLoading, pathname]);\n },\n useRouter() {\n const router = useRouter();\n\n return useMemo(\n () => ({\n push(url) {\n void router.navigate({\n href: url,\n });\n },\n refresh() {\n void router.invalidate();\n },\n }),\n [router],\n );\n },\n useParams() {\n return useParams({ strict: false });\n },\n};\n\n/**\n * Fumadocs adapter for Tanstack Router/Start\n */\nexport function TanstackProvider({\n children,\n Link: CustomLink,\n Image: CustomImage,\n}: {\n children: ReactNode;\n Link?: Framework['Link'];\n Image?: Framework['Image'];\n}) {\n return (\n <FrameworkProvider\n {...framework}\n Link={CustomLink ?? framework.Link}\n Image={CustomImage ?? framework.Image}\n >\n {children}\n </FrameworkProvider>\n );\n}\n"],"mappings":";;;;;;AAIA,MAAM,YAAuB;CAC3B,KAAK,EAAE,MAAM,WAAW,MAAM,GAAG,SAAS;AACxC,SACE,oBAAC;GAAK,IAAI;GAAM,SAAS,WAAW,WAAW;GAAO,GAAI;aACvD,MAAM;IACF;;CAGX,cAAc;EACZ,MAAM,EAAE,WAAW,aAAa,eAAe,EAC7C,SAAS,WAAW;GAClB,WAAW,MAAM;GACjB,UAAU,MAAM,SAAS;GAC1B,GACF,CAAC;EAEF,MAAM,iBAAiB,OAAO,SAAS;AACvC,SAAO,cAAc;AACnB,OAAI,UACF,QAAO,eAAe;AAGxB,kBAAe,UAAU;AACzB,UAAO;KACN,CAAC,WAAW,SAAS,CAAC;;CAE3B,YAAY;EACV,MAAM,SAAS,WAAW;AAE1B,SAAO,eACE;GACL,KAAK,KAAK;AACR,IAAK,OAAO,SAAS,EACnB,MAAM,KACP,CAAC;;GAEJ,UAAU;AACR,IAAK,OAAO,YAAY;;GAE3B,GACD,CAAC,OAAO,CACT;;CAEH,YAAY;AACV,SAAO,UAAU,EAAE,QAAQ,OAAO,CAAC;;CAEtC;;;;AAKD,SAAgB,iBAAiB,EAC/B,UACA,MAAM,YACN,OAAO,eAKN;AACD,QACE,oBAAC;EACC,GAAI;EACJ,MAAM,cAAc,UAAU;EAC9B,OAAO,eAAe,UAAU;EAE/B;GACiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"waku.d.ts","names":[],"sources":["../../src/framework/waku.tsx"],"sourcesContent":[],"mappings":";;;;;iBA+CgB,YAAA;;QAER;SACC;;YAEG;SACH;EANO,KAAA,CAAA,EAON,SAPkB,CAAA,OAAA,CAAA;CAC1B,CAAA,EAOD,kBAAA,CAAA,GAAA,CAAA,OAPC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"waku.js","names":["WakuLink"],"sources":["../../src/framework/waku.tsx"],"sourcesContent":["'use client';\n\nimport { type ReactNode, useMemo } from 'react';\nimport { Link as WakuLink, useRouter } from 'waku';\nimport { type Framework, FrameworkProvider } from './index.js';\n\nconst framework: Framework = {\n usePathname() {\n const { path } = useRouter();\n return path;\n },\n useParams() {\n const { query } = useRouter();\n return useMemo(() => {\n const params = new URLSearchParams(query);\n return Object.fromEntries(\n Array.from(params.entries()).map(([key, value]) => [\n key,\n Array.isArray(value) ? value[0] : value,\n ]),\n );\n }, [query]);\n },\n useRouter() {\n const router = useRouter();\n\n return useMemo(\n () => ({\n push(url: string) {\n void router.push(url);\n },\n refresh() {\n void router.push(router.path);\n },\n }),\n [router],\n );\n },\n Link({ href, prefetch = true, ...props }) {\n return (\n <WakuLink to={href!} unstable_prefetchOnEnter={prefetch} {...props}>\n {props.children}\n </WakuLink>\n );\n },\n};\n\nexport function WakuProvider({\n children,\n Link: CustomLink,\n Image: CustomImage,\n}: {\n children: ReactNode;\n Link?: Framework['Link'];\n Image?: Framework['Image'];\n}) {\n return (\n <FrameworkProvider\n {...framework}\n Link={CustomLink ?? framework.Link}\n Image={CustomImage ?? framework.Image}\n >\n {children}\n </FrameworkProvider>\n );\n}\n"],"mappings":";;;;;;;;AAMA,MAAM,YAAuB;CAC3B,cAAc;EACZ,MAAM,EAAE,SAAS,WAAW;AAC5B,SAAO;;CAET,YAAY;EACV,MAAM,EAAE,UAAU,WAAW;AAC7B,SAAO,cAAc;GACnB,MAAM,SAAS,IAAI,gBAAgB,MAAM;AACzC,UAAO,OAAO,YACZ,MAAM,KAAK,OAAO,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CACjD,KACA,MAAM,QAAQ,MAAM,GAAG,MAAM,KAAK,MACnC,CAAC,CACH;KACA,CAAC,MAAM,CAAC;;CAEb,YAAY;EACV,MAAM,SAAS,WAAW;AAE1B,SAAO,eACE;GACL,KAAK,KAAa;AAChB,IAAK,OAAO,KAAK,IAAI;;GAEvB,UAAU;AACR,IAAK,OAAO,KAAK,OAAO,KAAK;;GAEhC,GACD,CAAC,OAAO,CACT;;CAEH,KAAK,EAAE,MAAM,WAAW,MAAM,GAAG,SAAS;AACxC,SACE,oBAACA;GAAS,IAAI;GAAO,0BAA0B;GAAU,GAAI;aAC1D,MAAM;IACE;;CAGhB;AAED,SAAgB,aAAa,EAC3B,UACA,MAAM,YACN,OAAO,eAKN;AACD,QACE,oBAAC;EACC,GAAI;EACJ,MAAM,cAAc,UAAU;EAC9B,OAAO,eAAe,UAAU;EAE/B;GACiB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","names":[],"sources":["../../src/highlight/client.tsx"],"sourcesContent":[],"mappings":";;;;;;;AAWA;;;AAIG,iBAJa,QAAA,CAIb,IAAA,EAAA,MAAA,EAAA,OAAA,EAFQ,gBAER,EAAA,IAAA,CAAA,EADM,cACN,CAAA,EAAA,SAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"sources":["../../src/highlight/client.tsx"],"sourcesContent":["'use client';\nimport { type DependencyList, type ReactNode, use, useMemo } from 'react';\nimport { highlight, type HighlightOptions } from './shiki';\n\nconst promises: Record<string, Promise<ReactNode>> = {};\n\n/**\n * get highlighted results, should be used with React Suspense API.\n *\n * note: results are cached with (lang, code) as keys, if this is not the desired behaviour, pass a `deps` instead.\n */\nexport function useShiki(\n code: string,\n options: HighlightOptions,\n deps?: DependencyList,\n): ReactNode {\n const key = useMemo(() => {\n return deps ? JSON.stringify(deps) : `${options.lang}:${code}`;\n }, [code, deps, options.lang]);\n\n return use((promises[key] ??= highlight(code, options)));\n}\n"],"mappings":";;;;;;AAIA,MAAM,WAA+C,EAAE;;;;;;AAOvD,SAAgB,SACd,MACA,SACA,MACW;CACX,MAAM,MAAM,cAAc;AACxB,SAAO,OAAO,KAAK,UAAU,KAAK,GAAG,GAAG,QAAQ,KAAK,GAAG;IACvD;EAAC;EAAM;EAAM,QAAQ;EAAK,CAAC;AAE9B,QAAO,IAAK,SAAS,SAAS,UAAU,MAAM,QAAQ,CAAE"}
|
package/dist/i18n/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/i18n/index.ts"],"sourcesContent":["export interface I18nConfig<Languages extends string = string> {\n /**\n * Supported locale codes.\n *\n * A page tree will be built for each language.\n */\n languages: Languages[];\n\n /**\n * Default locale if not specified\n */\n defaultLanguage: Languages;\n\n /**\n * Don't show the locale prefix on URL.\n *\n * - `always`: Always hide the prefix\n * - `default-locale`: Only hide the default locale\n * - `never`: Never hide the prefix\n *\n * This API uses `NextResponse.rewrite`.\n *\n * @defaultValue 'never'\n */\n hideLocale?: 'always' | 'default-locale' | 'never';\n\n /**\n * Used by `loader()`, specify the way to parse i18n file structure.\n *\n * @defaultValue 'dot'\n */\n parser?: 'dot' | 'dir' | 'none';\n\n /**\n * the fallback language when the page has no translations available for a given locale.\n *\n * Default to ``defaultLanguage`, no fallback when set to `null`.\n */\n fallbackLanguage?: Languages | null;\n}\n\nexport function defineI18n<Languages extends string>(\n config: I18nConfig<Languages>,\n): I18nConfig<Languages> {\n return config;\n}\n"],"mappings":";AAyCA,SAAgB,WACd,QACuB;AACvB,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","names":[],"sources":["../../src/i18n/middleware.ts"],"sourcesContent":[],"mappings":";;;;;UAMU,iBAAA,SAA0B;;AAFyB;AAgB7D;;;EASyC,MAAA,CAAA,EAjB9B,YAiB8B,GAAA,CAAA,CAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,GAAA,MAAA,CAAA;EAKzB;;;EAGH,UAAA,CAAA,EAAA,MAgBZ;AAED;AACE,UApCe,YAAA,CAoCf;EACA;;;EAGA,GAAA,EAAA,CAAA,GAAA,EApCW,OAoCX,EAAA,GAAA,MAAA,GAAA,SAAA;EACC;;;aAhCU,4BAA4B;;;;gBAKzB,YAAY;;cAGf,kBAAkB;iBAkBf,oBAAA;;;;;;GAMb,oBAAoB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","names":["matchLocale"],"sources":["../../src/i18n/middleware.ts"],"sourcesContent":["import { match as matchLocale } from '@formatjs/intl-localematcher';\nimport { type NextProxy, NextResponse } from 'next/server';\nimport type { I18nConfig } from '@/i18n';\nimport { getNegotiator } from '@/negotiation';\nimport type { NextURL } from 'next/dist/server/web/next-url';\n\ninterface MiddlewareOptions extends I18nConfig {\n /**\n * Either:\n * - A formatter object\n * - A function that adds the locale prefix to pathname\n */\n format?: URLFormatter | ((locale: string, pathname: string) => string);\n\n /**\n * the cookie to store locale code when `hideLocale` is set to `always`.\n */\n cookieName?: string;\n}\n\nexport interface URLFormatter {\n /**\n * get locale code from request URL\n */\n get: (url: NextURL) => string | undefined;\n\n /**\n * add locale code to request URL (which is missing the locale).\n */\n add: (url: NextURL, locale: string) => URL;\n\n /**\n * remove locale code from request URL\n */\n remove: (url: NextURL) => URL;\n}\n\nexport const DefaultFormatter: URLFormatter = {\n get(url) {\n const segs = url.pathname.split('/');\n if (segs.length > 1 && segs[1]) return segs[1];\n },\n add(url, locale) {\n const next = new URL(url);\n next.pathname = `${url.basePath}/${locale}/${url.pathname}`.replaceAll(/\\/+/g, '/');\n return next;\n },\n remove(url) {\n const next = new URL(url);\n const pathname = url.pathname.split('/').slice(2).join('/');\n next.pathname = `${url.basePath}/${pathname}`.replaceAll(/\\/+/g, '/');\n return next;\n },\n};\n\nexport function createI18nMiddleware({\n languages,\n defaultLanguage,\n format = DefaultFormatter,\n cookieName = 'FD_LOCALE',\n hideLocale = 'never',\n}: MiddlewareOptions): NextProxy {\n let formatter: URLFormatter;\n if (typeof format === 'function') {\n formatter = {\n ...DefaultFormatter,\n add(url, locale) {\n const next = new URL(url);\n next.pathname = format(locale, url.pathname);\n return next;\n },\n };\n } else {\n formatter = format;\n }\n\n return (request) => {\n const url = request.nextUrl;\n let pathLocale = formatter.get(url);\n if (pathLocale && !languages.includes(pathLocale)) pathLocale = undefined;\n\n if (!pathLocale) {\n if (hideLocale === 'default-locale') {\n return NextResponse.rewrite(formatter.add(url, defaultLanguage));\n }\n\n const finalLanguages = getNegotiator(request).languages(languages);\n const preferred = matchLocale(finalLanguages, languages, defaultLanguage);\n if (hideLocale === 'always') {\n const locale = request.cookies.get(cookieName)?.value ?? preferred;\n\n return NextResponse.rewrite(formatter.add(url, locale));\n }\n\n return NextResponse.redirect(formatter.add(url, preferred));\n }\n\n // Remove explicit locale\n if (\n hideLocale === 'always' ||\n (hideLocale === 'default-locale' && pathLocale === defaultLanguage)\n ) {\n const res = NextResponse.redirect(formatter.remove(url));\n res.cookies.set(cookieName, pathLocale);\n return res;\n }\n\n return NextResponse.next();\n };\n}\n"],"mappings":";;;;;AAqCA,MAAa,mBAAiC;CAC5C,IAAI,KAAK;EACP,MAAM,OAAO,IAAI,SAAS,MAAM,IAAI;AACpC,MAAI,KAAK,SAAS,KAAK,KAAK,GAAI,QAAO,KAAK;;CAE9C,IAAI,KAAK,QAAQ;EACf,MAAM,OAAO,IAAI,IAAI,IAAI;AACzB,OAAK,WAAW,GAAG,IAAI,SAAS,GAAG,OAAO,GAAG,IAAI,WAAW,WAAW,QAAQ,IAAI;AACnF,SAAO;;CAET,OAAO,KAAK;EACV,MAAM,OAAO,IAAI,IAAI,IAAI;EACzB,MAAM,WAAW,IAAI,SAAS,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI;AAC3D,OAAK,WAAW,GAAG,IAAI,SAAS,GAAG,WAAW,WAAW,QAAQ,IAAI;AACrE,SAAO;;CAEV;AAED,SAAgB,qBAAqB,EACnC,WACA,iBACA,SAAS,kBACT,aAAa,aACb,aAAa,WACkB;CAC/B,IAAI;AACJ,KAAI,OAAO,WAAW,WACpB,aAAY;EACV,GAAG;EACH,IAAI,KAAK,QAAQ;GACf,MAAM,OAAO,IAAI,IAAI,IAAI;AACzB,QAAK,WAAW,OAAO,QAAQ,IAAI,SAAS;AAC5C,UAAO;;EAEV;KAED,aAAY;AAGd,SAAQ,YAAY;EAClB,MAAM,MAAM,QAAQ;EACpB,IAAI,aAAa,UAAU,IAAI,IAAI;AACnC,MAAI,cAAc,CAAC,UAAU,SAAS,WAAW,CAAE,cAAa;AAEhE,MAAI,CAAC,YAAY;AACf,OAAI,eAAe,iBACjB,QAAO,aAAa,QAAQ,UAAU,IAAI,KAAK,gBAAgB,CAAC;GAIlE,MAAM,YAAYA,MADK,cAAc,QAAQ,CAAC,UAAU,UAAU,EACpB,WAAW,gBAAgB;AACzE,OAAI,eAAe,UAAU;IAC3B,MAAM,SAAS,QAAQ,QAAQ,IAAI,WAAW,EAAE,SAAS;AAEzD,WAAO,aAAa,QAAQ,UAAU,IAAI,KAAK,OAAO,CAAC;;AAGzD,UAAO,aAAa,SAAS,UAAU,IAAI,KAAK,UAAU,CAAC;;AAI7D,MACE,eAAe,YACd,eAAe,oBAAoB,eAAe,iBACnD;GACA,MAAM,MAAM,aAAa,SAAS,UAAU,OAAO,IAAI,CAAC;AACxD,OAAI,QAAQ,IAAI,YAAY,WAAW;AACvC,UAAO;;AAGT,SAAO,aAAa,MAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"icon-CL3r1pNG.js","names":[],"sources":["../src/source/plugins/icon.ts"],"sourcesContent":["import type { LoaderPlugin } from '@/source';\nimport type { ReactNode } from 'react';\nimport type * as PageTree from '@/page-tree/definitions';\n\nexport type IconResolver = (icon: string | undefined) => ReactNode;\n\nexport function iconPlugin(resolveIcon: IconResolver): LoaderPlugin {\n function replaceIcon<T extends PageTree.Node>(node: T): T {\n if (node.icon === undefined || typeof node.icon === 'string')\n node.icon = resolveIcon(node.icon);\n\n return node;\n }\n\n return {\n name: 'fumadocs:icon',\n transformPageTree: {\n file: replaceIcon,\n folder: replaceIcon,\n separator: replaceIcon,\n },\n };\n}\n"],"mappings":";AAMA,SAAgB,WAAW,aAAyC;CAClE,SAAS,YAAqC,MAAY;AACxD,MAAI,KAAK,SAAS,UAAa,OAAO,KAAK,SAAS,SAClD,MAAK,OAAO,YAAY,KAAK,KAAK;AAEpC,SAAO;;AAGT,QAAO;EACL,MAAM;EACN,mBAAmB;GACjB,MAAM;GACN,QAAQ;GACR,WAAW;GACZ;EACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BaMZ8PEK.d.ts","names":[],"sources":["../src/page-tree/utils.ts"],"sourcesContent":[],"mappings":";;;;;;AAKA;AAkBgB,iBAlBA,WAAA,CAkBa,KAAA,EAlBM,IAkBN,EAAA,CAAA,EAlBwB,IAkBxB,EAAA;;;;AAQP,iBARN,aAAA,CAQM,IAAA,EAPd,IAOc,EAAA,GAAA,EAAA,MAAA,EAAA,OAqBV,CArBU,EAAA;EAoBN,YAAA,CAAA,EAAA,OAAgB;CACpB,CAAA,EAAA;EAAgB,QAAA,CAAA,EAtBf,IAsBe;EACxB,IAAA,CAAA,EAtBK,IAsBL;CAAgB;AAAe,iBAFnB,gBAAA,CAEmB,QAAA,EADvB,IACuB,GADP,MACO,CAAA,EAAA,CAA/B,IAA+B,GAAf,MAAe,CAAA,EAAA;AAgBnC;;;AAC+B,iBADf,gBAAA,CACe,WAAA,EAAhB,IAAgB,GAAA,MAAA,CAAA,MAAA,EAAe,IAAf,CAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAE5B,IAF4B,EAAA;;;AAS/B;AACe,iBADC,YAAA,CACD,WAAA,EAAA,IAAA,GAAgB,MAAhB,CAAA,MAAA,EAA+B,IAA/B,CAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAEZ,IAFY,EAAA;AAA+B,iBAsB9B,UAAA,CAtB8B,IAAA,EAuBtC,IAvBsC,GAuBtB,MAvBsB,EAAA,GAAA,EAAA,MAAA,CAAA,EAyB3C,IAzB2C,GAyB3B,MAzB2B,GAAA,SAAA;;;;AAsB9C;;AACwB,iBAoBR,QAAA,CApBQ,KAAA,EAqBf,IArBe,EAAA,EAAA,OAAA,EAAA,CAAA,IAAA,EAsBN,IAtBM,EAAA,GAAA,OAAA,EAAA,OAEL,CAFK,EAAA;EAErB,gBAAA,CAAA,EAAA,OAAA;CAAgB,CAAA,EAwBhB,IAxBgB,EAAA,GAAA,IAAA;;AAkBnB;;;;;AAkDgB,iBAAA,KAAK,CAAA,eAAc,IAAd,GAA8B,IAA9B,CAAA,CAAA,IAAA,EACb,MADa,EAAA,OAAA,EAAA,CAAA,UAEC,IAFD,GAEiB,IAFjB,CAAA,CAAA,IAAA,EAGX,CAHW,EAAA,MAAA,CAAA,EAIR,IAJQ,GAIQ,MAJR,EAAA,GAAA,MAAA,GAAA,OAAA,GAKK,CALL,GAAA,IAAA,CAAA,EAMlB,MANkB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-CmGSoB4T.d.ts","names":[],"sources":["../src/source/client/index.tsx"],"sourcesContent":[],"mappings":";;;UAIiB,kBAAA;;EAAA,IAAA,EAAA,MAAA;AAejB;AAoBgB,iBApBA,mBAAA,CAoBiB,UAAA,EApBe,kBAoBf,CAAA,EApBoC,IAoBpC;;;;;;;AACmC,iBADpD,iBACoD,CAAA,CAAA,CAAA,CAAA,UAAA,EADnB,CACmB,CAAA,EAAA,QAAE,MAAxD,CAAwD,GAApD,CAAoD,CAAlD,CAAkD,CAAA,SAAvC,kBAAuC,GAAlB,IAAkB,GAAF,CAAE,CAAA,CAAA,CAAA,EAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DxhhLscI.d.ts","names":[],"sources":["../src/i18n/index.ts"],"sourcesContent":[],"mappings":";UAAiB;EAAA;;;;;EAyCD,SAAA,EAnCH,SAmCa,EAAA;EACL;;;EAClB,eAAA,EAhCgB,SAgChB;EAAU;;;;;;;;;;;;;;;;;;;;;;;qBALQ;;iBAGL,6CACN,WAAW,aAClB,WAAW"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-aE27-b16.d.ts","names":[],"sources":["../src/source/source.ts","../src/source/storage/file-system.ts","../src/source/storage/content.ts","../src/source/page-tree/builder.ts","../src/source/plugins/slugs.ts","../src/source/plugins/icon.ts","../src/source/loader.ts","../src/source/path.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/link.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","names":[],"sources":["../src/link.tsx"],"sourcesContent":[],"mappings":";;;;UAIiB,SAAA,SAAkB,qBAAqB;;;AAAxD;AAYC;;EAES,QAAA,CAAA,EAAA,OAAA;EAAA;;;;;cAAJ,MAAI,MAAA,CAAA,0BAAA,YAAA,MAAA,CAAA,cAAA"}
|
package/dist/link.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","names":["Base"],"sources":["../src/link.tsx"],"sourcesContent":["'use client';\nimport { type AnchorHTMLAttributes, forwardRef } from 'react';\nimport { Link as Base } from '@/framework';\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n /**\n * If the href is an external URL\n *\n * automatically determined by default\n */\n external?: boolean;\n\n /**\n * Prefetch links, supported on Next.js\n */\n prefetch?: boolean;\n}\n\nconst Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n href = '#',\n // any protocol\n external = href.match(/^\\w+:/) ||\n // protocol relative URL\n href.startsWith('//'),\n prefetch,\n children,\n ...props\n },\n ref,\n ) => {\n if (external) {\n return (\n <a ref={ref} href={href} rel=\"noreferrer noopener\" target=\"_blank\" {...props}>\n {children}\n </a>\n );\n }\n\n return (\n <Base ref={ref} href={href} prefetch={prefetch} {...props}>\n {children}\n </Base>\n );\n },\n);\n\nLink.displayName = 'Link';\n\nexport { Link as default };\n"],"mappings":";;;;;;;AAkBA,MAAM,OAAO,YAET,EACE,OAAO,KAEP,WAAW,KAAK,MAAM,QAAQ,IAE5B,KAAK,WAAW,KAAK,EACvB,UACA,UACA,GAAG,SAEL,QACG;AACH,KAAI,SACF,QACE,oBAAC;EAAO;EAAW;EAAM,KAAI;EAAsB,QAAO;EAAS,GAAI;EACpE;GACC;AAIR,QACE,oBAACA;EAAU;EAAW;EAAgB;EAAU,GAAI;EACjD;GACI;EAGZ;AAED,KAAK,cAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mdast-utils-B8O-41y4.js","names":[],"sources":["../src/mdx-plugins/mdast-utils.ts"],"sourcesContent":["import type { RootContent } from 'mdast';\nimport { valueToEstree } from 'estree-util-value-to-estree';\n\nexport function flattenNode(node: RootContent): string {\n if ('children' in node) return node.children.map((child) => flattenNode(child)).join('');\n\n if ('value' in node && typeof node.value === 'string') return node.value;\n\n return '';\n}\n\nexport function toMdxExport(name: string, value: unknown): RootContent {\n return {\n type: 'mdxjsEsm',\n value: '',\n data: {\n estree: {\n type: 'Program',\n sourceType: 'module',\n body: [\n {\n type: 'ExportNamedDeclaration',\n attributes: [],\n specifiers: [],\n source: null,\n declaration: {\n type: 'VariableDeclaration',\n kind: 'let',\n declarations: [\n {\n type: 'VariableDeclarator',\n id: {\n type: 'Identifier',\n name,\n },\n init: valueToEstree(value),\n },\n ],\n },\n },\n ],\n },\n },\n };\n}\n"],"mappings":";;;AAGA,SAAgB,YAAY,MAA2B;AACrD,KAAI,cAAc,KAAM,QAAO,KAAK,SAAS,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC,KAAK,GAAG;AAExF,KAAI,WAAW,QAAQ,OAAO,KAAK,UAAU,SAAU,QAAO,KAAK;AAEnE,QAAO;;AAGT,SAAgB,YAAY,MAAc,OAA6B;AACrE,QAAO;EACL,MAAM;EACN,OAAO;EACP,MAAM,EACJ,QAAQ;GACN,MAAM;GACN,YAAY;GACZ,MAAM,CACJ;IACE,MAAM;IACN,YAAY,EAAE;IACd,YAAY,EAAE;IACd,QAAQ;IACR,aAAa;KACX,MAAM;KACN,MAAM;KACN,cAAc,CACZ;MACE,MAAM;MACN,IAAI;OACF,MAAM;OACN;OACD;MACD,MAAM,cAAc,MAAM;MAC3B,CACF;KACF;IACF,CACF;GACF,EACF;EACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codeblock-utils.js","names":[],"sources":["../../src/mdx-plugins/codeblock-utils.ts"],"sourcesContent":["import type { MdxJsxAttribute, MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport type { BlockContent, Text } from 'mdast';\n\nexport interface CodeBlockTabsOptions {\n attributes?: MdxJsxAttribute[];\n defaultValue?: string;\n persist?:\n | {\n id: string;\n }\n | false;\n triggers: {\n value: string;\n children: (BlockContent | Text)[];\n }[];\n tabs: {\n value: string;\n children: BlockContent[];\n }[];\n}\n\nexport function generateCodeBlockTabs({\n persist = false,\n defaultValue,\n triggers,\n tabs,\n ...options\n}: CodeBlockTabsOptions): MdxJsxFlowElement {\n const attributes: MdxJsxAttribute[] = [];\n if (options.attributes) attributes.push(...options.attributes);\n\n if (defaultValue) {\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'defaultValue',\n value: defaultValue,\n });\n }\n\n if (typeof persist === 'object') {\n attributes.push(\n {\n type: 'mdxJsxAttribute',\n name: 'groupId',\n value: persist.id,\n },\n {\n type: 'mdxJsxAttribute',\n name: 'persist',\n value: null,\n },\n );\n }\n\n const children: MdxJsxFlowElement[] = [\n {\n type: 'mdxJsxFlowElement',\n name: 'CodeBlockTabsList',\n attributes: [],\n children: triggers.map(\n (trigger) =>\n ({\n type: 'mdxJsxFlowElement',\n attributes: [{ type: 'mdxJsxAttribute', name: 'value', value: trigger.value }],\n name: 'CodeBlockTabsTrigger',\n children: trigger.children,\n }) as MdxJsxFlowElement,\n ),\n },\n ];\n\n for (const tab of tabs) {\n children.push({\n type: 'mdxJsxFlowElement',\n name: 'CodeBlockTab',\n attributes: [{ type: 'mdxJsxAttribute', name: 'value', value: tab.value }],\n children: tab.children,\n });\n }\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'CodeBlockTabs',\n attributes,\n children,\n };\n}\n\nexport interface CodeBlockAttributes<Name extends string = string> {\n attributes: Partial<Record<Name, string | null>>;\n rest: string;\n}\n\n/**\n * Parse Fumadocs-style code block attributes from meta string, like `title=\"hello world\"`\n */\nexport function parseCodeBlockAttributes<Name extends string = string>(\n meta: string,\n allowedNames?: Name[],\n): CodeBlockAttributes<Name> {\n let str = meta;\n const StringRegex = /(?<=^|\\s)(?<name>\\w+)(?:=(?:\"([^\"]*)\"|'([^']*)'))?/g;\n const attributes: CodeBlockAttributes['attributes'] = {};\n\n str = str.replaceAll(StringRegex, (match, name, value_1, value_2) => {\n if (allowedNames && !allowedNames.includes(name)) return match;\n\n attributes[name] = value_1 ?? value_2 ?? null;\n return '';\n });\n\n return {\n rest: str,\n attributes,\n };\n}\n"],"mappings":";AAqBA,SAAgB,sBAAsB,EACpC,UAAU,OACV,cACA,UACA,MACA,GAAG,WACuC;CAC1C,MAAM,aAAgC,EAAE;AACxC,KAAI,QAAQ,WAAY,YAAW,KAAK,GAAG,QAAQ,WAAW;AAE9D,KAAI,aACF,YAAW,KAAK;EACd,MAAM;EACN,MAAM;EACN,OAAO;EACR,CAAC;AAGJ,KAAI,OAAO,YAAY,SACrB,YAAW,KACT;EACE,MAAM;EACN,MAAM;EACN,OAAO,QAAQ;EAChB,EACD;EACE,MAAM;EACN,MAAM;EACN,OAAO;EACR,CACF;CAGH,MAAM,WAAgC,CACpC;EACE,MAAM;EACN,MAAM;EACN,YAAY,EAAE;EACd,UAAU,SAAS,KAChB,aACE;GACC,MAAM;GACN,YAAY,CAAC;IAAE,MAAM;IAAmB,MAAM;IAAS,OAAO,QAAQ;IAAO,CAAC;GAC9E,MAAM;GACN,UAAU,QAAQ;GACnB,EACJ;EACF,CACF;AAED,MAAK,MAAM,OAAO,KAChB,UAAS,KAAK;EACZ,MAAM;EACN,MAAM;EACN,YAAY,CAAC;GAAE,MAAM;GAAmB,MAAM;GAAS,OAAO,IAAI;GAAO,CAAC;EAC1E,UAAU,IAAI;EACf,CAAC;AAGJ,QAAO;EACL,MAAM;EACN,MAAM;EACN;EACA;EACD;;;;;AAWH,SAAgB,yBACd,MACA,cAC2B;CAC3B,IAAI,MAAM;CACV,MAAM,cAAc;CACpB,MAAM,aAAgD,EAAE;AAExD,OAAM,IAAI,WAAW,cAAc,OAAO,MAAM,SAAS,YAAY;AACnE,MAAI,gBAAgB,CAAC,aAAa,SAAS,KAAK,CAAE,QAAO;AAEzD,aAAW,QAAQ,WAAW,WAAW;AACzC,SAAO;GACP;AAEF,QAAO;EACL,MAAM;EACN;EACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-admonition.js","names":[],"sources":["../../src/mdx-plugins/remark-admonition.ts"],"sourcesContent":["import { type Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport { type Root, type RootContent } from 'mdast';\nimport { flattenNode } from '@/mdx-plugins/mdast-utils';\n\nexport interface RemarkAdmonitionOptions {\n tag?: string;\n\n /**\n * Map type to another type\n */\n typeMap?: Record<string, string>;\n}\n\n/**\n * Remark Plugin to support Admonition syntax\n *\n * Useful when Migrating from Docusaurus\n *\n * @deprecated Use `remarkDirectiveAdmonition` with `remark-directive` configured instead.\n */\nexport function remarkAdmonition(options: RemarkAdmonitionOptions = {}): Transformer<Root, Root> {\n const tag = options.tag ?? ':::';\n // compatible with Docusaurus\n const typeMap = options.typeMap ?? {\n info: 'info',\n warn: 'warn',\n\n note: 'info',\n tip: 'info',\n warning: 'warn',\n danger: 'error',\n };\n\n function replaceNodes(nodes: RootContent[]) {\n if (nodes.length === 0) return;\n\n let open = -1;\n let attributes = [];\n // if children contain nested admonitions\n let hasIntercept = false;\n\n for (let i = 0; i < nodes.length; i++) {\n if (nodes[i].type !== 'paragraph') continue;\n\n const text = flattenNode(nodes[i]);\n const typeName = Object.keys(typeMap).find((type) => text.startsWith(`${tag}${type}`));\n\n if (typeName) {\n if (open !== -1) {\n hasIntercept = true;\n continue;\n }\n\n open = i;\n\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'type',\n value: typeMap[typeName],\n });\n\n const meta = text.slice(`${tag}${typeName}`.length);\n if (meta.startsWith('[') && meta.endsWith(']')) {\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'title',\n value: meta.slice(1, -1),\n });\n }\n }\n\n if (open !== -1 && text === tag) {\n const children = nodes.slice(open + 1, i);\n\n nodes.splice(open, i - open + 1, {\n type: 'mdxJsxFlowElement',\n name: 'Callout',\n attributes,\n children: hasIntercept ? replaceNodes(children) : children,\n } as RootContent);\n open = -1;\n hasIntercept = false;\n attributes = [];\n i = open;\n }\n }\n }\n\n return (tree) => {\n visit(tree, (node) => {\n if (!('children' in node)) return;\n\n replaceNodes(node.children);\n });\n };\n}\n"],"mappings":";;;;;;;;;;;AAqBA,SAAgB,iBAAiB,UAAmC,EAAE,EAA2B;CAC/F,MAAM,MAAM,QAAQ,OAAO;CAE3B,MAAM,UAAU,QAAQ,WAAW;EACjC,MAAM;EACN,MAAM;EAEN,MAAM;EACN,KAAK;EACL,SAAS;EACT,QAAQ;EACT;CAED,SAAS,aAAa,OAAsB;AAC1C,MAAI,MAAM,WAAW,EAAG;EAExB,IAAI,OAAO;EACX,IAAI,aAAa,EAAE;EAEnB,IAAI,eAAe;AAEnB,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,OAAI,MAAM,GAAG,SAAS,YAAa;GAEnC,MAAM,OAAO,YAAY,MAAM,GAAG;GAClC,MAAM,WAAW,OAAO,KAAK,QAAQ,CAAC,MAAM,SAAS,KAAK,WAAW,GAAG,MAAM,OAAO,CAAC;AAEtF,OAAI,UAAU;AACZ,QAAI,SAAS,IAAI;AACf,oBAAe;AACf;;AAGF,WAAO;AAEP,eAAW,KAAK;KACd,MAAM;KACN,MAAM;KACN,OAAO,QAAQ;KAChB,CAAC;IAEF,MAAM,OAAO,KAAK,MAAM,GAAG,MAAM,WAAW,OAAO;AACnD,QAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,IAAI,CAC5C,YAAW,KAAK;KACd,MAAM;KACN,MAAM;KACN,OAAO,KAAK,MAAM,GAAG,GAAG;KACzB,CAAC;;AAIN,OAAI,SAAS,MAAM,SAAS,KAAK;IAC/B,MAAM,WAAW,MAAM,MAAM,OAAO,GAAG,EAAE;AAEzC,UAAM,OAAO,MAAM,IAAI,OAAO,GAAG;KAC/B,MAAM;KACN,MAAM;KACN;KACA,UAAU,eAAe,aAAa,SAAS,GAAG;KACnD,CAAgB;AACjB,WAAO;AACP,mBAAe;AACf,iBAAa,EAAE;AACf,QAAI;;;;AAKV,SAAQ,SAAS;AACf,QAAM,OAAO,SAAS;AACpB,OAAI,EAAE,cAAc,MAAO;AAE3B,gBAAa,KAAK,SAAS;IAC3B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-code-tab.js","names":["children"],"sources":["../../src/mdx-plugins/remark-code-tab.ts"],"sourcesContent":["import type { Processor, Transformer } from 'unified';\nimport type { BlockContent, Code, DefinitionContent, Root } from 'mdast';\nimport { visit } from 'unist-util-visit';\nimport type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport { generateCodeBlockTabs, parseCodeBlockAttributes } from '@/mdx-plugins/codeblock-utils';\n\ntype TabType = keyof typeof Types;\nexport interface RemarkCodeTabOptions {\n Tabs?: TabType;\n\n /**\n * Parse MDX in tab values\n *\n * @defaultValue false\n */\n parseMdx?: boolean;\n}\n\ndeclare module 'mdast' {\n export interface CodeData {\n tab?: string;\n }\n}\n\nconst Tabs = {\n convert(\n processor: Processor,\n nodes: Code[],\n withMdx = false,\n withParent = true,\n ): MdxJsxFlowElement {\n const tabs = Array.from(processTabValue(nodes).entries());\n\n if (!withMdx) {\n const children: MdxJsxFlowElement[] = tabs.map(([name, codes]) => {\n return {\n type: 'mdxJsxFlowElement',\n name: 'Tab',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'value',\n value: name,\n },\n ],\n children: codes,\n };\n });\n\n if (!withParent) return createFragment(children);\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'Tabs',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'items',\n value: {\n type: 'mdxJsxAttributeValueExpression',\n value: tabs.map(([name]) => name).join(', '),\n data: {\n estree: {\n type: 'Program',\n sourceType: 'module',\n comments: [],\n body: [\n {\n type: 'ExpressionStatement',\n expression: {\n type: 'ArrayExpression',\n elements: tabs.map(([name]) => ({\n type: 'Literal',\n value: name,\n })),\n },\n },\n ],\n },\n },\n },\n },\n ],\n children,\n };\n }\n\n const children: MdxJsxFlowElement[] = [\n {\n type: 'mdxJsxFlowElement',\n name: 'TabsList',\n attributes: [],\n children: tabs.map(([name]) => ({\n type: 'mdxJsxFlowElement',\n name: 'TabsTrigger',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'value',\n value: name,\n },\n ],\n children: [mdxToAst(processor, name) as unknown as BlockContent],\n })),\n },\n ...tabs.map(\n ([name, codes]) =>\n ({\n type: 'mdxJsxFlowElement',\n name: 'TabsContent',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'value',\n value: name,\n },\n ],\n children: codes,\n }) as MdxJsxFlowElement,\n ),\n ];\n\n if (!withParent) return createFragment(children);\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'Tabs',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'defaultValue',\n value: tabs[0][0],\n },\n ],\n children,\n };\n },\n};\n\nconst CodeBlockTabs = {\n convert(\n processor: Processor,\n nodes: Code[],\n withMdx = false,\n withParent = true,\n ): MdxJsxFlowElement {\n const tabs = Array.from(processTabValue(nodes).entries());\n\n const node = generateCodeBlockTabs({\n defaultValue: tabs[0][0],\n triggers: tabs.map(([name]) => ({\n value: name,\n children: [\n withMdx\n ? (mdxToAst(processor, name) as unknown as BlockContent)\n : {\n type: 'text',\n value: name,\n },\n ],\n })),\n tabs: tabs.map(([name, codes]) => ({\n value: name,\n children: codes,\n })),\n });\n\n if (!withParent) return createFragment(node.children);\n return node;\n },\n};\n\nconst Types = {\n CodeBlockTabs,\n Tabs,\n};\n\nexport function remarkCodeTab(\n this: Processor,\n options: RemarkCodeTabOptions = {},\n): Transformer<Root, Root> {\n const { parseMdx = false, Tabs = 'CodeBlockTabs' } = options;\n\n return (tree) => {\n const ignored = new WeakSet();\n\n visit(tree, (node) => {\n if (!('children' in node) || ignored.has(node)) return 'skip';\n let localTabs: TabType = Tabs;\n let localParseMdx = parseMdx;\n let withParent = true;\n\n if (node.type === 'mdxJsxFlowElement' && node.name && node.name in Types) {\n withParent = false;\n localTabs = node.name as TabType;\n\n // for `Tabs` in simple mode, it doesn't support MDX tab names\n if (node.name === 'Tabs' && localParseMdx) {\n localParseMdx = node.attributes.every(\n (attribute) => attribute.type !== 'mdxJsxAttribute' || attribute.name !== 'items',\n );\n }\n }\n\n let start = -1;\n let end = 0;\n const close = () => {\n if (start === -1 || start === end) return;\n const replacement = Types[localTabs].convert(\n this,\n node.children.slice(start, end) as Code[],\n localParseMdx,\n withParent,\n );\n\n ignored.add(replacement);\n node.children.splice(start, end - start, replacement);\n end = start;\n start = -1;\n };\n\n for (; end < node.children.length; end++) {\n const child = node.children[end];\n if (child.type !== 'code' || !child.meta) {\n close();\n continue;\n }\n\n const meta = parseCodeBlockAttributes(child.meta, ['tab']);\n if (!meta.attributes.tab) {\n close();\n continue;\n }\n\n if (start === -1) start = end;\n child.meta = meta.rest;\n child.data ??= {};\n child.data.tab = meta.attributes.tab;\n }\n\n close();\n });\n };\n}\n\nfunction processTabValue(nodes: Code[]) {\n const out = new Map<string, Code[]>();\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n const name = node.data?.tab ?? `Tab ${i + 1}`;\n const li = out.get(name) ?? [];\n li.push(node);\n out.set(name, li);\n }\n return out;\n}\n\n/**\n * MDX tab name to tab trigger node children\n */\nfunction mdxToAst(processor: Processor, name: string) {\n const node = processor.parse(name) as Root;\n\n if (node.type === 'root') {\n node.children = node.children.flatMap((child) => {\n if (child.type === 'paragraph') return child.children;\n\n return child;\n });\n }\n\n return node;\n}\n\nfunction createFragment(children: (BlockContent | DefinitionContent)[]): MdxJsxFlowElement {\n return {\n type: 'mdxJsxFlowElement',\n name: null,\n attributes: [],\n children,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-directive-admonition.js","names":[],"sources":["../../src/mdx-plugins/remark-directive-admonition.ts"],"sourcesContent":["import type { BlockContent, DefinitionContent, PhrasingContent, Root } from 'mdast';\nimport type { MdxJsxAttribute, MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport { Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\n\nexport interface RemarkDirectiveAdmonitionOptions {\n /**\n * the tag names of Callout component.\n */\n tags?: {\n CalloutContainer?: string;\n CalloutTitle?: string;\n CalloutDescription?: string;\n };\n\n /**\n * All supported admonition types and their linked Callout type.\n *\n * When specified, all defaults will be cleared.\n */\n types?: Record<string, string>;\n}\n\n/**\n * Remark Plugin to support Admonition syntax in Docusaurus, useful for migrating from Docusaurus.\n *\n * Requires [`remark-directive`](https://github.com/remarkjs/remark-directive) to be configured.\n */\nexport function remarkDirectiveAdmonition({\n tags: {\n CalloutContainer = 'CalloutContainer',\n CalloutTitle = 'CalloutTitle',\n CalloutDescription = 'CalloutDescription',\n } = {},\n types = {\n note: 'info',\n tip: 'info',\n info: 'info',\n warn: 'warning',\n warning: 'warning',\n danger: 'error',\n success: 'success',\n },\n}: RemarkDirectiveAdmonitionOptions = {}): Transformer<Root, Root> {\n return (tree) => {\n visit(tree, 'containerDirective', (node) => {\n if (!(node.name in types)) return;\n\n const attributes: MdxJsxAttribute[] = [\n {\n type: 'mdxJsxAttribute',\n name: 'type',\n value: types[node.name],\n },\n ];\n\n for (const [k, v] of Object.entries(node.attributes ?? {})) {\n attributes.push({\n type: 'mdxJsxAttribute',\n name: k,\n value: v,\n });\n }\n\n const titleNodes: PhrasingContent[] = [];\n const descriptionNodes: (BlockContent | DefinitionContent)[] = [];\n\n for (const item of node.children) {\n if (item.type === 'paragraph' && item.data?.directiveLabel) {\n titleNodes.push(...item.children);\n } else {\n descriptionNodes.push(item);\n }\n }\n\n const children: MdxJsxFlowElement[] = [];\n\n if (titleNodes.length > 0) {\n children.push({\n type: 'mdxJsxFlowElement',\n name: CalloutTitle,\n attributes: [],\n children: titleNodes as BlockContent[],\n });\n }\n\n if (descriptionNodes.length > 0) {\n children.push({\n type: 'mdxJsxFlowElement',\n name: CalloutDescription,\n attributes: [],\n children: descriptionNodes,\n });\n }\n\n Object.assign(node, {\n type: 'mdxJsxFlowElement',\n attributes,\n name: CalloutContainer,\n children,\n } satisfies MdxJsxFlowElement);\n });\n };\n}\n"],"mappings":";;;;;;;;AA4BA,SAAgB,0BAA0B,EACxC,MAAM,EACJ,mBAAmB,oBACnB,eAAe,gBACf,qBAAqB,yBACnB,EAAE,EACN,QAAQ;CACN,MAAM;CACN,KAAK;CACL,MAAM;CACN,MAAM;CACN,SAAS;CACT,QAAQ;CACR,SAAS;CACV,KACmC,EAAE,EAA2B;AACjE,SAAQ,SAAS;AACf,QAAM,MAAM,uBAAuB,SAAS;AAC1C,OAAI,EAAE,KAAK,QAAQ,OAAQ;GAE3B,MAAM,aAAgC,CACpC;IACE,MAAM;IACN,MAAM;IACN,OAAO,MAAM,KAAK;IACnB,CACF;AAED,QAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,KAAK,cAAc,EAAE,CAAC,CACxD,YAAW,KAAK;IACd,MAAM;IACN,MAAM;IACN,OAAO;IACR,CAAC;GAGJ,MAAM,aAAgC,EAAE;GACxC,MAAM,mBAAyD,EAAE;AAEjE,QAAK,MAAM,QAAQ,KAAK,SACtB,KAAI,KAAK,SAAS,eAAe,KAAK,MAAM,eAC1C,YAAW,KAAK,GAAG,KAAK,SAAS;OAEjC,kBAAiB,KAAK,KAAK;GAI/B,MAAM,WAAgC,EAAE;AAExC,OAAI,WAAW,SAAS,EACtB,UAAS,KAAK;IACZ,MAAM;IACN,MAAM;IACN,YAAY,EAAE;IACd,UAAU;IACX,CAAC;AAGJ,OAAI,iBAAiB,SAAS,EAC5B,UAAS,KAAK;IACZ,MAAM;IACN,MAAM;IACN,YAAY,EAAE;IACd,UAAU;IACX,CAAC;AAGJ,UAAO,OAAO,MAAM;IAClB,MAAM;IACN;IACA,MAAM;IACN;IACD,CAA6B;IAC9B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-feedback-block.js","names":[],"sources":["../../src/mdx-plugins/remark-feedback-block.ts"],"sourcesContent":["import type { Transformer } from 'unified';\nimport type { BlockContent, Root, RootContent } from 'mdast';\nimport type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport { visit } from 'unist-util-visit';\nimport { createHash } from 'node:crypto';\nimport { flattenNode } from './mdast-utils';\n\nexport interface RemarkFeedbackBlockOptions {\n /**\n * generate block ID, default to using MD5.\n */\n generateHash?: (ctx: { body: string }) => string;\n\n /**\n * @defaultValue FeedbackBlock\n */\n tagName?: string;\n\n /**\n * determine how the node should be resolved into a feedback block.\n *\n * scan paragraph, list, and image nodes by default.\n *\n * @returns\n * - `true`: convert the node into a feedback block.\n * - `false`: skip the current node and look into its children.\n * - `skip`: skip the current node and its children.\n */\n resolve?: (node: RootContent) => boolean | 'skip';\n\n /**\n * generate & include the block body to `<FeedbackBlock body=\"...\" />` as string\n *\n * @defaultValue true\n */\n generateBody?: boolean;\n}\n\nexport interface FeedbackBlockProps {\n id: string;\n /** the text body of block, only exists when `generateBody` is enabled. */\n body?: string;\n}\n\n/**\n * Generate MDX `<FeedbackBlock />` elements with an unique `id` for every block-like element.\n *\n * Note: the uniqueness is only guaranteed per MDX file/page.\n */\nexport function remarkFeedbackBlock({\n generateHash = ({ body }) => createHash('md5').update(body).digest('hex').substring(0, 16),\n tagName = 'FeedbackBlock',\n resolve = (node) => node.type === 'paragraph' || node.type === 'image' || node.type === 'list',\n generateBody = true,\n}: RemarkFeedbackBlockOptions = {}): Transformer<Root, Root> {\n return (tree) => {\n const counts = new Map<string, number>();\n\n visit(tree, (node, index, parent) => {\n if (node.type === 'root') return;\n const resolved = resolve(node);\n if (resolved === false) return;\n if (resolved === 'skip') return 'skip';\n\n const text = flattenNode(node).trim();\n if (text.length === 0 || !parent || typeof index !== 'number') return;\n let id = generateHash({ body: text });\n const count = counts.get(id) ?? 0;\n if (count > 0) id = `${id}-${count}`;\n counts.set(id, count + 1);\n\n const wrapper: MdxJsxFlowElement = {\n type: 'mdxJsxFlowElement',\n name: tagName,\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'id',\n value: id,\n },\n ],\n children: [node as BlockContent],\n };\n if (generateBody)\n wrapper.attributes.push({\n type: 'mdxJsxAttribute',\n name: 'body',\n value: text,\n });\n\n parent.children[index] = wrapper;\n return 'skip';\n });\n };\n}\n"],"mappings":";;;;;;;;;;AAiDA,SAAgB,oBAAoB,EAClC,gBAAgB,EAAE,WAAW,WAAW,MAAM,CAAC,OAAO,KAAK,CAAC,OAAO,MAAM,CAAC,UAAU,GAAG,GAAG,EAC1F,UAAU,iBACV,WAAW,SAAS,KAAK,SAAS,eAAe,KAAK,SAAS,WAAW,KAAK,SAAS,QACxF,eAAe,SACe,EAAE,EAA2B;AAC3D,SAAQ,SAAS;EACf,MAAM,yBAAS,IAAI,KAAqB;AAExC,QAAM,OAAO,MAAM,OAAO,WAAW;AACnC,OAAI,KAAK,SAAS,OAAQ;GAC1B,MAAM,WAAW,QAAQ,KAAK;AAC9B,OAAI,aAAa,MAAO;AACxB,OAAI,aAAa,OAAQ,QAAO;GAEhC,MAAM,OAAO,YAAY,KAAK,CAAC,MAAM;AACrC,OAAI,KAAK,WAAW,KAAK,CAAC,UAAU,OAAO,UAAU,SAAU;GAC/D,IAAI,KAAK,aAAa,EAAE,MAAM,MAAM,CAAC;GACrC,MAAM,QAAQ,OAAO,IAAI,GAAG,IAAI;AAChC,OAAI,QAAQ,EAAG,MAAK,GAAG,GAAG,GAAG;AAC7B,UAAO,IAAI,IAAI,QAAQ,EAAE;GAEzB,MAAM,UAA6B;IACjC,MAAM;IACN,MAAM;IACN,YAAY,CACV;KACE,MAAM;KACN,MAAM;KACN,OAAO;KACR,CACF;IACD,UAAU,CAAC,KAAqB;IACjC;AACD,OAAI,aACF,SAAQ,WAAW,KAAK;IACtB,MAAM;IACN,MAAM;IACN,OAAO;IACR,CAAC;AAEJ,UAAO,SAAS,SAAS;AACzB,UAAO;IACP"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-heading.js","names":[],"sources":["../../src/mdx-plugins/remark-heading.ts"],"sourcesContent":["import Slugger from 'github-slugger';\nimport type { Heading, Root } from 'mdast';\nimport type { Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport type { TOCItemType } from '@/toc';\nimport { flattenNode } from '@/mdx-plugins/mdast-utils';\n\nconst slugger = new Slugger();\n\ndeclare module 'mdast' {\n export interface HeadingData extends Data {\n hProperties?: {\n id?: string;\n };\n }\n}\n\nconst regex = /\\s*\\[#(?<slug>[^]+?)]\\s*$/;\n\nexport interface RemarkHeadingOptions {\n slug?: (root: Root, heading: Heading, text: string) => string;\n\n /**\n * Allow custom headings ids\n *\n * @defaultValue true\n */\n customId?: boolean;\n\n /**\n * Attach an array of `TOCItemType` to `file.data.toc`\n *\n * @defaultValue true\n */\n generateToc?: boolean;\n}\n\n/**\n * Add heading ids and extract TOC\n */\nexport function remarkHeading({\n slug: defaultSlug,\n customId = true,\n generateToc = true,\n}: RemarkHeadingOptions = {}): Transformer<Root, Root> {\n return (root, file) => {\n const toc: TOCItemType[] = [];\n slugger.reset();\n\n visit(root, 'heading', (heading) => {\n heading.data ||= {};\n heading.data.hProperties ||= {};\n const props = heading.data.hProperties;\n\n const lastNode = heading.children.at(-1);\n if (lastNode?.type === 'text' && customId) {\n const match = regex.exec(lastNode.value);\n\n if (match?.[1]) {\n props.id = match[1];\n lastNode.value = lastNode.value.slice(0, match.index);\n }\n }\n\n let flattened: string | null = null;\n if (!props.id) {\n flattened ??= flattenNode(heading);\n\n props.id = defaultSlug ? defaultSlug(root, heading, flattened) : slugger.slug(flattened);\n }\n\n if (generateToc) {\n toc.push({\n title: flattened ?? flattenNode(heading),\n url: `#${props.id}`,\n depth: heading.depth,\n });\n }\n\n return 'skip';\n });\n\n if (generateToc) file.data.toc = toc;\n };\n}\n"],"mappings":";;;;;AAOA,MAAM,UAAU,IAAI,SAAS;AAU7B,MAAM,QAAQ;;;;AAuBd,SAAgB,cAAc,EAC5B,MAAM,aACN,WAAW,MACX,cAAc,SACU,EAAE,EAA2B;AACrD,SAAQ,MAAM,SAAS;EACrB,MAAM,MAAqB,EAAE;AAC7B,UAAQ,OAAO;AAEf,QAAM,MAAM,YAAY,YAAY;AAClC,WAAQ,SAAS,EAAE;AACnB,WAAQ,KAAK,gBAAgB,EAAE;GAC/B,MAAM,QAAQ,QAAQ,KAAK;GAE3B,MAAM,WAAW,QAAQ,SAAS,GAAG,GAAG;AACxC,OAAI,UAAU,SAAS,UAAU,UAAU;IACzC,MAAM,QAAQ,MAAM,KAAK,SAAS,MAAM;AAExC,QAAI,QAAQ,IAAI;AACd,WAAM,KAAK,MAAM;AACjB,cAAS,QAAQ,SAAS,MAAM,MAAM,GAAG,MAAM,MAAM;;;GAIzD,IAAI,YAA2B;AAC/B,OAAI,CAAC,MAAM,IAAI;AACb,kBAAc,YAAY,QAAQ;AAElC,UAAM,KAAK,cAAc,YAAY,MAAM,SAAS,UAAU,GAAG,QAAQ,KAAK,UAAU;;AAG1F,OAAI,YACF,KAAI,KAAK;IACP,OAAO,aAAa,YAAY,QAAQ;IACxC,KAAK,IAAI,MAAM;IACf,OAAO,QAAQ;IAChB,CAAC;AAGJ,UAAO;IACP;AAEF,MAAI,YAAa,MAAK,KAAK,MAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-image.js","names":["path"],"sources":["../../src/mdx-plugins/remark-image.ts"],"sourcesContent":["import * as path from 'node:path';\nimport type { Image, Root } from 'mdast';\nimport type { Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport type { MdxjsEsm } from 'mdast-util-mdxjs-esm';\nimport type { ISizeCalculationResult } from 'image-size/types/interface';\nimport type { MdxJsxAttribute, MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\nimport { fileURLToPath } from 'node:url';\n\nconst VALID_BLUR_EXT = ['.jpeg', '.png', '.webp', '.avif', '.jpg'];\nconst EXTERNAL_URL_REGEX = /^https?:\\/\\//;\n\ntype ExternalImageOptions =\n | {\n /**\n * timeout for fetching remote images (in milliseconds)\n */\n timeout?: number;\n }\n | boolean;\n\nexport interface RemarkImageOptions {\n /**\n * Directory or base URL to resolve absolute image paths\n */\n publicDir?: string;\n\n /**\n * Preferred placeholder type, only available with `useImport` + local images.\n *\n * @defaultValue 'blur'\n */\n placeholder?: 'blur' | 'none';\n\n /**\n * Define how to handle errors when fetching image size.\n *\n * - `error` (default): throw an error.\n * - `ignore`: do absolutely nothing (Next.js Image component may complain).\n * - `hide`: remove that image element.\n *\n * @defaultValue 'error'\n */\n onError?: 'error' | 'hide' | 'ignore' | ((error: Error) => void);\n\n /**\n * Import images in the file, and let bundlers handle it.\n *\n * ```tsx\n * import MyImage from \"./public/img.png\";\n *\n * <img src={MyImage} />\n * ```\n *\n * When disabled, `placeholder` will be ignored.\n *\n * @defaultValue true\n */\n useImport?: boolean;\n\n /**\n * Fetch image size of external URLs\n *\n * @defaultValue true\n */\n external?: ExternalImageOptions;\n}\n\ntype Source =\n | {\n type: 'url';\n url: URL;\n }\n | {\n type: 'file';\n file: string;\n };\n\n/**\n * Turn images into Next.js Image compatible usage.\n */\nexport function remarkImage({\n placeholder = 'blur',\n external = true,\n useImport = true,\n onError = 'error',\n publicDir = path.join(process.cwd(), 'public'),\n}: RemarkImageOptions = {}): Transformer<Root, Root> {\n return async (tree, file) => {\n const importsToInject: { variableName: string; importPath: string }[] = [];\n const promises: Promise<void>[] = [];\n\n async function onImage(src: Source, node: Image): Promise<MdxJsxFlowElement | undefined> {\n const attributes: MdxJsxAttribute[] = [\n {\n type: 'mdxJsxAttribute',\n name: 'alt',\n value: node.alt ?? 'image',\n },\n ];\n\n if (node.title) {\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'title',\n value: node.title,\n });\n }\n\n if (src.type === 'file' && useImport) {\n // Unique variable name for the given static image URL\n const variableName = `__img${importsToInject.length}`;\n const hasBlur =\n placeholder === 'blur' && VALID_BLUR_EXT.some((ext) => src.file.endsWith(ext));\n\n if (!file.dirname) {\n throw new Error(\n 'When `useImport` is enabled, you must specify `dirname` in the VFile passed to compiler.',\n );\n }\n\n importsToInject.push({\n variableName,\n importPath: getImportPath(src.file, file.dirname),\n });\n\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'src',\n value: {\n type: 'mdxJsxAttributeValueExpression',\n value: variableName,\n data: {\n estree: {\n body: [\n {\n type: 'ExpressionStatement',\n expression: { type: 'Identifier', name: variableName },\n },\n ],\n type: 'Program',\n sourceType: 'script',\n },\n },\n },\n });\n\n const out: MdxJsxFlowElement = {\n children: [],\n type: 'mdxJsxFlowElement',\n name: 'img',\n attributes,\n };\n\n if (hasBlur) {\n out.attributes.push({\n type: 'mdxJsxAttribute',\n name: 'placeholder',\n value: 'blur',\n });\n }\n\n return out;\n }\n\n const size = await getImageSize(src, external).catch((e) => {\n throw new Error(\n `[Remark Image] Failed obtain image size for ${node.url} (public directory configured as ${publicDir})`,\n {\n cause: e,\n },\n );\n });\n\n if (!size) return;\n\n attributes.push(\n {\n type: 'mdxJsxAttribute',\n name: 'src',\n // `src` doesn't support file paths, we can use `node.url` for files and let the underlying framework handle it\n value: src.type === 'url' ? src.url.toString() : node.url,\n },\n {\n type: 'mdxJsxAttribute',\n name: 'width',\n value: size.width.toString(),\n },\n {\n type: 'mdxJsxAttribute',\n name: 'height',\n value: size.height.toString(),\n },\n );\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'img',\n attributes,\n children: [],\n };\n }\n\n visit(tree, 'image', (node) => {\n const src = parseSrc(decodeURI(node.url), publicDir, file.dirname);\n if (!src) return;\n\n const task = onImage(src, node)\n .catch((e) => {\n // ignore SVG as it is not always needed\n if (onError === 'ignore' || node.url.endsWith('.svg')) {\n return;\n }\n\n if (onError === 'hide') {\n return {\n type: 'mdxJsxFlowElement',\n name: null,\n attributes: [],\n children: [],\n } satisfies MdxJsxFlowElement;\n }\n\n if (onError === 'error') throw e;\n onError(e);\n })\n .then((res) => {\n if (res) Object.assign(node, res);\n });\n\n promises.push(task);\n });\n\n await Promise.all(promises);\n if (importsToInject.length === 0) return;\n\n const imports = importsToInject.map(\n ({ variableName, importPath }) =>\n ({\n type: 'mdxjsEsm',\n data: {\n estree: {\n body: [\n {\n type: 'ImportDeclaration',\n source: { type: 'Literal', value: importPath },\n specifiers: [\n {\n type: 'ImportDefaultSpecifier',\n local: { type: 'Identifier', name: variableName },\n },\n ],\n },\n ],\n },\n },\n }) as MdxjsEsm,\n );\n\n tree.children.unshift(...imports);\n };\n}\n\nfunction getImportPath(file: string, dir: string): string {\n const relative = path.relative(dir, file).replaceAll(path.sep, '/');\n\n return relative.startsWith('../') ? relative : `./${relative}`;\n}\n\n/**\n * @param src - src href\n * @param publicDir - dir/url to resolve absolute paths\n * @param dir - dir to resolve relative paths\n */\nfunction parseSrc(src: string, publicDir: string, dir?: string): Source | undefined {\n if (src.startsWith('file:///')) return { type: 'file', file: fileURLToPath(src) };\n\n if (EXTERNAL_URL_REGEX.test(src)) {\n return {\n type: 'url',\n url: new URL(src),\n };\n }\n\n if (src.startsWith('/')) {\n if (EXTERNAL_URL_REGEX.test(publicDir)) {\n const url = new URL(publicDir);\n const segs = [...url.pathname.split('/'), ...src.split('/')].filter((v) => v.length > 0);\n\n url.pathname = `/${segs.join('/')}`;\n return { type: 'url', url };\n }\n\n return {\n type: 'file',\n file: path.join(publicDir, src),\n };\n }\n\n if (!dir) {\n console.warn(\n `[Remark Image] found relative path ${src} but missing 'dirname' in VFile, this image will be skipped for now.`,\n );\n return;\n }\n\n return {\n type: 'file',\n file: path.join(dir, src),\n };\n}\n\nasync function getImageSize(\n src: Source,\n onExternal: ExternalImageOptions,\n): Promise<ISizeCalculationResult | undefined> {\n if (src.type === 'file') {\n const { imageSizeFromFile } = await import('image-size/fromFile');\n return imageSizeFromFile(src.file);\n }\n if (onExternal === false) return;\n\n const { timeout } = typeof onExternal === 'object' ? onExternal : {};\n const res = await fetch(src.url, {\n signal: typeof timeout === 'number' ? AbortSignal.timeout(timeout) : undefined,\n });\n if (!res.ok) {\n throw new Error(\n `[Remark Image] Failed to fetch ${src.url} (${res.status}): ${await res.text()}`,\n );\n }\n\n const { imageSize } = await import('image-size');\n return imageSize(new Uint8Array(await res.arrayBuffer()));\n}\n"],"mappings":"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"}
|