fromsrc 0.0.2 → 0.0.22

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 (408) hide show
  1. package/dist/access.d.ts +7 -7
  2. package/dist/access.js +12 -5
  3. package/dist/adapter.js +8 -16
  4. package/dist/adapterbrowser.js +6 -10
  5. package/dist/adapternext.js +7 -18
  6. package/dist/adapterreactrouter.js +5 -9
  7. package/dist/adapterremix.js +8 -17
  8. package/dist/adaptertanstack.js +6 -10
  9. package/dist/algolia.js +43 -21
  10. package/dist/analytics.d.ts +1 -1
  11. package/dist/analytics.js +16 -10
  12. package/dist/ansi.js +76 -37
  13. package/dist/api.d.ts +10 -10
  14. package/dist/api.js +14 -11
  15. package/dist/audit.d.ts +6 -6
  16. package/dist/audit.js +29 -10
  17. package/dist/autotype.js +20 -10
  18. package/dist/batch.d.ts +6 -6
  19. package/dist/batch.js +16 -9
  20. package/dist/changelog.js +28 -14
  21. package/dist/changelogutil.d.ts +4 -4
  22. package/dist/changelogutil.js +33 -13
  23. package/dist/cli.d.ts +6 -6
  24. package/dist/cli.js +7 -3
  25. package/dist/client.d.ts +1 -1
  26. package/dist/codesample.d.ts +4 -4
  27. package/dist/codesample.js +63 -24
  28. package/dist/collapse.js +31 -13
  29. package/dist/collections.js +36 -16
  30. package/dist/components/accordion.d.ts +1 -1
  31. package/dist/components/accordion.js +5 -1
  32. package/dist/components/alert.d.ts +1 -1
  33. package/dist/components/alert.js +24 -13
  34. package/dist/components/announce.js +40 -17
  35. package/dist/components/autofill.js +18 -8
  36. package/dist/components/avatar.js +4 -4
  37. package/dist/components/avatarstack.js +2 -2
  38. package/dist/components/backtotop.d.ts +1 -1
  39. package/dist/components/backtotop.js +18 -5
  40. package/dist/components/badge.js +9 -4
  41. package/dist/components/banner.js +22 -5
  42. package/dist/components/breadcrumb.js +11 -4
  43. package/dist/components/breadcrumbnav.js +37 -21
  44. package/dist/components/button.js +23 -8
  45. package/dist/components/callout.d.ts +1 -1
  46. package/dist/components/callout.js +35 -31
  47. package/dist/components/changelog.js +21 -8
  48. package/dist/components/checkbox.js +32 -19
  49. package/dist/components/code.d.ts +1 -1
  50. package/dist/components/code.js +6 -3
  51. package/dist/components/codeblock.js +157 -39
  52. package/dist/components/codecopy.d.ts +1 -1
  53. package/dist/components/codecopy.js +36 -13
  54. package/dist/components/codegroup.js +87 -25
  55. package/dist/components/collapsible.d.ts +1 -1
  56. package/dist/components/collapsible.js +5 -1
  57. package/dist/components/command.d.ts +1 -1
  58. package/dist/components/command.js +42 -15
  59. package/dist/components/compare.js +20 -8
  60. package/dist/components/content.js +121 -79
  61. package/dist/components/copybutton.d.ts +1 -1
  62. package/dist/components/copybutton.js +14 -7
  63. package/dist/components/countdown.js +9 -3
  64. package/dist/components/create.js +34 -24
  65. package/dist/components/definition.js +11 -4
  66. package/dist/components/diffview.js +63 -29
  67. package/dist/components/divider.js +5 -1
  68. package/dist/components/docheader.js +8 -1
  69. package/dist/components/doclinkcard.js +27 -3
  70. package/dist/components/dropdown.d.ts +1 -1
  71. package/dist/components/dropdown.js +32 -11
  72. package/dist/components/dynamiccode.js +5 -3
  73. package/dist/components/editlink.js +35 -23
  74. package/dist/components/embed.js +15 -7
  75. package/dist/components/endpoint.d.ts +3 -3
  76. package/dist/components/endpoint.js +24 -9
  77. package/dist/components/errormessage.d.ts +1 -1
  78. package/dist/components/errormessage.js +4 -1
  79. package/dist/components/expandcode.d.ts +1 -1
  80. package/dist/components/expandcode.js +6 -2
  81. package/dist/components/feature.js +8 -1
  82. package/dist/components/featuregrid.d.ts +4 -4
  83. package/dist/components/featuregrid.js +7 -1
  84. package/dist/components/feedback.js +11 -7
  85. package/dist/components/feedbackwidget.js +18 -12
  86. package/dist/components/files.d.ts +1 -1
  87. package/dist/components/files.js +52 -18
  88. package/dist/components/folder.d.ts +1 -1
  89. package/dist/components/folder.js +21 -4
  90. package/dist/components/footer.js +5 -1
  91. package/dist/components/formlabel.d.ts +1 -1
  92. package/dist/components/formlabel.js +31 -18
  93. package/dist/components/github.js +43 -14
  94. package/dist/components/graph.js +38 -14
  95. package/dist/components/heading.js +36 -29
  96. package/dist/components/headingcopy.js +13 -5
  97. package/dist/components/hero.js +20 -14
  98. package/dist/components/highlight.d.ts +2 -2
  99. package/dist/components/highlight.js +14 -8
  100. package/dist/components/hover.d.ts +2 -2
  101. package/dist/components/hover.js +11 -4
  102. package/dist/components/icons.js +4 -1
  103. package/dist/components/inlinetoc.js +3 -1
  104. package/dist/components/input.js +13 -3
  105. package/dist/components/install.js +34 -24
  106. package/dist/components/kbd.js +19 -11
  107. package/dist/components/langicon.d.ts +1 -1
  108. package/dist/components/langicon.js +32 -24
  109. package/dist/components/language.d.ts +1 -1
  110. package/dist/components/language.js +12 -4
  111. package/dist/components/lastupdated.d.ts +2 -2
  112. package/dist/components/lastupdated.js +36 -12
  113. package/dist/components/link.d.ts +1 -1
  114. package/dist/components/linkcard.js +3 -1
  115. package/dist/components/list.d.ts +1 -1
  116. package/dist/components/list.js +4 -1
  117. package/dist/components/math.js +33 -8
  118. package/dist/components/mermaid.js +3 -3
  119. package/dist/components/mobilenav.d.ts +2 -1
  120. package/dist/components/mobilenav.js +116 -47
  121. package/dist/components/modal.d.ts +1 -1
  122. package/dist/components/modal.js +9 -2
  123. package/dist/components/navlink.js +17 -3
  124. package/dist/components/openapi.d.ts +1 -1
  125. package/dist/components/openapi.js +102 -32
  126. package/dist/components/openapischema.d.ts +1 -1
  127. package/dist/components/openapischema.js +29 -9
  128. package/dist/components/openapitags.js +6 -2
  129. package/dist/components/pagetransition.js +5 -3
  130. package/dist/components/pagination.js +5 -4
  131. package/dist/components/panel.js +92 -16
  132. package/dist/components/playground.d.ts +1 -1
  133. package/dist/components/playground.js +153 -50
  134. package/dist/components/popover.js +9 -7
  135. package/dist/components/prelink.js +40 -9
  136. package/dist/components/prevnext.d.ts +1 -1
  137. package/dist/components/prevnext.js +36 -16
  138. package/dist/components/progress.js +2 -2
  139. package/dist/components/property.js +4 -2
  140. package/dist/components/quote.d.ts +2 -2
  141. package/dist/components/quote.js +32 -4
  142. package/dist/components/radio.js +36 -18
  143. package/dist/components/rating.js +14 -3
  144. package/dist/components/recent.d.ts +1 -1
  145. package/dist/components/recent.js +26 -10
  146. package/dist/components/responsive.js +21 -13
  147. package/dist/components/results.js +8 -4
  148. package/dist/components/screenshot.js +61 -21
  149. package/dist/components/scrollprogress.js +9 -5
  150. package/dist/components/scrollspy.d.ts +2 -2
  151. package/dist/components/scrollspy.js +9 -3
  152. package/dist/components/search.js +47 -18
  153. package/dist/components/searchbutton.js +3 -1
  154. package/dist/components/searchdialog.js +36 -23
  155. package/dist/components/searcher.d.ts +1 -1
  156. package/dist/components/searcher.js +51 -26
  157. package/dist/components/select.js +27 -13
  158. package/dist/components/shortcuts.d.ts +1 -1
  159. package/dist/components/shortcuts.js +57 -38
  160. package/dist/components/sidebar.d.ts +2 -1
  161. package/dist/components/sidebar.js +209 -64
  162. package/dist/components/sidebarfilter.d.ts +1 -1
  163. package/dist/components/sidebarfilter.js +33 -9
  164. package/dist/components/sidebarscript.d.ts +5 -0
  165. package/dist/components/sidebarscript.js +5 -0
  166. package/dist/components/skeleton.js +15 -3
  167. package/dist/components/spinner.js +13 -3
  168. package/dist/components/status.js +20 -8
  169. package/dist/components/steps.js +3 -1
  170. package/dist/components/switch.js +4 -4
  171. package/dist/components/table.js +37 -12
  172. package/dist/components/tabnav.d.ts +1 -1
  173. package/dist/components/tabnav.js +48 -36
  174. package/dist/components/tabs.d.ts +1 -1
  175. package/dist/components/tabs.js +56 -40
  176. package/dist/components/tag.js +8 -3
  177. package/dist/components/terminal.js +14 -4
  178. package/dist/components/textarea.js +96 -82
  179. package/dist/components/theme.d.ts +1 -1
  180. package/dist/components/theme.js +26 -4
  181. package/dist/components/themeprovider.d.ts +4 -4
  182. package/dist/components/themeprovider.js +16 -5
  183. package/dist/components/toast.d.ts +1 -1
  184. package/dist/components/toast.js +23 -14
  185. package/dist/components/toc/default.d.ts +1 -1
  186. package/dist/components/toc/default.js +28 -13
  187. package/dist/components/toc/hook.js +28 -14
  188. package/dist/components/toc/index.js +8 -4
  189. package/dist/components/toc/inline.js +12 -2
  190. package/dist/components/toc/minimal.js +11 -5
  191. package/dist/components/toc/zigzag.d.ts +1 -1
  192. package/dist/components/toc/zigzag.js +37 -17
  193. package/dist/components/tocprogress.d.ts +1 -1
  194. package/dist/components/tocprogress.js +66 -34
  195. package/dist/components/tooltip.d.ts +1 -1
  196. package/dist/components/tooltip.js +20 -8
  197. package/dist/components/trigger.js +13 -5
  198. package/dist/components/twoslash.js +49 -26
  199. package/dist/components/typetable.js +23 -4
  200. package/dist/components/typewriter.js +6 -2
  201. package/dist/components/version.js +40 -14
  202. package/dist/components/video.js +25 -15
  203. package/dist/components/zoom.js +6 -2
  204. package/dist/config.d.ts +2 -2
  205. package/dist/config.js +56 -30
  206. package/dist/content.d.ts +5 -5
  207. package/dist/content.js +121 -57
  208. package/dist/contentcache.d.ts +10 -10
  209. package/dist/contentcache.js +9 -5
  210. package/dist/contentdiff.d.ts +4 -4
  211. package/dist/contentdiff.js +16 -8
  212. package/dist/contributors.d.ts +4 -4
  213. package/dist/contributors.js +49 -19
  214. package/dist/diff.d.ts +6 -6
  215. package/dist/diff.js +37 -16
  216. package/dist/draft.d.ts +11 -11
  217. package/dist/draft.js +9 -5
  218. package/dist/env.js +21 -7
  219. package/dist/export.js +4 -4
  220. package/dist/frontmatter.js +11 -9
  221. package/dist/github.js +60 -30
  222. package/dist/gitsource.d.ts +1 -1
  223. package/dist/gitsource.js +16 -9
  224. package/dist/hash.d.ts +6 -6
  225. package/dist/hash.js +19 -7
  226. package/dist/highlight.d.ts +4 -4
  227. package/dist/highlight.js +34 -14
  228. package/dist/hooks/anchor.js +26 -14
  229. package/dist/hooks/arrownav.js +25 -7
  230. package/dist/hooks/async.js +3 -3
  231. package/dist/hooks/battery.js +11 -3
  232. package/dist/hooks/breakpoint.js +10 -2
  233. package/dist/hooks/clickoutside.js +10 -3
  234. package/dist/hooks/clipboard-paste.js +7 -3
  235. package/dist/hooks/clipboard.d.ts +2 -2
  236. package/dist/hooks/clipboard.js +21 -15
  237. package/dist/hooks/copy.js +11 -6
  238. package/dist/hooks/countdown.js +1 -1
  239. package/dist/hooks/counter.js +1 -1
  240. package/dist/hooks/escapekey.js +6 -1
  241. package/dist/hooks/eventlistener.js +3 -1
  242. package/dist/hooks/eventsource.js +4 -2
  243. package/dist/hooks/eyedropper.js +7 -3
  244. package/dist/hooks/favicon.js +1 -1
  245. package/dist/hooks/fetch.js +12 -4
  246. package/dist/hooks/focustrap.js +20 -8
  247. package/dist/hooks/focuswithin.js +6 -2
  248. package/dist/hooks/form.d.ts +2 -2
  249. package/dist/hooks/form.js +15 -2
  250. package/dist/hooks/fullscreen.js +1 -1
  251. package/dist/hooks/geolocation.js +8 -8
  252. package/dist/hooks/hotkeys.js +19 -7
  253. package/dist/hooks/hover.d.ts +4 -1
  254. package/dist/hooks/hover.js +3 -1
  255. package/dist/hooks/idle.js +13 -3
  256. package/dist/hooks/infinitescroll.js +4 -2
  257. package/dist/hooks/interval.js +3 -1
  258. package/dist/hooks/inview.js +7 -3
  259. package/dist/hooks/keyboard.js +36 -12
  260. package/dist/hooks/keypress.js +6 -2
  261. package/dist/hooks/list.js +11 -1
  262. package/dist/hooks/longpress.js +3 -3
  263. package/dist/hooks/map.js +1 -1
  264. package/dist/hooks/measure.js +16 -7
  265. package/dist/hooks/mediarecorder.js +7 -3
  266. package/dist/hooks/networkstate.js +4 -2
  267. package/dist/hooks/os.js +12 -4
  268. package/dist/hooks/pagination.js +6 -4
  269. package/dist/hooks/permission.js +6 -2
  270. package/dist/hooks/queue.js +4 -2
  271. package/dist/hooks/readprogress.js +6 -2
  272. package/dist/hooks/resizeobserver.js +6 -4
  273. package/dist/hooks/script.js +1 -1
  274. package/dist/hooks/scrolllock.js +6 -2
  275. package/dist/hooks/scrollspy.js +4 -2
  276. package/dist/hooks/selection.js +6 -3
  277. package/dist/hooks/share.js +18 -9
  278. package/dist/hooks/speechrecognition.js +7 -3
  279. package/dist/hooks/stepper.js +4 -4
  280. package/dist/hooks/storage.js +9 -3
  281. package/dist/hooks/stylesheet.js +4 -2
  282. package/dist/hooks/textselection.js +6 -3
  283. package/dist/hooks/throttle.js +6 -2
  284. package/dist/hooks/undoredo.js +19 -11
  285. package/dist/hooks/vibrate.js +3 -1
  286. package/dist/hooks/viewtransition.js +8 -4
  287. package/dist/hooks/wakelock.js +12 -7
  288. package/dist/hooks/websocket.js +4 -2
  289. package/dist/hooks/windowsize.js +2 -2
  290. package/dist/i18n.d.ts +2 -2
  291. package/dist/i18n.js +27 -14
  292. package/dist/index.d.ts +1 -0
  293. package/dist/index.js +1 -0
  294. package/dist/lastmodified.js +11 -5
  295. package/dist/linkcheck.d.ts +6 -6
  296. package/dist/linkcheck.js +55 -14
  297. package/dist/llms.js +20 -4
  298. package/dist/manifest.js +7 -7
  299. package/dist/mcp.js +28 -22
  300. package/dist/mdtoc.d.ts +4 -4
  301. package/dist/mdtoc.js +11 -5
  302. package/dist/mdxscope.d.ts +2 -2
  303. package/dist/mdxscope.js +3 -1
  304. package/dist/meta.js +19 -7
  305. package/dist/migrate.js +35 -25
  306. package/dist/navgen.d.ts +8 -8
  307. package/dist/navgen.js +73 -30
  308. package/dist/navtree.d.ts +1 -1
  309. package/dist/navtree.js +39 -19
  310. package/dist/oembed.d.ts +4 -4
  311. package/dist/oembed.js +24 -18
  312. package/dist/ogimage.d.ts +11 -11
  313. package/dist/ogimage.js +24 -24
  314. package/dist/openapi.js +60 -33
  315. package/dist/openapiguard.js +21 -11
  316. package/dist/openapiutil.js +66 -20
  317. package/dist/orama.js +52 -34
  318. package/dist/pipeline.d.ts +4 -4
  319. package/dist/pipeline.js +4 -4
  320. package/dist/preload.d.ts +2 -2
  321. package/dist/preload.js +4 -4
  322. package/dist/ranking.d.ts +6 -6
  323. package/dist/ranking.js +39 -13
  324. package/dist/readtime.js +3 -1
  325. package/dist/redirects.d.ts +2 -2
  326. package/dist/redirects.js +20 -12
  327. package/dist/rehype.js +16 -9
  328. package/dist/rehypeautolink.d.ts +2 -2
  329. package/dist/rehypeautolink.js +25 -23
  330. package/dist/rehypecode.js +38 -28
  331. package/dist/rehypecopy.js +17 -13
  332. package/dist/rehypeinline.js +33 -27
  333. package/dist/rehypelinks.js +28 -20
  334. package/dist/rehyperaw.js +9 -3
  335. package/dist/rehypeslug.d.ts +1 -1
  336. package/dist/rehypeslug.js +23 -19
  337. package/dist/rehypetablewrap.d.ts +2 -2
  338. package/dist/rehypetablewrap.js +9 -5
  339. package/dist/rehypetoc.d.ts +1 -1
  340. package/dist/rehypetoc.js +15 -7
  341. package/dist/remark.js +28 -13
  342. package/dist/remarkadmonition.js +40 -14
  343. package/dist/remarkannotation.d.ts +2 -2
  344. package/dist/remarkannotation.js +26 -10
  345. package/dist/remarkbadge.js +43 -31
  346. package/dist/remarkblockmath.js +29 -15
  347. package/dist/remarkcallout.js +32 -14
  348. package/dist/remarkcaption.js +28 -16
  349. package/dist/remarkcodetitle.js +29 -13
  350. package/dist/remarkcolumns.js +22 -10
  351. package/dist/remarkdetails.js +34 -14
  352. package/dist/remarkdirective.js +47 -20
  353. package/dist/remarkembed.js +38 -22
  354. package/dist/remarkfiletree.js +29 -19
  355. package/dist/remarkfootnote.js +46 -18
  356. package/dist/remarkgfm.js +13 -8
  357. package/dist/remarkheadingid.js +16 -6
  358. package/dist/remarkimage.js +54 -34
  359. package/dist/remarkinclude.js +20 -8
  360. package/dist/remarkinstall.js +20 -12
  361. package/dist/remarklinkcard.js +33 -14
  362. package/dist/remarkmath.js +34 -15
  363. package/dist/remarkmermaid.js +10 -6
  364. package/dist/remarkmeta.d.ts +2 -2
  365. package/dist/remarkmeta.js +15 -5
  366. package/dist/remarkreadingtime.d.ts +2 -2
  367. package/dist/remarkreadingtime.js +3 -1
  368. package/dist/remarksteps.js +26 -14
  369. package/dist/remarkstructure.js +16 -10
  370. package/dist/remarktabs.js +31 -14
  371. package/dist/remarktoc.js +40 -24
  372. package/dist/remarkts2js.js +51 -40
  373. package/dist/remarktwoslash.d.ts +4 -4
  374. package/dist/remarktwoslash.js +24 -14
  375. package/dist/remarkvideo.d.ts +4 -4
  376. package/dist/remarkvideo.js +42 -16
  377. package/dist/schema.d.ts +14 -14
  378. package/dist/schema.js +2 -2
  379. package/dist/search.js +106 -48
  380. package/dist/searchindex.js +86 -34
  381. package/dist/searchpolicy.js +1 -1
  382. package/dist/searchscore.js +5 -5
  383. package/dist/searchtypo.js +30 -10
  384. package/dist/seo.d.ts +2 -2
  385. package/dist/seo.js +14 -14
  386. package/dist/shortcodes.d.ts +4 -4
  387. package/dist/shortcodes.js +25 -20
  388. package/dist/sitemap.js +18 -8
  389. package/dist/snippets.js +26 -18
  390. package/dist/source.js +75 -41
  391. package/dist/stats.d.ts +4 -4
  392. package/dist/stats.js +18 -12
  393. package/dist/testing.d.ts +7 -7
  394. package/dist/testing.js +74 -29
  395. package/dist/themeutil.d.ts +6 -6
  396. package/dist/themeutil.js +145 -27
  397. package/dist/typegen.js +31 -12
  398. package/dist/validate.js +19 -7
  399. package/dist/validator.d.ts +11 -11
  400. package/dist/validator.js +68 -19
  401. package/dist/versioning.d.ts +7 -7
  402. package/dist/versioning.js +27 -11
  403. package/dist/watcher.js +39 -15
  404. package/dist/webhook.d.ts +6 -6
  405. package/dist/webhook.js +34 -12
  406. package/dist/workspace.js +26 -12
  407. package/package.json +137 -137
  408. package/styles/reset.css +1 -1
package/dist/config.js CHANGED
@@ -2,18 +2,18 @@ import { readFile } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
3
 
4
4
  const defaults = {
5
- description: "",
6
5
  baseUrl: "/",
6
+ description: "",
7
7
  docsDir: "docs",
8
- outDir: ".fromsrc",
9
- theme: "default",
10
- search: { provider: "local", options: {} },
11
- sidebar: { defaultOpen: true, collapsible: true },
12
- toc: { minDepth: 2, maxDepth: 3 },
13
- i18n: { defaultLocale: "en", locales: ["en"] },
8
+ draft: false,
14
9
  editUrl: "",
10
+ i18n: { defaultLocale: "en", locales: ["en"] },
15
11
  lastUpdated: false,
16
- draft: false
12
+ outDir: ".fromsrc",
13
+ search: { options: {}, provider: "local" },
14
+ sidebar: { collapsible: true, defaultOpen: true },
15
+ theme: "default",
16
+ toc: { maxDepth: 3, minDepth: 2 }
17
17
  };
18
18
  function isrecord(value) {
19
19
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -25,32 +25,52 @@ function isboolean(value) {
25
25
  return typeof value === "boolean";
26
26
  }
27
27
  function parseconfig(value) {
28
- if (!isrecord(value)) return null;
29
- const title = value.title;
30
- if (!isstring(title)) return null;
28
+ if (!isrecord(value)) {
29
+ return null;
30
+ }
31
+ const { title } = value;
32
+ if (!isstring(title)) {
33
+ return null;
34
+ }
31
35
  const config = { title };
32
- if (isstring(value.description)) config.description = value.description;
33
- if (isstring(value.baseUrl)) config.baseUrl = value.baseUrl;
34
- if (isstring(value.docsDir)) config.docsDir = value.docsDir;
35
- if (isstring(value.outDir)) config.outDir = value.outDir;
36
- if (isstring(value.theme)) config.theme = value.theme;
37
- if (isstring(value.editUrl)) config.editUrl = value.editUrl;
38
- if (isboolean(value.lastUpdated)) config.lastUpdated = value.lastUpdated;
39
- if (isboolean(value.draft)) config.draft = value.draft;
36
+ if (isstring(value.description)) {
37
+ config.description = value.description;
38
+ }
39
+ if (isstring(value.baseUrl)) {
40
+ config.baseUrl = value.baseUrl;
41
+ }
42
+ if (isstring(value.docsDir)) {
43
+ config.docsDir = value.docsDir;
44
+ }
45
+ if (isstring(value.outDir)) {
46
+ config.outDir = value.outDir;
47
+ }
48
+ if (isstring(value.theme)) {
49
+ config.theme = value.theme;
50
+ }
51
+ if (isstring(value.editUrl)) {
52
+ config.editUrl = value.editUrl;
53
+ }
54
+ if (isboolean(value.lastUpdated)) {
55
+ config.lastUpdated = value.lastUpdated;
56
+ }
57
+ if (isboolean(value.draft)) {
58
+ config.draft = value.draft;
59
+ }
40
60
  if (isrecord(value.search)) {
41
61
  const provider = isstring(value.search.provider) ? value.search.provider : void 0;
42
62
  const options = isrecord(value.search.options) ? value.search.options : void 0;
43
- config.search = { provider, options };
63
+ config.search = { options, provider };
44
64
  }
45
65
  if (isrecord(value.sidebar)) {
46
66
  const defaultOpen = isboolean(value.sidebar.defaultOpen) ? value.sidebar.defaultOpen : void 0;
47
67
  const collapsible = isboolean(value.sidebar.collapsible) ? value.sidebar.collapsible : void 0;
48
- config.sidebar = { defaultOpen, collapsible };
68
+ config.sidebar = { collapsible, defaultOpen };
49
69
  }
50
70
  if (isrecord(value.toc)) {
51
71
  const minDepth = typeof value.toc.minDepth === "number" ? value.toc.minDepth : void 0;
52
72
  const maxDepth = typeof value.toc.maxDepth === "number" ? value.toc.maxDepth : void 0;
53
- config.toc = { minDepth, maxDepth };
73
+ config.toc = { maxDepth, minDepth };
54
74
  }
55
75
  if (isrecord(value.i18n)) {
56
76
  const defaultLocale = isstring(value.i18n.defaultLocale) ? value.i18n.defaultLocale : void 0;
@@ -63,24 +83,27 @@ function defineConfig(config) {
63
83
  return config;
64
84
  }
65
85
  function resolveConfig(config) {
66
- return mergeConfig(
67
- defaults,
68
- config
69
- );
86
+ const base = { ...defaults };
87
+ const over = { ...config };
88
+ return mergeConfig(base, over);
70
89
  }
71
90
  async function loadConfig(dir) {
72
91
  for (const name of ["fromsrc.config.ts", "fromsrc.config.js"]) {
73
92
  try {
74
93
  const mod = await import(/* webpackIgnore: true */ join(dir, name));
75
94
  const parsed = parseconfig(mod.default ?? mod);
76
- if (parsed) return parsed;
95
+ if (parsed) {
96
+ return parsed;
97
+ }
77
98
  } catch {
78
99
  }
79
100
  }
80
101
  try {
81
- const raw = await readFile(join(dir, "fromsrc.config.json"), "utf-8");
102
+ const raw = await readFile(join(dir, "fromsrc.config.json"), "utf8");
82
103
  const parsed = parseconfig(JSON.parse(raw));
83
- if (parsed) return parsed;
104
+ if (parsed) {
105
+ return parsed;
106
+ }
84
107
  } catch {
85
108
  }
86
109
  throw new Error("no config found");
@@ -91,7 +114,10 @@ function mergeConfig(base, overrides) {
91
114
  const b = base[key];
92
115
  const o = overrides[key];
93
116
  if (b && o && typeof b === "object" && typeof o === "object" && !Array.isArray(o)) {
94
- result[key] = mergeConfig(b, o);
117
+ result[key] = mergeConfig(
118
+ b,
119
+ o
120
+ );
95
121
  } else if (o !== void 0) {
96
122
  result[key] = o;
97
123
  }
package/dist/content.d.ts CHANGED
@@ -26,6 +26,9 @@ interface ContentConfig<T extends SchemaType = typeof baseSchema> {
26
26
  schema?: T;
27
27
  }
28
28
  declare function defineContent<T extends SchemaType>(config: ContentConfig<T>): {
29
+ getAllDocs: () => Promise<(z.TypeOf<T> & {
30
+ slug: string;
31
+ })[]>;
29
32
  getDoc: (slug: string[]) => Promise<(z.TypeOf<T> & {
30
33
  slug: string;
31
34
  } & {
@@ -38,9 +41,6 @@ declare function defineContent<T extends SchemaType>(config: ContentConfig<T>):
38
41
  content: string;
39
42
  data: z.infer<T>;
40
43
  })[]>;
41
- getAllDocs: () => Promise<(z.TypeOf<T> & {
42
- slug: string;
43
- })[]>;
44
44
  getNavigation: () => Promise<{
45
45
  title: string;
46
46
  items: (z.TypeOf<T> & {
@@ -54,10 +54,10 @@ declare function defineContent<T extends SchemaType>(config: ContentConfig<T>):
54
54
  headings?: Heading[];
55
55
  })[]>;
56
56
  schema: z.ZodObject<{
57
- title: z.ZodString;
58
57
  description: z.ZodOptional<z.ZodString>;
59
- order: z.ZodOptional<z.ZodNumber>;
60
58
  draft: z.ZodOptional<z.ZodBoolean>;
59
+ order: z.ZodOptional<z.ZodNumber>;
60
+ title: z.ZodString;
61
61
  }, "strip", z.ZodTypeAny, {
62
62
  title: string;
63
63
  order?: number | undefined;
package/dist/content.js CHANGED
@@ -14,11 +14,13 @@ function isnotfound(error) {
14
14
  }
15
15
  async function readCached(filepath) {
16
16
  if (!isProduction()) {
17
- return readFile(filepath, "utf-8");
17
+ return readFile(filepath, "utf8");
18
18
  }
19
19
  const cached = fileCache.get(filepath);
20
- if (cached) return cached;
21
- const content = await readFile(filepath, "utf-8");
20
+ if (cached) {
21
+ return cached;
22
+ }
23
+ const content = await readFile(filepath, "utf8");
22
24
  fileCache.set(filepath, content);
23
25
  return content;
24
26
  }
@@ -28,15 +30,19 @@ async function resolveSource(docsDir, slug) {
28
30
  const indexPath = join(docsDir, `${path}/index.mdx`);
29
31
  try {
30
32
  const source = await readCached(filepath);
31
- return { source, actualPath: path, filepath };
33
+ return { actualPath: path, filepath, source };
32
34
  } catch (error) {
33
- if (!isnotfound(error)) throw error;
35
+ if (!isnotfound(error)) {
36
+ throw error;
37
+ }
34
38
  }
35
39
  try {
36
40
  const source = await readCached(indexPath);
37
- return { source, actualPath: `${path}/index`, filepath: indexPath };
41
+ return { actualPath: `${path}/index`, filepath: indexPath, source };
38
42
  } catch (error) {
39
- if (!isnotfound(error)) throw error;
43
+ if (!isnotfound(error)) {
44
+ throw error;
45
+ }
40
46
  }
41
47
  return null;
42
48
  }
@@ -51,11 +57,15 @@ function defineContent(config) {
51
57
  }
52
58
  async function getDoc2(slug) {
53
59
  const resolved = await resolveSource(config.dir, slug);
54
- if (!resolved) return null;
60
+ if (!resolved) {
61
+ return null;
62
+ }
55
63
  try {
56
64
  const { data, content } = matter(resolved.source);
57
65
  const parsed = schema.parse(data);
58
- if (isProduction() && isDraft(data)) return null;
66
+ if (isProduction() && isDraft(data)) {
67
+ return null;
68
+ }
59
69
  return {
60
70
  slug: resolved.actualPath,
61
71
  ...parsed,
@@ -73,7 +83,9 @@ function defineContent(config) {
73
83
  }
74
84
  }
75
85
  async function getAllDocs2() {
76
- if (isProduction() && docsCache) return docsCache;
86
+ if (isProduction() && docsCache) {
87
+ return docsCache;
88
+ }
77
89
  if (isProduction() && fullDocsCache) {
78
90
  const sorted2 = fullDocsCache.map(asMeta);
79
91
  docsCache = sorted2;
@@ -90,7 +102,9 @@ function defineContent(config) {
90
102
  const source = await readCached(filepath);
91
103
  const { data } = matter(source);
92
104
  const parsed = schema.parse(data);
93
- if (isProduction() && isDraft(data)) continue;
105
+ if (isProduction() && isDraft(data)) {
106
+ continue;
107
+ }
94
108
  const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
95
109
  docs.push({
96
110
  slug: slug === "index" ? "" : slug,
@@ -115,7 +129,9 @@ function defineContent(config) {
115
129
  return sorted;
116
130
  }
117
131
  async function getDocs() {
118
- if (isProduction() && fullDocsCache) return fullDocsCache;
132
+ if (isProduction() && fullDocsCache) {
133
+ return fullDocsCache;
134
+ }
119
135
  const docs = [];
120
136
  async function scan(dir, prefix = "") {
121
137
  const entries = await readdir(dir, { withFileTypes: true });
@@ -127,7 +143,9 @@ function defineContent(config) {
127
143
  const source = await readCached(filepath);
128
144
  const { data, content } = matter(source);
129
145
  const parsed = schema.parse(data);
130
- if (isProduction() && isDraft(data)) continue;
146
+ if (isProduction() && isDraft(data)) {
147
+ continue;
148
+ }
131
149
  const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
132
150
  docs.push({
133
151
  slug: slug === "index" ? "" : slug,
@@ -154,7 +172,9 @@ function defineContent(config) {
154
172
  return sorted;
155
173
  }
156
174
  async function getNavigation2() {
157
- if (isProduction() && navCache) return navCache;
175
+ if (isProduction() && navCache) {
176
+ return navCache;
177
+ }
158
178
  try {
159
179
  const docs = await getAllDocs2();
160
180
  const filtered = await buildNavigation(docs, config.dir);
@@ -169,7 +189,9 @@ function defineContent(config) {
169
189
  }
170
190
  let searchCache2 = null;
171
191
  async function getSearchDocs2() {
172
- if (isProduction() && searchCache2) return searchCache2;
192
+ if (isProduction() && searchCache2) {
193
+ return searchCache2;
194
+ }
173
195
  if (isProduction() && fullDocsCache) {
174
196
  const sorted2 = fullDocsCache.map((doc) => {
175
197
  const headings = extractHeadings(doc.content);
@@ -193,7 +215,9 @@ function defineContent(config) {
193
215
  const source = await readCached(filepath);
194
216
  const { data, content } = matter(source);
195
217
  const parsed = schema.parse(data);
196
- if (isProduction() && isDraft(data)) continue;
218
+ if (isProduction() && isDraft(data)) {
219
+ continue;
220
+ }
197
221
  const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
198
222
  const headings = extractHeadings(content);
199
223
  docs.push({
@@ -221,19 +245,19 @@ function defineContent(config) {
221
245
  return sorted;
222
246
  }
223
247
  return {
248
+ getAllDocs: getAllDocs2,
224
249
  getDoc: getDoc2,
225
250
  getDocs,
226
- getAllDocs: getAllDocs2,
227
251
  getNavigation: getNavigation2,
228
252
  getSearchDocs: getSearchDocs2,
229
253
  schema
230
254
  };
231
255
  }
232
256
  function stripHeadingFormatting(text) {
233
- return text.replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*]+)\*/g, "$1").replace(/`([^`]+)`/g, "$1").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").trim();
257
+ return text.replaceAll(/\*\*([^*]+)\*\*/g, "$1").replaceAll(/\*([^*]+)\*/g, "$1").replaceAll(/`([^`]+)`/g, "$1").replaceAll(/\[([^\]]+)\]\([^)]+\)/g, "$1").trim();
234
258
  }
235
259
  function headingId(text) {
236
- return text.toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9_-]/g, "").replace(/-+/g, "-").replace(/^-|-$/g, "");
260
+ return text.toLowerCase().replaceAll(/\s+/g, "-").replaceAll(/[^a-z0-9_-]/g, "").replaceAll(/-+/g, "-").replaceAll(/^-|-$/g, "");
237
261
  }
238
262
  function extractHeadings(content) {
239
263
  const headings = [];
@@ -241,38 +265,48 @@ function extractHeadings(content) {
241
265
  const lines = content.split("\n");
242
266
  for (const line of lines) {
243
267
  const match = line.match(/^(#{2,4})\s+(.+)$/);
244
- if (!match) continue;
268
+ if (!match) {
269
+ continue;
270
+ }
245
271
  const hashes = match[1];
246
272
  const heading = match[2];
247
- if (!hashes || !heading) continue;
273
+ if (!hashes || !heading) {
274
+ continue;
275
+ }
248
276
  const level = hashes.length;
249
277
  const raw = stripHeadingFormatting(heading);
250
278
  const base = headingId(raw);
251
- if (!base) continue;
279
+ if (!base) {
280
+ continue;
281
+ }
252
282
  const count = seen.get(base) ?? 0;
253
283
  seen.set(base, count + 1);
254
284
  const id = count === 0 ? base : `${base}-${count}`;
255
- headings.push({ id, text: raw, level });
285
+ headings.push({ id, level, text: raw });
256
286
  }
257
287
  return headings;
258
288
  }
259
289
  function stripMdx(content) {
260
- return content.replace(/```[\s\S]*?```/g, "").replace(/`[^`]+`/g, "").replace(/import\s+.*?from\s+['"][^'"]+['"];?/g, "").replace(/export\s+.*?;/g, "").replace(/<[^>]+>/g, " ").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/#{1,6}\s+/g, "").replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*]+)\*/g, "$1").replace(/\n+/g, " ").replace(/\s+/g, " ").trim();
290
+ return content.replaceAll(/```[\s\S]*?```/g, "").replaceAll(/`[^`]+`/g, "").replaceAll(/import\s+.*?from\s+['"][^'"]+['"];?/g, "").replaceAll(/export\s+.*?;/g, "").replaceAll(/<[^>]+>/g, " ").replaceAll(/\[([^\]]+)\]\([^)]+\)/g, "$1").replaceAll(/#{1,6}\s+/g, "").replaceAll(/\*\*([^*]+)\*\*/g, "$1").replaceAll(/\*([^*]+)\*/g, "$1").replaceAll(/\n+/g, " ").replaceAll(/\s+/g, " ").trim();
261
291
  }
262
292
  async function getDoc(docsDir, slug) {
263
293
  const resolved = await resolveSource(docsDir, slug);
264
- if (!resolved) return null;
294
+ if (!resolved) {
295
+ return null;
296
+ }
265
297
  try {
266
298
  const { data, content } = matter(resolved.source);
267
299
  const parsed = baseSchema.parse(data);
268
- if (isProduction() && isDraft(data)) return null;
300
+ if (isProduction() && isDraft(data)) {
301
+ return null;
302
+ }
269
303
  return {
270
- slug: resolved.actualPath,
271
- title: parsed.title,
304
+ content,
305
+ data: parsed,
272
306
  description: parsed.description,
273
307
  order: parsed.order,
274
- content,
275
- data: parsed
308
+ slug: resolved.actualPath,
309
+ title: parsed.title
276
310
  };
277
311
  } catch (error) {
278
312
  if (error instanceof z.ZodError) {
@@ -288,7 +322,9 @@ async function getAllDocs(docsDir) {
288
322
  const cacheKey = docsDir;
289
323
  if (isProduction()) {
290
324
  const cached = metaCache.get(cacheKey);
291
- if (cached) return cached;
325
+ if (cached) {
326
+ return cached;
327
+ }
292
328
  }
293
329
  const docs = [];
294
330
  const folderMetas = /* @__PURE__ */ new Map();
@@ -304,13 +340,15 @@ async function getAllDocs(docsDir) {
304
340
  const source = await readCached(filepath);
305
341
  const { data } = matter(source);
306
342
  const parsed = baseSchema.parse(data);
307
- if (isProduction() && isDraft(data)) continue;
343
+ if (isProduction() && isDraft(data)) {
344
+ continue;
345
+ }
308
346
  const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
309
347
  docs.push({
310
- slug: slug === "index" ? "" : slug,
311
- title: parsed.title,
312
348
  description: parsed.description,
313
- order: parsed.order
349
+ order: parsed.order,
350
+ slug: slug === "index" ? "" : slug,
351
+ title: parsed.title
314
352
  });
315
353
  }
316
354
  }
@@ -350,7 +388,9 @@ async function getSearchDocs(docsDir) {
350
388
  const cacheKey = docsDir;
351
389
  if (isProduction()) {
352
390
  const cached = searchCache.get(cacheKey);
353
- if (cached) return cached;
391
+ if (cached) {
392
+ return cached;
393
+ }
354
394
  }
355
395
  const docs = [];
356
396
  async function scan(dir, prefix = "") {
@@ -363,16 +403,18 @@ async function getSearchDocs(docsDir) {
363
403
  const source = await readCached(filepath);
364
404
  const { data, content } = matter(source);
365
405
  const parsed = baseSchema.parse(data);
366
- if (isProduction() && isDraft(data)) continue;
406
+ if (isProduction() && isDraft(data)) {
407
+ continue;
408
+ }
367
409
  const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
368
410
  const headings = extractHeadings(content);
369
411
  docs.push({
370
- slug: slug === "index" ? "" : slug,
371
- title: parsed.title,
412
+ content: stripMdx(content),
372
413
  description: parsed.description,
414
+ headings: headings.length > 0 ? headings : void 0,
373
415
  order: parsed.order,
374
- content: stripMdx(content),
375
- headings: headings.length > 0 ? headings : void 0
416
+ slug: slug === "index" ? "" : slug,
417
+ title: parsed.title
376
418
  });
377
419
  }
378
420
  }
@@ -393,17 +435,19 @@ async function getSearchDocs(docsDir) {
393
435
  return sorted;
394
436
  }
395
437
  function fallbacktitle(key) {
396
- if (key === "") return "docs";
397
- return key.replace(/-/g, " ");
438
+ if (key === "") {
439
+ return "docs";
440
+ }
441
+ return key.replaceAll("-", " ");
398
442
  }
399
443
  async function buildNavigation(docs, docsDir) {
400
444
  const grouped = /* @__PURE__ */ new Map();
401
445
  for (const doc of docs) {
402
446
  const key = groupkey(doc.slug);
403
447
  const section = grouped.get(key) ?? {
448
+ items: [],
404
449
  key,
405
- title: fallbacktitle(key),
406
- items: []
450
+ title: fallbacktitle(key)
407
451
  };
408
452
  section.items.push(doc);
409
453
  grouped.set(key, section);
@@ -414,16 +458,28 @@ async function buildNavigation(docs, docsDir) {
414
458
  sections.sort((left, right) => {
415
459
  const leftOrder = order.get(left.key);
416
460
  const rightOrder = order.get(right.key);
417
- if (leftOrder !== void 0 && rightOrder !== void 0) return leftOrder - rightOrder;
418
- if (leftOrder !== void 0) return -1;
419
- if (rightOrder !== void 0) return 1;
420
- if (left.key === "") return -1;
421
- if (right.key === "") return 1;
461
+ if (leftOrder !== void 0 && rightOrder !== void 0) {
462
+ return leftOrder - rightOrder;
463
+ }
464
+ if (leftOrder !== void 0) {
465
+ return -1;
466
+ }
467
+ if (rightOrder !== void 0) {
468
+ return 1;
469
+ }
470
+ if (left.key === "") {
471
+ return -1;
472
+ }
473
+ if (right.key === "") {
474
+ return 1;
475
+ }
422
476
  return left.key.localeCompare(right.key);
423
477
  });
424
478
  const metas = await Promise.all(
425
479
  sections.map((section) => {
426
- if (section.key === "") return Promise.resolve(rootMeta);
480
+ if (section.key === "") {
481
+ return Promise.resolve(rootMeta);
482
+ }
427
483
  return loadMeta(join(docsDir, section.key));
428
484
  })
429
485
  );
@@ -432,14 +488,16 @@ async function buildNavigation(docs, docsDir) {
432
488
  const sorted = sortByMeta(section.items, metas[index]?.pages, prefix);
433
489
  const label = metas[index]?.title ?? section.title;
434
490
  return {
435
- title: label,
436
- items: sorted
491
+ items: sorted,
492
+ title: label
437
493
  };
438
494
  }).filter((section) => section.items.length > 0);
439
495
  }
440
496
  function sectionOrder(pages) {
441
497
  const order = /* @__PURE__ */ new Map();
442
- if (!pages) return order;
498
+ if (!pages) {
499
+ return order;
500
+ }
443
501
  for (const page of pages) {
444
502
  const key = groupkey(page);
445
503
  if (!order.has(key)) {
@@ -449,10 +507,16 @@ function sectionOrder(pages) {
449
507
  return order;
450
508
  }
451
509
  function groupkey(slug) {
452
- if (!slug || slug === "index") return "";
453
- if (!slug.includes("/")) return slug;
510
+ if (!slug || slug === "index") {
511
+ return "";
512
+ }
513
+ if (!slug.includes("/")) {
514
+ return slug;
515
+ }
454
516
  const [head] = slug.split("/");
455
- if (!head || head === "index") return "";
517
+ if (!head || head === "index") {
518
+ return "";
519
+ }
456
520
  return head;
457
521
  }
458
522
  function clearContentCache() {
@@ -1,28 +1,28 @@
1
- type CacheEntry<T> = {
1
+ interface CacheEntry<T> {
2
2
  value: T;
3
3
  expires: number;
4
4
  key: string;
5
- };
6
- type CacheConfig = {
5
+ }
6
+ interface CacheConfig {
7
7
  maxSize?: number;
8
8
  ttl?: number;
9
9
  onEvict?: (key: string) => void;
10
- };
11
- type CacheStats = {
10
+ }
11
+ interface CacheStats {
12
12
  hits: number;
13
13
  misses: number;
14
14
  size: number;
15
15
  evictions: number;
16
- };
16
+ }
17
17
  declare function createCache<T>(config?: CacheConfig): {
18
+ clear: () => void;
19
+ delete: (key: string) => boolean;
18
20
  get: (key: string) => T | undefined;
19
- set: (key: string, value: T, ttl?: number) => void;
20
21
  has: (key: string) => boolean;
21
- delete: (key: string) => boolean;
22
- clear: () => void;
23
- stats: () => CacheStats;
24
22
  keys: () => string[];
25
23
  prune: () => number;
24
+ set: (key: string, value: T, ttl?: number) => void;
25
+ stats: () => CacheStats;
26
26
  };
27
27
 
28
28
  export { type CacheConfig, type CacheEntry, type CacheStats, createCache };
@@ -11,7 +11,9 @@ function createCache(config) {
11
11
  }
12
12
  function evictOldest() {
13
13
  const oldest = store.keys().next().value;
14
- if (!oldest) return;
14
+ if (!oldest) {
15
+ return;
16
+ }
15
17
  store.delete(oldest);
16
18
  evictions++;
17
19
  onEvict?.(oldest);
@@ -37,11 +39,13 @@ function createCache(config) {
37
39
  if (store.size >= maxSize) {
38
40
  evictOldest();
39
41
  }
40
- store.set(key, { value, expires: Date.now() + (ttl ?? defaultTtl), key });
42
+ store.set(key, { expires: Date.now() + (ttl ?? defaultTtl), key, value });
41
43
  }
42
44
  function has(key) {
43
45
  const entry = store.get(key);
44
- if (!entry) return false;
46
+ if (!entry) {
47
+ return false;
48
+ }
45
49
  if (isExpired(entry)) {
46
50
  store.delete(key);
47
51
  return false;
@@ -55,7 +59,7 @@ function createCache(config) {
55
59
  store.clear();
56
60
  }
57
61
  function stats() {
58
- return { hits, misses, size: store.size, evictions };
62
+ return { evictions, hits, misses, size: store.size };
59
63
  }
60
64
  function keys() {
61
65
  return [...store.keys()];
@@ -70,7 +74,7 @@ function createCache(config) {
70
74
  }
71
75
  return count;
72
76
  }
73
- return { get, set, has, delete: del, clear, stats, keys, prune };
77
+ return { clear, delete: del, get, has, keys, prune, set, stats };
74
78
  }
75
79
 
76
80
  export { createCache };
@@ -1,14 +1,14 @@
1
- type ContentChange = {
1
+ interface ContentChange {
2
2
  type: "added" | "removed" | "modified";
3
3
  path: string;
4
4
  title?: string;
5
- };
6
- type ContentDiff = {
5
+ }
6
+ interface ContentDiff {
7
7
  added: ContentChange[];
8
8
  removed: ContentChange[];
9
9
  modified: ContentChange[];
10
10
  summary: string;
11
- };
11
+ }
12
12
  declare function contentFromDocs(docs: {
13
13
  slug: string;
14
14
  content: string;