mordoc 0.1.14 → 1.0.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 (430) hide show
  1. package/bin/cli.js +24 -71
  2. package/dist/cli/asset-rewrite.d.ts +40 -0
  3. package/dist/cli/asset-rewrite.d.ts.map +1 -0
  4. package/dist/cli/asset-rewrite.js +67 -0
  5. package/dist/cli/asset-rewrite.js.map +1 -0
  6. package/dist/cli/build.d.ts +45 -15
  7. package/dist/cli/build.d.ts.map +1 -1
  8. package/dist/cli/build.js +186 -101
  9. package/dist/cli/build.js.map +1 -1
  10. package/dist/cli/dev.d.ts +26 -14
  11. package/dist/cli/dev.d.ts.map +1 -1
  12. package/dist/cli/dev.js +116 -159
  13. package/dist/cli/dev.js.map +1 -1
  14. package/dist/cli/pagefind-indexer.d.ts +15 -0
  15. package/dist/cli/pagefind-indexer.d.ts.map +1 -0
  16. package/dist/cli/pagefind-indexer.js +68 -0
  17. package/dist/cli/pagefind-indexer.js.map +1 -0
  18. package/dist/cli/paths.d.ts +26 -0
  19. package/dist/cli/paths.d.ts.map +1 -0
  20. package/dist/cli/paths.js +32 -0
  21. package/dist/cli/paths.js.map +1 -0
  22. package/dist/cli/ssg-runner.d.ts +58 -0
  23. package/dist/cli/ssg-runner.d.ts.map +1 -0
  24. package/dist/cli/ssg-runner.js +126 -0
  25. package/dist/cli/ssg-runner.js.map +1 -0
  26. package/dist/config/assets-loader.d.ts +11 -0
  27. package/dist/config/assets-loader.d.ts.map +1 -0
  28. package/dist/config/assets-loader.js +46 -0
  29. package/dist/config/assets-loader.js.map +1 -0
  30. package/dist/config/language-loader.d.ts +11 -0
  31. package/dist/config/language-loader.d.ts.map +1 -0
  32. package/dist/config/language-loader.js +61 -0
  33. package/dist/config/language-loader.js.map +1 -0
  34. package/dist/config/language.d.ts +11 -0
  35. package/dist/config/language.d.ts.map +1 -0
  36. package/dist/config/language.js +61 -0
  37. package/dist/config/language.js.map +1 -0
  38. package/dist/config/sidenav-loader.d.ts +14 -0
  39. package/dist/config/sidenav-loader.d.ts.map +1 -0
  40. package/dist/config/sidenav-loader.js +78 -0
  41. package/dist/config/sidenav-loader.js.map +1 -0
  42. package/dist/config/site-loader.d.ts +11 -0
  43. package/dist/config/site-loader.d.ts.map +1 -0
  44. package/dist/config/site-loader.js +72 -0
  45. package/dist/config/site-loader.js.map +1 -0
  46. package/dist/config/site.d.ts +11 -0
  47. package/dist/config/site.d.ts.map +1 -0
  48. package/dist/config/site.js +72 -0
  49. package/dist/config/site.js.map +1 -0
  50. package/dist/config/topnav-loader.d.ts +10 -0
  51. package/dist/config/topnav-loader.d.ts.map +1 -0
  52. package/dist/config/topnav-loader.js +78 -0
  53. package/dist/config/topnav-loader.js.map +1 -0
  54. package/dist/config/translations-loader.d.ts +7 -0
  55. package/dist/config/translations-loader.d.ts.map +1 -0
  56. package/dist/config/translations-loader.js +51 -0
  57. package/dist/config/translations-loader.js.map +1 -0
  58. package/dist/content/content-loader.d.ts +16 -0
  59. package/dist/content/content-loader.d.ts.map +1 -0
  60. package/dist/content/content-loader.js +126 -0
  61. package/dist/content/content-loader.js.map +1 -0
  62. package/dist/content/content-parser.d.ts +12 -0
  63. package/dist/content/content-parser.d.ts.map +1 -0
  64. package/dist/content/content-parser.js +54 -0
  65. package/dist/content/content-parser.js.map +1 -0
  66. package/dist/content/content-transformer.d.ts +17 -0
  67. package/dist/content/content-transformer.d.ts.map +1 -0
  68. package/dist/content/content-transformer.js +94 -0
  69. package/dist/content/content-transformer.js.map +1 -0
  70. package/dist/content/markdoc-config.d.ts +13 -0
  71. package/dist/content/markdoc-config.d.ts.map +1 -0
  72. package/dist/content/markdoc-config.js +210 -0
  73. package/dist/content/markdoc-config.js.map +1 -0
  74. package/dist/content/slug.d.ts +26 -0
  75. package/dist/content/slug.d.ts.map +1 -0
  76. package/dist/content/slug.js +31 -0
  77. package/dist/content/slug.js.map +1 -0
  78. package/dist/pipeline.d.ts +61 -0
  79. package/dist/pipeline.d.ts.map +1 -0
  80. package/dist/pipeline.js +123 -0
  81. package/dist/pipeline.js.map +1 -0
  82. package/dist/types/assets.d.ts +15 -0
  83. package/dist/types/assets.d.ts.map +1 -0
  84. package/dist/types/assets.js +2 -0
  85. package/dist/types/assets.js.map +1 -0
  86. package/dist/types/content.d.ts +114 -32
  87. package/dist/types/content.d.ts.map +1 -1
  88. package/dist/types/content.js +1 -6
  89. package/dist/types/content.js.map +1 -1
  90. package/dist/types/language.d.ts +9 -0
  91. package/dist/types/language.d.ts.map +1 -0
  92. package/dist/types/language.js +2 -0
  93. package/dist/types/language.js.map +1 -0
  94. package/dist/types/navigation.d.ts +24 -36
  95. package/dist/types/navigation.d.ts.map +1 -1
  96. package/dist/types/navigation.js +1 -6
  97. package/dist/types/navigation.js.map +1 -1
  98. package/dist/types/pipeline.d.ts +70 -0
  99. package/dist/types/pipeline.d.ts.map +1 -0
  100. package/dist/types/pipeline.js +2 -0
  101. package/dist/types/pipeline.js.map +1 -0
  102. package/dist/types/site.d.ts +20 -0
  103. package/dist/types/site.d.ts.map +1 -0
  104. package/dist/types/site.js +2 -0
  105. package/dist/types/site.js.map +1 -0
  106. package/dist/utils/lang-utils.d.ts +23 -0
  107. package/dist/utils/lang-utils.d.ts.map +1 -0
  108. package/dist/utils/lang-utils.js +40 -0
  109. package/dist/utils/lang-utils.js.map +1 -0
  110. package/dist/utils/paths.d.ts +25 -0
  111. package/dist/utils/paths.d.ts.map +1 -0
  112. package/dist/utils/paths.js +31 -0
  113. package/dist/utils/paths.js.map +1 -0
  114. package/dist/vite/plugin.d.ts +93 -0
  115. package/dist/vite/plugin.d.ts.map +1 -0
  116. package/dist/vite/plugin.js +435 -0
  117. package/dist/vite/plugin.js.map +1 -0
  118. package/package.json +46 -61
  119. package/src/app/App.module.css +82 -0
  120. package/src/app/App.tsx +95 -0
  121. package/src/app/content/Content.module.css +357 -0
  122. package/src/app/content/Content.tsx +212 -0
  123. package/src/app/content/callout/Callout.module.css +110 -0
  124. package/src/app/content/callout/Callout.tsx +82 -0
  125. package/src/app/content/card/Card.module.css +146 -0
  126. package/src/app/content/card/Card.tsx +110 -0
  127. package/src/app/content/card/CardGrid.module.css +22 -0
  128. package/src/app/content/card/CardGrid.tsx +34 -0
  129. package/src/app/content/code-block/CodeBlock.module.css +237 -0
  130. package/src/app/content/code-block/CodeBlock.tsx +123 -0
  131. package/src/app/content/heading/Heading.module.css +52 -0
  132. package/src/app/content/heading/Heading.tsx +75 -0
  133. package/src/app/content/image/Image.module.css +113 -0
  134. package/src/app/content/image/Image.tsx +98 -0
  135. package/src/app/content/link/ContentLink.tsx +46 -0
  136. package/src/app/data-context.tsx +39 -0
  137. package/src/app/entry-server.tsx +58 -0
  138. package/src/app/footer/Footer.module.css +36 -0
  139. package/src/app/footer/Footer.tsx +28 -0
  140. package/src/app/globals.d.ts +40 -0
  141. package/src/app/header/Header.module.css +205 -0
  142. package/src/app/header/Header.tsx +188 -0
  143. package/src/app/header/LanguagePicker.module.css +97 -0
  144. package/src/app/header/LanguagePicker.tsx +174 -0
  145. package/src/app/header/SearchBar.module.css +92 -0
  146. package/src/app/header/SearchBar.tsx +37 -0
  147. package/src/app/header/SearchModal.module.css +185 -0
  148. package/src/app/header/SearchModal.tsx +245 -0
  149. package/src/app/header/Topnav.module.css +37 -0
  150. package/src/app/header/Topnav.tsx +30 -0
  151. package/src/app/index.css +119 -0
  152. package/src/app/index.html +13 -0
  153. package/src/app/landing/LandingPage.module.css +14 -0
  154. package/src/app/landing/LandingPage.tsx +62 -0
  155. package/src/app/landing/button/Button.module.css +37 -0
  156. package/src/app/landing/button/Button.tsx +50 -0
  157. package/src/app/landing/hero/Hero.module.css +108 -0
  158. package/src/app/landing/hero/Hero.tsx +81 -0
  159. package/src/app/landing/section/Section.module.css +100 -0
  160. package/src/app/landing/section/Section.tsx +61 -0
  161. package/src/app/lang-utils.ts +11 -0
  162. package/src/app/main.tsx +67 -0
  163. package/src/app/not-found/NotFound.module.css +92 -0
  164. package/src/app/not-found/NotFound.tsx +34 -0
  165. package/src/app/routes.tsx +86 -0
  166. package/src/app/sidenav/Sidenav.module.css +239 -0
  167. package/src/app/sidenav/Sidenav.tsx +182 -0
  168. package/src/app/skeleton/Skeleton.module.css +100 -0
  169. package/src/app/skeleton/Skeleton.tsx +75 -0
  170. package/src/app/toc/Toc.module.css +59 -0
  171. package/src/app/toc/Toc.tsx +77 -0
  172. package/src/app/tsconfig.json +18 -0
  173. package/src/app/virtual-modules.d.ts +74 -0
  174. package/dist/assets/fonts/inter/Inter-Italic-VariableFont_opsz,wght.ttf +0 -0
  175. package/dist/assets/fonts/inter/Inter-VariableFont_opsz,wght.ttf +0 -0
  176. package/dist/assets/fonts/inter/OFL.txt +0 -93
  177. package/dist/build/Builder.d.ts +0 -92
  178. package/dist/build/Builder.d.ts.map +0 -1
  179. package/dist/build/Builder.js +0 -394
  180. package/dist/build/Builder.js.map +0 -1
  181. package/dist/build/ClientBundler.d.ts +0 -48
  182. package/dist/build/ClientBundler.d.ts.map +0 -1
  183. package/dist/build/ClientBundler.js +0 -169
  184. package/dist/build/ClientBundler.js.map +0 -1
  185. package/dist/build/HtmlGenerator.d.ts +0 -46
  186. package/dist/build/HtmlGenerator.d.ts.map +0 -1
  187. package/dist/build/HtmlGenerator.js +0 -190
  188. package/dist/build/HtmlGenerator.js.map +0 -1
  189. package/dist/build/SearchIndexer.d.ts +0 -31
  190. package/dist/build/SearchIndexer.d.ts.map +0 -1
  191. package/dist/build/SearchIndexer.js +0 -116
  192. package/dist/build/SearchIndexer.js.map +0 -1
  193. package/dist/bundles/client.js +0 -126
  194. package/dist/cli/create-app.d.ts +0 -14
  195. package/dist/cli/create-app.d.ts.map +0 -1
  196. package/dist/cli/create-app.js +0 -241
  197. package/dist/cli/create-app.js.map +0 -1
  198. package/dist/client/App.d.ts +0 -17
  199. package/dist/client/App.d.ts.map +0 -1
  200. package/dist/client/App.js +0 -91
  201. package/dist/client/App.js.map +0 -1
  202. package/dist/client/contexts/ConfigContext.d.ts +0 -22
  203. package/dist/client/contexts/ConfigContext.d.ts.map +0 -1
  204. package/dist/client/contexts/ConfigContext.js +0 -27
  205. package/dist/client/contexts/ConfigContext.js.map +0 -1
  206. package/dist/client/contexts/ContentContext.d.ts +0 -31
  207. package/dist/client/contexts/ContentContext.d.ts.map +0 -1
  208. package/dist/client/contexts/ContentContext.js +0 -46
  209. package/dist/client/contexts/ContentContext.js.map +0 -1
  210. package/dist/client/contexts/SearchContext.d.ts +0 -38
  211. package/dist/client/contexts/SearchContext.d.ts.map +0 -1
  212. package/dist/client/contexts/SearchContext.js +0 -185
  213. package/dist/client/contexts/SearchContext.js.map +0 -1
  214. package/dist/client/contexts/ThemeContext.d.ts +0 -23
  215. package/dist/client/contexts/ThemeContext.d.ts.map +0 -1
  216. package/dist/client/contexts/ThemeContext.js +0 -53
  217. package/dist/client/contexts/ThemeContext.js.map +0 -1
  218. package/dist/client/hooks/useContent.d.ts +0 -12
  219. package/dist/client/hooks/useContent.d.ts.map +0 -1
  220. package/dist/client/hooks/useContent.js +0 -78
  221. package/dist/client/hooks/useContent.js.map +0 -1
  222. package/dist/client/hooks/useNavigation.d.ts +0 -15
  223. package/dist/client/hooks/useNavigation.d.ts.map +0 -1
  224. package/dist/client/hooks/useNavigation.js +0 -101
  225. package/dist/client/hooks/useNavigation.js.map +0 -1
  226. package/dist/client/hooks/useSearch.d.ts +0 -22
  227. package/dist/client/hooks/useSearch.d.ts.map +0 -1
  228. package/dist/client/hooks/useSearch.js +0 -64
  229. package/dist/client/hooks/useSearch.js.map +0 -1
  230. package/dist/client/main.d.ts +0 -5
  231. package/dist/client/main.d.ts.map +0 -1
  232. package/dist/client/main.js +0 -66
  233. package/dist/client/main.js.map +0 -1
  234. package/dist/components/Callout.d.ts +0 -9
  235. package/dist/components/Callout.d.ts.map +0 -1
  236. package/dist/components/Callout.js +0 -24
  237. package/dist/components/Callout.js.map +0 -1
  238. package/dist/components/Card.d.ts +0 -10
  239. package/dist/components/Card.d.ts.map +0 -1
  240. package/dist/components/Card.js +0 -15
  241. package/dist/components/Card.js.map +0 -1
  242. package/dist/components/CardGrid.d.ts +0 -8
  243. package/dist/components/CardGrid.d.ts.map +0 -1
  244. package/dist/components/CardGrid.js +0 -9
  245. package/dist/components/CardGrid.js.map +0 -1
  246. package/dist/components/CodeBlock.d.ts +0 -28
  247. package/dist/components/CodeBlock.d.ts.map +0 -1
  248. package/dist/components/CodeBlock.js +0 -80
  249. package/dist/components/CodeBlock.js.map +0 -1
  250. package/dist/components/ContentPage.d.ts +0 -9
  251. package/dist/components/ContentPage.d.ts.map +0 -1
  252. package/dist/components/ContentPage.js +0 -105
  253. package/dist/components/ContentPage.js.map +0 -1
  254. package/dist/components/Header.d.ts +0 -14
  255. package/dist/components/Header.d.ts.map +0 -1
  256. package/dist/components/Header.js +0 -30
  257. package/dist/components/Header.js.map +0 -1
  258. package/dist/components/Heading.d.ts +0 -16
  259. package/dist/components/Heading.d.ts.map +0 -1
  260. package/dist/components/Heading.js +0 -31
  261. package/dist/components/Heading.js.map +0 -1
  262. package/dist/components/Image.d.ts +0 -8
  263. package/dist/components/Image.d.ts.map +0 -1
  264. package/dist/components/Image.js +0 -24
  265. package/dist/components/Image.js.map +0 -1
  266. package/dist/components/Layout.d.ts +0 -14
  267. package/dist/components/Layout.d.ts.map +0 -1
  268. package/dist/components/Layout.js +0 -32
  269. package/dist/components/Layout.js.map +0 -1
  270. package/dist/components/MarkdocRenderer.d.ts +0 -15
  271. package/dist/components/MarkdocRenderer.d.ts.map +0 -1
  272. package/dist/components/MarkdocRenderer.js +0 -73
  273. package/dist/components/MarkdocRenderer.js.map +0 -1
  274. package/dist/components/MobileMenu.d.ts +0 -14
  275. package/dist/components/MobileMenu.d.ts.map +0 -1
  276. package/dist/components/MobileMenu.js +0 -45
  277. package/dist/components/MobileMenu.js.map +0 -1
  278. package/dist/components/PageNavigation.d.ts +0 -9
  279. package/dist/components/PageNavigation.d.ts.map +0 -1
  280. package/dist/components/PageNavigation.js +0 -23
  281. package/dist/components/PageNavigation.js.map +0 -1
  282. package/dist/components/SearchModal.d.ts +0 -9
  283. package/dist/components/SearchModal.d.ts.map +0 -1
  284. package/dist/components/SearchModal.js +0 -74
  285. package/dist/components/SearchModal.js.map +0 -1
  286. package/dist/components/SideNav.d.ts +0 -9
  287. package/dist/components/SideNav.d.ts.map +0 -1
  288. package/dist/components/SideNav.js +0 -66
  289. package/dist/components/SideNav.js.map +0 -1
  290. package/dist/components/TableOfContents.d.ts +0 -10
  291. package/dist/components/TableOfContents.d.ts.map +0 -1
  292. package/dist/components/TableOfContents.js +0 -151
  293. package/dist/components/TableOfContents.js.map +0 -1
  294. package/dist/config/ConfigLoader.d.ts +0 -50
  295. package/dist/config/ConfigLoader.d.ts.map +0 -1
  296. package/dist/config/ConfigLoader.js +0 -214
  297. package/dist/config/ConfigLoader.js.map +0 -1
  298. package/dist/config/StyleCompiler.d.ts +0 -17
  299. package/dist/config/StyleCompiler.d.ts.map +0 -1
  300. package/dist/config/StyleCompiler.js +0 -116
  301. package/dist/config/StyleCompiler.js.map +0 -1
  302. package/dist/config/ThemeGenerator.d.ts +0 -14
  303. package/dist/config/ThemeGenerator.d.ts.map +0 -1
  304. package/dist/config/ThemeGenerator.js +0 -129
  305. package/dist/config/ThemeGenerator.js.map +0 -1
  306. package/dist/content/ContentLoader.d.ts +0 -70
  307. package/dist/content/ContentLoader.d.ts.map +0 -1
  308. package/dist/content/ContentLoader.js +0 -146
  309. package/dist/content/ContentLoader.js.map +0 -1
  310. package/dist/content/ContentProcessor.d.ts +0 -84
  311. package/dist/content/ContentProcessor.d.ts.map +0 -1
  312. package/dist/content/ContentProcessor.js +0 -387
  313. package/dist/content/ContentProcessor.js.map +0 -1
  314. package/dist/content/RouteManager.d.ts +0 -69
  315. package/dist/content/RouteManager.d.ts.map +0 -1
  316. package/dist/content/RouteManager.js +0 -143
  317. package/dist/content/RouteManager.js.map +0 -1
  318. package/dist/styles/components/callout.d.ts +0 -11
  319. package/dist/styles/components/callout.d.ts.map +0 -1
  320. package/dist/styles/components/callout.js +0 -87
  321. package/dist/styles/components/callout.js.map +0 -1
  322. package/dist/styles/components/card.d.ts +0 -11
  323. package/dist/styles/components/card.d.ts.map +0 -1
  324. package/dist/styles/components/card.js +0 -179
  325. package/dist/styles/components/card.js.map +0 -1
  326. package/dist/styles/components/codeblock.d.ts +0 -11
  327. package/dist/styles/components/codeblock.d.ts.map +0 -1
  328. package/dist/styles/components/codeblock.js +0 -251
  329. package/dist/styles/components/codeblock.js.map +0 -1
  330. package/dist/styles/components/content.d.ts +0 -11
  331. package/dist/styles/components/content.d.ts.map +0 -1
  332. package/dist/styles/components/content.js +0 -333
  333. package/dist/styles/components/content.js.map +0 -1
  334. package/dist/styles/components/fonts.d.ts +0 -11
  335. package/dist/styles/components/fonts.d.ts.map +0 -1
  336. package/dist/styles/components/fonts.js +0 -34
  337. package/dist/styles/components/fonts.js.map +0 -1
  338. package/dist/styles/components/header.d.ts +0 -11
  339. package/dist/styles/components/header.d.ts.map +0 -1
  340. package/dist/styles/components/header.js +0 -293
  341. package/dist/styles/components/header.js.map +0 -1
  342. package/dist/styles/components/heading.d.ts +0 -11
  343. package/dist/styles/components/heading.d.ts.map +0 -1
  344. package/dist/styles/components/heading.js +0 -115
  345. package/dist/styles/components/heading.js.map +0 -1
  346. package/dist/styles/components/layout.d.ts +0 -11
  347. package/dist/styles/components/layout.d.ts.map +0 -1
  348. package/dist/styles/components/layout.js +0 -79
  349. package/dist/styles/components/layout.js.map +0 -1
  350. package/dist/styles/components/mobilemenu.d.ts +0 -11
  351. package/dist/styles/components/mobilemenu.d.ts.map +0 -1
  352. package/dist/styles/components/mobilemenu.js +0 -112
  353. package/dist/styles/components/mobilemenu.js.map +0 -1
  354. package/dist/styles/components/reset.d.ts +0 -11
  355. package/dist/styles/components/reset.d.ts.map +0 -1
  356. package/dist/styles/components/reset.js +0 -131
  357. package/dist/styles/components/reset.js.map +0 -1
  358. package/dist/styles/components/searchmodal.d.ts +0 -11
  359. package/dist/styles/components/searchmodal.d.ts.map +0 -1
  360. package/dist/styles/components/searchmodal.js +0 -333
  361. package/dist/styles/components/searchmodal.js.map +0 -1
  362. package/dist/styles/components/sidenav.d.ts +0 -11
  363. package/dist/styles/components/sidenav.d.ts.map +0 -1
  364. package/dist/styles/components/sidenav.js +0 -212
  365. package/dist/styles/components/sidenav.js.map +0 -1
  366. package/dist/styles/components/toc.d.ts +0 -11
  367. package/dist/styles/components/toc.d.ts.map +0 -1
  368. package/dist/styles/components/toc.js +0 -120
  369. package/dist/styles/components/toc.js.map +0 -1
  370. package/dist/styles/components/typography.d.ts +0 -11
  371. package/dist/styles/components/typography.d.ts.map +0 -1
  372. package/dist/styles/components/typography.js +0 -248
  373. package/dist/styles/components/typography.js.map +0 -1
  374. package/dist/styles/components/utility.d.ts +0 -11
  375. package/dist/styles/components/utility.d.ts.map +0 -1
  376. package/dist/styles/components/utility.js +0 -231
  377. package/dist/styles/components/utility.js.map +0 -1
  378. package/dist/styles/types.d.ts +0 -79
  379. package/dist/styles/types.d.ts.map +0 -1
  380. package/dist/styles/types.js +0 -7
  381. package/dist/styles/types.js.map +0 -1
  382. package/dist/styles/utils.d.ts +0 -21
  383. package/dist/styles/utils.d.ts.map +0 -1
  384. package/dist/styles/utils.js +0 -50
  385. package/dist/styles/utils.js.map +0 -1
  386. package/dist/styles/variables/main.d.ts +0 -15
  387. package/dist/styles/variables/main.d.ts.map +0 -1
  388. package/dist/styles/variables/main.js +0 -116
  389. package/dist/styles/variables/main.js.map +0 -1
  390. package/dist/types/config.d.ts +0 -43
  391. package/dist/types/config.d.ts.map +0 -1
  392. package/dist/types/config.js +0 -7
  393. package/dist/types/config.js.map +0 -1
  394. package/dist/utils/language-utils.d.ts +0 -41
  395. package/dist/utils/language-utils.d.ts.map +0 -1
  396. package/dist/utils/language-utils.js +0 -79
  397. package/dist/utils/language-utils.js.map +0 -1
  398. package/dist/utils/slugify.d.ts +0 -20
  399. package/dist/utils/slugify.d.ts.map +0 -1
  400. package/dist/utils/slugify.js +0 -44
  401. package/dist/utils/slugify.js.map +0 -1
  402. package/templates/default/config/favicon.ico +0 -0
  403. package/templates/default/config/logo-dark.png +0 -0
  404. package/templates/default/config/logo.png +0 -0
  405. package/templates/default/config/sidenav.yaml +0 -36
  406. package/templates/default/config/site.json +0 -16
  407. package/templates/default/config/styles/main.json +0 -6
  408. package/templates/default/config/styles/typography.json +0 -6
  409. package/templates/default/content/en/changelog.md +0 -35
  410. package/templates/default/content/en/faq.md +0 -50
  411. package/templates/default/content/en/field-manual/engines.md +0 -59
  412. package/templates/default/content/en/field-manual/relativity.md +0 -46
  413. package/templates/default/content/en/field-manual/safety.md +0 -44
  414. package/templates/default/content/en/field-manual.md +0 -22
  415. package/templates/default/content/en/flight-school/navigation.md +0 -61
  416. package/templates/default/content/en/flight-school/primer.md +0 -64
  417. package/templates/default/content/en/flight-school.md +0 -48
  418. package/templates/default/content/en/index.md +0 -83
  419. package/templates/default/content/en/ship-systems/flux-sails.md +0 -33
  420. package/templates/default/content/en/ship-systems/photonic-core.md +0 -39
  421. package/templates/default/content/en/ship-systems.md +0 -25
  422. package/templates/default/package.json +0 -21
  423. package/templates/default/public/icons/academy.svg +0 -15
  424. package/templates/default/public/icons/manual.svg +0 -16
  425. package/templates/default/public/icons/relativity.svg +0 -16
  426. package/templates/default/public/icons/systems.svg +0 -14
  427. package/templates/default/public/icons/warning.svg +0 -14
  428. package/templates/default/public/images/flux-sails.svg +0 -33
  429. package/templates/default/public/images/photonic-core.svg +0 -44
  430. package/templates/default/public/images/starwake.svg +0 -49
package/bin/cli.js CHANGED
@@ -1,81 +1,34 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
- const path = require('path');
4
- const fs = require('fs');
3
+ // Entry point for the Mordoc CLI. This file is intentionally plain JS (not TS)
4
+ // so it can be executed directly by Node without a build step.
5
+ // The actual logic lives in compiled output under dist/.
5
6
 
6
- // Get the command from arguments
7
- const args = process.argv.slice(2);
8
- const command = args[0];
9
- const commandArgs = args.slice(1); // Arguments after the command
7
+ import { runDevCommand } from '../dist/cli/dev.js';
8
+ import { runBuildCommand } from '../dist/cli/build.js';
10
9
 
11
- // Display help text
12
- function showHelp() {
13
- console.log(`
14
- Mordoc - Static Site Generator for Documentation
10
+ const command = process.argv[2];
15
11
 
16
- Usage:
17
- mordoc <command> [options]
18
-
19
- Commands:
20
- build Build the documentation site
21
- dev Start the development server
22
-
23
- Options:
24
- --help Show this help message
25
-
26
- Examples:
27
- mordoc build
28
- mordoc build --verbose --drafts
29
- mordoc dev
30
- mordoc dev --port 8080
31
- `);
32
- }
33
-
34
- // Main CLI logic
35
- async function main() {
36
- // Show help if no command or --help flag
37
- if (!command || command === '--help' || command === '-h') {
38
- showHelp();
39
- process.exit(0);
40
- }
41
-
42
- // Check if dist folder exists (TypeScript must be compiled first)
43
- const distPath = path.join(__dirname, '../dist/cli');
44
- if (!fs.existsSync(distPath)) {
45
- console.error('Error: Mordoc is not built. Please run "tsc" first to compile TypeScript.');
12
+ if (command === 'dev') {
13
+ try {
14
+ await runDevCommand({ projectRoot: process.cwd() });
15
+ } catch (err) {
16
+ console.error('\n✘ Dev server failed to start:\n');
17
+ console.error(err.message);
46
18
  process.exit(1);
47
19
  }
48
-
49
- // Route to appropriate command handler
20
+ } else if (command === 'build') {
50
21
  try {
51
- switch (command) {
52
- case 'build': {
53
- const buildHandler = require('../dist/cli/build.js');
54
- const options = buildHandler.parseBuildArgs(commandArgs);
55
- await buildHandler.build(options);
56
- break;
57
- }
58
-
59
- case 'dev': {
60
- const devHandler = require('../dist/cli/dev.js');
61
- const options = devHandler.parseDevArgs(commandArgs);
62
- await devHandler.dev(options);
63
- break;
64
- }
65
-
66
- default:
67
- console.error(`Unknown command: ${command}`);
68
- showHelp();
69
- process.exit(1);
70
- }
71
- } catch (error) {
72
- console.error('Error:', error.message);
73
- if (process.env.DEBUG) {
74
- console.error(error.stack);
75
- }
22
+ await runBuildCommand({ projectRoot: process.cwd() });
23
+ } catch (err) {
24
+ console.error('\n✘ Build failed:\n');
25
+ console.error(err.stack ?? err.message);
76
26
  process.exit(1);
77
27
  }
28
+ } else {
29
+ console.log('Usage: mordoc <command>');
30
+ console.log('\nCommands:');
31
+ console.log(' dev Start the Mordoc dev server');
32
+ console.log(' build Render the project to static HTML in dist/');
33
+ process.exit(1);
78
34
  }
79
-
80
- // Run the CLI
81
- main();
@@ -0,0 +1,40 @@
1
+ import type { MordocData } from '../types/pipeline.js';
2
+ /**
3
+ * Copies every non-null asset file out of the user's `config/assets/`
4
+ * to a flat `<clientOutDir>/_assets/` folder, then returns a new
5
+ * `MordocData` whose `assets` field references the served URLs instead
6
+ * of the original absolute disk paths.
7
+ *
8
+ * Why this exists right now:
9
+ * `loadAssets` produces absolute disk paths (e.g.
10
+ * `C:\Users\...\config\assets\favicon.ico`). Those paths land inside
11
+ * the bundled `virtual:mordoc/assets` module on the client and inside
12
+ * the React tree's serialized loader data on SSR. Neither has any
13
+ * business in deployed output — disk paths are useless to a browser
14
+ * and embedding them in HTML/JS leaks the build machine's filesystem
15
+ * layout. The moment a theme component reads `assets.favicon`, that
16
+ * leak becomes a visible bug. Rewriting now closes the gap before any
17
+ * theme exists; the cost is small and the alternative is a latent
18
+ * regression waiting for the first `<link rel="icon" href={...} />`.
19
+ *
20
+ * Why build-only:
21
+ * Dev rewrites asset paths at virtual-module generation time (plugin.ts
22
+ * `rewriteAssetsForDev`) and serves files via a `/_assets/*` middleware
23
+ * in dev.ts — no copy step needed there.
24
+ *
25
+ * Filename strategy:
26
+ * Output filename = basename of the source file. The current loader
27
+ * discovers exactly three known assets by convention (favicon, logo,
28
+ * logo-dark) so basename collisions are impossible by construction.
29
+ * When the asset surface grows beyond conventional discovery, this
30
+ * strategy will need a content-hash suffix to disambiguate.
31
+ *
32
+ * Note on `logoDark` falling back to `logo`:
33
+ * `loadAssets` returns the same source path for both when no separate
34
+ * dark logo exists. `fs.copyFile` is idempotent under repeated copies
35
+ * to the same destination, so the duplicate copy is harmless and the
36
+ * resulting URLs are identical — exactly the fall-through the loader
37
+ * intended.
38
+ */
39
+ export declare function copyAndRewriteAssets(data: MordocData, clientOutDir: string): Promise<MordocData>;
40
+ //# sourceMappingURL=asset-rewrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-rewrite.d.ts","sourceRoot":"","sources":["../../src/cli/asset-rewrite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAcvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC,CAWrB"}
@@ -0,0 +1,67 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs/promises';
3
+ /**
4
+ * Public URL prefix used for rewritten asset paths.
5
+ *
6
+ * Underscore-prefixed deliberately: Vite's client build emits its own
7
+ * code chunks into `dist/assets/` (no underscore) and we don't want a
8
+ * collision with that directory. `_assets` is conventional for "static
9
+ * resources copied verbatim, not bundler output".
10
+ */
11
+ const ASSET_URL_PREFIX = '/_assets';
12
+ const ASSET_DIR_NAME = '_assets';
13
+ /**
14
+ * Copies every non-null asset file out of the user's `config/assets/`
15
+ * to a flat `<clientOutDir>/_assets/` folder, then returns a new
16
+ * `MordocData` whose `assets` field references the served URLs instead
17
+ * of the original absolute disk paths.
18
+ *
19
+ * Why this exists right now:
20
+ * `loadAssets` produces absolute disk paths (e.g.
21
+ * `C:\Users\...\config\assets\favicon.ico`). Those paths land inside
22
+ * the bundled `virtual:mordoc/assets` module on the client and inside
23
+ * the React tree's serialized loader data on SSR. Neither has any
24
+ * business in deployed output — disk paths are useless to a browser
25
+ * and embedding them in HTML/JS leaks the build machine's filesystem
26
+ * layout. The moment a theme component reads `assets.favicon`, that
27
+ * leak becomes a visible bug. Rewriting now closes the gap before any
28
+ * theme exists; the cost is small and the alternative is a latent
29
+ * regression waiting for the first `<link rel="icon" href={...} />`.
30
+ *
31
+ * Why build-only:
32
+ * Dev rewrites asset paths at virtual-module generation time (plugin.ts
33
+ * `rewriteAssetsForDev`) and serves files via a `/_assets/*` middleware
34
+ * in dev.ts — no copy step needed there.
35
+ *
36
+ * Filename strategy:
37
+ * Output filename = basename of the source file. The current loader
38
+ * discovers exactly three known assets by convention (favicon, logo,
39
+ * logo-dark) so basename collisions are impossible by construction.
40
+ * When the asset surface grows beyond conventional discovery, this
41
+ * strategy will need a content-hash suffix to disambiguate.
42
+ *
43
+ * Note on `logoDark` falling back to `logo`:
44
+ * `loadAssets` returns the same source path for both when no separate
45
+ * dark logo exists. `fs.copyFile` is idempotent under repeated copies
46
+ * to the same destination, so the duplicate copy is harmless and the
47
+ * resulting URLs are identical — exactly the fall-through the loader
48
+ * intended.
49
+ */
50
+ export async function copyAndRewriteAssets(data, clientOutDir) {
51
+ const targetDir = path.join(clientOutDir, ASSET_DIR_NAME);
52
+ await fs.mkdir(targetDir, { recursive: true });
53
+ const rewritten = {
54
+ favicon: await copyAndRewriteOne(data.assets.favicon, targetDir),
55
+ logo: await copyAndRewriteOne(data.assets.logo, targetDir),
56
+ logoDark: await copyAndRewriteOne(data.assets.logoDark, targetDir),
57
+ };
58
+ return { ...data, assets: rewritten };
59
+ }
60
+ async function copyAndRewriteOne(sourcePath, targetDir) {
61
+ if (sourcePath === null)
62
+ return null;
63
+ const filename = path.basename(sourcePath);
64
+ await fs.copyFile(sourcePath, path.join(targetDir, filename));
65
+ return `${ASSET_URL_PREFIX}/${filename}`;
66
+ }
67
+ //# sourceMappingURL=asset-rewrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-rewrite.js","sourceRoot":"","sources":["../../src/cli/asset-rewrite.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAIlC;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG,UAAU,CAAC;AACpC,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAgB,EAChB,YAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAmB;QAChC,OAAO,EAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;QAChE,IAAI,EAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;QAC1D,QAAQ,EAAE,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;KACnE,CAAC;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,UAAyB,EACzB,SAAiB;IAEjB,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9D,OAAO,GAAG,gBAAgB,IAAI,QAAQ,EAAE,CAAC;AAC3C,CAAC"}
@@ -1,20 +1,50 @@
1
- /**
2
- * Build command - Generates static site from content
3
- * Usage: mordoc build [options]
4
- */
5
1
  export interface BuildCommandOptions {
6
- projectRoot?: string;
7
- outputDir?: string;
8
- verbose?: boolean;
9
- drafts?: boolean;
10
- clean?: boolean;
2
+ /** Absolute path to the user's project root. */
3
+ projectRoot: string;
11
4
  }
12
5
  /**
13
- * Execute the build command
14
- */
15
- export declare function build(options?: BuildCommandOptions): Promise<void>;
16
- /**
17
- * Parse command-line arguments for build command
6
+ * Runs the full Mordoc production build for a project.
7
+ *
8
+ * Architecture mirrors `dev.ts`:
9
+ * - Vite's `root` is mordoc's own `src/app/` — the user's project
10
+ * contains no TSX/HTML that Vite ever sees as code. All user-side
11
+ * data flows through the mordoc plugin's virtual modules.
12
+ * - `publicDir` is pointed at `<projectRoot>/public/` for the client
13
+ * build so that author assets (referenced from markdown as
14
+ * `/images/foo.png` etc.) get copied into `dist/` verbatim. The SSR
15
+ * build sets `publicDir: false` to avoid copying the same files into
16
+ * the throwaway SSR intermediate.
17
+ * - `configFile: false` prevents Vite from picking up any stray
18
+ * `vite.config.js` the user might have lying around.
19
+ *
20
+ * Pipeline shape:
21
+ * 1. `runPipeline(projectRoot)` once, up front. The result is injected
22
+ * into both Vite plugin instances below so the pipeline doesn't run
23
+ * twice. This also gives us a single point to mutate the data later
24
+ * (e.g. asset URL rewriting) before either Vite pass starts.
25
+ * 2. Wipe the previous `dist/` and SSR cache. We do this manually
26
+ * rather than relying on Vite's `emptyOutDir` because both output
27
+ * directories live outside Vite's `root`, where Vite's auto-empty
28
+ * logic is intentionally cautious. Manual wipe keeps the behaviour
29
+ * explicit and the same for both passes.
30
+ * 3. Client build: bundles `main.tsx` + every route's lazy chunk into
31
+ * hashed `dist/assets/*.js`. `manifest: true` emits the chunk-graph
32
+ * manifest the SSG runner will read to inject per-route preloads.
33
+ * Vite also transforms `index.html` (rewriting the `<script>` tag
34
+ * from `/main.tsx` to the hashed entry) and writes it to
35
+ * `dist/index.html` — that becomes the SSG runner's per-route
36
+ * template.
37
+ * 4. SSR build: bundles `entry-server.tsx` for Node consumption into
38
+ * `node_modules/.mordoc/ssr/`. Vite preserves the dynamic
39
+ * `import('virtual:mordoc/page/...')` calls as runtime imports,
40
+ * code-split into sibling files, so the SSG runner can lazily load
41
+ * each route's content as it renders.
42
+ * 5. SSG runner: loads the SSR bundle, calls `render()` per route,
43
+ * writes the resulting HTML files. (Wired in a follow-up step.)
44
+ *
45
+ * The dev path is unaffected by any of this — its plugin instance still
46
+ * runs the pipeline itself, exactly as before. Build is the only caller
47
+ * that pre-loads `data`.
18
48
  */
19
- export declare function parseBuildArgs(args: string[]): BuildCommandOptions;
49
+ export declare function runBuildCommand(options: BuildCommandOptions): Promise<void>;
20
50
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC5E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAyClE"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;CACrB;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0GjF"}
package/dist/cli/build.js CHANGED
@@ -1,111 +1,196 @@
1
- "use strict";
1
+ import { build as viteBuild } from 'vite';
2
+ import react from '@vitejs/plugin-react';
3
+ import path from 'node:path';
4
+ import fs from 'node:fs/promises';
5
+ import { runPipeline } from '../pipeline.js';
6
+ import { mordocVitePlugin } from '../vite/plugin.js';
7
+ import { getAppRoot } from '../utils/paths.js';
8
+ import { runSsg } from './ssg-runner.js';
9
+ import { copyAndRewriteAssets } from './asset-rewrite.js';
10
+ import { runPagefindIndexer } from './pagefind-indexer.js';
11
+ function getOutDirs(projectRoot) {
12
+ return {
13
+ clientOutDir: path.join(projectRoot, 'dist'),
14
+ ssrOutDir: path.join(projectRoot, 'node_modules', '.mordoc', 'ssr'),
15
+ };
16
+ }
2
17
  /**
3
- * Build command - Generates static site from content
4
- * Usage: mordoc build [options]
18
+ * Runs the full Mordoc production build for a project.
19
+ *
20
+ * Architecture mirrors `dev.ts`:
21
+ * - Vite's `root` is mordoc's own `src/app/` — the user's project
22
+ * contains no TSX/HTML that Vite ever sees as code. All user-side
23
+ * data flows through the mordoc plugin's virtual modules.
24
+ * - `publicDir` is pointed at `<projectRoot>/public/` for the client
25
+ * build so that author assets (referenced from markdown as
26
+ * `/images/foo.png` etc.) get copied into `dist/` verbatim. The SSR
27
+ * build sets `publicDir: false` to avoid copying the same files into
28
+ * the throwaway SSR intermediate.
29
+ * - `configFile: false` prevents Vite from picking up any stray
30
+ * `vite.config.js` the user might have lying around.
31
+ *
32
+ * Pipeline shape:
33
+ * 1. `runPipeline(projectRoot)` once, up front. The result is injected
34
+ * into both Vite plugin instances below so the pipeline doesn't run
35
+ * twice. This also gives us a single point to mutate the data later
36
+ * (e.g. asset URL rewriting) before either Vite pass starts.
37
+ * 2. Wipe the previous `dist/` and SSR cache. We do this manually
38
+ * rather than relying on Vite's `emptyOutDir` because both output
39
+ * directories live outside Vite's `root`, where Vite's auto-empty
40
+ * logic is intentionally cautious. Manual wipe keeps the behaviour
41
+ * explicit and the same for both passes.
42
+ * 3. Client build: bundles `main.tsx` + every route's lazy chunk into
43
+ * hashed `dist/assets/*.js`. `manifest: true` emits the chunk-graph
44
+ * manifest the SSG runner will read to inject per-route preloads.
45
+ * Vite also transforms `index.html` (rewriting the `<script>` tag
46
+ * from `/main.tsx` to the hashed entry) and writes it to
47
+ * `dist/index.html` — that becomes the SSG runner's per-route
48
+ * template.
49
+ * 4. SSR build: bundles `entry-server.tsx` for Node consumption into
50
+ * `node_modules/.mordoc/ssr/`. Vite preserves the dynamic
51
+ * `import('virtual:mordoc/page/...')` calls as runtime imports,
52
+ * code-split into sibling files, so the SSG runner can lazily load
53
+ * each route's content as it renders.
54
+ * 5. SSG runner: loads the SSR bundle, calls `render()` per route,
55
+ * writes the resulting HTML files. (Wired in a follow-up step.)
56
+ *
57
+ * The dev path is unaffected by any of this — its plugin instance still
58
+ * runs the pipeline itself, exactly as before. Build is the only caller
59
+ * that pre-loads `data`.
5
60
  */
6
- var __importDefault = (this && this.__importDefault) || function (mod) {
7
- return (mod && mod.__esModule) ? mod : { "default": mod };
8
- };
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.build = build;
11
- exports.parseBuildArgs = parseBuildArgs;
12
- const path_1 = __importDefault(require("path"));
13
- const Builder_1 = require("../build/Builder");
61
+ export async function runBuildCommand(options) {
62
+ const { projectRoot } = options;
63
+ const appRoot = getAppRoot();
64
+ const publicDir = path.join(projectRoot, 'public');
65
+ const { clientOutDir, ssrOutDir } = getOutDirs(projectRoot);
66
+ console.log('\n Mordoc build');
67
+ console.log(` Project: ${projectRoot}\n`);
68
+ console.log('→ running pipeline...');
69
+ const rawData = await runPipeline(projectRoot);
70
+ console.log(` ${rawData.pages.length} page(s) discovered\n`);
71
+ console.log('→ wiping previous output...');
72
+ await fs.rm(clientOutDir, { recursive: true, force: true });
73
+ await fs.rm(ssrOutDir, { recursive: true, force: true });
74
+ // Asset rewrite has to happen before either Vite pass: both bundles
75
+ // import `virtual:mordoc/assets` (transitively, via `main.tsx`'s
76
+ // ShellData assembly), and the SSG runner builds its `shellData`
77
+ // from the same `MordocData`. One rewrite, three consistent views.
78
+ // Note: this also creates `dist/_assets/` with the copied files.
79
+ // Vite's subsequent client build runs with `emptyOutDir: false` so
80
+ // those copies survive.
81
+ console.log('→ copying assets...');
82
+ const data = await copyAndRewriteAssets(rawData, clientOutDir);
83
+ console.log('→ building client bundle...');
84
+ await viteBuild({
85
+ configFile: false,
86
+ root: appRoot,
87
+ publicDir,
88
+ plugins: [
89
+ react(),
90
+ mordocVitePlugin({ projectRoot, data }),
91
+ ],
92
+ build: {
93
+ outDir: clientOutDir,
94
+ // We wiped above; suppress Vite's "outDir is outside root" guard.
95
+ // Also keeps `dist/_assets/` from being deleted between this
96
+ // build and the next phase.
97
+ emptyOutDir: false,
98
+ manifest: true,
99
+ },
100
+ });
101
+ console.log('→ building SSR bundle...');
102
+ await viteBuild({
103
+ configFile: false,
104
+ root: appRoot,
105
+ // The SSR pass produces a Node-loadable bundle in a throwaway
106
+ // intermediate; copying author assets into it is wasted I/O and
107
+ // would put them under `node_modules/.mordoc/ssr/` rather than
108
+ // `dist/`. Disable publicDir entirely for this pass.
109
+ publicDir: false,
110
+ plugins: [
111
+ react(),
112
+ mordocVitePlugin({ projectRoot, data }),
113
+ ],
114
+ build: {
115
+ outDir: ssrOutDir,
116
+ emptyOutDir: false,
117
+ ssr: 'entry-server.tsx',
118
+ },
119
+ });
120
+ // Declare the SSR output directory as an ESM scope.
121
+ //
122
+ // Vite emits the SSR bundle in ESM syntax (because mordoc's own
123
+ // package.json has `"type": "module"`, which Vite uses to pick the
124
+ // SSR output format). Without a package.json here, Node's loader
125
+ // walks up looking for `"type": "module"` and — because the bundle
126
+ // lives under the user project's `node_modules/.mordoc/ssr/`, and
127
+ // `node_modules/` acts as a package-scope boundary — falls back to
128
+ // CommonJS. The first `import { ... } from "..."` then SyntaxErrors.
129
+ //
130
+ // Dropping a one-liner package.json next to the bundle declares the
131
+ // scope unambiguously and is the standard pattern other SSR-emitting
132
+ // frameworks (Astro, SvelteKit, Nuxt, Remix) use for the same reason.
133
+ // The cleanup step at the end of this command wipes ssrOutDir
134
+ // entirely, so this file vanishes along with the rest.
135
+ await fs.writeFile(path.join(ssrOutDir, 'package.json'), '{"type":"module"}\n', 'utf-8');
136
+ console.log('\n→ rendering routes to static HTML...');
137
+ await runSsg({ data, clientOutDir, ssrOutDir });
138
+ // The SSR bundle is a build-time intermediate; once the SSG runner has
139
+ // finished rendering every route there's no consumer left for it.
140
+ // Wiping it keeps `node_modules/.mordoc/` from accumulating stale
141
+ // chunks across builds and reinforces the "anything not in dist/ is
142
+ // not deployable" mental model.
143
+ console.log('\n→ cleaning up SSR intermediate...');
144
+ await fs.rm(ssrOutDir, { recursive: true, force: true });
145
+ console.log('\n→ verifying output...');
146
+ await verifyBuildOutput(data, clientOutDir);
147
+ console.log('\n→ building search index...');
148
+ await runPagefindIndexer(data, clientOutDir);
149
+ console.log('\n✔ build complete');
150
+ console.log(` output → ${clientOutDir}\n`);
151
+ }
14
152
  /**
15
- * Execute the build command
153
+ * Defensive post-build checks.
154
+ *
155
+ * The SSG runner already throws on the obvious failure modes
156
+ * (`writeFile` errors, missing render export). These checks catch
157
+ * subtler regressions:
158
+ *
159
+ * 1. Every route in the pipeline produced a corresponding HTML file.
160
+ * Defense-in-depth — the runner walks `data.pages` to write, and
161
+ * this walks `data.pages` to read; a future refactor that skips
162
+ * a route silently would surface here.
163
+ *
164
+ * 2. The rendered root HTML still contains literal `$$mdtype` markers
165
+ * (the Markdoc Tag fingerprint) inside the hydration `<script>`.
166
+ * If the value is absent, the substitution mangled it (string form
167
+ * of `String.replace` collapsed `$$` → `$`), which would manifest
168
+ * on the client as the "Objects are not valid as a React child"
169
+ * crash the moment hydration tried to re-render. Cheapest possible
170
+ * regression test for that bug; runs in milliseconds.
171
+ * Skipped when no page has Markdoc content (empty project).
16
172
  */
17
- async function build(options = {}) {
18
- const startTime = Date.now();
19
- try {
20
- // Get project root (current working directory by default)
21
- const projectRoot = options.projectRoot || process.cwd();
22
- // Resolve output directory
23
- const outputDir = options.outputDir
24
- ? path_1.default.resolve(projectRoot, options.outputDir)
25
- : path_1.default.join(projectRoot, 'dist');
26
- // Create builder instance
27
- const builder = new Builder_1.Builder({
28
- projectRoot,
29
- outputDir,
30
- clean: options.clean ?? true,
31
- includeDrafts: options.drafts ?? false,
32
- verbose: options.verbose ?? false,
33
- });
34
- // Execute build
35
- await builder.build();
36
- // Calculate build time
37
- const buildTime = ((Date.now() - startTime) / 1000).toFixed(2);
38
- console.log(`\n⚡ Build completed in ${buildTime}s`);
39
- process.exit(0);
40
- }
41
- catch (error) {
42
- console.error('\n❌ Build failed:');
43
- console.error(error.message);
44
- if (options.verbose) {
45
- console.error('\nStack trace:');
46
- console.error(error.stack);
173
+ async function verifyBuildOutput(data, clientOutDir) {
174
+ for (const page of data.pages) {
175
+ const routePath = page.entry.routePath;
176
+ const expectedPath = routePath === '/'
177
+ ? path.join(clientOutDir, 'index.html')
178
+ : path.join(clientOutDir, routePath.slice(1), 'index.html');
179
+ try {
180
+ await fs.access(expectedPath);
181
+ }
182
+ catch {
183
+ throw new Error(`mordoc build: expected ${expectedPath} for route "${routePath}", but the file is missing.`);
47
184
  }
48
- process.exit(1);
49
185
  }
50
- }
51
- /**
52
- * Parse command-line arguments for build command
53
- */
54
- function parseBuildArgs(args) {
55
- const options = {};
56
- for (let i = 0; i < args.length; i++) {
57
- const arg = args[i];
58
- switch (arg) {
59
- case '--output':
60
- case '-o':
61
- options.outputDir = args[++i];
62
- break;
63
- case '--verbose':
64
- case '-v':
65
- options.verbose = true;
66
- break;
67
- case '--drafts':
68
- case '-d':
69
- options.drafts = true;
70
- break;
71
- case '--no-clean':
72
- options.clean = false;
73
- break;
74
- case '--help':
75
- case '-h':
76
- showBuildHelp();
77
- process.exit(0);
78
- break;
79
- default:
80
- if (arg.startsWith('-')) {
81
- console.warn(`Warning: Unknown option ${arg}`);
82
- }
83
- break;
186
+ const hasRenderableContent = data.pages.length > 0;
187
+ if (hasRenderableContent) {
188
+ const rootHtml = await fs.readFile(path.join(clientOutDir, 'index.html'), 'utf-8');
189
+ if (!rootHtml.includes('$$mdtype')) {
190
+ throw new Error('mordoc build: rendered dist/index.html does not contain "$$mdtype". ' +
191
+ 'The hydration data may have been mangled by string-form String.replace; ' +
192
+ 'check that all SSR template substitutions use the replacement-function form.');
84
193
  }
85
194
  }
86
- return options;
87
- }
88
- /**
89
- * Show help text for build command
90
- */
91
- function showBuildHelp() {
92
- console.log(`
93
- mordoc build - Generate static documentation site
94
-
95
- Usage:
96
- mordoc build [options]
97
-
98
- Options:
99
- -o, --output <dir> Output directory (default: dist)
100
- -v, --verbose Enable verbose logging
101
- -d, --drafts Include draft content in build
102
- --no-clean Don't clean output directory before build
103
- -h, --help Show this help message
104
-
105
- Examples:
106
- mordoc build
107
- mordoc build --output build
108
- mordoc build --verbose --drafts
109
- `);
110
195
  }
111
196
  //# sourceMappingURL=build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}