openmanual 0.4.0 → 0.5.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 (702) hide show
  1. package/dist/abap-OIONGAB3.js +13 -0
  2. package/dist/abap-OIONGAB3.js.map +1 -0
  3. package/dist/actionscript-3-52AOU7OT.js +13 -0
  4. package/dist/actionscript-3-52AOU7OT.js.map +1 -0
  5. package/dist/ada-UVPLUBO3.js +13 -0
  6. package/dist/ada-UVPLUBO3.js.map +1 -0
  7. package/dist/andromeeda-PNYQ34YD.js +10 -0
  8. package/dist/andromeeda-PNYQ34YD.js.map +1 -0
  9. package/dist/angular-html-B7QJGNNW.js +13 -0
  10. package/dist/angular-html-B7QJGNNW.js.map +1 -0
  11. package/dist/angular-ts-PRKX4BFC.js +47 -0
  12. package/dist/angular-ts-PRKX4BFC.js.map +1 -0
  13. package/dist/apache-TOQ5VJI4.js +13 -0
  14. package/dist/apache-TOQ5VJI4.js.map +1 -0
  15. package/dist/apex-6SXBFDYJ.js +13 -0
  16. package/dist/apex-6SXBFDYJ.js.map +1 -0
  17. package/dist/apl-5OLSRRJ7.js +34 -0
  18. package/dist/apl-5OLSRRJ7.js.map +1 -0
  19. package/dist/applescript-6QI7VOKZ.js +13 -0
  20. package/dist/applescript-6QI7VOKZ.js.map +1 -0
  21. package/dist/ara-LBJXCAAP.js +13 -0
  22. package/dist/ara-LBJXCAAP.js.map +1 -0
  23. package/dist/asciidoc-BX2EYBZA.js +13 -0
  24. package/dist/asciidoc-BX2EYBZA.js.map +1 -0
  25. package/dist/asm-KSLQQMYT.js +13 -0
  26. package/dist/asm-KSLQQMYT.js.map +1 -0
  27. package/dist/astro-7LI2GYJB.js +37 -0
  28. package/dist/astro-7LI2GYJB.js.map +1 -0
  29. package/dist/aurora-x-OOZDPPE3.js +10 -0
  30. package/dist/aurora-x-OOZDPPE3.js.map +1 -0
  31. package/dist/awk-AYL4EALZ.js +13 -0
  32. package/dist/awk-AYL4EALZ.js.map +1 -0
  33. package/dist/ayu-dark-35XPN3M4.js +10 -0
  34. package/dist/ayu-dark-35XPN3M4.js.map +1 -0
  35. package/dist/ayu-light-Q44KLOGR.js +10 -0
  36. package/dist/ayu-light-Q44KLOGR.js.map +1 -0
  37. package/dist/ayu-mirage-H7JP4X5F.js +10 -0
  38. package/dist/ayu-mirage-H7JP4X5F.js.map +1 -0
  39. package/dist/ballerina-N3CDDL43.js +13 -0
  40. package/dist/ballerina-N3CDDL43.js.map +1 -0
  41. package/dist/bat-GQXCLK3K.js +13 -0
  42. package/dist/bat-GQXCLK3K.js.map +1 -0
  43. package/dist/beancount-2MRA3S3C.js +13 -0
  44. package/dist/beancount-2MRA3S3C.js.map +1 -0
  45. package/dist/berry-OWT2UGAE.js +13 -0
  46. package/dist/berry-OWT2UGAE.js.map +1 -0
  47. package/dist/bibtex-5PYFT5IJ.js +13 -0
  48. package/dist/bibtex-5PYFT5IJ.js.map +1 -0
  49. package/dist/bicep-GMIRI6HP.js +13 -0
  50. package/dist/bicep-GMIRI6HP.js.map +1 -0
  51. package/dist/bin.js +197 -18
  52. package/dist/bin.js.map +1 -1
  53. package/dist/bird2-XPYCGAYQ.js +13 -0
  54. package/dist/bird2-XPYCGAYQ.js.map +1 -0
  55. package/dist/blade-XL632KEW.js +42 -0
  56. package/dist/blade-XL632KEW.js.map +1 -0
  57. package/dist/bsl-4P2Z54SE.js +17 -0
  58. package/dist/bsl-4P2Z54SE.js.map +1 -0
  59. package/dist/c-HX5WGYK7.js +10 -0
  60. package/dist/c-HX5WGYK7.js.map +1 -0
  61. package/dist/c3-FIK747VW.js +13 -0
  62. package/dist/c3-FIK747VW.js.map +1 -0
  63. package/dist/cadence-JFO3LACC.js +13 -0
  64. package/dist/cadence-JFO3LACC.js.map +1 -0
  65. package/dist/cairo-2DVFRXCF.js +17 -0
  66. package/dist/cairo-2DVFRXCF.js.map +1 -0
  67. package/dist/catppuccin-frappe-PZKGUS2K.js +10 -0
  68. package/dist/catppuccin-frappe-PZKGUS2K.js.map +1 -0
  69. package/dist/catppuccin-latte-TH6HVVI4.js +10 -0
  70. package/dist/catppuccin-latte-TH6HVVI4.js.map +1 -0
  71. package/dist/catppuccin-macchiato-UOGNETRN.js +10 -0
  72. package/dist/catppuccin-macchiato-UOGNETRN.js.map +1 -0
  73. package/dist/catppuccin-mocha-QWPARMU3.js +10 -0
  74. package/dist/catppuccin-mocha-QWPARMU3.js.map +1 -0
  75. package/dist/chunk-2NU4HWY4.js +13 -0
  76. package/dist/chunk-2NU4HWY4.js.map +1 -0
  77. package/dist/chunk-3F4Y7JN2.js +17 -0
  78. package/dist/chunk-3F4Y7JN2.js.map +1 -0
  79. package/dist/chunk-3X3MI3DW.js +13 -0
  80. package/dist/chunk-3X3MI3DW.js.map +1 -0
  81. package/dist/chunk-45SRSGCW.js +13 -0
  82. package/dist/chunk-45SRSGCW.js.map +1 -0
  83. package/dist/chunk-4FJUKZG3.js +13 -0
  84. package/dist/chunk-4FJUKZG3.js.map +1 -0
  85. package/dist/chunk-4MALS34G.js +35 -0
  86. package/dist/chunk-4MALS34G.js.map +1 -0
  87. package/dist/chunk-5FIGESKT.js +13 -0
  88. package/dist/chunk-5FIGESKT.js.map +1 -0
  89. package/dist/chunk-5X2NHV4S.js +13 -0
  90. package/dist/chunk-5X2NHV4S.js.map +1 -0
  91. package/dist/chunk-7A6IZ632.js +13 -0
  92. package/dist/chunk-7A6IZ632.js.map +1 -0
  93. package/dist/chunk-7V46CZ55.js +21 -0
  94. package/dist/chunk-7V46CZ55.js.map +1 -0
  95. package/dist/chunk-7WF7O3W2.js +13 -0
  96. package/dist/chunk-7WF7O3W2.js.map +1 -0
  97. package/dist/chunk-ACCNZVZT.js +13 -0
  98. package/dist/chunk-ACCNZVZT.js.map +1 -0
  99. package/dist/chunk-CGROQDHY.js +13 -0
  100. package/dist/chunk-CGROQDHY.js.map +1 -0
  101. package/dist/chunk-D47AX3SB.js +13 -0
  102. package/dist/chunk-D47AX3SB.js.map +1 -0
  103. package/dist/chunk-DVCKPK6G.js +13 -0
  104. package/dist/chunk-DVCKPK6G.js.map +1 -0
  105. package/dist/chunk-EFTGR6G5.js +12 -0
  106. package/dist/chunk-EFTGR6G5.js.map +1 -0
  107. package/dist/chunk-EJB4DTP4.js +13 -0
  108. package/dist/chunk-EJB4DTP4.js.map +1 -0
  109. package/dist/chunk-EVPFTNNL.js +13 -0
  110. package/dist/chunk-EVPFTNNL.js.map +1 -0
  111. package/dist/chunk-EWD4P4L4.js +13 -0
  112. package/dist/chunk-EWD4P4L4.js.map +1 -0
  113. package/dist/chunk-EWOB5SOP.js +13 -0
  114. package/dist/chunk-EWOB5SOP.js.map +1 -0
  115. package/dist/chunk-F6FOS634.js +13 -0
  116. package/dist/chunk-F6FOS634.js.map +1 -0
  117. package/dist/chunk-FQ5D7Q7V.js +13 -0
  118. package/dist/chunk-FQ5D7Q7V.js.map +1 -0
  119. package/dist/chunk-GLM64R75.js +13 -0
  120. package/dist/chunk-GLM64R75.js.map +1 -0
  121. package/dist/chunk-GVSPMNDT.js +13 -0
  122. package/dist/chunk-GVSPMNDT.js.map +1 -0
  123. package/dist/chunk-HSBEFFM4.js +17 -0
  124. package/dist/chunk-HSBEFFM4.js.map +1 -0
  125. package/dist/chunk-HY77RMR2.js +37 -0
  126. package/dist/chunk-HY77RMR2.js.map +1 -0
  127. package/dist/chunk-IWRVWYQY.js +13 -0
  128. package/dist/chunk-IWRVWYQY.js.map +1 -0
  129. package/dist/chunk-J7MMABOP.js +33 -0
  130. package/dist/chunk-J7MMABOP.js.map +1 -0
  131. package/dist/chunk-JH2WY4FX.js +17 -0
  132. package/dist/chunk-JH2WY4FX.js.map +1 -0
  133. package/dist/chunk-JSL2W24F.js +17 -0
  134. package/dist/chunk-JSL2W24F.js.map +1 -0
  135. package/dist/chunk-JYH5S7JT.js +53 -0
  136. package/dist/chunk-JYH5S7JT.js.map +1 -0
  137. package/dist/chunk-KLRUWISS.js +13 -0
  138. package/dist/chunk-KLRUWISS.js.map +1 -0
  139. package/dist/chunk-KMV4BLLP.js +61 -0
  140. package/dist/chunk-KMV4BLLP.js.map +1 -0
  141. package/dist/chunk-KV2X4NKZ.js +13 -0
  142. package/dist/chunk-KV2X4NKZ.js.map +1 -0
  143. package/dist/chunk-KYHJAX7P.js +13 -0
  144. package/dist/chunk-KYHJAX7P.js.map +1 -0
  145. package/dist/chunk-LONV2RQZ.js +13 -0
  146. package/dist/chunk-LONV2RQZ.js.map +1 -0
  147. package/dist/chunk-LSNIGAHK.js +13 -0
  148. package/dist/chunk-LSNIGAHK.js.map +1 -0
  149. package/dist/chunk-LZXIRJ55.js +17 -0
  150. package/dist/chunk-LZXIRJ55.js.map +1 -0
  151. package/dist/chunk-OD5MEICB.js +17 -0
  152. package/dist/chunk-OD5MEICB.js.map +1 -0
  153. package/dist/chunk-OG6RSZMP.js +13 -0
  154. package/dist/chunk-OG6RSZMP.js.map +1 -0
  155. package/dist/chunk-TJI5DPIB.js +29 -0
  156. package/dist/chunk-TJI5DPIB.js.map +1 -0
  157. package/dist/chunk-UCJ3RYR5.js +13 -0
  158. package/dist/chunk-UCJ3RYR5.js.map +1 -0
  159. package/dist/chunk-UFRMH37Y.js +13 -0
  160. package/dist/chunk-UFRMH37Y.js.map +1 -0
  161. package/dist/chunk-VYMRYGHZ.js +21 -0
  162. package/dist/chunk-VYMRYGHZ.js.map +1 -0
  163. package/dist/chunk-WKWPHZ44.js +13 -0
  164. package/dist/chunk-WKWPHZ44.js.map +1 -0
  165. package/dist/chunk-XHGDEHHB.js +13 -0
  166. package/dist/chunk-XHGDEHHB.js.map +1 -0
  167. package/dist/clarity-NPP5GKWZ.js +13 -0
  168. package/dist/clarity-NPP5GKWZ.js.map +1 -0
  169. package/dist/clojure-MZA5IFE5.js +13 -0
  170. package/dist/clojure-MZA5IFE5.js.map +1 -0
  171. package/dist/cmake-D6TKIWQB.js +10 -0
  172. package/dist/cmake-D6TKIWQB.js.map +1 -0
  173. package/dist/cobol-TKHHQL63.js +23 -0
  174. package/dist/cobol-TKHHQL63.js.map +1 -0
  175. package/dist/codeowners-TW22MT74.js +13 -0
  176. package/dist/codeowners-TW22MT74.js.map +1 -0
  177. package/dist/codeql-CPJUE436.js +13 -0
  178. package/dist/codeql-CPJUE436.js.map +1 -0
  179. package/dist/coffee-YGIEQHPR.js +17 -0
  180. package/dist/coffee-YGIEQHPR.js.map +1 -0
  181. package/dist/common-lisp-IBPBPO3Y.js +13 -0
  182. package/dist/common-lisp-IBPBPO3Y.js.map +1 -0
  183. package/dist/coq-IVPGIHFI.js +13 -0
  184. package/dist/coq-IVPGIHFI.js.map +1 -0
  185. package/dist/cpp-IPXLZMUP.js +14 -0
  186. package/dist/cpp-IPXLZMUP.js.map +1 -0
  187. package/dist/crystal-7Z3A3IBI.js +37 -0
  188. package/dist/crystal-7Z3A3IBI.js.map +1 -0
  189. package/dist/csharp-CPGXHCSW.js +10 -0
  190. package/dist/csharp-CPGXHCSW.js.map +1 -0
  191. package/dist/css-KPPXCIA6.js +10 -0
  192. package/dist/css-KPPXCIA6.js.map +1 -0
  193. package/dist/csv-D2GHGC7M.js +10 -0
  194. package/dist/csv-D2GHGC7M.js.map +1 -0
  195. package/dist/cue-3V7JIDQI.js +13 -0
  196. package/dist/cue-3V7JIDQI.js.map +1 -0
  197. package/dist/cypher-HKU24CAA.js +13 -0
  198. package/dist/cypher-HKU24CAA.js.map +1 -0
  199. package/dist/d-H25N5NS4.js +13 -0
  200. package/dist/d-H25N5NS4.js.map +1 -0
  201. package/dist/dark-plus-7JAA75WV.js +10 -0
  202. package/dist/dark-plus-7JAA75WV.js.map +1 -0
  203. package/dist/dart-26I3L3VE.js +13 -0
  204. package/dist/dart-26I3L3VE.js.map +1 -0
  205. package/dist/dax-D7J7SJND.js +13 -0
  206. package/dist/dax-D7J7SJND.js.map +1 -0
  207. package/dist/desktop-52JIJ5HG.js +13 -0
  208. package/dist/desktop-52JIJ5HG.js.map +1 -0
  209. package/dist/diff-EENHXQ3P.js +10 -0
  210. package/dist/diff-EENHXQ3P.js.map +1 -0
  211. package/dist/dist-IK4UEFEW.js +12874 -0
  212. package/dist/dist-IK4UEFEW.js.map +1 -0
  213. package/dist/docker-KHPFVXI4.js +13 -0
  214. package/dist/docker-KHPFVXI4.js.map +1 -0
  215. package/dist/dotenv-Z4NB7W2F.js +13 -0
  216. package/dist/dotenv-Z4NB7W2F.js.map +1 -0
  217. package/dist/dracula-UP4TVG65.js +10 -0
  218. package/dist/dracula-UP4TVG65.js.map +1 -0
  219. package/dist/dracula-soft-3YQJBUUC.js +10 -0
  220. package/dist/dracula-soft-3YQJBUUC.js.map +1 -0
  221. package/dist/dream-maker-WVXCYVKP.js +13 -0
  222. package/dist/dream-maker-WVXCYVKP.js.map +1 -0
  223. package/dist/edge-DQHKHJK4.js +27 -0
  224. package/dist/edge-DQHKHJK4.js.map +1 -0
  225. package/dist/elixir-PZQWKSHM.js +19 -0
  226. package/dist/elixir-PZQWKSHM.js.map +1 -0
  227. package/dist/elm-ONXYHZ2T.js +18 -0
  228. package/dist/elm-ONXYHZ2T.js.map +1 -0
  229. package/dist/emacs-lisp-X6XADQ2E.js +13 -0
  230. package/dist/emacs-lisp-X6XADQ2E.js.map +1 -0
  231. package/dist/erb-WFCOZLGK.js +38 -0
  232. package/dist/erb-WFCOZLGK.js.map +1 -0
  233. package/dist/erlang-IMB62VEP.js +17 -0
  234. package/dist/erlang-IMB62VEP.js.map +1 -0
  235. package/dist/everforest-dark-2KRKUIEW.js +10 -0
  236. package/dist/everforest-dark-2KRKUIEW.js.map +1 -0
  237. package/dist/everforest-light-XHONKBCV.js +10 -0
  238. package/dist/everforest-light-XHONKBCV.js.map +1 -0
  239. package/dist/fennel-TUZQSNNG.js +13 -0
  240. package/dist/fennel-TUZQSNNG.js.map +1 -0
  241. package/dist/fish-5BPFLVW6.js +13 -0
  242. package/dist/fish-5BPFLVW6.js.map +1 -0
  243. package/dist/fluent-TCXVW7FH.js +13 -0
  244. package/dist/fluent-TCXVW7FH.js.map +1 -0
  245. package/dist/fortran-fixed-form-TF2NXXEE.js +17 -0
  246. package/dist/fortran-fixed-form-TF2NXXEE.js.map +1 -0
  247. package/dist/fortran-free-form-6DXIVEG3.js +10 -0
  248. package/dist/fortran-free-form-6DXIVEG3.js.map +1 -0
  249. package/dist/fsharp-BQNXE4RP.js +17 -0
  250. package/dist/fsharp-BQNXE4RP.js.map +1 -0
  251. package/dist/gdresource-TRG2FJJR.js +21 -0
  252. package/dist/gdresource-TRG2FJJR.js.map +1 -0
  253. package/dist/gdscript-ZURD53DR.js +10 -0
  254. package/dist/gdscript-ZURD53DR.js.map +1 -0
  255. package/dist/gdshader-RSBBVRJN.js +10 -0
  256. package/dist/gdshader-RSBBVRJN.js.map +1 -0
  257. package/dist/genie-DPACRG3L.js +13 -0
  258. package/dist/genie-DPACRG3L.js.map +1 -0
  259. package/dist/gherkin-RDQ6NRF6.js +13 -0
  260. package/dist/gherkin-RDQ6NRF6.js.map +1 -0
  261. package/dist/git-commit-PVRGLHWO.js +17 -0
  262. package/dist/git-commit-PVRGLHWO.js.map +1 -0
  263. package/dist/git-rebase-YISDBHZJ.js +17 -0
  264. package/dist/git-rebase-YISDBHZJ.js.map +1 -0
  265. package/dist/github-dark-ATXZUJY6.js +10 -0
  266. package/dist/github-dark-ATXZUJY6.js.map +1 -0
  267. package/dist/github-dark-default-2DTBRPOC.js +10 -0
  268. package/dist/github-dark-default-2DTBRPOC.js.map +1 -0
  269. package/dist/github-dark-dimmed-KZCSHKQE.js +10 -0
  270. package/dist/github-dark-dimmed-KZCSHKQE.js.map +1 -0
  271. package/dist/github-dark-high-contrast-KEED5HIE.js +10 -0
  272. package/dist/github-dark-high-contrast-KEED5HIE.js.map +1 -0
  273. package/dist/github-light-4Y24K4AI.js +10 -0
  274. package/dist/github-light-4Y24K4AI.js.map +1 -0
  275. package/dist/github-light-default-2KZ756EL.js +10 -0
  276. package/dist/github-light-default-2KZ756EL.js.map +1 -0
  277. package/dist/github-light-high-contrast-4IX4WSE2.js +10 -0
  278. package/dist/github-light-high-contrast-4IX4WSE2.js.map +1 -0
  279. package/dist/gleam-ZCJ7A5U5.js +13 -0
  280. package/dist/gleam-ZCJ7A5U5.js.map +1 -0
  281. package/dist/glimmer-js-XGXPLPWZ.js +29 -0
  282. package/dist/glimmer-js-XGXPLPWZ.js.map +1 -0
  283. package/dist/glimmer-ts-BH7XIBPO.js +29 -0
  284. package/dist/glimmer-ts-BH7XIBPO.js.map +1 -0
  285. package/dist/glsl-MKHUOFMO.js +11 -0
  286. package/dist/glsl-MKHUOFMO.js.map +1 -0
  287. package/dist/gn-D3CNA5PC.js +13 -0
  288. package/dist/gn-D3CNA5PC.js.map +1 -0
  289. package/dist/gnuplot-RGIQ2AIA.js +13 -0
  290. package/dist/gnuplot-RGIQ2AIA.js.map +1 -0
  291. package/dist/go-53LXO5XN.js +10 -0
  292. package/dist/go-53LXO5XN.js.map +1 -0
  293. package/dist/graphql-IN62PBSK.js +14 -0
  294. package/dist/graphql-IN62PBSK.js.map +1 -0
  295. package/dist/groovy-O2KPKFIE.js +13 -0
  296. package/dist/groovy-O2KPKFIE.js.map +1 -0
  297. package/dist/gruvbox-dark-hard-IVYZCHZH.js +10 -0
  298. package/dist/gruvbox-dark-hard-IVYZCHZH.js.map +1 -0
  299. package/dist/gruvbox-dark-medium-BQBOZGI2.js +10 -0
  300. package/dist/gruvbox-dark-medium-BQBOZGI2.js.map +1 -0
  301. package/dist/gruvbox-dark-soft-VXYTKLH4.js +10 -0
  302. package/dist/gruvbox-dark-soft-VXYTKLH4.js.map +1 -0
  303. package/dist/gruvbox-light-hard-MG66I4KD.js +10 -0
  304. package/dist/gruvbox-light-hard-MG66I4KD.js.map +1 -0
  305. package/dist/gruvbox-light-medium-2NHA22EJ.js +10 -0
  306. package/dist/gruvbox-light-medium-2NHA22EJ.js.map +1 -0
  307. package/dist/gruvbox-light-soft-QLCSXZBF.js +10 -0
  308. package/dist/gruvbox-light-soft-QLCSXZBF.js.map +1 -0
  309. package/dist/hack-FAH2CMQP.js +23 -0
  310. package/dist/hack-FAH2CMQP.js.map +1 -0
  311. package/dist/haml-UN53BQLH.js +12 -0
  312. package/dist/haml-UN53BQLH.js.map +1 -0
  313. package/dist/handlebars-2EYIMN22.js +29 -0
  314. package/dist/handlebars-2EYIMN22.js.map +1 -0
  315. package/dist/haskell-SJOTATBC.js +13 -0
  316. package/dist/haskell-SJOTATBC.js.map +1 -0
  317. package/dist/haxe-M6GFONAG.js +10 -0
  318. package/dist/haxe-M6GFONAG.js.map +1 -0
  319. package/dist/hcl-JZTMBVNA.js +13 -0
  320. package/dist/hcl-JZTMBVNA.js.map +1 -0
  321. package/dist/hjson-IZLKL5XO.js +13 -0
  322. package/dist/hjson-IZLKL5XO.js.map +1 -0
  323. package/dist/hlsl-N7WEF5ZL.js +10 -0
  324. package/dist/hlsl-N7WEF5ZL.js.map +1 -0
  325. package/dist/horizon-BIJ7EBGZ.js +10 -0
  326. package/dist/horizon-BIJ7EBGZ.js.map +1 -0
  327. package/dist/horizon-bright-PY5WKFRM.js +10 -0
  328. package/dist/horizon-bright-PY5WKFRM.js.map +1 -0
  329. package/dist/houston-IRSIWZ5F.js +10 -0
  330. package/dist/houston-IRSIWZ5F.js.map +1 -0
  331. package/dist/html-H3MTSEZB.js +12 -0
  332. package/dist/html-H3MTSEZB.js.map +1 -0
  333. package/dist/html-derivative-RU3XOTPU.js +13 -0
  334. package/dist/html-derivative-RU3XOTPU.js.map +1 -0
  335. package/dist/http-EV4J3RO2.js +34 -0
  336. package/dist/http-EV4J3RO2.js.map +1 -0
  337. package/dist/hurl-KDQCI4ZB.js +30 -0
  338. package/dist/hurl-KDQCI4ZB.js.map +1 -0
  339. package/dist/hxml-U546ZDA7.js +17 -0
  340. package/dist/hxml-U546ZDA7.js.map +1 -0
  341. package/dist/hy-XMJ6CG3G.js +13 -0
  342. package/dist/hy-XMJ6CG3G.js.map +1 -0
  343. package/dist/imba-RMYNDPBU.js +13 -0
  344. package/dist/imba-RMYNDPBU.js.map +1 -0
  345. package/dist/index.d.ts +4 -0
  346. package/dist/index.js +2 -0
  347. package/dist/index.js.map +1 -1
  348. package/dist/ini-DYOPRKIY.js +13 -0
  349. package/dist/ini-DYOPRKIY.js.map +1 -0
  350. package/dist/java-ZXO7MQDK.js +10 -0
  351. package/dist/java-ZXO7MQDK.js.map +1 -0
  352. package/dist/javascript-YSVXC6BW.js +10 -0
  353. package/dist/javascript-YSVXC6BW.js.map +1 -0
  354. package/dist/jinja-L3BK5QB3.js +26 -0
  355. package/dist/jinja-L3BK5QB3.js.map +1 -0
  356. package/dist/jison-LLL7WJ3N.js +17 -0
  357. package/dist/jison-LLL7WJ3N.js.map +1 -0
  358. package/dist/json-Y42VODYI.js +10 -0
  359. package/dist/json-Y42VODYI.js.map +1 -0
  360. package/dist/json5-5IB47OAD.js +13 -0
  361. package/dist/json5-5IB47OAD.js.map +1 -0
  362. package/dist/jsonc-VJSJPSWG.js +13 -0
  363. package/dist/jsonc-VJSJPSWG.js.map +1 -0
  364. package/dist/jsonl-NDJTP7QZ.js +13 -0
  365. package/dist/jsonl-NDJTP7QZ.js.map +1 -0
  366. package/dist/jsonnet-F7JDGRUO.js +13 -0
  367. package/dist/jsonnet-F7JDGRUO.js.map +1 -0
  368. package/dist/jssm-YYI236OJ.js +13 -0
  369. package/dist/jssm-YYI236OJ.js.map +1 -0
  370. package/dist/jsx-CYZIPLDK.js +10 -0
  371. package/dist/jsx-CYZIPLDK.js.map +1 -0
  372. package/dist/julia-VNJ2KPXQ.js +36 -0
  373. package/dist/julia-VNJ2KPXQ.js.map +1 -0
  374. package/dist/just-Z57HYB5X.js +52 -0
  375. package/dist/just-Z57HYB5X.js.map +1 -0
  376. package/dist/kanagawa-dragon-GE7YZ45R.js +10 -0
  377. package/dist/kanagawa-dragon-GE7YZ45R.js.map +1 -0
  378. package/dist/kanagawa-lotus-PEYXZ2KU.js +10 -0
  379. package/dist/kanagawa-lotus-PEYXZ2KU.js.map +1 -0
  380. package/dist/kanagawa-wave-BI3AVCUP.js +10 -0
  381. package/dist/kanagawa-wave-BI3AVCUP.js.map +1 -0
  382. package/dist/kdl-FC2Z5VI7.js +13 -0
  383. package/dist/kdl-FC2Z5VI7.js.map +1 -0
  384. package/dist/kotlin-6ZUGSXNF.js +13 -0
  385. package/dist/kotlin-6ZUGSXNF.js.map +1 -0
  386. package/dist/kusto-5PJ6WXT7.js +13 -0
  387. package/dist/kusto-5PJ6WXT7.js.map +1 -0
  388. package/dist/laserwave-DA7PYWAX.js +10 -0
  389. package/dist/laserwave-DA7PYWAX.js.map +1 -0
  390. package/dist/latex-CCTIAQ4N.js +18 -0
  391. package/dist/latex-CCTIAQ4N.js.map +1 -0
  392. package/dist/lean-LEPFNIOH.js +13 -0
  393. package/dist/lean-LEPFNIOH.js.map +1 -0
  394. package/dist/less-D3MV4J2Y.js +10 -0
  395. package/dist/less-D3MV4J2Y.js.map +1 -0
  396. package/dist/light-plus-WK3VXKRE.js +10 -0
  397. package/dist/light-plus-WK3VXKRE.js.map +1 -0
  398. package/dist/liquid-3FQO6ORO.js +29 -0
  399. package/dist/liquid-3FQO6ORO.js.map +1 -0
  400. package/dist/llvm-NWAT36VK.js +13 -0
  401. package/dist/llvm-NWAT36VK.js.map +1 -0
  402. package/dist/log-S33QVVJV.js +13 -0
  403. package/dist/log-S33QVVJV.js.map +1 -0
  404. package/dist/logo-KQN4SWAH.js +13 -0
  405. package/dist/logo-KQN4SWAH.js.map +1 -0
  406. package/dist/lua-LBAGQE4V.js +11 -0
  407. package/dist/lua-LBAGQE4V.js.map +1 -0
  408. package/dist/luau-IYROLH3D.js +13 -0
  409. package/dist/luau-IYROLH3D.js.map +1 -0
  410. package/dist/make-7T2OSLFM.js +13 -0
  411. package/dist/make-7T2OSLFM.js.map +1 -0
  412. package/dist/markdown-N4M3V5UL.js +10 -0
  413. package/dist/markdown-N4M3V5UL.js.map +1 -0
  414. package/dist/marko-SYB3GEIW.js +29 -0
  415. package/dist/marko-SYB3GEIW.js.map +1 -0
  416. package/dist/material-theme-PQKWJFSU.js +10 -0
  417. package/dist/material-theme-PQKWJFSU.js.map +1 -0
  418. package/dist/material-theme-darker-PKUQ5IT2.js +10 -0
  419. package/dist/material-theme-darker-PKUQ5IT2.js.map +1 -0
  420. package/dist/material-theme-lighter-JUXBKIX7.js +10 -0
  421. package/dist/material-theme-lighter-JUXBKIX7.js.map +1 -0
  422. package/dist/material-theme-ocean-HIBEHTIJ.js +10 -0
  423. package/dist/material-theme-ocean-HIBEHTIJ.js.map +1 -0
  424. package/dist/material-theme-palenight-RCL26WGX.js +10 -0
  425. package/dist/material-theme-palenight-RCL26WGX.js.map +1 -0
  426. package/dist/matlab-A3EYMBUK.js +13 -0
  427. package/dist/matlab-A3EYMBUK.js.map +1 -0
  428. package/dist/mdc-FMH76JEQ.js +28 -0
  429. package/dist/mdc-FMH76JEQ.js.map +1 -0
  430. package/dist/mdx-6ZGFELNT.js +13 -0
  431. package/dist/mdx-6ZGFELNT.js.map +1 -0
  432. package/dist/mermaid-R5IVJFNZ.js +13 -0
  433. package/dist/mermaid-R5IVJFNZ.js.map +1 -0
  434. package/dist/min-dark-6LUBHVGS.js +10 -0
  435. package/dist/min-dark-6LUBHVGS.js.map +1 -0
  436. package/dist/min-light-UVJPNRVZ.js +10 -0
  437. package/dist/min-light-UVJPNRVZ.js.map +1 -0
  438. package/dist/mipsasm-WVCXDJAI.js +13 -0
  439. package/dist/mipsasm-WVCXDJAI.js.map +1 -0
  440. package/dist/mojo-RGYVUF4A.js +13 -0
  441. package/dist/mojo-RGYVUF4A.js.map +1 -0
  442. package/dist/monokai-J4HDHSER.js +10 -0
  443. package/dist/monokai-J4HDHSER.js.map +1 -0
  444. package/dist/moonbit-SPUKILHT.js +13 -0
  445. package/dist/moonbit-SPUKILHT.js.map +1 -0
  446. package/dist/move-RXOWUL52.js +13 -0
  447. package/dist/move-RXOWUL52.js.map +1 -0
  448. package/dist/narrat-XNOYFCAC.js +13 -0
  449. package/dist/narrat-XNOYFCAC.js.map +1 -0
  450. package/dist/nextflow-CDYVUFID.js +17 -0
  451. package/dist/nextflow-CDYVUFID.js.map +1 -0
  452. package/dist/nextflow-groovy-K37Z4G44.js +10 -0
  453. package/dist/nextflow-groovy-K37Z4G44.js.map +1 -0
  454. package/dist/nginx-4MRZQUIQ.js +18 -0
  455. package/dist/nginx-4MRZQUIQ.js.map +1 -0
  456. package/dist/night-owl-MOWLIUF5.js +10 -0
  457. package/dist/night-owl-MOWLIUF5.js.map +1 -0
  458. package/dist/night-owl-light-NUOFI4AJ.js +10 -0
  459. package/dist/night-owl-light-NUOFI4AJ.js.map +1 -0
  460. package/dist/nim-UNBRWZWE.js +42 -0
  461. package/dist/nim-UNBRWZWE.js.map +1 -0
  462. package/dist/nix-EEP6QNSD.js +20 -0
  463. package/dist/nix-EEP6QNSD.js.map +1 -0
  464. package/dist/nord-W3FX3CZJ.js +10 -0
  465. package/dist/nord-W3FX3CZJ.js.map +1 -0
  466. package/dist/nushell-DJUNIFVO.js +13 -0
  467. package/dist/nushell-DJUNIFVO.js.map +1 -0
  468. package/dist/objective-c-5A475WY7.js +13 -0
  469. package/dist/objective-c-5A475WY7.js.map +1 -0
  470. package/dist/objective-cpp-AHTDUOST.js +13 -0
  471. package/dist/objective-cpp-AHTDUOST.js.map +1 -0
  472. package/dist/ocaml-PR2K45BL.js +13 -0
  473. package/dist/ocaml-PR2K45BL.js.map +1 -0
  474. package/dist/odin-TKSLSJMK.js +13 -0
  475. package/dist/odin-TKSLSJMK.js.map +1 -0
  476. package/dist/one-dark-pro-XSKG2KQL.js +10 -0
  477. package/dist/one-dark-pro-XSKG2KQL.js.map +1 -0
  478. package/dist/one-light-36OPSWVK.js +10 -0
  479. package/dist/one-light-36OPSWVK.js.map +1 -0
  480. package/dist/openscad-GCPJCH2R.js +13 -0
  481. package/dist/openscad-GCPJCH2R.js.map +1 -0
  482. package/dist/pascal-22S53NMM.js +13 -0
  483. package/dist/pascal-22S53NMM.js.map +1 -0
  484. package/dist/perl-DIRQTRPV.js +16 -0
  485. package/dist/perl-DIRQTRPV.js.map +1 -0
  486. package/dist/php-EYPD2A4L.js +17 -0
  487. package/dist/php-EYPD2A4L.js.map +1 -0
  488. package/dist/pkl-KDOB7MX4.js +13 -0
  489. package/dist/pkl-KDOB7MX4.js.map +1 -0
  490. package/dist/plastic-2YIKOL7V.js +10 -0
  491. package/dist/plastic-2YIKOL7V.js.map +1 -0
  492. package/dist/plsql-O23NROBK.js +13 -0
  493. package/dist/plsql-O23NROBK.js.map +1 -0
  494. package/dist/po-Y62DNBPF.js +13 -0
  495. package/dist/po-Y62DNBPF.js.map +1 -0
  496. package/dist/poimandres-DIZBWIEC.js +10 -0
  497. package/dist/poimandres-DIZBWIEC.js.map +1 -0
  498. package/dist/polar-7FP2IZWH.js +13 -0
  499. package/dist/polar-7FP2IZWH.js.map +1 -0
  500. package/dist/postcss-FFOCB4H2.js +10 -0
  501. package/dist/postcss-FFOCB4H2.js.map +1 -0
  502. package/dist/powerquery-NTWSHYRV.js +13 -0
  503. package/dist/powerquery-NTWSHYRV.js.map +1 -0
  504. package/dist/powershell-VY6RLXRD.js +13 -0
  505. package/dist/powershell-VY6RLXRD.js.map +1 -0
  506. package/dist/prisma-Y5NIRVUR.js +13 -0
  507. package/dist/prisma-Y5NIRVUR.js.map +1 -0
  508. package/dist/prolog-5VGFZM4H.js +13 -0
  509. package/dist/prolog-5VGFZM4H.js.map +1 -0
  510. package/dist/proto-W6BP4RZO.js +13 -0
  511. package/dist/proto-W6BP4RZO.js.map +1 -0
  512. package/dist/pug-YDCQX4ER.js +25 -0
  513. package/dist/pug-YDCQX4ER.js.map +1 -0
  514. package/dist/puppet-RXWFCA35.js +13 -0
  515. package/dist/puppet-RXWFCA35.js.map +1 -0
  516. package/dist/purescript-5ZGU7AYO.js +13 -0
  517. package/dist/purescript-5ZGU7AYO.js.map +1 -0
  518. package/dist/python-QCFHUSDR.js +10 -0
  519. package/dist/python-QCFHUSDR.js.map +1 -0
  520. package/dist/qml-2B3BD652.js +17 -0
  521. package/dist/qml-2B3BD652.js.map +1 -0
  522. package/dist/qmldir-OLOIX2B6.js +13 -0
  523. package/dist/qmldir-OLOIX2B6.js.map +1 -0
  524. package/dist/qss-LKOZW4J7.js +13 -0
  525. package/dist/qss-LKOZW4J7.js.map +1 -0
  526. package/dist/r-IYUMDRYQ.js +10 -0
  527. package/dist/r-IYUMDRYQ.js.map +1 -0
  528. package/dist/racket-NGWKD2KD.js +13 -0
  529. package/dist/racket-NGWKD2KD.js.map +1 -0
  530. package/dist/raku-HMHK7SEE.js +13 -0
  531. package/dist/raku-HMHK7SEE.js.map +1 -0
  532. package/dist/razor-YUAXERBA.js +23 -0
  533. package/dist/razor-YUAXERBA.js.map +1 -0
  534. package/dist/red-MYPGDZ3S.js +10 -0
  535. package/dist/red-MYPGDZ3S.js.map +1 -0
  536. package/dist/reg-WNBS4A72.js +13 -0
  537. package/dist/reg-WNBS4A72.js.map +1 -0
  538. package/dist/regexp-2U6PSHJC.js +10 -0
  539. package/dist/regexp-2U6PSHJC.js.map +1 -0
  540. package/dist/rel-RGMQVPGH.js +13 -0
  541. package/dist/rel-RGMQVPGH.js.map +1 -0
  542. package/dist/riscv-BF6BE2PU.js +13 -0
  543. package/dist/riscv-BF6BE2PU.js.map +1 -0
  544. package/dist/ron-YVPQBZ3S.js +13 -0
  545. package/dist/ron-YVPQBZ3S.js.map +1 -0
  546. package/dist/rose-pine-ZOKD5XQE.js +10 -0
  547. package/dist/rose-pine-ZOKD5XQE.js.map +1 -0
  548. package/dist/rose-pine-dawn-NS7PQ5ON.js +10 -0
  549. package/dist/rose-pine-dawn-NS7PQ5ON.js.map +1 -0
  550. package/dist/rose-pine-moon-T4LGEHWG.js +10 -0
  551. package/dist/rose-pine-moon-T4LGEHWG.js.map +1 -0
  552. package/dist/rosmsg-XJNKIWBG.js +13 -0
  553. package/dist/rosmsg-XJNKIWBG.js.map +1 -0
  554. package/dist/rst-52K5CR6E.js +59 -0
  555. package/dist/rst-52K5CR6E.js.map +1 -0
  556. package/dist/ruby-S6IKB5NX.js +28 -0
  557. package/dist/ruby-S6IKB5NX.js.map +1 -0
  558. package/dist/rust-53IE5EFJ.js +13 -0
  559. package/dist/rust-53IE5EFJ.js.map +1 -0
  560. package/dist/sas-FRPT4YGX.js +17 -0
  561. package/dist/sas-FRPT4YGX.js.map +1 -0
  562. package/dist/sass-JVTBKQNA.js +13 -0
  563. package/dist/sass-JVTBKQNA.js.map +1 -0
  564. package/dist/scala-UUMT3NPW.js +13 -0
  565. package/dist/scala-UUMT3NPW.js.map +1 -0
  566. package/dist/scheme-H7F5UINL.js +13 -0
  567. package/dist/scheme-H7F5UINL.js.map +1 -0
  568. package/dist/scss-ATBDJXGF.js +11 -0
  569. package/dist/scss-ATBDJXGF.js.map +1 -0
  570. package/dist/sdbl-FH27ZTUG.js +10 -0
  571. package/dist/sdbl-FH27ZTUG.js.map +1 -0
  572. package/dist/shaderlab-KWCB5QOA.js +17 -0
  573. package/dist/shaderlab-KWCB5QOA.js.map +1 -0
  574. package/dist/shellscript-KTFIFTAK.js +10 -0
  575. package/dist/shellscript-KTFIFTAK.js.map +1 -0
  576. package/dist/shellsession-XUTOQIXH.js +17 -0
  577. package/dist/shellsession-XUTOQIXH.js.map +1 -0
  578. package/dist/slack-dark-HNSCAEKH.js +10 -0
  579. package/dist/slack-dark-HNSCAEKH.js.map +1 -0
  580. package/dist/slack-ochin-RIYDCMCF.js +10 -0
  581. package/dist/slack-ochin-RIYDCMCF.js.map +1 -0
  582. package/dist/smalltalk-PZ3N2HPI.js +13 -0
  583. package/dist/smalltalk-PZ3N2HPI.js.map +1 -0
  584. package/dist/snazzy-light-D6PV66JC.js +10 -0
  585. package/dist/snazzy-light-D6PV66JC.js.map +1 -0
  586. package/dist/solarized-dark-ZPKIU3CR.js +10 -0
  587. package/dist/solarized-dark-ZPKIU3CR.js.map +1 -0
  588. package/dist/solarized-light-4A4QAH3K.js +10 -0
  589. package/dist/solarized-light-4A4QAH3K.js.map +1 -0
  590. package/dist/solidity-SJORZAYO.js +13 -0
  591. package/dist/solidity-SJORZAYO.js.map +1 -0
  592. package/dist/soy-JLUGTJHJ.js +19 -0
  593. package/dist/soy-JLUGTJHJ.js.map +1 -0
  594. package/dist/sparql-KSSIM6RO.js +17 -0
  595. package/dist/sparql-KSSIM6RO.js.map +1 -0
  596. package/dist/splunk-DFFA3XXR.js +13 -0
  597. package/dist/splunk-DFFA3XXR.js.map +1 -0
  598. package/dist/sql-WAGX2OM4.js +10 -0
  599. package/dist/sql-WAGX2OM4.js.map +1 -0
  600. package/dist/ssh-config-2XBWRX2C.js +13 -0
  601. package/dist/ssh-config-2XBWRX2C.js.map +1 -0
  602. package/dist/stata-UCZCG26I.js +17 -0
  603. package/dist/stata-UCZCG26I.js.map +1 -0
  604. package/dist/stylus-4QDK4BF4.js +10 -0
  605. package/dist/stylus-4QDK4BF4.js.map +1 -0
  606. package/dist/surrealql-DCU43DKS.js +17 -0
  607. package/dist/surrealql-DCU43DKS.js.map +1 -0
  608. package/dist/svelte-UH65MPUT.js +29 -0
  609. package/dist/svelte-UH65MPUT.js.map +1 -0
  610. package/dist/swift-7JTKQNSZ.js +13 -0
  611. package/dist/swift-7JTKQNSZ.js.map +1 -0
  612. package/dist/synthwave-84-E3WQBJVL.js +10 -0
  613. package/dist/synthwave-84-E3WQBJVL.js.map +1 -0
  614. package/dist/system-verilog-TZ2NZEYE.js +13 -0
  615. package/dist/system-verilog-TZ2NZEYE.js.map +1 -0
  616. package/dist/systemd-DCWTXHWN.js +13 -0
  617. package/dist/systemd-DCWTXHWN.js.map +1 -0
  618. package/dist/talonscript-GGZXTFXL.js +13 -0
  619. package/dist/talonscript-GGZXTFXL.js.map +1 -0
  620. package/dist/tasl-5TAUZAB7.js +13 -0
  621. package/dist/tasl-5TAUZAB7.js.map +1 -0
  622. package/dist/tcl-K24T3OUS.js +13 -0
  623. package/dist/tcl-K24T3OUS.js.map +1 -0
  624. package/dist/templ-O6U2OZMG.js +25 -0
  625. package/dist/templ-O6U2OZMG.js.map +1 -0
  626. package/dist/terraform-RLXEM3Q5.js +13 -0
  627. package/dist/terraform-RLXEM3Q5.js.map +1 -0
  628. package/dist/tex-CPM4NRCC.js +11 -0
  629. package/dist/tex-CPM4NRCC.js.map +1 -0
  630. package/dist/tokyo-night-5ZEMLGEB.js +10 -0
  631. package/dist/tokyo-night-5ZEMLGEB.js.map +1 -0
  632. package/dist/toml-MOL3BOLW.js +13 -0
  633. package/dist/toml-MOL3BOLW.js.map +1 -0
  634. package/dist/ts-tags-BDFAA6RC.js +84 -0
  635. package/dist/ts-tags-BDFAA6RC.js.map +1 -0
  636. package/dist/tsv-UR2GO6YW.js +13 -0
  637. package/dist/tsv-UR2GO6YW.js.map +1 -0
  638. package/dist/tsx-3EVTP5NC.js +10 -0
  639. package/dist/tsx-3EVTP5NC.js.map +1 -0
  640. package/dist/turtle-IAAZUXM6.js +10 -0
  641. package/dist/turtle-IAAZUXM6.js.map +1 -0
  642. package/dist/twig-WNY2B6B3.js +54 -0
  643. package/dist/twig-WNY2B6B3.js.map +1 -0
  644. package/dist/typescript-6CMBSED4.js +10 -0
  645. package/dist/typescript-6CMBSED4.js.map +1 -0
  646. package/dist/typespec-EKVRTJFS.js +13 -0
  647. package/dist/typespec-EKVRTJFS.js.map +1 -0
  648. package/dist/typst-YNHS2CKH.js +13 -0
  649. package/dist/typst-YNHS2CKH.js.map +1 -0
  650. package/dist/v-P4ISMWQU.js +13 -0
  651. package/dist/v-P4ISMWQU.js.map +1 -0
  652. package/dist/vala-HICRIIMF.js +13 -0
  653. package/dist/vala-HICRIIMF.js.map +1 -0
  654. package/dist/vb-XDWS2YJG.js +13 -0
  655. package/dist/vb-XDWS2YJG.js.map +1 -0
  656. package/dist/verilog-QBKU4B3K.js +13 -0
  657. package/dist/verilog-QBKU4B3K.js.map +1 -0
  658. package/dist/vesper-XHUHW5AD.js +10 -0
  659. package/dist/vesper-XHUHW5AD.js.map +1 -0
  660. package/dist/vhdl-RUVIPQZS.js +13 -0
  661. package/dist/vhdl-RUVIPQZS.js.map +1 -0
  662. package/dist/viml-KAUG3L5B.js +13 -0
  663. package/dist/viml-KAUG3L5B.js.map +1 -0
  664. package/dist/vitesse-black-QYB25SBR.js +10 -0
  665. package/dist/vitesse-black-QYB25SBR.js.map +1 -0
  666. package/dist/vitesse-dark-SB34ZTYL.js +10 -0
  667. package/dist/vitesse-dark-SB34ZTYL.js.map +1 -0
  668. package/dist/vitesse-light-XCNAOQVU.js +10 -0
  669. package/dist/vitesse-light-XCNAOQVU.js.map +1 -0
  670. package/dist/vue-KHCX6RNH.js +66 -0
  671. package/dist/vue-KHCX6RNH.js.map +1 -0
  672. package/dist/vue-html-3FMYKYEX.js +17 -0
  673. package/dist/vue-html-3FMYKYEX.js.map +1 -0
  674. package/dist/vue-vine-CQKK5KA3.js +37 -0
  675. package/dist/vue-vine-CQKK5KA3.js.map +1 -0
  676. package/dist/vyper-FR6AJJFY.js +13 -0
  677. package/dist/vyper-FR6AJJFY.js.map +1 -0
  678. package/dist/wasm-BRUNS4NW.js +13 -0
  679. package/dist/wasm-BRUNS4NW.js.map +1 -0
  680. package/dist/wasm-NN72S5VM.js +16 -0
  681. package/dist/wasm-NN72S5VM.js.map +1 -0
  682. package/dist/wenyan-TJADYW3K.js +13 -0
  683. package/dist/wenyan-TJADYW3K.js.map +1 -0
  684. package/dist/wgsl-4Y7AMSPT.js +13 -0
  685. package/dist/wgsl-4Y7AMSPT.js.map +1 -0
  686. package/dist/wikitext-5NDO7BP7.js +13 -0
  687. package/dist/wikitext-5NDO7BP7.js.map +1 -0
  688. package/dist/wit-K5NSIH22.js +13 -0
  689. package/dist/wit-K5NSIH22.js.map +1 -0
  690. package/dist/wolfram-MWAPKOXL.js +13 -0
  691. package/dist/wolfram-MWAPKOXL.js.map +1 -0
  692. package/dist/xml-ZRPAVXM7.js +11 -0
  693. package/dist/xml-ZRPAVXM7.js.map +1 -0
  694. package/dist/xsl-E3W2MPMV.js +18 -0
  695. package/dist/xsl-E3W2MPMV.js.map +1 -0
  696. package/dist/yaml-BPWSFOIH.js +10 -0
  697. package/dist/yaml-BPWSFOIH.js.map +1 -0
  698. package/dist/zenscript-SSKUXVDO.js +13 -0
  699. package/dist/zenscript-SSKUXVDO.js.map +1 -0
  700. package/dist/zig-TC7AYM3D.js +13 -0
  701. package/dist/zig-TC7AYM3D.js.map +1 -0
  702. package/package.json +1 -1
package/dist/bin.js CHANGED
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ import "./chunk-EFTGR6G5.js";
3
4
 
4
5
  // src/cli/bin.ts
5
6
  import { readFileSync } from "fs";
6
- import { basename, dirname, join as join5 } from "path";
7
+ import { basename, dirname, join as join6 } from "path";
7
8
  import { fileURLToPath } from "url";
8
9
  import { Command as Command5 } from "commander";
9
10
 
@@ -61,6 +62,7 @@ var OpenManualConfigSchema = z.object({
61
62
  outputDir: z.string().optional(),
62
63
  siteUrl: z.url().optional(),
63
64
  locale: z.string().optional(),
65
+ contentPolicy: z.enum(["strict", "all"]).optional(),
64
66
  navbar: NavbarSchema.optional(),
65
67
  footer: FooterSchema.optional(),
66
68
  sidebar: z.array(SidebarGroupSchema).optional(),
@@ -110,6 +112,7 @@ ${errors}`);
110
112
  function mergeDefaults(config) {
111
113
  return {
112
114
  ...config,
115
+ contentPolicy: config.contentPolicy ?? "strict",
113
116
  contentDir: config.contentDir ?? DEFAULT_CONFIG.contentDir ?? "content",
114
117
  outputDir: config.outputDir ?? DEFAULT_CONFIG.outputDir ?? "dist",
115
118
  locale: config.locale ?? DEFAULT_CONFIG.locale ?? "zh",
@@ -333,16 +336,57 @@ function generatePackageJson(_ctx) {
333
336
  }
334
337
 
335
338
  // src/core/generator/page.ts
339
+ function buildAllowedSlugs(config) {
340
+ const slugs = /* @__PURE__ */ new Set();
341
+ if (config.sidebar) {
342
+ for (const group of config.sidebar) {
343
+ for (const page of group.pages) {
344
+ slugs.add(page.slug);
345
+ }
346
+ }
347
+ }
348
+ return slugs;
349
+ }
336
350
  function generatePage(_ctx) {
351
+ const isStrict = _ctx.config.contentPolicy !== "all";
352
+ const allowedSlugsSnippet = isStrict ? `
353
+ const allowedSlugs = new Set(${JSON.stringify([...buildAllowedSlugs(_ctx.config)])});
354
+
355
+ function isAllowed(slug: string[] | undefined): boolean {
356
+ if (allowedSlugs.size === 0) return true;
357
+ const key = slug ? slug.join('/') : 'index';
358
+ return allowedSlugs.has(key);
359
+ }
360
+ ` : "";
361
+ const filterInPage = isStrict ? `
362
+ if (!isAllowed(slug)) {
363
+ notFound();
364
+ }
365
+ ` : "";
366
+ const filterInStaticParams = isStrict ? `
367
+ export function generateStaticParams() {
368
+ let params = source.generateParams();
369
+ params = params.filter((p: { slug: string[] }) => isAllowed(p.slug));
370
+ if (!params.some((p: { slug: string[] }) => p.slug.length === 0)) {
371
+ params.unshift({ ...params[0], slug: [] });
372
+ }
373
+ return params;
374
+ }` : `
375
+ export function generateStaticParams() {
376
+ const params = source.generateParams();
377
+ if (!params.some((p: { slug: string[] }) => p.slug.length === 0)) {
378
+ params.unshift({ ...params[0], slug: [] });
379
+ }
380
+ return params;
381
+ }`;
337
382
  return `import { source } from '@/lib/source';
338
383
  import { notFound } from 'next/navigation';
339
384
  import { DocsPage, DocsBody, DocsTitle, DocsDescription } from 'fumadocs-ui/page';
340
- import defaultMdxComponents from 'fumadocs-ui/mdx';
341
-
385
+ import defaultMdxComponents from 'fumadocs-ui/mdx';${allowedSlugsSnippet}
342
386
  export default async function Page({ params }: { params: Promise<{ slug?: string[] }> }) {
343
387
  const { slug } = await params;
344
388
  const page = source.getPage(slug);
345
-
389
+ ${filterInPage}
346
390
  if (!page) {
347
391
  notFound();
348
392
  }
@@ -361,14 +405,7 @@ export default async function Page({ params }: { params: Promise<{ slug?: string
361
405
  </DocsPage>
362
406
  );
363
407
  }
364
-
365
- export function generateStaticParams() {
366
- const params = source.generateParams();
367
- if (!params.some((p: { slug: string[] }) => p.slug.length === 0)) {
368
- params.unshift({ ...params[0], slug: [] });
369
- }
370
- return params;
371
- }
408
+ ${filterInStaticParams}
372
409
  `;
373
410
  }
374
411
 
@@ -408,14 +445,94 @@ export function Provider({ children }: { children: ReactNode }) {
408
445
  }
409
446
 
410
447
  // src/core/generator/source-config.ts
448
+ function buildTitleMap(config) {
449
+ const map = {};
450
+ if (config.sidebar) {
451
+ for (const group of config.sidebar) {
452
+ for (const page of group.pages) {
453
+ map[page.slug] = page.title;
454
+ }
455
+ }
456
+ }
457
+ return map;
458
+ }
459
+ function buildAllowedSlugs2(config) {
460
+ const slugs = /* @__PURE__ */ new Set();
461
+ if (config.sidebar) {
462
+ for (const group of config.sidebar) {
463
+ for (const page of group.pages) {
464
+ slugs.add(page.slug);
465
+ }
466
+ }
467
+ }
468
+ return slugs;
469
+ }
411
470
  function generateSourceConfig(_ctx) {
471
+ const titleMap = buildTitleMap(_ctx.config);
472
+ const titleMapEntries = Object.entries(titleMap).map(([slug, title]) => ` '${slug}': '${title.replace(/'/g, "\\'")}'`).join(",\n");
473
+ const titleMapStr = titleMapEntries ? `{
474
+ ${titleMapEntries}
475
+ }` : "{}";
476
+ const isStrict = _ctx.config.contentPolicy !== "all";
477
+ const allowedSlugsSnippet = isStrict ? `
478
+
479
+ const allowedSlugs = new Set(${JSON.stringify([...buildAllowedSlugs2(_ctx.config)])});
480
+
481
+ function slugFromPath(path: string): string {
482
+ const normalized = path.replace(/\\\\/g, '/');
483
+ const idx = normalized.indexOf('content/');
484
+ const relative = idx >= 0 ? normalized.slice(idx + 'content/'.length) : normalized;
485
+ return relative.replace(/\\.(md|mdx)$/i, '');
486
+ }
487
+ ` : "";
488
+ const filterSnippet = isStrict ? `
489
+ .refine((_data) => {
490
+ const slug = slugFromPath(ctx.path);
491
+ if (allowedSlugs.size > 0 && !allowedSlugs.has(slug)) {
492
+ return false;
493
+ }
494
+ return true;
495
+ })` : "";
412
496
  return `import { defineDocs, defineConfig } from 'fumadocs-mdx/config';
497
+ import { z } from 'zod';
498
+
499
+ const titleMap: Record<string, string> = ${titleMapStr};${allowedSlugsSnippet}
500
+ function titleFromPath(path: string): string {
501
+ const normalized = path.replace(/\\\\/g, '/');
502
+ const idx = normalized.indexOf('content/');
503
+ const relative = idx >= 0 ? normalized.slice(idx + 'content/'.length) : normalized;
504
+ const slug = relative.replace(/\\.(md|mdx)$/i, '');
505
+ return titleMap[slug] || slug.split('/').pop() || slug;
506
+ }
413
507
 
414
508
  export const docs = defineDocs({
415
509
  dir: 'content',
510
+ docs: {
511
+ schema: (ctx) =>
512
+ z.object({
513
+ title: z.string().optional(),
514
+ description: z.string().optional(),
515
+ icon: z.string().optional(),
516
+ full: z.boolean().optional(),
517
+ }).transform((data) => ({
518
+ ...data,
519
+ title: data.title ?? titleFromPath(ctx.path),
520
+ }))${filterSnippet},
521
+ },
416
522
  });
417
523
 
418
- export default defineConfig();
524
+ export default defineConfig({
525
+ mdxOptions: {
526
+ rehypeCodeOptions: {
527
+ themes: {
528
+ light: 'github-light',
529
+ dark: 'github-dark',
530
+ },
531
+ defaultColor: false,
532
+ fallbackLanguage: 'text',
533
+ },
534
+ },
535
+ });
419
536
  `;
420
537
  }
421
538
 
@@ -773,6 +890,57 @@ var buildCommand = new Command("build").description("\u6784\u5EFA\u9759\u6001\u7
773
890
  import { spawn as spawn3 } from "child_process";
774
891
  import { extname, resolve as resolve4 } from "path";
775
892
  import { Command as Command2 } from "commander";
893
+
894
+ // src/utils/check-code-langs.ts
895
+ import { readdir, readFile as readFile2 } from "fs/promises";
896
+ import { join as join4, relative, sep } from "path";
897
+ async function checkCodeLangs(contentDir) {
898
+ const { bundledLanguages } = await import("./dist-IK4UEFEW.js");
899
+ const supportedLangs = new Set(Object.keys(bundledLanguages));
900
+ supportedLangs.add("text");
901
+ supportedLangs.add("txt");
902
+ supportedLangs.add("plaintext");
903
+ supportedLangs.add("plain");
904
+ supportedLangs.add("ansi");
905
+ const files = await collectMdFiles(contentDir);
906
+ const results = [];
907
+ for (const file of files) {
908
+ const content = await readFile2(file, "utf-8");
909
+ const lines = content.split("\n");
910
+ for (let i = 0; i < lines.length; i++) {
911
+ const line = lines[i];
912
+ if (!line) continue;
913
+ const match = line.match(/^```(\S+)/);
914
+ if (match) {
915
+ const lang = match[1];
916
+ if (!lang) continue;
917
+ if (!supportedLangs.has(lang)) {
918
+ results.push({
919
+ file: relative(contentDir, file).split(sep).join("/"),
920
+ line: i + 1,
921
+ lang
922
+ });
923
+ }
924
+ }
925
+ }
926
+ }
927
+ return results;
928
+ }
929
+ async function collectMdFiles(dir) {
930
+ const entries = await readdir(dir, { withFileTypes: true });
931
+ const files = [];
932
+ for (const entry of entries) {
933
+ const fullPath = join4(dir, entry.name);
934
+ if (entry.isDirectory()) {
935
+ files.push(...await collectMdFiles(fullPath));
936
+ } else if (entry.isFile() && /\.(md|mdx)$/i.test(entry.name)) {
937
+ files.push(fullPath);
938
+ }
939
+ }
940
+ return files;
941
+ }
942
+
943
+ // src/cli/commands/dev.ts
776
944
  var devCommand = new Command2("dev").description("\u542F\u52A8\u5F00\u53D1\u670D\u52A1\u5668").option("-p, --port <port>", "\u7AEF\u53E3\u53F7", "3000").option("--watch", "\u76D1\u542C\u6846\u67B6\u6E90\u7801\u53D8\u66F4\u5E76\u81EA\u52A8\u91CD\u65B0\u751F\u6210", false).option("--cwd <path>", "\u9879\u76EE\u76EE\u5F55\uFF08watch \u6A21\u5F0F\u4E0B\u4F7F\u7528\uFF09").action(async (options) => {
777
945
  const cwd = options.cwd ? resolve4(options.cwd) : process.cwd();
778
946
  try {
@@ -789,6 +957,17 @@ var devCommand = new Command2("dev").description("\u542F\u52A8\u5F00\u53D1\u670D
789
957
  contentDir: config.contentDir ?? "content"
790
958
  };
791
959
  await generateAll(ctx);
960
+ try {
961
+ const unknownLangs = await checkCodeLangs(contentDir);
962
+ if (unknownLangs.length > 0) {
963
+ logger.warn("\u4EE5\u4E0B\u6587\u4EF6\u4F7F\u7528\u4E86\u4E0D\u8BA4\u8BC6\u7684\u4EE3\u7801\u5757\u8BED\u8A00:");
964
+ for (const item of unknownLangs) {
965
+ logger.warn(` ${item.file}:${item.line} - "${item.lang}"`);
966
+ }
967
+ logger.warn('\u5EFA\u8BAE\u5C06\u8FD9\u4E9B\u8BED\u8A00\u6539\u4E3A\u53D7\u652F\u6301\u7684\u7C7B\u578B\uFF0C\u6216\u4F7F\u7528 "text" \u4F5C\u4E3A\u9ED8\u8BA4\u503C');
968
+ }
969
+ } catch {
970
+ }
792
971
  await createSymlink(contentDir, resolve4(appDir, "content"));
793
972
  const publicDir = resolve4(cwd, "public");
794
973
  try {
@@ -933,7 +1112,7 @@ var previewCommand = new Command3("preview").description("\u9884\u89C8\u6784\u5E
933
1112
 
934
1113
  // src/cli/commands/regenerate.ts
935
1114
  import { rm as rm2 } from "fs/promises";
936
- import { join as join4, resolve as resolve6 } from "path";
1115
+ import { join as join5, resolve as resolve6 } from "path";
937
1116
  import { Command as Command4 } from "commander";
938
1117
  var regenerateCommand = new Command4("_regenerate").description("\u5185\u90E8\u547D\u4EE4\uFF1A\u91CD\u65B0\u751F\u6210\u6587\u4EF6").helpOption(false).option("--cwd <path>", "\u9879\u76EE\u76EE\u5F55").action(async (options) => {
939
1118
  const cwd = options.cwd ?? process.cwd();
@@ -959,7 +1138,7 @@ var regenerateCommand = new Command4("_regenerate").description("\u5185\u90E8\u5
959
1138
  "postcss.config.mjs"
960
1139
  ];
961
1140
  for (const entry of entriesToClean) {
962
- await rm2(join4(appDir, entry), { recursive: true, force: true });
1141
+ await rm2(join5(appDir, entry), { recursive: true, force: true });
963
1142
  }
964
1143
  await generateAll(ctx);
965
1144
  await createSymlink(contentDir, resolve6(appDir, "content"));
@@ -981,17 +1160,17 @@ var regenerateCommand = new Command4("_regenerate").description("\u5185\u90E8\u5
981
1160
  // src/cli/bin.ts
982
1161
  function getVersion() {
983
1162
  if (true) {
984
- return "0.4.0";
1163
+ return "0.5.0";
985
1164
  }
986
1165
  try {
987
1166
  const __dirname = dirname(fileURLToPath(import.meta.url));
988
- const pkgPath = join5(__dirname, "..", "package.json");
1167
+ const pkgPath = join6(__dirname, "..", "package.json");
989
1168
  const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
990
1169
  return pkg.version;
991
1170
  } catch {
992
1171
  try {
993
1172
  const __dirname = dirname(fileURLToPath(import.meta.url));
994
- const pkgPath = join5(__dirname, "..", "..", "package.json");
1173
+ const pkgPath = join6(__dirname, "..", "..", "package.json");
995
1174
  const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
996
1175
  return pkg.version;
997
1176
  } catch {
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/bin.ts","../src/cli/commands/build.ts","../src/core/config/loader.ts","../src/core/config/schema.ts","../src/core/generator/index.ts","../src/core/generator/global-css.ts","../src/core/generator/layout.ts","../src/core/generator/lib-source.ts","../src/core/generator/next-config.ts","../src/core/generator/package-json.ts","../src/core/generator/page.ts","../src/core/generator/postcss-config.ts","../src/core/generator/provider.ts","../src/core/generator/source-config.ts","../src/core/generator/tsconfig.ts","../src/utils/install-deps.ts","../src/utils/logger.ts","../src/utils/temp-dir.ts","../src/cli/commands/dev.ts","../src/cli/commands/preview.ts","../src/cli/commands/regenerate.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { basename, dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { Command } from 'commander';\nimport { buildCommand } from './commands/build.js';\nimport { devCommand } from './commands/dev.js';\nimport { previewCommand } from './commands/preview.js';\nimport { regenerateCommand } from './commands/regenerate.js';\n\ndeclare const __VERSION__: string;\n\nfunction getVersion(): string {\n if (typeof __VERSION__ !== 'undefined') {\n return __VERSION__;\n }\n try {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkgPath = join(__dirname, '..', 'package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { version: string };\n return pkg.version;\n } catch {\n // tsx dev 模式下 __dirname 是 src/cli,需要多上一层\n try {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkgPath = join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { version: string };\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n }\n}\n\nconst program = new Command();\nconst commandName = basename(process.argv[1] ?? 'openmanual');\n\nprogram\n .name(commandName)\n .description('AI 友好的开源文档系统框架')\n .version(getVersion(), '-v, --version');\n\nprogram.addCommand(devCommand);\nprogram.addCommand(buildCommand);\nprogram.addCommand(previewCommand);\nprogram.addCommand(regenerateCommand, { hidden: true });\n\nprogram.parse();\n","import { spawn } from 'node:child_process';\nimport { cp, mkdir } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig } from '../../core/config/loader.js';\nimport { generateAll } from '../../core/generator/index.js';\nimport { installDeps } from '../../utils/install-deps.js';\nimport { logger } from '../../utils/logger.js';\nimport { cleanTempDir, createSymlink, ensureTempDir, getAppDir } from '../../utils/temp-dir.js';\n\nexport const buildCommand = new Command('build').description('构建静态站点').action(async () => {\n const cwd = process.cwd();\n\n try {\n logger.step('读取配置文件...');\n const config = await loadConfig(cwd);\n\n logger.step('生成临时应用...');\n const appDir = getAppDir(cwd);\n const contentDir = resolve(cwd, config.contentDir ?? 'content');\n\n await ensureTempDir(cwd);\n\n const ctx = {\n config,\n projectDir: cwd,\n appDir,\n contentDir: config.contentDir ?? 'content',\n };\n\n await generateAll(ctx);\n\n // Symlink content directory\n await createSymlink(contentDir, resolve(appDir, 'content'));\n\n // Symlink public directory if exists\n const publicDir = resolve(cwd, 'public');\n try {\n const { stat } = await import('node:fs/promises');\n await stat(publicDir);\n await createSymlink(publicDir, resolve(appDir, 'public'));\n } catch {\n // no public dir, that's fine\n }\n\n logger.step('安装依赖...');\n await installDeps(appDir);\n\n logger.step('构建静态站点...');\n const buildResult = spawn('npx', ['next', 'build'], {\n cwd: appDir,\n stdio: 'inherit',\n env: { ...process.env },\n });\n\n await new Promise<void>((resolve, reject) => {\n buildResult.on('error', reject);\n buildResult.on('exit', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Build failed with code ${code}`));\n }\n });\n });\n\n // Copy output to user's output dir\n const outputDir = resolve(cwd, config.outputDir ?? 'dist');\n await mkdir(outputDir, { recursive: true });\n\n const nextOutput = resolve(appDir, 'out');\n try {\n await cp(nextOutput, outputDir, { recursive: true });\n logger.success(`静态站点已输出到: ${outputDir}`);\n } catch {\n // If no 'out' dir, check .next/static\n logger.warn('未找到静态导出产物,请检查 next.config.mjs 中 output: \"export\" 配置');\n }\n\n logger.step('清理临时文件...');\n await cleanTempDir(cwd);\n\n logger.success('构建完成!');\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(message);\n process.exit(1);\n }\n});\n","import { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { type OpenManualConfig, OpenManualConfigSchema } from './schema.js';\n\nconst DEFAULT_CONFIG: Partial<OpenManualConfig> = {\n contentDir: 'content',\n outputDir: 'dist',\n locale: 'zh',\n navbar: {},\n footer: {},\n theme: {\n primaryHue: 213,\n darkMode: true,\n },\n search: {\n enabled: true,\n },\n mdx: {},\n};\n\nexport async function loadConfig(cwd: string = process.cwd()): Promise<OpenManualConfig> {\n const configPath = join(cwd, 'openmanual.json');\n\n let rawJson: string;\n try {\n rawJson = await readFile(configPath, 'utf-8');\n } catch {\n throw new Error(`openmanual.json not found in ${cwd}. Please create one.`);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawJson);\n } catch {\n throw new Error('openmanual.json is not valid JSON.');\n }\n\n const result = OpenManualConfigSchema.safeParse(parsed);\n if (!result.success) {\n const errors = result.error.issues\n .map((i) => ` - ${i.path.join('.')}: ${i.message}`)\n .join('\\n');\n throw new Error(`openmanual.json validation failed:\\n${errors}`);\n }\n\n return mergeDefaults(result.data);\n}\n\nfunction mergeDefaults(config: OpenManualConfig): OpenManualConfig {\n return {\n ...config,\n contentDir: config.contentDir ?? DEFAULT_CONFIG.contentDir ?? 'content',\n outputDir: config.outputDir ?? DEFAULT_CONFIG.outputDir ?? 'dist',\n locale: config.locale ?? DEFAULT_CONFIG.locale ?? 'zh',\n navbar: {\n ...DEFAULT_CONFIG.navbar,\n ...config.navbar,\n logo: config.navbar?.logo ?? config.name,\n },\n footer: {\n ...DEFAULT_CONFIG.footer,\n ...config.footer,\n text: config.footer?.text ?? `MIT ${new Date().getFullYear()} © ${config.name}.`,\n },\n theme: {\n ...DEFAULT_CONFIG.theme,\n ...config.theme,\n },\n search: {\n ...DEFAULT_CONFIG.search,\n ...config.search,\n },\n mdx: {\n ...DEFAULT_CONFIG.mdx,\n ...config.mdx,\n },\n };\n}\n","import { z } from 'zod';\n\nexport const LogoSchema = z.union([z.string(), z.object({ light: z.string(), dark: z.string() })]);\n\nexport const NavbarSchema = z.object({\n logo: LogoSchema.optional(),\n github: z.url().optional(),\n links: z\n .array(\n z.object({\n label: z.string(),\n href: z.string(),\n })\n )\n .optional(),\n});\n\nexport const FooterSchema = z.object({\n text: z.string().optional(),\n});\n\nexport const SidebarPageSchema = z.object({\n slug: z.string(),\n title: z.string(),\n icon: z.string().optional(),\n});\n\nexport const SidebarGroupSchema = z.object({\n group: z.string(),\n icon: z.string().optional(),\n collapsed: z.boolean().optional(),\n pages: z.array(SidebarPageSchema),\n});\n\nexport const ThemeSchema = z.object({\n primaryHue: z.number().min(0).max(360).optional(),\n darkMode: z.boolean().optional(),\n});\n\nexport const SearchSchema = z.object({\n enabled: z.boolean().optional(),\n});\n\nexport const MdxSchema = z.object({\n latex: z.boolean().optional(),\n});\n\nexport const OpenManualConfigSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n contentDir: z.string().optional(),\n outputDir: z.string().optional(),\n siteUrl: z.url().optional(),\n locale: z.string().optional(),\n navbar: NavbarSchema.optional(),\n footer: FooterSchema.optional(),\n sidebar: z.array(SidebarGroupSchema).optional(),\n theme: ThemeSchema.optional(),\n search: SearchSchema.optional(),\n mdx: MdxSchema.optional(),\n});\n\nexport type OpenManualConfig = z.infer<typeof OpenManualConfigSchema>;\nexport type NavbarConfig = z.infer<typeof NavbarSchema>;\nexport type FooterConfig = z.infer<typeof FooterSchema>;\nexport type SidebarGroup = z.infer<typeof SidebarGroupSchema>;\nexport type SidebarPage = z.infer<typeof SidebarPageSchema>;\nexport type ThemeConfig = z.infer<typeof ThemeSchema>;\nexport type LogoConfig = z.infer<typeof LogoSchema>;\n","import { access, mkdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { OpenManualConfig } from '../config/schema.js';\nimport { generateGlobalCss } from './global-css.js';\nimport { generateLayout, isImagePath, resolveLogoPaths } from './layout.js';\nimport { generateLibSource } from './lib-source.js';\nimport { generateNextConfig } from './next-config.js';\nimport { generatePackageJson } from './package-json.js';\nimport { generatePage } from './page.js';\nimport { generatePostcssConfig } from './postcss-config.js';\nimport { generateProvider } from './provider.js';\nimport { generateSourceConfig } from './source-config.js';\nimport { generateTsconfig } from './tsconfig.js';\n\nexport interface GenerateContext {\n config: OpenManualConfig;\n /** Absolute path to user's project root */\n projectDir: string;\n /** Absolute path to .openmanual/app */\n appDir: string;\n /** Content directory relative to project root */\n contentDir: string;\n}\n\nexport async function generateAll(ctx: GenerateContext): Promise<void> {\n const files: Array<{ path: string; content: string }> = [\n {\n path: 'source.config.ts',\n content: generateSourceConfig(ctx),\n },\n {\n path: 'next.config.mjs',\n content: generateNextConfig(ctx),\n },\n {\n path: 'global.css',\n content: generateGlobalCss(ctx),\n },\n {\n path: 'package.json',\n content: generatePackageJson(ctx),\n },\n {\n path: 'tsconfig.json',\n content: generateTsconfig(),\n },\n {\n path: 'postcss.config.mjs',\n content: generatePostcssConfig(),\n },\n {\n path: 'lib/source.ts',\n content: generateLibSource(),\n },\n {\n path: 'lib/layout.tsx',\n content: generateLayout(ctx),\n },\n {\n path: 'app/layout.tsx',\n content: generateRootLayout(),\n },\n {\n path: 'app/provider.tsx',\n content: generateProvider(ctx),\n },\n {\n path: 'app/[[...slug]]/layout.tsx',\n content: generateDocsLayout(ctx),\n },\n {\n path: 'app/[[...slug]]/page.tsx',\n content: generatePage(ctx),\n },\n ];\n\n for (const file of files) {\n const fullPath = join(ctx.appDir, file.path);\n const dir = join(fullPath, '..');\n await mkdir(dir, { recursive: true });\n await writeFile(fullPath, file.content, 'utf-8');\n }\n\n // Generate logo SVG in public/ when logo is an image path\n const logo = ctx.config.navbar?.logo;\n if (logo && typeof logo === 'string' && isImagePath(logo)) {\n await ensureLogoFile(ctx, logo, 'light');\n } else if (logo && typeof logo === 'object') {\n const { light, dark } = resolveLogoPaths(logo);\n if (isImagePath(light)) {\n await ensureLogoFile(ctx, light, 'light');\n }\n if (isImagePath(dark) && dark !== light) {\n await ensureLogoFile(ctx, dark, 'dark');\n }\n }\n}\n\nfunction generateRootLayout(): string {\n return `import { Provider } from './provider';\nimport type { ReactNode } from 'react';\nimport '../global.css';\n\nexport default function RootLayout({ children }: { children: ReactNode }) {\n return (\n <html lang=\"zh\" suppressHydrationWarning>\n <body className=\"flex flex-col min-h-screen\">\n <Provider>{children}</Provider>\n </body>\n </html>\n );\n}\n`;\n}\n\nfunction generateDocsLayout(ctx: GenerateContext): string {\n const { config } = ctx;\n const githubLink = config.navbar?.github ?? '';\n const navLinks = config.navbar?.links ?? [];\n const footerText = config.footer?.text ?? '';\n\n const linksArray = navLinks.map((l) => ({\n text: l.label,\n url: l.href,\n external: true,\n }));\n\n const githubLine = githubLink ? `\\n github: '${githubLink}',` : '';\n\n const linksLine = linksArray.length > 0 ? `\\n links: ${JSON.stringify(linksArray)},` : '';\n\n const footerLine = footerText\n ? `\\n footer: { children: '${footerText.replace(/'/g, \"\\\\'\")}' },`\n : '';\n\n return `import { DocsLayout } from 'fumadocs-ui/layouts/docs';\nimport { baseOptions } from '@/lib/layout';\nimport { source } from '@/lib/source';\nimport type { ReactNode } from 'react';\n\nconst docsOptions = {\n ...baseOptions(),\n tree: source.getPageTree(),${githubLine}${linksLine}${footerLine}\n};\n\nexport default function DocsLayoutWrapper({ children }: { children: ReactNode }) {\n return (\n <DocsLayout {...docsOptions}>\n {children}\n </DocsLayout>\n );\n}\n`;\n}\n\nexport function generateOpenManualLogoSvg(\n name: string,\n variant: 'light' | 'dark' = 'light'\n): string {\n const textColor = variant === 'dark' ? '#E8E0D4' : '#000000';\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 190 32\" width=\"190\" height=\"32\">\n <text x=\"0\" y=\"25\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\" font-size=\"32\" font-weight=\"700\">\n <tspan fill=\"#2B7A4B\" font-size=\"34\">${name.charAt(0)}</tspan><tspan fill=\"${textColor}\">${name.slice(1)}</tspan>\n </text>\n</svg>\n`;\n}\n\nasync function ensureLogoFile(\n ctx: GenerateContext,\n logoPath: string,\n variant: 'light' | 'dark'\n): Promise<void> {\n const userLogoPath = join(ctx.projectDir, 'public', logoPath.replace(/^\\//, ''));\n try {\n await access(userLogoPath);\n } catch {\n const publicDir = join(ctx.appDir, 'public');\n await mkdir(publicDir, { recursive: true });\n const fullPath = join(publicDir, logoPath.replace(/^\\//, ''));\n await mkdir(join(fullPath, '..'), { recursive: true });\n await writeFile(fullPath, generateOpenManualLogoSvg(ctx.config.name, variant), 'utf-8');\n }\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generateGlobalCss(ctx: { config: OpenManualConfig }): string {\n const { config } = ctx;\n const primaryHue = config.theme?.primaryHue ?? 213;\n const darkMode = config.theme?.darkMode ?? true;\n\n const darkBlock = darkMode\n ? `\n.dark {\n --primary-hue: ${primaryHue};\n\n /* 温暖的深色皮革背景 */\n --color-fd-background: hsl(30, 18%, 10%);\n --color-fd-foreground: hsl(35, 15%, 90%);\n --color-fd-muted: hsl(30, 14%, 14%);\n --color-fd-muted-foreground: hsla(30, 10%, 65%, 0.8);\n --color-fd-popover: hsl(30, 16%, 13%);\n --color-fd-popover-foreground: hsl(35, 12%, 87%);\n --color-fd-card: hsl(30, 15%, 12%);\n --color-fd-card-foreground: hsl(35, 15%, 93%);\n --color-fd-border: hsla(30, 12%, 35%, 25%);\n --color-fd-primary: hsl(35, 20%, 92%);\n --color-fd-primary-foreground: hsl(30, 25%, 10%);\n --color-fd-secondary: hsl(30, 12%, 16%);\n --color-fd-secondary-foreground: hsl(35, 10%, 88%);\n --color-fd-accent: hsla(30, 15%, 30%, 35%);\n --color-fd-accent-foreground: hsl(35, 12%, 88%);\n --color-fd-ring: hsl(30, 30%, 50%);\n --color-fd-overlay: hsla(25, 20%, 5%, 0.5);\n}\n\n.dark body {\n background: linear-gradient(hsla(30, 30%, 15%, 0.4), transparent 20rem, transparent);\n}\n`\n : '';\n\n return `@import 'tailwindcss';\n@import 'fumadocs-ui/style.css';\n@custom-variant dark (&:is(.dark, .dark *));\n\n:root {\n --primary-hue: ${primaryHue};\n\n /* 护眼暖色阅读背景 */\n --color-fd-background: hsl(40, 22%, 96.5%); /* #faf9f6 纸张白 */\n --color-fd-foreground: hsl(0, 0%, 17.3%); /* #2c2c2c 柔黑 */\n --color-fd-muted: hsl(40, 15%, 95%); /* 柔和的暖灰背景 */\n --color-fd-card: hsl(40, 18%, 94%); /* 卡片背景 */\n --color-fd-popover: hsl(40, 20%, 97.5%); /* 弹窗背景 */\n}\n${darkBlock}`;\n}\n","import type { LogoConfig, OpenManualConfig } from '../config/schema.js';\n\nconst IMAGE_EXTENSIONS = ['.svg', '.png', '.jpg', '.jpeg', '.webp'];\n\nexport function isImagePath(value: string): boolean {\n if (value.startsWith('/')) return true;\n return IMAGE_EXTENSIONS.some((ext) => value.toLowerCase().endsWith(ext));\n}\n\nexport function resolveLogoPaths(logo: LogoConfig): { light: string; dark: string } {\n if (typeof logo === 'string') {\n return { light: logo, dark: logo };\n }\n return { light: logo.light, dark: logo.dark };\n}\n\nexport function generateLayout(ctx: { config: OpenManualConfig }): string {\n const { config } = ctx;\n const logo = config.navbar?.logo ?? config.name;\n\n // String logo that is an image path — backward compatible single image\n if (typeof logo === 'string' && isImagePath(logo)) {\n return `import type { ReactNode } from 'react';\nimport type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';\n\nexport function baseOptions(): BaseLayoutProps {\n return {\n nav: {\n title: (\n <>\n <img src=\"${logo}\" alt=\"${config.name}\" style={{ height: 28 }} />\n </>\n ) as ReactNode,\n },\n };\n}\n`;\n }\n\n // Object logo { light, dark }\n if (typeof logo === 'object') {\n const { light, dark } = logo;\n\n // Same path — treat as single image\n if (light === dark) {\n return `import type { ReactNode } from 'react';\nimport type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';\n\nexport function baseOptions(): BaseLayoutProps {\n return {\n nav: {\n title: (\n <>\n <img src=\"${light}\" alt=\"${config.name}\" style={{ height: 28 }} />\n </>\n ) as ReactNode,\n },\n };\n}\n`;\n }\n\n // Different paths — generate two images with dark mode toggle\n return `import type { ReactNode } from 'react';\nimport type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';\n\nexport function baseOptions(): BaseLayoutProps {\n return {\n nav: {\n title: (\n <>\n <img src=\"${light}\" alt=\"${config.name}\" style={{ height: 28 }} className=\"dark:hidden\" />\n <img src=\"${dark}\" alt=\"${config.name}\" style={{ height: 28 }} className=\"hidden dark:block\" />\n </>\n ) as ReactNode,\n },\n };\n}\n`;\n }\n\n // Plain text logo\n return `import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';\n\nexport function baseOptions(): BaseLayoutProps {\n return {\n nav: {\n title: '${logo}',\n },\n };\n}\n`;\n}\n","export function generateLibSource(): string {\n return `import { docs } from '@/.source/server';\nimport { loader } from 'fumadocs-core/source';\n\nexport const source = loader({\n baseUrl: '/',\n source: docs.toFumadocsSource(),\n});\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generateNextConfig(ctx: { config: OpenManualConfig }): string {\n const { config } = ctx;\n const siteUrl = config.siteUrl ?? '';\n\n return `import { createMDX } from 'fumadocs-mdx/next';\n\nconst withMDX = createMDX();\n\n/** @type {import('next').NextConfig} */\nconst config = {\n reactStrictMode: true,${siteUrl ? `\\n output: 'export',` : ''}\n images: {\n unoptimized: true,\n },\n};\n\nexport default withMDX(config);\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generatePackageJson(_ctx: {\n config: OpenManualConfig;\n projectDir: string;\n}): string {\n const pkg = {\n name: 'openmanual-app',\n type: 'module',\n private: true,\n scripts: {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n },\n dependencies: {\n '@tailwindcss/postcss': '^4.1.15',\n 'fumadocs-core': '^16.7.7',\n 'fumadocs-mdx': '^14.2.11',\n 'fumadocs-ui': '^16.7.7',\n next: '^16.2.1',\n postcss: '^8.5.8',\n react: '^19.1.0',\n 'react-dom': '^19.1.0',\n tailwindcss: '^4.1.15',\n },\n };\n\n return `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generatePage(_ctx: { config: OpenManualConfig }): string {\n return `import { source } from '@/lib/source';\nimport { notFound } from 'next/navigation';\nimport { DocsPage, DocsBody, DocsTitle, DocsDescription } from 'fumadocs-ui/page';\nimport defaultMdxComponents from 'fumadocs-ui/mdx';\n\nexport default async function Page({ params }: { params: Promise<{ slug?: string[] }> }) {\n const { slug } = await params;\n const page = source.getPage(slug);\n\n if (!page) {\n notFound();\n }\n\n const MDX = page.data.body;\n\n return (\n <DocsPage toc={page.data.toc}>\n <DocsTitle>{page.data.title}</DocsTitle>\n {page.data.description && (\n <DocsDescription>{page.data.description}</DocsDescription>\n )}\n <DocsBody>\n <MDX components={{ ...defaultMdxComponents }} />\n </DocsBody>\n </DocsPage>\n );\n}\n\nexport function generateStaticParams() {\n const params = source.generateParams();\n if (!params.some((p: { slug: string[] }) => p.slug.length === 0)) {\n params.unshift({ ...params[0], slug: [] });\n }\n return params;\n}\n`;\n}\n","export function generatePostcssConfig(): string {\n return `/** @type {import('postcss-load-config').Config} */\nconst config = {\n plugins: {\n '@tailwindcss/postcss': {},\n },\n};\n\nexport default config;\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generateProvider(ctx: { config: OpenManualConfig }): string {\n const searchEnabled = ctx.config.search?.enabled !== false;\n\n return `'use client';\n\nimport { RootProvider } from 'fumadocs-ui/provider/next';\nimport type { ReactNode } from 'react';\n\nexport function Provider({ children }: { children: ReactNode }) {\n return (\n <RootProvider\n search={{\n enabled: ${searchEnabled},\n }}\n >\n {children}\n </RootProvider>\n );\n}\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generateSourceConfig(_ctx: { config: OpenManualConfig }): string {\n return `import { defineDocs, defineConfig } from 'fumadocs-mdx/config';\n\nexport const docs = defineDocs({\n dir: 'content',\n});\n\nexport default defineConfig();\n`;\n}\n","export function generateTsconfig(): string {\n return `${JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n lib: ['dom', 'dom.iterable', 'esnext'],\n module: 'ESNext',\n moduleResolution: 'Bundler',\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n jsx: 'react-jsx',\n noEmit: true,\n allowJs: true,\n resolveJsonModule: true,\n isolatedModules: true,\n incremental: true,\n plugins: [{ name: 'next' }],\n paths: {\n '@/*': ['./*'],\n },\n },\n include: [\n '**/*.ts',\n '**/*.tsx',\n 'next-env.d.ts',\n '.next/types/**/*.ts',\n '.next/dev/types/**/*.ts',\n ],\n exclude: ['node_modules'],\n },\n null,\n 2\n )}\\n`;\n}\n","import { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nexport async function installDeps(appDir: string): Promise<void> {\n const nodeModules = resolve(appDir, 'node_modules');\n\n // Skip install if node_modules already exists\n if (existsSync(nodeModules)) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const child = spawn('pnpm', ['install', '--no-frozen-lockfile'], {\n cwd: appDir,\n stdio: 'pipe',\n env: { ...process.env },\n });\n\n let stderr = '';\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('error', reject);\n child.on('exit', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`pnpm install failed: ${stderr}`));\n }\n });\n });\n}\n","const COLORS = {\n reset: '\\x1b[0m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n red: '\\x1b[31m',\n cyan: '\\x1b[36m',\n gray: '\\x1b[90m',\n bold: '\\x1b[1m',\n} as const;\n\nfunction timestamp(): string {\n return new Date().toLocaleTimeString('zh-CN', { hour12: false });\n}\n\nexport const logger = {\n info(msg: string): void {\n console.log(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.cyan}info${COLORS.reset} ${msg}`\n );\n },\n\n success(msg: string): void {\n console.log(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.green}done${COLORS.reset} ${msg}`\n );\n },\n\n warn(msg: string): void {\n console.warn(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.yellow}warn${COLORS.reset} ${msg}`\n );\n },\n\n error(msg: string): void {\n console.error(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.red}error${COLORS.reset} ${msg}`\n );\n },\n\n step(msg: string): void {\n console.log(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.bold}→${COLORS.reset} ${msg}`\n );\n },\n};\n","import { existsSync } from 'node:fs';\nimport { lstat, mkdir, rm, symlink } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\n\nconst TEMP_DIR_NAME = '.openmanual';\n\nexport function getTempDir(cwd: string): string {\n return join(cwd, TEMP_DIR_NAME);\n}\n\nexport function getAppDir(cwd: string): string {\n return join(getTempDir(cwd), 'app');\n}\n\nexport async function ensureTempDir(cwd: string): Promise<string> {\n const tempDir = getTempDir(cwd);\n const appDir = getAppDir(cwd);\n\n await mkdir(tempDir, { recursive: true });\n await mkdir(join(appDir, 'app'), { recursive: true });\n\n return tempDir;\n}\n\nexport async function cleanTempDir(cwd: string): Promise<void> {\n const tempDir = getTempDir(cwd);\n if (existsSync(tempDir)) {\n await rm(tempDir, { recursive: true, force: true });\n }\n}\n\nexport async function createSymlink(target: string, linkPath: string): Promise<void> {\n const resolvedTarget = resolve(target);\n const resolvedLink = resolve(linkPath);\n\n try {\n await lstat(resolvedLink);\n // Remove existing symlink or directory\n await rm(resolvedLink, { recursive: true, force: true });\n } catch {\n // link doesn't exist, that's fine\n }\n\n await symlink(resolvedTarget, resolvedLink, 'junction');\n}\n","import { type ChildProcess, spawn } from 'node:child_process';\nimport { extname, resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig } from '../../core/config/loader.js';\nimport { generateAll } from '../../core/generator/index.js';\nimport { installDeps } from '../../utils/install-deps.js';\nimport { logger } from '../../utils/logger.js';\nimport { createSymlink, ensureTempDir, getAppDir } from '../../utils/temp-dir.js';\n\nexport const devCommand = new Command('dev')\n .description('启动开发服务器')\n .option('-p, --port <port>', '端口号', '3000')\n .option('--watch', '监听框架源码变更并自动重新生成', false)\n .option('--cwd <path>', '项目目录(watch 模式下使用)')\n .action(async (options) => {\n const cwd = options.cwd ? resolve(options.cwd) : process.cwd();\n\n try {\n logger.step('读取配置文件...');\n const config = await loadConfig(cwd);\n\n logger.step('生成临时应用...');\n const tempDir = await ensureTempDir(cwd);\n const appDir = getAppDir(cwd);\n const contentDir = resolve(cwd, config.contentDir ?? 'content');\n\n const ctx = {\n config,\n projectDir: cwd,\n appDir,\n contentDir: config.contentDir ?? 'content',\n };\n\n await generateAll(ctx);\n\n // Symlink content directory\n await createSymlink(contentDir, resolve(appDir, 'content'));\n\n // Symlink public directory if exists\n const publicDir = resolve(cwd, 'public');\n try {\n const { stat } = await import('node:fs/promises');\n await stat(publicDir);\n await createSymlink(publicDir, resolve(appDir, 'public'));\n } catch {\n // no public dir, that's fine\n }\n\n logger.step('安装依赖...');\n await installDeps(appDir);\n\n logger.success('开发服务器启动中...');\n logger.info(`内容目录: ${contentDir}`);\n logger.info(`临时目录: ${tempDir}`);\n logger.info(`端口: ${options.port}`);\n\n const nextChild = spawn('npx', ['next', 'dev', '--port', options.port], {\n cwd: appDir,\n stdio: 'inherit',\n env: { ...process.env },\n });\n\n nextChild.on('error', (err) => {\n logger.error(`启动失败: ${err.message}`);\n process.exit(1);\n });\n\n nextChild.on('exit', (code) => {\n if (code !== 0 && code !== null) {\n process.exit(code);\n }\n });\n\n // Watch mode: monitor framework source and config changes\n let watcher: InstanceType<typeof import('chokidar').FSWatcher> | undefined;\n let regenTimer: ReturnType<typeof setTimeout> | undefined;\n\n if (options.watch) {\n const openmanualRoot = process.env.OPENMANUAL_ROOT;\n if (!openmanualRoot) {\n logger.warn('OPENMANUAL_ROOT 未设置,无法监听框架源码变更');\n } else {\n const chokidar = await import('chokidar');\n const srcDir = resolve(openmanualRoot, 'src');\n const configFile = resolve(cwd, 'openmanual.json');\n\n watcher = chokidar.watch(srcDir, {\n ignoreInitial: true,\n ignored: [\n '**/__tests__/**',\n '**/*.test.ts',\n (path: string) => {\n const ext = extname(path);\n if (!ext) return false; // 无扩展名 = 目录,不忽略\n return ext !== '.ts' && ext !== '.tsx';\n },\n ],\n });\n watcher.add(configFile);\n\n watcher.on('all', (event, filePath) => {\n if (event === 'add' || event === 'change' || event === 'unlink') {\n logger.info(`检测到变更: ${filePath}`);\n clearTimeout(regenTimer);\n regenTimer = setTimeout(() => {\n spawnRegenerate(openmanualRoot, cwd, nextChild);\n }, 300);\n }\n });\n\n logger.success('Watch 模式已启用,监听框架源码和配置变更');\n }\n }\n\n // Handle graceful shutdown\n const cleanup = () => {\n clearTimeout(regenTimer);\n watcher?.close();\n nextChild.kill();\n process.exit(0);\n };\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(message);\n process.exit(1);\n }\n });\n\nfunction spawnRegenerate(openmanualRoot: string, cwd: string, nextChild: ChildProcess): void {\n if (nextChild.exitCode !== null) {\n logger.warn('Next.js 进程已退出,跳过重新生成');\n return;\n }\n\n logger.step('重新生成文件...');\n\n const binPath = resolve(openmanualRoot, 'src/cli/bin.ts');\n const tsxPath = resolve(openmanualRoot, 'node_modules/.bin/tsx');\n const child = spawn(tsxPath, [binPath, '_regenerate', '--cwd', cwd], {\n stdio: 'inherit',\n env: { ...process.env },\n });\n\n child.on('exit', (code) => {\n if (code === 0) {\n logger.success('文件重新生成完成');\n } else {\n logger.error(`重新生成失败 (exit code: ${code})`);\n }\n });\n\n child.on('error', (err) => {\n logger.error(`重新生成进程错误: ${err.message}`);\n });\n}\n","import { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig } from '../../core/config/loader.js';\nimport { logger } from '../../utils/logger.js';\n\nexport const previewCommand = new Command('preview')\n .description('预览构建产物')\n .option('-p, --port <port>', '端口号', '8080')\n .option('-d, --dir <dir>', '产物目录')\n .action(async (options) => {\n const cwd = process.cwd();\n\n try {\n let outputDir = options.dir;\n if (!outputDir) {\n const config = await loadConfig(cwd);\n outputDir = resolve(cwd, config.outputDir ?? 'dist');\n }\n\n if (!existsSync(outputDir)) {\n logger.error(`产物目录不存在: ${outputDir}`);\n logger.info('请先运行 openmanual build');\n process.exit(1);\n }\n\n logger.info(`预览目录: ${outputDir}`);\n logger.info(`预览地址: http://localhost:${options.port}`);\n\n const child = spawn('npx', ['serve', outputDir, '-p', options.port], {\n stdio: 'inherit',\n env: { ...process.env },\n });\n\n child.on('error', (err) => {\n logger.error(`启动失败: ${err.message}`);\n process.exit(1);\n });\n\n const cleanup = () => {\n child.kill();\n process.exit(0);\n };\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(message);\n process.exit(1);\n }\n });\n","import { rm } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig } from '../../core/config/loader.js';\nimport { generateAll } from '../../core/generator/index.js';\nimport { createSymlink, ensureTempDir, getAppDir } from '../../utils/temp-dir.js';\n\nexport const regenerateCommand = new Command('_regenerate')\n .description('内部命令:重新生成文件')\n .helpOption(false)\n .option('--cwd <path>', '项目目录')\n .action(async (options) => {\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const config = await loadConfig(cwd);\n const appDir = getAppDir(cwd);\n const contentDir = resolve(cwd, config.contentDir ?? 'content');\n\n const ctx = {\n config,\n projectDir: cwd,\n appDir,\n contentDir: config.contentDir ?? 'content',\n };\n\n await ensureTempDir(cwd);\n\n // 清理旧的生成物,避免残留文件导致冲突\n const entriesToClean = [\n 'app',\n 'lib',\n 'source.config.ts',\n 'next.config.mjs',\n 'global.css',\n 'package.json',\n 'tsconfig.json',\n 'postcss.config.mjs',\n ];\n for (const entry of entriesToClean) {\n await rm(join(appDir, entry), { recursive: true, force: true });\n }\n\n await generateAll(ctx);\n await createSymlink(contentDir, resolve(appDir, 'content'));\n\n // Symlink public directory if exists\n const publicDir = resolve(cwd, 'public');\n try {\n const { stat } = await import('node:fs/promises');\n await stat(publicDir);\n await createSymlink(publicDir, resolve(appDir, 'public'));\n } catch {\n // no public dir, that's fine\n }\n\n console.log('[openmanual] regenerate:ok');\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`[openmanual] regenerate:fail ${message}`);\n process.exit(1);\n }\n });\n"],"mappings":"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","names":["join","Command","spawn","mkdir","resolve","join","join","resolve","existsSync","mkdir","join","resolve","resolve","spawn","mkdir","spawn","resolve","Command","Command","resolve","spawn","spawn","existsSync","resolve","Command","Command","resolve","existsSync","spawn","rm","join","resolve","Command","Command","resolve","rm","join","join","Command"]}
1
+ {"version":3,"sources":["../src/cli/bin.ts","../src/cli/commands/build.ts","../src/core/config/loader.ts","../src/core/config/schema.ts","../src/core/generator/index.ts","../src/core/generator/global-css.ts","../src/core/generator/layout.ts","../src/core/generator/lib-source.ts","../src/core/generator/next-config.ts","../src/core/generator/package-json.ts","../src/core/generator/page.ts","../src/core/generator/postcss-config.ts","../src/core/generator/provider.ts","../src/core/generator/source-config.ts","../src/core/generator/tsconfig.ts","../src/utils/install-deps.ts","../src/utils/logger.ts","../src/utils/temp-dir.ts","../src/cli/commands/dev.ts","../src/utils/check-code-langs.ts","../src/cli/commands/preview.ts","../src/cli/commands/regenerate.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { basename, dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { Command } from 'commander';\nimport { buildCommand } from './commands/build.js';\nimport { devCommand } from './commands/dev.js';\nimport { previewCommand } from './commands/preview.js';\nimport { regenerateCommand } from './commands/regenerate.js';\n\ndeclare const __VERSION__: string;\n\nfunction getVersion(): string {\n if (typeof __VERSION__ !== 'undefined') {\n return __VERSION__;\n }\n try {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkgPath = join(__dirname, '..', 'package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { version: string };\n return pkg.version;\n } catch {\n // tsx dev 模式下 __dirname 是 src/cli,需要多上一层\n try {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkgPath = join(__dirname, '..', '..', 'package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { version: string };\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n }\n}\n\nconst program = new Command();\nconst commandName = basename(process.argv[1] ?? 'openmanual');\n\nprogram\n .name(commandName)\n .description('AI 友好的开源文档系统框架')\n .version(getVersion(), '-v, --version');\n\nprogram.addCommand(devCommand);\nprogram.addCommand(buildCommand);\nprogram.addCommand(previewCommand);\nprogram.addCommand(regenerateCommand, { hidden: true });\n\nprogram.parse();\n","import { spawn } from 'node:child_process';\nimport { cp, mkdir } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig } from '../../core/config/loader.js';\nimport { generateAll } from '../../core/generator/index.js';\nimport { installDeps } from '../../utils/install-deps.js';\nimport { logger } from '../../utils/logger.js';\nimport { cleanTempDir, createSymlink, ensureTempDir, getAppDir } from '../../utils/temp-dir.js';\n\nexport const buildCommand = new Command('build').description('构建静态站点').action(async () => {\n const cwd = process.cwd();\n\n try {\n logger.step('读取配置文件...');\n const config = await loadConfig(cwd);\n\n logger.step('生成临时应用...');\n const appDir = getAppDir(cwd);\n const contentDir = resolve(cwd, config.contentDir ?? 'content');\n\n await ensureTempDir(cwd);\n\n const ctx = {\n config,\n projectDir: cwd,\n appDir,\n contentDir: config.contentDir ?? 'content',\n };\n\n await generateAll(ctx);\n\n // Symlink content directory\n await createSymlink(contentDir, resolve(appDir, 'content'));\n\n // Symlink public directory if exists\n const publicDir = resolve(cwd, 'public');\n try {\n const { stat } = await import('node:fs/promises');\n await stat(publicDir);\n await createSymlink(publicDir, resolve(appDir, 'public'));\n } catch {\n // no public dir, that's fine\n }\n\n logger.step('安装依赖...');\n await installDeps(appDir);\n\n logger.step('构建静态站点...');\n const buildResult = spawn('npx', ['next', 'build'], {\n cwd: appDir,\n stdio: 'inherit',\n env: { ...process.env },\n });\n\n await new Promise<void>((resolve, reject) => {\n buildResult.on('error', reject);\n buildResult.on('exit', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Build failed with code ${code}`));\n }\n });\n });\n\n // Copy output to user's output dir\n const outputDir = resolve(cwd, config.outputDir ?? 'dist');\n await mkdir(outputDir, { recursive: true });\n\n const nextOutput = resolve(appDir, 'out');\n try {\n await cp(nextOutput, outputDir, { recursive: true });\n logger.success(`静态站点已输出到: ${outputDir}`);\n } catch {\n // If no 'out' dir, check .next/static\n logger.warn('未找到静态导出产物,请检查 next.config.mjs 中 output: \"export\" 配置');\n }\n\n logger.step('清理临时文件...');\n await cleanTempDir(cwd);\n\n logger.success('构建完成!');\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(message);\n process.exit(1);\n }\n});\n","import { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { type OpenManualConfig, OpenManualConfigSchema } from './schema.js';\n\nconst DEFAULT_CONFIG: Partial<OpenManualConfig> = {\n contentDir: 'content',\n outputDir: 'dist',\n locale: 'zh',\n navbar: {},\n footer: {},\n theme: {\n primaryHue: 213,\n darkMode: true,\n },\n search: {\n enabled: true,\n },\n mdx: {},\n};\n\nexport async function loadConfig(cwd: string = process.cwd()): Promise<OpenManualConfig> {\n const configPath = join(cwd, 'openmanual.json');\n\n let rawJson: string;\n try {\n rawJson = await readFile(configPath, 'utf-8');\n } catch {\n throw new Error(`openmanual.json not found in ${cwd}. Please create one.`);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawJson);\n } catch {\n throw new Error('openmanual.json is not valid JSON.');\n }\n\n const result = OpenManualConfigSchema.safeParse(parsed);\n if (!result.success) {\n const errors = result.error.issues\n .map((i) => ` - ${i.path.join('.')}: ${i.message}`)\n .join('\\n');\n throw new Error(`openmanual.json validation failed:\\n${errors}`);\n }\n\n return mergeDefaults(result.data);\n}\n\nfunction mergeDefaults(config: OpenManualConfig): OpenManualConfig {\n return {\n ...config,\n contentPolicy: config.contentPolicy ?? 'strict',\n contentDir: config.contentDir ?? DEFAULT_CONFIG.contentDir ?? 'content',\n outputDir: config.outputDir ?? DEFAULT_CONFIG.outputDir ?? 'dist',\n locale: config.locale ?? DEFAULT_CONFIG.locale ?? 'zh',\n navbar: {\n ...DEFAULT_CONFIG.navbar,\n ...config.navbar,\n logo: config.navbar?.logo ?? config.name,\n },\n footer: {\n ...DEFAULT_CONFIG.footer,\n ...config.footer,\n text: config.footer?.text ?? `MIT ${new Date().getFullYear()} © ${config.name}.`,\n },\n theme: {\n ...DEFAULT_CONFIG.theme,\n ...config.theme,\n },\n search: {\n ...DEFAULT_CONFIG.search,\n ...config.search,\n },\n mdx: {\n ...DEFAULT_CONFIG.mdx,\n ...config.mdx,\n },\n };\n}\n","import { z } from 'zod';\n\nexport const LogoSchema = z.union([z.string(), z.object({ light: z.string(), dark: z.string() })]);\n\nexport const NavbarSchema = z.object({\n logo: LogoSchema.optional(),\n github: z.url().optional(),\n links: z\n .array(\n z.object({\n label: z.string(),\n href: z.string(),\n })\n )\n .optional(),\n});\n\nexport const FooterSchema = z.object({\n text: z.string().optional(),\n});\n\nexport const SidebarPageSchema = z.object({\n slug: z.string(),\n title: z.string(),\n icon: z.string().optional(),\n});\n\nexport const SidebarGroupSchema = z.object({\n group: z.string(),\n icon: z.string().optional(),\n collapsed: z.boolean().optional(),\n pages: z.array(SidebarPageSchema),\n});\n\nexport const ThemeSchema = z.object({\n primaryHue: z.number().min(0).max(360).optional(),\n darkMode: z.boolean().optional(),\n});\n\nexport const SearchSchema = z.object({\n enabled: z.boolean().optional(),\n});\n\nexport const MdxSchema = z.object({\n latex: z.boolean().optional(),\n});\n\nexport const OpenManualConfigSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n contentDir: z.string().optional(),\n outputDir: z.string().optional(),\n siteUrl: z.url().optional(),\n locale: z.string().optional(),\n contentPolicy: z.enum(['strict', 'all']).optional(),\n navbar: NavbarSchema.optional(),\n footer: FooterSchema.optional(),\n sidebar: z.array(SidebarGroupSchema).optional(),\n theme: ThemeSchema.optional(),\n search: SearchSchema.optional(),\n mdx: MdxSchema.optional(),\n});\n\nexport type OpenManualConfig = z.infer<typeof OpenManualConfigSchema>;\nexport type NavbarConfig = z.infer<typeof NavbarSchema>;\nexport type FooterConfig = z.infer<typeof FooterSchema>;\nexport type SidebarGroup = z.infer<typeof SidebarGroupSchema>;\nexport type SidebarPage = z.infer<typeof SidebarPageSchema>;\nexport type ThemeConfig = z.infer<typeof ThemeSchema>;\nexport type LogoConfig = z.infer<typeof LogoSchema>;\n\nexport function collectConfiguredSlugs(config: OpenManualConfig): Set<string> {\n const slugs = new Set<string>();\n if (config.sidebar) {\n for (const group of config.sidebar) {\n for (const page of group.pages) {\n slugs.add(page.slug);\n }\n }\n }\n return slugs;\n}\n","import { access, mkdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { OpenManualConfig } from '../config/schema.js';\nimport { generateGlobalCss } from './global-css.js';\nimport { generateLayout, isImagePath, resolveLogoPaths } from './layout.js';\nimport { generateLibSource } from './lib-source.js';\nimport { generateNextConfig } from './next-config.js';\nimport { generatePackageJson } from './package-json.js';\nimport { generatePage } from './page.js';\nimport { generatePostcssConfig } from './postcss-config.js';\nimport { generateProvider } from './provider.js';\nimport { generateSourceConfig } from './source-config.js';\nimport { generateTsconfig } from './tsconfig.js';\n\nexport interface GenerateContext {\n config: OpenManualConfig;\n /** Absolute path to user's project root */\n projectDir: string;\n /** Absolute path to .openmanual/app */\n appDir: string;\n /** Content directory relative to project root */\n contentDir: string;\n}\n\nexport async function generateAll(ctx: GenerateContext): Promise<void> {\n const files: Array<{ path: string; content: string }> = [\n {\n path: 'source.config.ts',\n content: generateSourceConfig(ctx),\n },\n {\n path: 'next.config.mjs',\n content: generateNextConfig(ctx),\n },\n {\n path: 'global.css',\n content: generateGlobalCss(ctx),\n },\n {\n path: 'package.json',\n content: generatePackageJson(ctx),\n },\n {\n path: 'tsconfig.json',\n content: generateTsconfig(),\n },\n {\n path: 'postcss.config.mjs',\n content: generatePostcssConfig(),\n },\n {\n path: 'lib/source.ts',\n content: generateLibSource(),\n },\n {\n path: 'lib/layout.tsx',\n content: generateLayout(ctx),\n },\n {\n path: 'app/layout.tsx',\n content: generateRootLayout(),\n },\n {\n path: 'app/provider.tsx',\n content: generateProvider(ctx),\n },\n {\n path: 'app/[[...slug]]/layout.tsx',\n content: generateDocsLayout(ctx),\n },\n {\n path: 'app/[[...slug]]/page.tsx',\n content: generatePage(ctx),\n },\n ];\n\n for (const file of files) {\n const fullPath = join(ctx.appDir, file.path);\n const dir = join(fullPath, '..');\n await mkdir(dir, { recursive: true });\n await writeFile(fullPath, file.content, 'utf-8');\n }\n\n // Generate logo SVG in public/ when logo is an image path\n const logo = ctx.config.navbar?.logo;\n if (logo && typeof logo === 'string' && isImagePath(logo)) {\n await ensureLogoFile(ctx, logo, 'light');\n } else if (logo && typeof logo === 'object') {\n const { light, dark } = resolveLogoPaths(logo);\n if (isImagePath(light)) {\n await ensureLogoFile(ctx, light, 'light');\n }\n if (isImagePath(dark) && dark !== light) {\n await ensureLogoFile(ctx, dark, 'dark');\n }\n }\n}\n\nfunction generateRootLayout(): string {\n return `import { Provider } from './provider';\nimport type { ReactNode } from 'react';\nimport '../global.css';\n\nexport default function RootLayout({ children }: { children: ReactNode }) {\n return (\n <html lang=\"zh\" suppressHydrationWarning>\n <body className=\"flex flex-col min-h-screen\">\n <Provider>{children}</Provider>\n </body>\n </html>\n );\n}\n`;\n}\n\nfunction generateDocsLayout(ctx: GenerateContext): string {\n const { config } = ctx;\n const githubLink = config.navbar?.github ?? '';\n const navLinks = config.navbar?.links ?? [];\n const footerText = config.footer?.text ?? '';\n\n const linksArray = navLinks.map((l) => ({\n text: l.label,\n url: l.href,\n external: true,\n }));\n\n const githubLine = githubLink ? `\\n github: '${githubLink}',` : '';\n\n const linksLine = linksArray.length > 0 ? `\\n links: ${JSON.stringify(linksArray)},` : '';\n\n const footerLine = footerText\n ? `\\n footer: { children: '${footerText.replace(/'/g, \"\\\\'\")}' },`\n : '';\n\n return `import { DocsLayout } from 'fumadocs-ui/layouts/docs';\nimport { baseOptions } from '@/lib/layout';\nimport { source } from '@/lib/source';\nimport type { ReactNode } from 'react';\n\nconst docsOptions = {\n ...baseOptions(),\n tree: source.getPageTree(),${githubLine}${linksLine}${footerLine}\n};\n\nexport default function DocsLayoutWrapper({ children }: { children: ReactNode }) {\n return (\n <DocsLayout {...docsOptions}>\n {children}\n </DocsLayout>\n );\n}\n`;\n}\n\nexport function generateOpenManualLogoSvg(\n name: string,\n variant: 'light' | 'dark' = 'light'\n): string {\n const textColor = variant === 'dark' ? '#E8E0D4' : '#000000';\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 190 32\" width=\"190\" height=\"32\">\n <text x=\"0\" y=\"25\" font-family=\"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\" font-size=\"32\" font-weight=\"700\">\n <tspan fill=\"#2B7A4B\" font-size=\"34\">${name.charAt(0)}</tspan><tspan fill=\"${textColor}\">${name.slice(1)}</tspan>\n </text>\n</svg>\n`;\n}\n\nasync function ensureLogoFile(\n ctx: GenerateContext,\n logoPath: string,\n variant: 'light' | 'dark'\n): Promise<void> {\n const userLogoPath = join(ctx.projectDir, 'public', logoPath.replace(/^\\//, ''));\n try {\n await access(userLogoPath);\n } catch {\n const publicDir = join(ctx.appDir, 'public');\n await mkdir(publicDir, { recursive: true });\n const fullPath = join(publicDir, logoPath.replace(/^\\//, ''));\n await mkdir(join(fullPath, '..'), { recursive: true });\n await writeFile(fullPath, generateOpenManualLogoSvg(ctx.config.name, variant), 'utf-8');\n }\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generateGlobalCss(ctx: { config: OpenManualConfig }): string {\n const { config } = ctx;\n const primaryHue = config.theme?.primaryHue ?? 213;\n const darkMode = config.theme?.darkMode ?? true;\n\n const darkBlock = darkMode\n ? `\n.dark {\n --primary-hue: ${primaryHue};\n\n /* 温暖的深色皮革背景 */\n --color-fd-background: hsl(30, 18%, 10%);\n --color-fd-foreground: hsl(35, 15%, 90%);\n --color-fd-muted: hsl(30, 14%, 14%);\n --color-fd-muted-foreground: hsla(30, 10%, 65%, 0.8);\n --color-fd-popover: hsl(30, 16%, 13%);\n --color-fd-popover-foreground: hsl(35, 12%, 87%);\n --color-fd-card: hsl(30, 15%, 12%);\n --color-fd-card-foreground: hsl(35, 15%, 93%);\n --color-fd-border: hsla(30, 12%, 35%, 25%);\n --color-fd-primary: hsl(35, 20%, 92%);\n --color-fd-primary-foreground: hsl(30, 25%, 10%);\n --color-fd-secondary: hsl(30, 12%, 16%);\n --color-fd-secondary-foreground: hsl(35, 10%, 88%);\n --color-fd-accent: hsla(30, 15%, 30%, 35%);\n --color-fd-accent-foreground: hsl(35, 12%, 88%);\n --color-fd-ring: hsl(30, 30%, 50%);\n --color-fd-overlay: hsla(25, 20%, 5%, 0.5);\n}\n\n.dark body {\n background: linear-gradient(hsla(30, 30%, 15%, 0.4), transparent 20rem, transparent);\n}\n`\n : '';\n\n return `@import 'tailwindcss';\n@import 'fumadocs-ui/style.css';\n@custom-variant dark (&:is(.dark, .dark *));\n\n:root {\n --primary-hue: ${primaryHue};\n\n /* 护眼暖色阅读背景 */\n --color-fd-background: hsl(40, 22%, 96.5%); /* #faf9f6 纸张白 */\n --color-fd-foreground: hsl(0, 0%, 17.3%); /* #2c2c2c 柔黑 */\n --color-fd-muted: hsl(40, 15%, 95%); /* 柔和的暖灰背景 */\n --color-fd-card: hsl(40, 18%, 94%); /* 卡片背景 */\n --color-fd-popover: hsl(40, 20%, 97.5%); /* 弹窗背景 */\n}\n${darkBlock}`;\n}\n","import type { LogoConfig, OpenManualConfig } from '../config/schema.js';\n\nconst IMAGE_EXTENSIONS = ['.svg', '.png', '.jpg', '.jpeg', '.webp'];\n\nexport function isImagePath(value: string): boolean {\n if (value.startsWith('/')) return true;\n return IMAGE_EXTENSIONS.some((ext) => value.toLowerCase().endsWith(ext));\n}\n\nexport function resolveLogoPaths(logo: LogoConfig): { light: string; dark: string } {\n if (typeof logo === 'string') {\n return { light: logo, dark: logo };\n }\n return { light: logo.light, dark: logo.dark };\n}\n\nexport function generateLayout(ctx: { config: OpenManualConfig }): string {\n const { config } = ctx;\n const logo = config.navbar?.logo ?? config.name;\n\n // String logo that is an image path — backward compatible single image\n if (typeof logo === 'string' && isImagePath(logo)) {\n return `import type { ReactNode } from 'react';\nimport type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';\n\nexport function baseOptions(): BaseLayoutProps {\n return {\n nav: {\n title: (\n <>\n <img src=\"${logo}\" alt=\"${config.name}\" style={{ height: 28 }} />\n </>\n ) as ReactNode,\n },\n };\n}\n`;\n }\n\n // Object logo { light, dark }\n if (typeof logo === 'object') {\n const { light, dark } = logo;\n\n // Same path — treat as single image\n if (light === dark) {\n return `import type { ReactNode } from 'react';\nimport type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';\n\nexport function baseOptions(): BaseLayoutProps {\n return {\n nav: {\n title: (\n <>\n <img src=\"${light}\" alt=\"${config.name}\" style={{ height: 28 }} />\n </>\n ) as ReactNode,\n },\n };\n}\n`;\n }\n\n // Different paths — generate two images with dark mode toggle\n return `import type { ReactNode } from 'react';\nimport type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';\n\nexport function baseOptions(): BaseLayoutProps {\n return {\n nav: {\n title: (\n <>\n <img src=\"${light}\" alt=\"${config.name}\" style={{ height: 28 }} className=\"dark:hidden\" />\n <img src=\"${dark}\" alt=\"${config.name}\" style={{ height: 28 }} className=\"hidden dark:block\" />\n </>\n ) as ReactNode,\n },\n };\n}\n`;\n }\n\n // Plain text logo\n return `import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';\n\nexport function baseOptions(): BaseLayoutProps {\n return {\n nav: {\n title: '${logo}',\n },\n };\n}\n`;\n}\n","export function generateLibSource(): string {\n return `import { docs } from '@/.source/server';\nimport { loader } from 'fumadocs-core/source';\n\nexport const source = loader({\n baseUrl: '/',\n source: docs.toFumadocsSource(),\n});\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generateNextConfig(ctx: { config: OpenManualConfig }): string {\n const { config } = ctx;\n const siteUrl = config.siteUrl ?? '';\n\n return `import { createMDX } from 'fumadocs-mdx/next';\n\nconst withMDX = createMDX();\n\n/** @type {import('next').NextConfig} */\nconst config = {\n reactStrictMode: true,${siteUrl ? `\\n output: 'export',` : ''}\n images: {\n unoptimized: true,\n },\n};\n\nexport default withMDX(config);\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generatePackageJson(_ctx: {\n config: OpenManualConfig;\n projectDir: string;\n}): string {\n const pkg = {\n name: 'openmanual-app',\n type: 'module',\n private: true,\n scripts: {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n },\n dependencies: {\n '@tailwindcss/postcss': '^4.1.15',\n 'fumadocs-core': '^16.7.7',\n 'fumadocs-mdx': '^14.2.11',\n 'fumadocs-ui': '^16.7.7',\n next: '^16.2.1',\n postcss: '^8.5.8',\n react: '^19.1.0',\n 'react-dom': '^19.1.0',\n tailwindcss: '^4.1.15',\n },\n };\n\n return `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nfunction buildAllowedSlugs(config: OpenManualConfig): Set<string> {\n const slugs = new Set<string>();\n if (config.sidebar) {\n for (const group of config.sidebar) {\n for (const page of group.pages) {\n slugs.add(page.slug);\n }\n }\n }\n return slugs;\n}\n\nexport function generatePage(_ctx: { config: OpenManualConfig }): string {\n const isStrict = _ctx.config.contentPolicy !== 'all';\n\n const allowedSlugsSnippet = isStrict\n ? `\nconst allowedSlugs = new Set(${JSON.stringify([...buildAllowedSlugs(_ctx.config)])});\n\nfunction isAllowed(slug: string[] | undefined): boolean {\n if (allowedSlugs.size === 0) return true;\n const key = slug ? slug.join('/') : 'index';\n return allowedSlugs.has(key);\n}\n`\n : '';\n\n const filterInPage = isStrict\n ? `\n if (!isAllowed(slug)) {\n notFound();\n }\n`\n : '';\n\n const filterInStaticParams = isStrict\n ? `\nexport function generateStaticParams() {\n let params = source.generateParams();\n params = params.filter((p: { slug: string[] }) => isAllowed(p.slug));\n if (!params.some((p: { slug: string[] }) => p.slug.length === 0)) {\n params.unshift({ ...params[0], slug: [] });\n }\n return params;\n}`\n : `\nexport function generateStaticParams() {\n const params = source.generateParams();\n if (!params.some((p: { slug: string[] }) => p.slug.length === 0)) {\n params.unshift({ ...params[0], slug: [] });\n }\n return params;\n}`;\n\n return `import { source } from '@/lib/source';\nimport { notFound } from 'next/navigation';\nimport { DocsPage, DocsBody, DocsTitle, DocsDescription } from 'fumadocs-ui/page';\nimport defaultMdxComponents from 'fumadocs-ui/mdx';${allowedSlugsSnippet}\nexport default async function Page({ params }: { params: Promise<{ slug?: string[] }> }) {\n const { slug } = await params;\n const page = source.getPage(slug);\n${filterInPage}\n if (!page) {\n notFound();\n }\n\n const MDX = page.data.body;\n\n return (\n <DocsPage toc={page.data.toc}>\n <DocsTitle>{page.data.title}</DocsTitle>\n {page.data.description && (\n <DocsDescription>{page.data.description}</DocsDescription>\n )}\n <DocsBody>\n <MDX components={{ ...defaultMdxComponents }} />\n </DocsBody>\n </DocsPage>\n );\n}\n${filterInStaticParams}\n`;\n}\n","export function generatePostcssConfig(): string {\n return `/** @type {import('postcss-load-config').Config} */\nconst config = {\n plugins: {\n '@tailwindcss/postcss': {},\n },\n};\n\nexport default config;\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nexport function generateProvider(ctx: { config: OpenManualConfig }): string {\n const searchEnabled = ctx.config.search?.enabled !== false;\n\n return `'use client';\n\nimport { RootProvider } from 'fumadocs-ui/provider/next';\nimport type { ReactNode } from 'react';\n\nexport function Provider({ children }: { children: ReactNode }) {\n return (\n <RootProvider\n search={{\n enabled: ${searchEnabled},\n }}\n >\n {children}\n </RootProvider>\n );\n}\n`;\n}\n","import type { OpenManualConfig } from '../config/schema.js';\n\nfunction buildTitleMap(config: OpenManualConfig): Record<string, string> {\n const map: Record<string, string> = {};\n if (config.sidebar) {\n for (const group of config.sidebar) {\n for (const page of group.pages) {\n map[page.slug] = page.title;\n }\n }\n }\n return map;\n}\n\nfunction buildAllowedSlugs(config: OpenManualConfig): Set<string> {\n const slugs = new Set<string>();\n if (config.sidebar) {\n for (const group of config.sidebar) {\n for (const page of group.pages) {\n slugs.add(page.slug);\n }\n }\n }\n return slugs;\n}\n\nexport function generateSourceConfig(_ctx: { config: OpenManualConfig }): string {\n const titleMap = buildTitleMap(_ctx.config);\n const titleMapEntries = Object.entries(titleMap)\n .map(([slug, title]) => ` '${slug}': '${title.replace(/'/g, \"\\\\'\")}'`)\n .join(',\\n');\n const titleMapStr = titleMapEntries ? `{\\n${titleMapEntries}\\n}` : '{}';\n\n const isStrict = _ctx.config.contentPolicy !== 'all';\n\n const allowedSlugsSnippet = isStrict\n ? `\n\nconst allowedSlugs = new Set(${JSON.stringify([...buildAllowedSlugs(_ctx.config)])});\n\nfunction slugFromPath(path: string): string {\n const normalized = path.replace(/\\\\\\\\/g, '/');\n const idx = normalized.indexOf('content/');\n const relative = idx >= 0 ? normalized.slice(idx + 'content/'.length) : normalized;\n return relative.replace(/\\\\.(md|mdx)$/i, '');\n}\n`\n : '';\n\n const filterSnippet = isStrict\n ? `\n .refine((_data) => {\n const slug = slugFromPath(ctx.path);\n if (allowedSlugs.size > 0 && !allowedSlugs.has(slug)) {\n return false;\n }\n return true;\n })`\n : '';\n\n return `import { defineDocs, defineConfig } from 'fumadocs-mdx/config';\nimport { z } from 'zod';\n\nconst titleMap: Record<string, string> = ${titleMapStr};${allowedSlugsSnippet}\nfunction titleFromPath(path: string): string {\n const normalized = path.replace(/\\\\\\\\/g, '/');\n const idx = normalized.indexOf('content/');\n const relative = idx >= 0 ? normalized.slice(idx + 'content/'.length) : normalized;\n const slug = relative.replace(/\\\\.(md|mdx)$/i, '');\n return titleMap[slug] || slug.split('/').pop() || slug;\n}\n\nexport const docs = defineDocs({\n dir: 'content',\n docs: {\n schema: (ctx) =>\n z.object({\n title: z.string().optional(),\n description: z.string().optional(),\n icon: z.string().optional(),\n full: z.boolean().optional(),\n }).transform((data) => ({\n ...data,\n title: data.title ?? titleFromPath(ctx.path),\n }))${filterSnippet},\n },\n});\n\nexport default defineConfig({\n mdxOptions: {\n rehypeCodeOptions: {\n themes: {\n light: 'github-light',\n dark: 'github-dark',\n },\n defaultColor: false,\n fallbackLanguage: 'text',\n },\n },\n});\n`;\n}\n","export function generateTsconfig(): string {\n return `${JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n lib: ['dom', 'dom.iterable', 'esnext'],\n module: 'ESNext',\n moduleResolution: 'Bundler',\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n jsx: 'react-jsx',\n noEmit: true,\n allowJs: true,\n resolveJsonModule: true,\n isolatedModules: true,\n incremental: true,\n plugins: [{ name: 'next' }],\n paths: {\n '@/*': ['./*'],\n },\n },\n include: [\n '**/*.ts',\n '**/*.tsx',\n 'next-env.d.ts',\n '.next/types/**/*.ts',\n '.next/dev/types/**/*.ts',\n ],\n exclude: ['node_modules'],\n },\n null,\n 2\n )}\\n`;\n}\n","import { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nexport async function installDeps(appDir: string): Promise<void> {\n const nodeModules = resolve(appDir, 'node_modules');\n\n // Skip install if node_modules already exists\n if (existsSync(nodeModules)) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const child = spawn('pnpm', ['install', '--no-frozen-lockfile'], {\n cwd: appDir,\n stdio: 'pipe',\n env: { ...process.env },\n });\n\n let stderr = '';\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('error', reject);\n child.on('exit', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`pnpm install failed: ${stderr}`));\n }\n });\n });\n}\n","const COLORS = {\n reset: '\\x1b[0m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n red: '\\x1b[31m',\n cyan: '\\x1b[36m',\n gray: '\\x1b[90m',\n bold: '\\x1b[1m',\n} as const;\n\nfunction timestamp(): string {\n return new Date().toLocaleTimeString('zh-CN', { hour12: false });\n}\n\nexport const logger = {\n info(msg: string): void {\n console.log(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.cyan}info${COLORS.reset} ${msg}`\n );\n },\n\n success(msg: string): void {\n console.log(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.green}done${COLORS.reset} ${msg}`\n );\n },\n\n warn(msg: string): void {\n console.warn(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.yellow}warn${COLORS.reset} ${msg}`\n );\n },\n\n error(msg: string): void {\n console.error(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.red}error${COLORS.reset} ${msg}`\n );\n },\n\n step(msg: string): void {\n console.log(\n `${COLORS.gray}[${timestamp()}]${COLORS.reset} ${COLORS.bold}→${COLORS.reset} ${msg}`\n );\n },\n};\n","import { existsSync } from 'node:fs';\nimport { lstat, mkdir, rm, symlink } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\n\nconst TEMP_DIR_NAME = '.openmanual';\n\nexport function getTempDir(cwd: string): string {\n return join(cwd, TEMP_DIR_NAME);\n}\n\nexport function getAppDir(cwd: string): string {\n return join(getTempDir(cwd), 'app');\n}\n\nexport async function ensureTempDir(cwd: string): Promise<string> {\n const tempDir = getTempDir(cwd);\n const appDir = getAppDir(cwd);\n\n await mkdir(tempDir, { recursive: true });\n await mkdir(join(appDir, 'app'), { recursive: true });\n\n return tempDir;\n}\n\nexport async function cleanTempDir(cwd: string): Promise<void> {\n const tempDir = getTempDir(cwd);\n if (existsSync(tempDir)) {\n await rm(tempDir, { recursive: true, force: true });\n }\n}\n\nexport async function createSymlink(target: string, linkPath: string): Promise<void> {\n const resolvedTarget = resolve(target);\n const resolvedLink = resolve(linkPath);\n\n try {\n await lstat(resolvedLink);\n // Remove existing symlink or directory\n await rm(resolvedLink, { recursive: true, force: true });\n } catch {\n // link doesn't exist, that's fine\n }\n\n await symlink(resolvedTarget, resolvedLink, 'junction');\n}\n","import { type ChildProcess, spawn } from 'node:child_process';\nimport { extname, resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig } from '../../core/config/loader.js';\nimport { generateAll } from '../../core/generator/index.js';\nimport { checkCodeLangs } from '../../utils/check-code-langs.js';\nimport { installDeps } from '../../utils/install-deps.js';\nimport { logger } from '../../utils/logger.js';\nimport { createSymlink, ensureTempDir, getAppDir } from '../../utils/temp-dir.js';\n\nexport const devCommand = new Command('dev')\n .description('启动开发服务器')\n .option('-p, --port <port>', '端口号', '3000')\n .option('--watch', '监听框架源码变更并自动重新生成', false)\n .option('--cwd <path>', '项目目录(watch 模式下使用)')\n .action(async (options) => {\n const cwd = options.cwd ? resolve(options.cwd) : process.cwd();\n\n try {\n logger.step('读取配置文件...');\n const config = await loadConfig(cwd);\n\n logger.step('生成临时应用...');\n const tempDir = await ensureTempDir(cwd);\n const appDir = getAppDir(cwd);\n const contentDir = resolve(cwd, config.contentDir ?? 'content');\n\n const ctx = {\n config,\n projectDir: cwd,\n appDir,\n contentDir: config.contentDir ?? 'content',\n };\n\n await generateAll(ctx);\n\n // Check for unsupported code block languages\n try {\n const unknownLangs = await checkCodeLangs(contentDir);\n if (unknownLangs.length > 0) {\n logger.warn('以下文件使用了不认识的代码块语言:');\n for (const item of unknownLangs) {\n logger.warn(` ${item.file}:${item.line} - \"${item.lang}\"`);\n }\n logger.warn('建议将这些语言改为受支持的类型,或使用 \"text\" 作为默认值');\n }\n } catch {\n // skip check if shiki is not available\n }\n\n // Symlink content directory\n await createSymlink(contentDir, resolve(appDir, 'content'));\n\n // Symlink public directory if exists\n const publicDir = resolve(cwd, 'public');\n try {\n const { stat } = await import('node:fs/promises');\n await stat(publicDir);\n await createSymlink(publicDir, resolve(appDir, 'public'));\n } catch {\n // no public dir, that's fine\n }\n\n logger.step('安装依赖...');\n await installDeps(appDir);\n\n logger.success('开发服务器启动中...');\n logger.info(`内容目录: ${contentDir}`);\n logger.info(`临时目录: ${tempDir}`);\n logger.info(`端口: ${options.port}`);\n\n const nextChild = spawn('npx', ['next', 'dev', '--port', options.port], {\n cwd: appDir,\n stdio: 'inherit',\n env: { ...process.env },\n });\n\n nextChild.on('error', (err) => {\n logger.error(`启动失败: ${err.message}`);\n process.exit(1);\n });\n\n nextChild.on('exit', (code) => {\n if (code !== 0 && code !== null) {\n process.exit(code);\n }\n });\n\n // Watch mode: monitor framework source and config changes\n let watcher: InstanceType<typeof import('chokidar').FSWatcher> | undefined;\n let regenTimer: ReturnType<typeof setTimeout> | undefined;\n\n if (options.watch) {\n const openmanualRoot = process.env.OPENMANUAL_ROOT;\n if (!openmanualRoot) {\n logger.warn('OPENMANUAL_ROOT 未设置,无法监听框架源码变更');\n } else {\n const chokidar = await import('chokidar');\n const srcDir = resolve(openmanualRoot, 'src');\n const configFile = resolve(cwd, 'openmanual.json');\n\n watcher = chokidar.watch(srcDir, {\n ignoreInitial: true,\n ignored: [\n '**/__tests__/**',\n '**/*.test.ts',\n (path: string) => {\n const ext = extname(path);\n if (!ext) return false; // 无扩展名 = 目录,不忽略\n return ext !== '.ts' && ext !== '.tsx';\n },\n ],\n });\n watcher.add(configFile);\n\n watcher.on('all', (event, filePath) => {\n if (event === 'add' || event === 'change' || event === 'unlink') {\n logger.info(`检测到变更: ${filePath}`);\n clearTimeout(regenTimer);\n regenTimer = setTimeout(() => {\n spawnRegenerate(openmanualRoot, cwd, nextChild);\n }, 300);\n }\n });\n\n logger.success('Watch 模式已启用,监听框架源码和配置变更');\n }\n }\n\n // Handle graceful shutdown\n const cleanup = () => {\n clearTimeout(regenTimer);\n watcher?.close();\n nextChild.kill();\n process.exit(0);\n };\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(message);\n process.exit(1);\n }\n });\n\nfunction spawnRegenerate(openmanualRoot: string, cwd: string, nextChild: ChildProcess): void {\n if (nextChild.exitCode !== null) {\n logger.warn('Next.js 进程已退出,跳过重新生成');\n return;\n }\n\n logger.step('重新生成文件...');\n\n const binPath = resolve(openmanualRoot, 'src/cli/bin.ts');\n const tsxPath = resolve(openmanualRoot, 'node_modules/.bin/tsx');\n const child = spawn(tsxPath, [binPath, '_regenerate', '--cwd', cwd], {\n stdio: 'inherit',\n env: { ...process.env },\n });\n\n child.on('exit', (code) => {\n if (code === 0) {\n logger.success('文件重新生成完成');\n } else {\n logger.error(`重新生成失败 (exit code: ${code})`);\n }\n });\n\n child.on('error', (err) => {\n logger.error(`重新生成进程错误: ${err.message}`);\n });\n}\n","import { readdir, readFile } from 'node:fs/promises';\nimport { join, relative, sep } from 'node:path';\n\nexport interface UnknownLang {\n file: string;\n line: number;\n lang: string;\n}\n\nexport async function checkCodeLangs(contentDir: string): Promise<UnknownLang[]> {\n const { bundledLanguages } = await import('shiki');\n const supportedLangs = new Set(Object.keys(bundledLanguages));\n supportedLangs.add('text');\n supportedLangs.add('txt');\n supportedLangs.add('plaintext');\n supportedLangs.add('plain');\n supportedLangs.add('ansi');\n\n const files = await collectMdFiles(contentDir);\n const results: UnknownLang[] = [];\n\n for (const file of files) {\n const content = await readFile(file, 'utf-8');\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line) continue;\n const match = line.match(/^```(\\S+)/);\n if (match) {\n const lang = match[1];\n if (!lang) continue;\n if (!supportedLangs.has(lang)) {\n results.push({\n file: relative(contentDir, file).split(sep).join('/'),\n line: i + 1,\n lang,\n });\n }\n }\n }\n }\n\n return results;\n}\n\nasync function collectMdFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true });\n const files: string[] = [];\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n files.push(...(await collectMdFiles(fullPath)));\n } else if (entry.isFile() && /\\.(md|mdx)$/i.test(entry.name)) {\n files.push(fullPath);\n }\n }\n\n return files;\n}\n","import { spawn } from 'node:child_process';\nimport { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig } from '../../core/config/loader.js';\nimport { logger } from '../../utils/logger.js';\n\nexport const previewCommand = new Command('preview')\n .description('预览构建产物')\n .option('-p, --port <port>', '端口号', '8080')\n .option('-d, --dir <dir>', '产物目录')\n .action(async (options) => {\n const cwd = process.cwd();\n\n try {\n let outputDir = options.dir;\n if (!outputDir) {\n const config = await loadConfig(cwd);\n outputDir = resolve(cwd, config.outputDir ?? 'dist');\n }\n\n if (!existsSync(outputDir)) {\n logger.error(`产物目录不存在: ${outputDir}`);\n logger.info('请先运行 openmanual build');\n process.exit(1);\n }\n\n logger.info(`预览目录: ${outputDir}`);\n logger.info(`预览地址: http://localhost:${options.port}`);\n\n const child = spawn('npx', ['serve', outputDir, '-p', options.port], {\n stdio: 'inherit',\n env: { ...process.env },\n });\n\n child.on('error', (err) => {\n logger.error(`启动失败: ${err.message}`);\n process.exit(1);\n });\n\n const cleanup = () => {\n child.kill();\n process.exit(0);\n };\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(message);\n process.exit(1);\n }\n });\n","import { rm } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { Command } from 'commander';\nimport { loadConfig } from '../../core/config/loader.js';\nimport { generateAll } from '../../core/generator/index.js';\nimport { createSymlink, ensureTempDir, getAppDir } from '../../utils/temp-dir.js';\n\nexport const regenerateCommand = new Command('_regenerate')\n .description('内部命令:重新生成文件')\n .helpOption(false)\n .option('--cwd <path>', '项目目录')\n .action(async (options) => {\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const config = await loadConfig(cwd);\n const appDir = getAppDir(cwd);\n const contentDir = resolve(cwd, config.contentDir ?? 'content');\n\n const ctx = {\n config,\n projectDir: cwd,\n appDir,\n contentDir: config.contentDir ?? 'content',\n };\n\n await ensureTempDir(cwd);\n\n // 清理旧的生成物,避免残留文件导致冲突\n const entriesToClean = [\n 'app',\n 'lib',\n 'source.config.ts',\n 'next.config.mjs',\n 'global.css',\n 'package.json',\n 'tsconfig.json',\n 'postcss.config.mjs',\n ];\n for (const entry of entriesToClean) {\n await rm(join(appDir, entry), { recursive: true, force: true });\n }\n\n await generateAll(ctx);\n await createSymlink(contentDir, resolve(appDir, 'content'));\n\n // Symlink public directory if exists\n const publicDir = resolve(cwd, 'public');\n try {\n const { stat } = await import('node:fs/promises');\n await stat(publicDir);\n await createSymlink(publicDir, resolve(appDir, 'public'));\n } catch {\n // no public dir, that's fine\n }\n\n console.log('[openmanual] regenerate:ok');\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.error(`[openmanual] regenerate:fail ${message}`);\n process.exit(1);\n }\n });\n"],"mappings":"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","names":["join","Command","spawn","mkdir","resolve","join","buildAllowedSlugs","join","resolve","existsSync","mkdir","join","resolve","resolve","spawn","mkdir","spawn","resolve","Command","readFile","join","Command","resolve","spawn","spawn","existsSync","resolve","Command","Command","resolve","existsSync","spawn","rm","join","resolve","Command","Command","resolve","rm","join","join","Command"]}