openmanual 0.3.2 → 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 +298 -30
  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 +8 -1
  346. package/dist/index.js +4 -1
  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.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 NavbarSchema = z.object({\n logo: z.string().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>;\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 } 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 && isImagePath(logo)) {\n const userLogoPath = join(ctx.projectDir, 'public', logo.replace(/^\\//, ''));\n try {\n await access(userLogoPath);\n } catch {\n const publicDir = join(ctx.appDir, 'public');\n await mkdir(publicDir, { recursive: true });\n const logoPath = join(publicDir, logo.replace(/^\\//, ''));\n await mkdir(join(logoPath, '..'), { recursive: true });\n await writeFile(logoPath, generateOpenManualLogoSvg(ctx.config.name), 'utf-8');\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(name: string): string {\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=\"#000000\">${name.slice(1)}</tspan>\n </text>\n</svg>\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\n return `@import 'tailwindcss';\n@import 'fumadocs-ui/style.css';\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`;\n}\n","import type { 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 generateLayout(ctx: { config: OpenManualConfig }): string {\n const { config } = ctx;\n const logo = config.navbar?.logo ?? config.name;\n\n if (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 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 return source.generateParams();\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":";;;;;AAAA,SAAS,oBAAoB;AAC7B,SAAS,UAAU,SAAS,QAAAA,aAAY;AACxC,SAAS,qBAAqB;AAC9B,SAAS,WAAAC,gBAAe;;;ACHxB,SAAS,SAAAC,cAAa;AACtB,SAAS,IAAI,SAAAC,cAAa;AAC1B,SAAS,WAAAC,gBAAe;AACxB,SAAS,eAAe;;;ACHxB,SAAS,gBAAgB;AACzB,SAAS,YAAY;;;ACDrB,SAAS,SAAS;AAEX,IAAM,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAE1F,IAAM,eAAe,EAAE,OAAO;AAAA,EACnC,MAAM,WAAW,SAAS;AAAA,EAC1B,QAAQ,EAAE,IAAI,EAAE,SAAS;AAAA,EACzB,OAAO,EACJ;AAAA,IACC,EAAE,OAAO;AAAA,MACP,OAAO,EAAE,OAAO;AAAA,MAChB,MAAM,EAAE,OAAO;AAAA,IACjB,CAAC;AAAA,EACH,EACC,SAAS;AACd,CAAC;AAEM,IAAM,eAAe,EAAE,OAAO;AAAA,EACnC,MAAM,EAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAEM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAEM,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,EAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,OAAO,EAAE,MAAM,iBAAiB;AAClC,CAAC;AAEM,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAChD,UAAU,EAAE,QAAQ,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,eAAe,EAAE,OAAO;AAAA,EACnC,SAAS,EAAE,QAAQ,EAAE,SAAS;AAChC,CAAC;AAEM,IAAM,YAAY,EAAE,OAAO;AAAA,EAChC,OAAO,EAAE,QAAQ,EAAE,SAAS;AAC9B,CAAC;AAEM,IAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,SAAS,EAAE,IAAI,EAAE,SAAS;AAAA,EAC1B,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,eAAe,EAAE,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,SAAS;AAAA,EAClD,QAAQ,aAAa,SAAS;AAAA,EAC9B,QAAQ,aAAa,SAAS;AAAA,EAC9B,SAAS,EAAE,MAAM,kBAAkB,EAAE,SAAS;AAAA,EAC9C,OAAO,YAAY,SAAS;AAAA,EAC5B,QAAQ,aAAa,SAAS;AAAA,EAC9B,KAAK,UAAU,SAAS;AAC1B,CAAC;;;ADzDD,IAAM,iBAA4C;AAAA,EAChD,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,QAAQ,CAAC;AAAA,EACT,QAAQ,CAAC;AAAA,EACT,OAAO;AAAA,IACL,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,KAAK,CAAC;AACR;AAEA,eAAsB,WAAW,MAAc,QAAQ,IAAI,GAA8B;AACvF,QAAM,aAAa,KAAK,KAAK,iBAAiB;AAE9C,MAAI;AACJ,MAAI;AACF,cAAU,MAAM,SAAS,YAAY,OAAO;AAAA,EAC9C,QAAQ;AACN,UAAM,IAAI,MAAM,gCAAgC,GAAG,sBAAsB;AAAA,EAC3E;AAEA,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,OAAO;AAAA,EAC7B,QAAQ;AACN,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAEA,QAAM,SAAS,uBAAuB,UAAU,MAAM;AACtD,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,SAAS,OAAO,MAAM,OACzB,IAAI,CAAC,MAAM,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAClD,KAAK,IAAI;AACZ,UAAM,IAAI,MAAM;AAAA,EAAuC,MAAM,EAAE;AAAA,EACjE;AAEA,SAAO,cAAc,OAAO,IAAI;AAClC;AAEA,SAAS,cAAc,QAA4C;AACjE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,eAAe,OAAO,iBAAiB;AAAA,IACvC,YAAY,OAAO,cAAc,eAAe,cAAc;AAAA,IAC9D,WAAW,OAAO,aAAa,eAAe,aAAa;AAAA,IAC3D,QAAQ,OAAO,UAAU,eAAe,UAAU;AAAA,IAClD,QAAQ;AAAA,MACN,GAAG,eAAe;AAAA,MAClB,GAAG,OAAO;AAAA,MACV,MAAM,OAAO,QAAQ,QAAQ,OAAO;AAAA,IACtC;AAAA,IACA,QAAQ;AAAA,MACN,GAAG,eAAe;AAAA,MAClB,GAAG,OAAO;AAAA,MACV,MAAM,OAAO,QAAQ,QAAQ,QAAO,oBAAI,KAAK,GAAE,YAAY,CAAC,SAAM,OAAO,IAAI;AAAA,IAC/E;AAAA,IACA,OAAO;AAAA,MACL,GAAG,eAAe;AAAA,MAClB,GAAG,OAAO;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,MACN,GAAG,eAAe;AAAA,MAClB,GAAG,OAAO;AAAA,IACZ;AAAA,IACA,KAAK;AAAA,MACH,GAAG,eAAe;AAAA,MAClB,GAAG,OAAO;AAAA,IACZ;AAAA,EACF;AACF;;;AE9EA,SAAS,QAAQ,OAAO,iBAAiB;AACzC,SAAS,QAAAC,aAAY;;;ACCd,SAAS,kBAAkB,KAA2C;AAC3E,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,aAAa,OAAO,OAAO,cAAc;AAC/C,QAAM,WAAW,OAAO,OAAO,YAAY;AAE3C,QAAM,YAAY,WACd;AAAA;AAAA,mBAEa,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0BvB;AAEJ,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKU,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS3B,SAAS;AACX;;;ACnDA,IAAM,mBAAmB,CAAC,QAAQ,QAAQ,QAAQ,SAAS,OAAO;AAE3D,SAAS,YAAY,OAAwB;AAClD,MAAI,MAAM,WAAW,GAAG,EAAG,QAAO;AAClC,SAAO,iBAAiB,KAAK,CAAC,QAAQ,MAAM,YAAY,EAAE,SAAS,GAAG,CAAC;AACzE;AAEO,SAAS,iBAAiB,MAAmD;AAClF,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO,EAAE,OAAO,MAAM,MAAM,KAAK;AAAA,EACnC;AACA,SAAO,EAAE,OAAO,KAAK,OAAO,MAAM,KAAK,KAAK;AAC9C;AAEO,SAAS,eAAe,KAA2C;AACxE,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,OAAO,OAAO,QAAQ,QAAQ,OAAO;AAG3C,MAAI,OAAO,SAAS,YAAY,YAAY,IAAI,GAAG;AACjD,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAQW,IAAI,UAAU,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7C;AAGA,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,EAAE,OAAO,KAAK,IAAI;AAGxB,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAQS,KAAK,UAAU,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO5C;AAGA,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAQW,KAAK,UAAU,OAAO,IAAI;AAAA,sBAC1B,IAAI,UAAU,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7C;AAGA,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKO,IAAI;AAAA;AAAA;AAAA;AAAA;AAKpB;;;AC5FO,SAAS,oBAA4B;AAC1C,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQT;;;ACPO,SAAS,mBAAmB,KAA2C;AAC5E,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,UAAU,OAAO,WAAW;AAElC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMiB,UAAU;AAAA,uBAA0B,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhE;;;AClBO,SAAS,oBAAoB,MAGzB;AACT,QAAM,MAAM;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,wBAAwB;AAAA,MACxB,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,eAAe;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,MACP,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF;AAEA,SAAO,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AAAA;AACxC;;;AC3BA,SAAS,kBAAkB,QAAuC;AAChE,QAAM,QAAQ,oBAAI,IAAY;AAC9B,MAAI,OAAO,SAAS;AAClB,eAAW,SAAS,OAAO,SAAS;AAClC,iBAAW,QAAQ,MAAM,OAAO;AAC9B,cAAM,IAAI,KAAK,IAAI;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,aAAa,MAA4C;AACvE,QAAM,WAAW,KAAK,OAAO,kBAAkB;AAE/C,QAAM,sBAAsB,WACxB;AAAA,+BACyB,KAAK,UAAU,CAAC,GAAG,kBAAkB,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ5E;AAEJ,QAAM,eAAe,WACjB;AAAA;AAAA;AAAA;AAAA,IAKA;AAEJ,QAAM,uBAAuB,WACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASJ,SAAO;AAAA;AAAA;AAAA,qDAG4C,mBAAmB;AAAA;AAAA;AAAA;AAAA,EAItE,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBZ,oBAAoB;AAAA;AAEtB;;;ACpFO,SAAS,wBAAgC;AAC9C,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAST;;;ACRO,SAAS,iBAAiB,KAA2C;AAC1E,QAAM,gBAAgB,IAAI,OAAO,QAAQ,YAAY;AAErD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBASU,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhC;;;ACpBA,SAAS,cAAc,QAAkD;AACvE,QAAM,MAA8B,CAAC;AACrC,MAAI,OAAO,SAAS;AAClB,eAAW,SAAS,OAAO,SAAS;AAClC,iBAAW,QAAQ,MAAM,OAAO;AAC9B,YAAI,KAAK,IAAI,IAAI,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAASC,mBAAkB,QAAuC;AAChE,QAAM,QAAQ,oBAAI,IAAY;AAC9B,MAAI,OAAO,SAAS;AAClB,eAAW,SAAS,OAAO,SAAS;AAClC,iBAAW,QAAQ,MAAM,OAAO;AAC9B,cAAM,IAAI,KAAK,IAAI;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,qBAAqB,MAA4C;AAC/E,QAAM,WAAW,cAAc,KAAK,MAAM;AAC1C,QAAM,kBAAkB,OAAO,QAAQ,QAAQ,EAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,MAAM,IAAI,OAAO,MAAM,QAAQ,MAAM,KAAK,CAAC,GAAG,EACrE,KAAK,KAAK;AACb,QAAM,cAAc,kBAAkB;AAAA,EAAM,eAAe;AAAA,KAAQ;AAEnE,QAAM,WAAW,KAAK,OAAO,kBAAkB;AAE/C,QAAM,sBAAsB,WACxB;AAAA;AAAA,+BAEyB,KAAK,UAAU,CAAC,GAAGA,mBAAkB,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAS5E;AAEJ,QAAM,gBAAgB,WAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQA;AAEJ,SAAO;AAAA;AAAA;AAAA,2CAGkC,WAAW,IAAI,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAqBlE,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBxB;;;ACrGO,SAAS,mBAA2B;AACzC,SAAO,GAAG,KAAK;AAAA,IACb;AAAA,MACE,iBAAiB;AAAA,QACf,QAAQ;AAAA,QACR,KAAK,CAAC,OAAO,gBAAgB,QAAQ;AAAA,QACrC,QAAQ;AAAA,QACR,kBAAkB;AAAA,QAClB,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,mBAAmB;AAAA,QACnB,iBAAiB;AAAA,QACjB,aAAa;AAAA,QACb,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;AAAA,QAC1B,OAAO;AAAA,UACL,OAAO,CAAC,KAAK;AAAA,QACf;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,CAAC,cAAc;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA;AACH;;;AVVA,eAAsB,YAAY,KAAqC;AACrE,QAAM,QAAkD;AAAA,IACtD;AAAA,MACE,MAAM;AAAA,MACN,SAAS,qBAAqB,GAAG;AAAA,IACnC;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,mBAAmB,GAAG;AAAA,IACjC;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,kBAAkB,GAAG;AAAA,IAChC;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,oBAAoB,GAAG;AAAA,IAClC;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,iBAAiB;AAAA,IAC5B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,sBAAsB;AAAA,IACjC;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,kBAAkB;AAAA,IAC7B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,eAAe,GAAG;AAAA,IAC7B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,mBAAmB;AAAA,IAC9B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,iBAAiB,GAAG;AAAA,IAC/B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,mBAAmB,GAAG;AAAA,IACjC;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,aAAa,GAAG;AAAA,IAC3B;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAWC,MAAK,IAAI,QAAQ,KAAK,IAAI;AAC3C,UAAM,MAAMA,MAAK,UAAU,IAAI;AAC/B,UAAM,MAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,UAAM,UAAU,UAAU,KAAK,SAAS,OAAO;AAAA,EACjD;AAGA,QAAM,OAAO,IAAI,OAAO,QAAQ;AAChC,MAAI,QAAQ,OAAO,SAAS,YAAY,YAAY,IAAI,GAAG;AACzD,UAAM,eAAe,KAAK,MAAM,OAAO;AAAA,EACzC,WAAW,QAAQ,OAAO,SAAS,UAAU;AAC3C,UAAM,EAAE,OAAO,KAAK,IAAI,iBAAiB,IAAI;AAC7C,QAAI,YAAY,KAAK,GAAG;AACtB,YAAM,eAAe,KAAK,OAAO,OAAO;AAAA,IAC1C;AACA,QAAI,YAAY,IAAI,KAAK,SAAS,OAAO;AACvC,YAAM,eAAe,KAAK,MAAM,MAAM;AAAA,IACxC;AAAA,EACF;AACF;AAEA,SAAS,qBAA6B;AACpC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcT;AAEA,SAAS,mBAAmB,KAA8B;AACxD,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,aAAa,OAAO,QAAQ,UAAU;AAC5C,QAAM,WAAW,OAAO,QAAQ,SAAS,CAAC;AAC1C,QAAM,aAAa,OAAO,QAAQ,QAAQ;AAE1C,QAAM,aAAa,SAAS,IAAI,CAAC,OAAO;AAAA,IACtC,MAAM,EAAE;AAAA,IACR,KAAK,EAAE;AAAA,IACP,UAAU;AAAA,EACZ,EAAE;AAEF,QAAM,aAAa,aAAa;AAAA,eAAkB,UAAU,OAAO;AAEnE,QAAM,YAAY,WAAW,SAAS,IAAI;AAAA,aAAgB,KAAK,UAAU,UAAU,CAAC,MAAM;AAE1F,QAAM,aAAa,aACf;AAAA,yBAA4B,WAAW,QAAQ,MAAM,KAAK,CAAC,SAC3D;AAEJ,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAOsB,UAAU,GAAG,SAAS,GAAG,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWlE;AAEO,SAAS,0BACd,MACA,UAA4B,SACpB;AACR,QAAM,YAAY,YAAY,SAAS,YAAY;AACnD,SAAO;AAAA;AAAA,2CAEkC,KAAK,OAAO,CAAC,CAAC,wBAAwB,SAAS,KAAK,KAAK,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAI5G;AAEA,eAAe,eACb,KACA,UACA,SACe;AACf,QAAM,eAAeA,MAAK,IAAI,YAAY,UAAU,SAAS,QAAQ,OAAO,EAAE,CAAC;AAC/E,MAAI;AACF,UAAM,OAAO,YAAY;AAAA,EAC3B,QAAQ;AACN,UAAM,YAAYA,MAAK,IAAI,QAAQ,QAAQ;AAC3C,UAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,UAAM,WAAWA,MAAK,WAAW,SAAS,QAAQ,OAAO,EAAE,CAAC;AAC5D,UAAM,MAAMA,MAAK,UAAU,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AACrD,UAAM,UAAU,UAAU,0BAA0B,IAAI,OAAO,MAAM,OAAO,GAAG,OAAO;AAAA,EACxF;AACF;;;AWvLA,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AAExB,eAAsB,YAAY,QAA+B;AAC/D,QAAM,cAAc,QAAQ,QAAQ,cAAc;AAGlD,MAAI,WAAW,WAAW,GAAG;AAC3B;AAAA,EACF;AAEA,SAAO,IAAI,QAAQ,CAACC,UAAS,WAAW;AACtC,UAAM,QAAQ,MAAM,QAAQ,CAAC,WAAW,sBAAsB,GAAG;AAAA,MAC/D,KAAK;AAAA,MACL,OAAO;AAAA,MACP,KAAK,EAAE,GAAG,QAAQ,IAAI;AAAA,IACxB,CAAC;AAED,QAAI,SAAS;AACb,UAAM,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AACzC,gBAAU,KAAK,SAAS;AAAA,IAC1B,CAAC;AAED,UAAM,GAAG,SAAS,MAAM;AACxB,UAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,UAAI,SAAS,GAAG;AACd,QAAAA,SAAQ;AAAA,MACV,OAAO;AACL,eAAO,IAAI,MAAM,wBAAwB,MAAM,EAAE,CAAC;AAAA,MACpD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;;ACjCA,IAAM,SAAS;AAAA,EACb,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACR;AAEA,SAAS,YAAoB;AAC3B,UAAO,oBAAI,KAAK,GAAE,mBAAmB,SAAS,EAAE,QAAQ,MAAM,CAAC;AACjE;AAEO,IAAM,SAAS;AAAA,EACpB,KAAK,KAAmB;AACtB,YAAQ;AAAA,MACN,GAAG,OAAO,IAAI,IAAI,UAAU,CAAC,IAAI,OAAO,KAAK,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,IAAI,GAAG;AAAA,IACxF;AAAA,EACF;AAAA,EAEA,QAAQ,KAAmB;AACzB,YAAQ;AAAA,MACN,GAAG,OAAO,IAAI,IAAI,UAAU,CAAC,IAAI,OAAO,KAAK,IAAI,OAAO,KAAK,OAAO,OAAO,KAAK,IAAI,GAAG;AAAA,IACzF;AAAA,EACF;AAAA,EAEA,KAAK,KAAmB;AACtB,YAAQ;AAAA,MACN,GAAG,OAAO,IAAI,IAAI,UAAU,CAAC,IAAI,OAAO,KAAK,IAAI,OAAO,MAAM,OAAO,OAAO,KAAK,IAAI,GAAG;AAAA,IAC1F;AAAA,EACF;AAAA,EAEA,MAAM,KAAmB;AACvB,YAAQ;AAAA,MACN,GAAG,OAAO,IAAI,IAAI,UAAU,CAAC,IAAI,OAAO,KAAK,IAAI,OAAO,GAAG,QAAQ,OAAO,KAAK,IAAI,GAAG;AAAA,IACxF;AAAA,EACF;AAAA,EAEA,KAAK,KAAmB;AACtB,YAAQ;AAAA,MACN,GAAG,OAAO,IAAI,IAAI,UAAU,CAAC,IAAI,OAAO,KAAK,IAAI,OAAO,IAAI,SAAI,OAAO,KAAK,IAAI,GAAG;AAAA,IACrF;AAAA,EACF;AACF;;;AC5CA,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,OAAO,SAAAC,QAAO,IAAI,eAAe;AAC1C,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAE9B,IAAM,gBAAgB;AAEf,SAAS,WAAW,KAAqB;AAC9C,SAAOD,MAAK,KAAK,aAAa;AAChC;AAEO,SAAS,UAAU,KAAqB;AAC7C,SAAOA,MAAK,WAAW,GAAG,GAAG,KAAK;AACpC;AAEA,eAAsB,cAAc,KAA8B;AAChE,QAAM,UAAU,WAAW,GAAG;AAC9B,QAAM,SAAS,UAAU,GAAG;AAE5B,QAAMD,OAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AACxC,QAAMA,OAAMC,MAAK,QAAQ,KAAK,GAAG,EAAE,WAAW,KAAK,CAAC;AAEpD,SAAO;AACT;AAEA,eAAsB,aAAa,KAA4B;AAC7D,QAAM,UAAU,WAAW,GAAG;AAC9B,MAAIF,YAAW,OAAO,GAAG;AACvB,UAAM,GAAG,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACpD;AACF;AAEA,eAAsB,cAAc,QAAgB,UAAiC;AACnF,QAAM,iBAAiBG,SAAQ,MAAM;AACrC,QAAM,eAAeA,SAAQ,QAAQ;AAErC,MAAI;AACF,UAAM,MAAM,YAAY;AAExB,UAAM,GAAG,cAAc,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACzD,QAAQ;AAAA,EAER;AAEA,QAAM,QAAQ,gBAAgB,cAAc,UAAU;AACxD;;;AhBlCO,IAAM,eAAe,IAAI,QAAQ,OAAO,EAAE,YAAY,sCAAQ,EAAE,OAAO,YAAY;AACxF,QAAM,MAAM,QAAQ,IAAI;AAExB,MAAI;AACF,WAAO,KAAK,yCAAW;AACvB,UAAM,SAAS,MAAM,WAAW,GAAG;AAEnC,WAAO,KAAK,yCAAW;AACvB,UAAM,SAAS,UAAU,GAAG;AAC5B,UAAM,aAAaC,SAAQ,KAAK,OAAO,cAAc,SAAS;AAE9D,UAAM,cAAc,GAAG;AAEvB,UAAM,MAAM;AAAA,MACV;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA,YAAY,OAAO,cAAc;AAAA,IACnC;AAEA,UAAM,YAAY,GAAG;AAGrB,UAAM,cAAc,YAAYA,SAAQ,QAAQ,SAAS,CAAC;AAG1D,UAAM,YAAYA,SAAQ,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,aAAkB;AAChD,YAAM,KAAK,SAAS;AACpB,YAAM,cAAc,WAAWA,SAAQ,QAAQ,QAAQ,CAAC;AAAA,IAC1D,QAAQ;AAAA,IAER;AAEA,WAAO,KAAK,6BAAS;AACrB,UAAM,YAAY,MAAM;AAExB,WAAO,KAAK,yCAAW;AACvB,UAAM,cAAcC,OAAM,OAAO,CAAC,QAAQ,OAAO,GAAG;AAAA,MAClD,KAAK;AAAA,MACL,OAAO;AAAA,MACP,KAAK,EAAE,GAAG,QAAQ,IAAI;AAAA,IACxB,CAAC;AAED,UAAM,IAAI,QAAc,CAACD,UAAS,WAAW;AAC3C,kBAAY,GAAG,SAAS,MAAM;AAC9B,kBAAY,GAAG,QAAQ,CAAC,SAAS;AAC/B,YAAI,SAAS,GAAG;AACd,UAAAA,SAAQ;AAAA,QACV,OAAO;AACL,iBAAO,IAAI,MAAM,0BAA0B,IAAI,EAAE,CAAC;AAAA,QACpD;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAGD,UAAM,YAAYA,SAAQ,KAAK,OAAO,aAAa,MAAM;AACzD,UAAME,OAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAE1C,UAAM,aAAaF,SAAQ,QAAQ,KAAK;AACxC,QAAI;AACF,YAAM,GAAG,YAAY,WAAW,EAAE,WAAW,KAAK,CAAC;AACnD,aAAO,QAAQ,qDAAa,SAAS,EAAE;AAAA,IACzC,QAAQ;AAEN,aAAO,KAAK,qIAAqD;AAAA,IACnE;AAEA,WAAO,KAAK,yCAAW;AACvB,UAAM,aAAa,GAAG;AAEtB,WAAO,QAAQ,gCAAO;AAAA,EACxB,SAAS,KAAK;AACZ,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,WAAO,MAAM,OAAO;AACpB,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;;;AiBxFD,SAA4B,SAAAG,cAAa;AACzC,SAAS,SAAS,WAAAC,gBAAe;AACjC,SAAS,WAAAC,gBAAe;;;ACFxB,SAAS,SAAS,YAAAC,iBAAgB;AAClC,SAAS,QAAAC,OAAM,UAAU,WAAW;AAQpC,eAAsB,eAAe,YAA4C;AAC/E,QAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,oBAAO;AACjD,QAAM,iBAAiB,IAAI,IAAI,OAAO,KAAK,gBAAgB,CAAC;AAC5D,iBAAe,IAAI,MAAM;AACzB,iBAAe,IAAI,KAAK;AACxB,iBAAe,IAAI,WAAW;AAC9B,iBAAe,IAAI,OAAO;AAC1B,iBAAe,IAAI,MAAM;AAEzB,QAAM,QAAQ,MAAM,eAAe,UAAU;AAC7C,QAAM,UAAyB,CAAC;AAEhC,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,MAAMD,UAAS,MAAM,OAAO;AAC5C,UAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AACpB,UAAI,CAAC,KAAM;AACX,YAAM,QAAQ,KAAK,MAAM,WAAW;AACpC,UAAI,OAAO;AACT,cAAM,OAAO,MAAM,CAAC;AACpB,YAAI,CAAC,KAAM;AACX,YAAI,CAAC,eAAe,IAAI,IAAI,GAAG;AAC7B,kBAAQ,KAAK;AAAA,YACX,MAAM,SAAS,YAAY,IAAI,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG;AAAA,YACpD,MAAM,IAAI;AAAA,YACV;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,eAAe,KAAgC;AAC5D,QAAM,UAAU,MAAM,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAC1D,QAAM,QAAkB,CAAC;AAEzB,aAAW,SAAS,SAAS;AAC3B,UAAM,WAAWC,MAAK,KAAK,MAAM,IAAI;AACrC,QAAI,MAAM,YAAY,GAAG;AACvB,YAAM,KAAK,GAAI,MAAM,eAAe,QAAQ,CAAE;AAAA,IAChD,WAAW,MAAM,OAAO,KAAK,eAAe,KAAK,MAAM,IAAI,GAAG;AAC5D,YAAM,KAAK,QAAQ;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;;;ADjDO,IAAM,aAAa,IAAIC,SAAQ,KAAK,EACxC,YAAY,4CAAS,EACrB,OAAO,qBAAqB,sBAAO,MAAM,EACzC,OAAO,WAAW,8FAAmB,KAAK,EAC1C,OAAO,gBAAgB,0EAAmB,EAC1C,OAAO,OAAO,YAAY;AACzB,QAAM,MAAM,QAAQ,MAAMC,SAAQ,QAAQ,GAAG,IAAI,QAAQ,IAAI;AAE7D,MAAI;AACF,WAAO,KAAK,yCAAW;AACvB,UAAM,SAAS,MAAM,WAAW,GAAG;AAEnC,WAAO,KAAK,yCAAW;AACvB,UAAM,UAAU,MAAM,cAAc,GAAG;AACvC,UAAM,SAAS,UAAU,GAAG;AAC5B,UAAM,aAAaA,SAAQ,KAAK,OAAO,cAAc,SAAS;AAE9D,UAAM,MAAM;AAAA,MACV;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA,YAAY,OAAO,cAAc;AAAA,IACnC;AAEA,UAAM,YAAY,GAAG;AAGrB,QAAI;AACF,YAAM,eAAe,MAAM,eAAe,UAAU;AACpD,UAAI,aAAa,SAAS,GAAG;AAC3B,eAAO,KAAK,mGAAmB;AAC/B,mBAAW,QAAQ,cAAc;AAC/B,iBAAO,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG;AAAA,QAC5D;AACA,eAAO,KAAK,0JAAkC;AAAA,MAChD;AAAA,IACF,QAAQ;AAAA,IAER;AAGA,UAAM,cAAc,YAAYA,SAAQ,QAAQ,SAAS,CAAC;AAG1D,UAAM,YAAYA,SAAQ,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,aAAkB;AAChD,YAAM,KAAK,SAAS;AACpB,YAAM,cAAc,WAAWA,SAAQ,QAAQ,QAAQ,CAAC;AAAA,IAC1D,QAAQ;AAAA,IAER;AAEA,WAAO,KAAK,6BAAS;AACrB,UAAM,YAAY,MAAM;AAExB,WAAO,QAAQ,qDAAa;AAC5B,WAAO,KAAK,6BAAS,UAAU,EAAE;AACjC,WAAO,KAAK,6BAAS,OAAO,EAAE;AAC9B,WAAO,KAAK,iBAAO,QAAQ,IAAI,EAAE;AAEjC,UAAM,YAAYC,OAAM,OAAO,CAAC,QAAQ,OAAO,UAAU,QAAQ,IAAI,GAAG;AAAA,MACtE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,KAAK,EAAE,GAAG,QAAQ,IAAI;AAAA,IACxB,CAAC;AAED,cAAU,GAAG,SAAS,CAAC,QAAQ;AAC7B,aAAO,MAAM,6BAAS,IAAI,OAAO,EAAE;AACnC,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAED,cAAU,GAAG,QAAQ,CAAC,SAAS;AAC7B,UAAI,SAAS,KAAK,SAAS,MAAM;AAC/B,gBAAQ,KAAK,IAAI;AAAA,MACnB;AAAA,IACF,CAAC;AAGD,QAAI;AACJ,QAAI;AAEJ,QAAI,QAAQ,OAAO;AACjB,YAAM,iBAAiB,QAAQ,IAAI;AACnC,UAAI,CAAC,gBAAgB;AACnB,eAAO,KAAK,sGAAgC;AAAA,MAC9C,OAAO;AACL,cAAM,WAAW,MAAM,OAAO,UAAU;AACxC,cAAM,SAASD,SAAQ,gBAAgB,KAAK;AAC5C,cAAM,aAAaA,SAAQ,KAAK,iBAAiB;AAEjD,kBAAU,SAAS,MAAM,QAAQ;AAAA,UAC/B,eAAe;AAAA,UACf,SAAS;AAAA,YACP;AAAA,YACA;AAAA,YACA,CAAC,SAAiB;AAChB,oBAAM,MAAM,QAAQ,IAAI;AACxB,kBAAI,CAAC,IAAK,QAAO;AACjB,qBAAO,QAAQ,SAAS,QAAQ;AAAA,YAClC;AAAA,UACF;AAAA,QACF,CAAC;AACD,gBAAQ,IAAI,UAAU;AAEtB,gBAAQ,GAAG,OAAO,CAAC,OAAO,aAAa;AACrC,cAAI,UAAU,SAAS,UAAU,YAAY,UAAU,UAAU;AAC/D,mBAAO,KAAK,mCAAU,QAAQ,EAAE;AAChC,yBAAa,UAAU;AACvB,yBAAa,WAAW,MAAM;AAC5B,8BAAgB,gBAAgB,KAAK,SAAS;AAAA,YAChD,GAAG,GAAG;AAAA,UACR;AAAA,QACF,CAAC;AAED,eAAO,QAAQ,8GAAyB;AAAA,MAC1C;AAAA,IACF;AAGA,UAAM,UAAU,MAAM;AACpB,mBAAa,UAAU;AACvB,eAAS,MAAM;AACf,gBAAU,KAAK;AACf,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,GAAG,UAAU,OAAO;AAC5B,YAAQ,GAAG,WAAW,OAAO;AAAA,EAC/B,SAAS,KAAK;AACZ,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,WAAO,MAAM,OAAO;AACpB,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,SAAS,gBAAgB,gBAAwB,KAAa,WAA+B;AAC3F,MAAI,UAAU,aAAa,MAAM;AAC/B,WAAO,KAAK,kFAAsB;AAClC;AAAA,EACF;AAEA,SAAO,KAAK,yCAAW;AAEvB,QAAM,UAAUA,SAAQ,gBAAgB,gBAAgB;AACxD,QAAM,UAAUA,SAAQ,gBAAgB,uBAAuB;AAC/D,QAAM,QAAQC,OAAM,SAAS,CAAC,SAAS,eAAe,SAAS,GAAG,GAAG;AAAA,IACnE,OAAO;AAAA,IACP,KAAK,EAAE,GAAG,QAAQ,IAAI;AAAA,EACxB,CAAC;AAED,QAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,QAAI,SAAS,GAAG;AACd,aAAO,QAAQ,kDAAU;AAAA,IAC3B,OAAO;AACL,aAAO,MAAM,oDAAsB,IAAI,GAAG;AAAA,IAC5C;AAAA,EACF,CAAC;AAED,QAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,WAAO,MAAM,qDAAa,IAAI,OAAO,EAAE;AAAA,EACzC,CAAC;AACH;;;AE3KA,SAAS,SAAAC,cAAa;AACtB,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,WAAAC,gBAAe;AACxB,SAAS,WAAAC,gBAAe;AAIjB,IAAM,iBAAiB,IAAIC,SAAQ,SAAS,EAChD,YAAY,sCAAQ,EACpB,OAAO,qBAAqB,sBAAO,MAAM,EACzC,OAAO,mBAAmB,0BAAM,EAChC,OAAO,OAAO,YAAY;AACzB,QAAM,MAAM,QAAQ,IAAI;AAExB,MAAI;AACF,QAAI,YAAY,QAAQ;AACxB,QAAI,CAAC,WAAW;AACd,YAAM,SAAS,MAAM,WAAW,GAAG;AACnC,kBAAYC,SAAQ,KAAK,OAAO,aAAa,MAAM;AAAA,IACrD;AAEA,QAAI,CAACC,YAAW,SAAS,GAAG;AAC1B,aAAO,MAAM,+CAAY,SAAS,EAAE;AACpC,aAAO,KAAK,2CAAuB;AACnC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,WAAO,KAAK,6BAAS,SAAS,EAAE;AAChC,WAAO,KAAK,8CAA0B,QAAQ,IAAI,EAAE;AAEpD,UAAM,QAAQC,OAAM,OAAO,CAAC,SAAS,WAAW,MAAM,QAAQ,IAAI,GAAG;AAAA,MACnE,OAAO;AAAA,MACP,KAAK,EAAE,GAAG,QAAQ,IAAI;AAAA,IACxB,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,aAAO,MAAM,6BAAS,IAAI,OAAO,EAAE;AACnC,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAED,UAAM,UAAU,MAAM;AACpB,YAAM,KAAK;AACX,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,GAAG,UAAU,OAAO;AAC5B,YAAQ,GAAG,WAAW,OAAO;AAAA,EAC/B,SAAS,KAAK;AACZ,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,WAAO,MAAM,OAAO;AACpB,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;;;ACnDH,SAAS,MAAAC,WAAU;AACnB,SAAS,QAAAC,OAAM,WAAAC,gBAAe;AAC9B,SAAS,WAAAC,gBAAe;AAKjB,IAAM,oBAAoB,IAAIC,SAAQ,aAAa,EACvD,YAAY,oEAAa,EACzB,WAAW,KAAK,EAChB,OAAO,gBAAgB,0BAAM,EAC7B,OAAO,OAAO,YAAY;AACzB,QAAM,MAAM,QAAQ,OAAO,QAAQ,IAAI;AAEvC,MAAI;AACF,UAAM,SAAS,MAAM,WAAW,GAAG;AACnC,UAAM,SAAS,UAAU,GAAG;AAC5B,UAAM,aAAaC,SAAQ,KAAK,OAAO,cAAc,SAAS;AAE9D,UAAM,MAAM;AAAA,MACV;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA,YAAY,OAAO,cAAc;AAAA,IACnC;AAEA,UAAM,cAAc,GAAG;AAGvB,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,eAAW,SAAS,gBAAgB;AAClC,YAAMC,IAAGC,MAAK,QAAQ,KAAK,GAAG,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IAChE;AAEA,UAAM,YAAY,GAAG;AACrB,UAAM,cAAc,YAAYF,SAAQ,QAAQ,SAAS,CAAC;AAG1D,UAAM,YAAYA,SAAQ,KAAK,QAAQ;AACvC,QAAI;AACF,YAAM,EAAE,KAAK,IAAI,MAAM,OAAO,aAAkB;AAChD,YAAM,KAAK,SAAS;AACpB,YAAM,cAAc,WAAWA,SAAQ,QAAQ,QAAQ,CAAC;AAAA,IAC1D,QAAQ;AAAA,IAER;AAEA,YAAQ,IAAI,4BAA4B;AAAA,EAC1C,SAAS,KAAK;AACZ,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,YAAQ,MAAM,gCAAgC,OAAO,EAAE;AACvD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;;;ArBnDH,SAAS,aAAqB;AAC5B,MAAI,MAAoC;AACtC,WAAO;AAAA,EACT;AACA,MAAI;AACF,UAAM,YAAY,QAAQ,cAAc,YAAY,GAAG,CAAC;AACxD,UAAM,UAAUG,MAAK,WAAW,MAAM,cAAc;AACpD,UAAM,MAAM,KAAK,MAAM,aAAa,SAAS,OAAO,CAAC;AACrD,WAAO,IAAI;AAAA,EACb,QAAQ;AAEN,QAAI;AACF,YAAM,YAAY,QAAQ,cAAc,YAAY,GAAG,CAAC;AACxD,YAAM,UAAUA,MAAK,WAAW,MAAM,MAAM,cAAc;AAC1D,YAAM,MAAM,KAAK,MAAM,aAAa,SAAS,OAAO,CAAC;AACrD,aAAO,IAAI;AAAA,IACb,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,IAAM,UAAU,IAAIC,SAAQ;AAC5B,IAAM,cAAc,SAAS,QAAQ,KAAK,CAAC,KAAK,YAAY;AAE5D,QACG,KAAK,WAAW,EAChB,YAAY,uEAAgB,EAC5B,QAAQ,WAAW,GAAG,eAAe;AAExC,QAAQ,WAAW,UAAU;AAC7B,QAAQ,WAAW,YAAY;AAC/B,QAAQ,WAAW,cAAc;AACjC,QAAQ,WAAW,mBAAmB,EAAE,QAAQ,KAAK,CAAC;AAEtD,QAAQ,MAAM;","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"]}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+
3
+ import "./chunk-EFTGR6G5.js";
4
+
5
+ // node_modules/.pnpm/@shikijs+langs@4.0.2/node_modules/@shikijs/langs/dist/bird2.mjs
6
+ var lang = Object.freeze(JSON.parse(`{"displayName":"BIRD2 Configuration","fileTypes":["conf","bird","bird2","bird3","bird.conf","bird2.conf","bird3.conf"],"foldingStartMarker":"\\\\{\\\\s*$","foldingStopMarker":"^\\\\s*}","name":"bird2","patterns":[{"include":"#comments"},{"include":"#strings"},{"include":"#ip-addresses"},{"include":"#prefixes"},{"include":"#vpn-rd"},{"include":"#bytestrings"},{"include":"#bgp-paths"},{"include":"#print-statements"},{"include":"#template-definitions"},{"include":"#filter-definitions"},{"include":"#function-definitions"},{"include":"#protocol-definitions"},{"include":"#next-hop-statements"},{"include":"#neighbor-statements"},{"include":"#import-export-statements"},{"include":"#variable-declarations"},{"include":"#method-calls"},{"include":"#function-calls"},{"include":"#method-properties"},{"include":"#route-attributes"},{"include":"#data-types"},{"include":"#constants"},{"include":"#structural-keywords"},{"include":"#protocol-phrases"},{"include":"#functional-keywords"},{"include":"#semantic-modifiers"},{"include":"#builtin-functions"},{"include":"#filter-names"},{"include":"#user-variables"},{"include":"#operators"},{"include":"#numbers"},{"include":"#symbols"},{"include":"#blocks"}],"repository":{"bgp-paths":{"patterns":[{"begin":"\\\\[=","beginCaptures":{"0":{"name":"punctuation.definition.bgp-path.begin.bird"}},"end":"=]","endCaptures":{"0":{"name":"punctuation.definition.bgp-path.end.bird"}},"name":"meta.bgp-path.bird","patterns":[{"match":"[*+?]","name":"keyword.operator.wildcard.bird"},{"match":"\\\\b[0-9]+\\\\b","name":"constant.numeric.asn.bird"},{"include":"#operators"},{"include":"#symbols"}]}]},"blocks":{"patterns":[{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.begin.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.block.bird","patterns":[{"include":"$self"}]},{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.set.begin.bird"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.set.end.bird"}},"name":"meta.set.bird","patterns":[{"include":"$self"}]},{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.tuple.begin.bird"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.tuple.end.bird"}},"name":"meta.tuple.bird","patterns":[{"include":"$self"}]},{"match":";","name":"punctuation.terminator.statement.bird"},{"match":",","name":"punctuation.separator.bird"}]},"builtin-functions":{"patterns":[{"match":"\\\\b(?:defined|unset|roa_check|aspa_check|aspa_check_downstream|aspa_check_upstream|from_hex|format|append|prepend|add|delete|empty|reset|bt_assert|bt_test_suite|bt_test_same)\\\\b","name":"support.function.builtin.bird"}]},"bytestrings":{"patterns":[{"match":"\\\\bhex:\\\\h{2}(?:[-.:\\\\s]*\\\\h{2})*\\\\b","name":"constant.numeric.bytestring.bird"},{"match":"\\\\b(?:\\\\h{2}[-.:\\\\s]*){15,}\\\\h{2}\\\\b","name":"constant.numeric.bytestring.bird"},{"match":"\\\\b\\\\h{32,}\\\\b","name":"constant.numeric.bytestring.bird"}]},"comments":{"patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.bird"}},"end":"$","name":"comment.line.number-sign.bird"},{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.bird"}},"end":"\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.bird"}},"name":"comment.block.bird"}]},"constants":{"patterns":[{"match":"\\\\b(?:on|off|yes|no|true|false)\\\\b","name":"constant.language.boolean.bird"},{"match":"\\\\b(?:empty|unknown|generic|rt|ro|one|ten)\\\\b","name":"constant.language.special.bird"},{"match":"\\\\bSCOPE_(?:HOST|LINK|SITE|ORGANIZATION|UNIVERSE)\\\\b","name":"constant.language.scope.bird"},{"match":"\\\\bRTS_(?:STATIC|INHERIT|DEVICE|RIP|OSPF|OSPF_IA|OSPF_EXT1|OSPF_EXT2|BGP|PIPE|BABEL)\\\\b","name":"constant.language.source.bird"},{"match":"\\\\bRTD_(?:ROUTER|DEVICE|MULTIPATH|BLACKHOLE|UNREACHABLE|PROHIBIT)\\\\b","name":"constant.language.dest.bird"},{"match":"\\\\bROA_(?:UNKNOWN|INVALID|VALID)\\\\b","name":"constant.language.roa.bird"},{"match":"\\\\bASPA_(?:UNKNOWN|INVALID|VALID)\\\\b","name":"constant.language.aspa.bird"},{"match":"\\\\bNET_(?:IP4|IP6|IP6_SADR|VPN4|VPN6|ROA4|ROA6|FLOW4|FLOW6|MPLS)\\\\b","name":"constant.language.net-type.bird"},{"match":"\\\\bMPLS_POLICY_(?:NONE|STATIC|PREFIX|AGGREGATE|VRF)\\\\b","name":"constant.language.mpls.bird"}]},"data-types":{"patterns":[{"match":"\\\\b(?:(?:int|pair|quad|ip|prefix|ec|lc|rd|enum)\\\\s+set|int|bool|ip|prefix|rd|pair|quad|ec|lc|string|bytestring|bgpmask|bgppath|clist|eclist|lclist|set|enum|route)\\\\b","name":"storage.type.bird"}]},"filter-definitions":{"patterns":[{"begin":"\\\\b(filter)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.control.filter.bird"},"2":{"name":"entity.name.function.filter.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.filter-definition.bird","patterns":[{"include":"$self"}]}]},"filter-names":{"patterns":[{"match":"\\\\b[A-Z_a-z][0-9A-Z_a-z]*_filter\\\\b","name":"entity.name.function.filter.bird"}]},"function-calls":{"patterns":[{"begin":"\\\\b([A-Z_a-z][0-9A-Z_a-z]*)\\\\s*\\\\(","beginCaptures":{"1":{"name":"entity.name.function.call.bird"}},"end":"\\\\)","name":"meta.function-call.bird","patterns":[{"include":"$self"}]}]},"function-definitions":{"patterns":[{"begin":"\\\\b(function)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')(?=\\\\s*\\\\()","beginCaptures":{"1":{"name":"keyword.control.function.bird"},"2":{"name":"entity.name.function.user-defined.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.function-definition.bird","patterns":[{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.bird"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.bird"}},"name":"meta.function-parameters.bird","patterns":[{"include":"#data-types"},{"include":"#symbols"}]},{"begin":"->","beginCaptures":{"0":{"name":"keyword.operator.return-type.bird"}},"end":"(?=\\\\{)","name":"meta.function-return-type.bird","patterns":[{"include":"#data-types"}]},{"include":"$self"}]}]},"functional-keywords":{"patterns":[{"match":"\\\\b(?:static|rip|ospf|bgp|babel|rpki|bfd|bmp|device|direct|kernel|pipe|perf|mrt|aggregator|l3vpn|radv)\\\\b","name":"keyword.control.protocol-type.bird"},{"match":"\\\\b(?:graceful|restart|preference|disabled|hold|keepalive|connect|retry|start|delay|error|wait|forget|scan|randomize|router|id)\\\\b","name":"keyword.control.routing.bird"},{"match":"\\\\b(?:interface|type|wired|wireless|tunnel|rxcost|limit|hello|update|interval|port|tx|class|dscp|priority|rx|buffer|length|check|link|rtt|cost|min|max|decay|send|timestamps)\\\\b","name":"keyword.other.interface.bird"},{"match":"\\\\b(?:(?:refresh|retry|expire|transport|ssh|tcp|user|address|version|ignore|private|public|key)|(?:local\\\\s+address|ignore\\\\s+max\\\\s+length|min\\\\s+version|max\\\\s+version|bird\\\\s+private\\\\s+key|remote\\\\s+public\\\\s+key))\\\\b","name":"keyword.other.rpki.bird"},{"match":"\\\\b(?:authentication|none|mac|permissive|password|generate|accept|from|to|algorithm|hmac|sha1|sha256|sha384|sha512|blake2s128|blake2s256|blake2b256|blake2b512)\\\\b","name":"keyword.other.auth.bird"},{"match":"\\\\btime\\\\b","name":"keyword.other.time.bird"},{"match":"\\\\b(?:hostname|description|debug|log|syslog|stderr|bird|protocols|tables|channels|timeouts|passwords|bfd|confederation|cluster|stub|dead|neighbors|area|md5|multihop|passive|rfc1583compat|tick|ls|retransmit|transmit|ack|state|database|summary|external|nssa|translator|always|candidate|never|role|stability|election|action|warn|block|disable|keep|filtered|receive|modify|add|delete|withdraw|unreachable|blackhole|prohibit|unreach|igp_metric|localpref|med|origin|community|large_community|ext_community|as_path|prepend|weight|gateway|scope|onlink|recursive|multipath|igp|channel|sadr|src|learn|persist|via|ng)\\\\b","name":"keyword.other.config.bird"},{"match":"\\\\b(?:flow4|flow6|dst|src|proto|header|dport|sport|icmp|code|tcp|flags|dscp|dont_fragment|is_fragment|first_fragment|last_fragment|fragment|label|offset)\\\\b","name":"keyword.other.flowspec.bird"},{"match":"\\\\b(?:vpn4|vpn6|mpls|aspa|roa4|roa6)\\\\b","name":"keyword.other.address.bird"},{"match":"\\\\b(?:all|none)\\\\b","name":"keyword.other.quick-declaration.bird"}]},"import-export-statements":{"patterns":[{"captures":{"1":{"name":"keyword.control.import-export.bird"},"2":{"name":"keyword.control.filter.bird"},"3":{"name":"entity.name.function.filter.bird"}},"match":"\\\\b(import)\\\\s+(filter)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\b","name":"meta.import-statement.bird"},{"begin":"\\\\b(import)\\\\s+(filter)\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.control.import-export.bird"},"2":{"name":"keyword.control.filter.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.import-filter-inline.bird","patterns":[{"include":"$self"}]},{"begin":"\\\\b(export)\\\\s+(where)\\\\b","beginCaptures":{"1":{"name":"keyword.control.import-export.bird"},"2":{"name":"keyword.control.where.bird"}},"end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.bird"}},"name":"meta.export-where-clause.bird","patterns":[{"include":"$self"}]},{"captures":{"1":{"name":"keyword.control.import-export.bird"},"2":{"name":"keyword.control.filter.bird"},"3":{"name":"entity.name.function.filter.bird"}},"match":"\\\\b(export)\\\\s+(filter)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\b","name":"meta.export-statement.bird"}]},"ip-addresses":{"patterns":[{"match":"\\\\b(?:[0-9]{1,3}\\\\.){3}[0-9]{1,3}(?:/[0-9]{1,2})?\\\\b","name":"constant.numeric.ip.ipv4.bird"},{"match":"\\\\b(?:\\\\h{0,4}:){2,7}\\\\h{0,4}(?:/[0-9]{1,3})?\\\\b","name":"constant.numeric.ip.ipv6.bird"},{"match":"::(?:\\\\h{0,4}:){0,6}\\\\h{0,4}(?:/[0-9]{1,3})?\\\\b","name":"constant.numeric.ip.ipv6.bird"},{"match":"\\\\b(?:\\\\h{0,4}:){1,6}::(?:\\\\h{0,4}:){0,5}\\\\h{0,4}(?:/[0-9]{1,3})?\\\\b","name":"constant.numeric.ip.ipv6.bird"}]},"method-calls":{"patterns":[{"begin":"\\\\.\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)\\\\s*\\\\(","beginCaptures":{"1":{"name":"entity.name.function.method.bird"}},"end":"\\\\)","name":"meta.method-call.bird","patterns":[{"include":"$self"}]},{"captures":{"1":{"name":"variable.other.property.bird"}},"match":"\\\\.\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)","name":"meta.method-access.bird"}]},"method-properties":{"patterns":[{"match":"(?<=\\\\.)\\\\s*(?:first|last|last_nonaggregated|len|asn|data1??|data2|is_v4|ip|src|dst|rd|maxlen|type|mask|min|max)\\\\b(?!\\\\s*\\\\()","name":"support.variable.property.bird"}]},"neighbor-statements":{"patterns":[{"captures":{"1":{"name":"keyword.control.local.bird"},"2":{"name":"entity.name.symbol.local-address.bird"},"3":{"name":"keyword.control.port.bird"},"4":{"name":"constant.numeric.port.bird"},"5":{"name":"keyword.control.as.bird"},"6":{"name":"constant.numeric.asn.bird"}},"match":"\\\\b(local)\\\\s+([.:\\\\h]+|[A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')(?:\\\\s+(port)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*))?\\\\s+(as)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\b","name":"meta.local-as-statement.bird"},{"captures":{"1":{"name":"keyword.control.local.bird"},"2":{"name":"keyword.control.as.bird"},"3":{"name":"constant.numeric.asn.bird"}},"match":"\\\\b(local)\\\\s+(as)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\b","name":"meta.local-as-template-statement.bird"},{"captures":{"1":{"name":"keyword.control.neighbor.bird"},"2":{"name":"constant.numeric.ip-address.bird"},"3":{"name":"meta.interface-reference.bird"},"4":{"name":"string.quoted.single.interface.bird"},"5":{"name":"variable.other.interface.bird"},"6":{"name":"keyword.control.as.bird"},"7":{"name":"constant.numeric.asn.bird"},"8":{"name":"keyword.control.port.bird"},"9":{"name":"constant.numeric.port.bird"}},"match":"\\\\b(neighbor)\\\\s+([.:\\\\h]+)\\\\s*(%\\\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?(?:\\\\s+(as)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*))?\\\\s+(port)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\b","name":"meta.neighbor-port-statement.bird"},{"captures":{"1":{"name":"keyword.control.neighbor.bird"},"2":{"name":"entity.name.symbol.neighbor-address.bird"},"3":{"name":"meta.interface-reference.bird"},"4":{"name":"string.quoted.single.interface.bird"},"5":{"name":"variable.other.interface.bird"},"6":{"name":"keyword.control.as.bird"},"7":{"name":"constant.numeric.asn.bird"},"8":{"name":"keyword.control.port.bird"},"9":{"name":"constant.numeric.port.bird"}},"match":"\\\\b(neighbor)\\\\s+('[-.0-:A-Z_a-z]+'|(?!(?:as|range)\\\\b)[A-Z_a-z][0-9A-Z_a-z]*)\\\\s*(%\\\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?(?:\\\\s+(as)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*))?\\\\s+(port)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\b","name":"meta.neighbor-port-symbolic-statement.bird"},{"captures":{"1":{"name":"keyword.control.neighbor.bird"},"2":{"name":"constant.numeric.ip-address.bird"},"3":{"name":"meta.interface-reference.bird"},"4":{"name":"string.quoted.single.interface.bird"},"5":{"name":"variable.other.interface.bird"},"6":{"name":"keyword.control.as.bird"},"7":{"name":"constant.numeric.asn.bird"}},"match":"\\\\b(neighbor)\\\\s+([.:\\\\h]+)\\\\s*(%\\\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?\\\\s+(as)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\b","name":"meta.neighbor-statement.bird"},{"captures":{"1":{"name":"keyword.control.neighbor.bird"},"2":{"name":"entity.name.symbol.neighbor-address.bird"},"3":{"name":"meta.interface-reference.bird"},"4":{"name":"string.quoted.single.interface.bird"},"5":{"name":"variable.other.interface.bird"},"6":{"name":"keyword.control.as.bird"},"7":{"name":"constant.numeric.asn.bird"}},"match":"\\\\b(neighbor)\\\\s+('[-.0-:A-Z_a-z]+'|(?!(?:as|range)\\\\b)[A-Z_a-z][0-9A-Z_a-z]*)\\\\s*(%\\\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?\\\\s+(as)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\b","name":"meta.neighbor-symbolic-statement.bird"},{"captures":{"1":{"name":"keyword.control.neighbor.bird"},"2":{"name":"keyword.control.as.bird"},"3":{"name":"constant.numeric.asn.bird"}},"match":"\\\\b(neighbor)\\\\s+(as)\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\b","name":"meta.neighbor-template-statement.bird"},{"captures":{"1":{"name":"keyword.control.source.bird"},"2":{"name":"constant.numeric.ip-address.bird"}},"match":"\\\\b(source address)\\\\s+([.:\\\\h]+)\\\\b","name":"meta.source-address-statement.bird"}]},"next-hop-statements":{"patterns":[{"captures":{"1":{"name":"keyword.control.routing.bird"},"2":{"name":"keyword.other.ip-version.bird"},"3":{"name":"constant.numeric.ip-address.bird"}},"match":"\\\\b(next hop)\\\\s+(ipv4)\\\\s+([.0-9]+)\\\\b","name":"meta.next-hop-ipv4.bird"},{"captures":{"1":{"name":"keyword.control.routing.bird"},"2":{"name":"keyword.other.ip-version.bird"},"3":{"name":"constant.numeric.ip-address.bird"}},"match":"\\\\b(next hop)\\\\s+(ipv6)\\\\s+([:\\\\h]+)\\\\b","name":"meta.next-hop-ipv6.bird"},{"captures":{"1":{"name":"keyword.control.routing.bird"},"2":{"name":"keyword.other.semantic-modifier.bird"}},"match":"\\\\b(next hop)\\\\s+(self)\\\\b","name":"meta.next-hop-simple.bird"},{"captures":{"1":{"name":"keyword.control.routing.bird"},"2":{"name":"keyword.other.semantic-modifier.bird"}},"match":"\\\\b(extended next hop)\\\\s+(o(?:n|ff))\\\\b","name":"meta.extended-next-hop-statement.bird"}]},"numbers":{"patterns":[{"match":"\\\\b0x\\\\h+\\\\b","name":"constant.numeric.hex.bird"},{"match":"\\\\b[0-9]+\\\\b","name":"constant.numeric.decimal.bird"},{"captures":{"1":{"name":"keyword.other.unit.bird"}},"match":"\\\\b[0-9]+\\\\s*([mu]??s)\\\\b","name":"constant.numeric.time.bird"}]},"operators":{"patterns":[{"match":"==|!=|<=|>=|!~|[<=>~]","name":"keyword.operator.comparison.bird"},{"match":"&&|\\\\|\\\\||!|->","name":"keyword.operator.logical.bird"},{"match":"\\\\+\\\\+","name":"keyword.operator.concat.bird"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.bird"},{"match":"\\\\.\\\\.","name":"keyword.operator.range.bird"},{"match":"\\\\.","name":"keyword.operator.accessor.bird"}]},"prefixes":{"patterns":[{"match":"\\\\b(?:(?:[0-9]{1,3}\\\\.){3}[0-9]{1,3}|(?:\\\\h{0,4}:)+\\\\h{0,4})/[0-9]{1,3}(?:[-+]|\\\\{[0-9]+,[0-9]+})?\\\\b","name":"constant.numeric.prefix.bird"}]},"print-statements":{"patterns":[{"begin":"\\\\b(printn??)\\\\b","beginCaptures":{"1":{"name":"keyword.other.print.bird"}},"end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.bird"}},"name":"meta.print-statement.bird","patterns":[{"include":"$self"}]}]},"protocol-definitions":{"patterns":[{"begin":"\\\\b(protocol)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\s+(from)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.control.protocol.bird"},"2":{"name":"entity.name.type.protocol.bird"},"3":{"name":"entity.name.function.protocol.bird"},"4":{"name":"keyword.control.template-reference.bird"},"5":{"name":"entity.name.function.template.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.protocol-definition-with-template.bird","patterns":[{"include":"$self"}]},{"begin":"\\\\b(protocol)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.control.protocol.bird"},"2":{"name":"entity.name.type.protocol.bird"},"3":{"name":"entity.name.function.protocol.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.protocol-definition-with-name.bird","patterns":[{"include":"$self"}]},{"begin":"\\\\b(protocol)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.control.protocol.bird"},"2":{"name":"entity.name.type.protocol.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.protocol-definition-anonymous.bird","patterns":[{"include":"$self"}]}]},"protocol-phrases":{"patterns":[{"match":"\\\\b(?:strict\\\\s+bind|zero\\\\s+udp6\\\\s+checksum\\\\s+rx|idle\\\\s+tx\\\\s+interval|multiplier|keyed|meticulous)\\\\b","name":"keyword.other.bfd.phrase.bird"},{"match":"\\\\b(?:send\\\\s+timestamps|rtt\\\\s+(?:cost|min|max|decay)|next\\\\s+hop\\\\s+prefer|prefer|native)\\\\b","name":"keyword.other.babel.phrase.bird"},{"match":"\\\\b(?:next\\\\s+hop\\\\s+(?:self|address|ibgp|ebgp)|link\\\\s+local\\\\s+next\\\\s+hop\\\\s+format|import\\\\s+table|export\\\\s+table|base\\\\s+table|add\\\\s+paths|aigp\\\\s+originate|long\\\\s+lived\\\\s+graceful\\\\s+restart|long\\\\s+lived\\\\s+stale\\\\s+time|dynamic\\\\s+name(?:\\\\s+digits)?|free\\\\s+bind|ttl\\\\s+security|multihop\\\\s+password|rr\\\\s+client|rs\\\\s+client|advertise\\\\s+hostname|interpret\\\\s+communities|deterministic\\\\s+med|default\\\\s+bgp_local_pref|default\\\\s+bgp_med|med\\\\s+metric|igp\\\\s+metric|missing\\\\s+lladdr|gateway\\\\s+address|forwarding\\\\s+addressed|gateway\\\\s+recursive|allow\\\\s+local\\\\s+as|allow\\\\s+bogus\\\\s+as|originate\\\\s+community|full\\\\s+route\\\\s+table|capabilities|primary)\\\\b","name":"keyword.other.bgp.phrase.bird"}]},"route-attributes":{"patterns":[{"match":"\\\\b(?:net|scope|preference|from|gw|proto|source|dest|ifname|ifindex|weight|gw_mpls|gw_mpls_stack|onlink|igp_metric|mpls_label|mpls_policy|mpls_class|bgp_path|bgp_origin|bgp_next_hop|bgp_med|bgp_local_pref|bgp_community|bgp_ext_community|bgp_large_community|bgp_originator_id|bgp_cluster_list|ospf_metric1|ospf_metric2|ospf_tag|ospf_router_id|rip_metric|rip_tag|mypath|mylclist)\\\\b","name":"support.variable.route-attribute.bird"}]},"semantic-modifiers":{"patterns":[{"match":"\\\\b(?:self|on|off|remote|extended)\\\\b","name":"keyword.other.semantic-modifier.bird"}]},"strings":{"patterns":[{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.bird"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.bird"}},"name":"string.quoted.double.bird","patterns":[{"match":"\\\\.","name":"constant.character.escape.bird"}]},{"match":"'[-.0-:A-Z_a-z]+'","name":"entity.name.symbol.quoted.bird"}]},"structural-keywords":{"patterns":[{"match":"\\\\b(?:if|then|else|case|for|do|while|break|continue|return|in)\\\\b","name":"keyword.control.bird"},{"match":"\\\\belse\\\\s*:","name":"keyword.control.case.else.bird"},{"match":"\\\\b(?:accept|reject|error)\\\\b","name":"keyword.control.flow.bird"},{"match":"\\\\b(?:protocol|table|define|include|attribute|eval|ipv4|ipv6|local|as|from|where|cost|limit|action)\\\\b","name":"keyword.control.structure.bird"}]},"symbols":{"patterns":[{"match":"\\\\b[A-Z_a-z][0-9A-Z_a-z]*\\\\b","name":"variable.other.bird"}]},"template-definitions":{"patterns":[{"begin":"\\\\b(template)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\s+(from)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.control.template.bird"},"2":{"name":"entity.name.type.protocol.bird"},"3":{"name":"entity.name.function.template.bird"},"4":{"name":"keyword.control.template-reference.bird"},"5":{"name":"entity.name.function.template.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.template-definition-with-from.bird","patterns":[{"include":"$self"}]},{"begin":"\\\\b(template)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.control.template.bird"},"2":{"name":"entity.name.type.protocol.bird"},"3":{"name":"entity.name.function.template.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.template-definition-with-name.bird","patterns":[{"include":"$self"}]},{"begin":"\\\\b(template)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\s*\\\\{","beginCaptures":{"1":{"name":"keyword.control.template.bird"},"2":{"name":"entity.name.type.protocol.bird"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.end.bird"}},"name":"meta.template-definition-anonymous.bird","patterns":[{"include":"$self"}]}]},"user-variables":{"patterns":[{"match":"\\\\b[A-Z][0-9A-Z_a-z]*\\\\b","name":"variable.other.user-defined.bird"}]},"variable-declarations":{"patterns":[{"captures":{"1":{"name":"storage.type.bird"},"2":{"name":"variable.other.declaration.bird"}},"match":"\\\\b((?:int|pair|quad|ip|prefix|ec|lc|rd|enum)\\\\s+set|int|bool|ip|prefix|rd|pair|quad|ec|lc|string|bytestring|bgpmask|bgppath|clist|eclist|lclist|set|enum|route)\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)(?:\\\\s*=|;)","name":"meta.variable-declaration.bird"}]},"vpn-rd":{"match":"\\\\b(?:[0-9]+:[0-9]+|[012]:[0-9]+:[0-9]+|(?:[0-9]{1,3}\\\\.){3}[0-9]{1,3}:[0-9]+)\\\\b","name":"constant.numeric.vpn-rd.bird"}},"scopeName":"source.bird2","aliases":["bird"]}`));
7
+ var bird2_default = [
8
+ lang
9
+ ];
10
+ export {
11
+ bird2_default as default
12
+ };
13
+ //# sourceMappingURL=bird2-XPYCGAYQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/.pnpm/@shikijs+langs@4.0.2/node_modules/@shikijs/langs/dist/bird2.mjs"],"sourcesContent":["const lang = Object.freeze(JSON.parse(\"{\\\"displayName\\\":\\\"BIRD2 Configuration\\\",\\\"fileTypes\\\":[\\\"conf\\\",\\\"bird\\\",\\\"bird2\\\",\\\"bird3\\\",\\\"bird.conf\\\",\\\"bird2.conf\\\",\\\"bird3.conf\\\"],\\\"foldingStartMarker\\\":\\\"\\\\\\\\{\\\\\\\\s*$\\\",\\\"foldingStopMarker\\\":\\\"^\\\\\\\\s*}\\\",\\\"name\\\":\\\"bird2\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#comments\\\"},{\\\"include\\\":\\\"#strings\\\"},{\\\"include\\\":\\\"#ip-addresses\\\"},{\\\"include\\\":\\\"#prefixes\\\"},{\\\"include\\\":\\\"#vpn-rd\\\"},{\\\"include\\\":\\\"#bytestrings\\\"},{\\\"include\\\":\\\"#bgp-paths\\\"},{\\\"include\\\":\\\"#print-statements\\\"},{\\\"include\\\":\\\"#template-definitions\\\"},{\\\"include\\\":\\\"#filter-definitions\\\"},{\\\"include\\\":\\\"#function-definitions\\\"},{\\\"include\\\":\\\"#protocol-definitions\\\"},{\\\"include\\\":\\\"#next-hop-statements\\\"},{\\\"include\\\":\\\"#neighbor-statements\\\"},{\\\"include\\\":\\\"#import-export-statements\\\"},{\\\"include\\\":\\\"#variable-declarations\\\"},{\\\"include\\\":\\\"#method-calls\\\"},{\\\"include\\\":\\\"#function-calls\\\"},{\\\"include\\\":\\\"#method-properties\\\"},{\\\"include\\\":\\\"#route-attributes\\\"},{\\\"include\\\":\\\"#data-types\\\"},{\\\"include\\\":\\\"#constants\\\"},{\\\"include\\\":\\\"#structural-keywords\\\"},{\\\"include\\\":\\\"#protocol-phrases\\\"},{\\\"include\\\":\\\"#functional-keywords\\\"},{\\\"include\\\":\\\"#semantic-modifiers\\\"},{\\\"include\\\":\\\"#builtin-functions\\\"},{\\\"include\\\":\\\"#filter-names\\\"},{\\\"include\\\":\\\"#user-variables\\\"},{\\\"include\\\":\\\"#operators\\\"},{\\\"include\\\":\\\"#numbers\\\"},{\\\"include\\\":\\\"#symbols\\\"},{\\\"include\\\":\\\"#blocks\\\"}],\\\"repository\\\":{\\\"bgp-paths\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\[=\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.bgp-path.begin.bird\\\"}},\\\"end\\\":\\\"=]\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.bgp-path.end.bird\\\"}},\\\"name\\\":\\\"meta.bgp-path.bird\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"[*+?]\\\",\\\"name\\\":\\\"keyword.operator.wildcard.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b[0-9]+\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.asn.bird\\\"},{\\\"include\\\":\\\"#operators\\\"},{\\\"include\\\":\\\"#symbols\\\"}]}]},\\\"blocks\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.begin.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.block.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"begin\\\":\\\"\\\\\\\\[\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.set.begin.bird\\\"}},\\\"end\\\":\\\"]\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.set.end.bird\\\"}},\\\"name\\\":\\\"meta.set.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"begin\\\":\\\"\\\\\\\\(\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.tuple.begin.bird\\\"}},\\\"end\\\":\\\"\\\\\\\\)\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.tuple.end.bird\\\"}},\\\"name\\\":\\\"meta.tuple.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"match\\\":\\\";\\\",\\\"name\\\":\\\"punctuation.terminator.statement.bird\\\"},{\\\"match\\\":\\\",\\\",\\\"name\\\":\\\"punctuation.separator.bird\\\"}]},\\\"builtin-functions\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:defined|unset|roa_check|aspa_check|aspa_check_downstream|aspa_check_upstream|from_hex|format|append|prepend|add|delete|empty|reset|bt_assert|bt_test_suite|bt_test_same)\\\\\\\\b\\\",\\\"name\\\":\\\"support.function.builtin.bird\\\"}]},\\\"bytestrings\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\bhex:\\\\\\\\h{2}(?:[-.:\\\\\\\\s]*\\\\\\\\h{2})*\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.bytestring.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:\\\\\\\\h{2}[-.:\\\\\\\\s]*){15,}\\\\\\\\h{2}\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.bytestring.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b\\\\\\\\h{32,}\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.bytestring.bird\\\"}]},\\\"comments\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"#\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.comment.bird\\\"}},\\\"end\\\":\\\"$\\\",\\\"name\\\":\\\"comment.line.number-sign.bird\\\"},{\\\"begin\\\":\\\"/\\\\\\\\*\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.comment.begin.bird\\\"}},\\\"end\\\":\\\"\\\\\\\\*/\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.comment.end.bird\\\"}},\\\"name\\\":\\\"comment.block.bird\\\"}]},\\\"constants\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:on|off|yes|no|true|false)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.boolean.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:empty|unknown|generic|rt|ro|one|ten)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.special.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\bSCOPE_(?:HOST|LINK|SITE|ORGANIZATION|UNIVERSE)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.scope.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\bRTS_(?:STATIC|INHERIT|DEVICE|RIP|OSPF|OSPF_IA|OSPF_EXT1|OSPF_EXT2|BGP|PIPE|BABEL)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.source.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\bRTD_(?:ROUTER|DEVICE|MULTIPATH|BLACKHOLE|UNREACHABLE|PROHIBIT)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.dest.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\bROA_(?:UNKNOWN|INVALID|VALID)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.roa.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\bASPA_(?:UNKNOWN|INVALID|VALID)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.aspa.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\bNET_(?:IP4|IP6|IP6_SADR|VPN4|VPN6|ROA4|ROA6|FLOW4|FLOW6|MPLS)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.net-type.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\bMPLS_POLICY_(?:NONE|STATIC|PREFIX|AGGREGATE|VRF)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.language.mpls.bird\\\"}]},\\\"data-types\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:(?:int|pair|quad|ip|prefix|ec|lc|rd|enum)\\\\\\\\s+set|int|bool|ip|prefix|rd|pair|quad|ec|lc|string|bytestring|bgpmask|bgppath|clist|eclist|lclist|set|enum|route)\\\\\\\\b\\\",\\\"name\\\":\\\"storage.type.bird\\\"}]},\\\"filter-definitions\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\b(filter)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\\\\\s*\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.filter.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.function.filter.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.filter-definition.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]}]},\\\"filter-names\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b[A-Z_a-z][0-9A-Z_a-z]*_filter\\\\\\\\b\\\",\\\"name\\\":\\\"entity.name.function.filter.bird\\\"}]},\\\"function-calls\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\b([A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s*\\\\\\\\(\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"entity.name.function.call.bird\\\"}},\\\"end\\\":\\\"\\\\\\\\)\\\",\\\"name\\\":\\\"meta.function-call.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]}]},\\\"function-definitions\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\b(function)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')(?=\\\\\\\\s*\\\\\\\\()\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.function.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.function.user-defined.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.function-definition.bird\\\",\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\(\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.parameters.begin.bird\\\"}},\\\"end\\\":\\\"\\\\\\\\)\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.parameters.end.bird\\\"}},\\\"name\\\":\\\"meta.function-parameters.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#data-types\\\"},{\\\"include\\\":\\\"#symbols\\\"}]},{\\\"begin\\\":\\\"->\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"keyword.operator.return-type.bird\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\{)\\\",\\\"name\\\":\\\"meta.function-return-type.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#data-types\\\"}]},{\\\"include\\\":\\\"$self\\\"}]}]},\\\"functional-keywords\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:static|rip|ospf|bgp|babel|rpki|bfd|bmp|device|direct|kernel|pipe|perf|mrt|aggregator|l3vpn|radv)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.control.protocol-type.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:graceful|restart|preference|disabled|hold|keepalive|connect|retry|start|delay|error|wait|forget|scan|randomize|router|id)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.control.routing.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:interface|type|wired|wireless|tunnel|rxcost|limit|hello|update|interval|port|tx|class|dscp|priority|rx|buffer|length|check|link|rtt|cost|min|max|decay|send|timestamps)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.interface.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:(?:refresh|retry|expire|transport|ssh|tcp|user|address|version|ignore|private|public|key)|(?:local\\\\\\\\s+address|ignore\\\\\\\\s+max\\\\\\\\s+length|min\\\\\\\\s+version|max\\\\\\\\s+version|bird\\\\\\\\s+private\\\\\\\\s+key|remote\\\\\\\\s+public\\\\\\\\s+key))\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.rpki.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:authentication|none|mac|permissive|password|generate|accept|from|to|algorithm|hmac|sha1|sha256|sha384|sha512|blake2s128|blake2s256|blake2b256|blake2b512)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.auth.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\btime\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.time.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:hostname|description|debug|log|syslog|stderr|bird|protocols|tables|channels|timeouts|passwords|bfd|confederation|cluster|stub|dead|neighbors|area|md5|multihop|passive|rfc1583compat|tick|ls|retransmit|transmit|ack|state|database|summary|external|nssa|translator|always|candidate|never|role|stability|election|action|warn|block|disable|keep|filtered|receive|modify|add|delete|withdraw|unreachable|blackhole|prohibit|unreach|igp_metric|localpref|med|origin|community|large_community|ext_community|as_path|prepend|weight|gateway|scope|onlink|recursive|multipath|igp|channel|sadr|src|learn|persist|via|ng)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.config.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:flow4|flow6|dst|src|proto|header|dport|sport|icmp|code|tcp|flags|dscp|dont_fragment|is_fragment|first_fragment|last_fragment|fragment|label|offset)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.flowspec.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:vpn4|vpn6|mpls|aspa|roa4|roa6)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.address.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:all|none)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.quick-declaration.bird\\\"}]},\\\"import-export-statements\\\":{\\\"patterns\\\":[{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.import-export.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.control.filter.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"entity.name.function.filter.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(import)\\\\\\\\s+(filter)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\\\\\b\\\",\\\"name\\\":\\\"meta.import-statement.bird\\\"},{\\\"begin\\\":\\\"\\\\\\\\b(import)\\\\\\\\s+(filter)\\\\\\\\s*\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.import-export.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.control.filter.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.import-filter-inline.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"begin\\\":\\\"\\\\\\\\b(export)\\\\\\\\s+(where)\\\\\\\\b\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.import-export.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.control.where.bird\\\"}},\\\"end\\\":\\\";\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.terminator.statement.bird\\\"}},\\\"name\\\":\\\"meta.export-where-clause.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.import-export.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.control.filter.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"entity.name.function.filter.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(export)\\\\\\\\s+(filter)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\\\\\b\\\",\\\"name\\\":\\\"meta.export-statement.bird\\\"}]},\\\"ip-addresses\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:[0-9]{1,3}\\\\\\\\.){3}[0-9]{1,3}(?:/[0-9]{1,2})?\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.ip.ipv4.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:\\\\\\\\h{0,4}:){2,7}\\\\\\\\h{0,4}(?:/[0-9]{1,3})?\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.ip.ipv6.bird\\\"},{\\\"match\\\":\\\"::(?:\\\\\\\\h{0,4}:){0,6}\\\\\\\\h{0,4}(?:/[0-9]{1,3})?\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.ip.ipv6.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:\\\\\\\\h{0,4}:){1,6}::(?:\\\\\\\\h{0,4}:){0,5}\\\\\\\\h{0,4}(?:/[0-9]{1,3})?\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.ip.ipv6.bird\\\"}]},\\\"method-calls\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\.\\\\\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s*\\\\\\\\(\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"entity.name.function.method.bird\\\"}},\\\"end\\\":\\\"\\\\\\\\)\\\",\\\"name\\\":\\\"meta.method-call.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"variable.other.property.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\.\\\\\\\\s*([A-Z_a-z][0-9A-Z_a-z]*)\\\",\\\"name\\\":\\\"meta.method-access.bird\\\"}]},\\\"method-properties\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"(?<=\\\\\\\\.)\\\\\\\\s*(?:first|last|last_nonaggregated|len|asn|data1??|data2|is_v4|ip|src|dst|rd|maxlen|type|mask|min|max)\\\\\\\\b(?!\\\\\\\\s*\\\\\\\\()\\\",\\\"name\\\":\\\"support.variable.property.bird\\\"}]},\\\"neighbor-statements\\\":{\\\"patterns\\\":[{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.local.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.symbol.local-address.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"keyword.control.port.bird\\\"},\\\"4\\\":{\\\"name\\\":\\\"constant.numeric.port.bird\\\"},\\\"5\\\":{\\\"name\\\":\\\"keyword.control.as.bird\\\"},\\\"6\\\":{\\\"name\\\":\\\"constant.numeric.asn.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(local)\\\\\\\\s+([.:\\\\\\\\h]+|[A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')(?:\\\\\\\\s+(port)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*))?\\\\\\\\s+(as)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.local-as-statement.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.local.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.control.as.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"constant.numeric.asn.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(local)\\\\\\\\s+(as)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.local-as-template-statement.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.neighbor.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"constant.numeric.ip-address.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"meta.interface-reference.bird\\\"},\\\"4\\\":{\\\"name\\\":\\\"string.quoted.single.interface.bird\\\"},\\\"5\\\":{\\\"name\\\":\\\"variable.other.interface.bird\\\"},\\\"6\\\":{\\\"name\\\":\\\"keyword.control.as.bird\\\"},\\\"7\\\":{\\\"name\\\":\\\"constant.numeric.asn.bird\\\"},\\\"8\\\":{\\\"name\\\":\\\"keyword.control.port.bird\\\"},\\\"9\\\":{\\\"name\\\":\\\"constant.numeric.port.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(neighbor)\\\\\\\\s+([.:\\\\\\\\h]+)\\\\\\\\s*(%\\\\\\\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?(?:\\\\\\\\s+(as)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*))?\\\\\\\\s+(port)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.neighbor-port-statement.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.neighbor.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.symbol.neighbor-address.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"meta.interface-reference.bird\\\"},\\\"4\\\":{\\\"name\\\":\\\"string.quoted.single.interface.bird\\\"},\\\"5\\\":{\\\"name\\\":\\\"variable.other.interface.bird\\\"},\\\"6\\\":{\\\"name\\\":\\\"keyword.control.as.bird\\\"},\\\"7\\\":{\\\"name\\\":\\\"constant.numeric.asn.bird\\\"},\\\"8\\\":{\\\"name\\\":\\\"keyword.control.port.bird\\\"},\\\"9\\\":{\\\"name\\\":\\\"constant.numeric.port.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(neighbor)\\\\\\\\s+('[-.0-:A-Z_a-z]+'|(?!(?:as|range)\\\\\\\\b)[A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s*(%\\\\\\\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?(?:\\\\\\\\s+(as)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*))?\\\\\\\\s+(port)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.neighbor-port-symbolic-statement.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.neighbor.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"constant.numeric.ip-address.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"meta.interface-reference.bird\\\"},\\\"4\\\":{\\\"name\\\":\\\"string.quoted.single.interface.bird\\\"},\\\"5\\\":{\\\"name\\\":\\\"variable.other.interface.bird\\\"},\\\"6\\\":{\\\"name\\\":\\\"keyword.control.as.bird\\\"},\\\"7\\\":{\\\"name\\\":\\\"constant.numeric.asn.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(neighbor)\\\\\\\\s+([.:\\\\\\\\h]+)\\\\\\\\s*(%\\\\\\\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?\\\\\\\\s+(as)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.neighbor-statement.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.neighbor.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.symbol.neighbor-address.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"meta.interface-reference.bird\\\"},\\\"4\\\":{\\\"name\\\":\\\"string.quoted.single.interface.bird\\\"},\\\"5\\\":{\\\"name\\\":\\\"variable.other.interface.bird\\\"},\\\"6\\\":{\\\"name\\\":\\\"keyword.control.as.bird\\\"},\\\"7\\\":{\\\"name\\\":\\\"constant.numeric.asn.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(neighbor)\\\\\\\\s+('[-.0-:A-Z_a-z]+'|(?!(?:as|range)\\\\\\\\b)[A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s*(%\\\\\\\\s*(?:'([-.0-:A-Z_a-z]+)'|([-.0-:A-Z_a-z]+)))?\\\\\\\\s+(as)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.neighbor-symbolic-statement.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.neighbor.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.control.as.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"constant.numeric.asn.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(neighbor)\\\\\\\\s+(as)\\\\\\\\s+([0-9]+|[A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.neighbor-template-statement.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.source.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"constant.numeric.ip-address.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(source address)\\\\\\\\s+([.:\\\\\\\\h]+)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.source-address-statement.bird\\\"}]},\\\"next-hop-statements\\\":{\\\"patterns\\\":[{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.routing.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.other.ip-version.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"constant.numeric.ip-address.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(next hop)\\\\\\\\s+(ipv4)\\\\\\\\s+([.0-9]+)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.next-hop-ipv4.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.routing.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.other.ip-version.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"constant.numeric.ip-address.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(next hop)\\\\\\\\s+(ipv6)\\\\\\\\s+([:\\\\\\\\h]+)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.next-hop-ipv6.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.routing.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.other.semantic-modifier.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(next hop)\\\\\\\\s+(self)\\\\\\\\b\\\",\\\"name\\\":\\\"meta.next-hop-simple.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.routing.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.other.semantic-modifier.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b(extended next hop)\\\\\\\\s+(o(?:n|ff))\\\\\\\\b\\\",\\\"name\\\":\\\"meta.extended-next-hop-statement.bird\\\"}]},\\\"numbers\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b0x\\\\\\\\h+\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.hex.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b[0-9]+\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.decimal.bird\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.other.unit.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b[0-9]+\\\\\\\\s*([mu]??s)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.time.bird\\\"}]},\\\"operators\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"==|!=|<=|>=|!~|[<=>~]\\\",\\\"name\\\":\\\"keyword.operator.comparison.bird\\\"},{\\\"match\\\":\\\"&&|\\\\\\\\|\\\\\\\\||!|->\\\",\\\"name\\\":\\\"keyword.operator.logical.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\+\\\\\\\\+\\\",\\\"name\\\":\\\"keyword.operator.concat.bird\\\"},{\\\"match\\\":\\\"[-%*+/]\\\",\\\"name\\\":\\\"keyword.operator.arithmetic.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\.\\\\\\\\.\\\",\\\"name\\\":\\\"keyword.operator.range.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\.\\\",\\\"name\\\":\\\"keyword.operator.accessor.bird\\\"}]},\\\"prefixes\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:(?:[0-9]{1,3}\\\\\\\\.){3}[0-9]{1,3}|(?:\\\\\\\\h{0,4}:)+\\\\\\\\h{0,4})/[0-9]{1,3}(?:[-+]|\\\\\\\\{[0-9]+,[0-9]+})?\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.prefix.bird\\\"}]},\\\"print-statements\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\b(printn??)\\\\\\\\b\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.other.print.bird\\\"}},\\\"end\\\":\\\";\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.terminator.statement.bird\\\"}},\\\"name\\\":\\\"meta.print-statement.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]}]},\\\"protocol-definitions\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\b(protocol)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\\\\\s+(from)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\\\\\s*\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.protocol.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.type.protocol.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"entity.name.function.protocol.bird\\\"},\\\"4\\\":{\\\"name\\\":\\\"keyword.control.template-reference.bird\\\"},\\\"5\\\":{\\\"name\\\":\\\"entity.name.function.template.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.protocol-definition-with-template.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"begin\\\":\\\"\\\\\\\\b(protocol)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\\\\\s*\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.protocol.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.type.protocol.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"entity.name.function.protocol.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.protocol-definition-with-name.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"begin\\\":\\\"\\\\\\\\b(protocol)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s*\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.protocol.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.type.protocol.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.protocol-definition-anonymous.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]}]},\\\"protocol-phrases\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:strict\\\\\\\\s+bind|zero\\\\\\\\s+udp6\\\\\\\\s+checksum\\\\\\\\s+rx|idle\\\\\\\\s+tx\\\\\\\\s+interval|multiplier|keyed|meticulous)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.bfd.phrase.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:send\\\\\\\\s+timestamps|rtt\\\\\\\\s+(?:cost|min|max|decay)|next\\\\\\\\s+hop\\\\\\\\s+prefer|prefer|native)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.babel.phrase.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:next\\\\\\\\s+hop\\\\\\\\s+(?:self|address|ibgp|ebgp)|link\\\\\\\\s+local\\\\\\\\s+next\\\\\\\\s+hop\\\\\\\\s+format|import\\\\\\\\s+table|export\\\\\\\\s+table|base\\\\\\\\s+table|add\\\\\\\\s+paths|aigp\\\\\\\\s+originate|long\\\\\\\\s+lived\\\\\\\\s+graceful\\\\\\\\s+restart|long\\\\\\\\s+lived\\\\\\\\s+stale\\\\\\\\s+time|dynamic\\\\\\\\s+name(?:\\\\\\\\s+digits)?|free\\\\\\\\s+bind|ttl\\\\\\\\s+security|multihop\\\\\\\\s+password|rr\\\\\\\\s+client|rs\\\\\\\\s+client|advertise\\\\\\\\s+hostname|interpret\\\\\\\\s+communities|deterministic\\\\\\\\s+med|default\\\\\\\\s+bgp_local_pref|default\\\\\\\\s+bgp_med|med\\\\\\\\s+metric|igp\\\\\\\\s+metric|missing\\\\\\\\s+lladdr|gateway\\\\\\\\s+address|forwarding\\\\\\\\s+addressed|gateway\\\\\\\\s+recursive|allow\\\\\\\\s+local\\\\\\\\s+as|allow\\\\\\\\s+bogus\\\\\\\\s+as|originate\\\\\\\\s+community|full\\\\\\\\s+route\\\\\\\\s+table|capabilities|primary)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.bgp.phrase.bird\\\"}]},\\\"route-attributes\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:net|scope|preference|from|gw|proto|source|dest|ifname|ifindex|weight|gw_mpls|gw_mpls_stack|onlink|igp_metric|mpls_label|mpls_policy|mpls_class|bgp_path|bgp_origin|bgp_next_hop|bgp_med|bgp_local_pref|bgp_community|bgp_ext_community|bgp_large_community|bgp_originator_id|bgp_cluster_list|ospf_metric1|ospf_metric2|ospf_tag|ospf_router_id|rip_metric|rip_tag|mypath|mylclist)\\\\\\\\b\\\",\\\"name\\\":\\\"support.variable.route-attribute.bird\\\"}]},\\\"semantic-modifiers\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:self|on|off|remote|extended)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.other.semantic-modifier.bird\\\"}]},\\\"strings\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\"\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.begin.bird\\\"}},\\\"end\\\":\\\"\\\\\\\"\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.end.bird\\\"}},\\\"name\\\":\\\"string.quoted.double.bird\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\.\\\",\\\"name\\\":\\\"constant.character.escape.bird\\\"}]},{\\\"match\\\":\\\"'[-.0-:A-Z_a-z]+'\\\",\\\"name\\\":\\\"entity.name.symbol.quoted.bird\\\"}]},\\\"structural-keywords\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b(?:if|then|else|case|for|do|while|break|continue|return|in)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.control.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\belse\\\\\\\\s*:\\\",\\\"name\\\":\\\"keyword.control.case.else.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:accept|reject|error)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.control.flow.bird\\\"},{\\\"match\\\":\\\"\\\\\\\\b(?:protocol|table|define|include|attribute|eval|ipv4|ipv6|local|as|from|where|cost|limit|action)\\\\\\\\b\\\",\\\"name\\\":\\\"keyword.control.structure.bird\\\"}]},\\\"symbols\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b[A-Z_a-z][0-9A-Z_a-z]*\\\\\\\\b\\\",\\\"name\\\":\\\"variable.other.bird\\\"}]},\\\"template-definitions\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\b(template)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\\\\\s+(from)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\\\\\s*\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.template.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.type.protocol.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"entity.name.function.template.bird\\\"},\\\"4\\\":{\\\"name\\\":\\\"keyword.control.template-reference.bird\\\"},\\\"5\\\":{\\\"name\\\":\\\"entity.name.function.template.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.template-definition-with-from.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"begin\\\":\\\"\\\\\\\\b(template)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*|'[-.0-:A-Z_a-z]+')\\\\\\\\s*\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.template.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.type.protocol.bird\\\"},\\\"3\\\":{\\\"name\\\":\\\"entity.name.function.template.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.template-definition-with-name.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]},{\\\"begin\\\":\\\"\\\\\\\\b(template)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)\\\\\\\\s*\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.template.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"entity.name.type.protocol.bird\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.block.end.bird\\\"}},\\\"name\\\":\\\"meta.template-definition-anonymous.bird\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"$self\\\"}]}]},\\\"user-variables\\\":{\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\b[A-Z][0-9A-Z_a-z]*\\\\\\\\b\\\",\\\"name\\\":\\\"variable.other.user-defined.bird\\\"}]},\\\"variable-declarations\\\":{\\\"patterns\\\":[{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"storage.type.bird\\\"},\\\"2\\\":{\\\"name\\\":\\\"variable.other.declaration.bird\\\"}},\\\"match\\\":\\\"\\\\\\\\b((?:int|pair|quad|ip|prefix|ec|lc|rd|enum)\\\\\\\\s+set|int|bool|ip|prefix|rd|pair|quad|ec|lc|string|bytestring|bgpmask|bgppath|clist|eclist|lclist|set|enum|route)\\\\\\\\s+([A-Z_a-z][0-9A-Z_a-z]*)(?:\\\\\\\\s*=|;)\\\",\\\"name\\\":\\\"meta.variable-declaration.bird\\\"}]},\\\"vpn-rd\\\":{\\\"match\\\":\\\"\\\\\\\\b(?:[0-9]+:[0-9]+|[012]:[0-9]+:[0-9]+|(?:[0-9]{1,3}\\\\\\\\.){3}[0-9]{1,3}:[0-9]+)\\\\\\\\b\\\",\\\"name\\\":\\\"constant.numeric.vpn-rd.bird\\\"}},\\\"scopeName\\\":\\\"source.bird2\\\",\\\"aliases\\\":[\\\"bird\\\"]}\"))\n\nexport default [\nlang\n]\n"],"mappings":";;;;;AAAA,IAAM,OAAO,OAAO,OAAO,KAAK,MAAM,+1sBAAi8wB,CAAC;AAEx+wB,IAAO,gBAAQ;AAAA,EACf;AACA;","names":[]}