livemark 0.10.4 → 0.11.0

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 (447) hide show
  1. package/{target → build}/actions/changelog/build.d.ts +4 -1
  2. package/build/actions/changelog/build.js +192 -0
  3. package/build/actions/config/load.d.ts +12 -0
  4. package/build/actions/config/load.js +41 -0
  5. package/build/actions/config/load.unit.js +39 -0
  6. package/build/actions/target/build.d.ts +29 -0
  7. package/build/actions/target/build.js +87 -0
  8. package/build/commands/build.js +15 -0
  9. package/{target → build}/commands/escape.d.ts +1 -1
  10. package/build/commands/escape.js +62 -0
  11. package/build/commands/preview.js +19 -0
  12. package/build/commands/start.js +20 -0
  13. package/build/components/Breadcrumbs.js +14 -0
  14. package/build/components/Layout.js +66 -0
  15. package/build/components/SidebarArticles.js +46 -0
  16. package/build/components/SidebarLinks.js +27 -0
  17. package/build/components/SidebarSections.js +37 -0
  18. package/build/components/SiteTitle.js +13 -0
  19. package/build/content/article.js +55 -0
  20. package/build/content/tag.js +31 -0
  21. package/build/content-collections.js +218 -0
  22. package/{target → build}/models/config.d.ts +17 -1
  23. package/build/models/config.js +38 -0
  24. package/build/plugins/vite-livemark.d.ts +12 -0
  25. package/build/plugins/vite-livemark.js +165 -0
  26. package/build/routes/__root.js +68 -0
  27. package/build/settings.d.ts +9 -0
  28. package/build/settings.js +25 -0
  29. package/build/vite.config.js +30 -0
  30. package/package.json +15 -9
  31. package/source/actions/changelog/build.ts +11 -6
  32. package/source/actions/config/load.ts +21 -6
  33. package/source/actions/config/load.unit.ts +19 -2
  34. package/source/actions/target/build.ts +89 -0
  35. package/source/commands/build.ts +1 -0
  36. package/source/commands/escape.ts +18 -11
  37. package/source/commands/preview.ts +1 -0
  38. package/source/commands/start.ts +1 -0
  39. package/source/components/Breadcrumbs.tsx +2 -1
  40. package/source/components/Layout.tsx +3 -2
  41. package/source/components/SidebarArticles.tsx +2 -1
  42. package/source/components/SidebarLinks.tsx +2 -1
  43. package/source/components/SidebarSections.tsx +2 -1
  44. package/source/components/SiteTitle.tsx +5 -10
  45. package/source/content/article.ts +2 -1
  46. package/source/content/tag.ts +2 -1
  47. package/source/content-collections.ts +1 -1
  48. package/source/env.d.ts +2 -2
  49. package/source/models/config.ts +22 -1
  50. package/source/plugins/vite-livemark.ts +168 -94
  51. package/source/routeTree.gen.ts +86 -0
  52. package/source/routes/__root.tsx +7 -9
  53. package/source/settings.ts +13 -2
  54. package/source/vite.config.ts +4 -73
  55. package/target/actions/changelog/build.js +0 -187
  56. package/target/actions/config/load.d.ts +0 -5
  57. package/target/actions/config/load.js +0 -25
  58. package/target/actions/config/load.unit.js +0 -25
  59. package/target/commands/build.js +0 -14
  60. package/target/commands/escape.js +0 -56
  61. package/target/commands/preview.js +0 -18
  62. package/target/commands/start.js +0 -19
  63. package/target/components/Breadcrumbs.js +0 -13
  64. package/target/components/Layout.js +0 -65
  65. package/target/components/SidebarArticles.js +0 -45
  66. package/target/components/SidebarLinks.js +0 -26
  67. package/target/components/SidebarSections.js +0 -36
  68. package/target/components/SiteTitle.js +0 -12
  69. package/target/content/article.js +0 -54
  70. package/target/content/tag.js +0 -30
  71. package/target/content-collections.js +0 -218
  72. package/target/models/config.js +0 -34
  73. package/target/plugins/vite-livemark.d.ts +0 -18
  74. package/target/plugins/vite-livemark.js +0 -111
  75. package/target/routes/__root.js +0 -69
  76. package/target/settings.d.ts +0 -5
  77. package/target/settings.js +0 -15
  78. package/target/vite.config.js +0 -90
  79. /package/{target → build}/actions/changelog/build.unit.d.ts +0 -0
  80. /package/{target → build}/actions/changelog/build.unit.js +0 -0
  81. /package/{target → build}/actions/config/define.d.ts +0 -0
  82. /package/{target → build}/actions/config/define.js +0 -0
  83. /package/{target → build}/actions/config/define.unit.d.ts +0 -0
  84. /package/{target → build}/actions/config/define.unit.js +0 -0
  85. /package/{target → build}/actions/config/load.unit.d.ts +0 -0
  86. /package/{target → build}/client.d.ts +0 -0
  87. /package/{target → build}/client.js +0 -0
  88. /package/{target → build}/commands/build.d.ts +0 -0
  89. /package/{target → build}/commands/preview.d.ts +0 -0
  90. /package/{target → build}/commands/start.d.ts +0 -0
  91. /package/{target → build}/components/Abbr.d.ts +0 -0
  92. /package/{target → build}/components/Abbr.js +0 -0
  93. /package/{target → build}/components/AnsiCode.d.ts +0 -0
  94. /package/{target → build}/components/AnsiCode.js +0 -0
  95. /package/{target → build}/components/Article.d.ts +0 -0
  96. /package/{target → build}/components/Article.js +0 -0
  97. /package/{target → build}/components/BackToTop.d.ts +0 -0
  98. /package/{target → build}/components/BackToTop.js +0 -0
  99. /package/{target → build}/components/Banner.d.ts +0 -0
  100. /package/{target → build}/components/Banner.js +0 -0
  101. /package/{target → build}/components/BlogIndex.d.ts +0 -0
  102. /package/{target → build}/components/BlogIndex.js +0 -0
  103. /package/{target → build}/components/Breadcrumbs.d.ts +0 -0
  104. /package/{target → build}/components/Callout.d.ts +0 -0
  105. /package/{target → build}/components/Callout.js +0 -0
  106. /package/{target → build}/components/Card.d.ts +0 -0
  107. /package/{target → build}/components/Card.js +0 -0
  108. /package/{target → build}/components/Cards.d.ts +0 -0
  109. /package/{target → build}/components/Cards.js +0 -0
  110. /package/{target → build}/components/ChangelogIndex.d.ts +0 -0
  111. /package/{target → build}/components/ChangelogIndex.js +0 -0
  112. /package/{target → build}/components/CodeBlock.d.ts +0 -0
  113. /package/{target → build}/components/CodeBlock.js +0 -0
  114. /package/{target → build}/components/CodeTabs.d.ts +0 -0
  115. /package/{target → build}/components/CodeTabs.js +0 -0
  116. /package/{target → build}/components/Column.d.ts +0 -0
  117. /package/{target → build}/components/Column.js +0 -0
  118. /package/{target → build}/components/Columns.d.ts +0 -0
  119. /package/{target → build}/components/Columns.js +0 -0
  120. /package/{target → build}/components/Content.d.ts +0 -0
  121. /package/{target → build}/components/Content.js +0 -0
  122. /package/{target → build}/components/ContentTab.d.ts +0 -0
  123. /package/{target → build}/components/ContentTab.js +0 -0
  124. /package/{target → build}/components/ContentTabs.d.ts +0 -0
  125. /package/{target → build}/components/ContentTabs.js +0 -0
  126. /package/{target → build}/components/DefaultCatchBoundary.d.ts +0 -0
  127. /package/{target → build}/components/DefaultCatchBoundary.js +0 -0
  128. /package/{target → build}/components/DefinitionList.d.ts +0 -0
  129. /package/{target → build}/components/DefinitionList.js +0 -0
  130. /package/{target → build}/components/Details.d.ts +0 -0
  131. /package/{target → build}/components/Details.js +0 -0
  132. /package/{target → build}/components/FileTree.d.ts +0 -0
  133. /package/{target → build}/components/FileTree.js +0 -0
  134. /package/{target → build}/components/Footer.d.ts +0 -0
  135. /package/{target → build}/components/Footer.js +0 -0
  136. /package/{target → build}/components/FootnoteRef.d.ts +0 -0
  137. /package/{target → build}/components/FootnoteRef.js +0 -0
  138. /package/{target → build}/components/Heading.d.ts +0 -0
  139. /package/{target → build}/components/Heading.js +0 -0
  140. /package/{target → build}/components/InlineBadge.d.ts +0 -0
  141. /package/{target → build}/components/InlineBadge.js +0 -0
  142. /package/{target → build}/components/InlineIcon.d.ts +0 -0
  143. /package/{target → build}/components/InlineIcon.js +0 -0
  144. /package/{target → build}/components/InlineToc.d.ts +0 -0
  145. /package/{target → build}/components/InlineToc.js +0 -0
  146. /package/{target → build}/components/Layout.d.ts +0 -0
  147. /package/{target → build}/components/LinkButton.d.ts +0 -0
  148. /package/{target → build}/components/LinkButton.js +0 -0
  149. /package/{target → build}/components/Mermaid.d.ts +0 -0
  150. /package/{target → build}/components/Mermaid.js +0 -0
  151. /package/{target → build}/components/MermaidRenderer.d.ts +0 -0
  152. /package/{target → build}/components/MermaidRenderer.js +0 -0
  153. /package/{target → build}/components/NotFound.d.ts +0 -0
  154. /package/{target → build}/components/NotFound.js +0 -0
  155. /package/{target → build}/components/PackageTabs.d.ts +0 -0
  156. /package/{target → build}/components/PackageTabs.js +0 -0
  157. /package/{target → build}/components/PageToolbar.d.ts +0 -0
  158. /package/{target → build}/components/PageToolbar.js +0 -0
  159. /package/{target → build}/components/PrevNext.d.ts +0 -0
  160. /package/{target → build}/components/PrevNext.js +0 -0
  161. /package/{target → build}/components/Search.d.ts +0 -0
  162. /package/{target → build}/components/Search.js +0 -0
  163. /package/{target → build}/components/SearchDialog.d.ts +0 -0
  164. /package/{target → build}/components/SearchDialog.js +0 -0
  165. /package/{target → build}/components/Section.d.ts +0 -0
  166. /package/{target → build}/components/Section.js +0 -0
  167. /package/{target → build}/components/SectionHeader.d.ts +0 -0
  168. /package/{target → build}/components/SectionHeader.js +0 -0
  169. /package/{target → build}/components/Sidebar.d.ts +0 -0
  170. /package/{target → build}/components/Sidebar.js +0 -0
  171. /package/{target → build}/components/SidebarArticles.d.ts +0 -0
  172. /package/{target → build}/components/SidebarLinks.d.ts +0 -0
  173. /package/{target → build}/components/SidebarPosts.d.ts +0 -0
  174. /package/{target → build}/components/SidebarPosts.js +0 -0
  175. /package/{target → build}/components/SidebarReleases.d.ts +0 -0
  176. /package/{target → build}/components/SidebarReleases.js +0 -0
  177. /package/{target → build}/components/SidebarSections.d.ts +0 -0
  178. /package/{target → build}/components/SiteTitle.d.ts +0 -0
  179. /package/{target → build}/components/SortableTable.d.ts +0 -0
  180. /package/{target → build}/components/SortableTable.js +0 -0
  181. /package/{target → build}/components/SoundCloud.d.ts +0 -0
  182. /package/{target → build}/components/SoundCloud.js +0 -0
  183. /package/{target → build}/components/TagIndex.d.ts +0 -0
  184. /package/{target → build}/components/TagIndex.js +0 -0
  185. /package/{target → build}/components/Theme.d.ts +0 -0
  186. /package/{target → build}/components/Theme.js +0 -0
  187. /package/{target → build}/components/Toc.d.ts +0 -0
  188. /package/{target → build}/components/Toc.js +0 -0
  189. /package/{target → build}/components/YouTube.d.ts +0 -0
  190. /package/{target → build}/components/YouTube.js +0 -0
  191. /package/{target → build}/components/ZoomImage.d.ts +0 -0
  192. /package/{target → build}/components/ZoomImage.js +0 -0
  193. /package/{target → build}/content/article.d.ts +0 -0
  194. /package/{target → build}/content/tag.d.ts +0 -0
  195. /package/{target → build}/content-collections.d.ts +0 -0
  196. /package/{target → build}/elements/accordion.d.ts +0 -0
  197. /package/{target → build}/elements/accordion.js +0 -0
  198. /package/{target → build}/elements/alert-dialog.d.ts +0 -0
  199. /package/{target → build}/elements/alert-dialog.js +0 -0
  200. /package/{target → build}/elements/alert.d.ts +0 -0
  201. /package/{target → build}/elements/alert.js +0 -0
  202. /package/{target → build}/elements/aspect-ratio.d.ts +0 -0
  203. /package/{target → build}/elements/aspect-ratio.js +0 -0
  204. /package/{target → build}/elements/avatar.d.ts +0 -0
  205. /package/{target → build}/elements/avatar.js +0 -0
  206. /package/{target → build}/elements/badge.d.ts +0 -0
  207. /package/{target → build}/elements/badge.js +0 -0
  208. /package/{target → build}/elements/breadcrumb.d.ts +0 -0
  209. /package/{target → build}/elements/breadcrumb.js +0 -0
  210. /package/{target → build}/elements/button-group.d.ts +0 -0
  211. /package/{target → build}/elements/button-group.js +0 -0
  212. /package/{target → build}/elements/button.d.ts +0 -0
  213. /package/{target → build}/elements/button.js +0 -0
  214. /package/{target → build}/elements/calendar.d.ts +0 -0
  215. /package/{target → build}/elements/calendar.js +0 -0
  216. /package/{target → build}/elements/card.d.ts +0 -0
  217. /package/{target → build}/elements/card.js +0 -0
  218. /package/{target → build}/elements/carousel.d.ts +0 -0
  219. /package/{target → build}/elements/carousel.js +0 -0
  220. /package/{target → build}/elements/chart.d.ts +0 -0
  221. /package/{target → build}/elements/chart.js +0 -0
  222. /package/{target → build}/elements/checkbox.d.ts +0 -0
  223. /package/{target → build}/elements/checkbox.js +0 -0
  224. /package/{target → build}/elements/collapsible.d.ts +0 -0
  225. /package/{target → build}/elements/collapsible.js +0 -0
  226. /package/{target → build}/elements/command.d.ts +0 -0
  227. /package/{target → build}/elements/command.js +0 -0
  228. /package/{target → build}/elements/context-menu.d.ts +0 -0
  229. /package/{target → build}/elements/context-menu.js +0 -0
  230. /package/{target → build}/elements/dialog.d.ts +0 -0
  231. /package/{target → build}/elements/dialog.js +0 -0
  232. /package/{target → build}/elements/direction.d.ts +0 -0
  233. /package/{target → build}/elements/direction.js +0 -0
  234. /package/{target → build}/elements/drawer.d.ts +0 -0
  235. /package/{target → build}/elements/drawer.js +0 -0
  236. /package/{target → build}/elements/dropdown-menu.d.ts +0 -0
  237. /package/{target → build}/elements/dropdown-menu.js +0 -0
  238. /package/{target → build}/elements/empty.d.ts +0 -0
  239. /package/{target → build}/elements/empty.js +0 -0
  240. /package/{target → build}/elements/field.d.ts +0 -0
  241. /package/{target → build}/elements/field.js +0 -0
  242. /package/{target → build}/elements/hover-card.d.ts +0 -0
  243. /package/{target → build}/elements/hover-card.js +0 -0
  244. /package/{target → build}/elements/input-group.d.ts +0 -0
  245. /package/{target → build}/elements/input-group.js +0 -0
  246. /package/{target → build}/elements/input-otp.d.ts +0 -0
  247. /package/{target → build}/elements/input-otp.js +0 -0
  248. /package/{target → build}/elements/input.d.ts +0 -0
  249. /package/{target → build}/elements/input.js +0 -0
  250. /package/{target → build}/elements/item.d.ts +0 -0
  251. /package/{target → build}/elements/item.js +0 -0
  252. /package/{target → build}/elements/kbd.d.ts +0 -0
  253. /package/{target → build}/elements/kbd.js +0 -0
  254. /package/{target → build}/elements/label.d.ts +0 -0
  255. /package/{target → build}/elements/label.js +0 -0
  256. /package/{target → build}/elements/menubar.d.ts +0 -0
  257. /package/{target → build}/elements/menubar.js +0 -0
  258. /package/{target → build}/elements/native-select.d.ts +0 -0
  259. /package/{target → build}/elements/native-select.js +0 -0
  260. /package/{target → build}/elements/navigation-menu.d.ts +0 -0
  261. /package/{target → build}/elements/navigation-menu.js +0 -0
  262. /package/{target → build}/elements/pagination.d.ts +0 -0
  263. /package/{target → build}/elements/pagination.js +0 -0
  264. /package/{target → build}/elements/popover.d.ts +0 -0
  265. /package/{target → build}/elements/popover.js +0 -0
  266. /package/{target → build}/elements/progress.d.ts +0 -0
  267. /package/{target → build}/elements/progress.js +0 -0
  268. /package/{target → build}/elements/radio-group.d.ts +0 -0
  269. /package/{target → build}/elements/radio-group.js +0 -0
  270. /package/{target → build}/elements/resizable.d.ts +0 -0
  271. /package/{target → build}/elements/resizable.js +0 -0
  272. /package/{target → build}/elements/scroll-area.d.ts +0 -0
  273. /package/{target → build}/elements/scroll-area.js +0 -0
  274. /package/{target → build}/elements/select.d.ts +0 -0
  275. /package/{target → build}/elements/select.js +0 -0
  276. /package/{target → build}/elements/separator.d.ts +0 -0
  277. /package/{target → build}/elements/separator.js +0 -0
  278. /package/{target → build}/elements/sheet.d.ts +0 -0
  279. /package/{target → build}/elements/sheet.js +0 -0
  280. /package/{target → build}/elements/sidebar.d.ts +0 -0
  281. /package/{target → build}/elements/sidebar.js +0 -0
  282. /package/{target → build}/elements/skeleton.d.ts +0 -0
  283. /package/{target → build}/elements/skeleton.js +0 -0
  284. /package/{target → build}/elements/slider.d.ts +0 -0
  285. /package/{target → build}/elements/slider.js +0 -0
  286. /package/{target → build}/elements/sonner.d.ts +0 -0
  287. /package/{target → build}/elements/sonner.js +0 -0
  288. /package/{target → build}/elements/spinner.d.ts +0 -0
  289. /package/{target → build}/elements/spinner.js +0 -0
  290. /package/{target → build}/elements/switch.d.ts +0 -0
  291. /package/{target → build}/elements/switch.js +0 -0
  292. /package/{target → build}/elements/table.d.ts +0 -0
  293. /package/{target → build}/elements/table.js +0 -0
  294. /package/{target → build}/elements/tabs.d.ts +0 -0
  295. /package/{target → build}/elements/tabs.js +0 -0
  296. /package/{target → build}/elements/textarea.d.ts +0 -0
  297. /package/{target → build}/elements/textarea.js +0 -0
  298. /package/{target → build}/elements/toggle-group.d.ts +0 -0
  299. /package/{target → build}/elements/toggle-group.js +0 -0
  300. /package/{target → build}/elements/toggle.d.ts +0 -0
  301. /package/{target → build}/elements/toggle.js +0 -0
  302. /package/{target → build}/elements/tooltip.d.ts +0 -0
  303. /package/{target → build}/elements/tooltip.js +0 -0
  304. /package/{target → build}/entrypoints/main.d.ts +0 -0
  305. /package/{target → build}/entrypoints/main.js +0 -0
  306. /package/{target → build}/helpers/article-icon.d.ts +0 -0
  307. /package/{target → build}/helpers/article-icon.js +0 -0
  308. /package/{target → build}/helpers/article.d.ts +0 -0
  309. /package/{target → build}/helpers/article.js +0 -0
  310. /package/{target → build}/helpers/changelog-source.d.ts +0 -0
  311. /package/{target → build}/helpers/changelog-source.js +0 -0
  312. /package/{target → build}/helpers/changelog-source.unit.d.ts +0 -0
  313. /package/{target → build}/helpers/changelog-source.unit.js +0 -0
  314. /package/{target → build}/helpers/dynamic-icon-resolver.d.ts +0 -0
  315. /package/{target → build}/helpers/dynamic-icon-resolver.js +0 -0
  316. /package/{target → build}/helpers/dynamic-icon.d.ts +0 -0
  317. /package/{target → build}/helpers/dynamic-icon.js +0 -0
  318. /package/{target → build}/helpers/favicon.d.ts +0 -0
  319. /package/{target → build}/helpers/favicon.js +0 -0
  320. /package/{target → build}/helpers/model.d.ts +0 -0
  321. /package/{target → build}/helpers/model.js +0 -0
  322. /package/{target → build}/helpers/program.d.ts +0 -0
  323. /package/{target → build}/helpers/program.js +0 -0
  324. /package/{target → build}/helpers/resolve-asset-path.d.ts +0 -0
  325. /package/{target → build}/helpers/resolve-asset-path.js +0 -0
  326. /package/{target → build}/helpers/resolve-includes.d.ts +0 -0
  327. /package/{target → build}/helpers/resolve-includes.js +0 -0
  328. /package/{target → build}/helpers/resolve-includes.unit.d.ts +0 -0
  329. /package/{target → build}/helpers/resolve-includes.unit.js +0 -0
  330. /package/{target → build}/helpers/search-text.d.ts +0 -0
  331. /package/{target → build}/helpers/search-text.js +0 -0
  332. /package/{target → build}/helpers/section.d.ts +0 -0
  333. /package/{target → build}/helpers/section.js +0 -0
  334. /package/{target → build}/helpers/section.unit.d.ts +0 -0
  335. /package/{target → build}/helpers/section.unit.js +0 -0
  336. /package/{target → build}/helpers/theme.d.ts +0 -0
  337. /package/{target → build}/helpers/theme.js +0 -0
  338. /package/{target → build}/helpers/toc-context.d.ts +0 -0
  339. /package/{target → build}/helpers/toc-context.js +0 -0
  340. /package/{target → build}/helpers/toc.d.ts +0 -0
  341. /package/{target → build}/helpers/toc.js +0 -0
  342. /package/{target → build}/helpers/toc.unit.d.ts +0 -0
  343. /package/{target → build}/helpers/toc.unit.js +0 -0
  344. /package/{target → build}/hooks/in-view.d.ts +0 -0
  345. /package/{target → build}/hooks/in-view.js +0 -0
  346. /package/{target → build}/hooks/media.d.ts +0 -0
  347. /package/{target → build}/hooks/media.js +0 -0
  348. /package/{target → build}/index.d.ts +0 -0
  349. /package/{target → build}/index.js +0 -0
  350. /package/{target → build}/models/article.d.ts +0 -0
  351. /package/{target → build}/models/article.js +0 -0
  352. /package/{target → build}/models/link.d.ts +0 -0
  353. /package/{target → build}/models/link.js +0 -0
  354. /package/{target → build}/models/patch.d.ts +0 -0
  355. /package/{target → build}/models/patch.js +0 -0
  356. /package/{target → build}/models/section.d.ts +0 -0
  357. /package/{target → build}/models/section.js +0 -0
  358. /package/{target → build}/models/theme.d.ts +0 -0
  359. /package/{target → build}/models/theme.js +0 -0
  360. /package/{target → build}/models/toc.d.ts +0 -0
  361. /package/{target → build}/models/toc.js +0 -0
  362. /package/{target → build}/plugins/rehype-inline-code.d.ts +0 -0
  363. /package/{target → build}/plugins/rehype-inline-code.js +0 -0
  364. /package/{target → build}/plugins/rehype-task-list-a11y.d.ts +0 -0
  365. /package/{target → build}/plugins/rehype-task-list-a11y.js +0 -0
  366. /package/{target → build}/plugins/remark-abbr.d.ts +0 -0
  367. /package/{target → build}/plugins/remark-abbr.js +0 -0
  368. /package/{target → build}/plugins/remark-abbr.unit.d.ts +0 -0
  369. /package/{target → build}/plugins/remark-abbr.unit.js +0 -0
  370. /package/{target → build}/plugins/remark-ansi.d.ts +0 -0
  371. /package/{target → build}/plugins/remark-ansi.js +0 -0
  372. /package/{target → build}/plugins/remark-ansi.unit.d.ts +0 -0
  373. /package/{target → build}/plugins/remark-ansi.unit.js +0 -0
  374. /package/{target → build}/plugins/remark-badge.d.ts +0 -0
  375. /package/{target → build}/plugins/remark-badge.js +0 -0
  376. /package/{target → build}/plugins/remark-badge.unit.d.ts +0 -0
  377. /package/{target → build}/plugins/remark-badge.unit.js +0 -0
  378. /package/{target → build}/plugins/remark-button.d.ts +0 -0
  379. /package/{target → build}/plugins/remark-button.js +0 -0
  380. /package/{target → build}/plugins/remark-button.unit.d.ts +0 -0
  381. /package/{target → build}/plugins/remark-button.unit.js +0 -0
  382. /package/{target → build}/plugins/remark-callout.d.ts +0 -0
  383. /package/{target → build}/plugins/remark-callout.js +0 -0
  384. /package/{target → build}/plugins/remark-card.d.ts +0 -0
  385. /package/{target → build}/plugins/remark-card.js +0 -0
  386. /package/{target → build}/plugins/remark-code-tabs.d.ts +0 -0
  387. /package/{target → build}/plugins/remark-code-tabs.js +0 -0
  388. /package/{target → build}/plugins/remark-columns.d.ts +0 -0
  389. /package/{target → build}/plugins/remark-columns.js +0 -0
  390. /package/{target → build}/plugins/remark-custom-heading-id.d.ts +0 -0
  391. /package/{target → build}/plugins/remark-custom-heading-id.js +0 -0
  392. /package/{target → build}/plugins/remark-custom-heading-id.unit.d.ts +0 -0
  393. /package/{target → build}/plugins/remark-custom-heading-id.unit.js +0 -0
  394. /package/{target → build}/plugins/remark-deflist.d.ts +0 -0
  395. /package/{target → build}/plugins/remark-deflist.js +0 -0
  396. /package/{target → build}/plugins/remark-details.d.ts +0 -0
  397. /package/{target → build}/plugins/remark-details.js +0 -0
  398. /package/{target → build}/plugins/remark-filetree.d.ts +0 -0
  399. /package/{target → build}/plugins/remark-filetree.js +0 -0
  400. /package/{target → build}/plugins/remark-filetree.unit.d.ts +0 -0
  401. /package/{target → build}/plugins/remark-filetree.unit.js +0 -0
  402. /package/{target → build}/plugins/remark-github-callout.d.ts +0 -0
  403. /package/{target → build}/plugins/remark-github-callout.js +0 -0
  404. /package/{target → build}/plugins/remark-icon.d.ts +0 -0
  405. /package/{target → build}/plugins/remark-icon.js +0 -0
  406. /package/{target → build}/plugins/remark-image.d.ts +0 -0
  407. /package/{target → build}/plugins/remark-image.js +0 -0
  408. /package/{target → build}/plugins/remark-media.d.ts +0 -0
  409. /package/{target → build}/plugins/remark-media.js +0 -0
  410. /package/{target → build}/plugins/remark-media.unit.d.ts +0 -0
  411. /package/{target → build}/plugins/remark-media.unit.js +0 -0
  412. /package/{target → build}/plugins/remark-mermaid.d.ts +0 -0
  413. /package/{target → build}/plugins/remark-mermaid.js +0 -0
  414. /package/{target → build}/plugins/remark-npm.d.ts +0 -0
  415. /package/{target → build}/plugins/remark-npm.js +0 -0
  416. /package/{target → build}/plugins/remark-passthrough-directive.d.ts +0 -0
  417. /package/{target → build}/plugins/remark-passthrough-directive.js +0 -0
  418. /package/{target → build}/plugins/remark-steps.d.ts +0 -0
  419. /package/{target → build}/plugins/remark-steps.js +0 -0
  420. /package/{target → build}/plugins/remark-steps.unit.d.ts +0 -0
  421. /package/{target → build}/plugins/remark-steps.unit.js +0 -0
  422. /package/{target → build}/plugins/remark-tab.d.ts +0 -0
  423. /package/{target → build}/plugins/remark-tab.js +0 -0
  424. /package/{target → build}/plugins/remark-tab.unit.d.ts +0 -0
  425. /package/{target → build}/plugins/remark-tab.unit.js +0 -0
  426. /package/{target → build}/plugins/remark-toc.d.ts +0 -0
  427. /package/{target → build}/plugins/remark-toc.js +0 -0
  428. /package/{target → build}/plugins/remark-toc.unit.d.ts +0 -0
  429. /package/{target → build}/plugins/remark-toc.unit.js +0 -0
  430. /package/{target → build}/plugins/shiki-icon.d.ts +0 -0
  431. /package/{target → build}/plugins/shiki-icon.js +0 -0
  432. /package/{target → build}/plugins/shiki-line-highlight.d.ts +0 -0
  433. /package/{target → build}/plugins/shiki-line-highlight.js +0 -0
  434. /package/{target → build}/program.d.ts +0 -0
  435. /package/{target → build}/program.js +0 -0
  436. /package/{target → build}/routeTree.gen.d.ts +0 -0
  437. /package/{target → build}/routeTree.gen.js +0 -0
  438. /package/{target → build}/router.d.ts +0 -0
  439. /package/{target → build}/router.js +0 -0
  440. /package/{target → build}/routes/$.d.ts +0 -0
  441. /package/{target → build}/routes/$.js +0 -0
  442. /package/{target → build}/routes/__root.d.ts +0 -0
  443. /package/{target → build}/server.d.ts +0 -0
  444. /package/{target → build}/server.js +0 -0
  445. /package/{target → build}/utils/style.d.ts +0 -0
  446. /package/{target → build}/utils/style.js +0 -0
  447. /package/{target → build}/vite.config.d.ts +0 -0
@@ -1,26 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useLocation } from "@tanstack/react-router";
3
- import { ExternalLink } from "lucide-react";
4
- import { currentSection } from "../content/article.js";
5
- import { DynamicIcon } from "../helpers/dynamic-icon.js";
6
- import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from "../elements/sidebar.js";
7
- /** Shared Links group. Renders sidebar-positioned links always, and
8
- * header-positioned links only on mobile (mobile collapses all chrome
9
- * links into the sidebar since the header strip is hidden below `md`). */
10
- export function SidebarLinks() {
11
- const pathname = useLocation({ select: l => l.pathname });
12
- const section = currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`);
13
- const links = import.meta.env.CONFIG.links?.filter(link => !link.prefix || link.prefix === section?.prefix) ?? [];
14
- if (!links.length)
15
- return null;
16
- const hasDesktopItems = links.some(l => l.position === "sidebar");
17
- return (_jsxs(SidebarGroup, { className: hasDesktopItems ? undefined : "md:hidden", children: [
18
- _jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Links" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: links.map(link => {
19
- const mobileOnly = link.position !== "sidebar";
20
- return (_jsx(SidebarMenuItem, { className: mobileOnly ? "md:hidden" : undefined, children: _jsxs(SidebarMenuButton, { className: "text-muted-foreground", render: _jsx("a", { href: link.url, target: "_blank", rel: "noopener noreferrer" }), children: [link.icon && (_jsx(DynamicIcon, { name: link.icon, className: "size-4" })), _jsxs("span", { children: [link.title, " ", _jsx(ExternalLink, { className: "inline -mt-0.5 opacity-75", style: { width: 12, height: 12 } })
21
- ] })
22
- ] }) }, link.url));
23
- }) }) })
24
- ] }));
25
- }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhckxpbmtzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhckxpbmtzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNkIsQ0FBQTtBQUN6RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixlQUFlLEdBQ2hCLE1BQU0sd0JBQXlCLENBQUE7QUFFaEM7OzBFQUUwRTtBQUMxRSxNQUFNLFVBQVUsWUFBWTtJQUMxQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUN6RCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkUsTUFBTSxLQUFLLEdBQ1QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUNsQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRSxNQUFNLENBQ3hELElBQUksRUFBRSxDQUFBO0lBRVQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFDOUIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUE7SUFFakUsT0FBTyxDQUNMLE1BQUMsWUFBWSxJQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUNoRSxLQUFDLGlCQUFpQixJQUFDLFNBQVMsRUFBQyw2Q0FBNkMsc0JBRXRELEVBQ3BCLEtBQUMsbUJBQW1CLGNBQ2xCLEtBQUMsV0FBVyxjQUNULEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFBO3dCQUM5QyxPQUFPLENBQ0wsS0FBQyxlQUFlLElBRWQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLFlBRS9DLE1BQUMsaUJBQWlCLElBQ2hCLFNBQVMsRUFBQyx1QkFBdUIsRUFDakMsTUFBTSxFQUNKLFlBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQ2QsTUFBTSxFQUFDLFFBQVEsRUFDZixHQUFHLEVBQUMscUJBQXFCLEdBQ3pCLGFBR0gsSUFBSSxDQUFDLElBQUksSUFBSSxDQUNaLEtBQUMsV0FBVyxJQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxRQUFRLEdBQUcsQ0FDcEQsRUFDRCwyQkFDRyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFDaEIsS0FBQyxZQUFZLElBQ1gsU0FBUyxFQUFDLDJCQUEyQixFQUNyQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FDaEM7NENBQ0c7b0NBQ1csSUF2QmYsSUFBSSxDQUFDLEdBQUcsQ0F3QkcsQ0FDbkIsQ0FBQTtvQkFDSCxDQUFDLENBQUMsR0FDVSxHQUNNO1lBQ1QsQ0FDaEIsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VMb2NhdGlvbiB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCJcbmltcG9ydCB7IEV4dGVybmFsTGluayB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHsgY3VycmVudFNlY3Rpb24gfSBmcm9tIFwiLi4vY29udGVudC9hcnRpY2xlLnRzXCJcbmltcG9ydCB7IER5bmFtaWNJY29uIH0gZnJvbSBcIi4uL2hlbHBlcnMvZHluYW1pYy1pY29uLnRzeFwiXG5pbXBvcnQge1xuICBTaWRlYmFyR3JvdXAsXG4gIFNpZGViYXJHcm91cENvbnRlbnQsXG4gIFNpZGViYXJHcm91cExhYmVsLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbn0gZnJvbSBcIi4uL2VsZW1lbnRzL3NpZGViYXIudHN4XCJcblxuLyoqIFNoYXJlZCBMaW5rcyBncm91cC4gUmVuZGVycyBzaWRlYmFyLXBvc2l0aW9uZWQgbGlua3MgYWx3YXlzLCBhbmRcbiAqIGhlYWRlci1wb3NpdGlvbmVkIGxpbmtzIG9ubHkgb24gbW9iaWxlIChtb2JpbGUgY29sbGFwc2VzIGFsbCBjaHJvbWVcbiAqIGxpbmtzIGludG8gdGhlIHNpZGViYXIgc2luY2UgdGhlIGhlYWRlciBzdHJpcCBpcyBoaWRkZW4gYmVsb3cgYG1kYCkuICovXG5leHBvcnQgZnVuY3Rpb24gU2lkZWJhckxpbmtzKCkge1xuICBjb25zdCBwYXRobmFtZSA9IHVzZUxvY2F0aW9uKHsgc2VsZWN0OiBsID0+IGwucGF0aG5hbWUgfSlcbiAgY29uc3Qgc2VjdGlvbiA9IGN1cnJlbnRTZWN0aW9uKGAvJHtwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIil9L2ApXG4gIGNvbnN0IGxpbmtzID1cbiAgICBpbXBvcnQubWV0YS5lbnYuQ09ORklHLmxpbmtzPy5maWx0ZXIoXG4gICAgICBsaW5rID0+ICFsaW5rLnByZWZpeCB8fCBsaW5rLnByZWZpeCA9PT0gc2VjdGlvbj8ucHJlZml4LFxuICAgICkgPz8gW11cblxuICBpZiAoIWxpbmtzLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgY29uc3QgaGFzRGVza3RvcEl0ZW1zID0gbGlua3Muc29tZShsID0+IGwucG9zaXRpb24gPT09IFwic2lkZWJhclwiKVxuXG4gIHJldHVybiAoXG4gICAgPFNpZGViYXJHcm91cCBjbGFzc05hbWU9e2hhc0Rlc2t0b3BJdGVtcyA/IHVuZGVmaW5lZCA6IFwibWQ6aGlkZGVuXCJ9PlxuICAgICAgPFNpZGViYXJHcm91cExhYmVsIGNsYXNzTmFtZT1cInVwcGVyY2FzZSBmb250LW1vbm8gdGV4dC14cyB0cmFja2luZy13aWRlc3RcIj5cbiAgICAgICAgTGlua3NcbiAgICAgIDwvU2lkZWJhckdyb3VwTGFiZWw+XG4gICAgICA8U2lkZWJhckdyb3VwQ29udGVudD5cbiAgICAgICAgPFNpZGViYXJNZW51PlxuICAgICAgICAgIHtsaW5rcy5tYXAobGluayA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2JpbGVPbmx5ID0gbGluay5wb3NpdGlvbiAhPT0gXCJzaWRlYmFyXCJcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW1cbiAgICAgICAgICAgICAgICBrZXk9e2xpbmsudXJsfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17bW9iaWxlT25seSA/IFwibWQ6aGlkZGVuXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiXG4gICAgICAgICAgICAgICAgICByZW5kZXI9e1xuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9e2xpbmsudXJsfVxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2xpbmsuaWNvbiAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxEeW5hbWljSWNvbiBuYW1lPXtsaW5rLmljb259IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtsaW5rLnRpdGxlfXtcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgPEV4dGVybmFsTGlua1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZSAtbXQtMC41IG9wYWNpdHktNzVcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAxMiwgaGVpZ2h0OiAxMiB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVCdXR0b24+XG4gICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgPC9TaWRlYmFyR3JvdXBDb250ZW50PlxuICAgIDwvU2lkZWJhckdyb3VwPlxuICApXG59XG4iXX0=
@@ -1,36 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Link, useLocation, useMatch } from "@tanstack/react-router";
3
- import { currentSection, sectionFirstArticle } from "../content/article.js";
4
- import { DynamicIcon } from "../helpers/dynamic-icon.js";
5
- import { sectionIcon } from "../helpers/section.js";
6
- import { SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuButton, SidebarMenuItem, } from "../elements/sidebar.js";
7
- function splatFor(pathname) {
8
- return { _splat: pathname.replace(/^\/|\/$/g, "") };
9
- }
10
- /** Shared Sections group. Renders sidebar-positioned sections always, and
11
- * header-positioned sections only on mobile (mobile collapses all sections
12
- * into the sidebar since the header nav strip is hidden below `md`). */
13
- export function SidebarSections() {
14
- const pathname = useLocation({ select: l => l.pathname });
15
- const articleRoute = useMatch({ from: "/$", shouldThrow: false });
16
- const section = articleRoute
17
- ? currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`)
18
- : undefined;
19
- const sections = import.meta.env.CONFIG.sections ?? [];
20
- if (!sections.length)
21
- return null;
22
- const hasDesktopItems = sections.some(s => s.position === "sidebar");
23
- return (_jsxs(SidebarGroup, { className: hasDesktopItems ? undefined : "md:hidden", children: [
24
- _jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Sections" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: sections.map(s => {
25
- const target = s.type === "blog" || s.type === "changelog"
26
- ? s.prefix
27
- : (sectionFirstArticle.get(s.prefix) ?? s.prefix);
28
- const active = section?.prefix === s.prefix;
29
- const mobileOnly = s.position !== "sidebar";
30
- return (_jsx(SidebarMenuItem, { className: mobileOnly ? "md:hidden" : undefined, children: _jsxs(SidebarMenuButton, { isActive: active, className: active ? "" : "opacity-75", render: _jsx(Link, { to: target === "/" ? "/" : "/$", params: target && target !== "/" ? splatFor(target) : {} }), children: [
31
- _jsx(DynamicIcon, { name: sectionIcon(s), className: "size-4" }), _jsx("span", { children: s.title })
32
- ] }) }, s.prefix));
33
- }) }) })
34
- ] }));
35
- }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhclNlY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhclNlY3Rpb25zLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNkIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDbkQsT0FBTyxFQUNMLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsZUFBZSxHQUNoQixNQUFNLHdCQUF5QixDQUFBO0FBRWhDLFNBQVMsUUFBUSxDQUFDLFFBQWdCO0lBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQTtBQUNyRCxDQUFDO0FBRUQ7O3dFQUV3RTtBQUN4RSxNQUFNLFVBQVUsZUFBZTtJQUM3QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUN6RCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ2pFLE1BQU0sT0FBTyxHQUFHLFlBQVk7UUFDMUIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDekQsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNiLE1BQU0sUUFBUSxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtJQUV0RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQTtJQUNqQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQTtJQUVwRSxPQUFPLENBQ0wsTUFBQyxZQUFZLElBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ2hFLEtBQUMsaUJBQWlCLElBQUMsU0FBUyxFQUFDLDZDQUE2Qyx5QkFFdEQsRUFDcEIsS0FBQyxtQkFBbUIsY0FDbEIsS0FBQyxXQUFXLGNBQ1QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDaEIsTUFBTSxNQUFNLEdBQ1YsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXOzRCQUN6QyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07NEJBQ1YsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7d0JBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQTt3QkFDM0MsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUE7d0JBQzNDLE9BQU8sQ0FDTCxLQUFDLGVBQWUsSUFFZCxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsWUFFL0MsTUFBQyxpQkFBaUIsSUFDaEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQ3JDLE1BQU0sRUFDSixLQUFDLElBQUksSUFDSCxFQUFFLEVBQUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQy9CLE1BQU0sRUFBRSxNQUFNLElBQUksTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQ3hEO29DQUdKLEtBQUMsV0FBVyxJQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFDLFFBQVEsR0FBRyxFQUN4RCx5QkFBTyxDQUFDLENBQUMsS0FBSyxHQUFRO29DQUNKLElBZmYsQ0FBQyxDQUFDLE1BQU0sQ0FnQkcsQ0FDbkIsQ0FBQTtvQkFDSCxDQUFDLENBQUMsR0FDVSxHQUNNO1lBQ1QsQ0FDaEIsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5rLCB1c2VMb2NhdGlvbiwgdXNlTWF0Y2ggfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyBjdXJyZW50U2VjdGlvbiwgc2VjdGlvbkZpcnN0QXJ0aWNsZSB9IGZyb20gXCIuLi9jb250ZW50L2FydGljbGUudHNcIlxuaW1wb3J0IHsgRHluYW1pY0ljb24gfSBmcm9tIFwiLi4vaGVscGVycy9keW5hbWljLWljb24udHN4XCJcbmltcG9ydCB7IHNlY3Rpb25JY29uIH0gZnJvbSBcIi4uL2hlbHBlcnMvc2VjdGlvbi50c1wiXG5pbXBvcnQge1xuICBTaWRlYmFyR3JvdXAsXG4gIFNpZGViYXJHcm91cENvbnRlbnQsXG4gIFNpZGViYXJHcm91cExhYmVsLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbn0gZnJvbSBcIi4uL2VsZW1lbnRzL3NpZGViYXIudHN4XCJcblxuZnVuY3Rpb24gc3BsYXRGb3IocGF0aG5hbWU6IHN0cmluZykge1xuICByZXR1cm4geyBfc3BsYXQ6IHBhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKSB9XG59XG5cbi8qKiBTaGFyZWQgU2VjdGlvbnMgZ3JvdXAuIFJlbmRlcnMgc2lkZWJhci1wb3NpdGlvbmVkIHNlY3Rpb25zIGFsd2F5cywgYW5kXG4gKiBoZWFkZXItcG9zaXRpb25lZCBzZWN0aW9ucyBvbmx5IG9uIG1vYmlsZSAobW9iaWxlIGNvbGxhcHNlcyBhbGwgc2VjdGlvbnNcbiAqIGludG8gdGhlIHNpZGViYXIgc2luY2UgdGhlIGhlYWRlciBuYXYgc3RyaXAgaXMgaGlkZGVuIGJlbG93IGBtZGApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpZGViYXJTZWN0aW9ucygpIHtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VMb2NhdGlvbih7IHNlbGVjdDogbCA9PiBsLnBhdGhuYW1lIH0pXG4gIGNvbnN0IGFydGljbGVSb3V0ZSA9IHVzZU1hdGNoKHsgZnJvbTogXCIvJFwiLCBzaG91bGRUaHJvdzogZmFsc2UgfSlcbiAgY29uc3Qgc2VjdGlvbiA9IGFydGljbGVSb3V0ZVxuICAgID8gY3VycmVudFNlY3Rpb24oYC8ke3BhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYClcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBzZWN0aW9ucyA9IGltcG9ydC5tZXRhLmVudi5DT05GSUcuc2VjdGlvbnMgPz8gW11cblxuICBpZiAoIXNlY3Rpb25zLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgY29uc3QgaGFzRGVza3RvcEl0ZW1zID0gc2VjdGlvbnMuc29tZShzID0+IHMucG9zaXRpb24gPT09IFwic2lkZWJhclwiKVxuXG4gIHJldHVybiAoXG4gICAgPFNpZGViYXJHcm91cCBjbGFzc05hbWU9e2hhc0Rlc2t0b3BJdGVtcyA/IHVuZGVmaW5lZCA6IFwibWQ6aGlkZGVuXCJ9PlxuICAgICAgPFNpZGViYXJHcm91cExhYmVsIGNsYXNzTmFtZT1cInVwcGVyY2FzZSBmb250LW1vbm8gdGV4dC14cyB0cmFja2luZy13aWRlc3RcIj5cbiAgICAgICAgU2VjdGlvbnNcbiAgICAgIDwvU2lkZWJhckdyb3VwTGFiZWw+XG4gICAgICA8U2lkZWJhckdyb3VwQ29udGVudD5cbiAgICAgICAgPFNpZGViYXJNZW51PlxuICAgICAgICAgIHtzZWN0aW9ucy5tYXAocyA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPVxuICAgICAgICAgICAgICBzLnR5cGUgPT09IFwiYmxvZ1wiIHx8IHMudHlwZSA9PT0gXCJjaGFuZ2Vsb2dcIlxuICAgICAgICAgICAgICAgID8gcy5wcmVmaXhcbiAgICAgICAgICAgICAgICA6IChzZWN0aW9uRmlyc3RBcnRpY2xlLmdldChzLnByZWZpeCkgPz8gcy5wcmVmaXgpXG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBzZWN0aW9uPy5wcmVmaXggPT09IHMucHJlZml4XG4gICAgICAgICAgICBjb25zdCBtb2JpbGVPbmx5ID0gcy5wb3NpdGlvbiAhPT0gXCJzaWRlYmFyXCJcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW1cbiAgICAgICAgICAgICAgICBrZXk9e3MucHJlZml4fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17bW9iaWxlT25seSA/IFwibWQ6aGlkZGVuXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b25cbiAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXthY3RpdmV9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2FjdGl2ZSA/IFwiXCIgOiBcIm9wYWNpdHktNzVcIn1cbiAgICAgICAgICAgICAgICAgIHJlbmRlcj17XG4gICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgdG89e3RhcmdldCA9PT0gXCIvXCIgPyBcIi9cIiA6IFwiLyRcIn1cbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9e3RhcmdldCAmJiB0YXJnZXQgIT09IFwiL1wiID8gc3BsYXRGb3IodGFyZ2V0KSA6IHt9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxEeW5hbWljSWNvbiBuYW1lPXtzZWN0aW9uSWNvbihzKX0gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPntzLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1NpZGViYXJNZW51QnV0dG9uPlxuICAgICAgICAgICAgICA8L1NpZGViYXJNZW51SXRlbT5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9TaWRlYmFyTWVudT5cbiAgICAgIDwvU2lkZWJhckdyb3VwQ29udGVudD5cbiAgICA8L1NpZGViYXJHcm91cD5cbiAgKVxufVxuIl19
@@ -1,12 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import defaultLogo from "../assets/logo.svg";
3
- /** Renders the site logo, title, and description in the sidebar header */
4
- export function SiteTitle() {
5
- const logo = import.meta.env.CONFIG.logo ?? defaultLogo;
6
- return (_jsxs("div", { className: "flex items-end gap-2.5 text-sm", children: [
7
- _jsx("img", { src: logo, alt: import.meta.env.CONFIG.title, className: "size-6.5 mb-1.25" }), _jsxs("div", { className: "flex flex-col gap-0.5 leading-none", children: [
8
- _jsx("span", { className: "font-semibold", children: import.meta.env.CONFIG.title }), _jsx("span", { className: "text-xs opacity-80", children: import.meta.env.CONFIG.description })
9
- ] })
10
- ] }));
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2l0ZVRpdGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2l0ZVRpdGxlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxXQUFXLE1BQU0sb0JBQW9CLENBQUE7QUFFNUMsMEVBQTBFO0FBQzFFLE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLE1BQU0sSUFBSSxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQTtJQUN2RCxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsZ0NBQWdDO1lBQzdDLGNBQ0UsR0FBRyxFQUFFLElBQUksRUFDVCxHQUFHLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQ2pDLFNBQVMsRUFBQyxrQkFBa0IsR0FDNUIsRUFDRixlQUFLLFNBQVMsRUFBQyxvQ0FBb0M7b0JBQ2pELGVBQU0sU0FBUyxFQUFDLGVBQWUsWUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBUSxFQUNyRSxlQUFNLFNBQVMsRUFBQyxvQkFBb0IsWUFDakMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQzlCO29CQUNIO1lBQ0YsQ0FDUCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWZhdWx0TG9nbyBmcm9tIFwiLi4vYXNzZXRzL2xvZ28uc3ZnXCJcblxuLyoqIFJlbmRlcnMgdGhlIHNpdGUgbG9nbywgdGl0bGUsIGFuZCBkZXNjcmlwdGlvbiBpbiB0aGUgc2lkZWJhciBoZWFkZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBTaXRlVGl0bGUoKSB7XG4gIGNvbnN0IGxvZ28gPSBpbXBvcnQubWV0YS5lbnYuQ09ORklHLmxvZ28gPz8gZGVmYXVsdExvZ29cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtZW5kIGdhcC0yLjUgdGV4dC1zbVwiPlxuICAgICAgPGltZ1xuICAgICAgICBzcmM9e2xvZ299XG4gICAgICAgIGFsdD17aW1wb3J0Lm1ldGEuZW52LkNPTkZJRy50aXRsZX1cbiAgICAgICAgY2xhc3NOYW1lPVwic2l6ZS02LjUgbWItMS4yNVwiXG4gICAgICAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0wLjUgbGVhZGluZy1ub25lXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtc2VtaWJvbGRcIj57aW1wb3J0Lm1ldGEuZW52LkNPTkZJRy50aXRsZX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgb3BhY2l0eS04MFwiPlxuICAgICAgICAgIHtpbXBvcnQubWV0YS5lbnYuQ09ORklHLmRlc2NyaXB0aW9ufVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl19
@@ -1,54 +0,0 @@
1
- import { allArticles } from "content-collections";
2
- import { buildArticleTree, flattenArticleTree, groupArticleTree, } from "../helpers/article.js";
3
- import { matchSection, partitionBySection } from "../helpers/section.js";
4
- /**
5
- * Articles sorted by frontmatter `order`:
6
- * positive values first (ascending), then unordered, then negative values
7
- * (so `order: -1` lands at the very end, `-2` just before it, and so on).
8
- */
9
- export const sortedArticles = [...allArticles].sort((a, b) => orderKey(a.order) - orderKey(b.order));
10
- /** The article whose path is `/`, if any (rendered in place at the root) */
11
- export const homeArticle = sortedArticles.find(a => a.path === "/");
12
- /** Sidebar sections derived from the path tree, partitioned by `group` */
13
- export const articleGroups = groupArticleTree(buildArticleTree(sortedArticles), sortedArticles);
14
- /** Articles in depth-first order across all sections (matches sidebar walk) */
15
- export const flatArticles = articleGroups.flatMap(group => flattenArticleTree(group.nodes));
16
- /** The first article in sidebar order, used as the default landing page */
17
- export const firstArticle = sortedArticles.find(a => a.path === flatArticles[0]);
18
- function orderKey(order) {
19
- if (order === undefined)
20
- return Number.MAX_SAFE_INTEGER / 2;
21
- if (order < 0)
22
- return Number.MAX_SAFE_INTEGER + order;
23
- return order;
24
- }
25
- const configSections = import.meta.env.CONFIG.sections;
26
- /** Per-section article groups, keyed by section prefix */
27
- export const sectionArticleGroups = new Map();
28
- /** Per-section flat article lists, keyed by section prefix */
29
- export const sectionFlatArticles = new Map();
30
- /** Per-section first article path, keyed by section prefix */
31
- export const sectionFirstArticle = new Map();
32
- if (configSections?.length) {
33
- const sectionByPrefix = new Map(configSections.map(s => [s.prefix, s]));
34
- const buckets = partitionBySection(sortedArticles, configSections);
35
- for (const [key, bucket] of buckets) {
36
- const section = sectionByPrefix.get(key);
37
- const sorted = section?.type === "blog" || section?.type === "changelog"
38
- ? [...bucket].sort((a, b) => new Date(b.date ?? 0).getTime() - new Date(a.date ?? 0).getTime())
39
- : bucket;
40
- const tree = buildArticleTree(sorted);
41
- const groups = groupArticleTree(tree, sorted);
42
- const flat = groups.flatMap(g => flattenArticleTree(g.nodes));
43
- sectionArticleGroups.set(key, groups);
44
- sectionFlatArticles.set(key, flat);
45
- sectionFirstArticle.set(key, flat[0]);
46
- }
47
- }
48
- /** Find which config section an article path belongs to */
49
- export function currentSection(path) {
50
- if (!configSections?.length)
51
- return undefined;
52
- return matchSection(path, configSections);
53
- }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb250ZW50L2FydGljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRWpELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGdCQUFnQixHQUNqQixNQUFNLHVCQUF1QixDQUFBO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUV4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ2pELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUNoRCxDQUFBO0FBRUQsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQTtBQUVuRSwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUMzQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsRUFDaEMsY0FBYyxDQUNmLENBQUE7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDeEQsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUNoQyxDQUFBO0FBRUQsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUVoRixTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUE7SUFDM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtJQUNyRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQTtBQUV0RCwwREFBMEQ7QUFDMUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUE7QUFFckUsOERBQThEO0FBQzlELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUFvQixDQUFBO0FBRTlELDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQTtBQUV4RSxJQUFJLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMzQixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2RSxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDbEUsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEMsTUFBTSxNQUFNLEdBQ1YsT0FBTyxFQUFFLElBQUksS0FBSyxNQUFNLElBQUksT0FBTyxFQUFFLElBQUksS0FBSyxXQUFXO1lBQ3ZELENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUNkLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ1AsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUNwRTtZQUNILENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDWixNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzdELG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDckMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNsQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7QUFDSCxDQUFDO0FBRUQsMkRBQTJEO0FBQzNELE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWTtJQUN6QyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU07UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUM3QyxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUE7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFsbEFydGljbGVzIH0gZnJvbSBcImNvbnRlbnQtY29sbGVjdGlvbnNcIlxuaW1wb3J0IHR5cGUgeyBBcnRpY2xlR3JvdXAgfSBmcm9tIFwiLi4vbW9kZWxzL2FydGljbGUudHNcIlxuaW1wb3J0IHtcbiAgYnVpbGRBcnRpY2xlVHJlZSxcbiAgZmxhdHRlbkFydGljbGVUcmVlLFxuICBncm91cEFydGljbGVUcmVlLFxufSBmcm9tIFwiLi4vaGVscGVycy9hcnRpY2xlLnRzXCJcbmltcG9ydCB7IG1hdGNoU2VjdGlvbiwgcGFydGl0aW9uQnlTZWN0aW9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvc2VjdGlvbi50c1wiXG5cbi8qKlxuICogQXJ0aWNsZXMgc29ydGVkIGJ5IGZyb250bWF0dGVyIGBvcmRlcmA6XG4gKiBwb3NpdGl2ZSB2YWx1ZXMgZmlyc3QgKGFzY2VuZGluZyksIHRoZW4gdW5vcmRlcmVkLCB0aGVuIG5lZ2F0aXZlIHZhbHVlc1xuICogKHNvIGBvcmRlcjogLTFgIGxhbmRzIGF0IHRoZSB2ZXJ5IGVuZCwgYC0yYCBqdXN0IGJlZm9yZSBpdCwgYW5kIHNvIG9uKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRlZEFydGljbGVzID0gWy4uLmFsbEFydGljbGVzXS5zb3J0KFxuICAoYSwgYikgPT4gb3JkZXJLZXkoYS5vcmRlcikgLSBvcmRlcktleShiLm9yZGVyKSxcbilcblxuLyoqIFRoZSBhcnRpY2xlIHdob3NlIHBhdGggaXMgYC9gLCBpZiBhbnkgKHJlbmRlcmVkIGluIHBsYWNlIGF0IHRoZSByb290KSAqL1xuZXhwb3J0IGNvbnN0IGhvbWVBcnRpY2xlID0gc29ydGVkQXJ0aWNsZXMuZmluZChhID0+IGEucGF0aCA9PT0gXCIvXCIpXG5cbi8qKiBTaWRlYmFyIHNlY3Rpb25zIGRlcml2ZWQgZnJvbSB0aGUgcGF0aCB0cmVlLCBwYXJ0aXRpb25lZCBieSBgZ3JvdXBgICovXG5leHBvcnQgY29uc3QgYXJ0aWNsZUdyb3VwcyA9IGdyb3VwQXJ0aWNsZVRyZWUoXG4gIGJ1aWxkQXJ0aWNsZVRyZWUoc29ydGVkQXJ0aWNsZXMpLFxuICBzb3J0ZWRBcnRpY2xlcyxcbilcblxuLyoqIEFydGljbGVzIGluIGRlcHRoLWZpcnN0IG9yZGVyIGFjcm9zcyBhbGwgc2VjdGlvbnMgKG1hdGNoZXMgc2lkZWJhciB3YWxrKSAqL1xuZXhwb3J0IGNvbnN0IGZsYXRBcnRpY2xlcyA9IGFydGljbGVHcm91cHMuZmxhdE1hcChncm91cCA9PlxuICBmbGF0dGVuQXJ0aWNsZVRyZWUoZ3JvdXAubm9kZXMpLFxuKVxuXG4vKiogVGhlIGZpcnN0IGFydGljbGUgaW4gc2lkZWJhciBvcmRlciwgdXNlZCBhcyB0aGUgZGVmYXVsdCBsYW5kaW5nIHBhZ2UgKi9cbmV4cG9ydCBjb25zdCBmaXJzdEFydGljbGUgPSBzb3J0ZWRBcnRpY2xlcy5maW5kKGEgPT4gYS5wYXRoID09PSBmbGF0QXJ0aWNsZXNbMF0pXG5cbmZ1bmN0aW9uIG9yZGVyS2V5KG9yZGVyPzogbnVtYmVyKSB7XG4gIGlmIChvcmRlciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgLyAyXG4gIGlmIChvcmRlciA8IDApIHJldHVybiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiArIG9yZGVyXG4gIHJldHVybiBvcmRlclxufVxuXG5jb25zdCBjb25maWdTZWN0aW9ucyA9IGltcG9ydC5tZXRhLmVudi5DT05GSUcuc2VjdGlvbnNcblxuLyoqIFBlci1zZWN0aW9uIGFydGljbGUgZ3JvdXBzLCBrZXllZCBieSBzZWN0aW9uIHByZWZpeCAqL1xuZXhwb3J0IGNvbnN0IHNlY3Rpb25BcnRpY2xlR3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIEFydGljbGVHcm91cFtdPigpXG5cbi8qKiBQZXItc2VjdGlvbiBmbGF0IGFydGljbGUgbGlzdHMsIGtleWVkIGJ5IHNlY3Rpb24gcHJlZml4ICovXG5leHBvcnQgY29uc3Qgc2VjdGlvbkZsYXRBcnRpY2xlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKVxuXG4vKiogUGVyLXNlY3Rpb24gZmlyc3QgYXJ0aWNsZSBwYXRoLCBrZXllZCBieSBzZWN0aW9uIHByZWZpeCAqL1xuZXhwb3J0IGNvbnN0IHNlY3Rpb25GaXJzdEFydGljbGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPigpXG5cbmlmIChjb25maWdTZWN0aW9ucz8ubGVuZ3RoKSB7XG4gIGNvbnN0IHNlY3Rpb25CeVByZWZpeCA9IG5ldyBNYXAoY29uZmlnU2VjdGlvbnMubWFwKHMgPT4gW3MucHJlZml4LCBzXSkpXG4gIGNvbnN0IGJ1Y2tldHMgPSBwYXJ0aXRpb25CeVNlY3Rpb24oc29ydGVkQXJ0aWNsZXMsIGNvbmZpZ1NlY3Rpb25zKVxuICBmb3IgKGNvbnN0IFtrZXksIGJ1Y2tldF0gb2YgYnVja2V0cykge1xuICAgIGNvbnN0IHNlY3Rpb24gPSBzZWN0aW9uQnlQcmVmaXguZ2V0KGtleSlcbiAgICBjb25zdCBzb3J0ZWQgPVxuICAgICAgc2VjdGlvbj8udHlwZSA9PT0gXCJibG9nXCIgfHwgc2VjdGlvbj8udHlwZSA9PT0gXCJjaGFuZ2Vsb2dcIlxuICAgICAgICA/IFsuLi5idWNrZXRdLnNvcnQoXG4gICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgbmV3IERhdGUoYi5kYXRlID8/IDApLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEuZGF0ZSA/PyAwKS5nZXRUaW1lKCksXG4gICAgICAgICAgKVxuICAgICAgICA6IGJ1Y2tldFxuICAgIGNvbnN0IHRyZWUgPSBidWlsZEFydGljbGVUcmVlKHNvcnRlZClcbiAgICBjb25zdCBncm91cHMgPSBncm91cEFydGljbGVUcmVlKHRyZWUsIHNvcnRlZClcbiAgICBjb25zdCBmbGF0ID0gZ3JvdXBzLmZsYXRNYXAoZyA9PiBmbGF0dGVuQXJ0aWNsZVRyZWUoZy5ub2RlcykpXG4gICAgc2VjdGlvbkFydGljbGVHcm91cHMuc2V0KGtleSwgZ3JvdXBzKVxuICAgIHNlY3Rpb25GbGF0QXJ0aWNsZXMuc2V0KGtleSwgZmxhdClcbiAgICBzZWN0aW9uRmlyc3RBcnRpY2xlLnNldChrZXksIGZsYXRbMF0pXG4gIH1cbn1cblxuLyoqIEZpbmQgd2hpY2ggY29uZmlnIHNlY3Rpb24gYW4gYXJ0aWNsZSBwYXRoIGJlbG9uZ3MgdG8gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50U2VjdGlvbihwYXRoOiBzdHJpbmcpIHtcbiAgaWYgKCFjb25maWdTZWN0aW9ucz8ubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiBtYXRjaFNlY3Rpb24ocGF0aCwgY29uZmlnU2VjdGlvbnMpXG59XG4iXX0=
@@ -1,30 +0,0 @@
1
- import { sectionFlatArticles, sortedArticles } from "./article.js";
2
- const configSections = import.meta.env.CONFIG.sections;
3
- /** Per-section tag → article paths mapping. Articles sorted by date descending. */
4
- export const sectionTags = new Map();
5
- if (configSections?.length) {
6
- for (const section of configSections) {
7
- if (section.type !== "blog")
8
- continue;
9
- const flat = sectionFlatArticles.get(section.prefix) ?? [];
10
- const tagMap = new Map();
11
- for (const path of flat) {
12
- const article = sortedArticles.find(a => a.path === path);
13
- if (!article?.tags)
14
- continue;
15
- for (const tag of article.tags) {
16
- const list = tagMap.get(tag);
17
- if (list) {
18
- list.push(path);
19
- }
20
- else {
21
- tagMap.set(tag, [path]);
22
- }
23
- }
24
- }
25
- if (tagMap.size > 0) {
26
- sectionTags.set(section.prefix, tagMap);
27
- }
28
- }
29
- }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbnRlbnQvdGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFbEUsTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUE7QUFFdEQsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQTtBQUVuRSxJQUFJLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMzQixLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNO1lBQUUsU0FBUTtRQUNyQyxNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQTtRQUMxQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFBO1lBQ3pELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSTtnQkFBRSxTQUFRO1lBQzVCLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUM1QixJQUFJLElBQUksRUFBRSxDQUFDO29CQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2pCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQixXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDekMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2VjdGlvbkZsYXRBcnRpY2xlcywgc29ydGVkQXJ0aWNsZXMgfSBmcm9tIFwiLi9hcnRpY2xlLnRzXCJcblxuY29uc3QgY29uZmlnU2VjdGlvbnMgPSBpbXBvcnQubWV0YS5lbnYuQ09ORklHLnNlY3Rpb25zXG5cbi8qKiBQZXItc2VjdGlvbiB0YWcg4oaSIGFydGljbGUgcGF0aHMgbWFwcGluZy4gQXJ0aWNsZXMgc29ydGVkIGJ5IGRhdGUgZGVzY2VuZGluZy4gKi9cbmV4cG9ydCBjb25zdCBzZWN0aW9uVGFncyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmdbXT4+KClcblxuaWYgKGNvbmZpZ1NlY3Rpb25zPy5sZW5ndGgpIHtcbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIGNvbmZpZ1NlY3Rpb25zKSB7XG4gICAgaWYgKHNlY3Rpb24udHlwZSAhPT0gXCJibG9nXCIpIGNvbnRpbnVlXG4gICAgY29uc3QgZmxhdCA9IHNlY3Rpb25GbGF0QXJ0aWNsZXMuZ2V0KHNlY3Rpb24ucHJlZml4KSA/PyBbXVxuICAgIGNvbnN0IHRhZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKVxuICAgIGZvciAoY29uc3QgcGF0aCBvZiBmbGF0KSB7XG4gICAgICBjb25zdCBhcnRpY2xlID0gc29ydGVkQXJ0aWNsZXMuZmluZChhID0+IGEucGF0aCA9PT0gcGF0aClcbiAgICAgIGlmICghYXJ0aWNsZT8udGFncykgY29udGludWVcbiAgICAgIGZvciAoY29uc3QgdGFnIG9mIGFydGljbGUudGFncykge1xuICAgICAgICBjb25zdCBsaXN0ID0gdGFnTWFwLmdldCh0YWcpXG4gICAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgICAgbGlzdC5wdXNoKHBhdGgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFnTWFwLnNldCh0YWcsIFtwYXRoXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGFnTWFwLnNpemUgPiAwKSB7XG4gICAgICBzZWN0aW9uVGFncy5zZXQoc2VjdGlvbi5wcmVmaXgsIHRhZ01hcClcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,218 +0,0 @@
1
- import { execSync } from "node:child_process";
2
- import { existsSync } from "node:fs";
3
- import { basename, relative, resolve } from "node:path";
4
- import { DEFAULT_EXCLUDES } from "./settings.js";
5
- import { defineCollection, defineConfig } from "@content-collections/core";
6
- import { compileMDX } from "@content-collections/mdx";
7
- import rehypeShiki from "@shikijs/rehype";
8
- import { transformerTwoslash } from "@shikijs/twoslash";
9
- import rehypeKatex from "rehype-katex";
10
- import rehypeSlug from "rehype-slug";
11
- import remarkDefinitionList from "remark-definition-list";
12
- import remarkDirective from "remark-directive";
13
- import remarkGemoji from "remark-gemoji";
14
- import remarkGfm from "remark-gfm";
15
- import remarkMath from "remark-math";
16
- import { loadConfig } from "./actions/config/load.js";
17
- import { buildChangelog, cacheIncludeGlob } from "./actions/changelog/build.js";
18
- import { Article } from "./models/article.js";
19
- import { pickDefaultIcon } from "./helpers/article-icon.js";
20
- import slugify from "@sindresorhus/slugify";
21
- import remarkCustomHeadingId from "./plugins/remark-custom-heading-id.js";
22
- import { remarkCallout } from "./plugins/remark-callout.js";
23
- import { remarkCard } from "./plugins/remark-card.js";
24
- import { remarkColumns } from "./plugins/remark-columns.js";
25
- import { remarkTab } from "./plugins/remark-tab.js";
26
- import { remarkBadge } from "./plugins/remark-badge.js";
27
- import { remarkButton } from "./plugins/remark-button.js";
28
- import { remarkAbbr } from "./plugins/remark-abbr.js";
29
- import { remarkDeflist } from "./plugins/remark-deflist.js";
30
- import { remarkDetails } from "./plugins/remark-details.js";
31
- import { remarkFiletree } from "./plugins/remark-filetree.js";
32
- import { remarkIcon } from "./plugins/remark-icon.js";
33
- import { remarkCodeTabs } from "./plugins/remark-code-tabs.js";
34
- import { remarkGithubCallout } from "./plugins/remark-github-callout.js";
35
- import { remarkImage } from "./plugins/remark-image.js";
36
- import { remarkMedia } from "./plugins/remark-media.js";
37
- import { remarkAnsi } from "./plugins/remark-ansi.js";
38
- import { remarkMermaid } from "./plugins/remark-mermaid.js";
39
- import { remarkToc } from "./plugins/remark-toc.js";
40
- import { remarkNpm } from "./plugins/remark-npm.js";
41
- import { remarkSteps } from "./plugins/remark-steps.js";
42
- import { remarkPassthroughDirective } from "./plugins/remark-passthrough-directive.js";
43
- import { transformerLineHighlight, transformerNotations, } from "./plugins/shiki-line-highlight.js";
44
- import { rehypeInlineCode } from "./plugins/rehype-inline-code.js";
45
- import { rehypeTaskListA11y } from "./plugins/rehype-task-list-a11y.js";
46
- import { transformerIcon } from "./plugins/shiki-icon.js";
47
- import { resolveAssetPath } from "./helpers/resolve-asset-path.js";
48
- import { resolveIncludes } from "./helpers/resolve-includes.js";
49
- import { extractSearchText } from "./helpers/search-text.js";
50
- import { extractToc } from "./helpers/toc.js";
51
- const config = await loadConfig();
52
- const changelogSections = config.sections?.filter(s => s.type === "changelog") ?? [];
53
- for (const section of changelogSections) {
54
- await buildChangelog(section, config);
55
- }
56
- const configInclude = Array.isArray(config.include)
57
- ? config.include
58
- : [config.include];
59
- const include = changelogSections.length
60
- ? [...configInclude, cacheIncludeGlob()]
61
- : configInclude;
62
- const userExclude = config.exclude
63
- ? Array.isArray(config.exclude)
64
- ? config.exclude
65
- : [config.exclude]
66
- : [];
67
- // When the consumer doesn't have a .gitignore, fall back to a sensible
68
- // floor so `**/*.md` doesn't sweep up every README.md under node_modules,
69
- // build outputs, etc. With a .gitignore present we trust the user.
70
- const hasGitignore = existsSync(resolve(config.root, ".gitignore"));
71
- const defaultExclude = hasGitignore ? [] : [...DEFAULT_EXCLUDES];
72
- const exclude = [...defaultExclude, ...userExclude];
73
- // content-collections compiles this file to .content-collections/cache/;
74
- // going up 2 levels reconstructs the baseDirectory it uses for path resolution
75
- const baseDir = resolve(import.meta.dirname, "../..");
76
- const directory = relative(baseDir, config.root) || ".";
77
- function toPath(filePath) {
78
- const name = basename(filePath).replace(/\.\w+$/, "");
79
- return slugify(name);
80
- }
81
- function getLastUpdated(filePath) {
82
- try {
83
- const timestamp = execSync(`git log -1 --format=%cI -- "${filePath}"`, {
84
- cwd: config.root,
85
- encoding: "utf-8",
86
- }).trim();
87
- return timestamp || undefined;
88
- }
89
- catch {
90
- return undefined;
91
- }
92
- }
93
- function stripLeadingH1(content) {
94
- return content.replace(/^[ \t]*#\s+[^\n]*\n+/, "");
95
- }
96
- function extractTitle(content, path) {
97
- const match = /^#\s+(.+)$/m.exec(content);
98
- if (match)
99
- return match[1];
100
- return (path
101
- .split("/")
102
- .pop()
103
- ?.replace(/\.\w+$/, "") ?? path);
104
- }
105
- const articles = defineCollection({
106
- name: "articles",
107
- directory,
108
- include,
109
- exclude,
110
- schema: Article,
111
- transform: async (document, context) => {
112
- const patch = config.patches?.find(p => p.file === document._meta.filePath);
113
- const doc = patch ? { ...document, ...patch.article } : document;
114
- const filePath = resolve(config.root, doc._meta.filePath);
115
- const content = resolveIncludes(doc.content, filePath);
116
- const title = doc.title ?? extractTitle(content, doc._meta.path);
117
- const icon = doc.icon ?? pickDefaultIcon(doc._meta.path);
118
- const path = doc.path ?? toPath(doc._meta.filePath);
119
- // The article's h1 is rendered from `title` by the layout, so strip any
120
- // leading h1 in the body to avoid two h1s side-by-side (especially when
121
- // a content patch overrides the title to something different from the
122
- // body's own heading).
123
- const bodyContent = stripLeadingH1(content);
124
- const mdx = await compileMDX(context, { ...doc, content: bodyContent }, {
125
- remarkPlugins: [
126
- remarkGfm,
127
- remarkGemoji,
128
- remarkDefinitionList,
129
- remarkDeflist,
130
- remarkMath,
131
- remarkDirective,
132
- remarkCallout,
133
- remarkCard,
134
- remarkColumns,
135
- remarkTab,
136
- remarkDetails,
137
- remarkFiletree,
138
- remarkIcon,
139
- remarkBadge,
140
- remarkButton,
141
- remarkAbbr,
142
- remarkGithubCallout,
143
- [
144
- remarkImage,
145
- {
146
- filePath: resolve(config.root, doc._meta.filePath),
147
- root: config.root,
148
- },
149
- ],
150
- remarkAnsi,
151
- remarkMermaid,
152
- remarkMedia,
153
- remarkToc,
154
- remarkNpm,
155
- remarkCodeTabs,
156
- remarkSteps,
157
- remarkCustomHeadingId,
158
- // Run last: anything still typed as a directive after every handler
159
- // above is unintended (e.g. `3.2:1`, `port:8080`) — passthrough as
160
- // plain text so it doesn't render as an empty span/div.
161
- remarkPassthroughDirective,
162
- ],
163
- rehypePlugins: [
164
- [
165
- rehypeShiki,
166
- {
167
- themes: {
168
- light: config.codeThemeLight,
169
- dark: config.codeThemeDark,
170
- },
171
- // Darken catppuccin-latte's green (the colour used for strings and
172
- // some comments) — the theme default #40A02B lands at 3.2:1 on the
173
- // code-block background, below the WCAG AA 4.5:1 threshold.
174
- colorReplacements: {
175
- "catppuccin-latte": {
176
- "#40a02b": "#2a7e16",
177
- },
178
- },
179
- transformers: [
180
- transformerTwoslash({ explicitTrigger: true }),
181
- transformerIcon(),
182
- transformerNotations(),
183
- transformerLineHighlight(),
184
- ],
185
- parseMetaString: (meta) => ({ "data-meta": meta }),
186
- },
187
- ],
188
- rehypeInlineCode,
189
- rehypeSlug,
190
- rehypeKatex,
191
- rehypeTaskListA11y,
192
- ],
193
- });
194
- const tocItems = extractToc(content);
195
- const searchText = extractSearchText(content);
196
- const lastUpdated = getLastUpdated(doc._meta.filePath);
197
- const image = doc.image
198
- ? resolveAssetPath(doc.image, filePath, config.root)
199
- : undefined;
200
- return {
201
- ...doc,
202
- file: doc._meta.filePath,
203
- lastUpdated,
204
- image,
205
- title,
206
- icon,
207
- path,
208
- tocItems,
209
- searchText,
210
- mdx,
211
- };
212
- },
213
- });
214
- export default defineConfig({
215
- // @ts-expect-error tsgo picks wrong overload when rehype-slug augments unified types
216
- content: [articles],
217
- });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1jb2xsZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9jb250ZW50LWNvbGxlY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNyRCxPQUFPLFdBQVcsTUFBTSxpQkFBaUIsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN2RCxPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFBO0FBQ3BDLE9BQU8sb0JBQW9CLE1BQU0sd0JBQXdCLENBQUE7QUFDekQsT0FBTyxlQUFlLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUE7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzNELE9BQU8sT0FBTyxNQUFNLHVCQUF1QixDQUFBO0FBQzNDLE9BQU8scUJBQXFCLE1BQU0sdUNBQXVDLENBQUE7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFBO0FBQ3RGLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsb0JBQW9CLEdBQ3JCLE1BQU0sbUNBQW1DLENBQUE7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFFN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQTtBQUVqQyxNQUFNLGlCQUFpQixHQUNyQixNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQzVELEtBQUssTUFBTSxPQUFPLElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUN4QyxNQUFNLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDdkMsQ0FBQztBQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNqRCxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU87SUFDaEIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3BCLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLE1BQU07SUFDdEMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztJQUN4QyxDQUFDLENBQUMsYUFBYSxDQUFBO0FBRWpCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPO0lBQ2hDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQ2hCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDcEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUNOLHVFQUF1RTtBQUN2RSwwRUFBMEU7QUFDMUUsbUVBQW1FO0FBQ25FLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFBO0FBQ25FLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQTtBQUNoRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsY0FBYyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUE7QUFFbkQseUVBQXlFO0FBQ3pFLCtFQUErRTtBQUMvRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ3JELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQTtBQUV2RCxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNyRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN0QixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsUUFBZ0I7SUFDdEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLCtCQUErQixRQUFRLEdBQUcsRUFBRTtZQUNyRSxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDaEIsUUFBUSxFQUFFLE9BQU87U0FDbEIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ1QsT0FBTyxTQUFTLElBQUksU0FBUyxDQUFBO0lBQy9CLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE9BQWU7SUFDckMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxPQUFlLEVBQUUsSUFBWTtJQUNqRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3pDLElBQUksS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBRSxDQUFBO0lBQzNCLE9BQU8sQ0FDTCxJQUFJO1NBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNWLEdBQUcsRUFBRTtRQUNOLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQ2xDLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7SUFDaEMsSUFBSSxFQUFFLFVBQVU7SUFDaEIsU0FBUztJQUNULE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTSxFQUFFLE9BQU87SUFDZixTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMzRSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUNoRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3pELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3RELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2hFLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNuRCx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHNFQUFzRTtRQUN0RSx1QkFBdUI7UUFDdkIsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLE1BQU0sR0FBRyxHQUFHLE1BQU0sVUFBVSxDQUMxQixPQUFPLEVBQ1AsRUFBRSxHQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQ2hDO1lBQ0UsYUFBYSxFQUFFO2dCQUNiLFNBQVM7Z0JBQ1QsWUFBWTtnQkFDWixvQkFBb0I7Z0JBQ3BCLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixlQUFlO2dCQUNmLGFBQWE7Z0JBQ2IsVUFBVTtnQkFDVixhQUFhO2dCQUNiLFNBQVM7Z0JBQ1QsYUFBYTtnQkFDYixjQUFjO2dCQUNkLFVBQVU7Z0JBQ1YsV0FBVztnQkFDWCxZQUFZO2dCQUNaLFVBQVU7Z0JBQ1YsbUJBQW1CO2dCQUNuQjtvQkFDRSxXQUFXO29CQUNYO3dCQUNFLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzt3QkFDbEQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO3FCQUNsQjtpQkFDRjtnQkFDRCxVQUFVO2dCQUNWLGFBQWE7Z0JBQ2IsV0FBVztnQkFDWCxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsY0FBYztnQkFDZCxXQUFXO2dCQUNYLHFCQUFxQjtnQkFDckIsb0VBQW9FO2dCQUNwRSxtRUFBbUU7Z0JBQ25FLHdEQUF3RDtnQkFDeEQsMEJBQTBCO2FBQzNCO1lBQ0QsYUFBYSxFQUFFO2dCQUNiO29CQUNFLFdBQVc7b0JBQ1g7d0JBQ0UsTUFBTSxFQUFFOzRCQUNOLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYzs0QkFDNUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxhQUFhO3lCQUMzQjt3QkFDRCxtRUFBbUU7d0JBQ25FLG1FQUFtRTt3QkFDbkUsNERBQTREO3dCQUM1RCxpQkFBaUIsRUFBRTs0QkFDakIsa0JBQWtCLEVBQUU7Z0NBQ2xCLFNBQVMsRUFBRSxTQUFTOzZCQUNyQjt5QkFDRjt3QkFDRCxZQUFZLEVBQUU7NEJBQ1osbUJBQW1CLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUM7NEJBQzlDLGVBQWUsRUFBRTs0QkFDakIsb0JBQW9CLEVBQUU7NEJBQ3RCLHdCQUF3QixFQUFFO3lCQUMzQjt3QkFDRCxlQUFlLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7cUJBQzNEO2lCQUNGO2dCQUNELGdCQUFnQjtnQkFDaEIsVUFBVTtnQkFDVixXQUFXO2dCQUNYLGtCQUFrQjthQUNuQjtTQUNGLENBQ0YsQ0FBQTtRQUNELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM3QyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN0RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSztZQUNyQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFBO1FBQ2IsT0FBTztZQUNMLEdBQUcsR0FBRztZQUNOLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVE7WUFDeEIsV0FBVztZQUNYLEtBQUs7WUFDTCxLQUFLO1lBQ0wsSUFBSTtZQUNKLElBQUk7WUFDSixRQUFRO1lBQ1IsVUFBVTtZQUNWLEdBQUc7U0FDSixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQTtBQUVGLGVBQWUsWUFBWSxDQUFDO0lBQzFCLHFGQUFxRjtJQUNyRixPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDcEIsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgeyBiYXNlbmFtZSwgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IERFRkFVTFRfRVhDTFVERVMgfSBmcm9tIFwiLi9zZXR0aW5ncy50c1wiXG5pbXBvcnQgeyBkZWZpbmVDb2xsZWN0aW9uLCBkZWZpbmVDb25maWcgfSBmcm9tIFwiQGNvbnRlbnQtY29sbGVjdGlvbnMvY29yZVwiXG5pbXBvcnQgeyBjb21waWxlTURYIH0gZnJvbSBcIkBjb250ZW50LWNvbGxlY3Rpb25zL21keFwiXG5pbXBvcnQgcmVoeXBlU2hpa2kgZnJvbSBcIkBzaGlraWpzL3JlaHlwZVwiXG5pbXBvcnQgeyB0cmFuc2Zvcm1lclR3b3NsYXNoIH0gZnJvbSBcIkBzaGlraWpzL3R3b3NsYXNoXCJcbmltcG9ydCByZWh5cGVLYXRleCBmcm9tIFwicmVoeXBlLWthdGV4XCJcbmltcG9ydCByZWh5cGVTbHVnIGZyb20gXCJyZWh5cGUtc2x1Z1wiXG5pbXBvcnQgcmVtYXJrRGVmaW5pdGlvbkxpc3QgZnJvbSBcInJlbWFyay1kZWZpbml0aW9uLWxpc3RcIlxuaW1wb3J0IHJlbWFya0RpcmVjdGl2ZSBmcm9tIFwicmVtYXJrLWRpcmVjdGl2ZVwiXG5pbXBvcnQgcmVtYXJrR2Vtb2ppIGZyb20gXCJyZW1hcmstZ2Vtb2ppXCJcbmltcG9ydCByZW1hcmtHZm0gZnJvbSBcInJlbWFyay1nZm1cIlxuaW1wb3J0IHJlbWFya01hdGggZnJvbSBcInJlbWFyay1tYXRoXCJcbmltcG9ydCB7IGxvYWRDb25maWcgfSBmcm9tIFwiLi9hY3Rpb25zL2NvbmZpZy9sb2FkLnRzXCJcbmltcG9ydCB7IGJ1aWxkQ2hhbmdlbG9nLCBjYWNoZUluY2x1ZGVHbG9iIH0gZnJvbSBcIi4vYWN0aW9ucy9jaGFuZ2Vsb2cvYnVpbGQudHNcIlxuaW1wb3J0IHsgQXJ0aWNsZSB9IGZyb20gXCIuL21vZGVscy9hcnRpY2xlLnRzXCJcbmltcG9ydCB7IHBpY2tEZWZhdWx0SWNvbiB9IGZyb20gXCIuL2hlbHBlcnMvYXJ0aWNsZS1pY29uLnRzXCJcbmltcG9ydCBzbHVnaWZ5IGZyb20gXCJAc2luZHJlc29yaHVzL3NsdWdpZnlcIlxuaW1wb3J0IHJlbWFya0N1c3RvbUhlYWRpbmdJZCBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1jdXN0b20taGVhZGluZy1pZC50c1wiXG5pbXBvcnQgeyByZW1hcmtDYWxsb3V0IH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstY2FsbG91dC50c1wiXG5pbXBvcnQgeyByZW1hcmtDYXJkIH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstY2FyZC50c1wiXG5pbXBvcnQgeyByZW1hcmtDb2x1bW5zIH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstY29sdW1ucy50c1wiXG5pbXBvcnQgeyByZW1hcmtUYWIgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay10YWIudHNcIlxuaW1wb3J0IHsgcmVtYXJrQmFkZ2UgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1iYWRnZS50c1wiXG5pbXBvcnQgeyByZW1hcmtCdXR0b24gfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1idXR0b24udHNcIlxuaW1wb3J0IHsgcmVtYXJrQWJiciB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLWFiYnIudHNcIlxuaW1wb3J0IHsgcmVtYXJrRGVmbGlzdCB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLWRlZmxpc3QudHNcIlxuaW1wb3J0IHsgcmVtYXJrRGV0YWlscyB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLWRldGFpbHMudHNcIlxuaW1wb3J0IHsgcmVtYXJrRmlsZXRyZWUgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1maWxldHJlZS50c1wiXG5pbXBvcnQgeyByZW1hcmtJY29uIH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstaWNvbi50c1wiXG5pbXBvcnQgeyByZW1hcmtDb2RlVGFicyB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLWNvZGUtdGFicy50c1wiXG5pbXBvcnQgeyByZW1hcmtHaXRodWJDYWxsb3V0IH0gZnJvbSBcIi4vcGx1Z2lucy9yZW1hcmstZ2l0aHViLWNhbGxvdXQudHNcIlxuaW1wb3J0IHsgcmVtYXJrSW1hZ2UgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1pbWFnZS50c1wiXG5pbXBvcnQgeyByZW1hcmtNZWRpYSB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLW1lZGlhLnRzXCJcbmltcG9ydCB7IHJlbWFya0Fuc2kgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1hbnNpLnRzXCJcbmltcG9ydCB7IHJlbWFya01lcm1haWQgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1tZXJtYWlkLnRzXCJcbmltcG9ydCB7IHJlbWFya1RvYyB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLXRvYy50c1wiXG5pbXBvcnQgeyByZW1hcmtOcG0gfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1ucG0udHNcIlxuaW1wb3J0IHsgcmVtYXJrU3RlcHMgfSBmcm9tIFwiLi9wbHVnaW5zL3JlbWFyay1zdGVwcy50c1wiXG5pbXBvcnQgeyByZW1hcmtQYXNzdGhyb3VnaERpcmVjdGl2ZSB9IGZyb20gXCIuL3BsdWdpbnMvcmVtYXJrLXBhc3N0aHJvdWdoLWRpcmVjdGl2ZS50c1wiXG5pbXBvcnQge1xuICB0cmFuc2Zvcm1lckxpbmVIaWdobGlnaHQsXG4gIHRyYW5zZm9ybWVyTm90YXRpb25zLFxufSBmcm9tIFwiLi9wbHVnaW5zL3NoaWtpLWxpbmUtaGlnaGxpZ2h0LnRzXCJcbmltcG9ydCB7IHJlaHlwZUlubGluZUNvZGUgfSBmcm9tIFwiLi9wbHVnaW5zL3JlaHlwZS1pbmxpbmUtY29kZS50c1wiXG5pbXBvcnQgeyByZWh5cGVUYXNrTGlzdEExMXkgfSBmcm9tIFwiLi9wbHVnaW5zL3JlaHlwZS10YXNrLWxpc3QtYTExeS50c1wiXG5pbXBvcnQgeyB0cmFuc2Zvcm1lckljb24gfSBmcm9tIFwiLi9wbHVnaW5zL3NoaWtpLWljb24udHNcIlxuaW1wb3J0IHsgcmVzb2x2ZUFzc2V0UGF0aCB9IGZyb20gXCIuL2hlbHBlcnMvcmVzb2x2ZS1hc3NldC1wYXRoLnRzXCJcbmltcG9ydCB7IHJlc29sdmVJbmNsdWRlcyB9IGZyb20gXCIuL2hlbHBlcnMvcmVzb2x2ZS1pbmNsdWRlcy50c1wiXG5pbXBvcnQgeyBleHRyYWN0U2VhcmNoVGV4dCB9IGZyb20gXCIuL2hlbHBlcnMvc2VhcmNoLXRleHQudHNcIlxuaW1wb3J0IHsgZXh0cmFjdFRvYyB9IGZyb20gXCIuL2hlbHBlcnMvdG9jLnRzXCJcblxuY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZygpXG5cbmNvbnN0IGNoYW5nZWxvZ1NlY3Rpb25zID1cbiAgY29uZmlnLnNlY3Rpb25zPy5maWx0ZXIocyA9PiBzLnR5cGUgPT09IFwiY2hhbmdlbG9nXCIpID8/IFtdXG5mb3IgKGNvbnN0IHNlY3Rpb24gb2YgY2hhbmdlbG9nU2VjdGlvbnMpIHtcbiAgYXdhaXQgYnVpbGRDaGFuZ2Vsb2coc2VjdGlvbiwgY29uZmlnKVxufVxuXG5jb25zdCBjb25maWdJbmNsdWRlID0gQXJyYXkuaXNBcnJheShjb25maWcuaW5jbHVkZSlcbiAgPyBjb25maWcuaW5jbHVkZVxuICA6IFtjb25maWcuaW5jbHVkZV1cbmNvbnN0IGluY2x1ZGUgPSBjaGFuZ2Vsb2dTZWN0aW9ucy5sZW5ndGhcbiAgPyBbLi4uY29uZmlnSW5jbHVkZSwgY2FjaGVJbmNsdWRlR2xvYigpXVxuICA6IGNvbmZpZ0luY2x1ZGVcblxuY29uc3QgdXNlckV4Y2x1ZGUgPSBjb25maWcuZXhjbHVkZVxuICA/IEFycmF5LmlzQXJyYXkoY29uZmlnLmV4Y2x1ZGUpXG4gICAgPyBjb25maWcuZXhjbHVkZVxuICAgIDogW2NvbmZpZy5leGNsdWRlXVxuICA6IFtdXG4vLyBXaGVuIHRoZSBjb25zdW1lciBkb2Vzbid0IGhhdmUgYSAuZ2l0aWdub3JlLCBmYWxsIGJhY2sgdG8gYSBzZW5zaWJsZVxuLy8gZmxvb3Igc28gYCoqLyoubWRgIGRvZXNuJ3Qgc3dlZXAgdXAgZXZlcnkgUkVBRE1FLm1kIHVuZGVyIG5vZGVfbW9kdWxlcyxcbi8vIGJ1aWxkIG91dHB1dHMsIGV0Yy4gV2l0aCBhIC5naXRpZ25vcmUgcHJlc2VudCB3ZSB0cnVzdCB0aGUgdXNlci5cbmNvbnN0IGhhc0dpdGlnbm9yZSA9IGV4aXN0c1N5bmMocmVzb2x2ZShjb25maWcucm9vdCwgXCIuZ2l0aWdub3JlXCIpKVxuY29uc3QgZGVmYXVsdEV4Y2x1ZGUgPSBoYXNHaXRpZ25vcmUgPyBbXSA6IFsuLi5ERUZBVUxUX0VYQ0xVREVTXVxuY29uc3QgZXhjbHVkZSA9IFsuLi5kZWZhdWx0RXhjbHVkZSwgLi4udXNlckV4Y2x1ZGVdXG5cbi8vIGNvbnRlbnQtY29sbGVjdGlvbnMgY29tcGlsZXMgdGhpcyBmaWxlIHRvIC5jb250ZW50LWNvbGxlY3Rpb25zL2NhY2hlLztcbi8vIGdvaW5nIHVwIDIgbGV2ZWxzIHJlY29uc3RydWN0cyB0aGUgYmFzZURpcmVjdG9yeSBpdCB1c2VzIGZvciBwYXRoIHJlc29sdXRpb25cbmNvbnN0IGJhc2VEaXIgPSByZXNvbHZlKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi4vLi5cIilcbmNvbnN0IGRpcmVjdG9yeSA9IHJlbGF0aXZlKGJhc2VEaXIsIGNvbmZpZy5yb290KSB8fCBcIi5cIlxuXG5mdW5jdGlvbiB0b1BhdGgoZmlsZVBhdGg6IHN0cmluZykge1xuICBjb25zdCBuYW1lID0gYmFzZW5hbWUoZmlsZVBhdGgpLnJlcGxhY2UoL1xcLlxcdyskLywgXCJcIilcbiAgcmV0dXJuIHNsdWdpZnkobmFtZSlcbn1cblxuZnVuY3Rpb24gZ2V0TGFzdFVwZGF0ZWQoZmlsZVBhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGV4ZWNTeW5jKGBnaXQgbG9nIC0xIC0tZm9ybWF0PSVjSSAtLSBcIiR7ZmlsZVBhdGh9XCJgLCB7XG4gICAgICBjd2Q6IGNvbmZpZy5yb290LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICB9KS50cmltKClcbiAgICByZXR1cm4gdGltZXN0YW1wIHx8IHVuZGVmaW5lZFxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaXBMZWFkaW5nSDEoY29udGVudDogc3RyaW5nKSB7XG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UoL15bIFxcdF0qI1xccytbXlxcbl0qXFxuKy8sIFwiXCIpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RUaXRsZShjb250ZW50OiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xuICBjb25zdCBtYXRjaCA9IC9eI1xccysoLispJC9tLmV4ZWMoY29udGVudClcbiAgaWYgKG1hdGNoKSByZXR1cm4gbWF0Y2hbMV0hXG4gIHJldHVybiAoXG4gICAgcGF0aFxuICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgLnBvcCgpXG4gICAgICA/LnJlcGxhY2UoL1xcLlxcdyskLywgXCJcIikgPz8gcGF0aFxuICApXG59XG5cbmNvbnN0IGFydGljbGVzID0gZGVmaW5lQ29sbGVjdGlvbih7XG4gIG5hbWU6IFwiYXJ0aWNsZXNcIixcbiAgZGlyZWN0b3J5LFxuICBpbmNsdWRlLFxuICBleGNsdWRlLFxuICBzY2hlbWE6IEFydGljbGUsXG4gIHRyYW5zZm9ybTogYXN5bmMgKGRvY3VtZW50LCBjb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcGF0Y2ggPSBjb25maWcucGF0Y2hlcz8uZmluZChwID0+IHAuZmlsZSA9PT0gZG9jdW1lbnQuX21ldGEuZmlsZVBhdGgpXG4gICAgY29uc3QgZG9jID0gcGF0Y2ggPyB7IC4uLmRvY3VtZW50LCAuLi5wYXRjaC5hcnRpY2xlIH0gOiBkb2N1bWVudFxuICAgIGNvbnN0IGZpbGVQYXRoID0gcmVzb2x2ZShjb25maWcucm9vdCwgZG9jLl9tZXRhLmZpbGVQYXRoKVxuICAgIGNvbnN0IGNvbnRlbnQgPSByZXNvbHZlSW5jbHVkZXMoZG9jLmNvbnRlbnQsIGZpbGVQYXRoKVxuICAgIGNvbnN0IHRpdGxlID0gZG9jLnRpdGxlID8/IGV4dHJhY3RUaXRsZShjb250ZW50LCBkb2MuX21ldGEucGF0aClcbiAgICBjb25zdCBpY29uID0gZG9jLmljb24gPz8gcGlja0RlZmF1bHRJY29uKGRvYy5fbWV0YS5wYXRoKVxuICAgIGNvbnN0IHBhdGggPSBkb2MucGF0aCA/PyB0b1BhdGgoZG9jLl9tZXRhLmZpbGVQYXRoKVxuICAgIC8vIFRoZSBhcnRpY2xlJ3MgaDEgaXMgcmVuZGVyZWQgZnJvbSBgdGl0bGVgIGJ5IHRoZSBsYXlvdXQsIHNvIHN0cmlwIGFueVxuICAgIC8vIGxlYWRpbmcgaDEgaW4gdGhlIGJvZHkgdG8gYXZvaWQgdHdvIGgxcyBzaWRlLWJ5LXNpZGUgKGVzcGVjaWFsbHkgd2hlblxuICAgIC8vIGEgY29udGVudCBwYXRjaCBvdmVycmlkZXMgdGhlIHRpdGxlIHRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSB0aGVcbiAgICAvLyBib2R5J3Mgb3duIGhlYWRpbmcpLlxuICAgIGNvbnN0IGJvZHlDb250ZW50ID0gc3RyaXBMZWFkaW5nSDEoY29udGVudClcbiAgICBjb25zdCBtZHggPSBhd2FpdCBjb21waWxlTURYKFxuICAgICAgY29udGV4dCxcbiAgICAgIHsgLi4uZG9jLCBjb250ZW50OiBib2R5Q29udGVudCB9LFxuICAgICAge1xuICAgICAgICByZW1hcmtQbHVnaW5zOiBbXG4gICAgICAgICAgcmVtYXJrR2ZtLFxuICAgICAgICAgIHJlbWFya0dlbW9qaSxcbiAgICAgICAgICByZW1hcmtEZWZpbml0aW9uTGlzdCxcbiAgICAgICAgICByZW1hcmtEZWZsaXN0LFxuICAgICAgICAgIHJlbWFya01hdGgsXG4gICAgICAgICAgcmVtYXJrRGlyZWN0aXZlLFxuICAgICAgICAgIHJlbWFya0NhbGxvdXQsXG4gICAgICAgICAgcmVtYXJrQ2FyZCxcbiAgICAgICAgICByZW1hcmtDb2x1bW5zLFxuICAgICAgICAgIHJlbWFya1RhYixcbiAgICAgICAgICByZW1hcmtEZXRhaWxzLFxuICAgICAgICAgIHJlbWFya0ZpbGV0cmVlLFxuICAgICAgICAgIHJlbWFya0ljb24sXG4gICAgICAgICAgcmVtYXJrQmFkZ2UsXG4gICAgICAgICAgcmVtYXJrQnV0dG9uLFxuICAgICAgICAgIHJlbWFya0FiYnIsXG4gICAgICAgICAgcmVtYXJrR2l0aHViQ2FsbG91dCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICByZW1hcmtJbWFnZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmlsZVBhdGg6IHJlc29sdmUoY29uZmlnLnJvb3QsIGRvYy5fbWV0YS5maWxlUGF0aCksXG4gICAgICAgICAgICAgIHJvb3Q6IGNvbmZpZy5yb290LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlbWFya0Fuc2ksXG4gICAgICAgICAgcmVtYXJrTWVybWFpZCxcbiAgICAgICAgICByZW1hcmtNZWRpYSxcbiAgICAgICAgICByZW1hcmtUb2MsXG4gICAgICAgICAgcmVtYXJrTnBtLFxuICAgICAgICAgIHJlbWFya0NvZGVUYWJzLFxuICAgICAgICAgIHJlbWFya1N0ZXBzLFxuICAgICAgICAgIHJlbWFya0N1c3RvbUhlYWRpbmdJZCxcbiAgICAgICAgICAvLyBSdW4gbGFzdDogYW55dGhpbmcgc3RpbGwgdHlwZWQgYXMgYSBkaXJlY3RpdmUgYWZ0ZXIgZXZlcnkgaGFuZGxlclxuICAgICAgICAgIC8vIGFib3ZlIGlzIHVuaW50ZW5kZWQgKGUuZy4gYDMuMjoxYCwgYHBvcnQ6ODA4MGApIOKAlCBwYXNzdGhyb3VnaCBhc1xuICAgICAgICAgIC8vIHBsYWluIHRleHQgc28gaXQgZG9lc24ndCByZW5kZXIgYXMgYW4gZW1wdHkgc3Bhbi9kaXYuXG4gICAgICAgICAgcmVtYXJrUGFzc3Rocm91Z2hEaXJlY3RpdmUsXG4gICAgICAgIF0sXG4gICAgICAgIHJlaHlwZVBsdWdpbnM6IFtcbiAgICAgICAgICBbXG4gICAgICAgICAgICByZWh5cGVTaGlraSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhlbWVzOiB7XG4gICAgICAgICAgICAgICAgbGlnaHQ6IGNvbmZpZy5jb2RlVGhlbWVMaWdodCxcbiAgICAgICAgICAgICAgICBkYXJrOiBjb25maWcuY29kZVRoZW1lRGFyayxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLy8gRGFya2VuIGNhdHBwdWNjaW4tbGF0dGUncyBncmVlbiAodGhlIGNvbG91ciB1c2VkIGZvciBzdHJpbmdzIGFuZFxuICAgICAgICAgICAgICAvLyBzb21lIGNvbW1lbnRzKSDigJQgdGhlIHRoZW1lIGRlZmF1bHQgIzQwQTAyQiBsYW5kcyBhdCAzLjI6MSBvbiB0aGVcbiAgICAgICAgICAgICAgLy8gY29kZS1ibG9jayBiYWNrZ3JvdW5kLCBiZWxvdyB0aGUgV0NBRyBBQSA0LjU6MSB0aHJlc2hvbGQuXG4gICAgICAgICAgICAgIGNvbG9yUmVwbGFjZW1lbnRzOiB7XG4gICAgICAgICAgICAgICAgXCJjYXRwcHVjY2luLWxhdHRlXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwiIzQwYTAyYlwiOiBcIiMyYTdlMTZcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lcnM6IFtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lclR3b3NsYXNoKHsgZXhwbGljaXRUcmlnZ2VyOiB0cnVlIH0pLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVySWNvbigpLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyTm90YXRpb25zKCksXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZXJMaW5lSGlnaGxpZ2h0KCksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHBhcnNlTWV0YVN0cmluZzogKG1ldGE6IHN0cmluZykgPT4gKHsgXCJkYXRhLW1ldGFcIjogbWV0YSB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZWh5cGVJbmxpbmVDb2RlLFxuICAgICAgICAgIHJlaHlwZVNsdWcsXG4gICAgICAgICAgcmVoeXBlS2F0ZXgsXG4gICAgICAgICAgcmVoeXBlVGFza0xpc3RBMTF5LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApXG4gICAgY29uc3QgdG9jSXRlbXMgPSBleHRyYWN0VG9jKGNvbnRlbnQpXG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV4dHJhY3RTZWFyY2hUZXh0KGNvbnRlbnQpXG4gICAgY29uc3QgbGFzdFVwZGF0ZWQgPSBnZXRMYXN0VXBkYXRlZChkb2MuX21ldGEuZmlsZVBhdGgpXG4gICAgY29uc3QgaW1hZ2UgPSBkb2MuaW1hZ2VcbiAgICAgID8gcmVzb2x2ZUFzc2V0UGF0aChkb2MuaW1hZ2UsIGZpbGVQYXRoLCBjb25maWcucm9vdClcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRvYyxcbiAgICAgIGZpbGU6IGRvYy5fbWV0YS5maWxlUGF0aCxcbiAgICAgIGxhc3RVcGRhdGVkLFxuICAgICAgaW1hZ2UsXG4gICAgICB0aXRsZSxcbiAgICAgIGljb24sXG4gICAgICBwYXRoLFxuICAgICAgdG9jSXRlbXMsXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgbWR4LFxuICAgIH1cbiAgfSxcbn0pXG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHNnbyBwaWNrcyB3cm9uZyBvdmVybG9hZCB3aGVuIHJlaHlwZS1zbHVnIGF1Z21lbnRzIHVuaWZpZWQgdHlwZXNcbiAgY29udGVudDogW2FydGljbGVzXSxcbn0pXG4iXX0=
@@ -1,34 +0,0 @@
1
- import { z } from "zod";
2
- import { Link } from "./link.js";
3
- import { Patch } from "./patch.js";
4
- import { Section } from "./section.js";
5
- import { CodeThemeDark, CodeThemeLight } from "./theme.js";
6
- export const UserConfig = z.object({
7
- site: z.string().optional(),
8
- favicon: z.string().optional(),
9
- logo: z.string().optional(),
10
- title: z.string().default("Livemark"),
11
- description: z.string().default("Markdown site generator"),
12
- include: z.union([z.string(), z.array(z.string())]).default("**/*.md"),
13
- exclude: z.union([z.string(), z.array(z.string())]).optional(),
14
- codeThemeLight: CodeThemeLight.default("catppuccin-latte"),
15
- codeThemeDark: CodeThemeDark.default("catppuccin-mocha"),
16
- links: z.array(Link).optional(),
17
- sections: z.array(Section).optional(),
18
- patches: z.array(Patch).optional(),
19
- });
20
- export const WebsiteConfig = UserConfig.pick({
21
- title: true,
22
- description: true,
23
- site: true,
24
- favicon: true,
25
- logo: true,
26
- links: true,
27
- sections: true,
28
- });
29
- export const SystemConfig = z.object({
30
- root: z.string(),
31
- configPath: z.string(),
32
- });
33
- export const Config = UserConfig.merge(SystemConfig);
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL21vZGVscy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQU0xRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM5QixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDckMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUM7SUFDMUQsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUN0RSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDOUQsY0FBYyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7SUFDMUQsYUFBYSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7SUFDeEQsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQy9CLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNyQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDbkMsQ0FBQyxDQUFBO0FBSUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDM0MsS0FBSyxFQUFFLElBQUk7SUFDWCxXQUFXLEVBQUUsSUFBSTtJQUNqQixJQUFJLEVBQUUsSUFBSTtJQUNWLE9BQU8sRUFBRSxJQUFJO0lBQ2IsSUFBSSxFQUFFLElBQUk7SUFDVixLQUFLLEVBQUUsSUFBSTtJQUNYLFFBQVEsRUFBRSxJQUFJO0NBQ2YsQ0FBQyxDQUFBO0FBTUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDaEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDdkIsQ0FBQyxDQUFBO0FBTUYsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcIi4vbGluay50c1wiXG5pbXBvcnQgeyBQYXRjaCB9IGZyb20gXCIuL3BhdGNoLnRzXCJcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tIFwiLi9zZWN0aW9uLnRzXCJcbmltcG9ydCB7IENvZGVUaGVtZURhcmssIENvZGVUaGVtZUxpZ2h0IH0gZnJvbSBcIi4vdGhlbWUudHNcIlxuXG4vKipcbiAqIFVzZXItcHJvdmlkZWQgY29uZmlndXJhdGlvbiBmb3IgTGl2ZW1hcmsuXG4gKi9cbmV4cG9ydCB0eXBlIFVzZXJDb25maWcgPSB6LmluZmVyPHR5cGVvZiBVc2VyQ29uZmlnPlxuZXhwb3J0IGNvbnN0IFVzZXJDb25maWcgPSB6Lm9iamVjdCh7XG4gIHNpdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZmF2aWNvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsb2dvOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpdGxlOiB6LnN0cmluZygpLmRlZmF1bHQoXCJMaXZlbWFya1wiKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkuZGVmYXVsdChcIk1hcmtkb3duIHNpdGUgZ2VuZXJhdG9yXCIpLFxuICBpbmNsdWRlOiB6LnVuaW9uKFt6LnN0cmluZygpLCB6LmFycmF5KHouc3RyaW5nKCkpXSkuZGVmYXVsdChcIioqLyoubWRcIiksXG4gIGV4Y2x1ZGU6IHoudW5pb24oW3ouc3RyaW5nKCksIHouYXJyYXkoei5zdHJpbmcoKSldKS5vcHRpb25hbCgpLFxuICBjb2RlVGhlbWVMaWdodDogQ29kZVRoZW1lTGlnaHQuZGVmYXVsdChcImNhdHBwdWNjaW4tbGF0dGVcIiksXG4gIGNvZGVUaGVtZURhcms6IENvZGVUaGVtZURhcmsuZGVmYXVsdChcImNhdHBwdWNjaW4tbW9jaGFcIiksXG4gIGxpbmtzOiB6LmFycmF5KExpbmspLm9wdGlvbmFsKCksXG4gIHNlY3Rpb25zOiB6LmFycmF5KFNlY3Rpb24pLm9wdGlvbmFsKCksXG4gIHBhdGNoZXM6IHouYXJyYXkoUGF0Y2gpLm9wdGlvbmFsKCksXG59KVxuXG4vKiogV2Vic2l0ZSBjb25maWd1cmF0aW9uIGluamVjdGVkIGF0IGJ1aWxkIHRpbWUgdmlhIFZpdGUgZGVmaW5lICovXG5leHBvcnQgdHlwZSBXZWJzaXRlQ29uZmlnID0gei5pbmZlcjx0eXBlb2YgV2Vic2l0ZUNvbmZpZz5cbmV4cG9ydCBjb25zdCBXZWJzaXRlQ29uZmlnID0gVXNlckNvbmZpZy5waWNrKHtcbiAgdGl0bGU6IHRydWUsXG4gIGRlc2NyaXB0aW9uOiB0cnVlLFxuICBzaXRlOiB0cnVlLFxuICBmYXZpY29uOiB0cnVlLFxuICBsb2dvOiB0cnVlLFxuICBsaW5rczogdHJ1ZSxcbiAgc2VjdGlvbnM6IHRydWUsXG59KVxuXG4vKipcbiAqIFN5c3RlbS1jb21wdXRlZCBjb25maWd1cmF0aW9uIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlnIGZpbGUgbG9jYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFN5c3RlbUNvbmZpZyA9IHouaW5mZXI8dHlwZW9mIFN5c3RlbUNvbmZpZz5cbmV4cG9ydCBjb25zdCBTeXN0ZW1Db25maWcgPSB6Lm9iamVjdCh7XG4gIHJvb3Q6IHouc3RyaW5nKCksXG4gIGNvbmZpZ1BhdGg6IHouc3RyaW5nKCksXG59KVxuXG4vKipcbiAqIEZ1bGx5IHJlc29sdmVkIExpdmVtYXJrIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZyA9IHouaW5mZXI8dHlwZW9mIENvbmZpZz5cbmV4cG9ydCBjb25zdCBDb25maWcgPSBVc2VyQ29uZmlnLm1lcmdlKFN5c3RlbUNvbmZpZylcbiJdfQ==
@@ -1,18 +0,0 @@
1
- import type { Plugin } from "vite";
2
- export interface LivemarkOptions {
3
- defaultsRoot: string;
4
- overridesRoot: string;
5
- subdirs: string[];
6
- configPath: string;
7
- }
8
- /** Livemark dev/build integration:
9
- * - Anchors every bare-specifier resolution at livemark's own location so
10
- * the entire build pipeline runs inside livemark's package boundary,
11
- * regardless of which file (consumer override, transitive package,
12
- * livemark source) issues the import. Removes pnpm-isolation hazards
13
- * without forcing peerDependencies on the consumer.
14
- * - Redirects imports that land in `<defaultsRoot>/<subdir>/` to the matching
15
- * user file under `<overridesRoot>/<subdir>/` when it exists.
16
- * - Watches `livemark.config.ts` and `.livemark/**` so edits, additions and
17
- * deletions trigger the right reload without manual restart. */
18
- export declare function livemark(opts: LivemarkOptions): Plugin;