fromsrc 0.0.2 → 0.0.21

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 +17 -7
  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 +17 -4
  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 +33 -29
  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 +6 -2
  85. package/dist/components/feedbackwidget.js +10 -4
  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 +22 -17
  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 +3 -2
  131. package/dist/components/panel.js +91 -15
  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 +3 -1
  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 +35 -22
  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 +221 -56
  162. package/dist/components/sidebarfilter.d.ts +1 -1
  163. package/dist/components/sidebarfilter.js +30 -6
  164. package/dist/components/sidebarscript.d.ts +5 -0
  165. package/dist/components/sidebarscript.js +18 -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 +25 -3
  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
@@ -1,22 +1,22 @@
1
- type ValidationIssue = {
1
+ interface ValidationIssue {
2
2
  rule: string;
3
3
  message: string;
4
4
  line?: number;
5
5
  severity: "error" | "warning" | "info";
6
- };
7
- type ValidationRule = {
6
+ }
7
+ interface ValidationRule {
8
8
  name: string;
9
9
  check: (content: string, path: string) => ValidationIssue[];
10
- };
11
- type ValidationResult = {
10
+ }
11
+ interface ValidationResult {
12
12
  path: string;
13
13
  issues: ValidationIssue[];
14
14
  valid: boolean;
15
- };
16
- type ValidatorConfig = {
15
+ }
16
+ interface ValidatorConfig {
17
17
  rules: ValidationRule[];
18
18
  failOn?: "error" | "warning";
19
- };
19
+ }
20
20
  declare function createRule(name: string, check: (content: string, path: string) => ValidationIssue[]): ValidationRule;
21
21
  declare function validate(content: string, path: string, rules: ValidationRule[]): ValidationResult;
22
22
  declare function validateAll(files: {
@@ -24,12 +24,12 @@ declare function validateAll(files: {
24
24
  content: string;
25
25
  }[], rules: ValidationRule[]): ValidationResult[];
26
26
  declare const builtinRules: {
27
- readonly titleRequired: ValidationRule;
27
+ readonly frontmatterRequired: ValidationRule;
28
28
  readonly maxLength: ValidationRule;
29
+ readonly noEmptyLinks: ValidationRule;
29
30
  readonly noTabs: ValidationRule;
30
31
  readonly noTrailingSpaces: ValidationRule;
31
- readonly noEmptyLinks: ValidationRule;
32
- readonly frontmatterRequired: ValidationRule;
32
+ readonly titleRequired: ValidationRule;
33
33
  };
34
34
 
35
35
  export { type ValidationIssue, type ValidationResult, type ValidationRule, type ValidatorConfig, builtinRules, createRule, validate, validateAll };
package/dist/validator.js CHANGED
@@ -1,9 +1,9 @@
1
1
  function createRule(name, check) {
2
- return { name, check };
2
+ return { check, name };
3
3
  }
4
4
  function validate(content, path, rules) {
5
5
  const issues = rules.flatMap((r) => r.check(content, path));
6
- return { path, issues, valid: !issues.some((i) => i.severity === "error") };
6
+ return { issues, path, valid: !issues.some((i) => i.severity === "error") };
7
7
  }
8
8
  function validateAll(files, rules) {
9
9
  return files.map((f) => validate(f.content, f.path, rules));
@@ -13,39 +13,88 @@ function scan(content, rule, severity, test, message) {
13
13
  const lines = content.split("\n");
14
14
  for (let i = 0; i < lines.length; i++) {
15
15
  const line = lines[i];
16
- if (line !== void 0 && test(line)) issues.push({ rule, message, line: i + 1, severity });
16
+ if (line !== void 0 && test(line)) {
17
+ issues.push({ line: i + 1, message, rule, severity });
18
+ }
17
19
  }
18
20
  return issues;
19
21
  }
20
22
  const builtinRules = {
21
- titleRequired: createRule("titleRequired", (content) => {
22
- const first = content.split("\n").find((l) => l.startsWith("#"));
23
- if (!first) return [{ rule: "titleRequired", message: "missing heading", severity: "error" }];
23
+ frontmatterRequired: createRule("frontmatterRequired", (content) => {
24
+ if (!content.startsWith("---")) {
25
+ return [
26
+ {
27
+ rule: "frontmatterRequired",
28
+ message: "missing frontmatter",
29
+ severity: "error"
30
+ }
31
+ ];
32
+ }
33
+ if (content.indexOf("---", 3) === -1) {
34
+ return [
35
+ {
36
+ rule: "frontmatterRequired",
37
+ message: "unclosed frontmatter",
38
+ severity: "error"
39
+ }
40
+ ];
41
+ }
24
42
  return [];
25
43
  }),
26
44
  maxLength: createRule("maxLength", (content) => {
27
45
  const count = content.split("\n").length;
28
- if (count > 500)
29
- return [{ rule: "maxLength", message: `${count} lines exceeds 500`, severity: "warning" }];
46
+ if (count > 500) {
47
+ return [
48
+ {
49
+ rule: "maxLength",
50
+ message: `${count} lines exceeds 500`,
51
+ severity: "warning"
52
+ }
53
+ ];
54
+ }
30
55
  return [];
31
56
  }),
57
+ noEmptyLinks: createRule(
58
+ "noEmptyLinks",
59
+ (content) => scan(
60
+ content,
61
+ "noEmptyLinks",
62
+ "error",
63
+ (l) => /\[.+?\]\(\s*\)/.test(l),
64
+ "empty href"
65
+ )
66
+ ),
32
67
  noTabs: createRule(
33
68
  "noTabs",
34
- (content) => scan(content, "noTabs", "warning", (l) => l.replace(/^\t+/, "").includes(" "), "tab in content")
69
+ (content) => scan(
70
+ content,
71
+ "noTabs",
72
+ "warning",
73
+ (l) => l.replace(/^\t+/, "").includes(" "),
74
+ "tab in content"
75
+ )
35
76
  ),
36
77
  noTrailingSpaces: createRule(
37
78
  "noTrailingSpaces",
38
- (content) => scan(content, "noTrailingSpaces", "warning", (l) => /\s+$/.test(l), "trailing space")
79
+ (content) => scan(
80
+ content,
81
+ "noTrailingSpaces",
82
+ "warning",
83
+ (l) => /\s+$/.test(l),
84
+ "trailing space"
85
+ )
39
86
  ),
40
- noEmptyLinks: createRule(
41
- "noEmptyLinks",
42
- (content) => scan(content, "noEmptyLinks", "error", (l) => /\[.+?\]\(\s*\)/.test(l), "empty href")
43
- ),
44
- frontmatterRequired: createRule("frontmatterRequired", (content) => {
45
- if (!content.startsWith("---"))
46
- return [{ rule: "frontmatterRequired", message: "missing frontmatter", severity: "error" }];
47
- if (content.indexOf("---", 3) === -1)
48
- return [{ rule: "frontmatterRequired", message: "unclosed frontmatter", severity: "error" }];
87
+ titleRequired: createRule("titleRequired", (content) => {
88
+ const first = content.split("\n").find((l) => l.startsWith("#"));
89
+ if (!first) {
90
+ return [
91
+ {
92
+ rule: "titleRequired",
93
+ message: "missing heading",
94
+ severity: "error"
95
+ }
96
+ ];
97
+ }
49
98
  return [];
50
99
  })
51
100
  };
@@ -1,18 +1,18 @@
1
- type DocVersion = {
1
+ interface DocVersion {
2
2
  label: string;
3
3
  path: string;
4
4
  isLatest?: boolean;
5
5
  isDefault?: boolean;
6
- };
7
- type VersionConfig = {
6
+ }
7
+ interface VersionConfig {
8
8
  versions: DocVersion[];
9
9
  versionedPaths?: string[];
10
- };
11
- type VersionedPage = {
10
+ }
11
+ interface VersionedPage {
12
12
  version: DocVersion;
13
13
  path: string;
14
14
  alternateVersions: DocVersion[];
15
- };
15
+ }
16
16
  declare function parseVersion(label: string): {
17
17
  major: number;
18
18
  minor: number;
@@ -24,8 +24,8 @@ declare function resolveVersion(path: string, config: VersionConfig): VersionedP
24
24
  declare function getLatestVersion(config: VersionConfig): DocVersion;
25
25
  declare function isVersionedPath(path: string, config: VersionConfig): boolean;
26
26
  declare function createVersionSwitcher(config: VersionConfig): {
27
- resolve: (path: string) => VersionedPage | null;
28
27
  latest: () => DocVersion;
28
+ resolve: (path: string) => VersionedPage | null;
29
29
  switchVersion: (path: string, target: DocVersion) => string;
30
30
  };
31
31
 
@@ -13,9 +13,15 @@ function parseVersion(label) {
13
13
  function compareVersions(a, b) {
14
14
  const va = parseVersion(a);
15
15
  const vb = parseVersion(b);
16
- if (va.major !== vb.major) return va.major > vb.major ? 1 : -1;
17
- if (va.minor !== vb.minor) return va.minor > vb.minor ? 1 : -1;
18
- if (va.patch !== vb.patch) return va.patch > vb.patch ? 1 : -1;
16
+ if (va.major !== vb.major) {
17
+ return va.major > vb.major ? 1 : -1;
18
+ }
19
+ if (va.minor !== vb.minor) {
20
+ return va.minor > vb.minor ? 1 : -1;
21
+ }
22
+ if (va.patch !== vb.patch) {
23
+ return va.patch > vb.patch ? 1 : -1;
24
+ }
19
25
  return 0;
20
26
  }
21
27
  function sortVersions(versions) {
@@ -24,33 +30,43 @@ function sortVersions(versions) {
24
30
  function resolveVersion(path, config) {
25
31
  const segments = path.split("/").filter(Boolean);
26
32
  const first = segments[0];
27
- const match = config.versions.find((v) => v.path === `/${first}` || v.label === first);
28
- if (!match) return null;
33
+ const match = config.versions.find(
34
+ (v) => v.path === `/${first}` || v.label === first
35
+ );
36
+ if (!match) {
37
+ return null;
38
+ }
29
39
  const rest = segments.slice(1).join("/");
30
40
  return {
31
- version: match,
41
+ alternateVersions: config.versions.filter((v) => v.label !== match.label),
32
42
  path: rest ? `/${rest}` : "/",
33
- alternateVersions: config.versions.filter((v) => v.label !== match.label)
43
+ version: match
34
44
  };
35
45
  }
36
46
  function getLatestVersion(config) {
37
47
  const latest = config.versions.find((v) => v.isLatest);
38
- if (latest) return latest;
48
+ if (latest) {
49
+ return latest;
50
+ }
39
51
  return sortVersions(config.versions)[0] ?? { label: "latest", path: "/" };
40
52
  }
41
53
  function isVersionedPath(path, config) {
42
54
  const segments = path.split("/").filter(Boolean);
43
55
  const first = segments[0];
44
- if (!first) return false;
56
+ if (!first) {
57
+ return false;
58
+ }
45
59
  if (config.versionedPaths?.length) {
46
60
  return config.versionedPaths.some((p) => path.startsWith(p));
47
61
  }
48
- return config.versions.some((v) => v.path === `/${first}` || v.label === first);
62
+ return config.versions.some(
63
+ (v) => v.path === `/${first}` || v.label === first
64
+ );
49
65
  }
50
66
  function createVersionSwitcher(config) {
51
67
  return {
52
- resolve: (path) => resolveVersion(path, config),
53
68
  latest: () => getLatestVersion(config),
69
+ resolve: (path) => resolveVersion(path, config),
54
70
  switchVersion: (path, target) => {
55
71
  const resolved = resolveVersion(path, config);
56
72
  const base = resolved ? resolved.path : path;
package/dist/watcher.js CHANGED
@@ -4,7 +4,7 @@ import { clearContentCache } from './content';
4
4
  import { clearMetaCache } from './meta';
5
5
 
6
6
  function toSlug(dir, filepath) {
7
- return relative(dir, filepath).replace(extname(filepath), "").replace(/\\/g, "/").replace(/\/index$/, "");
7
+ return relative(dir, filepath).replace(extname(filepath), "").replaceAll("\\", "/").replace(/\/index$/, "");
8
8
  }
9
9
  function collectFiles(dir, exts) {
10
10
  const files = /* @__PURE__ */ new Set();
@@ -12,8 +12,11 @@ function collectFiles(dir, exts) {
12
12
  try {
13
13
  for (const entry of readdirSync(d, { withFileTypes: true })) {
14
14
  const full = join(d, entry.name);
15
- if (entry.isDirectory()) scan(full);
16
- else if (exts.includes(extname(entry.name))) files.add(full);
15
+ if (entry.isDirectory()) {
16
+ scan(full);
17
+ } else if (exts.includes(extname(entry.name))) {
18
+ files.add(full);
19
+ }
17
20
  }
18
21
  } catch {
19
22
  }
@@ -29,12 +32,18 @@ function createWatcher(config) {
29
32
  const timers = /* @__PURE__ */ new Map();
30
33
  let watcher = null;
31
34
  function emit(filepath) {
32
- if (!exts.includes(extname(filepath))) return;
33
- if (ignore.some((p) => filepath.includes(p))) return;
35
+ if (!exts.includes(extname(filepath))) {
36
+ return;
37
+ }
38
+ if (ignore.some((p) => filepath.includes(p))) {
39
+ return;
40
+ }
34
41
  const exists = existsSync(filepath);
35
42
  let type;
36
43
  if (!exists) {
37
- if (!known.has(filepath)) return;
44
+ if (!known.has(filepath)) {
45
+ return;
46
+ }
38
47
  known.delete(filepath);
39
48
  type = "remove";
40
49
  } else if (known.has(filepath)) {
@@ -43,18 +52,31 @@ function createWatcher(config) {
43
52
  known.add(filepath);
44
53
  type = "add";
45
54
  }
46
- const event = { type, path: filepath, slug: toSlug(config.dir, filepath) };
47
- for (const handler of handlers) handler(event);
55
+ const event = {
56
+ path: filepath,
57
+ slug: toSlug(config.dir, filepath),
58
+ type
59
+ };
60
+ for (const handler of handlers) {
61
+ handler(event);
62
+ }
48
63
  }
49
64
  function handle(_, filename) {
50
- if (!filename) return;
65
+ if (!filename) {
66
+ return;
67
+ }
51
68
  const filepath = join(config.dir, filename);
52
69
  const prev = timers.get(filepath);
53
- if (prev) clearTimeout(prev);
54
- timers.set(filepath, setTimeout(() => {
55
- timers.delete(filepath);
56
- emit(filepath);
57
- }, 100));
70
+ if (prev) {
71
+ clearTimeout(prev);
72
+ }
73
+ timers.set(
74
+ filepath,
75
+ setTimeout(() => {
76
+ timers.delete(filepath);
77
+ emit(filepath);
78
+ }, 100)
79
+ );
58
80
  }
59
81
  return {
60
82
  on(handler) {
@@ -69,7 +91,9 @@ function createWatcher(config) {
69
91
  stop() {
70
92
  watcher?.close();
71
93
  watcher = null;
72
- for (const t of timers.values()) clearTimeout(t);
94
+ for (const t of timers.values()) {
95
+ clearTimeout(t);
96
+ }
73
97
  timers.clear();
74
98
  }
75
99
  };
package/dist/webhook.d.ts CHANGED
@@ -1,19 +1,19 @@
1
- type WebhookEvent = {
1
+ interface WebhookEvent {
2
2
  type: "created" | "updated" | "deleted";
3
3
  path: string;
4
4
  timestamp: number;
5
5
  metadata?: Record<string, unknown>;
6
- };
7
- type WebhookConfig = {
6
+ }
7
+ interface WebhookConfig {
8
8
  url: string;
9
9
  secret?: string;
10
10
  events?: WebhookEvent["type"][];
11
- };
12
- type WebhookResult = {
11
+ }
12
+ interface WebhookResult {
13
13
  success: boolean;
14
14
  status: number;
15
15
  duration: number;
16
- };
16
+ }
17
17
  declare function verifySignature(payload: string, signature: string, secret: string): boolean;
18
18
  declare function createEventFromChange(type: WebhookEvent["type"], path: string, meta?: Record<string, unknown>): WebhookEvent;
19
19
  declare function filterEvents(config: WebhookConfig, events: WebhookEvent[]): WebhookEvent[];
package/dist/webhook.js CHANGED
@@ -8,11 +8,21 @@ function istype(value) {
8
8
  return value === "created" || value === "updated" || value === "deleted";
9
9
  }
10
10
  function isevent(value) {
11
- if (!isrecord(value)) return false;
12
- if (!istype(value.type)) return false;
13
- if (typeof value.path !== "string") return false;
14
- if (typeof value.timestamp !== "number" || !Number.isFinite(value.timestamp)) return false;
15
- if (value.metadata !== void 0 && !isrecord(value.metadata)) return false;
11
+ if (!isrecord(value)) {
12
+ return false;
13
+ }
14
+ if (!istype(value.type)) {
15
+ return false;
16
+ }
17
+ if (typeof value.path !== "string") {
18
+ return false;
19
+ }
20
+ if (typeof value.timestamp !== "number" || !Number.isFinite(value.timestamp)) {
21
+ return false;
22
+ }
23
+ if (value.metadata !== void 0 && !isrecord(value.metadata)) {
24
+ return false;
25
+ }
16
26
  return true;
17
27
  }
18
28
  function parsets(payload) {
@@ -29,15 +39,19 @@ function parsets(payload) {
29
39
  }
30
40
  function verifySignature(payload, signature, secret) {
31
41
  const ts = parsets(payload);
32
- if (ts === null) return false;
42
+ if (ts === null) {
43
+ return false;
44
+ }
33
45
  return sign(secret, ts) === signature;
34
46
  }
35
47
  function createEventFromChange(type, path, meta) {
36
- return { type, path, timestamp: Date.now(), ...meta && { metadata: meta } };
48
+ return { path, timestamp: Date.now(), type, ...meta && { metadata: meta } };
37
49
  }
38
50
  function filterEvents(config, events) {
39
51
  const allowed = config.events;
40
- if (!allowed) return events;
52
+ if (!allowed) {
53
+ return events;
54
+ }
41
55
  return events.filter((e) => allowed.includes(e.type));
42
56
  }
43
57
  async function dispatch(config, body, type) {
@@ -51,16 +65,24 @@ async function dispatch(config, body, type) {
51
65
  }
52
66
  const start = performance.now();
53
67
  try {
54
- const res = await fetch(config.url, { method: "POST", headers, body });
55
- return { success: res.ok, status: res.status, duration: performance.now() - start };
68
+ const res = await fetch(config.url, { body, headers, method: "POST" });
69
+ return {
70
+ duration: performance.now() - start,
71
+ status: res.status,
72
+ success: res.ok
73
+ };
56
74
  } catch {
57
- return { success: false, status: 0, duration: performance.now() - start };
75
+ return { duration: performance.now() - start, status: 0, success: false };
58
76
  }
59
77
  }
60
78
  function createWebhook(config) {
61
79
  return {
62
80
  send: (event) => dispatch(config, JSON.stringify(event), event.type),
63
- sendBatch: (events) => dispatch(config, JSON.stringify(events), events.map((e) => e.type).join(","))
81
+ sendBatch: (events) => dispatch(
82
+ config,
83
+ JSON.stringify(events),
84
+ events.map((e) => e.type).join(",")
85
+ )
64
86
  };
65
87
  }
66
88
 
package/dist/workspace.js CHANGED
@@ -7,8 +7,10 @@ function isrecord(value) {
7
7
  function parsename(raw) {
8
8
  try {
9
9
  const parsed = JSON.parse(raw);
10
- if (!isrecord(parsed)) return null;
11
- const name = parsed.name;
10
+ if (!isrecord(parsed)) {
11
+ return null;
12
+ }
13
+ const { name } = parsed;
12
14
  return typeof name === "string" && name.length > 0 ? name : null;
13
15
  } catch {
14
16
  return null;
@@ -21,7 +23,9 @@ async function matchGlob(root, pattern) {
21
23
  const next = [];
22
24
  for (const dir of dirs) {
23
25
  if (part === "*") {
24
- const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
26
+ const entries = await readdir(dir, { withFileTypes: true }).catch(
27
+ () => []
28
+ );
25
29
  for (const e of entries) {
26
30
  if (e.isDirectory() && !e.name.startsWith(".")) {
27
31
  next.push(join(dir, e.name));
@@ -30,7 +34,9 @@ async function matchGlob(root, pattern) {
30
34
  } else {
31
35
  const full = join(dir, part);
32
36
  const s = await stat(full).catch(() => null);
33
- if (s?.isDirectory()) next.push(full);
37
+ if (s?.isDirectory()) {
38
+ next.push(full);
39
+ }
34
40
  }
35
41
  }
36
42
  dirs = next;
@@ -45,35 +51,43 @@ async function discoverPackages(config) {
45
51
  const dirs = await matchGlob(root, pattern);
46
52
  for (const dir of dirs) {
47
53
  const pkgPath = join(dir, "package.json");
48
- const raw = await readFile(pkgPath, "utf-8").catch(() => null);
49
- if (!raw) continue;
54
+ const raw = await readFile(pkgPath, "utf8").catch(() => null);
55
+ if (!raw) {
56
+ continue;
57
+ }
50
58
  const name = parsename(raw) ?? basename(dir);
51
59
  const docs = join(dir, docsDir);
52
60
  const exists = await stat(docs).catch(() => null);
53
- if (!exists?.isDirectory()) continue;
54
- results.push({ name, path: dir, docsDir: docs, slug: basename(dir) });
61
+ if (!exists?.isDirectory()) {
62
+ continue;
63
+ }
64
+ results.push({ docsDir: docs, name, path: dir, slug: basename(dir) });
55
65
  }
56
66
  }
57
67
  return results;
58
68
  }
59
69
  function buildWorkspaceNav(packages) {
60
70
  return packages.map((pkg) => ({
71
+ children: [],
61
72
  label: pkg.name,
62
- slug: pkg.slug,
63
- children: []
73
+ slug: pkg.slug
64
74
  }));
65
75
  }
66
76
  function resolveWorkspacePath(packages, slug) {
67
77
  const [pkgSlug, ...rest] = slug.split("/");
68
78
  const pkg = packages.find((p) => p.slug === pkgSlug);
69
- if (!pkg) return null;
79
+ if (!pkg) {
80
+ return null;
81
+ }
70
82
  const file = rest.length > 0 ? rest.join("/") : "index";
71
83
  return join(pkg.docsDir, `${file}.mdx`);
72
84
  }
73
85
  function mergeNavigation(sections) {
74
86
  const merged = [];
75
87
  for (const section of sections) {
76
- for (const item of section) merged.push(item);
88
+ for (const item of section) {
89
+ merged.push(item);
90
+ }
77
91
  }
78
92
  return merged;
79
93
  }