@fecommunity/reactpress 2.0.0-beta-4-beta.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/LICENSE +6 -6
  2. package/README.md +28 -176
  3. package/bin/reactpress-cli-shim.js +28 -0
  4. package/bin/reactpress.js +273 -0
  5. package/dist/cli.d.ts +4 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +102 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/config.d.ts +8 -0
  10. package/dist/commands/config.d.ts.map +1 -0
  11. package/dist/commands/config.js +54 -0
  12. package/dist/commands/config.js.map +1 -0
  13. package/dist/commands/init.d.ts +6 -0
  14. package/dist/commands/init.d.ts.map +1 -0
  15. package/dist/commands/init.js +33 -0
  16. package/dist/commands/init.js.map +1 -0
  17. package/dist/commands/restart.d.ts +2 -0
  18. package/dist/commands/restart.d.ts.map +1 -0
  19. package/dist/commands/restart.js +29 -0
  20. package/dist/commands/restart.js.map +1 -0
  21. package/dist/commands/start.d.ts +2 -0
  22. package/dist/commands/start.d.ts.map +1 -0
  23. package/dist/commands/start.js +31 -0
  24. package/dist/commands/start.js.map +1 -0
  25. package/dist/commands/status.d.ts +2 -0
  26. package/dist/commands/status.d.ts.map +1 -0
  27. package/dist/commands/status.js +20 -0
  28. package/dist/commands/status.js.map +1 -0
  29. package/dist/commands/stop.d.ts +5 -0
  30. package/dist/commands/stop.d.ts.map +1 -0
  31. package/dist/commands/stop.js +29 -0
  32. package/dist/commands/stop.js.map +1 -0
  33. package/dist/i18n.js +8 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +7 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/package.json +3 -0
  39. package/dist/services/config.d.ts +11 -0
  40. package/dist/services/config.d.ts.map +1 -0
  41. package/dist/services/config.js +102 -0
  42. package/dist/services/config.js.map +1 -0
  43. package/dist/services/database.d.ts +43 -0
  44. package/dist/services/database.d.ts.map +1 -0
  45. package/dist/services/database.js +252 -0
  46. package/dist/services/database.js.map +1 -0
  47. package/dist/services/exec.d.ts +22 -0
  48. package/dist/services/exec.d.ts.map +1 -0
  49. package/dist/services/exec.js +46 -0
  50. package/dist/services/exec.js.map +1 -0
  51. package/dist/services/init.d.ts +10 -0
  52. package/dist/services/init.d.ts.map +1 -0
  53. package/dist/services/init.js +50 -0
  54. package/dist/services/init.js.map +1 -0
  55. package/dist/services/process.d.ts +9 -0
  56. package/dist/services/process.d.ts.map +1 -0
  57. package/dist/services/process.js +98 -0
  58. package/dist/services/process.js.map +1 -0
  59. package/dist/services/server-health.d.ts +4 -0
  60. package/dist/services/server-health.d.ts.map +1 -0
  61. package/dist/services/server-health.js +27 -0
  62. package/dist/services/server-health.js.map +1 -0
  63. package/dist/services/server.d.ts +19 -0
  64. package/dist/services/server.d.ts.map +1 -0
  65. package/dist/services/server.js +133 -0
  66. package/dist/services/server.js.map +1 -0
  67. package/dist/templates/config.default.json +12 -0
  68. package/dist/templates/docker-compose.yml +27 -0
  69. package/dist/templates/env.default +11 -0
  70. package/dist/templates/package.json +10 -0
  71. package/dist/types/config.d.ts +30 -0
  72. package/dist/types/config.d.ts.map +1 -0
  73. package/dist/types/config.js +2 -0
  74. package/dist/types/config.js.map +1 -0
  75. package/dist/utils/cli-context.d.ts +4 -0
  76. package/dist/utils/cli-context.d.ts.map +1 -0
  77. package/dist/utils/cli-context.js +10 -0
  78. package/dist/utils/cli-context.js.map +1 -0
  79. package/dist/utils/logger.d.ts +10 -0
  80. package/dist/utils/logger.d.ts.map +1 -0
  81. package/dist/utils/logger.js +32 -0
  82. package/dist/utils/logger.js.map +1 -0
  83. package/dist/utils/paths.d.ts +17 -0
  84. package/dist/utils/paths.d.ts.map +1 -0
  85. package/dist/utils/paths.js +27 -0
  86. package/dist/utils/paths.js.map +1 -0
  87. package/dist/utils/platform.d.ts +8 -0
  88. package/dist/utils/platform.d.ts.map +1 -0
  89. package/dist/utils/platform.js +21 -0
  90. package/dist/utils/platform.js.map +1 -0
  91. package/dist/utils/port.d.ts +5 -0
  92. package/dist/utils/port.d.ts.map +1 -0
  93. package/dist/utils/port.js +25 -0
  94. package/dist/utils/port.js.map +1 -0
  95. package/dist/utils/server-bundle.d.ts +11 -0
  96. package/dist/utils/server-bundle.d.ts.map +1 -0
  97. package/dist/utils/server-bundle.js +71 -0
  98. package/dist/utils/server-bundle.js.map +1 -0
  99. package/lib/api-dev-runner.js +6 -0
  100. package/lib/api-dev.js +85 -0
  101. package/lib/bootstrap.js +114 -0
  102. package/lib/build.js +29 -0
  103. package/lib/db-backup.js +46 -0
  104. package/lib/dev-banner.js +40 -0
  105. package/lib/dev.js +134 -0
  106. package/lib/docker.js +157 -0
  107. package/lib/doctor.js +210 -0
  108. package/lib/http.js +147 -0
  109. package/lib/i18n/index.js +32 -0
  110. package/lib/i18n/strings.js +559 -0
  111. package/lib/lifecycle.js +160 -0
  112. package/lib/paths.js +75 -0
  113. package/lib/pm2.js +32 -0
  114. package/lib/process.js +45 -0
  115. package/{scripts/reactpress-publish.js → lib/publish.js} +26 -19
  116. package/lib/root.js +31 -0
  117. package/lib/spawn.js +91 -0
  118. package/lib/status.js +108 -0
  119. package/package.json +36 -70
  120. package/scripts/install-bundled-runtime.mjs +46 -0
  121. package/server/bin/reactpress-server.js +4 -4
  122. package/server/dist/app.module.d.ts +2 -0
  123. package/server/dist/app.module.js +105 -0
  124. package/server/dist/app.module.js.map +1 -0
  125. package/server/dist/common/api-messages.d.ts +32 -0
  126. package/server/dist/common/api-messages.js +36 -0
  127. package/server/dist/common/api-messages.js.map +1 -0
  128. package/server/dist/filters/http-exception.filter.d.ts +4 -0
  129. package/server/dist/filters/http-exception.filter.js +36 -0
  130. package/server/dist/filters/http-exception.filter.js.map +1 -0
  131. package/server/dist/generate-swagger.d.ts +1 -0
  132. package/server/dist/generate-swagger.js +73 -0
  133. package/server/dist/generate-swagger.js.map +1 -0
  134. package/server/dist/interceptors/transform.interceptor.d.ts +9 -0
  135. package/server/dist/interceptors/transform.interceptor.js +36 -0
  136. package/server/dist/interceptors/transform.interceptor.js.map +1 -0
  137. package/server/dist/logger/index.d.ts +4 -0
  138. package/server/dist/logger/index.js +33 -0
  139. package/server/dist/logger/index.js.map +1 -0
  140. package/server/dist/main.d.ts +6 -0
  141. package/server/dist/main.js +263 -0
  142. package/server/dist/main.js.map +1 -0
  143. package/server/dist/modules/api-key/api-key.controller.d.ts +14 -0
  144. package/server/dist/modules/api-key/api-key.controller.js +63 -0
  145. package/server/dist/modules/api-key/api-key.controller.js.map +1 -0
  146. package/server/dist/modules/api-key/api-key.entity.d.ts +11 -0
  147. package/server/dist/modules/api-key/api-key.entity.js +63 -0
  148. package/server/dist/modules/api-key/api-key.entity.js.map +1 -0
  149. package/server/dist/modules/api-key/api-key.guard.d.ts +7 -0
  150. package/server/dist/modules/api-key/api-key.guard.js +40 -0
  151. package/server/dist/modules/api-key/api-key.guard.js.map +1 -0
  152. package/server/dist/modules/api-key/api-key.module.d.ts +2 -0
  153. package/server/dist/modules/api-key/api-key.module.js +28 -0
  154. package/server/dist/modules/api-key/api-key.module.js.map +1 -0
  155. package/server/dist/modules/api-key/api-key.service.d.ts +15 -0
  156. package/server/dist/modules/api-key/api-key.service.js +81 -0
  157. package/server/dist/modules/api-key/api-key.service.js.map +1 -0
  158. package/server/dist/modules/article/article-revision.entity.d.ts +11 -0
  159. package/server/dist/modules/article/article-revision.entity.js +53 -0
  160. package/server/dist/modules/article/article-revision.entity.js.map +1 -0
  161. package/server/dist/modules/article/article.controller.d.ts +32 -0
  162. package/server/dist/modules/article/article.controller.js +242 -0
  163. package/server/dist/modules/article/article.controller.js.map +1 -0
  164. package/server/dist/modules/article/article.entity.d.ts +24 -0
  165. package/server/dist/modules/article/article.entity.js +133 -0
  166. package/server/dist/modules/article/article.entity.js.map +1 -0
  167. package/server/dist/modules/article/article.module.d.ts +2 -0
  168. package/server/dist/modules/article/article.module.js +42 -0
  169. package/server/dist/modules/article/article.module.js.map +1 -0
  170. package/server/dist/modules/article/article.service.d.ts +38 -0
  171. package/server/dist/modules/article/article.service.js +357 -0
  172. package/server/dist/modules/article/article.service.js.map +1 -0
  173. package/server/dist/modules/article/article.util.d.ts +1 -0
  174. package/server/dist/modules/article/article.util.js +9 -0
  175. package/server/dist/modules/article/article.util.js.map +1 -0
  176. package/server/dist/modules/article/scheduled-publish.service.d.ts +13 -0
  177. package/server/dist/modules/article/scheduled-publish.service.js +65 -0
  178. package/server/dist/modules/article/scheduled-publish.service.js.map +1 -0
  179. package/server/dist/modules/auth/auth.controller.d.ts +12 -0
  180. package/server/dist/modules/auth/auth.controller.js +66 -0
  181. package/server/dist/modules/auth/auth.controller.js.map +1 -0
  182. package/server/dist/modules/auth/auth.module.d.ts +2 -0
  183. package/server/dist/modules/auth/auth.module.js +41 -0
  184. package/server/dist/modules/auth/auth.module.js.map +1 -0
  185. package/server/dist/modules/auth/auth.service.d.ts +26 -0
  186. package/server/dist/modules/auth/auth.service.js +128 -0
  187. package/server/dist/modules/auth/auth.service.js.map +1 -0
  188. package/server/dist/modules/auth/jwt-auth.guard.d.ts +7 -0
  189. package/server/dist/modules/auth/jwt-auth.guard.js +30 -0
  190. package/server/dist/modules/auth/jwt-auth.guard.js.map +1 -0
  191. package/server/dist/modules/auth/jwt.strategy.d.ts +9 -0
  192. package/server/dist/modules/auth/jwt.strategy.js +39 -0
  193. package/server/dist/modules/auth/jwt.strategy.js.map +1 -0
  194. package/server/dist/modules/auth/roles.guard.d.ts +10 -0
  195. package/server/dist/modules/auth/roles.guard.js +46 -0
  196. package/server/dist/modules/auth/roles.guard.js.map +1 -0
  197. package/server/dist/modules/category/category.controller.d.ts +11 -0
  198. package/server/dist/modules/category/category.controller.js +91 -0
  199. package/server/dist/modules/category/category.controller.js.map +1 -0
  200. package/server/dist/modules/category/category.entity.d.ts +9 -0
  201. package/server/dist/modules/category/category.entity.js +60 -0
  202. package/server/dist/modules/category/category.entity.js.map +1 -0
  203. package/server/dist/modules/category/category.module.d.ts +2 -0
  204. package/server/dist/modules/category/category.module.js +27 -0
  205. package/server/dist/modules/category/category.module.js.map +1 -0
  206. package/server/dist/modules/category/category.service.d.ts +12 -0
  207. package/server/dist/modules/category/category.service.js +90 -0
  208. package/server/dist/modules/category/category.service.js.map +1 -0
  209. package/server/dist/modules/comment/comment.controller.d.ts +12 -0
  210. package/server/dist/modules/comment/comment.controller.js +100 -0
  211. package/server/dist/modules/comment/comment.controller.js.map +1 -0
  212. package/server/dist/modules/comment/comment.entity.d.ts +17 -0
  213. package/server/dist/modules/comment/comment.entity.js +104 -0
  214. package/server/dist/modules/comment/comment.entity.js.map +1 -0
  215. package/server/dist/modules/comment/comment.module.d.ts +2 -0
  216. package/server/dist/modules/comment/comment.module.js +39 -0
  217. package/server/dist/modules/comment/comment.module.js.map +1 -0
  218. package/server/dist/modules/comment/comment.service.d.ts +26 -0
  219. package/server/dist/modules/comment/comment.service.js +182 -0
  220. package/server/dist/modules/comment/comment.service.js.map +1 -0
  221. package/server/dist/modules/comment/html.d.ts +15 -0
  222. package/server/dist/modules/comment/html.js +632 -0
  223. package/server/dist/modules/comment/html.js.map +1 -0
  224. package/server/dist/modules/file/file.controller.d.ts +10 -0
  225. package/server/dist/modules/file/file.controller.js +84 -0
  226. package/server/dist/modules/file/file.controller.js.map +1 -0
  227. package/server/dist/modules/file/file.entity.d.ts +9 -0
  228. package/server/dist/modules/file/file.entity.js +60 -0
  229. package/server/dist/modules/file/file.entity.js.map +1 -0
  230. package/server/dist/modules/file/file.module.d.ts +2 -0
  231. package/server/dist/modules/file/file.module.js +27 -0
  232. package/server/dist/modules/file/file.module.js.map +1 -0
  233. package/server/dist/modules/file/file.service.d.ts +17 -0
  234. package/server/dist/modules/file/file.service.js +111 -0
  235. package/server/dist/modules/file/file.service.js.map +1 -0
  236. package/server/dist/modules/health/health.controller.d.ts +11 -0
  237. package/server/dist/modules/health/health.controller.js +57 -0
  238. package/server/dist/modules/health/health.controller.js.map +1 -0
  239. package/server/dist/modules/health/health.module.d.ts +2 -0
  240. package/server/dist/modules/health/health.module.js +20 -0
  241. package/server/dist/modules/health/health.module.js.map +1 -0
  242. package/server/dist/modules/install/install.controller.d.ts +11 -0
  243. package/server/dist/modules/install/install.controller.js +49 -0
  244. package/server/dist/modules/install/install.controller.js.map +1 -0
  245. package/server/dist/modules/install/install.module.d.ts +2 -0
  246. package/server/dist/modules/install/install.module.js +26 -0
  247. package/server/dist/modules/install/install.module.js.map +1 -0
  248. package/server/dist/modules/install/install.service.d.ts +12 -0
  249. package/server/dist/modules/install/install.service.js +63 -0
  250. package/server/dist/modules/install/install.service.js.map +1 -0
  251. package/server/dist/modules/knowledge/knowledge.controller.d.ts +14 -0
  252. package/server/dist/modules/knowledge/knowledge.controller.js +128 -0
  253. package/server/dist/modules/knowledge/knowledge.controller.js.map +1 -0
  254. package/server/dist/modules/knowledge/knowledge.entity.d.ts +18 -0
  255. package/server/dist/modules/knowledge/knowledge.entity.js +109 -0
  256. package/server/dist/modules/knowledge/knowledge.entity.js.map +1 -0
  257. package/server/dist/modules/knowledge/knowledge.module.d.ts +2 -0
  258. package/server/dist/modules/knowledge/knowledge.module.js +27 -0
  259. package/server/dist/modules/knowledge/knowledge.module.js.map +1 -0
  260. package/server/dist/modules/knowledge/knowledge.service.d.ts +14 -0
  261. package/server/dist/modules/knowledge/knowledge.service.js +144 -0
  262. package/server/dist/modules/knowledge/knowledge.service.js.map +1 -0
  263. package/server/dist/modules/page/page.controller.d.ts +12 -0
  264. package/server/dist/modules/page/page.controller.js +102 -0
  265. package/server/dist/modules/page/page.controller.js.map +1 -0
  266. package/server/dist/modules/page/page.entity.d.ts +15 -0
  267. package/server/dist/modules/page/page.entity.js +94 -0
  268. package/server/dist/modules/page/page.entity.js.map +1 -0
  269. package/server/dist/modules/page/page.module.d.ts +2 -0
  270. package/server/dist/modules/page/page.module.js +27 -0
  271. package/server/dist/modules/page/page.module.js.map +1 -0
  272. package/server/dist/modules/page/page.service.d.ts +12 -0
  273. package/server/dist/modules/page/page.service.js +98 -0
  274. package/server/dist/modules/page/page.service.js.map +1 -0
  275. package/server/dist/modules/search/search.controller.d.ts +8 -0
  276. package/server/dist/modules/search/search.controller.js +67 -0
  277. package/server/dist/modules/search/search.controller.js.map +1 -0
  278. package/server/dist/modules/search/search.entity.d.ts +8 -0
  279. package/server/dist/modules/search/search.entity.js +59 -0
  280. package/server/dist/modules/search/search.entity.js.map +1 -0
  281. package/server/dist/modules/search/search.module.d.ts +2 -0
  282. package/server/dist/modules/search/search.module.js +27 -0
  283. package/server/dist/modules/search/search.module.js.map +1 -0
  284. package/server/dist/modules/search/search.service.d.ts +12 -0
  285. package/server/dist/modules/search/search.service.js +84 -0
  286. package/server/dist/modules/search/search.service.js.map +1 -0
  287. package/server/dist/modules/setting/setting.constant.d.ts +3 -0
  288. package/server/dist/modules/setting/setting.constant.js +25 -0
  289. package/server/dist/modules/setting/setting.constant.js.map +1 -0
  290. package/server/dist/modules/setting/setting.controller.d.ts +12 -0
  291. package/server/dist/modules/setting/setting.controller.js +77 -0
  292. package/server/dist/modules/setting/setting.controller.js.map +1 -0
  293. package/server/dist/modules/setting/setting.entity.d.ts +26 -0
  294. package/server/dist/modules/setting/setting.entity.js +149 -0
  295. package/server/dist/modules/setting/setting.entity.js.map +1 -0
  296. package/server/dist/modules/setting/setting.module.d.ts +2 -0
  297. package/server/dist/modules/setting/setting.module.js +28 -0
  298. package/server/dist/modules/setting/setting.module.js.map +1 -0
  299. package/server/dist/modules/setting/setting.service.d.ts +10 -0
  300. package/server/dist/modules/setting/setting.service.js +106 -0
  301. package/server/dist/modules/setting/setting.service.js.map +1 -0
  302. package/server/dist/modules/smtp/mail.util.d.ts +6 -0
  303. package/server/dist/modules/smtp/mail.util.js +33 -0
  304. package/server/dist/modules/smtp/mail.util.js.map +1 -0
  305. package/server/dist/modules/smtp/smtp.controller.d.ts +9 -0
  306. package/server/dist/modules/smtp/smtp.controller.js +69 -0
  307. package/server/dist/modules/smtp/smtp.controller.js.map +1 -0
  308. package/server/dist/modules/smtp/smtp.entity.d.ts +9 -0
  309. package/server/dist/modules/smtp/smtp.entity.js +60 -0
  310. package/server/dist/modules/smtp/smtp.entity.js.map +1 -0
  311. package/server/dist/modules/smtp/smtp.module.d.ts +2 -0
  312. package/server/dist/modules/smtp/smtp.module.js +28 -0
  313. package/server/dist/modules/smtp/smtp.module.js.map +1 -0
  314. package/server/dist/modules/smtp/smtp.service.d.ts +11 -0
  315. package/server/dist/modules/smtp/smtp.service.js +83 -0
  316. package/server/dist/modules/smtp/smtp.service.js.map +1 -0
  317. package/server/dist/modules/tag/tag.controller.d.ts +12 -0
  318. package/server/dist/modules/tag/tag.controller.js +101 -0
  319. package/server/dist/modules/tag/tag.controller.js.map +1 -0
  320. package/server/dist/modules/tag/tag.entity.d.ts +9 -0
  321. package/server/dist/modules/tag/tag.entity.js +59 -0
  322. package/server/dist/modules/tag/tag.entity.js.map +1 -0
  323. package/server/dist/modules/tag/tag.module.d.ts +2 -0
  324. package/server/dist/modules/tag/tag.module.js +27 -0
  325. package/server/dist/modules/tag/tag.module.js.map +1 -0
  326. package/server/dist/modules/tag/tag.service.d.ts +13 -0
  327. package/server/dist/modules/tag/tag.service.js +104 -0
  328. package/server/dist/modules/tag/tag.service.js.map +1 -0
  329. package/server/dist/modules/user/user.controller.d.ts +13 -0
  330. package/server/dist/modules/user/user.controller.js +115 -0
  331. package/server/dist/modules/user/user.controller.js.map +1 -0
  332. package/server/dist/modules/user/user.entity.d.ts +15 -0
  333. package/server/dist/modules/user/user.entity.js +96 -0
  334. package/server/dist/modules/user/user.entity.js.map +1 -0
  335. package/server/dist/modules/user/user.module.d.ts +2 -0
  336. package/server/dist/modules/user/user.module.js +28 -0
  337. package/server/dist/modules/user/user.module.js.map +1 -0
  338. package/server/dist/modules/user/user.service.d.ts +16 -0
  339. package/server/dist/modules/user/user.service.js +152 -0
  340. package/server/dist/modules/user/user.service.js.map +1 -0
  341. package/server/dist/modules/view/view.controller.d.ts +11 -0
  342. package/server/dist/modules/view/view.controller.js +92 -0
  343. package/server/dist/modules/view/view.controller.js.map +1 -0
  344. package/server/dist/modules/view/view.entity.d.ts +14 -0
  345. package/server/dist/modules/view/view.entity.js +88 -0
  346. package/server/dist/modules/view/view.entity.js.map +1 -0
  347. package/server/dist/modules/view/view.module.d.ts +2 -0
  348. package/server/dist/modules/view/view.module.js +27 -0
  349. package/server/dist/modules/view/view.module.js.map +1 -0
  350. package/server/dist/modules/view/view.service.d.ts +11 -0
  351. package/server/dist/modules/view/view.service.js +89 -0
  352. package/server/dist/modules/view/view.service.js.map +1 -0
  353. package/server/dist/modules/webhook/webhook.controller.d.ts +12 -0
  354. package/server/dist/modules/webhook/webhook.controller.js +63 -0
  355. package/server/dist/modules/webhook/webhook.controller.js.map +1 -0
  356. package/server/dist/modules/webhook/webhook.entity.d.ts +9 -0
  357. package/server/dist/modules/webhook/webhook.entity.js +54 -0
  358. package/server/dist/modules/webhook/webhook.entity.js.map +1 -0
  359. package/server/dist/modules/webhook/webhook.module.d.ts +2 -0
  360. package/server/dist/modules/webhook/webhook.module.js +27 -0
  361. package/server/dist/modules/webhook/webhook.module.js.map +1 -0
  362. package/server/dist/modules/webhook/webhook.service.d.ts +16 -0
  363. package/server/dist/modules/webhook/webhook.service.js +97 -0
  364. package/server/dist/modules/webhook/webhook.service.js.map +1 -0
  365. package/server/dist/public/favicon.png +0 -0
  366. package/server/dist/public/index.html +439 -0
  367. package/server/dist/public/swagger/custom.css +11 -0
  368. package/server/dist/starter.d.ts +1 -0
  369. package/server/dist/starter.js +84 -0
  370. package/server/dist/starter.js.map +1 -0
  371. package/server/dist/tsconfig.build.tsbuildinfo +16966 -0
  372. package/server/dist/utils/date.util.d.ts +1 -0
  373. package/server/dist/utils/date.util.js +13 -0
  374. package/server/dist/utils/date.util.js.map +1 -0
  375. package/server/dist/utils/ip.util.d.ts +2 -0
  376. package/server/dist/utils/ip.util.js +27 -0
  377. package/server/dist/utils/ip.util.js.map +1 -0
  378. package/server/dist/utils/markdown.util.d.ts +4 -0
  379. package/server/dist/utils/markdown.util.js +42 -0
  380. package/server/dist/utils/markdown.util.js.map +1 -0
  381. package/server/dist/utils/oss/aliyun-oss-client.d.ts +6 -0
  382. package/server/dist/utils/oss/aliyun-oss-client.js +28 -0
  383. package/server/dist/utils/oss/aliyun-oss-client.js.map +1 -0
  384. package/server/dist/utils/oss/oss-client.d.ts +6 -0
  385. package/server/dist/utils/oss/oss-client.js +10 -0
  386. package/server/dist/utils/oss/oss-client.js.map +1 -0
  387. package/server/dist/utils/oss.util.d.ts +13 -0
  388. package/server/dist/utils/oss.util.js +49 -0
  389. package/server/dist/utils/oss.util.js.map +1 -0
  390. package/server/dist/utils/ua.util.d.ts +9 -0
  391. package/server/dist/utils/ua.util.js +36 -0
  392. package/server/dist/utils/ua.util.js.map +1 -0
  393. package/server/dist/utils/uniqueid.util.d.ts +1 -0
  394. package/server/dist/utils/uniqueid.util.js +9 -0
  395. package/server/dist/utils/uniqueid.util.js.map +1 -0
  396. package/server/dist/utils/upload.util.d.ts +5 -0
  397. package/server/dist/utils/upload.util.js +34 -0
  398. package/server/dist/utils/upload.util.js.map +1 -0
  399. package/server/dist/utils/user.util.d.ts +1 -0
  400. package/server/dist/utils/user.util.js +18 -0
  401. package/server/dist/utils/user.util.js.map +1 -0
  402. package/server/ecosystem.config.js +18 -0
  403. package/server/package.json +146 -0
  404. package/server/public/favicon.png +0 -0
  405. package/server/public/index.html +439 -0
  406. package/server/public/swagger/custom.css +11 -0
  407. package/templates/config.default.json +12 -0
  408. package/templates/docker-compose.prod.yml +56 -0
  409. package/templates/docker-compose.yml +27 -0
  410. package/templates/env.default +11 -0
  411. package/templates/package.json +10 -0
  412. package/ui/banner.js +22 -0
  413. package/ui/interactive.js +168 -0
  414. package/ui/theme.js +25 -0
  415. package/CONTRIBUTING.md +0 -122
  416. package/client/bin/reactpress-client.js +0 -190
  417. package/scripts/reactpress-cli.js +0 -90
  418. package/scripts/reactpress-deploy.sh +0 -47
  419. package/scripts/reactpress-dev.js +0 -39
  420. package/scripts/reactpress.js +0 -90
@@ -0,0 +1,168 @@
1
+ const inquirer = require('inquirer');
2
+ const open = require('open');
3
+ const { printBanner } = require('./banner');
4
+ const { brand, label } = require('./theme');
5
+ const { ensureOriginalCwd } = require('../lib/root');
6
+ const { ensureProjectEnvironment } = require('../lib/bootstrap');
7
+ const { runDev } = require('../lib/dev');
8
+ const { runApiDev } = require('../lib/api-dev');
9
+ const { runLifecycleCommand } = require('../lib/lifecycle');
10
+ const { runDockerCommand } = require('../lib/docker');
11
+ const { printUnifiedStatus } = require('../lib/status');
12
+ const { runDoctor } = require('../lib/doctor');
13
+ const { runBuild } = require('../lib/build');
14
+ const { runNodeScript } = require('../lib/spawn');
15
+ const { getClientBin } = require('../lib/paths');
16
+ const { loadClientSiteUrl } = require('../lib/http');
17
+ const { t } = require('../lib/i18n');
18
+
19
+ function getMenuActions() {
20
+ return [
21
+ { name: t('menu.dev'), value: 'dev' },
22
+ { name: t('menu.init'), value: 'init' },
23
+ { name: t('menu.status'), value: 'status' },
24
+ { name: t('menu.doctor'), value: 'doctor' },
25
+ new inquirer.Separator(),
26
+ { name: t('menu.devApi'), value: 'dev:api' },
27
+ { name: t('menu.devClient'), value: 'dev:client' },
28
+ { name: t('menu.serverStart'), value: 'server:start' },
29
+ { name: t('menu.serverStop'), value: 'server:stop' },
30
+ { name: t('menu.serverRestart'), value: 'server:restart' },
31
+ new inquirer.Separator(),
32
+ { name: t('menu.build'), value: 'build' },
33
+ { name: t('menu.dockerStart'), value: 'docker:start' },
34
+ { name: t('menu.dockerUp'), value: 'docker:up' },
35
+ { name: t('menu.dockerStop'), value: 'docker:stop' },
36
+ new inquirer.Separator(),
37
+ { name: t('menu.openAdmin'), value: 'open:admin' },
38
+ { name: t('menu.publish'), value: 'publish' },
39
+ { name: t('menu.exit'), value: 'exit' },
40
+ ];
41
+ }
42
+
43
+ async function runMenuAction(action, projectRoot) {
44
+ switch (action) {
45
+ case 'dev':
46
+ console.log(label(t('menu.startingDev')));
47
+ await runDev(projectRoot);
48
+ return false;
49
+ case 'init': {
50
+ console.log(label(t('menu.initProject')));
51
+ const result = await ensureProjectEnvironment(projectRoot);
52
+ console.log(brand.success(result.message || t('menu.done')));
53
+ return true;
54
+ }
55
+ case 'status':
56
+ await printUnifiedStatus(projectRoot);
57
+ return true;
58
+ case 'doctor': {
59
+ const code = await runDoctor(projectRoot);
60
+ if (code !== 0) process.exit(code);
61
+ return true;
62
+ }
63
+ case 'dev:api':
64
+ await runApiDev(projectRoot);
65
+ return false;
66
+ case 'dev:client':
67
+ await runNodeScript(getClientBin(), [], { cwd: projectRoot });
68
+ return false;
69
+ case 'server:start': {
70
+ const code = await runLifecycleCommand('start', projectRoot);
71
+ if (code !== 0) process.exit(code);
72
+ return true;
73
+ }
74
+ case 'server:stop':
75
+ await runLifecycleCommand('stop', projectRoot);
76
+ return true;
77
+ case 'server:restart': {
78
+ const code = await runLifecycleCommand('restart', projectRoot);
79
+ if (code !== 0) process.exit(code);
80
+ return true;
81
+ }
82
+ case 'build':
83
+ await runBuild('all', projectRoot);
84
+ return true;
85
+ case 'docker:start':
86
+ await runDockerCommand('start', projectRoot);
87
+ return false;
88
+ case 'docker:up':
89
+ await runDockerCommand('up', projectRoot);
90
+ return true;
91
+ case 'docker:stop':
92
+ await runDockerCommand('down', projectRoot);
93
+ return true;
94
+ case 'open:admin': {
95
+ const url = loadClientSiteUrl(projectRoot);
96
+ console.log(label(t('menu.opening', { url })));
97
+ await open(url);
98
+ return true;
99
+ }
100
+ case 'publish': {
101
+ const prev = process.argv.slice();
102
+ process.argv = [process.argv[0], process.argv[1], '--publish'];
103
+ await require('../lib/publish').main();
104
+ process.argv = prev;
105
+ return true;
106
+ }
107
+ case 'exit':
108
+ console.log(brand.muted(t('menu.goodbye')));
109
+ return false;
110
+ default:
111
+ return true;
112
+ }
113
+ }
114
+
115
+ async function runInteractiveLoop() {
116
+ const projectRoot = ensureOriginalCwd();
117
+ printBanner();
118
+
119
+ let loop = true;
120
+ while (loop) {
121
+ const { action } = await inquirer.prompt([
122
+ {
123
+ type: 'list',
124
+ name: 'action',
125
+ message: t('menu.prompt'),
126
+ pageSize: 14,
127
+ choices: getMenuActions(),
128
+ },
129
+ ]);
130
+
131
+ if (action === 'exit') {
132
+ console.log(brand.muted(t('menu.goodbye')));
133
+ break;
134
+ }
135
+
136
+ try {
137
+ const stay = await runMenuAction(action, projectRoot);
138
+ if (!stay) {
139
+ break;
140
+ }
141
+
142
+ if (action !== 'status') {
143
+ const { again } = await inquirer.prompt([
144
+ {
145
+ type: 'confirm',
146
+ name: 'again',
147
+ message: t('menu.back'),
148
+ default: true,
149
+ },
150
+ ]);
151
+ loop = again;
152
+ }
153
+ } catch (err) {
154
+ console.error(brand.error(` ${err.message || err}`));
155
+ const { retry } = await inquirer.prompt([
156
+ {
157
+ type: 'confirm',
158
+ name: 'retry',
159
+ message: t('menu.retry'),
160
+ default: true,
161
+ },
162
+ ]);
163
+ loop = retry;
164
+ }
165
+ }
166
+ }
167
+
168
+ module.exports = { runInteractiveLoop, runMenuAction };
package/ui/theme.js ADDED
@@ -0,0 +1,25 @@
1
+ const chalk = require('chalk');
2
+
3
+ const brand = {
4
+ primary: chalk.hex('#6366f1'),
5
+ accent: chalk.hex('#22d3ee'),
6
+ success: chalk.green,
7
+ warn: chalk.yellow,
8
+ error: chalk.red,
9
+ muted: chalk.gray,
10
+ bold: chalk.bold,
11
+ };
12
+
13
+ function label(text) {
14
+ return brand.primary(`› ${text}`);
15
+ }
16
+
17
+ function ok(text) {
18
+ return brand.success(`✓ ${text}`);
19
+ }
20
+
21
+ function fail(text) {
22
+ return brand.error(`✗ ${text}`);
23
+ }
24
+
25
+ module.exports = { brand, label, ok, fail };
package/CONTRIBUTING.md DELETED
@@ -1,122 +0,0 @@
1
- # Contributing to ReactPress
2
-
3
- Thank you for your interest in contributing to ReactPress! We welcome contributions from the community to help improve the project.
4
-
5
- ## Code of Conduct
6
-
7
- Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md) to ensure a welcoming and inclusive environment for all contributors.
8
-
9
- ## Getting Started
10
-
11
- 1. Fork the repository
12
- 2. Clone your fork: `git clone https://github.com/your-username/reactpress.git`
13
- 3. Create a new branch: `git checkout -b feature/your-feature-name`
14
- 4. Make your changes
15
- 5. Commit your changes: `git commit -m "Add your feature description"`
16
- 6. Push to your fork: `git push origin feature/your-feature-name`
17
- 7. Create a pull request
18
-
19
- ## Development Setup
20
-
21
- ### Prerequisites
22
-
23
- - Node.js >= 16.5.0
24
- - pnpm >= 7.0.0
25
- - MySQL 5.7 or higher
26
-
27
- ### Installation
28
-
29
- ```bash
30
- # Clone the repository
31
- git clone https://github.com/fecommunity/reactpress.git
32
- cd reactpress
33
-
34
- # Install dependencies
35
- pnpm install
36
-
37
- # Start development servers
38
- pnpm run dev
39
- ```
40
-
41
- ## Project Structure
42
-
43
- ReactPress follows a monorepo structure:
44
-
45
- ```
46
- reactpress/
47
- ├── client/ # Next.js frontend application
48
- ├── server/ # NestJS backend API
49
- ├── toolkit/ # Auto-generated API client SDK
50
- ├── templates/ # Project templates
51
- ├── scripts/ # Build and deployment scripts
52
- └── docs/ # Documentation
53
- ```
54
-
55
- ## Development Workflow
56
-
57
- ### Running Services
58
-
59
- ```bash
60
- # Start both client and server in development mode
61
- pnpm run dev
62
-
63
- # Start only the server
64
- pnpm run dev:server
65
-
66
- # Start only the client
67
- pnpm run dev:client
68
- ```
69
-
70
- ### Building Packages
71
-
72
- ```bash
73
- # Build all packages
74
- pnpm run build
75
-
76
- # Build specific packages
77
- pnpm run build:client
78
- pnpm run build:server
79
- pnpm run build:toolkit
80
- ```
81
-
82
- ### Testing
83
-
84
- ```bash
85
- # Run all tests
86
- pnpm test
87
-
88
- # Run tests for specific package
89
- pnpm test --dir client
90
- pnpm test --dir server
91
- ```
92
-
93
- ## Code Style
94
-
95
- - Follow the existing code style in the project
96
- - Use TypeScript for type safety
97
- - Write clear, concise commit messages
98
- - Update documentation as needed
99
-
100
- ## Pull Request Process
101
-
102
- 1. Ensure your changes are well-tested
103
- 2. Update the README.md if you've changed functionality
104
- 3. Create a pull request with a clear title and description
105
- 4. Link any related issues in your pull request description
106
- 5. Be responsive to feedback during the review process
107
-
108
- ## Reporting Issues
109
-
110
- If you find a bug or have a feature request, please [create an issue](https://github.com/fecommunity/reactpress/issues/new) on GitHub. Include as much detail as possible to help us understand and reproduce the problem.
111
-
112
- ## Publishing Packages
113
-
114
- To publish packages to npm:
115
-
116
- 1. Ensure you're logged into npm: `pnpm login`
117
- 2. Run the publish script: `pnpm run publish`
118
- 3. Follow the interactive prompts to select packages and version increments
119
-
120
- ## License
121
-
122
- By contributing to ReactPress, you agree that your contributions will be licensed under the MIT License.
@@ -1,190 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * ReactPress Client CLI Entry Point
5
- * This script allows starting the ReactPress client via npx
6
- * Supports both regular and PM2 startup modes
7
- */
8
-
9
- const path = require('path');
10
- const fs = require('fs');
11
- const { spawn, spawnSync } = require('child_process');
12
-
13
- // Capture the original working directory where npx was executed
14
- // BUT prioritize the REACTPRESS_ORIGINAL_CWD environment variable if it exists
15
- // This ensures consistency when running via pnpm dev from root directory
16
- const originalCwd = process.env.REACTPRESS_ORIGINAL_CWD || process.cwd();
17
-
18
- // Get command line arguments
19
- const args = process.argv.slice(2);
20
- const usePM2 = args.includes('--pm2');
21
- const showHelp = args.includes('--help') || args.includes('-h');
22
-
23
- // Show help if requested
24
- if (showHelp) {
25
- console.log(`
26
- ReactPress Client - Next.js-based frontend for ReactPress CMS
27
-
28
- Usage:
29
- npx @fecommunity/reactpress-client [options]
30
-
31
- Options:
32
- --pm2 Start client with PM2 process manager
33
- --help, -h Show this help message
34
-
35
- Examples:
36
- npx @fecommunity/reactpress-client # Start client normally
37
- npx @fecommunity/reactpress-client --pm2 # Start client with PM2
38
- npx @fecommunity/reactpress-client --help # Show this help message
39
- `);
40
- process.exit(0);
41
- }
42
-
43
- // Get the directory where this script is located
44
- const binDir = __dirname;
45
- const clientDir = path.join(binDir, '..');
46
- const nextDir = path.join(clientDir, '.next');
47
-
48
- // Function to check if PM2 is installed
49
- function isPM2Installed() {
50
- try {
51
- require.resolve('pm2');
52
- return true;
53
- } catch (e) {
54
- // Check if PM2 is installed globally
55
- try {
56
- spawnSync('pm2', ['--version'], { stdio: 'ignore' });
57
- return true;
58
- } catch (e) {
59
- return false;
60
- }
61
- }
62
- }
63
-
64
- // Function to install PM2
65
- function installPM2() {
66
- console.log('[ReactPress Client] Installing PM2...');
67
- const installResult = spawnSync('npm', ['install', 'pm2', '--no-save'], {
68
- stdio: 'inherit',
69
- cwd: clientDir
70
- });
71
-
72
- if (installResult.status !== 0) {
73
- console.error('[ReactPress Client] Failed to install PM2');
74
- return false;
75
- }
76
-
77
- return true;
78
- }
79
-
80
- // Function to start with PM2
81
- function startWithPM2() {
82
- // Check if PM2 is installed
83
- if (!isPM2Installed()) {
84
- // Try to install PM2
85
- if (!installPM2()) {
86
- console.error('[ReactPress Client] Cannot start with PM2');
87
- process.exit(1);
88
- }
89
- }
90
-
91
- // Check if the client is built
92
- if (!fs.existsSync(nextDir)) {
93
- console.log('[ReactPress Client] Client not built yet. Building...');
94
-
95
- // Try to build the client
96
- const buildResult = spawnSync('npm', ['run', 'build'], {
97
- stdio: 'inherit',
98
- cwd: clientDir
99
- });
100
-
101
- if (buildResult.status !== 0) {
102
- console.error('[ReactPress Client] Failed to build client');
103
- process.exit(1);
104
- }
105
- }
106
-
107
- console.log('[ReactPress Client] Starting with PM2...');
108
-
109
- // Use PM2 to start the Next.js production server
110
- let pm2Command = 'pm2';
111
- try {
112
- // Try to resolve PM2 path
113
- pm2Command = path.join(clientDir, 'node_modules', '.bin', 'pm2');
114
- if (!fs.existsSync(pm2Command)) {
115
- pm2Command = 'pm2';
116
- }
117
- } catch (e) {
118
- pm2Command = 'pm2';
119
- }
120
-
121
- // Start with PM2 using direct command
122
- const pm2 = spawn(pm2Command, ['start', 'npm', '--name', 'reactpress-client', '--', 'run', 'start'], {
123
- stdio: 'inherit',
124
- cwd: clientDir
125
- });
126
-
127
- pm2.on('close', (code) => {
128
- console.log(`[ReactPress Client] PM2 process exited with code ${code}`);
129
- process.exit(code);
130
- });
131
-
132
- pm2.on('error', (error) => {
133
- console.error('[ReactPress Client] Failed to start with PM2:', error);
134
- process.exit(1);
135
- });
136
- }
137
-
138
- // Function to start with regular Node.js (npm start)
139
- function startWithNode() {
140
- // Check if the app is built
141
- if (!fs.existsSync(nextDir)) {
142
- console.log('[ReactPress Client] Client not built yet. Building...');
143
-
144
- // Try to build the client
145
- const buildResult = spawnSync('npm', ['run', 'build'], {
146
- stdio: 'inherit',
147
- cwd: clientDir
148
- });
149
-
150
- if (buildResult.status !== 0) {
151
- console.error('[ReactPress Client] Failed to build client');
152
- process.exit(1);
153
- }
154
- }
155
-
156
- // ONLY set the environment variable if it's not already set
157
- // This preserves the value set by set-env.js when running pnpm dev from root
158
- if (!process.env.REACTPRESS_ORIGINAL_CWD) {
159
- process.env.REACTPRESS_ORIGINAL_CWD = originalCwd;
160
- } else {
161
- console.log(`[ReactPress Client] Using existing REACTPRESS_ORIGINAL_CWD: ${process.env.REACTPRESS_ORIGINAL_CWD}`);
162
- }
163
-
164
- // Change to the client directory
165
- process.chdir(clientDir);
166
-
167
- // Start with npm start
168
- console.log('[ReactPress Client] Starting with npm start...');
169
- const npmStart = spawn('npm', ['start'], {
170
- stdio: 'inherit',
171
- cwd: clientDir
172
- });
173
-
174
- npmStart.on('close', (code) => {
175
- console.log(`[ReactPress Client] npm start process exited with code ${code}`);
176
- process.exit(code);
177
- });
178
-
179
- npmStart.on('error', (error) => {
180
- console.error('[ReactPress Client] Failed to start with npm start:', error);
181
- process.exit(1);
182
- });
183
- }
184
-
185
- // Main execution
186
- if (usePM2) {
187
- startWithPM2();
188
- } else {
189
- startWithNode();
190
- }
@@ -1,90 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * ReactPress CLI - Main entry point for all ReactPress commands
5
- * This script allows users to run reactpress commands after installing the package globally
6
- */
7
-
8
- const { Command } = require('commander');
9
- const { spawn } = require('child_process');
10
- const path = require('path');
11
- const chalk = require('chalk');
12
-
13
- // Create the CLI program
14
- const program = new Command();
15
-
16
- // Get the directory where this script is located
17
- const binDir = __dirname;
18
- const rootDir = path.join(binDir, '..');
19
-
20
- // Server command
21
- program
22
- .command('server')
23
- .description('Manage the ReactPress server')
24
- .option('install', 'Launch the installation wizard')
25
- .option('start', 'Start the ReactPress server')
26
- .option('--pm2', 'Start server with PM2 process manager')
27
- .action((options) => {
28
- const serverScript = path.join(rootDir, 'scripts', 'reactpress-server.js');
29
-
30
- let args = [];
31
- if (options.install) {
32
- args.push('install');
33
- } else if (options.start) {
34
- args.push('start');
35
- }
36
-
37
- if (options.pm2) {
38
- args.push('--pm2');
39
- }
40
-
41
- const serverProcess = spawn('node', [serverScript, ...args], {
42
- stdio: 'inherit'
43
- });
44
-
45
- serverProcess.on('error', (error) => {
46
- console.error(chalk.red('[ReactPress CLI] Failed to start server:'), error);
47
- process.exit(1);
48
- });
49
- });
50
-
51
- // Client command
52
- program
53
- .command('client')
54
- .description('Manage the ReactPress client')
55
- .option('--pm2', 'Start client with PM2 process manager')
56
- .action((options) => {
57
- const clientScript = path.join(rootDir, 'client', 'bin', 'reactpress-client.js');
58
-
59
- let args = [];
60
- if (options.pm2) {
61
- args.push('--pm2');
62
- }
63
-
64
- const clientProcess = spawn('node', [clientScript, ...args], {
65
- stdio: 'inherit'
66
- });
67
-
68
- clientProcess.on('error', (error) => {
69
- console.error(chalk.red('[ReactPress CLI] Failed to start client:'), error);
70
- process.exit(1);
71
- });
72
- });
73
-
74
- // Set the version from package.json
75
- const packageJson = require(path.join(rootDir, 'package.json'));
76
- program.version(packageJson.version);
77
-
78
- // Configure help text
79
- program.on('--help', () => {
80
- console.log('');
81
- console.log('For more information, visit: https://github.com/fecommunity/reactpress');
82
- });
83
-
84
- // Parse the command line arguments
85
- program.parse(process.argv);
86
-
87
- // If no command is provided, show help
88
- if (!process.argv.slice(2).length) {
89
- program.outputHelp();
90
- }
@@ -1,47 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Exit on any error
4
- set -e
5
-
6
- # Logging function
7
- log() {
8
- echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
9
- }
10
-
11
- # Error handling
12
- error_exit() {
13
- log "ERROR: $1"
14
- exit 1
15
- }
16
-
17
- log "Starting deployment process..."
18
-
19
- # Update code
20
- log "Updating code from repository..."
21
- git checkout master || error_exit "Failed to checkout master branch"
22
- git pull || error_exit "Failed to pull latest changes"
23
-
24
- # Install dependencies
25
- log "Installing dependencies..."
26
- pnpm install || error_exit "Failed to install dependencies"
27
-
28
- # Build all packages using the unified build command
29
- log "Building all packages..."
30
- pnpm run build || error_exit "Failed to build packages"
31
-
32
- # Kill existing PM2 processes
33
- log "Stopping existing PM2 processes..."
34
- pm2 kill || log "No existing PM2 processes found"
35
-
36
- # Start services with PM2
37
- log "Starting services with PM2..."
38
- pnpm run pm2 || error_exit "Failed to start services with PM2"
39
-
40
- # Set up PM2 startup script
41
- log "Setting up PM2 startup script..."
42
- pm2 startup || log "Failed to setup PM2 startup script"
43
- pm2 save || error_exit "Failed to save PM2 configuration"
44
-
45
- log "Deployment completed successfully!"
46
-
47
- exit 0
@@ -1,39 +0,0 @@
1
- // scripts/dev.js
2
- const { spawn } = require('child_process');
3
- const path = require('path');
4
-
5
- // 获取当前工作目录
6
- const currentWorkingDir = process.cwd();
7
-
8
- // 设置环境变量
9
- process.env.REACTPRESS_ORIGINAL_CWD = currentWorkingDir;
10
-
11
- console.log(`设置 REACTPRESS_ORIGINAL_CWD: ${currentWorkingDir}`);
12
-
13
- // 执行构建命令
14
- const build = spawn('pnpm', ['build:toolkit'], {
15
- stdio: 'inherit',
16
- shell: true
17
- });
18
-
19
- build.on('close', (code) => {
20
- if (code !== 0) {
21
- console.error(`构建失败,退出码: ${code}`);
22
- process.exit(code);
23
- }
24
-
25
- // 执行并发命令
26
- const concurrently = spawn('npx', [
27
- 'concurrently',
28
- 'pnpm:dev:server',
29
- 'pnpm:dev:client'
30
- ], {
31
- stdio: 'inherit',
32
- shell: true,
33
- cwd: currentWorkingDir
34
- });
35
-
36
- concurrently.on('close', (code) => {
37
- process.exit(code);
38
- });
39
- });