node-karin 1.7.13 → 1.8.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 (302) hide show
  1. package/CHANGELOG.md +819 -751
  2. package/default/config/adapter.json +27 -27
  3. package/default/config/config.json +44 -44
  4. package/default/config/groups.json +66 -66
  5. package/default/config/pm2.json +15 -15
  6. package/default/config/privates.json +25 -25
  7. package/default/config/redis.json +5 -5
  8. package/default/config/render.json +18 -18
  9. package/dist/cli/index.cjs +1 -487
  10. package/dist/cli/index.mjs +4120 -0
  11. package/dist/cli/pm2.js +1 -1
  12. package/dist/global.d.d.ts +68 -0
  13. package/dist/index.d.ts +1962 -508
  14. package/dist/index.mjs +31566 -0
  15. package/dist/logger-DVUGuzNj.d.ts +101 -0
  16. package/dist/module/art-template.d.ts +12 -1
  17. package/dist/module/axios.d.ts +1 -1
  18. package/dist/module/chalk.d.ts +1 -1
  19. package/dist/module/chokidar.d.ts +1 -1
  20. package/dist/module/express.d.ts +2 -1
  21. package/dist/module/express.mjs +2 -0
  22. package/dist/module/lodash.d.ts +2 -1
  23. package/dist/module/{lodash.js → lodash.mjs} +1 -0
  24. package/dist/module/moment.d.ts +1 -1
  25. package/dist/module/node-schedule.d.ts +1 -1
  26. package/dist/module/redis.d.ts +1 -1
  27. package/dist/module/sqlite3.d.ts +1 -1
  28. package/dist/module/ws.d.ts +2 -1
  29. package/dist/module/ws.mjs +2 -0
  30. package/dist/module/yaml.d.ts +1 -1
  31. package/dist/root.d.ts +5 -1
  32. package/dist/{root.js → root.mjs} +3 -1
  33. package/dist/start/app.d.ts +1 -0
  34. package/dist/start/app.mjs +9 -0
  35. package/dist/start/index.d.ts +1 -0
  36. package/dist/start/index.mjs +102 -0
  37. package/dist/web/assets/css/components-ep7vm38G.css +1 -0
  38. package/dist/web/assets/css/index-DxLRZkvi.css.br +0 -0
  39. package/dist/web/assets/js/components-Bp80gYJA.js.br +0 -0
  40. package/dist/web/assets/js/entry-DhKjPdoJ.js.br +0 -0
  41. package/dist/web/assets/js/hooks-CSKAeqvP.js.br +0 -0
  42. package/dist/web/assets/js/page-404.tsx-Dr2zAhTf.js +1 -0
  43. package/dist/web/assets/js/page-dashboard-B6B4ob8B.js.br +0 -0
  44. package/dist/web/assets/js/page-loading.tsx-g_ta_NRr.js.br +0 -0
  45. package/dist/web/assets/js/page-login.tsx-Cm98Ubip.js.br +0 -0
  46. package/dist/web/assets/js/utils-Cj3xTboC.js +2 -0
  47. package/dist/web/assets/js/vendor-editor-B8hjWfkw.js.br +0 -0
  48. package/dist/web/assets/js/vendor-heroui-CMeNhCFh.js.br +0 -0
  49. package/dist/web/assets/js/vendor-others-Bv0hrdEA.js.br +0 -0
  50. package/dist/web/assets/js/vendor-react-ChUmQ3I2.js.br +0 -0
  51. package/dist/web/assets/js/vendor-ui-utils-5rYIvRjL.js.br +0 -0
  52. package/dist/web/assets/js/vendor-visual-CdiJEXnN.js.br +0 -0
  53. package/dist/web/{flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2 → flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2.br} +0 -0
  54. package/dist/web/grid.svg +5 -5
  55. package/dist/web/icon.css +24 -24
  56. package/dist/web/index.html +37 -24
  57. package/dist/web/karin.png.br +0 -0
  58. package/dist/web/monaco-editor/min/vs/base/browser/ui/codicons/codicon/codicon.ttf.br +0 -0
  59. package/dist/web/sha256.min.js.br +0 -0
  60. package/package.json +192 -201
  61. package/README.md +0 -32
  62. package/dist/cli/index.js +0 -479
  63. package/dist/index.js +0 -19515
  64. package/dist/module/art-template.cjs +0 -11
  65. package/dist/module/axios.cjs +0 -22
  66. package/dist/module/chalk.cjs +0 -22
  67. package/dist/module/chokidar.cjs +0 -22
  68. package/dist/module/dotenv.cjs +0 -22
  69. package/dist/module/dotenv.d.ts +0 -2
  70. package/dist/module/dotenv.js +0 -2
  71. package/dist/module/express.cjs +0 -36
  72. package/dist/module/express.js +0 -1
  73. package/dist/module/lodash.cjs +0 -11
  74. package/dist/module/log4js.cjs +0 -22
  75. package/dist/module/log4js.d.ts +0 -2
  76. package/dist/module/log4js.js +0 -2
  77. package/dist/module/moment.cjs +0 -11
  78. package/dist/module/node-schedule.cjs +0 -22
  79. package/dist/module/redis.cjs +0 -22
  80. package/dist/module/sqlite3.cjs +0 -22
  81. package/dist/module/ws.cjs +0 -28
  82. package/dist/module/ws.js +0 -1
  83. package/dist/module/yaml.cjs +0 -22
  84. package/dist/web/assets/404-C9u_NlJi.js +0 -1
  85. package/dist/web/assets/Item-pd96GKIG.js.br +0 -0
  86. package/dist/web/assets/SelectionManager-BlXTH2VC.js.br +0 -0
  87. package/dist/web/assets/abap-BrgZPUOV.js.br +0 -0
  88. package/dist/web/assets/about-BwlDpX-c.js.br +0 -0
  89. package/dist/web/assets/accordion-Bj06RlD-.js.br +0 -0
  90. package/dist/web/assets/adapter-Du42CYBT.js.br +0 -0
  91. package/dist/web/assets/addon-web-links-Wrx0dCGl.js.br +0 -0
  92. package/dist/web/assets/apex-DyP6w7ZV.js.br +0 -0
  93. package/dist/web/assets/azcli-BaLxmfj-.js.br +0 -0
  94. package/dist/web/assets/bat-CFOPXBzS.js.br +0 -0
  95. package/dist/web/assets/bicep-BfEKNvv3.js.br +0 -0
  96. package/dist/web/assets/bot-DdYIqTVP.js +0 -6
  97. package/dist/web/assets/cameligo-BFG1Mk7z.js.br +0 -0
  98. package/dist/web/assets/chunk-2C6KNKEU-CBJmVWyn.js.br +0 -0
  99. package/dist/web/assets/chunk-2QAN2V2R-BulY1jfw.js.br +0 -0
  100. package/dist/web/assets/chunk-3TCFMHK3-BpJf4Q9f.js.br +0 -0
  101. package/dist/web/assets/chunk-4EXC76WE-DWVJR0TX.js.br +0 -0
  102. package/dist/web/assets/chunk-6JWJ7CFW-BDAlVmIQ.js.br +0 -0
  103. package/dist/web/assets/chunk-6NGXL2PC-DIPEMSmA.js.br +0 -0
  104. package/dist/web/assets/chunk-6VC6TS2O-sjq9IySl.js.br +0 -0
  105. package/dist/web/assets/chunk-736YWA4T-BK_z11TK.js.br +0 -0
  106. package/dist/web/assets/chunk-A6PX3NG3-BsGR2bWZ.js.br +0 -0
  107. package/dist/web/assets/chunk-B75B6XQK-B0VUBvt8.js +0 -1
  108. package/dist/web/assets/chunk-BWXGEJBS-DvCShJym.js.br +0 -0
  109. package/dist/web/assets/chunk-D5XJWRAV-9uH2CwV1.js +0 -1
  110. package/dist/web/assets/chunk-HAJUSXOG-6BFBENy1.js.br +0 -0
  111. package/dist/web/assets/chunk-IHO36JMK-DKnKLDmu.js.br +0 -0
  112. package/dist/web/assets/chunk-J6JGI6RM-DKmnXtnU.js.br +0 -0
  113. package/dist/web/assets/chunk-J7I6W5JF-IqR8CF_Q.js.br +0 -0
  114. package/dist/web/assets/chunk-KCYYJJH4-BdofC4qA.js.br +0 -0
  115. package/dist/web/assets/chunk-KHLLQ6W4-CpyZzH4q.js.br +0 -0
  116. package/dist/web/assets/chunk-KQ5CH2X7-MWuUq5gI.js.br +0 -0
  117. package/dist/web/assets/chunk-LAX3QLKM-B0tE0BjZ.js +0 -1
  118. package/dist/web/assets/chunk-LGSBTEIA--Gvr91gm.js +0 -1
  119. package/dist/web/assets/chunk-M3MASYO7-BVjxibqV.js +0 -1
  120. package/dist/web/assets/chunk-ML27DD5T-BjYAog8d.js.br +0 -0
  121. package/dist/web/assets/chunk-MSDKUXDP-DKkJKxM-.js.br +0 -0
  122. package/dist/web/assets/chunk-MW56SEHC-CTlcS-O4.js.br +0 -0
  123. package/dist/web/assets/chunk-MZRCPRP2-BBG21hp8.js.br +0 -0
  124. package/dist/web/assets/chunk-OH2E76JR-BYurMayl.js +0 -1
  125. package/dist/web/assets/chunk-OTWYT2HS-cQ8QQNDY.js +0 -1
  126. package/dist/web/assets/chunk-RRTOIK23-CSPsT46O.js.br +0 -0
  127. package/dist/web/assets/chunk-SLABUSGS-s9w3Zt5w.js.br +0 -0
  128. package/dist/web/assets/chunk-TE6SZS6W-1UK_YAGg.js +0 -1
  129. package/dist/web/assets/chunk-UX7UMZL5-DHf8C-o1.js +0 -1
  130. package/dist/web/assets/chunk-WQVQ7P2I-C4kbg9VI.js.br +0 -0
  131. package/dist/web/assets/clojure-DTECt2xU.js.br +0 -0
  132. package/dist/web/assets/codicon-DCmgc-ay.ttf +0 -0
  133. package/dist/web/assets/coffee-CDGzqUPQ.js.br +0 -0
  134. package/dist/web/assets/config-CEElyPBT.js.br +0 -0
  135. package/dist/web/assets/config-DVn1FaJ-.js.br +0 -0
  136. package/dist/web/assets/cpp-CLLBncYj.js.br +0 -0
  137. package/dist/web/assets/csharp-dUCx_-0o.js.br +0 -0
  138. package/dist/web/assets/csp-5Rap-vPy.js.br +0 -3
  139. package/dist/web/assets/css-D3h14YRZ.js.br +0 -0
  140. package/dist/web/assets/cssMode-CXyVPoom.js.br +0 -0
  141. package/dist/web/assets/cypher-DrQuvNYM.js.br +0 -0
  142. package/dist/web/assets/dart-CFKIUWau.js.br +0 -0
  143. package/dist/web/assets/default_page-BKgpdS-e.js +0 -1
  144. package/dist/web/assets/detail-C5769b6q.js.br +0 -0
  145. package/dist/web/assets/detail-COuw3J9r.js.br +0 -0
  146. package/dist/web/assets/detail-DqW0R8N9.css.br +0 -0
  147. package/dist/web/assets/dockerfile-Zznr-cwX.js.br +0 -0
  148. package/dist/web/assets/ecl-Ce3n6wWz.js.br +0 -0
  149. package/dist/web/assets/editor.worker-oRlJJsnX.js.br +0 -0
  150. package/dist/web/assets/elixir-deUWdS0T.js.br +0 -0
  151. package/dist/web/assets/env-CSYJHsPf.js.br +0 -0
  152. package/dist/web/assets/eye-DEh2Pgsu.js +0 -6
  153. package/dist/web/assets/features-animation-F-pzovue.js +0 -1
  154. package/dist/web/assets/flow9-i9-g7ZhI.js.br +0 -0
  155. package/dist/web/assets/focusSafely-DOspV_xj.js.br +0 -0
  156. package/dist/web/assets/freemarker2-BV0OzS9F.js.br +0 -0
  157. package/dist/web/assets/friend_request-DfiA7sPM.js.br +0 -0
  158. package/dist/web/assets/fsharp-CzKuDChf.js.br +0 -0
  159. package/dist/web/assets/github-nVmhSG0k.js +0 -11
  160. package/dist/web/assets/go-Cphgjts3.js.br +0 -0
  161. package/dist/web/assets/graphql-Cg7bfA9N.js.br +0 -0
  162. package/dist/web/assets/group-CfWIxZ1S.js.br +0 -0
  163. package/dist/web/assets/group_notice-XufgXVhG.js +0 -1
  164. package/dist/web/assets/handlebars-DSMVNR0n.js.br +0 -0
  165. package/dist/web/assets/hcl-0cvrggvQ.js.br +0 -0
  166. package/dist/web/assets/html-ClQau7kT.js.br +0 -0
  167. package/dist/web/assets/htmlMode-CN2HUcKJ.js.br +0 -0
  168. package/dist/web/assets/iconBase-BbDMq9Lm.js.br +0 -0
  169. package/dist/web/assets/index-B2KKfeyN.js.br +0 -0
  170. package/dist/web/assets/index-B59L0CDQ.js.br +0 -0
  171. package/dist/web/assets/index-BRJPOEf0.js.br +0 -0
  172. package/dist/web/assets/index-BSQ_9cWz.js.br +0 -0
  173. package/dist/web/assets/index-BTn745-y.js.br +0 -0
  174. package/dist/web/assets/index-Bl5YOuTR.js.br +0 -0
  175. package/dist/web/assets/index-Bm-03b92.js +0 -1
  176. package/dist/web/assets/index-CNKcljeW.js +0 -1
  177. package/dist/web/assets/index-CSkzWqtN.js.br +0 -0
  178. package/dist/web/assets/index-CY-NVVkv.js.br +0 -0
  179. package/dist/web/assets/index-CeBvj3ZH.js.br +0 -0
  180. package/dist/web/assets/index-CnkVaH2P.css.br +0 -0
  181. package/dist/web/assets/index-DCzNSkJn.js.br +0 -0
  182. package/dist/web/assets/index-DNKbYZlM.js +0 -1
  183. package/dist/web/assets/index-DVsvetQP.js.br +0 -0
  184. package/dist/web/assets/index-D_816BTl.js.br +0 -0
  185. package/dist/web/assets/index-Db1iHKoe.js.br +0 -0
  186. package/dist/web/assets/index-DjU-NtVQ.js +0 -1
  187. package/dist/web/assets/index-Drqc4ASm.js.br +0 -0
  188. package/dist/web/assets/index-DvwfI5vP.css.br +0 -0
  189. package/dist/web/assets/index-Dwnb7Xtz.js.br +0 -0
  190. package/dist/web/assets/index-EGWrH2j2.js +0 -1
  191. package/dist/web/assets/index-IUy6p99y.js +0 -1
  192. package/dist/web/assets/index-k_Cd4_SW.js.br +0 -0
  193. package/dist/web/assets/index-nZMp9MWB.js.br +0 -0
  194. package/dist/web/assets/index.esm-BSKygSH-.js.br +0 -0
  195. package/dist/web/assets/ini-Drc7WvVn.js.br +0 -0
  196. package/dist/web/assets/inputGroup-CJGuoYUx.js.br +0 -0
  197. package/dist/web/assets/isSymbol-BShv9ove.js.br +0 -0
  198. package/dist/web/assets/java-B_fMsGYe.js.br +0 -0
  199. package/dist/web/assets/javascript-BegoFNre.js.br +0 -0
  200. package/dist/web/assets/jsonMode-Dxf_RJRO.js.br +0 -0
  201. package/dist/web/assets/julia-Bqgm2twL.js.br +0 -0
  202. package/dist/web/assets/kotlin-BSkB5QuD.js.br +0 -0
  203. package/dist/web/assets/layout-al9rnD7b.js.br +0 -0
  204. package/dist/web/assets/less-BsTHnhdd.js.br +0 -0
  205. package/dist/web/assets/lexon-YWi4-JPR.js.br +0 -0
  206. package/dist/web/assets/liquid-bFSovgkX.js.br +0 -0
  207. package/dist/web/assets/loading-Czh_ivNv.js.br +0 -0
  208. package/dist/web/assets/login-DpjAzjKU.js.br +0 -0
  209. package/dist/web/assets/lua-nf6ki56Z.js.br +0 -0
  210. package/dist/web/assets/m3-Cpb6xl2v.js.br +0 -0
  211. package/dist/web/assets/markdown-DSZPf7rp.js.br +0 -0
  212. package/dist/web/assets/mdx-DGviX4hR.js.br +0 -0
  213. package/dist/web/assets/merge-CuVThMNe.js.br +0 -0
  214. package/dist/web/assets/mergeRefs-BpO9bzld.js +0 -1
  215. package/dist/web/assets/message-mTjTgeaM.js +0 -1
  216. package/dist/web/assets/message.model-B1qK1MiE.js.br +0 -0
  217. package/dist/web/assets/mips-B_c3zf-v.js.br +0 -0
  218. package/dist/web/assets/msdax-rUNN04Wq.js.br +0 -0
  219. package/dist/web/assets/mysql-DDwshQtU.js.br +0 -0
  220. package/dist/web/assets/number-7W8NeZVk.js.br +0 -0
  221. package/dist/web/assets/objective-c-B5zXfXm9.js.br +0 -0
  222. package/dist/web/assets/pascal-CXOwvkN_.js.br +0 -0
  223. package/dist/web/assets/pascaligo-Bc-ZgV77.js.br +0 -0
  224. package/dist/web/assets/perl-CwNk8-XU.js.br +0 -0
  225. package/dist/web/assets/pgsql-tGk8EFnU.js.br +0 -0
  226. package/dist/web/assets/php-CpIb_Oan.js.br +0 -0
  227. package/dist/web/assets/pla-B03wrqEc.js.br +0 -0
  228. package/dist/web/assets/pm2-CniXkaeu.js.br +0 -0
  229. package/dist/web/assets/postiats-BKlk5iyT.js.br +0 -0
  230. package/dist/web/assets/powerquery-Bhzvs7bI.js.br +0 -0
  231. package/dist/web/assets/powershell-Dd3NCNK9.js.br +0 -0
  232. package/dist/web/assets/private-CfG8JI8L.js.br +0 -0
  233. package/dist/web/assets/protobuf-COyEY5Pt.js.br +0 -0
  234. package/dist/web/assets/pug-BaJupSGV.js.br +0 -0
  235. package/dist/web/assets/python-D0ZD_k1N.js.br +0 -0
  236. package/dist/web/assets/qsharp-DXyYeYxl.js.br +0 -0
  237. package/dist/web/assets/r-CdQndTaG.js.br +0 -0
  238. package/dist/web/assets/razor-DRYiVyDt.js.br +0 -0
  239. package/dist/web/assets/react-resizable-panels.browser.esm-DubqLJ4h.js.br +0 -0
  240. package/dist/web/assets/redis-BJLUr1tG.js.br +0 -0
  241. package/dist/web/assets/redis-CVwtpugi.js.br +0 -0
  242. package/dist/web/assets/redshift-25W9uPmb.js.br +0 -0
  243. package/dist/web/assets/render-DEylqIUg.js.br +0 -0
  244. package/dist/web/assets/restructuredtext-DfzH4Xui.js.br +0 -0
  245. package/dist/web/assets/router-D_dYaqfK.js +0 -1
  246. package/dist/web/assets/ruby-Cp1zYvxS.js.br +0 -0
  247. package/dist/web/assets/rust-D5C2fndG.js.br +0 -0
  248. package/dist/web/assets/save-D6wQsuGT.js +0 -1
  249. package/dist/web/assets/sb-CDntyWJ8.js.br +0 -0
  250. package/dist/web/assets/scala-BoFRg7Ot.js.br +0 -0
  251. package/dist/web/assets/scheme-Bio4gycK.js.br +0 -0
  252. package/dist/web/assets/scss-4Ik7cdeQ.js.br +0 -0
  253. package/dist/web/assets/server-CRdhk2Wy.js.br +0 -0
  254. package/dist/web/assets/shell-CX-rkNHf.js.br +0 -0
  255. package/dist/web/assets/solidity-Tw7wswEv.js.br +0 -0
  256. package/dist/web/assets/sophia-C5WLch3f.js.br +0 -0
  257. package/dist/web/assets/sparql-DHaeiCBh.js.br +0 -0
  258. package/dist/web/assets/sql-CCSDG5nI.js.br +0 -0
  259. package/dist/web/assets/st-pnP8ivHi.js.br +0 -0
  260. package/dist/web/assets/swift-DwJ7jVG9.js.br +0 -0
  261. package/dist/web/assets/systemverilog-B9Xyijhd.js.br +0 -0
  262. package/dist/web/assets/tcl-DnHyzjbg.js.br +0 -0
  263. package/dist/web/assets/terminal-CfCQe79-.js +0 -6
  264. package/dist/web/assets/terminal-bNIVjrPM.js.br +0 -0
  265. package/dist/web/assets/test-url-CZXnW7jp.js.br +0 -0
  266. package/dist/web/assets/theme-switch-Bz2l2CwF.js.br +0 -0
  267. package/dist/web/assets/ts.worker-Bd4z-OY3.js.br +0 -0
  268. package/dist/web/assets/tsMode-DKGjerkd.js.br +0 -0
  269. package/dist/web/assets/twig-CPajHgWi.js.br +0 -0
  270. package/dist/web/assets/typescript-CsEXAEHs.js.br +0 -0
  271. package/dist/web/assets/typespec-D-MeaMDU.js.br +0 -0
  272. package/dist/web/assets/use-dialog-BrR6Szrb.js +0 -1
  273. package/dist/web/assets/useEvent-DaW3_jZI.js +0 -1
  274. package/dist/web/assets/useFocusable-CtLTcLFV.js.br +0 -0
  275. package/dist/web/assets/useFormReset-CBBc4OFV.js +0 -1
  276. package/dist/web/assets/useHover-NCfDbwX0.js.br +0 -0
  277. package/dist/web/assets/useKeyboard-BZ4YtCxw.js +0 -1
  278. package/dist/web/assets/useLabel-DBycc4Nu.js +0 -1
  279. package/dist/web/assets/useNumberFormatter-DhAgwXM6.js.br +0 -0
  280. package/dist/web/assets/useRequest-BWEdMIz7.js.br +0 -0
  281. package/dist/web/assets/useToggle-Wuq-KqyX.js.br +0 -0
  282. package/dist/web/assets/users-_IqQqJDb.js +0 -11
  283. package/dist/web/assets/vb-DgyLZaXg.js.br +0 -0
  284. package/dist/web/assets/video_insert-Bj2IxuYI.js.br +0 -0
  285. package/dist/web/assets/webui-B6dfxJX4.js.br +0 -0
  286. package/dist/web/assets/wgsl-BIv9DU6q.js.br +0 -0
  287. package/dist/web/assets/xml-BHQFK9Jh.js.br +0 -0
  288. package/dist/web/assets/yaml-2He2eI3V.js.br +0 -0
  289. package/dist/web/karin.png +0 -0
  290. package/dist/web/monaco-editor/min/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  291. /package/dist/module/{art-template.js → art-template.mjs} +0 -0
  292. /package/dist/module/{axios.js → axios.mjs} +0 -0
  293. /package/dist/module/{chalk.js → chalk.mjs} +0 -0
  294. /package/dist/module/{chokidar.js → chokidar.mjs} +0 -0
  295. /package/dist/module/{moment.js → moment.mjs} +0 -0
  296. /package/dist/module/{node-schedule.js → node-schedule.mjs} +0 -0
  297. /package/dist/module/{redis.js → redis.mjs} +0 -0
  298. /package/dist/module/{sqlite3.js → sqlite3.mjs} +0 -0
  299. /package/dist/module/{yaml.js → yaml.mjs} +0 -0
  300. /package/dist/web/assets/{addon-web-links-CFbL2ovg.css.br → css/vendor-editor-CFbL2ovg.css.br} +0 -0
  301. /package/dist/web/assets/{index-ZgkIHsf0.css → css/vendor-others-ZgkIHsf0.css} +0 -0
  302. /package/dist/web/assets/{favicon-BoqZd694.ico → ico/favicon-BoqZd694.ico} +0 -0
@@ -1,488 +1,2 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';
3
-
4
- var fs2 = require('fs');
5
- var url = require('url');
6
- var path2 = require('path');
7
- var child_process = require('child_process');
8
- var dotenv = require('dotenv');
9
- var commander = require('commander');
10
-
11
- var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
12
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
-
14
- var fs2__default = /*#__PURE__*/_interopDefault(fs2);
15
- var path2__default = /*#__PURE__*/_interopDefault(path2);
16
- var dotenv__default = /*#__PURE__*/_interopDefault(dotenv);
17
-
18
- var execSync = (cmd, options = {}) => {
19
- try {
20
- const result = child_process.execSync(cmd, options);
21
- return { status: true, error: null, stdout: result.toString(), stderr: "" };
22
- } catch (error) {
23
- return { status: false, error, stdout: "", stderr: "" };
24
- }
25
- };
26
- var exec = (cmd, options = {}) => {
27
- return new Promise((resolve) => {
28
- child_process.exec(cmd, options, (error, stdout, stderr) => {
29
- const status = !error;
30
- resolve({ status, error, stdout, stderr });
31
- });
32
- });
33
- };
34
- var pm2Dir = path2__default.default.join(process.cwd(), "./@karinjs/config/pm2.json");
35
- var start = () => {
36
- if (!fs2__default.default.existsSync(pm2Dir)) {
37
- console.log(`[pm2] \u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728 \u8BF7\u68C0\u67E5 ${pm2Dir} \u662F\u5426\u5B58\u5728`);
38
- console.log("[pm2] \u5982\u679C\u662F\u65B0\u9879\u76EE\uFF0C\u8BF7\u5148\u524D\u53F0\u542F\u52A8\u751F\u6210\u914D\u7F6E\u6587\u4EF6: pnpm app");
39
- process.exit(1);
40
- }
41
- console.log("[pm2] \u542F\u52A8\u4E2D...");
42
- const data = JSON.parse(fs2__default.default.readFileSync(pm2Dir, "utf-8"));
43
- const script = "./node_modules/node-karin/dist/cli/pm2.js";
44
- if (data.apps[0].script !== script) {
45
- data.apps[0].script = script;
46
- fs2__default.default.writeFileSync(pm2Dir, JSON.stringify(data, null, 2));
47
- }
48
- const { error } = execSync(`pm2 start ${pm2Dir}`, { cwd: process.cwd() });
49
- if (error) {
50
- console.log("[pm2] \u542F\u52A8\u5931\u8D25");
51
- console.log(error);
52
- process.exit(1);
53
- }
54
- console.log("[pm2] \u542F\u52A8\u6210\u529F");
55
- console.log("[pm2] \u91CD\u542F\u670D\u52A1: pnpm rs");
56
- console.log("[pm2] \u67E5\u770B\u65E5\u5FD7: pnpm log");
57
- console.log("[pm2] \u505C\u6B62\u670D\u52A1: pnpm stop");
58
- console.log("[pm2] \u67E5\u770B\u76D1\u63A7: pm2 monit");
59
- console.log("[pm2] \u67E5\u770B\u5217\u8868: pm2 list");
60
- process.exit(0);
61
- };
62
- var log = () => {
63
- if (!fs2__default.default.existsSync(pm2Dir)) {
64
- console.log(`[pm2] \u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728 \u8BF7\u68C0\u67E5 ${pm2Dir} \u662F\u5426\u5B58\u5728`);
65
- console.log("[pm2] \u5982\u679C\u662F\u65B0\u9879\u76EE\uFF0C\u8BF7\u5148\u524D\u53F0\u542F\u52A8\u751F\u6210\u914D\u7F6E\u6587\u4EF6: pnpm app");
66
- process.exit(1);
67
- }
68
- const data = JSON.parse(fs2__default.default.readFileSync(pm2Dir, "utf-8"));
69
- try {
70
- const prefix = process.platform === "win32" ? "pm2.cmd" : "pm2";
71
- child_process.spawn(prefix, ["logs", data.apps[0].name, "--lines", data.lines || 1e3], { stdio: "inherit", shell: true });
72
- } catch (error) {
73
- console.error("[pm2] \u53D1\u751F\u672A\u77E5\u9519\u8BEF: \u8BF7\u68C0\u67E5pm2\u662F\u5426\u5B89\u88C5 \u3010npm install -g pm2\u3011");
74
- console.error(error);
75
- process.exit(1);
76
- }
77
- };
78
- var stop = () => {
79
- if (!fs2__default.default.existsSync(pm2Dir)) {
80
- console.log(`[pm2] \u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728 \u8BF7\u68C0\u67E5 ${pm2Dir} \u662F\u5426\u5B58\u5728`);
81
- console.log("[pm2] \u5982\u679C\u662F\u65B0\u9879\u76EE\uFF0C\u8BF7\u5148\u524D\u53F0\u542F\u52A8\u751F\u6210\u914D\u7F6E\u6587\u4EF6: pnpm app");
82
- process.exit(1);
83
- }
84
- const data = JSON.parse(fs2__default.default.readFileSync(pm2Dir, "utf-8"));
85
- execSync(`pm2 stop ${data.apps[0].name}`, { cwd: process.cwd() });
86
- console.log("[pm2] \u505C\u6B62\u6210\u529F");
87
- process.exit(0);
88
- };
89
- var restart = () => {
90
- console.log("[pm2] \u91CD\u542F\u4E2D...");
91
- if (!fs2__default.default.existsSync(pm2Dir)) {
92
- console.log(`[pm2] \u914D\u7F6E\u6587\u4EF6\u4E0D\u5B58\u5728 \u8BF7\u68C0\u67E5 ${pm2Dir} \u662F\u5426\u5B58\u5728`);
93
- console.log("[pm2] \u5982\u679C\u662F\u65B0\u9879\u76EE\uFF0C\u8BF7\u5148\u524D\u53F0\u542F\u52A8\u751F\u6210\u914D\u7F6E\u6587\u4EF6: pnpm app");
94
- process.exit(1);
95
- }
96
- execSync(`pm2 restart ${pm2Dir}`, { cwd: process.cwd() });
97
- console.log("[pm2] \u91CD\u542F\u6210\u529F");
98
- process.exit(0);
99
- };
100
- var pm2 = {
101
- start,
102
- log,
103
- stop,
104
- restart
105
- };
106
- var isDev = false;
107
- var dir = process.env.INIT_CWD || process.cwd();
108
- var pkgDir = url.fileURLToPath(new url.URL("../..", (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))));
109
- var isPluginDev = () => {
110
- const pkg = fs2__default.default.readFileSync(path2__default.default.join(dir, "package.json"), "utf-8");
111
- const data = JSON.parse(pkg);
112
- if (data == null ? void 0 : data.karin) return true;
113
- if (fs2__default.default.existsSync(path2__default.default.join(dir, "src"))) return true;
114
- if (fs2__default.default.existsSync(path2__default.default.join(dir, "tsconfig.json"))) return true;
115
- if (fs2__default.default.existsSync(path2__default.default.join(dir, ".prettierrc"))) return true;
116
- if (fs2__default.default.existsSync(path2__default.default.join(dir, "eslint.config.mjs"))) return true;
117
- return false;
118
- };
119
- var createDir = () => {
120
- const list = [
121
- path2__default.default.join(dir, "@karinjs", "logs"),
122
- path2__default.default.join(dir, "@karinjs", "config"),
123
- path2__default.default.join(dir, "@karinjs", "data"),
124
- path2__default.default.join(dir, "@karinjs", "resource"),
125
- path2__default.default.join(dir, "@karinjs", "temp", "console"),
126
- path2__default.default.join(dir, "@karinjs", "temp", "html")
127
- ];
128
- !isDev && list.push(path2__default.default.join(dir, "plugins", "karin-plugin-example"));
129
- list.forEach((item) => {
130
- if (!fs2__default.default.existsSync(item)) fs2__default.default.mkdirSync(item, { recursive: true });
131
- });
132
- };
133
- var createPnpmFile = (dir2) => {
134
- const pnpmfile = path2__default.default.join(dir2, ".pnpmfile.cjs");
135
- if (fs2__default.default.existsSync(pnpmfile)) return;
136
- const content = [
137
- "// \u6E05\u7A7A\u5BF9\u7B49\u4F9D\u8D56\u4E2D\u7684node-karin",
138
- "function readPackage (pkg, context) {",
139
- " if (pkg?.['peerDependencies']?.['node-karin'] && pkg['peerDependencies']['node-karin'] !== 'file:./lib') {",
140
- " delete pkg['peerDependencies']['node-karin']",
141
- " }",
142
- " return pkg",
143
- "}",
144
- "module.exports = {",
145
- " hooks: {",
146
- " readPackage",
147
- " },",
148
- "}"
149
- ].join("\n");
150
- fs2__default.default.writeFileSync(pnpmfile, content);
151
- };
152
- var shouldSkipNpmrc = () => {
153
- const { stdout } = execSync("npm config get registry");
154
- if (stdout.includes("registry.npmjs.org")) return true;
155
- const { stdout: proxy } = execSync("npm config get proxy");
156
- return !!proxy;
157
- };
158
- var createOrUpdateNpmrc = (dir2) => {
159
- const list = [
160
- "node_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/sqlite3",
161
- "better_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/better-sqlite3",
162
- "sass_binary_site=https://registry.npmmirror.com/-/binary/node-sass",
163
- "sharp_binary_host=https://registry.npmmirror.com/-/binary/sharp",
164
- "sharp_libvips_binary_host=https://registry.npmmirror.com/-/binary/sharp-libvips",
165
- "canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas",
166
- "# 19\u4EE5\u4E0B\u7248\u672C",
167
- "puppeteer_download_host=https://registry.npmmirror.com/mirrors",
168
- "# 20\u4EE5\u4E0A\u7248\u672C",
169
- "PUPPETEER_DOWNLOAD_BASE_URL = https://registry.npmmirror.com/binaries/chrome-for-testing"
170
- ];
171
- const npmrc = path2__default.default.join(dir2, ".npmrc");
172
- if (!fs2__default.default.existsSync(npmrc)) {
173
- fs2__default.default.writeFileSync(npmrc, list.join("\n"));
174
- return;
175
- }
176
- const data = fs2__default.default.readFileSync(npmrc, "utf-8");
177
- const newEntries = list.filter((item) => {
178
- const key = item.split("=")[0];
179
- return !data.includes(key);
180
- });
181
- if (newEntries.length > 0) {
182
- fs2__default.default.appendFileSync(npmrc, "\n" + newEntries.join("\n"));
183
- }
184
- };
185
- var createOrUpdateEnv = (dir2) => {
186
- const generateRandomKey = () => {
187
- const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
188
- return Array.from(
189
- { length: 6 },
190
- () => chars.charAt(Math.floor(Math.random() * chars.length))
191
- ).join("");
192
- };
193
- const envData = [
194
- "# \u662F\u5426\u542F\u7528HTTP",
195
- "HTTP_ENABLE=true",
196
- "# HTTP\u76D1\u542C\u7AEF\u53E3",
197
- "HTTP_PORT=7777",
198
- "# HTTP\u76D1\u542C\u5730\u5740",
199
- "HTTP_HOST=0.0.0.0",
200
- "# HTTP\u9274\u6743\u79D8\u94A5 \u4EC5\u7528\u4E8Ekarin\u81EA\u8EABApi",
201
- `HTTP_AUTH_KEY=${generateRandomKey()}`,
202
- "# ws_server\u9274\u6743\u79D8\u94A5",
203
- `WS_SERVER_AUTH_KEY=${generateRandomKey()}`,
204
- "\n",
205
- "# \u662F\u5426\u542F\u7528Redis \u5173\u95ED\u540E\u5C06\u4F7F\u7528\u5185\u90E8\u865A\u62DFRedis",
206
- "REDIS_ENABLE=true",
207
- "# \u91CD\u542F\u662F\u5426\u8C03\u7528pm2 \u5982\u679C\u4E0D\u8C03\u7528\u5219\u4F1A\u76F4\u63A5\u5173\u673A \u6B64\u914D\u7F6E\u9002\u5408\u6709\u8FDB\u7A0B\u5B88\u62A4\u7684\u7A0B\u5E8F",
208
- "PM2_RESTART=true",
209
- "\n",
210
- "# \u65E5\u5FD7\u7B49\u7EA7",
211
- "LOG_LEVEL=info",
212
- "# \u65E5\u5FD7\u4FDD\u7559\u5929\u6570",
213
- "LOG_DAYS_TO_KEEP=7",
214
- "# \u65E5\u5FD7\u6587\u4EF6\u6700\u5927\u5927\u5C0F \u5982\u679C\u6B64\u9879\u5927\u4E8E0\u5219\u542F\u7528\u65E5\u5FD7\u5206\u5272",
215
- "LOG_MAX_LOG_SIZE=0",
216
- "# logger.fnc\u989C\u8272",
217
- 'LOG_FNC_COLOR="#E1D919"',
218
- "# \u65E5\u5FD7\u5B9E\u65F6Api\u6700\u591A\u652F\u6301\u540C\u65F6\u8FDE\u63A5\u6570",
219
- "LOG_API_MAX_CONNECTIONS=5",
220
- "\n",
221
- "# ffmpeg",
222
- "FFMPEG_PATH=",
223
- "# ffprobe",
224
- "FFPROBE_PATH=",
225
- "# ffplay",
226
- "FFPLAY_PATH=",
227
- "\n",
228
- "# \u8FD9\u91CC\u8BF7\u52FF\u4FEE\u6539",
229
- "RUNTIME=node"
230
- ];
231
- const env = path2__default.default.join(dir2, ".env");
232
- if (!fs2__default.default.existsSync(env)) {
233
- fs2__default.default.writeFileSync(env, envData.join("\n"));
234
- return;
235
- }
236
- const value = fs2__default.default.readFileSync(env, "utf-8");
237
- const newEntries = envData.filter((item) => {
238
- if (item.includes("#")) return false;
239
- const key = item.split("=")[0];
240
- return !value.includes(key);
241
- });
242
- if (newEntries.length > 0) {
243
- fs2__default.default.appendFileSync(env, "\n" + newEntries.join("\n"));
244
- }
245
- };
246
- var createWorkspace = (dir2) => {
247
- const workspace = path2__default.default.join(dir2, "pnpm-workspace.yaml");
248
- if (fs2__default.default.existsSync(workspace)) return;
249
- const content = "packages:\n - 'plugins/**'\n";
250
- fs2__default.default.writeFileSync(workspace, content);
251
- };
252
- var createOtherFile = async () => {
253
- !isDev && createPnpmFile(dir);
254
- !isDev && createWorkspace(dir);
255
- if (!shouldSkipNpmrc()) {
256
- createOrUpdateNpmrc(dir);
257
- }
258
- createOrUpdateEnv(dir);
259
- };
260
- var createConfig = () => {
261
- const defCfg = path2__default.default.join(pkgDir, "default", "config");
262
- const files = fs2__default.default.readdirSync(defCfg);
263
- files.forEach((file) => {
264
- if (!file.endsWith(".json")) return;
265
- const filePath = path2__default.default.join(defCfg, file);
266
- const targetPath = path2__default.default.join(dir, "@karinjs", "config");
267
- const targetFile = path2__default.default.join(targetPath, file);
268
- if (!fs2__default.default.existsSync(targetFile)) {
269
- fs2__default.default.copyFileSync(filePath, targetFile);
270
- return;
271
- }
272
- const defData = fs2__default.default.readFileSync(filePath, "utf-8");
273
- const targetData = fs2__default.default.readFileSync(targetFile, "utf-8");
274
- const mergedData = { ...JSON.parse(defData), ...JSON.parse(targetData) };
275
- fs2__default.default.writeFileSync(targetFile, JSON.stringify(mergedData, null, 2));
276
- });
277
- };
278
- var modifyPackageJson = async () => {
279
- const pkg = fs2__default.default.readFileSync(path2__default.default.join(dir, "package.json"), "utf-8");
280
- const data = JSON.parse(pkg);
281
- data.type = "module";
282
- if (!data.scripts) data.scripts = {};
283
- data.scripts.karin = "karin";
284
- const { stdout: pnpmVersion } = execSync("pnpm -v");
285
- const majorVersion = parseInt(pnpmVersion.split(".")[0]);
286
- if (majorVersion < 10 && data.pnpm) {
287
- delete data.pnpm;
288
- } else if (majorVersion >= 10) {
289
- if (typeof data.pnpm !== "object") data.pnpm = {};
290
- data.pnpm.onlyBuiltDependenciesFile = [
291
- "sqlite3",
292
- "classic-level"
293
- ];
294
- }
295
- const list = ["app", "start", "pm2", "stop", "rs", "log"];
296
- if (!isDev) {
297
- list.forEach((v) => {
298
- data.scripts[v] = `karin ${v}`;
299
- });
300
- }
301
- fs2__default.default.writeFileSync(path2__default.default.join(dir, "package.json"), JSON.stringify(data, null, 2));
302
- return data;
303
- };
304
- var init = async () => {
305
- isDev = isPluginDev();
306
- createDir();
307
- await createOtherFile();
308
- createConfig();
309
- await modifyPackageJson();
310
- process.exit(0);
311
- };
312
- var parseEnvFiles = (env) => {
313
- if (!env) return [".env"];
314
- return env.split(",").map((file) => file.trim());
315
- };
316
- var loadEnv = (env) => {
317
- const dir2 = process.cwd();
318
- const files = parseEnvFiles(env);
319
- if (!files.includes(".env")) {
320
- files.unshift(".env");
321
- }
322
- files.forEach((file) => {
323
- if (!fs2__default.default.existsSync(`${dir2}/${file}`)) {
324
- if (file === ".env") {
325
- console.error(`\u672A\u627E\u5230${file}\u6587\u4EF6\uFF0C\u8BF7\u4F7F\u7528 npx karin init \u8FDB\u884C\u521D\u59CB\u5316\u9879\u76EE`);
326
- } else {
327
- console.error(`\u672A\u627E\u5230${file}\u6587\u4EF6\uFF0C\u8BF7\u5C06\u5176\u653E\u7F6E\u5728\u9879\u76EE\u6839\u76EE\u5F55`);
328
- }
329
- process.exit(1);
330
- }
331
- });
332
- const paths = files.map((file) => `${dir2}/${file}`);
333
- dotenv__default.default.config({ path: paths, override: true });
334
- };
335
- var start2 = async (env) => {
336
- loadEnv(env);
337
- const index = "../root.js";
338
- const { karinMain } = await import(index);
339
- const child = child_process.fork(karinMain);
340
- child.on("message", (message) => {
341
- if (message === "restart") {
342
- child.kill();
343
- child.removeAllListeners();
344
- start2(env);
345
- }
346
- });
347
- child.on("exit", (code) => process.exit(code));
348
- };
349
- var checkGitInstalled = async () => {
350
- try {
351
- const { status } = await exec("git --version");
352
- return status;
353
- } catch {
354
- return false;
355
- }
356
- };
357
- var updateDependencies = async (packagePath) => {
358
- try {
359
- const packageJson = JSON.parse(fs2__default.default.readFileSync(packagePath, "utf-8"));
360
- const dependencies = packageJson.dependencies || {};
361
- const packagesToUpdate = [];
362
- const checkVersionTasks = Object.entries(dependencies).map(async ([pkg, version]) => {
363
- if (pkg.startsWith("@types/")) {
364
- return;
365
- }
366
- try {
367
- const { stdout: pkgInfoStr } = await exec(`pnpm view ${pkg} --json`);
368
- const pkgInfo = JSON.parse(pkgInfoStr.trim());
369
- if (!pkgInfo.karin && pkg !== "node-karin") return;
370
- const currentVersion = version.replace(/[\^~]/g, "");
371
- const { stdout: distTagsStr } = await exec(`pnpm view ${pkg} dist-tags --json`);
372
- const distTags = JSON.parse(distTagsStr.trim());
373
- const isPreRelease = /[-+]/.test(currentVersion);
374
- const latestVersion = distTags.latest;
375
- console.log(`[npm] ${pkg}:`);
376
- console.log(` \u5F53\u524D\u7248\u672C: ${currentVersion}${isPreRelease ? " (\u9884\u53D1\u5E03\u7248\u672C)" : ""}`);
377
- console.log(` \u6700\u65B0\u7248\u672C: ${latestVersion}`);
378
- if (isPreRelease || currentVersion !== latestVersion) {
379
- console.log(`[npm] \u53D1\u73B0\u65B0\u7248\u672C ${pkg}: ${currentVersion} -> ${latestVersion}`);
380
- packagesToUpdate.push(`${pkg}@latest`);
381
- } else {
382
- console.log(`[npm] ${pkg} \u5DF2\u7ECF\u662F\u6700\u65B0\u7248\u672C`);
383
- }
384
- } catch (error) {
385
- console.error(`[npm] \u68C0\u67E5 ${pkg} \u7248\u672C\u5931\u8D25:`, error);
386
- }
387
- });
388
- await Promise.all(checkVersionTasks);
389
- if (packagesToUpdate.length > 0) {
390
- console.log("[npm] \u5F00\u59CB\u66F4\u65B0\u4EE5\u4E0B\u5305:\n", packagesToUpdate.join("\n"));
391
- try {
392
- const { status, error } = await exec(`pnpm update ${packagesToUpdate.join(" ")}`);
393
- if (status) {
394
- console.log("[npm] \u6240\u6709\u63D2\u4EF6\u66F4\u65B0\u5B8C\u6210");
395
- } else {
396
- console.error("[npm] \u6279\u91CF\u66F4\u65B0\u5931\u8D25:", error);
397
- }
398
- } catch (error) {
399
- console.error("[npm] \u6279\u91CF\u66F4\u65B0\u5931\u8D25:", error);
400
- }
401
- } else {
402
- console.log("[npm] \u6240\u6709\u63D2\u4EF6\u90FD\u5DF2\u7ECF\u662F\u6700\u65B0\u7248\u672C");
403
- }
404
- } catch (error) {
405
- console.error("[npm] \u66F4\u65B0\u4F9D\u8D56\u5931\u8D25:", error);
406
- }
407
- };
408
- var updatePlugins = async (pluginsPath) => {
409
- if (!await checkGitInstalled()) {
410
- console.error("[git] \u8BF7\u5148\u5B89\u88C5git");
411
- return;
412
- }
413
- if (!fs2__default.default.existsSync(pluginsPath)) {
414
- console.error("[git] plugins\u76EE\u5F55\u4E0D\u5B58\u5728");
415
- return;
416
- }
417
- const isDirectory = (await fs2__default.default.promises.stat(pluginsPath)).isDirectory();
418
- if (!isDirectory) {
419
- console.error("[git] plugins\u8DEF\u5F84\u4E0D\u662F\u4E00\u4E2A\u76EE\u5F55");
420
- return;
421
- }
422
- const dirs = await fs2__default.default.promises.readdir(pluginsPath);
423
- const updateTasks = dirs.map(async (dir2) => {
424
- const pluginPath = path2.join(pluginsPath, dir2);
425
- const gitPath = path2.join(pluginPath, ".git");
426
- const packageJsonPath = path2.join(pluginPath, "package.json");
427
- if (!dir2.startsWith("karin-plugin-") || !(await fs2__default.default.promises.stat(pluginPath)).isDirectory()) {
428
- return;
429
- }
430
- if (!fs2__default.default.existsSync(gitPath)) {
431
- console.log(`[git] ${dir2} \u4E0D\u662Fgit\u4ED3\u5E93\uFF0C\u8DF3\u8FC7`);
432
- return;
433
- }
434
- try {
435
- const packageJson = JSON.parse(fs2__default.default.readFileSync(packageJsonPath, "utf-8"));
436
- if (!packageJson.karin) {
437
- console.log(`[git] ${dir2} \u7684package.json\u4E2D\u6CA1\u6709karin\u5B57\u6BB5\uFF0C\u8DF3\u8FC7`);
438
- return;
439
- }
440
- console.log(`[git] \u6B63\u5728\u66F4\u65B0 ${dir2}...`);
441
- const { status, error } = await exec("git pull", { cwd: pluginPath });
442
- if (!status) {
443
- console.error(`[git] \u66F4\u65B0 ${dir2} \u5931\u8D25:`, error);
444
- }
445
- } catch (error) {
446
- console.error(`[git] \u66F4\u65B0 ${dir2} \u5931\u8D25:`, error);
447
- }
448
- });
449
- await Promise.all(updateTasks);
450
- };
451
- var updateAll = async () => {
452
- try {
453
- console.log("[all] \u5F00\u59CB\u6267\u884C\u66F4\u65B0\u4EFB\u52A1\n");
454
- await Promise.all([updateDependencies("./package.json"), updatePlugins("./plugins")]);
455
- console.log("\n[all] \u66F4\u65B0\u4EFB\u52A1\u6267\u884C\u5B8C\u6210");
456
- } finally {
457
- process.exit(0);
458
- }
459
- };
460
- var _a;
461
- if (!((_a = process.argv) == null ? void 0 : _a[2])) process.argv.push("-h");
462
- var addEnvOption = (command) => {
463
- return command.option("-e, --env <files>", "\u6307\u5B9A\u73AF\u5883\u53D8\u91CF\u6587\u4EF6\uFF0C\u591A\u4E2A\u6587\u4EF6\u7528\u9017\u53F7\u5206\u9694");
464
- };
465
- var getVersion = () => {
466
- try {
467
- const file = url.fileURLToPath(new URL("../../package.json", (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))));
468
- const packageJson = JSON.parse(fs2__default.default.readFileSync(file, "utf-8"));
469
- return packageJson.version;
470
- } catch {
471
- return "unknown";
472
- }
473
- };
474
- commander.program.version(getVersion(), "-v, --version", "\u663E\u793A\u7248\u672C\u53F7");
475
- commander.program.command("pm2").description("\u540E\u53F0\u8FD0\u884C").action(pm2.start);
476
- commander.program.command("stop").description("\u505C\u6B62\u540E\u53F0\u8FD0\u884C").action(pm2.stop);
477
- commander.program.command("rs").description("\u91CD\u542Fpm2\u670D\u52A1").action(pm2.restart);
478
- commander.program.command("log").description("\u67E5\u770B\u65E5\u5FD7").action(pm2.log);
479
- commander.program.command("up").description("\u66F4\u65B0\u63D2\u4EF6").action(updateAll);
480
- commander.program.command("init").description("\u521D\u59CB\u5316\u9879\u76EE").action(init);
481
- addEnvOption(commander.program.command(".").description("\u524D\u53F0\u542F\u52A8")).action(
482
- (options) => start2(options.env)
483
- );
484
- addEnvOption(commander.program.command("app").description("\u524D\u53F0\u542F\u52A8")).action(
485
- (options) => start2(options.env)
486
- );
487
- addEnvOption(commander.program.command("start").description("\u524D\u53F0\u542F\u52A8"));
488
- commander.program.parse(process.argv);
2
+ "use strict";const t=require("node:fs"),e=require("node:url"),i=require("node:path"),n=require("node:child_process"),s=require("node:stream/promises"),r=require("node:events"),o=require("node:process");var a="undefined"!=typeof document?document.currentScript:null;const c=(t,e={})=>{try{return{status:!0,error:null,stdout:n.execSync(t,e).toString(),stderr:""}}catch(i){return{status:!1,error:i,stdout:"",stderr:""}}},l=(t,e={})=>new Promise((i=>{n.exec(t,e,((t,e,n)=>{i({status:!t,error:t,stdout:e,stderr:n})}))})),p=i.join(process.cwd(),"@karinjs/config/pm2.json"),h=()=>t.existsSync(p)?JSON.parse(t.readFileSync(p,"utf-8")):(console.log(`[pm2] 配置文件不存在 请检查 ${p} 是否存在`),null),u=async(e,n,r,o)=>{if(!t.existsSync(e))return!1;const a=t.statSync(e),c=1024*o*1024;if(a.size<c)return!1;const l=i.basename(e),p=`${l}.${Date.now()}`,h=i.join(n,p),u=i.join(n,`${l}.temp`);try{const i=t.createReadStream(e),n=t.createWriteStream(h);await s.pipeline(i,n);const o=t.statSync(e).mode;return t.writeFileSync(u,""),t.chmodSync(u,o),t.renameSync(u,e),console.log(`[pm2] 日志已按大小切割: ${r} => ${p} (${(a.size/1024/1024).toFixed(2)}MB)`),!0}catch(m){return console.error(`[pm2] 切割日志失败: ${r}`,m),t.existsSync(u)&&t.unlinkSync(u),!1}},m=async()=>{const e=h();var n;if(e)try{const s=Number(e.maxLogFiles)??10,r=Number(e.maxErrorLogSize)??50,o=Number(e.maxOutLogSize)??50;if(0===s)return;const a=i.resolve(process.cwd(),e.apps[0].error_file),c=i.resolve(process.cwd(),e.apps[0].out_file),l=i.dirname(a);if(n=l,!t.existsSync(n)&&(t.mkdirSync(n,{recursive:!0}),console.log(`[pm2] 创建日志目录: ${n}`),1))return;const p=i.basename(a),h=i.basename(c);await u(c,l,"输出",o),await u(a,l,"错误",r),((e,n,s,r)=>{if(r<=0)return;const o=t.readdirSync(s),a=(e,n)=>{const a=new RegExp(`^${e.replace(/\./g,"\\.")}\\.(\\d+)$`),c=o.filter((t=>a.test(t))).map((t=>{const e=t.match(a);return{file:t,timestamp:e?parseInt(e[1],10):0}})).sort(((t,e)=>e.timestamp-t.timestamp));c.length>r&&c.slice(r).forEach((e=>{const r=i.join(s,e.file);t.unlinkSync(r),console.log(`[pm2] 删除过期${n}日志: ${e.file}`)}))};a(e,"错误"),a(n,"输出")})(p,h,l,s)}catch(s){console.error("[pm2] 日志切割过程中发生错误:",s)}},d=async()=>{m(),console.log("[pm2] 启动中...");const e=h();e||process.exit(1),(e=>{const i="index.mjs";e.apps[0].script!==i&&(e.apps[0].script=i,t.writeFileSync(p,JSON.stringify(e,null,2)))})(e),t.existsSync("index.mjs")||(console.log("正在升级到1.8.0版本..."),c("npx ki init",{cwd:process.cwd()}),console.log("升级成功 正在启动pm2服务..."));const{error:i}=c(`pm2 start ${p}`,{cwd:process.cwd()});i&&(console.log("[pm2] 启动失败"),console.log(i),process.exit(1)),console.log("[pm2] 启动成功"),console.log("[pm2] 重启服务: pnpm rs"),console.log("[pm2] 查看日志: pnpm log"),console.log("[pm2] 停止服务: pnpm stop"),console.log("[pm2] 查看监控: pm2 monit"),console.log("[pm2] 查看列表: pm2 list"),process.exit(0)},g=async()=>{m();const t=h();t||(console.log("[pm2] 如果是新项目,请先前台启动生成配置文件: pnpm app"),process.exit(1));try{const e="win32"===process.platform?"pm2.cmd":"pm2";n.spawn(e,["logs",t.apps[0].name,"--lines",t.lines||1e3],{stdio:"inherit",shell:!0})}catch(e){console.error("[pm2] 发生未知错误: 请检查pm2是否安装 【npm install -g pm2】"),console.error(e),process.exit(1)}},f=async()=>{m();const t=h();t||(console.log("[pm2] 如果是新项目,请先前台启动生成配置文件: pnpm app"),process.exit(1)),c(`pm2 stop ${t.apps[0].name}`,{cwd:process.cwd()}),console.log("[pm2] 停止成功"),process.exit(0)},_=async e=>{m(),console.log("[pm2] 重启中..."),t.existsSync(p)||e||(console.log(`[pm2] 配置文件不存在 请检查 ${p} 是否存在`),console.log("[pm2] 如果是新项目,请先前台启动生成配置文件: pnpm app"),process.exit(1));const i=e?"karin":h()?.apps[0].name;i||process.exit(1),c(`pm2 delete ${i}`,{cwd:process.cwd()}),c(`pm2 start ${p}`,{cwd:process.cwd()}),console.log("[pm2] 重启成功"),process.exit(0)},y=e=>{var n;n=i.join(e,"@karinjs"),t.existsSync(n)&&t.rmSync(n,{recursive:!0,force:!0});const s=i.join(e,".pnpmfile.cjs");t.existsSync(s)&&t.unlinkSync(s);const r=i.join(e,"index.mjs");t.existsSync(r)&&t.unlinkSync(r);const o=i.join(e,".env");t.existsSync(o)&&t.unlinkSync(o)},O=async n=>{const s=process.env.INIT_CWD||process.cwd(),r=(e=>"development"===process.env.NODE_ENV||["src","tsconfig.json","eslint.config.mjs","eslint.config.js",".prettierrc","vite.config.ts","tsup.config.ts"].some((n=>t.existsSync(i.join(e,n)))))(s);n&&y(s),((e,n)=>{if(["logs","config","data","resource","temp/console","temp/html"].forEach((e=>{const s=i.join(n,"@karinjs",e);t.existsSync(s)||t.mkdirSync(s,{recursive:!0})})),e)return;const s=i.join(n,"plugins","karin-plugin-example");t.existsSync(s)||t.mkdirSync(s,{recursive:!0})})(r,s),((e,n)=>{if(e)return;const s=i.join(n,"pnpm-workspace.yaml");if(t.existsSync(s))return;t.writeFileSync(s,"packages:\n - 'plugins/*'\n")})(r,s),(n=>{const s=e.fileURLToPath(new e.URL("../..","undefined"==typeof document?require("url").pathToFileURL(__filename).href:a&&"SCRIPT"===a.tagName.toUpperCase()&&a.src||new URL("index.cjs",document.baseURI).href)),r=i.join(s,"default","config");t.readdirSync(r).forEach((e=>{if(!e.endsWith(".json"))return;const s=i.join(r,e),o=i.join(n,"@karinjs","config"),a=i.join(o,e);if(!t.existsSync(a))return void t.copyFileSync(s,a);const c=t.readFileSync(s,"utf-8"),l=t.readFileSync(a,"utf-8"),p={...JSON.parse(c),...JSON.parse(l)};e.includes("pm2.json")&&(p.apps[0].script="index.mjs"),t.writeFileSync(a,JSON.stringify(p,null,2))}))})(s),((e,n)=>{const s=i.join(n,"package.json"),r=(()=>{try{return JSON.parse(t.readFileSync(s,"utf-8"))}catch{return{}}})();r.scripts||(r.scripts={}),r.name||(r.name="karin-project"),r.version||(r.version="1.0.0"),r.type="module",e||(r.scripts.ki||(r.scripts.ki="ki"),r.scripts.karin||(r.scripts.karin="ki"),r.scripts.app||(r.scripts.app="node index.mjs"),r.scripts.start||(r.scripts.start="node index.mjs"),r.scripts.pm2||(r.scripts.pm2="pm2 start @karinjs/config/pm2.json"),r.scripts.stop||(r.scripts.stop="ki stop"),r.scripts.rs||(r.scripts.rs="ki rs"),r.scripts.log||(r.scripts.log="ki log"),r.scripts.up||(r.scripts.up="ki up")),e||r?.dependencies?.["node-karin"]||(r.dependencies||(r.dependencies={}),r.dependencies["node-karin"]="latest"),r.pnpm&&delete r.pnpm,t.writeFileSync(s,JSON.stringify(r,null,2))})(r,s),(e=>{const n=["package-lock=false","public-hoist-pattern[]=*sqlite3*","public-hoist-pattern[]=*express*","sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/sqlite3","node_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/sqlite3","better_sqlite3_binary_host_mirror=https://registry.npmmirror.com/-/binary/better-sqlite3","sass_binary_site=https://registry.npmmirror.com/-/binary/node-sass","sharp_binary_host=https://registry.npmmirror.com/-/binary/sharp","sharp_libvips_binary_host=https://registry.npmmirror.com/-/binary/sharp-libvips","canvas_binary_host_mirror=https://registry.npmmirror.com/-/binary/canvas","# 19以下版本","puppeteer_download_host=https://registry.npmmirror.com/mirrors","# 20以上版本","PUPPETEER_DOWNLOAD_BASE_URL = https://registry.npmmirror.com/binaries/chrome-for-testing"],s=i.join(e,".npmrc");if(!t.existsSync(s))return void t.writeFileSync(s,n.join("\n"));const r=t.readFileSync(s,"utf-8"),o=r.split("\n").map((t=>t.trim())),a=n.filter((t=>{if(t.startsWith("public-hoist-pattern[]="))return!o.includes(t);const e=t.split("=")[0];return!r.includes(e)}));a.length>0&&t.appendFileSync(s,"\n"+a.join("\n"))})(s),((e,n)=>{if(e)return;const s=i.join(n,".pnpmfile.cjs");if(t.existsSync(s))return;const r=["// 清空对等依赖中的node-karin","function readPackage (pkg, context) {"," if (pkg?.['peerDependencies']?.['node-karin'] && pkg['peerDependencies']['node-karin'] !== 'file:./lib') {"," delete pkg['peerDependencies']['node-karin']"," }"," return pkg","}","module.exports = {"," hooks: {"," readPackage"," },","}"].join("\n");t.writeFileSync(s,r)})(r,s),((e,n)=>{if(e&&t.existsSync(`${n}/src`))return void t.writeFileSync(i.join(n,"src","app.ts"),"import('node-karin/start')");const s=i.join(n,"index.mjs");t.existsSync(s)||t.writeFileSync(s,"(() => {\n import('node-karin/start')\n})()\n")})(r,s),(e=>{const n=t=>{if("http"===t&&process.env.HTTP_AUTH_KEY)return process.env.HTTP_AUTH_KEY;if("ws"===t&&process.env.WS_SERVER_AUTH_KEY)return process.env.WS_SERVER_AUTH_KEY;const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";return Array.from({length:6},(()=>e.charAt(Math.floor(62*Math.random())))).join("")},s=["# 是否启用HTTP","HTTP_ENABLE=true","# HTTP监听端口","HTTP_PORT=7777","# HTTP监听地址","HTTP_HOST=0.0.0.0","# HTTP鉴权秘钥 仅用于karin自身Api",`HTTP_AUTH_KEY=${n("http")}`,"# ws_server鉴权秘钥",`WS_SERVER_AUTH_KEY=${n("ws")}`,"\n","# 是否启用Redis 关闭后将使用内部虚拟Redis","REDIS_ENABLE=true","# 重启是否调用pm2 如果不调用则会直接关机 此配置适合有进程守护的程序","PM2_RESTART=true","\n","# 日志等级","LOG_LEVEL=info","# 日志保留天数","LOG_DAYS_TO_KEEP=7","# 日志文件最大大小 如果此项大于0则启用日志分割","LOG_MAX_LOG_SIZE=0","# logger.fnc颜色",'LOG_FNC_COLOR="#E1D919"',"# 日志实时Api最多支持同时连接数","LOG_API_MAX_CONNECTIONS=5","\n","# ffmpeg","FFMPEG_PATH=","# ffprobe","FFPROBE_PATH=","# ffplay","FFPLAY_PATH=","RUNTIME=node","NODE_ENV=production","TSX_WATCH=false"],r=i.join(e,".env");if(!t.existsSync(r))return void t.writeFileSync(r,s.join("\n"));const o=t.readFileSync(r,"utf-8"),a=s.filter((t=>{if(t.includes("#"))return!1;const e=t.split("=")[0];return!o.includes(e)}));a.length>0&&t.appendFileSync(r,"\n"+a.join("\n"))})(s),process.env.KARIN_CLI&&(console.log("[cli] 初始化完成 请使用 pnpm app 启动项目"),process.exit(0))},v=async()=>{const t=i.join(process.cwd(),"index.mjs");await import(e.pathToFileURL(t).toString())},w=(t,e)=>new Promise((i=>{const s=setTimeout((()=>{i({status:!1,error:new Error("命令执行超时"),stdout:"",stderr:"命令执行超时"})}),1e3*(e?.timeout||30)),r=n.exec(t,e,((t,e,n)=>{clearTimeout(s),n=n.toString().trim(),e=e.toString().trim();i({status:!t,error:t,stdout:e,stderr:n})}));r.stdin?.write("\n")})),C=(t,e)=>{if(t.error||"string"!=typeof t.stdout)throw t.error||new Error("stdout 类型错误");return t.stdout},A=async(t,e)=>{const i=await w("git rev-parse HEAD",{cwd:t});return C(i)},b=(t,e,i,n,s="")=>({status:t,data:"string"==typeof n?n:`${s}${n.message||n.stack||"未知错误"}`,hash:{before:e,after:i}}),S=async(t,e={})=>{try{const i=await A(t),n=await(async t=>{let e="origin/HEAD";e.startsWith("origin/")||(e=`origin/${e}`);const i=`git rev-parse ${e}`,n=await w(i,{cwd:t});return C(n)})(t);if(i===n)return b(!1,i,n,"当前已经是最新版本");if(e.force){const s=e.remote||"origin/HEAD",r=await w("git fetch origin",{cwd:t,...e});if(r.error)return b(!1,i,n,r.error,"同步远程分支失败: ");const o=await w(`git reset --hard ${s}`,{cwd:t,...e});if(o.error)return b(!1,i,n,o.error,"强制同步远程分支失败: ");const a=await A(t);return b(!0,i,a,"本地分支已强制与远程分支同步")}const s=e.customCmd||"git pull",{error:r}=await w(s,{...e,cwd:t});if(r)return b(!1,i,n,r,"更新失败: ");const o=await A(t);return b(!0,i,o,"更新成功")}catch(i){return b(!1,"","",i.message,"发生错误: ")}},x=async(e,i,n)=>{try{const s=JSON.parse(t.readFileSync(e,"utf-8")).dependencies||{},r=Object.entries(s).map((async([t,e])=>{if(!t.startsWith("@types/"))try{const{stdout:s}=await l(`pnpm view ${t} --json`);if(!JSON.parse(s.trim()).karin&&"node-karin"!==t)return;const r=e.replace(/[\^~]/g,""),{stdout:o}=await l(`pnpm view ${t} dist-tags --json`),a=JSON.parse(o.trim()),c=/[-+]/.test(r),p=a.latest;c||r!==p?(n.push(`${t}@latest`),i.push({name:t,type:"npm",currentVersion:`${r}${c?" (预发布)":""}`,latestVersion:p,status:`${r} -> ${p}`,needUpdate:!0,isPlugin:!0})):i.push({name:t,type:"npm",currentVersion:r,latestVersion:p,status:"已是最新",needUpdate:!1,isPlugin:!0})}catch(s){console.error(`检查 ${t} 版本失败:`,s)}}));await Promise.all(r)}catch(s){console.error("更新依赖失败:",s)}},E=async(e,i,n,s=!0)=>{if(!(await(async()=>{try{const{status:t}=await l("git --version");return t}catch{return!1}})()))return void console.error("请先安装git");if(!t.existsSync(e))return void console.error("plugins目录不存在");if(!(await t.promises.stat(e)).isDirectory())return void console.error("plugins路径不是一个目录");const r=await t.promises.readdir(e);if(s){const t=r.map((async t=>{await k(t,e,i,n)}));await Promise.all(t)}else for(const t of r)await k(t,e,i,n)},k=async(e,n,s,r)=>{const o=i.join(n,e),a=i.join(o,".git"),c=i.join(o,"package.json");if(e.startsWith("karin-plugin-")&&(await t.promises.stat(o)).isDirectory()&&!t.existsSync(a)){s.push({name:e,type:"git",currentVersion:"-",latestVersion:"-",status:"不是git仓库,已跳过",needUpdate:!1,isPlugin:!1});try{if(!JSON.parse(t.readFileSync(c,"utf-8")).karin)return void s.push({name:e,type:"git",currentVersion:"-",latestVersion:"-",status:"非Karin插件,已跳过",needUpdate:!1,isPlugin:!1});const{status:i,hash:n,data:a}=await S(o,{customCmd:"git pull",force:r});i?s.push({name:e,type:"git",currentVersion:n.before,latestVersion:n.after,status:"更新成功",needUpdate:!0,isPlugin:!0}):s.push({name:e,type:"git",currentVersion:"-",latestVersion:"-",status:`更新失败: ${a}`,needUpdate:!1,isPlugin:!0})}catch(l){s.push({name:e,type:"git",currentVersion:"-",latestVersion:"-",status:`处理失败: ${l}`,needUpdate:!1,isPlugin:!1})}}};function $(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var T,H,V={},j={},P={};function F(){if(T)return P;T=1;class t extends Error{constructor(t,e,i){super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=e,this.exitCode=t,this.nestedError=void 0}}return P.CommanderError=t,P.InvalidArgumentError=class extends t{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}},P}function N(){if(H)return j;H=1;const{InvalidArgumentError:t}=F();return j.Argument=class{constructor(t,e){switch(this.description=e||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,t[0]){case"<":this.required=!0,this._name=t.slice(1,-1);break;case"[":this.required=!1,this._name=t.slice(1,-1);break;default:this.required=!0,this._name=t}this._name.length>3&&"..."===this._name.slice(-3)&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(t,e){return e!==this.defaultValue&&Array.isArray(e)?e.concat(t):[t]}default(t,e){return this.defaultValue=t,this.defaultValueDescription=e,this}argParser(t){return this.parseArg=t,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(e,i)=>{if(!this.argChoices.includes(e))throw new t(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(e,i):e},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}},j.humanReadableArgName=function(t){const e=t.name()+(!0===t.variadic?"...":"");return t.required?"<"+e+">":"["+e+"]"},j}var D,W={},R={};function U(){if(D)return R;D=1;const{humanReadableArgName:t}=N();function e(t){return t.replace(/\x1b\[\d*(;\d*)*m/g,"")}return R.Help=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(t){this.helpWidth=this.helpWidth??t.helpWidth??80}visibleCommands(t){const e=t.commands.filter((t=>!t._hidden)),i=t._getHelpCommand();return i&&!i._hidden&&e.push(i),this.sortSubcommands&&e.sort(((t,e)=>t.name().localeCompare(e.name()))),e}compareOptions(t,e){const i=t=>t.short?t.short.replace(/^-/,""):t.long.replace(/^--/,"");return i(t).localeCompare(i(e))}visibleOptions(t){const e=t.options.filter((t=>!t.hidden)),i=t._getHelpOption();if(i&&!i.hidden){const n=i.short&&t._findOption(i.short),s=i.long&&t._findOption(i.long);n||s?i.long&&!s?e.push(t.createOption(i.long,i.description)):i.short&&!n&&e.push(t.createOption(i.short,i.description)):e.push(i)}return this.sortOptions&&e.sort(this.compareOptions),e}visibleGlobalOptions(t){if(!this.showGlobalOptions)return[];const e=[];for(let i=t.parent;i;i=i.parent){const t=i.options.filter((t=>!t.hidden));e.push(...t)}return this.sortOptions&&e.sort(this.compareOptions),e}visibleArguments(t){return t._argsDescription&&t.registeredArguments.forEach((e=>{e.description=e.description||t._argsDescription[e.name()]||""})),t.registeredArguments.find((t=>t.description))?t.registeredArguments:[]}subcommandTerm(e){const i=e.registeredArguments.map((e=>t(e))).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(i?" "+i:"")}optionTerm(t){return t.flags}argumentTerm(t){return t.name()}longestSubcommandTermLength(t,e){return e.visibleCommands(t).reduce(((t,i)=>Math.max(t,this.displayWidth(e.styleSubcommandTerm(e.subcommandTerm(i))))),0)}longestOptionTermLength(t,e){return e.visibleOptions(t).reduce(((t,i)=>Math.max(t,this.displayWidth(e.styleOptionTerm(e.optionTerm(i))))),0)}longestGlobalOptionTermLength(t,e){return e.visibleGlobalOptions(t).reduce(((t,i)=>Math.max(t,this.displayWidth(e.styleOptionTerm(e.optionTerm(i))))),0)}longestArgumentTermLength(t,e){return e.visibleArguments(t).reduce(((t,i)=>Math.max(t,this.displayWidth(e.styleArgumentTerm(e.argumentTerm(i))))),0)}commandUsage(t){let e=t._name;t._aliases[0]&&(e=e+"|"+t._aliases[0]);let i="";for(let n=t.parent;n;n=n.parent)i=n.name()+" "+i;return i+e+" "+t.usage()}commandDescription(t){return t.description()}subcommandDescription(t){return t.summary()||t.description()}optionDescription(t){const e=[];if(t.argChoices&&e.push(`choices: ${t.argChoices.map((t=>JSON.stringify(t))).join(", ")}`),void 0!==t.defaultValue){(t.required||t.optional||t.isBoolean()&&"boolean"==typeof t.defaultValue)&&e.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`)}return void 0!==t.presetArg&&t.optional&&e.push(`preset: ${JSON.stringify(t.presetArg)}`),void 0!==t.envVar&&e.push(`env: ${t.envVar}`),e.length>0?`${t.description} (${e.join(", ")})`:t.description}argumentDescription(t){const e=[];if(t.argChoices&&e.push(`choices: ${t.argChoices.map((t=>JSON.stringify(t))).join(", ")}`),void 0!==t.defaultValue&&e.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),e.length>0){const i=`(${e.join(", ")})`;return t.description?`${t.description} ${i}`:i}return t.description}formatHelp(t,e){const i=e.padWidth(t,e),n=e.helpWidth??80;function s(t,n){return e.formatItem(t,i,n,e)}let r=[`${e.styleTitle("Usage:")} ${e.styleUsage(e.commandUsage(t))}`,""];const o=e.commandDescription(t);o.length>0&&(r=r.concat([e.boxWrap(e.styleCommandDescription(o),n),""]));const a=e.visibleArguments(t).map((t=>s(e.styleArgumentTerm(e.argumentTerm(t)),e.styleArgumentDescription(e.argumentDescription(t)))));a.length>0&&(r=r.concat([e.styleTitle("Arguments:"),...a,""]));const c=e.visibleOptions(t).map((t=>s(e.styleOptionTerm(e.optionTerm(t)),e.styleOptionDescription(e.optionDescription(t)))));if(c.length>0&&(r=r.concat([e.styleTitle("Options:"),...c,""])),e.showGlobalOptions){const i=e.visibleGlobalOptions(t).map((t=>s(e.styleOptionTerm(e.optionTerm(t)),e.styleOptionDescription(e.optionDescription(t)))));i.length>0&&(r=r.concat([e.styleTitle("Global Options:"),...i,""]))}const l=e.visibleCommands(t).map((t=>s(e.styleSubcommandTerm(e.subcommandTerm(t)),e.styleSubcommandDescription(e.subcommandDescription(t)))));return l.length>0&&(r=r.concat([e.styleTitle("Commands:"),...l,""])),r.join("\n")}displayWidth(t){return e(t).length}styleTitle(t){return t}styleUsage(t){return t.split(" ").map((t=>"[options]"===t?this.styleOptionText(t):"[command]"===t?this.styleSubcommandText(t):"["===t[0]||"<"===t[0]?this.styleArgumentText(t):this.styleCommandText(t))).join(" ")}styleCommandDescription(t){return this.styleDescriptionText(t)}styleOptionDescription(t){return this.styleDescriptionText(t)}styleSubcommandDescription(t){return this.styleDescriptionText(t)}styleArgumentDescription(t){return this.styleDescriptionText(t)}styleDescriptionText(t){return t}styleOptionTerm(t){return this.styleOptionText(t)}styleSubcommandTerm(t){return t.split(" ").map((t=>"[options]"===t?this.styleOptionText(t):"["===t[0]||"<"===t[0]?this.styleArgumentText(t):this.styleSubcommandText(t))).join(" ")}styleArgumentTerm(t){return this.styleArgumentText(t)}styleOptionText(t){return t}styleArgumentText(t){return t}styleSubcommandText(t){return t}styleCommandText(t){return t}padWidth(t,e){return Math.max(e.longestOptionTermLength(t,e),e.longestGlobalOptionTermLength(t,e),e.longestSubcommandTermLength(t,e),e.longestArgumentTermLength(t,e))}preformatted(t){return/\n[^\S\r\n]/.test(t)}formatItem(t,e,i,n){const s=" ".repeat(2);if(!i)return s+t;const r=t.padEnd(e+t.length-n.displayWidth(t)),o=(this.helpWidth??80)-e-2-2;let a;if(o<this.minWidthToWrap||n.preformatted(i))a=i;else{a=n.boxWrap(i,o).replace(/\n/g,"\n"+" ".repeat(e+2))}return s+r+" ".repeat(2)+a.replace(/\n/g,`\n${s}`)}boxWrap(t,e){if(e<this.minWidthToWrap)return t;const i=t.split(/\r\n|\n/),n=/[\s]*[^\s]+/g,s=[];return i.forEach((t=>{const i=t.match(n);if(null===i)return void s.push("");let r=[i.shift()],o=this.displayWidth(r[0]);i.forEach((t=>{const i=this.displayWidth(t);if(o+i<=e)return r.push(t),void(o+=i);s.push(r.join(""));const n=t.trimStart();r=[n],o=this.displayWidth(n)})),s.push(r.join(""))})),s.join("\n")}},R.stripColor=e,R}var I,L={};function q(){if(I)return L;I=1;const{InvalidArgumentError:t}=F();function e(t){return t.split("-").reduce(((t,e)=>t+e[0].toUpperCase()+e.slice(1)))}return L.Option=class{constructor(t,e){this.flags=t,this.description=e||"",this.required=t.includes("<"),this.optional=t.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(t),this.mandatory=!1;const i=function(t){let e,i;const n=/^-[^-]$/,s=/^--[^-]/,r=t.split(/[ |,]+/).concat("guard");n.test(r[0])&&(e=r.shift());s.test(r[0])&&(i=r.shift());!e&&n.test(r[0])&&(e=r.shift());!e&&s.test(r[0])&&(e=i,i=r.shift());if(r[0].startsWith("-")){const e=r[0],i=`option creation failed due to '${e}' in option flags '${t}'`;if(/^-[^-][^-]/.test(e))throw new Error(`${i}\n- a short flag is a single dash and a single character\n - either use a single dash and a single character (for a short flag)\n - or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(n.test(e))throw new Error(`${i}\n- too many short flags`);if(s.test(e))throw new Error(`${i}\n- too many long flags`);throw new Error(`${i}\n- unrecognised flag format`)}if(void 0===e&&void 0===i)throw new Error(`option creation failed due to no flags found in '${t}'.`);return{shortFlag:e,longFlag:i}}(t);this.short=i.shortFlag,this.long=i.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(t,e){return this.defaultValue=t,this.defaultValueDescription=e,this}preset(t){return this.presetArg=t,this}conflicts(t){return this.conflictsWith=this.conflictsWith.concat(t),this}implies(t){let e=t;return"string"==typeof t&&(e={[t]:!0}),this.implied=Object.assign(this.implied||{},e),this}env(t){return this.envVar=t,this}argParser(t){return this.parseArg=t,this}makeOptionMandatory(t=!0){return this.mandatory=!!t,this}hideHelp(t=!0){return this.hidden=!!t,this}_concatValue(t,e){return e!==this.defaultValue&&Array.isArray(e)?e.concat(t):[t]}choices(e){return this.argChoices=e.slice(),this.parseArg=(e,i)=>{if(!this.argChoices.includes(e))throw new t(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(e,i):e},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?e(this.name().replace(/^no-/,"")):e(this.name())}is(t){return this.short===t||this.long===t}isBoolean(){return!this.required&&!this.optional&&!this.negate}},L.DualOptions=class{constructor(t){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,t.forEach((t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)})),this.negativeOptions.forEach(((t,e)=>{this.positiveOptions.has(e)&&this.dualOptions.add(e)}))}valueFromOption(t,e){const i=e.attributeName();if(!this.dualOptions.has(i))return!0;const n=this.negativeOptions.get(i).presetArg,s=void 0!==n&&n;return e.negate===(s===t)}},L}var M,G,B,J={};function Y(){if(M)return J;M=1;return J.suggestSimilar=function(t,e){if(!e||0===e.length)return"";e=Array.from(new Set(e));const i=t.startsWith("--");i&&(t=t.slice(2),e=e.map((t=>t.slice(2))));let n=[],s=3;return e.forEach((e=>{if(e.length<=1)return;const i=function(t,e){if(Math.abs(t.length-e.length)>3)return Math.max(t.length,e.length);const i=[];for(let n=0;n<=t.length;n++)i[n]=[n];for(let n=0;n<=e.length;n++)i[0][n]=n;for(let n=1;n<=e.length;n++)for(let s=1;s<=t.length;s++){let r=1;r=t[s-1]===e[n-1]?0:1,i[s][n]=Math.min(i[s-1][n]+1,i[s][n-1]+1,i[s-1][n-1]+r),s>1&&n>1&&t[s-1]===e[n-2]&&t[s-2]===e[n-1]&&(i[s][n]=Math.min(i[s][n],i[s-2][n-2]+1))}return i[t.length][e.length]}(t,e),r=Math.max(t.length,e.length);(r-i)/r>.4&&(i<s?(s=i,n=[e]):i===s&&n.push(e))})),n.sort(((t,e)=>t.localeCompare(e))),i&&(n=n.map((t=>`--${t}`))),n.length>1?`\n(Did you mean one of ${n.join(", ")}?)`:1===n.length?`\n(Did you mean ${n[0]}?)`:""},J}const K=$(function(){if(B)return V;B=1;const{Argument:e}=N(),{Command:s}=function(){if(G)return W;G=1;const e=r.EventEmitter,s=n,a=i,c=t,l=o,{Argument:p,humanReadableArgName:h}=N(),{CommanderError:u}=F(),{Help:m,stripColor:d}=U(),{Option:g,DualOptions:f}=q(),{suggestSimilar:_}=Y();class y extends e{constructor(t){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=t||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:t=>l.stdout.write(t),writeErr:t=>l.stderr.write(t),outputError:(t,e)=>e(t),getOutHelpWidth:()=>l.stdout.isTTY?l.stdout.columns:void 0,getErrHelpWidth:()=>l.stderr.isTTY?l.stderr.columns:void 0,getOutHasColors:()=>v()??(l.stdout.isTTY&&l.stdout.hasColors?.()),getErrHasColors:()=>v()??(l.stderr.isTTY&&l.stderr.hasColors?.()),stripColor:t=>d(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(t){return this._outputConfiguration=t._outputConfiguration,this._helpOption=t._helpOption,this._helpCommand=t._helpCommand,this._helpConfiguration=t._helpConfiguration,this._exitCallback=t._exitCallback,this._storeOptionsAsProperties=t._storeOptionsAsProperties,this._combineFlagAndOptionalValue=t._combineFlagAndOptionalValue,this._allowExcessArguments=t._allowExcessArguments,this._enablePositionalOptions=t._enablePositionalOptions,this._showHelpAfterError=t._showHelpAfterError,this._showSuggestionAfterError=t._showSuggestionAfterError,this}_getCommandAndAncestors(){const t=[];for(let e=this;e;e=e.parent)t.push(e);return t}command(t,e,i){let n=e,s=i;"object"==typeof n&&null!==n&&(s=n,n=null),s=s||{};const[,r,o]=t.match(/([^ ]+) *(.*)/),a=this.createCommand(r);return n&&(a.description(n),a._executableHandler=!0),s.isDefault&&(this._defaultCommandName=a._name),a._hidden=!(!s.noHelp&&!s.hidden),a._executableFile=s.executableFile||null,o&&a.arguments(o),this._registerCommand(a),a.parent=this,a.copyInheritedSettings(this),n?this:a}createCommand(t){return new y(t)}createHelp(){return Object.assign(new m,this.configureHelp())}configureHelp(t){return void 0===t?this._helpConfiguration:(this._helpConfiguration=t,this)}configureOutput(t){return void 0===t?this._outputConfiguration:(Object.assign(this._outputConfiguration,t),this)}showHelpAfterError(t=!0){return"string"!=typeof t&&(t=!!t),this._showHelpAfterError=t,this}showSuggestionAfterError(t=!0){return this._showSuggestionAfterError=!!t,this}addCommand(t,e){if(!t._name)throw new Error("Command passed to .addCommand() must have a name\n- specify the name in Command constructor or using .name()");return(e=e||{}).isDefault&&(this._defaultCommandName=t._name),(e.noHelp||e.hidden)&&(t._hidden=!0),this._registerCommand(t),t.parent=this,t._checkForBrokenPassThrough(),this}createArgument(t,e){return new p(t,e)}argument(t,e,i,n){const s=this.createArgument(t,e);return"function"==typeof i?s.default(n).argParser(i):s.default(i),this.addArgument(s),this}arguments(t){return t.trim().split(/ +/).forEach((t=>{this.argument(t)})),this}addArgument(t){const e=this.registeredArguments.slice(-1)[0];if(e&&e.variadic)throw new Error(`only the last argument can be variadic '${e.name()}'`);if(t.required&&void 0!==t.defaultValue&&void 0===t.parseArg)throw new Error(`a default value for a required argument is never used: '${t.name()}'`);return this.registeredArguments.push(t),this}helpCommand(t,e){if("boolean"==typeof t)return this._addImplicitHelpCommand=t,this;t=t??"help [command]";const[,i,n]=t.match(/([^ ]+) *(.*)/),s=e??"display help for command",r=this.createCommand(i);return r.helpOption(!1),n&&r.arguments(n),s&&r.description(s),this._addImplicitHelpCommand=!0,this._helpCommand=r,this}addHelpCommand(t,e){return"object"!=typeof t?(this.helpCommand(t,e),this):(this._addImplicitHelpCommand=!0,this._helpCommand=t,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(void 0===this._helpCommand&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(t,e){const i=["preSubcommand","preAction","postAction"];if(!i.includes(t))throw new Error(`Unexpected value for event passed to hook : '${t}'.\nExpecting one of '${i.join("', '")}'`);return this._lifeCycleHooks[t]?this._lifeCycleHooks[t].push(e):this._lifeCycleHooks[t]=[e],this}exitOverride(t){return this._exitCallback=t||(t=>{if("commander.executeSubCommandAsync"!==t.code)throw t}),this}_exit(t,e,i){this._exitCallback&&this._exitCallback(new u(t,e,i)),l.exit(t)}action(t){return this._actionHandler=e=>{const i=this.registeredArguments.length,n=e.slice(0,i);return this._storeOptionsAsProperties?n[i]=this:n[i]=this.opts(),n.push(this),t.apply(this,n)},this}createOption(t,e){return new g(t,e)}_callParseArg(t,e,i,n){try{return t.parseArg(e,i)}catch(s){if("commander.invalidArgument"===s.code){const t=`${n} ${s.message}`;this.error(t,{exitCode:s.exitCode,code:s.code})}throw s}}_registerOption(t){const e=t.short&&this._findOption(t.short)||t.long&&this._findOption(t.long);if(e){const i=t.long&&this._findOption(t.long)?t.long:t.short;throw new Error(`Cannot add option '${t.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${i}'\n- already used by option '${e.flags}'`)}this.options.push(t)}_registerCommand(t){const e=t=>[t.name()].concat(t.aliases()),i=e(t).find((t=>this._findCommand(t)));if(i){const n=e(this._findCommand(i)).join("|"),s=e(t).join("|");throw new Error(`cannot add command '${s}' as already have command '${n}'`)}this.commands.push(t)}addOption(t){this._registerOption(t);const e=t.name(),i=t.attributeName();if(t.negate){const e=t.long.replace(/^--no-/,"--");this._findOption(e)||this.setOptionValueWithSource(i,void 0===t.defaultValue||t.defaultValue,"default")}else void 0!==t.defaultValue&&this.setOptionValueWithSource(i,t.defaultValue,"default");const n=(e,n,s)=>{null==e&&void 0!==t.presetArg&&(e=t.presetArg);const r=this.getOptionValue(i);null!==e&&t.parseArg?e=this._callParseArg(t,e,r,n):null!==e&&t.variadic&&(e=t._concatValue(e,r)),null==e&&(e=!t.negate&&(!(!t.isBoolean()&&!t.optional)||"")),this.setOptionValueWithSource(i,e,s)};return this.on("option:"+e,(e=>{const i=`error: option '${t.flags}' argument '${e}' is invalid.`;n(e,i,"cli")})),t.envVar&&this.on("optionEnv:"+e,(e=>{const i=`error: option '${t.flags}' value '${e}' from env '${t.envVar}' is invalid.`;n(e,i,"env")})),this}_optionEx(t,e,i,n,s){if("object"==typeof e&&e instanceof g)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");const r=this.createOption(e,i);if(r.makeOptionMandatory(!!t.mandatory),"function"==typeof n)r.default(s).argParser(n);else if(n instanceof RegExp){const t=n;n=(e,i)=>{const n=t.exec(e);return n?n[0]:i},r.default(s).argParser(n)}else r.default(n);return this.addOption(r)}option(t,e,i,n){return this._optionEx({},t,e,i,n)}requiredOption(t,e,i,n){return this._optionEx({mandatory:!0},t,e,i,n)}combineFlagAndOptionalValue(t=!0){return this._combineFlagAndOptionalValue=!!t,this}allowUnknownOption(t=!0){return this._allowUnknownOption=!!t,this}allowExcessArguments(t=!0){return this._allowExcessArguments=!!t,this}enablePositionalOptions(t=!0){return this._enablePositionalOptions=!!t,this}passThroughOptions(t=!0){return this._passThroughOptions=!!t,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(t=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!t,this}getOptionValue(t){return this._storeOptionsAsProperties?this[t]:this._optionValues[t]}setOptionValue(t,e){return this.setOptionValueWithSource(t,e,void 0)}setOptionValueWithSource(t,e,i){return this._storeOptionsAsProperties?this[t]=e:this._optionValues[t]=e,this._optionValueSources[t]=i,this}getOptionValueSource(t){return this._optionValueSources[t]}getOptionValueSourceWithGlobals(t){let e;return this._getCommandAndAncestors().forEach((i=>{void 0!==i.getOptionValueSource(t)&&(e=i.getOptionValueSource(t))})),e}_prepareUserArgs(t,e){if(void 0!==t&&!Array.isArray(t))throw new Error("first parameter to parse must be array or undefined");if(e=e||{},void 0===t&&void 0===e.from){l.versions?.electron&&(e.from="electron");const t=l.execArgv??[];(t.includes("-e")||t.includes("--eval")||t.includes("-p")||t.includes("--print"))&&(e.from="eval")}let i;switch(void 0===t&&(t=l.argv),this.rawArgs=t.slice(),e.from){case void 0:case"node":this._scriptPath=t[1],i=t.slice(2);break;case"electron":l.defaultApp?(this._scriptPath=t[1],i=t.slice(2)):i=t.slice(1);break;case"user":i=t.slice(0);break;case"eval":i=t.slice(1);break;default:throw new Error(`unexpected parse option { from: '${e.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",i}parse(t,e){this._prepareForParse();const i=this._prepareUserArgs(t,e);return this._parseCommand([],i),this}async parseAsync(t,e){this._prepareForParse();const i=this._prepareUserArgs(t,e);return await this._parseCommand([],i),this}_prepareForParse(){null===this._savedState?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error("Can not call parse again when storeOptionsAsProperties is true.\n- either make a new Command for each call to parse, or stop storing options as properties");this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(t,e,i){if(!c.existsSync(t))throw new Error(`'${t}' does not exist\n - if '${i}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name or path\n - ${e?`searched for local subcommand relative to directory '${e}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory"}`)}_executeSubCommand(t,e){e=e.slice();let i=!1;const n=[".js",".ts",".tsx",".mjs",".cjs"];function r(t,e){const i=a.resolve(t,e);if(c.existsSync(i))return i;if(n.includes(a.extname(e)))return;const s=n.find((t=>c.existsSync(`${i}${t}`)));return s?`${i}${s}`:void 0}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o,p=t._executableFile||`${this._name}-${t._name}`,h=this._executableDir||"";if(this._scriptPath){let t;try{t=c.realpathSync(this._scriptPath)}catch{t=this._scriptPath}h=a.resolve(a.dirname(t),h)}if(h){let e=r(h,p);if(!e&&!t._executableFile&&this._scriptPath){const i=a.basename(this._scriptPath,a.extname(this._scriptPath));i!==this._name&&(e=r(h,`${i}-${t._name}`))}p=e||p}i=n.includes(a.extname(p)),"win32"!==l.platform?i?(e.unshift(p),e=O(l.execArgv).concat(e),o=s.spawn(l.argv[0],e,{stdio:"inherit"})):o=s.spawn(p,e,{stdio:"inherit"}):(this._checkForMissingExecutable(p,h,t._name),e.unshift(p),e=O(l.execArgv).concat(e),o=s.spawn(l.execPath,e,{stdio:"inherit"})),o.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((t=>{l.on(t,(()=>{!1===o.killed&&null===o.exitCode&&o.kill(t)}))}));const m=this._exitCallback;o.on("close",(t=>{t=t??1,m?m(new u(t,"commander.executeSubCommandAsync","(close)")):l.exit(t)})),o.on("error",(e=>{if("ENOENT"===e.code)this._checkForMissingExecutable(p,h,t._name);else if("EACCES"===e.code)throw new Error(`'${p}' not executable`);if(m){const t=new u(1,"commander.executeSubCommandAsync","(error)");t.nestedError=e,m(t)}else l.exit(1)})),this.runningCommand=o}_dispatchSubcommand(t,e,i){const n=this._findCommand(t);let s;return n||this.help({error:!0}),n._prepareForParse(),s=this._chainOrCallSubCommandHook(s,n,"preSubcommand"),s=this._chainOrCall(s,(()=>{if(!n._executableHandler)return n._parseCommand(e,i);this._executeSubCommand(n,e.concat(i))})),s}_dispatchHelpCommand(t){t||this.help();const e=this._findCommand(t);return e&&!e._executableHandler&&e.help(),this._dispatchSubcommand(t,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach(((t,e)=>{t.required&&null==this.args[e]&&this.missingArgument(t.name())})),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic||this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){const t=(t,e,i)=>{let n=e;if(null!==e&&t.parseArg){const s=`error: command-argument value '${e}' is invalid for argument '${t.name()}'.`;n=this._callParseArg(t,e,i,s)}return n};this._checkNumberOfArguments();const e=[];this.registeredArguments.forEach(((i,n)=>{let s=i.defaultValue;i.variadic?n<this.args.length?(s=this.args.slice(n),i.parseArg&&(s=s.reduce(((e,n)=>t(i,n,e)),i.defaultValue))):void 0===s&&(s=[]):n<this.args.length&&(s=this.args[n],i.parseArg&&(s=t(i,s,i.defaultValue))),e[n]=s})),this.processedArgs=e}_chainOrCall(t,e){return t&&t.then&&"function"==typeof t.then?t.then((()=>e())):e()}_chainOrCallHooks(t,e){let i=t;const n=[];return this._getCommandAndAncestors().reverse().filter((t=>void 0!==t._lifeCycleHooks[e])).forEach((t=>{t._lifeCycleHooks[e].forEach((e=>{n.push({hookedCommand:t,callback:e})}))})),"postAction"===e&&n.reverse(),n.forEach((t=>{i=this._chainOrCall(i,(()=>t.callback(t.hookedCommand,this)))})),i}_chainOrCallSubCommandHook(t,e,i){let n=t;return void 0!==this._lifeCycleHooks[i]&&this._lifeCycleHooks[i].forEach((t=>{n=this._chainOrCall(n,(()=>t(this,e)))})),n}_parseCommand(t,e){const i=this.parseOptions(e);if(this._parseOptionsEnv(),this._parseOptionsImplied(),t=t.concat(i.operands),e=i.unknown,this.args=t.concat(e),t&&this._findCommand(t[0]))return this._dispatchSubcommand(t[0],t.slice(1),e);if(this._getHelpCommand()&&t[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(t[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(e),this._dispatchSubcommand(this._defaultCommandName,t,e);!this.commands.length||0!==this.args.length||this._actionHandler||this._defaultCommandName||this.help({error:!0}),this._outputHelpIfRequested(i.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();const n=()=>{i.unknown.length>0&&this.unknownOption(i.unknown[0])},s=`command:${this.name()}`;if(this._actionHandler){let i;return n(),this._processArguments(),i=this._chainOrCallHooks(i,"preAction"),i=this._chainOrCall(i,(()=>this._actionHandler(this.processedArgs))),this.parent&&(i=this._chainOrCall(i,(()=>{this.parent.emit(s,t,e)}))),i=this._chainOrCallHooks(i,"postAction"),i}if(this.parent&&this.parent.listenerCount(s))n(),this._processArguments(),this.parent.emit(s,t,e);else if(t.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",t,e);this.listenerCount("command:*")?this.emit("command:*",t,e):this.commands.length?this.unknownCommand():(n(),this._processArguments())}else this.commands.length?(n(),this.help({error:!0})):(n(),this._processArguments())}_findCommand(t){if(t)return this.commands.find((e=>e._name===t||e._aliases.includes(t)))}_findOption(t){return this.options.find((e=>e.is(t)))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((t=>{t.options.forEach((e=>{e.mandatory&&void 0===t.getOptionValue(e.attributeName())&&t.missingMandatoryOptionValue(e)}))}))}_checkForConflictingLocalOptions(){const t=this.options.filter((t=>{const e=t.attributeName();return void 0!==this.getOptionValue(e)&&"default"!==this.getOptionValueSource(e)}));t.filter((t=>t.conflictsWith.length>0)).forEach((e=>{const i=t.find((t=>e.conflictsWith.includes(t.attributeName())));i&&this._conflictingOption(e,i)}))}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((t=>{t._checkForConflictingLocalOptions()}))}parseOptions(t){const e=[],i=[];let n=e;const s=t.slice();function r(t){return t.length>1&&"-"===t[0]}let o=null;for(;s.length;){const t=s.shift();if("--"===t){n===i&&n.push(t),n.push(...s);break}if(!o||r(t)){if(o=null,r(t)){const e=this._findOption(t);if(e){if(e.required){const t=s.shift();void 0===t&&this.optionMissingArgument(e),this.emit(`option:${e.name()}`,t)}else if(e.optional){let t=null;s.length>0&&!r(s[0])&&(t=s.shift()),this.emit(`option:${e.name()}`,t)}else this.emit(`option:${e.name()}`);o=e.variadic?e:null;continue}}if(t.length>2&&"-"===t[0]&&"-"!==t[1]){const e=this._findOption(`-${t[1]}`);if(e){e.required||e.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${e.name()}`,t.slice(2)):(this.emit(`option:${e.name()}`),s.unshift(`-${t.slice(2)}`));continue}}if(/^--[^=]+=/.test(t)){const e=t.indexOf("="),i=this._findOption(t.slice(0,e));if(i&&(i.required||i.optional)){this.emit(`option:${i.name()}`,t.slice(e+1));continue}}if(r(t)&&(n=i),(this._enablePositionalOptions||this._passThroughOptions)&&0===e.length&&0===i.length){if(this._findCommand(t)){e.push(t),s.length>0&&i.push(...s);break}if(this._getHelpCommand()&&t===this._getHelpCommand().name()){e.push(t),s.length>0&&e.push(...s);break}if(this._defaultCommandName){i.push(t),s.length>0&&i.push(...s);break}}if(this._passThroughOptions){n.push(t),s.length>0&&n.push(...s);break}n.push(t)}else this.emit(`option:${o.name()}`,t)}return{operands:e,unknown:i}}opts(){if(this._storeOptionsAsProperties){const t={},e=this.options.length;for(let i=0;i<e;i++){const e=this.options[i].attributeName();t[e]=e===this._versionOptionName?this._version:this[e]}return t}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce(((t,e)=>Object.assign(t,e.opts())),{})}error(t,e){this._outputConfiguration.outputError(`${t}\n`,this._outputConfiguration.writeErr),"string"==typeof this._showHelpAfterError?this._outputConfiguration.writeErr(`${this._showHelpAfterError}\n`):this._showHelpAfterError&&(this._outputConfiguration.writeErr("\n"),this.outputHelp({error:!0}));const i=e||{},n=i.exitCode||1,s=i.code||"commander.error";this._exit(n,s,t)}_parseOptionsEnv(){this.options.forEach((t=>{if(t.envVar&&t.envVar in l.env){const e=t.attributeName();(void 0===this.getOptionValue(e)||["default","config","env"].includes(this.getOptionValueSource(e)))&&(t.required||t.optional?this.emit(`optionEnv:${t.name()}`,l.env[t.envVar]):this.emit(`optionEnv:${t.name()}`))}}))}_parseOptionsImplied(){const t=new f(this.options),e=t=>void 0!==this.getOptionValue(t)&&!["default","implied"].includes(this.getOptionValueSource(t));this.options.filter((i=>void 0!==i.implied&&e(i.attributeName())&&t.valueFromOption(this.getOptionValue(i.attributeName()),i))).forEach((t=>{Object.keys(t.implied).filter((t=>!e(t))).forEach((e=>{this.setOptionValueWithSource(e,t.implied[e],"implied")}))}))}missingArgument(t){const e=`error: missing required argument '${t}'`;this.error(e,{code:"commander.missingArgument"})}optionMissingArgument(t){const e=`error: option '${t.flags}' argument missing`;this.error(e,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(t){const e=`error: required option '${t.flags}' not specified`;this.error(e,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(t,e){const i=t=>{const e=t.attributeName(),i=this.getOptionValue(e),n=this.options.find((t=>t.negate&&e===t.attributeName())),s=this.options.find((t=>!t.negate&&e===t.attributeName()));return n&&(void 0===n.presetArg&&!1===i||void 0!==n.presetArg&&i===n.presetArg)?n:s||t},n=t=>{const e=i(t),n=e.attributeName();return"env"===this.getOptionValueSource(n)?`environment variable '${e.envVar}'`:`option '${e.flags}'`},s=`error: ${n(t)} cannot be used with ${n(e)}`;this.error(s,{code:"commander.conflictingOption"})}unknownOption(t){if(this._allowUnknownOption)return;let e="";if(t.startsWith("--")&&this._showSuggestionAfterError){let i=[],n=this;do{const t=n.createHelp().visibleOptions(n).filter((t=>t.long)).map((t=>t.long));i=i.concat(t),n=n.parent}while(n&&!n._enablePositionalOptions);e=_(t,i)}const i=`error: unknown option '${t}'${e}`;this.error(i,{code:"commander.unknownOption"})}_excessArguments(t){if(this._allowExcessArguments)return;const e=this.registeredArguments.length,i=1===e?"":"s",n=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${e} argument${i} but got ${t.length}.`;this.error(n,{code:"commander.excessArguments"})}unknownCommand(){const t=this.args[0];let e="";if(this._showSuggestionAfterError){const i=[];this.createHelp().visibleCommands(this).forEach((t=>{i.push(t.name()),t.alias()&&i.push(t.alias())})),e=_(t,i)}const i=`error: unknown command '${t}'${e}`;this.error(i,{code:"commander.unknownCommand"})}version(t,e,i){if(void 0===t)return this._version;this._version=t,e=e||"-V, --version",i=i||"output the version number";const n=this.createOption(e,i);return this._versionOptionName=n.attributeName(),this._registerOption(n),this.on("option:"+n.name(),(()=>{this._outputConfiguration.writeOut(`${t}\n`),this._exit(0,"commander.version",t)})),this}description(t,e){return void 0===t&&void 0===e?this._description:(this._description=t,e&&(this._argsDescription=e),this)}summary(t){return void 0===t?this._summary:(this._summary=t,this)}alias(t){if(void 0===t)return this._aliases[0];let e=this;if(0!==this.commands.length&&this.commands[this.commands.length-1]._executableHandler&&(e=this.commands[this.commands.length-1]),t===e._name)throw new Error("Command alias can't be the same as its name");const i=this.parent?._findCommand(t);if(i){const e=[i.name()].concat(i.aliases()).join("|");throw new Error(`cannot add alias '${t}' to command '${this.name()}' as already have command '${e}'`)}return e._aliases.push(t),this}aliases(t){return void 0===t?this._aliases:(t.forEach((t=>this.alias(t))),this)}usage(t){if(void 0===t){if(this._usage)return this._usage;const t=this.registeredArguments.map((t=>h(t)));return[].concat(this.options.length||null!==this._helpOption?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=t,this}name(t){return void 0===t?this._name:(this._name=t,this)}nameFromFilename(t){return this._name=a.basename(t,a.extname(t)),this}executableDir(t){return void 0===t?this._executableDir:(this._executableDir=t,this)}helpInformation(t){const e=this.createHelp(),i=this._getOutputContext(t);e.prepareContext({error:i.error,helpWidth:i.helpWidth,outputHasColors:i.hasColors});const n=e.formatHelp(this,e);return i.hasColors?n:this._outputConfiguration.stripColor(n)}_getOutputContext(t){const e=!!(t=t||{}).error;let i,n,s;return e?(i=t=>this._outputConfiguration.writeErr(t),n=this._outputConfiguration.getErrHasColors(),s=this._outputConfiguration.getErrHelpWidth()):(i=t=>this._outputConfiguration.writeOut(t),n=this._outputConfiguration.getOutHasColors(),s=this._outputConfiguration.getOutHelpWidth()),{error:e,write:t=>(n||(t=this._outputConfiguration.stripColor(t)),i(t)),hasColors:n,helpWidth:s}}outputHelp(t){let e;"function"==typeof t&&(e=t,t=void 0);const i=this._getOutputContext(t),n={error:i.error,write:i.write,command:this};this._getCommandAndAncestors().reverse().forEach((t=>t.emit("beforeAllHelp",n))),this.emit("beforeHelp",n);let s=this.helpInformation({error:i.error});if(e&&(s=e(s),"string"!=typeof s&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");i.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach((t=>t.emit("afterAllHelp",n)))}helpOption(t,e){return"boolean"==typeof t?(this._helpOption=t?this._helpOption??void 0:null,this):(t=t??"-h, --help",e=e??"display help for command",this._helpOption=this.createOption(t,e),this)}_getHelpOption(){return void 0===this._helpOption&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(t){return this._helpOption=t,this}help(t){this.outputHelp(t);let e=Number(l.exitCode??0);0===e&&t&&"function"!=typeof t&&t.error&&(e=1),this._exit(e,"commander.help","(outputHelp)")}addHelpText(t,e){const i=["beforeAll","before","after","afterAll"];if(!i.includes(t))throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${i.join("', '")}'`);const n=`${t}Help`;return this.on(n,(t=>{let i;i="function"==typeof e?e({error:t.error,command:t.command}):e,i&&t.write(`${i}\n`)})),this}_outputHelpIfRequested(t){const e=this._getHelpOption();e&&t.find((t=>e.is(t)))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}}function O(t){return t.map((t=>{if(!t.startsWith("--inspect"))return t;let e,i,n="127.0.0.1",s="9229";return null!==(i=t.match(/^(--inspect(-brk)?)$/))?e=i[1]:null!==(i=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))?(e=i[1],/^\d+$/.test(i[3])?s=i[3]:n=i[3]):null!==(i=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))&&(e=i[1],n=i[3],s=i[4]),e&&"0"!==s?`${e}=${n}:${parseInt(s)+1}`:t}))}function v(){return!l.env.NO_COLOR&&"0"!==l.env.FORCE_COLOR&&"false"!==l.env.FORCE_COLOR&&(!(!l.env.FORCE_COLOR&&void 0===l.env.CLICOLOR_FORCE)||void 0)}return W.Command=y,W.useColor=v,W}(),{CommanderError:a,InvalidArgumentError:c}=F(),{Help:l}=U(),{Option:p}=q();return V.program=new s,V.createCommand=t=>new s(t),V.createOption=(t,e)=>new p(t,e),V.createArgument=(t,i)=>new e(t,i),V.Command=s,V.Option=p,V.Argument=e,V.Help=l,V.CommanderError=a,V.InvalidArgumentError=c,V.InvalidOptionArgumentError=c,V}()),{program:z,createCommand:X,createArgument:Z,createOption:Q,CommanderError:tt,InvalidArgumentError:et,InvalidOptionArgumentError:it,Command:nt,Argument:st,Option:rt,Help:ot}=K;process.argv?.[2]||process.argv.push("-h");z.version((()=>{try{const i=e.fileURLToPath(new URL("../../package.json","undefined"==typeof document?require("url").pathToFileURL(__filename).href:a&&"SCRIPT"===a.tagName.toUpperCase()&&a.src||new URL("index.cjs",document.baseURI).href));return JSON.parse(t.readFileSync(i,"utf-8")).version}catch{return"unknown"}})(),"-v, --version","显示版本号"),z.command(".").description("前台启动").action(v),z.command("app").description("前台启动").action(v),z.command("start").description("前台启动").action(v),z.command("pm2").description("后台运行").action(d),z.command("stop").description("停止后台服务").action(f),z.command("rs").description("重启后台服务").option("-f, --force","强制重启").action((t=>_(t.force))),z.command("log").description("查看日志").action(g),z.command("up").description("更新插件").option("-f, --force","强制更新").option("-s, --serial","并发更新").action((t=>(async(t,e=!1)=>{try{console.log("开始执行更新任务\n");const s=[],r=[];await x("./package.json",s,r),await E("./plugins",s,t,e);const o=(i=s,[...i].sort(((t,e)=>t.isPlugin!==e.isPlugin?t.isPlugin?1:-1:t.needUpdate!==e.needUpdate?t.needUpdate?1:-1:t.name.localeCompare(e.name))));if(o.length>0){console.log("检查结果:");const t=o.map((t=>({name:t.name,type:t.type,currentVersion:t.currentVersion,latestVersion:t.latestVersion,status:t.status})));console.table(t)}else console.log("没有找到需要检查的项目");if(r.length>0){console.log("\n开始更新包:");try{const{status:t,error:e}=await l(`pnpm update ${r.join(" ")} --save`);if(t){console.log("npm包更新完成");const t=o.filter((t=>t.needUpdate));if(t.length>0){console.log("\n已更新的项目:");const e=t.map((t=>({name:t.name,type:t.type,from:t.currentVersion,to:t.latestVersion})));console.table(e)}}else console.error("npm包更新失败:",e)}catch(n){console.error("npm包更新失败:",n)}}console.log("\n更新任务执行完成")}finally{process.exit(0)}var i})(t.force,!t.serial))),z.command("init").description("初始化项目").option("-f, --force","强制初始化").option("-d, --dev","开发模式").action((t=>{process.env.KARIN_CLI="true",t.dev&&(process.env.NODE_ENV="development"),O(t.force)})),z.parse(process.argv);