@hanzo/docs-core 16.2.6 → 16.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/dist/advanced-CEwMef7q.js +80 -0
  2. package/dist/advanced-CEwMef7q.js.map +1 -0
  3. package/dist/algolia-BrWPzYE_.js +49 -0
  4. package/dist/algolia-BrWPzYE_.js.map +1 -0
  5. package/dist/algolia-CBBN8R6-.d.ts +68 -0
  6. package/dist/algolia-CBBN8R6-.d.ts.map +1 -0
  7. package/dist/breadcrumb.d.ts +29 -27
  8. package/dist/breadcrumb.d.ts.map +1 -0
  9. package/dist/breadcrumb.js +55 -72
  10. package/dist/breadcrumb.js.map +1 -0
  11. package/dist/chunk-B-ezknvj.js +42 -0
  12. package/dist/codeblock-utils-lld8UiQo.d.ts +37 -0
  13. package/dist/codeblock-utils-lld8UiQo.d.ts.map +1 -0
  14. package/dist/content/github.d.ts +43 -32
  15. package/dist/content/github.d.ts.map +1 -0
  16. package/dist/content/github.js +29 -43
  17. package/dist/content/github.js.map +1 -0
  18. package/dist/content/index.d.ts +20 -13
  19. package/dist/content/index.d.ts.map +1 -0
  20. package/dist/content/index.js +17 -23
  21. package/dist/content/index.js.map +1 -0
  22. package/dist/content/mdx/preset-bundler.d.ts +22 -24
  23. package/dist/content/mdx/preset-bundler.d.ts.map +1 -0
  24. package/dist/content/mdx/preset-bundler.js +38 -69
  25. package/dist/content/mdx/preset-bundler.js.map +1 -0
  26. package/dist/content/mdx/preset-runtime.d.ts +22 -24
  27. package/dist/content/mdx/preset-runtime.d.ts.map +1 -0
  28. package/dist/content/mdx/preset-runtime.js +36 -68
  29. package/dist/content/mdx/preset-runtime.js.map +1 -0
  30. package/dist/content/toc.d.ts +7 -6
  31. package/dist/content/toc.d.ts.map +1 -0
  32. package/dist/content/toc.js +15 -19
  33. package/dist/content/toc.js.map +1 -0
  34. package/dist/definitions-DuxDer_c.d.ts +62 -0
  35. package/dist/definitions-DuxDer_c.d.ts.map +1 -0
  36. package/dist/dynamic-link.d.ts +7 -5
  37. package/dist/dynamic-link.d.ts.map +1 -0
  38. package/dist/dynamic-link.js +29 -27
  39. package/dist/dynamic-link.js.map +1 -0
  40. package/dist/fetch-B5e9CFfN.js +20 -0
  41. package/dist/fetch-B5e9CFfN.js.map +1 -0
  42. package/dist/framework/index.d.ts +38 -29
  43. package/dist/framework/index.d.ts.map +1 -0
  44. package/dist/framework/index.js +68 -17
  45. package/dist/framework/index.js.map +1 -0
  46. package/dist/framework/next.d.ts +15 -10
  47. package/dist/framework/next.d.ts.map +1 -0
  48. package/dist/framework/next.js +18 -26
  49. package/dist/framework/next.js.map +1 -0
  50. package/dist/framework/react-router.d.ts +15 -10
  51. package/dist/framework/react-router.d.ts.map +1 -0
  52. package/dist/framework/react-router.js +42 -55
  53. package/dist/framework/react-router.js.map +1 -0
  54. package/dist/framework/tanstack.d.ts +15 -10
  55. package/dist/framework/tanstack.d.ts.map +1 -0
  56. package/dist/framework/tanstack.js +54 -69
  57. package/dist/framework/tanstack.js.map +1 -0
  58. package/dist/framework/waku.d.ts +15 -10
  59. package/dist/framework/waku.d.ts.map +1 -0
  60. package/dist/framework/waku.js +47 -58
  61. package/dist/framework/waku.js.map +1 -0
  62. package/dist/highlight/client.d.ts +6 -7
  63. package/dist/highlight/client.d.ts.map +1 -0
  64. package/dist/highlight/client.js +22 -14
  65. package/dist/highlight/client.js.map +1 -0
  66. package/dist/highlight/index.d.ts +2 -30
  67. package/dist/highlight/index.js +3 -13
  68. package/dist/i18n/index.d.ts +2 -39
  69. package/dist/i18n/index.js +6 -7
  70. package/dist/i18n/index.js.map +1 -0
  71. package/dist/i18n/middleware.d.ts +36 -28
  72. package/dist/i18n/middleware.d.ts.map +1 -0
  73. package/dist/i18n/middleware.js +55 -73
  74. package/dist/i18n/middleware.js.map +1 -0
  75. package/dist/icon-Ds1OCIhh.js +19 -0
  76. package/dist/icon-Ds1OCIhh.js.map +1 -0
  77. package/dist/index-2U6Tl4--.d.ts +379 -0
  78. package/dist/index-2U6Tl4--.d.ts.map +1 -0
  79. package/dist/index-Bw-DCOra.d.ts +41 -0
  80. package/dist/index-Bw-DCOra.d.ts.map +1 -0
  81. package/dist/link.d.ts +17 -15
  82. package/dist/link.d.ts.map +1 -0
  83. package/dist/link.js +29 -9
  84. package/dist/link.js.map +1 -0
  85. package/dist/mdast-utils-mc9-X-PK.js +40 -0
  86. package/dist/mdast-utils-mc9-X-PK.js.map +1 -0
  87. package/dist/mdx-plugins/codeblock-utils.d.ts +2 -29
  88. package/dist/mdx-plugins/codeblock-utils.js +71 -9
  89. package/dist/mdx-plugins/codeblock-utils.js.map +1 -0
  90. package/dist/mdx-plugins/index.d.ts +15 -20
  91. package/dist/mdx-plugins/index.js +18 -73
  92. package/dist/mdx-plugins/rehype-code.d.ts +2 -55
  93. package/dist/mdx-plugins/rehype-code.js +5 -15
  94. package/dist/mdx-plugins/rehype-toc.d.ts +2 -14
  95. package/dist/mdx-plugins/rehype-toc.js +3 -7
  96. package/dist/mdx-plugins/remark-admonition.d.ts +2 -20
  97. package/dist/mdx-plugins/remark-admonition.js +74 -8
  98. package/dist/mdx-plugins/remark-admonition.js.map +1 -0
  99. package/dist/mdx-plugins/remark-code-tab.d.ts +2 -30
  100. package/dist/mdx-plugins/remark-code-tab.js +183 -7
  101. package/dist/mdx-plugins/remark-code-tab.js.map +1 -0
  102. package/dist/mdx-plugins/remark-directive-admonition.d.ts +2 -27
  103. package/dist/mdx-plugins/remark-directive-admonition.js +60 -7
  104. package/dist/mdx-plugins/remark-directive-admonition.js.map +1 -0
  105. package/dist/mdx-plugins/remark-gfm.d.ts +2 -1
  106. package/dist/mdx-plugins/remark-gfm.js +3 -7
  107. package/dist/mdx-plugins/remark-heading.d.ts +2 -31
  108. package/dist/mdx-plugins/remark-heading.js +45 -8
  109. package/dist/mdx-plugins/remark-heading.js.map +1 -0
  110. package/dist/mdx-plugins/remark-image.d.ts +2 -57
  111. package/dist/mdx-plugins/remark-image.js +192 -7
  112. package/dist/mdx-plugins/remark-image.js.map +1 -0
  113. package/dist/mdx-plugins/remark-mdx-files.d.ts +2 -40
  114. package/dist/mdx-plugins/remark-mdx-files.js +96 -7
  115. package/dist/mdx-plugins/remark-mdx-files.js.map +1 -0
  116. package/dist/mdx-plugins/remark-mdx-mermaid.d.ts +2 -15
  117. package/dist/mdx-plugins/remark-mdx-mermaid.js +31 -7
  118. package/dist/mdx-plugins/remark-mdx-mermaid.js.map +1 -0
  119. package/dist/mdx-plugins/remark-npm.d.ts +2 -31
  120. package/dist/mdx-plugins/remark-npm.js +68 -8
  121. package/dist/mdx-plugins/remark-npm.js.map +1 -0
  122. package/dist/mdx-plugins/remark-steps.d.ts +2 -23
  123. package/dist/mdx-plugins/remark-steps.js +77 -7
  124. package/dist/mdx-plugins/remark-steps.js.map +1 -0
  125. package/dist/mdx-plugins/remark-structure.d.ts +2 -71
  126. package/dist/mdx-plugins/remark-structure.js +105 -11
  127. package/dist/mdx-plugins/remark-structure.js.map +1 -0
  128. package/dist/mixedbread-DlByNYSd.js +88 -0
  129. package/dist/mixedbread-DlByNYSd.js.map +1 -0
  130. package/dist/negotiation/index.d.ts +6 -4
  131. package/dist/negotiation/index.d.ts.map +1 -0
  132. package/dist/negotiation/index.js +41 -11
  133. package/dist/negotiation/index.js.map +1 -0
  134. package/dist/normalize-url-DP9-1I-S.js +16 -0
  135. package/dist/normalize-url-DP9-1I-S.js.map +1 -0
  136. package/dist/orama-cloud-MyA-JBt1.js +84 -0
  137. package/dist/orama-cloud-MyA-JBt1.js.map +1 -0
  138. package/dist/page-tree/index.d.ts +23 -11
  139. package/dist/page-tree/index.d.ts.map +1 -0
  140. package/dist/page-tree/index.js +3 -17
  141. package/dist/path-DPJpqaLb.js +60 -0
  142. package/dist/path-DPJpqaLb.js.map +1 -0
  143. package/dist/rehype-code-CQDbiG8_.js +241 -0
  144. package/dist/rehype-code-CQDbiG8_.js.map +1 -0
  145. package/dist/rehype-code-vVWG4-ej.d.ts +58 -0
  146. package/dist/rehype-code-vVWG4-ej.d.ts.map +1 -0
  147. package/dist/rehype-toc-D-eLj90w.js +143 -0
  148. package/dist/rehype-toc-D-eLj90w.js.map +1 -0
  149. package/dist/rehype-toc-DJvSyE0o.d.ts +18 -0
  150. package/dist/rehype-toc-DJvSyE0o.d.ts.map +1 -0
  151. package/dist/remark-admonition-DOwBWzsH.d.ts +22 -0
  152. package/dist/remark-admonition-DOwBWzsH.d.ts.map +1 -0
  153. package/dist/remark-code-tab-CXsYlims.d.ts +32 -0
  154. package/dist/remark-code-tab-CXsYlims.d.ts.map +1 -0
  155. package/dist/remark-directive-admonition-BCm_yiU9.d.ts +36 -0
  156. package/dist/remark-directive-admonition-BCm_yiU9.d.ts.map +1 -0
  157. package/dist/remark-gfm-CeWpMwyk.d.ts +2 -0
  158. package/dist/remark-heading-CXvCY0go.d.ts +37 -0
  159. package/dist/remark-heading-CXvCY0go.d.ts.map +1 -0
  160. package/dist/remark-image-CvUis4R1.d.ts +65 -0
  161. package/dist/remark-image-CvUis4R1.d.ts.map +1 -0
  162. package/dist/remark-mdx-files-DOYafA4x.d.ts +42 -0
  163. package/dist/remark-mdx-files-DOYafA4x.d.ts.map +1 -0
  164. package/dist/remark-mdx-mermaid-BdSUUiCG.d.ts +17 -0
  165. package/dist/remark-mdx-mermaid-BdSUUiCG.d.ts.map +1 -0
  166. package/dist/remark-npm-BIvIEKT2.d.ts +36 -0
  167. package/dist/remark-npm-BIvIEKT2.d.ts.map +1 -0
  168. package/dist/remark-steps-CHJN-rtm.d.ts +28 -0
  169. package/dist/remark-steps-CHJN-rtm.d.ts.map +1 -0
  170. package/dist/remark-structure-RZD2gGKp.d.ts +77 -0
  171. package/dist/remark-structure-RZD2gGKp.d.ts.map +1 -0
  172. package/dist/remove-undefined-DgDIJk1A.js +19 -0
  173. package/dist/remove-undefined-DgDIJk1A.js.map +1 -0
  174. package/dist/search/algolia.d.ts +3 -69
  175. package/dist/search/algolia.js +69 -63
  176. package/dist/search/algolia.js.map +1 -0
  177. package/dist/search/client.d.ts +120 -114
  178. package/dist/search/client.d.ts.map +1 -0
  179. package/dist/search/client.js +92 -91
  180. package/dist/search/client.js.map +1 -0
  181. package/dist/search/index.d.ts +20 -18
  182. package/dist/search/index.d.ts.map +1 -0
  183. package/dist/search/index.js +3 -7
  184. package/dist/search/orama-cloud.d.ts +70 -68
  185. package/dist/search/orama-cloud.d.ts.map +1 -0
  186. package/dist/search/orama-cloud.js +46 -54
  187. package/dist/search/orama-cloud.js.map +1 -0
  188. package/dist/search/server.d.ts +6 -136
  189. package/dist/search/server.js +292 -369
  190. package/dist/search/server.js.map +1 -0
  191. package/dist/search-GCBSTRxD.js +44 -0
  192. package/dist/search-GCBSTRxD.js.map +1 -0
  193. package/dist/server-CPR_fgkH.d.ts +133 -0
  194. package/dist/server-CPR_fgkH.d.ts.map +1 -0
  195. package/dist/shiki-4oMYwHED.js +80 -0
  196. package/dist/shiki-4oMYwHED.js.map +1 -0
  197. package/dist/shiki-CIBQys54.d.ts +33 -0
  198. package/dist/shiki-CIBQys54.d.ts.map +1 -0
  199. package/dist/source/client/index.d.ts +7 -5
  200. package/dist/source/client/index.d.ts.map +1 -0
  201. package/dist/source/client/index.js +24 -35
  202. package/dist/source/client/index.js.map +1 -0
  203. package/dist/source/index.d.ts +3 -42
  204. package/dist/source/index.js +599 -739
  205. package/dist/source/index.js.map +1 -0
  206. package/dist/source/plugins/lucide-icons.d.ts +7 -7
  207. package/dist/source/plugins/lucide-icons.d.ts.map +1 -0
  208. package/dist/source/plugins/lucide-icons.js +21 -20
  209. package/dist/source/plugins/lucide-icons.js.map +1 -0
  210. package/dist/source/plugins/slugs.d.ts +3 -0
  211. package/dist/source/plugins/slugs.js +65 -0
  212. package/dist/source/plugins/slugs.js.map +1 -0
  213. package/dist/source/schema.d.ts +17 -14
  214. package/dist/source/schema.d.ts.map +1 -0
  215. package/dist/source/schema.js +26 -22
  216. package/dist/source/schema.js.map +1 -0
  217. package/dist/static-vTmR4-T2.js +51 -0
  218. package/dist/static-vTmR4-T2.js.map +1 -0
  219. package/dist/toc.d.ts +38 -25
  220. package/dist/toc.d.ts.map +1 -0
  221. package/dist/toc.js +123 -136
  222. package/dist/toc.js.map +1 -0
  223. package/dist/util-CK2ykiif.d.ts +8 -0
  224. package/dist/util-CK2ykiif.d.ts.map +1 -0
  225. package/dist/util-s9piKHsk.js +10 -0
  226. package/dist/util-s9piKHsk.js.map +1 -0
  227. package/dist/utils/use-effect-event.d.ts +3 -1
  228. package/dist/utils/use-effect-event.d.ts.map +1 -0
  229. package/dist/utils/use-effect-event.js +16 -13
  230. package/dist/utils/use-effect-event.js.map +1 -0
  231. package/dist/utils/use-media-query.d.ts +3 -1
  232. package/dist/utils/use-media-query.d.ts.map +1 -0
  233. package/dist/utils/use-media-query.js +20 -20
  234. package/dist/utils/use-media-query.js.map +1 -0
  235. package/dist/utils/use-on-change.d.ts +3 -1
  236. package/dist/utils/use-on-change.d.ts.map +1 -0
  237. package/dist/utils/use-on-change.js +23 -7
  238. package/dist/utils/use-on-change.js.map +1 -0
  239. package/dist/utils-DUvi2WkD.js +134 -0
  240. package/dist/utils-DUvi2WkD.js.map +1 -0
  241. package/package.json +72 -71
  242. package/dist/algolia-IZEDLPHE.js +0 -58
  243. package/dist/chunk-5PMI7QDD.js +0 -220
  244. package/dist/chunk-ADBHPKXG.js +0 -78
  245. package/dist/chunk-APKPSBSB.js +0 -74
  246. package/dist/chunk-CH7YHH7V.js +0 -222
  247. package/dist/chunk-EFVXL2PP.js +0 -144
  248. package/dist/chunk-EMWGTXSW.js +0 -19
  249. package/dist/chunk-FAEPKD7U.js +0 -20
  250. package/dist/chunk-FUUVPEA5.js +0 -29
  251. package/dist/chunk-GINBKBVQ.js +0 -12
  252. package/dist/chunk-GLRQBLGN.js +0 -59
  253. package/dist/chunk-JUF4WZ6G.js +0 -117
  254. package/dist/chunk-K4WNLOVQ.js +0 -75
  255. package/dist/chunk-L4JKQWCM.js +0 -131
  256. package/dist/chunk-MA6O2UUE.js +0 -50
  257. package/dist/chunk-ONG4RVCR.js +0 -8
  258. package/dist/chunk-OTD7MV33.js +0 -53
  259. package/dist/chunk-PFNP6PEB.js +0 -11
  260. package/dist/chunk-QJRXMG4S.js +0 -275
  261. package/dist/chunk-SH7BNTG7.js +0 -38
  262. package/dist/chunk-TWIDBWFG.js +0 -84
  263. package/dist/chunk-U67V476Y.js +0 -35
  264. package/dist/chunk-VLSDGCJE.js +0 -47
  265. package/dist/chunk-W6WTLKRA.js +0 -73
  266. package/dist/chunk-X2HFD5QJ.js +0 -275
  267. package/dist/chunk-XJ6ZQNEX.js +0 -91
  268. package/dist/chunk-XN2LKXFZ.js +0 -101
  269. package/dist/chunk-XOFXGHS4.js +0 -93
  270. package/dist/chunk-XZSI7AHE.js +0 -67
  271. package/dist/chunk-YVVDKJ2H.js +0 -34
  272. package/dist/chunk-ZMWYLUDP.js +0 -21
  273. package/dist/definitions-pJ7PybYY.d.ts +0 -60
  274. package/dist/fetch-IBTWQCJR.js +0 -22
  275. package/dist/loader-BvlPPJX0.d.ts +0 -321
  276. package/dist/mixedbread-RAHDVXGJ.js +0 -118
  277. package/dist/orama-cloud-UZAPMPFV.js +0 -93
  278. package/dist/static-A2YJ5TXV.js +0 -62
  279. package/dist/util-bZU2QeJ2.d.ts +0 -6
@@ -1,7 +1,192 @@
1
- import {
2
- remarkImage
3
- } from "../chunk-5PMI7QDD.js";
4
- import "../chunk-U67V476Y.js";
5
- export {
6
- remarkImage
7
- };
1
+ import { visit } from "unist-util-visit";
2
+ import * as path$1 from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ //#region src/mdx-plugins/remark-image.ts
6
+ const VALID_BLUR_EXT = [
7
+ ".jpeg",
8
+ ".png",
9
+ ".webp",
10
+ ".avif",
11
+ ".jpg"
12
+ ];
13
+ const EXTERNAL_URL_REGEX = /^https?:\/\//;
14
+ /**
15
+ * Turn images into Next.js Image compatible usage.
16
+ */
17
+ function remarkImage({ placeholder = "blur", external = true, useImport = true, onError = "error", publicDir = path$1.join(process.cwd(), "public") } = {}) {
18
+ return async (tree, file) => {
19
+ const importsToInject = [];
20
+ const promises = [];
21
+ async function onImage(src, node) {
22
+ const attributes = [{
23
+ type: "mdxJsxAttribute",
24
+ name: "alt",
25
+ value: node.alt ?? "image"
26
+ }];
27
+ if (node.title) attributes.push({
28
+ type: "mdxJsxAttribute",
29
+ name: "title",
30
+ value: node.title
31
+ });
32
+ if (src.type === "file" && useImport) {
33
+ const variableName = `__img${importsToInject.length}`;
34
+ const hasBlur = placeholder === "blur" && VALID_BLUR_EXT.some((ext) => src.file.endsWith(ext));
35
+ if (!file.dirname) throw new Error("When `useImport` is enabled, you must specify `dirname` in the VFile passed to compiler.");
36
+ importsToInject.push({
37
+ variableName,
38
+ importPath: getImportPath(src.file, file.dirname)
39
+ });
40
+ attributes.push({
41
+ type: "mdxJsxAttribute",
42
+ name: "src",
43
+ value: {
44
+ type: "mdxJsxAttributeValueExpression",
45
+ value: variableName,
46
+ data: { estree: {
47
+ body: [{
48
+ type: "ExpressionStatement",
49
+ expression: {
50
+ type: "Identifier",
51
+ name: variableName
52
+ }
53
+ }],
54
+ type: "Program",
55
+ sourceType: "script"
56
+ } }
57
+ }
58
+ });
59
+ const out = {
60
+ children: [],
61
+ type: "mdxJsxFlowElement",
62
+ name: "img",
63
+ attributes
64
+ };
65
+ if (hasBlur) out.attributes.push({
66
+ type: "mdxJsxAttribute",
67
+ name: "placeholder",
68
+ value: "blur"
69
+ });
70
+ return out;
71
+ }
72
+ const size = await getImageSize(src, external).catch((e) => {
73
+ throw new Error(`[Remark Image] Failed obtain image size for ${node.url} (public directory configured as ${publicDir})`, { cause: e });
74
+ });
75
+ if (!size) return;
76
+ attributes.push({
77
+ type: "mdxJsxAttribute",
78
+ name: "src",
79
+ value: src.type === "url" ? src.url.toString() : node.url
80
+ }, {
81
+ type: "mdxJsxAttribute",
82
+ name: "width",
83
+ value: size.width.toString()
84
+ }, {
85
+ type: "mdxJsxAttribute",
86
+ name: "height",
87
+ value: size.height.toString()
88
+ });
89
+ return {
90
+ type: "mdxJsxFlowElement",
91
+ name: "img",
92
+ attributes,
93
+ children: []
94
+ };
95
+ }
96
+ visit(tree, "image", (node) => {
97
+ const src = parseSrc(decodeURI(node.url), publicDir, file.dirname);
98
+ if (!src) return;
99
+ const task = onImage(src, node).catch((e) => {
100
+ if (onError === "ignore" || node.url.endsWith(".svg")) return;
101
+ if (onError === "hide") return {
102
+ type: "mdxJsxFlowElement",
103
+ name: null,
104
+ attributes: [],
105
+ children: []
106
+ };
107
+ if (onError === "error") throw e;
108
+ onError(e);
109
+ }).then((res) => {
110
+ if (res) Object.assign(node, res);
111
+ });
112
+ promises.push(task);
113
+ });
114
+ await Promise.all(promises);
115
+ if (importsToInject.length === 0) return;
116
+ const imports = importsToInject.map(({ variableName, importPath }) => ({
117
+ type: "mdxjsEsm",
118
+ data: { estree: { body: [{
119
+ type: "ImportDeclaration",
120
+ source: {
121
+ type: "Literal",
122
+ value: importPath
123
+ },
124
+ specifiers: [{
125
+ type: "ImportDefaultSpecifier",
126
+ local: {
127
+ type: "Identifier",
128
+ name: variableName
129
+ }
130
+ }]
131
+ }] } }
132
+ }));
133
+ tree.children.unshift(...imports);
134
+ };
135
+ }
136
+ function getImportPath(file, dir) {
137
+ const relative = path$1.relative(dir, file).replaceAll(path$1.sep, "/");
138
+ return relative.startsWith("../") ? relative : `./${relative}`;
139
+ }
140
+ /**
141
+ * @param src - src href
142
+ * @param publicDir - dir/url to resolve absolute paths
143
+ * @param dir - dir to resolve relative paths
144
+ */
145
+ function parseSrc(src, publicDir, dir) {
146
+ if (src.startsWith("file:///")) return {
147
+ type: "file",
148
+ file: fileURLToPath(src)
149
+ };
150
+ if (EXTERNAL_URL_REGEX.test(src)) return {
151
+ type: "url",
152
+ url: new URL(src)
153
+ };
154
+ if (src.startsWith("/")) {
155
+ if (EXTERNAL_URL_REGEX.test(publicDir)) {
156
+ const url = new URL(publicDir);
157
+ url.pathname = `/${[...url.pathname.split("/"), ...src.split("/")].filter((v) => v.length > 0).join("/")}`;
158
+ return {
159
+ type: "url",
160
+ url
161
+ };
162
+ }
163
+ return {
164
+ type: "file",
165
+ file: path$1.join(publicDir, src)
166
+ };
167
+ }
168
+ if (!dir) {
169
+ console.warn(`[Remark Image] found relative path ${src} but missing 'dirname' in VFile, this image will be skipped for now.`);
170
+ return;
171
+ }
172
+ return {
173
+ type: "file",
174
+ file: path$1.join(dir, src)
175
+ };
176
+ }
177
+ async function getImageSize(src, onExternal) {
178
+ if (src.type === "file") {
179
+ const { imageSizeFromFile } = await import("image-size/fromFile");
180
+ return imageSizeFromFile(src.file);
181
+ }
182
+ if (onExternal === false) return;
183
+ const { timeout } = typeof onExternal === "object" ? onExternal : {};
184
+ const res = await fetch(src.url, { signal: typeof timeout === "number" ? AbortSignal.timeout(timeout) : void 0 });
185
+ if (!res.ok) throw new Error(`[Remark Image] Failed to fetch ${src.url} (${res.status}): ${await res.text()}`);
186
+ const { imageSize } = await import("image-size");
187
+ return imageSize(new Uint8Array(await res.arrayBuffer()));
188
+ }
189
+
190
+ //#endregion
191
+ export { remarkImage };
192
+ //# sourceMappingURL=remark-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remark-image.js","names":["path","importsToInject: { variableName: string; importPath: string }[]","promises: Promise<void>[]","attributes: MdxJsxAttribute[]","out: MdxJsxFlowElement"],"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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"}
@@ -1,40 +1,2 @@
1
- import { Root } from 'mdast';
2
- import { Transformer } from 'unified';
3
- import { MdxJsxFlowElement } from 'mdast-util-mdx-jsx';
4
-
5
- interface FileNode {
6
- depth: number;
7
- type: 'file';
8
- name: string;
9
- }
10
- interface FolderNode {
11
- depth: number;
12
- type: 'folder';
13
- name: string;
14
- children: Node[];
15
- }
16
- type Node = FileNode | FolderNode;
17
- interface RemarkMdxFilesOptions {
18
- /**
19
- * @defaultValue files
20
- */
21
- lang?: string;
22
- toMdx?: (node: Node) => MdxJsxFlowElement;
23
- }
24
- /**
25
- * Convert codeblocks with `files` as lang, like:
26
- *
27
- * ```files
28
- * project
29
- * ├── src
30
- * │ ├── index.js
31
- * │ └── utils
32
- * │ └── helper.js
33
- * ├── package.json
34
- * ```
35
- *
36
- * into MDX `<Files />` component
37
- */
38
- declare function remarkMdxFiles(options?: RemarkMdxFilesOptions): Transformer<Root, Root>;
39
-
40
- export { type RemarkMdxFilesOptions, remarkMdxFiles };
1
+ import { n as remarkMdxFiles, t as RemarkMdxFilesOptions } from "../remark-mdx-files-DOYafA4x.js";
2
+ export { RemarkMdxFilesOptions, remarkMdxFiles };
@@ -1,7 +1,96 @@
1
- import {
2
- remarkMdxFiles
3
- } from "../chunk-ADBHPKXG.js";
4
- import "../chunk-U67V476Y.js";
5
- export {
6
- remarkMdxFiles
7
- };
1
+ import { visit } from "unist-util-visit";
2
+
3
+ //#region src/mdx-plugins/remark-mdx-files.ts
4
+ function parseFileTree(code) {
5
+ const lines = code.split(/\r?\n/);
6
+ const stack = /* @__PURE__ */ new Map();
7
+ for (const line of lines) {
8
+ let depth = 0;
9
+ let name = line;
10
+ let match;
11
+ while (match = /(?:├──|│|└──)\s*/.exec(name)) {
12
+ name = name.slice(match[0].length);
13
+ depth++;
14
+ }
15
+ if (!name) continue;
16
+ const node = name.endsWith("/") ? {
17
+ type: "folder",
18
+ name,
19
+ children: [],
20
+ depth
21
+ } : {
22
+ type: "file",
23
+ name,
24
+ depth
25
+ };
26
+ let parent;
27
+ for (let i = depth - 1; i >= 0 && !parent; i--) parent = stack.get(i);
28
+ stack.set(depth, node);
29
+ if (!parent) continue;
30
+ if (parent.type === "file") Object.assign(parent, {
31
+ type: "folder",
32
+ children: []
33
+ });
34
+ parent.children.push(node);
35
+ }
36
+ return stack.get(0);
37
+ }
38
+ function defaultToMDX(node, depth = 0) {
39
+ if (depth === 0) return {
40
+ type: "mdxJsxFlowElement",
41
+ name: "Files",
42
+ attributes: [],
43
+ children: [defaultToMDX(node, depth + 1)]
44
+ };
45
+ const attributes = [{
46
+ type: "mdxJsxAttribute",
47
+ name: "name",
48
+ value: node.name
49
+ }];
50
+ if (node.type === "file") return {
51
+ type: "mdxJsxFlowElement",
52
+ attributes,
53
+ children: [],
54
+ name: "File"
55
+ };
56
+ attributes.push({
57
+ type: "mdxJsxAttribute",
58
+ name: "defaultOpen",
59
+ value: null
60
+ });
61
+ return {
62
+ type: "mdxJsxFlowElement",
63
+ attributes,
64
+ name: "Folder",
65
+ children: node.children.map((item) => defaultToMDX(item, depth + 1))
66
+ };
67
+ }
68
+ /**
69
+ * Convert codeblocks with `files` as lang, like:
70
+ *
71
+ * ```files
72
+ * project
73
+ * ├── src
74
+ * │ ├── index.js
75
+ * │ └── utils
76
+ * │ └── helper.js
77
+ * ├── package.json
78
+ * ```
79
+ *
80
+ * into MDX `<Files />` component
81
+ */
82
+ function remarkMdxFiles(options = {}) {
83
+ const { lang = "files", toMdx = defaultToMDX } = options;
84
+ return (tree) => {
85
+ visit(tree, "code", (node) => {
86
+ if (node.lang !== lang || !node.value) return;
87
+ const fileTree = parseFileTree(node.value);
88
+ if (!fileTree) return;
89
+ Object.assign(node, toMdx(fileTree));
90
+ });
91
+ };
92
+ }
93
+
94
+ //#endregion
95
+ export { remarkMdxFiles };
96
+ //# sourceMappingURL=remark-mdx-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remark-mdx-files.js","names":["match: RegExpMatchArray | null","node: Node","parent: Node | undefined","attributes: MdxJsxAttribute[]"],"sources":["../../src/mdx-plugins/remark-mdx-files.ts"],"sourcesContent":["import type { Root } from 'mdast';\nimport { visit } from 'unist-util-visit';\nimport type { Transformer } from 'unified';\nimport type { MdxJsxAttribute, MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\n\ninterface FileNode {\n depth: number;\n type: 'file';\n name: string;\n}\n\ninterface FolderNode {\n depth: number;\n type: 'folder';\n name: string;\n children: Node[];\n}\n\ntype Node = FileNode | FolderNode;\n\nexport interface RemarkMdxFilesOptions {\n /**\n * @defaultValue files\n */\n lang?: string;\n toMdx?: (node: Node) => MdxJsxFlowElement;\n}\n\nfunction parseFileTree(code: string) {\n const lines = code.split(/\\r?\\n/);\n const stack = new Map<number, Node>();\n\n for (const line of lines) {\n let depth = 0;\n let name = line;\n let match: RegExpMatchArray | null;\n\n while ((match = /(?:├──|│|└──)\\s*/.exec(name))) {\n name = name.slice(match[0].length);\n depth++;\n }\n\n if (!name) continue;\n const node: Node = name.endsWith('/')\n ? { type: 'folder', name, children: [], depth }\n : { type: 'file', name, depth };\n\n let parent: Node | undefined;\n for (let i = depth - 1; i >= 0 && !parent; i--) {\n parent = stack.get(i);\n }\n\n stack.set(depth, node);\n if (!parent) continue;\n if (parent.type === 'file') {\n Object.assign(parent, {\n type: 'folder',\n children: [],\n });\n }\n\n (parent as FolderNode).children.push(node);\n }\n\n return stack.get(0);\n}\n\nfunction defaultToMDX(node: Node, depth = 0): MdxJsxFlowElement {\n if (depth === 0) {\n return {\n type: 'mdxJsxFlowElement',\n name: 'Files',\n attributes: [],\n children: [defaultToMDX(node, depth + 1)],\n };\n }\n\n const attributes: MdxJsxAttribute[] = [\n { type: 'mdxJsxAttribute', name: 'name', value: node.name },\n ];\n\n if (node.type === 'file') {\n return {\n type: 'mdxJsxFlowElement',\n attributes,\n children: [],\n name: 'File',\n };\n }\n\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'defaultOpen',\n value: null,\n });\n\n return {\n type: 'mdxJsxFlowElement',\n attributes,\n name: 'Folder',\n children: node.children.map((item) => defaultToMDX(item, depth + 1)),\n };\n}\n\n/**\n * Convert codeblocks with `files` as lang, like:\n *\n * ```files\n * project\n * ├── src\n * │ ├── index.js\n * │ └── utils\n * │ └── helper.js\n * ├── package.json\n * ```\n *\n * into MDX `<Files />` component\n */\nexport function remarkMdxFiles(options: RemarkMdxFilesOptions = {}): Transformer<Root, Root> {\n const { lang = 'files', toMdx = defaultToMDX } = options;\n\n return (tree) => {\n visit(tree, 'code', (node) => {\n if (node.lang !== lang || !node.value) return;\n\n const fileTree = parseFileTree(node.value);\n if (!fileTree) return;\n\n Object.assign(node, toMdx(fileTree));\n });\n };\n}\n"],"mappings":";;;AA4BA,SAAS,cAAc,MAAc;CACnC,MAAM,QAAQ,KAAK,MAAM,QAAQ;CACjC,MAAM,wBAAQ,IAAI,KAAmB;AAErC,MAAK,MAAM,QAAQ,OAAO;EACxB,IAAI,QAAQ;EACZ,IAAI,OAAO;EACX,IAAIA;AAEJ,SAAQ,QAAQ,mBAAmB,KAAK,KAAK,EAAG;AAC9C,UAAO,KAAK,MAAM,MAAM,GAAG,OAAO;AAClC;;AAGF,MAAI,CAAC,KAAM;EACX,MAAMC,OAAa,KAAK,SAAS,IAAI,GACjC;GAAE,MAAM;GAAU;GAAM,UAAU,EAAE;GAAE;GAAO,GAC7C;GAAE,MAAM;GAAQ;GAAM;GAAO;EAEjC,IAAIC;AACJ,OAAK,IAAI,IAAI,QAAQ,GAAG,KAAK,KAAK,CAAC,QAAQ,IACzC,UAAS,MAAM,IAAI,EAAE;AAGvB,QAAM,IAAI,OAAO,KAAK;AACtB,MAAI,CAAC,OAAQ;AACb,MAAI,OAAO,SAAS,OAClB,QAAO,OAAO,QAAQ;GACpB,MAAM;GACN,UAAU,EAAE;GACb,CAAC;AAGJ,EAAC,OAAsB,SAAS,KAAK,KAAK;;AAG5C,QAAO,MAAM,IAAI,EAAE;;AAGrB,SAAS,aAAa,MAAY,QAAQ,GAAsB;AAC9D,KAAI,UAAU,EACZ,QAAO;EACL,MAAM;EACN,MAAM;EACN,YAAY,EAAE;EACd,UAAU,CAAC,aAAa,MAAM,QAAQ,EAAE,CAAC;EAC1C;CAGH,MAAMC,aAAgC,CACpC;EAAE,MAAM;EAAmB,MAAM;EAAQ,OAAO,KAAK;EAAM,CAC5D;AAED,KAAI,KAAK,SAAS,OAChB,QAAO;EACL,MAAM;EACN;EACA,UAAU,EAAE;EACZ,MAAM;EACP;AAGH,YAAW,KAAK;EACd,MAAM;EACN,MAAM;EACN,OAAO;EACR,CAAC;AAEF,QAAO;EACL,MAAM;EACN;EACA,MAAM;EACN,UAAU,KAAK,SAAS,KAAK,SAAS,aAAa,MAAM,QAAQ,EAAE,CAAC;EACrE;;;;;;;;;;;;;;;;AAiBH,SAAgB,eAAe,UAAiC,EAAE,EAA2B;CAC3F,MAAM,EAAE,OAAO,SAAS,QAAQ,iBAAiB;AAEjD,SAAQ,SAAS;AACf,QAAM,MAAM,SAAS,SAAS;AAC5B,OAAI,KAAK,SAAS,QAAQ,CAAC,KAAK,MAAO;GAEvC,MAAM,WAAW,cAAc,KAAK,MAAM;AAC1C,OAAI,CAAC,SAAU;AAEf,UAAO,OAAO,MAAM,MAAM,SAAS,CAAC;IACpC"}
@@ -1,15 +1,2 @@
1
- import { Transformer } from 'unified';
2
- import { Root } from 'mdast';
3
-
4
- interface RemarkMdxMermaidOptions {
5
- /**
6
- * @defaultValue mermaid
7
- */
8
- lang?: string;
9
- }
10
- /**
11
- * Convert `mermaid` codeblocks into `<Mermaid />` MDX component
12
- */
13
- declare function remarkMdxMermaid(options?: RemarkMdxMermaidOptions): Transformer<Root, Root>;
14
-
15
- export { type RemarkMdxMermaidOptions, remarkMdxMermaid };
1
+ import { n as remarkMdxMermaid, t as RemarkMdxMermaidOptions } from "../remark-mdx-mermaid-BdSUUiCG.js";
2
+ export { RemarkMdxMermaidOptions, remarkMdxMermaid };
@@ -1,7 +1,31 @@
1
- import {
2
- remarkMdxMermaid
3
- } from "../chunk-FUUVPEA5.js";
4
- import "../chunk-U67V476Y.js";
5
- export {
6
- remarkMdxMermaid
7
- };
1
+ import { visit } from "unist-util-visit";
2
+
3
+ //#region src/mdx-plugins/remark-mdx-mermaid.ts
4
+ function toMDX(code) {
5
+ return {
6
+ type: "mdxJsxFlowElement",
7
+ name: "Mermaid",
8
+ attributes: [{
9
+ type: "mdxJsxAttribute",
10
+ name: "chart",
11
+ value: code.trim()
12
+ }],
13
+ children: []
14
+ };
15
+ }
16
+ /**
17
+ * Convert `mermaid` codeblocks into `<Mermaid />` MDX component
18
+ */
19
+ function remarkMdxMermaid(options = {}) {
20
+ const { lang = "mermaid" } = options;
21
+ return (tree) => {
22
+ visit(tree, "code", (node) => {
23
+ if (node.lang !== lang || !node.value) return;
24
+ Object.assign(node, toMDX(node.value));
25
+ });
26
+ };
27
+ }
28
+
29
+ //#endregion
30
+ export { remarkMdxMermaid };
31
+ //# sourceMappingURL=remark-mdx-mermaid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remark-mdx-mermaid.js","names":[],"sources":["../../src/mdx-plugins/remark-mdx-mermaid.ts"],"sourcesContent":["import { visit } from 'unist-util-visit';\nimport type { Transformer } from 'unified';\nimport type { Root } from 'mdast';\nimport type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx';\n\nfunction toMDX(code: string): MdxJsxFlowElement {\n return {\n type: 'mdxJsxFlowElement',\n name: 'Mermaid',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'chart',\n value: code.trim(),\n },\n ],\n children: [],\n };\n}\n\nexport interface RemarkMdxMermaidOptions {\n /**\n * @defaultValue mermaid\n */\n lang?: string;\n}\n\n/**\n * Convert `mermaid` codeblocks into `<Mermaid />` MDX component\n */\nexport function remarkMdxMermaid(options: RemarkMdxMermaidOptions = {}): Transformer<Root, Root> {\n const { lang = 'mermaid' } = options;\n\n return (tree) => {\n visit(tree, 'code', (node) => {\n if (node.lang !== lang || !node.value) return;\n\n Object.assign(node, toMDX(node.value));\n });\n };\n}\n"],"mappings":";;;AAKA,SAAS,MAAM,MAAiC;AAC9C,QAAO;EACL,MAAM;EACN,MAAM;EACN,YAAY,CACV;GACE,MAAM;GACN,MAAM;GACN,OAAO,KAAK,MAAM;GACnB,CACF;EACD,UAAU,EAAE;EACb;;;;;AAaH,SAAgB,iBAAiB,UAAmC,EAAE,EAA2B;CAC/F,MAAM,EAAE,OAAO,cAAc;AAE7B,SAAQ,SAAS;AACf,QAAM,MAAM,SAAS,SAAS;AAC5B,OAAI,KAAK,SAAS,QAAQ,CAAC,KAAK,MAAO;AAEvC,UAAO,OAAO,MAAM,MAAM,KAAK,MAAM,CAAC;IACtC"}
@@ -1,31 +1,2 @@
1
- import { Root } from 'mdast';
2
- import { Transformer } from 'unified';
3
-
4
- interface PackageManager {
5
- name: string;
6
- /**
7
- * Default to `name`
8
- */
9
- value?: string;
10
- /**
11
- * Convert from npm to another package manager
12
- */
13
- command: (command: string) => string | undefined;
14
- }
15
- interface RemarkNpmOptions {
16
- /**
17
- * Persist Tab value (Fumadocs UI only)
18
- *
19
- * @defaultValue false
20
- */
21
- persist?: {
22
- id: string;
23
- } | false;
24
- packageManagers?: PackageManager[];
25
- }
26
- /**
27
- * It generates multiple tabs of codeblocks for different package managers from a npm command codeblock.
28
- */
29
- declare function remarkNpm({ persist, packageManagers, }?: RemarkNpmOptions): Transformer<Root, Root>;
30
-
31
- export { type RemarkNpmOptions, remarkNpm };
1
+ import { n as remarkNpm, t as RemarkNpmOptions } from "../remark-npm-BIvIEKT2.js";
2
+ export { RemarkNpmOptions, remarkNpm };
@@ -1,8 +1,68 @@
1
- import {
2
- remarkNpm
3
- } from "../chunk-GLRQBLGN.js";
4
- import "../chunk-TWIDBWFG.js";
5
- import "../chunk-U67V476Y.js";
6
- export {
7
- remarkNpm
8
- };
1
+ import { generateCodeBlockTabs } from "./codeblock-utils.js";
2
+ import { visit } from "unist-util-visit";
3
+ import convert from "npm-to-yarn";
4
+
5
+ //#region src/mdx-plugins/remark-npm.ts
6
+ const aliases = ["npm", "package-install"];
7
+ /**
8
+ * It generates multiple tabs of codeblocks for different package managers from a npm command codeblock.
9
+ */
10
+ function remarkNpm({ persist = false, packageManagers = [
11
+ {
12
+ command: (cmd) => convert(cmd, "npm"),
13
+ name: "npm"
14
+ },
15
+ {
16
+ command: (cmd) => convert(cmd, "pnpm"),
17
+ name: "pnpm"
18
+ },
19
+ {
20
+ command: (cmd) => convert(cmd, "yarn"),
21
+ name: "yarn"
22
+ },
23
+ {
24
+ command: (cmd) => convert(cmd, "bun"),
25
+ name: "bun"
26
+ }
27
+ ] } = {}) {
28
+ return (tree) => {
29
+ visit(tree, "code", (node) => {
30
+ if (!node.lang || !aliases.includes(node.lang)) return;
31
+ let code = node.value;
32
+ if (node.lang === "package-install" && !code.startsWith("npm") && !code.startsWith("npx")) code = `npm install ${code}`;
33
+ const options = {
34
+ persist,
35
+ tabs: [],
36
+ triggers: []
37
+ };
38
+ for (const manager of packageManagers) {
39
+ const value = manager.value ?? manager.name;
40
+ const command = manager.command(code);
41
+ if (!command || command.length === 0) continue;
42
+ options.defaultValue ??= value;
43
+ options.triggers.push({
44
+ value,
45
+ children: [{
46
+ type: "text",
47
+ value: manager.name
48
+ }]
49
+ });
50
+ options.tabs.push({
51
+ value,
52
+ children: [{
53
+ type: "code",
54
+ lang: "bash",
55
+ meta: node.meta,
56
+ value: command
57
+ }]
58
+ });
59
+ }
60
+ Object.assign(node, generateCodeBlockTabs(options));
61
+ return "skip";
62
+ });
63
+ };
64
+ }
65
+
66
+ //#endregion
67
+ export { remarkNpm };
68
+ //# sourceMappingURL=remark-npm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remark-npm.js","names":["options: CodeBlockTabsOptions"],"sources":["../../src/mdx-plugins/remark-npm.ts"],"sourcesContent":["import type { Root } from 'mdast';\nimport type { Transformer } from 'unified';\nimport { visit } from 'unist-util-visit';\nimport convert from 'npm-to-yarn';\nimport { type CodeBlockTabsOptions, generateCodeBlockTabs } from '@/mdx-plugins/codeblock-utils';\n\ninterface PackageManager {\n name: string;\n\n /**\n * Default to `name`\n */\n value?: string;\n\n /**\n * Convert from npm to another package manager\n */\n command: (command: string) => string | undefined;\n}\n\nexport interface RemarkNpmOptions {\n /**\n * Persist Tab value (Fumadocs UI only)\n *\n * @defaultValue false\n */\n persist?:\n | {\n id: string;\n }\n | false;\n\n packageManagers?: PackageManager[];\n}\n\nconst aliases = ['npm', 'package-install'];\n\n/**\n * It generates multiple tabs of codeblocks for different package managers from a npm command codeblock.\n */\nexport function remarkNpm({\n persist = false,\n packageManagers = [\n { command: (cmd) => convert(cmd, 'npm'), name: 'npm' },\n { command: (cmd) => convert(cmd, 'pnpm'), name: 'pnpm' },\n { command: (cmd) => convert(cmd, 'yarn'), name: 'yarn' },\n { command: (cmd) => convert(cmd, 'bun'), name: 'bun' },\n ],\n}: RemarkNpmOptions = {}): Transformer<Root, Root> {\n return (tree) => {\n visit(tree, 'code', (node) => {\n if (!node.lang || !aliases.includes(node.lang)) return;\n let code = node.value;\n\n if (node.lang === 'package-install' && !code.startsWith('npm') && !code.startsWith('npx')) {\n code = `npm install ${code}`;\n }\n const options: CodeBlockTabsOptions = {\n persist,\n tabs: [],\n triggers: [],\n };\n\n for (const manager of packageManagers) {\n const value = manager.value ?? manager.name;\n const command = manager.command(code);\n if (!command || command.length === 0) continue;\n\n options.defaultValue ??= value;\n options.triggers.push({\n value,\n children: [{ type: 'text', value: manager.name }],\n });\n options.tabs.push({\n value,\n children: [\n {\n type: 'code',\n lang: 'bash',\n meta: node.meta,\n value: command,\n },\n ],\n });\n }\n\n Object.assign(node, generateCodeBlockTabs(options));\n return 'skip';\n });\n };\n}\n"],"mappings":";;;;;AAmCA,MAAM,UAAU,CAAC,OAAO,kBAAkB;;;;AAK1C,SAAgB,UAAU,EACxB,UAAU,OACV,kBAAkB;CAChB;EAAE,UAAU,QAAQ,QAAQ,KAAK,MAAM;EAAE,MAAM;EAAO;CACtD;EAAE,UAAU,QAAQ,QAAQ,KAAK,OAAO;EAAE,MAAM;EAAQ;CACxD;EAAE,UAAU,QAAQ,QAAQ,KAAK,OAAO;EAAE,MAAM;EAAQ;CACxD;EAAE,UAAU,QAAQ,QAAQ,KAAK,MAAM;EAAE,MAAM;EAAO;CACvD,KACmB,EAAE,EAA2B;AACjD,SAAQ,SAAS;AACf,QAAM,MAAM,SAAS,SAAS;AAC5B,OAAI,CAAC,KAAK,QAAQ,CAAC,QAAQ,SAAS,KAAK,KAAK,CAAE;GAChD,IAAI,OAAO,KAAK;AAEhB,OAAI,KAAK,SAAS,qBAAqB,CAAC,KAAK,WAAW,MAAM,IAAI,CAAC,KAAK,WAAW,MAAM,CACvF,QAAO,eAAe;GAExB,MAAMA,UAAgC;IACpC;IACA,MAAM,EAAE;IACR,UAAU,EAAE;IACb;AAED,QAAK,MAAM,WAAW,iBAAiB;IACrC,MAAM,QAAQ,QAAQ,SAAS,QAAQ;IACvC,MAAM,UAAU,QAAQ,QAAQ,KAAK;AACrC,QAAI,CAAC,WAAW,QAAQ,WAAW,EAAG;AAEtC,YAAQ,iBAAiB;AACzB,YAAQ,SAAS,KAAK;KACpB;KACA,UAAU,CAAC;MAAE,MAAM;MAAQ,OAAO,QAAQ;MAAM,CAAC;KAClD,CAAC;AACF,YAAQ,KAAK,KAAK;KAChB;KACA,UAAU,CACR;MACE,MAAM;MACN,MAAM;MACN,MAAM,KAAK;MACX,OAAO;MACR,CACF;KACF,CAAC;;AAGJ,UAAO,OAAO,MAAM,sBAAsB,QAAQ,CAAC;AACnD,UAAO;IACP"}
@@ -1,23 +1,2 @@
1
- import { Transformer } from 'unified';
2
- import { Root } from 'mdast';
3
-
4
- interface RemarkStepsOptions {
5
- /**
6
- * Class name for steps container
7
- *
8
- * @defaultValue fd-steps
9
- */
10
- steps?: string;
11
- /**
12
- * Class name for step container
13
- *
14
- * @defaultValue fd-step
15
- */
16
- step?: string;
17
- }
18
- /**
19
- * Convert headings in the format of `1. Hello World` into steps.
20
- */
21
- declare function remarkSteps({ steps, step, }?: RemarkStepsOptions): Transformer<Root, Root>;
22
-
23
- export { type RemarkStepsOptions, remarkSteps };
1
+ import { n as remarkSteps, t as RemarkStepsOptions } from "../remark-steps-CHJN-rtm.js";
2
+ export { RemarkStepsOptions, remarkSteps };