@fecommunity/reactpress 3.0.3 → 3.0.4

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 (541) hide show
  1. package/bin/reactpress.js +127 -20
  2. package/dist/index.js +0 -0
  3. package/lib/build.js +25 -9
  4. package/lib/db-backup.js +21 -0
  5. package/lib/dev-banner.js +42 -10
  6. package/lib/dev.js +48 -29
  7. package/lib/docker.js +162 -44
  8. package/lib/doctor.js +71 -15
  9. package/lib/http.js +39 -4
  10. package/lib/i18n/strings.js +297 -40
  11. package/lib/lifecycle.js +43 -2
  12. package/lib/nginx.js +342 -0
  13. package/lib/project-type.js +72 -0
  14. package/lib/publish.js +46 -30
  15. package/lib/status.js +69 -45
  16. package/package.json +5 -6
  17. package/server/dist/dist/app.module.d.ts +2 -0
  18. package/server/dist/dist/app.module.js +105 -0
  19. package/server/dist/dist/app.module.js.map +1 -0
  20. package/server/dist/dist/common/api-messages.d.ts +32 -0
  21. package/server/dist/dist/common/api-messages.js +36 -0
  22. package/server/dist/dist/common/api-messages.js.map +1 -0
  23. package/server/dist/dist/filters/http-exception.filter.d.ts +4 -0
  24. package/server/dist/dist/filters/http-exception.filter.js +36 -0
  25. package/server/dist/dist/filters/http-exception.filter.js.map +1 -0
  26. package/server/dist/dist/generate-swagger.d.ts +1 -0
  27. package/server/dist/dist/generate-swagger.js +73 -0
  28. package/server/dist/dist/generate-swagger.js.map +1 -0
  29. package/server/dist/dist/interceptors/transform.interceptor.d.ts +9 -0
  30. package/server/dist/dist/interceptors/transform.interceptor.js +36 -0
  31. package/server/dist/dist/interceptors/transform.interceptor.js.map +1 -0
  32. package/server/dist/dist/logger/index.d.ts +4 -0
  33. package/server/dist/dist/logger/index.js +33 -0
  34. package/server/dist/dist/logger/index.js.map +1 -0
  35. package/server/dist/dist/main.d.ts +6 -0
  36. package/server/dist/dist/main.js +263 -0
  37. package/server/dist/dist/main.js.map +1 -0
  38. package/server/dist/dist/modules/api-key/api-key.controller.d.ts +14 -0
  39. package/server/dist/dist/modules/api-key/api-key.controller.js +63 -0
  40. package/server/dist/dist/modules/api-key/api-key.controller.js.map +1 -0
  41. package/server/dist/dist/modules/api-key/api-key.entity.d.ts +11 -0
  42. package/server/dist/dist/modules/api-key/api-key.entity.js +63 -0
  43. package/server/dist/dist/modules/api-key/api-key.entity.js.map +1 -0
  44. package/server/dist/dist/modules/api-key/api-key.guard.d.ts +7 -0
  45. package/server/dist/dist/modules/api-key/api-key.guard.js +40 -0
  46. package/server/dist/dist/modules/api-key/api-key.guard.js.map +1 -0
  47. package/server/dist/dist/modules/api-key/api-key.module.d.ts +2 -0
  48. package/server/dist/dist/modules/api-key/api-key.module.js +28 -0
  49. package/server/dist/dist/modules/api-key/api-key.module.js.map +1 -0
  50. package/server/dist/dist/modules/api-key/api-key.service.d.ts +15 -0
  51. package/server/dist/dist/modules/api-key/api-key.service.js +81 -0
  52. package/server/dist/dist/modules/api-key/api-key.service.js.map +1 -0
  53. package/server/dist/dist/modules/article/article-revision.entity.d.ts +11 -0
  54. package/server/dist/dist/modules/article/article-revision.entity.js +53 -0
  55. package/server/dist/dist/modules/article/article-revision.entity.js.map +1 -0
  56. package/server/dist/dist/modules/article/article.controller.d.ts +32 -0
  57. package/server/dist/dist/modules/article/article.controller.js +242 -0
  58. package/server/dist/dist/modules/article/article.controller.js.map +1 -0
  59. package/server/dist/dist/modules/article/article.entity.d.ts +24 -0
  60. package/server/dist/dist/modules/article/article.entity.js +133 -0
  61. package/server/dist/dist/modules/article/article.entity.js.map +1 -0
  62. package/server/dist/dist/modules/article/article.module.d.ts +2 -0
  63. package/server/dist/dist/modules/article/article.module.js +42 -0
  64. package/server/dist/dist/modules/article/article.module.js.map +1 -0
  65. package/server/dist/dist/modules/article/article.service.d.ts +38 -0
  66. package/server/dist/dist/modules/article/article.service.js +357 -0
  67. package/server/dist/dist/modules/article/article.service.js.map +1 -0
  68. package/server/dist/dist/modules/article/article.util.d.ts +1 -0
  69. package/server/dist/dist/modules/article/article.util.js +9 -0
  70. package/server/dist/dist/modules/article/article.util.js.map +1 -0
  71. package/server/dist/dist/modules/article/scheduled-publish.service.d.ts +13 -0
  72. package/server/dist/dist/modules/article/scheduled-publish.service.js +65 -0
  73. package/server/dist/dist/modules/article/scheduled-publish.service.js.map +1 -0
  74. package/server/dist/dist/modules/auth/auth.controller.d.ts +12 -0
  75. package/server/dist/dist/modules/auth/auth.controller.js +66 -0
  76. package/server/dist/dist/modules/auth/auth.controller.js.map +1 -0
  77. package/server/dist/dist/modules/auth/auth.module.d.ts +2 -0
  78. package/server/dist/dist/modules/auth/auth.module.js +41 -0
  79. package/server/dist/dist/modules/auth/auth.module.js.map +1 -0
  80. package/server/dist/dist/modules/auth/auth.service.d.ts +26 -0
  81. package/server/dist/dist/modules/auth/auth.service.js +128 -0
  82. package/server/dist/dist/modules/auth/auth.service.js.map +1 -0
  83. package/server/dist/dist/modules/auth/jwt-auth.guard.d.ts +7 -0
  84. package/server/dist/dist/modules/auth/jwt-auth.guard.js +30 -0
  85. package/server/dist/dist/modules/auth/jwt-auth.guard.js.map +1 -0
  86. package/server/dist/dist/modules/auth/jwt.strategy.d.ts +9 -0
  87. package/server/dist/dist/modules/auth/jwt.strategy.js +39 -0
  88. package/server/dist/dist/modules/auth/jwt.strategy.js.map +1 -0
  89. package/server/dist/dist/modules/auth/roles.guard.d.ts +10 -0
  90. package/server/dist/dist/modules/auth/roles.guard.js +46 -0
  91. package/server/dist/dist/modules/auth/roles.guard.js.map +1 -0
  92. package/server/dist/dist/modules/category/category.controller.d.ts +11 -0
  93. package/server/dist/dist/modules/category/category.controller.js +91 -0
  94. package/server/dist/dist/modules/category/category.controller.js.map +1 -0
  95. package/server/dist/dist/modules/category/category.entity.d.ts +9 -0
  96. package/server/dist/dist/modules/category/category.entity.js +60 -0
  97. package/server/dist/dist/modules/category/category.entity.js.map +1 -0
  98. package/server/dist/dist/modules/category/category.module.d.ts +2 -0
  99. package/server/dist/dist/modules/category/category.module.js +27 -0
  100. package/server/dist/dist/modules/category/category.module.js.map +1 -0
  101. package/server/dist/dist/modules/category/category.service.d.ts +12 -0
  102. package/server/dist/dist/modules/category/category.service.js +90 -0
  103. package/server/dist/dist/modules/category/category.service.js.map +1 -0
  104. package/server/dist/dist/modules/comment/comment.controller.d.ts +12 -0
  105. package/server/dist/dist/modules/comment/comment.controller.js +100 -0
  106. package/server/dist/dist/modules/comment/comment.controller.js.map +1 -0
  107. package/server/dist/dist/modules/comment/comment.entity.d.ts +17 -0
  108. package/server/dist/dist/modules/comment/comment.entity.js +104 -0
  109. package/server/dist/dist/modules/comment/comment.entity.js.map +1 -0
  110. package/server/dist/dist/modules/comment/comment.module.d.ts +2 -0
  111. package/server/dist/dist/modules/comment/comment.module.js +39 -0
  112. package/server/dist/dist/modules/comment/comment.module.js.map +1 -0
  113. package/server/dist/dist/modules/comment/comment.service.d.ts +26 -0
  114. package/server/dist/dist/modules/comment/comment.service.js +182 -0
  115. package/server/dist/dist/modules/comment/comment.service.js.map +1 -0
  116. package/server/dist/dist/modules/comment/html.d.ts +15 -0
  117. package/server/dist/dist/modules/comment/html.js +632 -0
  118. package/server/dist/dist/modules/comment/html.js.map +1 -0
  119. package/server/dist/dist/modules/file/file.controller.d.ts +10 -0
  120. package/server/dist/dist/modules/file/file.controller.js +84 -0
  121. package/server/dist/dist/modules/file/file.controller.js.map +1 -0
  122. package/server/dist/dist/modules/file/file.entity.d.ts +9 -0
  123. package/server/dist/dist/modules/file/file.entity.js +60 -0
  124. package/server/dist/dist/modules/file/file.entity.js.map +1 -0
  125. package/server/dist/dist/modules/file/file.module.d.ts +2 -0
  126. package/server/dist/dist/modules/file/file.module.js +27 -0
  127. package/server/dist/dist/modules/file/file.module.js.map +1 -0
  128. package/server/dist/dist/modules/file/file.service.d.ts +17 -0
  129. package/server/dist/dist/modules/file/file.service.js +111 -0
  130. package/server/dist/dist/modules/file/file.service.js.map +1 -0
  131. package/server/dist/dist/modules/health/health.controller.d.ts +11 -0
  132. package/server/dist/dist/modules/health/health.controller.js +57 -0
  133. package/server/dist/dist/modules/health/health.controller.js.map +1 -0
  134. package/server/dist/dist/modules/health/health.module.d.ts +2 -0
  135. package/server/dist/dist/modules/health/health.module.js +20 -0
  136. package/server/dist/dist/modules/health/health.module.js.map +1 -0
  137. package/server/dist/dist/modules/install/install.controller.d.ts +11 -0
  138. package/server/dist/dist/modules/install/install.controller.js +49 -0
  139. package/server/dist/dist/modules/install/install.controller.js.map +1 -0
  140. package/server/dist/dist/modules/install/install.module.d.ts +2 -0
  141. package/server/dist/dist/modules/install/install.module.js +26 -0
  142. package/server/dist/dist/modules/install/install.module.js.map +1 -0
  143. package/server/dist/dist/modules/install/install.service.d.ts +12 -0
  144. package/server/dist/dist/modules/install/install.service.js +63 -0
  145. package/server/dist/dist/modules/install/install.service.js.map +1 -0
  146. package/server/dist/dist/modules/knowledge/knowledge.controller.d.ts +14 -0
  147. package/server/dist/dist/modules/knowledge/knowledge.controller.js +128 -0
  148. package/server/dist/dist/modules/knowledge/knowledge.controller.js.map +1 -0
  149. package/server/dist/dist/modules/knowledge/knowledge.entity.d.ts +18 -0
  150. package/server/dist/dist/modules/knowledge/knowledge.entity.js +109 -0
  151. package/server/dist/dist/modules/knowledge/knowledge.entity.js.map +1 -0
  152. package/server/dist/dist/modules/knowledge/knowledge.module.d.ts +2 -0
  153. package/server/dist/dist/modules/knowledge/knowledge.module.js +27 -0
  154. package/server/dist/dist/modules/knowledge/knowledge.module.js.map +1 -0
  155. package/server/dist/dist/modules/knowledge/knowledge.service.d.ts +14 -0
  156. package/server/dist/dist/modules/knowledge/knowledge.service.js +144 -0
  157. package/server/dist/dist/modules/knowledge/knowledge.service.js.map +1 -0
  158. package/server/dist/dist/modules/page/page.controller.d.ts +12 -0
  159. package/server/dist/dist/modules/page/page.controller.js +102 -0
  160. package/server/dist/dist/modules/page/page.controller.js.map +1 -0
  161. package/server/dist/dist/modules/page/page.entity.d.ts +15 -0
  162. package/server/dist/dist/modules/page/page.entity.js +94 -0
  163. package/server/dist/dist/modules/page/page.entity.js.map +1 -0
  164. package/server/dist/dist/modules/page/page.module.d.ts +2 -0
  165. package/server/dist/dist/modules/page/page.module.js +27 -0
  166. package/server/dist/dist/modules/page/page.module.js.map +1 -0
  167. package/server/dist/dist/modules/page/page.service.d.ts +12 -0
  168. package/server/dist/dist/modules/page/page.service.js +98 -0
  169. package/server/dist/dist/modules/page/page.service.js.map +1 -0
  170. package/server/dist/dist/modules/search/search.controller.d.ts +8 -0
  171. package/server/dist/dist/modules/search/search.controller.js +67 -0
  172. package/server/dist/dist/modules/search/search.controller.js.map +1 -0
  173. package/server/dist/dist/modules/search/search.entity.d.ts +8 -0
  174. package/server/dist/dist/modules/search/search.entity.js +59 -0
  175. package/server/dist/dist/modules/search/search.entity.js.map +1 -0
  176. package/server/dist/dist/modules/search/search.module.d.ts +2 -0
  177. package/server/dist/dist/modules/search/search.module.js +27 -0
  178. package/server/dist/dist/modules/search/search.module.js.map +1 -0
  179. package/server/dist/dist/modules/search/search.service.d.ts +12 -0
  180. package/server/dist/dist/modules/search/search.service.js +84 -0
  181. package/server/dist/dist/modules/search/search.service.js.map +1 -0
  182. package/server/dist/dist/modules/setting/setting.constant.d.ts +3 -0
  183. package/server/dist/dist/modules/setting/setting.constant.js +25 -0
  184. package/server/dist/dist/modules/setting/setting.constant.js.map +1 -0
  185. package/server/dist/dist/modules/setting/setting.controller.d.ts +12 -0
  186. package/server/dist/dist/modules/setting/setting.controller.js +77 -0
  187. package/server/dist/dist/modules/setting/setting.controller.js.map +1 -0
  188. package/server/dist/dist/modules/setting/setting.entity.d.ts +26 -0
  189. package/server/dist/dist/modules/setting/setting.entity.js +149 -0
  190. package/server/dist/dist/modules/setting/setting.entity.js.map +1 -0
  191. package/server/dist/dist/modules/setting/setting.module.d.ts +2 -0
  192. package/server/dist/dist/modules/setting/setting.module.js +28 -0
  193. package/server/dist/dist/modules/setting/setting.module.js.map +1 -0
  194. package/server/dist/dist/modules/setting/setting.service.d.ts +10 -0
  195. package/server/dist/dist/modules/setting/setting.service.js +106 -0
  196. package/server/dist/dist/modules/setting/setting.service.js.map +1 -0
  197. package/server/dist/dist/modules/smtp/mail.util.d.ts +6 -0
  198. package/server/dist/dist/modules/smtp/mail.util.js +33 -0
  199. package/server/dist/dist/modules/smtp/mail.util.js.map +1 -0
  200. package/server/dist/dist/modules/smtp/smtp.controller.d.ts +9 -0
  201. package/server/dist/dist/modules/smtp/smtp.controller.js +69 -0
  202. package/server/dist/dist/modules/smtp/smtp.controller.js.map +1 -0
  203. package/server/dist/dist/modules/smtp/smtp.entity.d.ts +9 -0
  204. package/server/dist/dist/modules/smtp/smtp.entity.js +60 -0
  205. package/server/dist/dist/modules/smtp/smtp.entity.js.map +1 -0
  206. package/server/dist/dist/modules/smtp/smtp.module.d.ts +2 -0
  207. package/server/dist/dist/modules/smtp/smtp.module.js +28 -0
  208. package/server/dist/dist/modules/smtp/smtp.module.js.map +1 -0
  209. package/server/dist/dist/modules/smtp/smtp.service.d.ts +11 -0
  210. package/server/dist/dist/modules/smtp/smtp.service.js +83 -0
  211. package/server/dist/dist/modules/smtp/smtp.service.js.map +1 -0
  212. package/server/dist/dist/modules/tag/tag.controller.d.ts +12 -0
  213. package/server/dist/dist/modules/tag/tag.controller.js +101 -0
  214. package/server/dist/dist/modules/tag/tag.controller.js.map +1 -0
  215. package/server/dist/dist/modules/tag/tag.entity.d.ts +9 -0
  216. package/server/dist/dist/modules/tag/tag.entity.js +59 -0
  217. package/server/dist/dist/modules/tag/tag.entity.js.map +1 -0
  218. package/server/dist/dist/modules/tag/tag.module.d.ts +2 -0
  219. package/server/dist/dist/modules/tag/tag.module.js +27 -0
  220. package/server/dist/dist/modules/tag/tag.module.js.map +1 -0
  221. package/server/dist/dist/modules/tag/tag.service.d.ts +13 -0
  222. package/server/dist/dist/modules/tag/tag.service.js +104 -0
  223. package/server/dist/dist/modules/tag/tag.service.js.map +1 -0
  224. package/server/dist/dist/modules/user/user.controller.d.ts +13 -0
  225. package/server/dist/dist/modules/user/user.controller.js +115 -0
  226. package/server/dist/dist/modules/user/user.controller.js.map +1 -0
  227. package/server/dist/dist/modules/user/user.entity.d.ts +15 -0
  228. package/server/dist/dist/modules/user/user.entity.js +96 -0
  229. package/server/dist/dist/modules/user/user.entity.js.map +1 -0
  230. package/server/dist/dist/modules/user/user.module.d.ts +2 -0
  231. package/server/dist/dist/modules/user/user.module.js +28 -0
  232. package/server/dist/dist/modules/user/user.module.js.map +1 -0
  233. package/server/dist/dist/modules/user/user.service.d.ts +16 -0
  234. package/server/dist/dist/modules/user/user.service.js +152 -0
  235. package/server/dist/dist/modules/user/user.service.js.map +1 -0
  236. package/server/dist/dist/modules/view/view.controller.d.ts +11 -0
  237. package/server/dist/dist/modules/view/view.controller.js +92 -0
  238. package/server/dist/dist/modules/view/view.controller.js.map +1 -0
  239. package/server/dist/dist/modules/view/view.entity.d.ts +14 -0
  240. package/server/dist/dist/modules/view/view.entity.js +88 -0
  241. package/server/dist/dist/modules/view/view.entity.js.map +1 -0
  242. package/server/dist/dist/modules/view/view.module.d.ts +2 -0
  243. package/server/dist/dist/modules/view/view.module.js +27 -0
  244. package/server/dist/dist/modules/view/view.module.js.map +1 -0
  245. package/server/dist/dist/modules/view/view.service.d.ts +11 -0
  246. package/server/dist/dist/modules/view/view.service.js +89 -0
  247. package/server/dist/dist/modules/view/view.service.js.map +1 -0
  248. package/server/dist/dist/modules/webhook/webhook.controller.d.ts +12 -0
  249. package/server/dist/dist/modules/webhook/webhook.controller.js +63 -0
  250. package/server/dist/dist/modules/webhook/webhook.controller.js.map +1 -0
  251. package/server/dist/dist/modules/webhook/webhook.entity.d.ts +9 -0
  252. package/server/dist/dist/modules/webhook/webhook.entity.js +54 -0
  253. package/server/dist/dist/modules/webhook/webhook.entity.js.map +1 -0
  254. package/server/dist/dist/modules/webhook/webhook.module.d.ts +2 -0
  255. package/server/dist/dist/modules/webhook/webhook.module.js +27 -0
  256. package/server/dist/dist/modules/webhook/webhook.module.js.map +1 -0
  257. package/server/dist/dist/modules/webhook/webhook.service.d.ts +16 -0
  258. package/server/dist/dist/modules/webhook/webhook.service.js +97 -0
  259. package/server/dist/dist/modules/webhook/webhook.service.js.map +1 -0
  260. package/server/dist/dist/public/favicon.png +0 -0
  261. package/server/dist/dist/public/index.html +439 -0
  262. package/server/dist/dist/public/swagger/custom.css +11 -0
  263. package/server/dist/dist/starter.d.ts +1 -0
  264. package/server/dist/dist/starter.js +84 -0
  265. package/server/dist/dist/starter.js.map +1 -0
  266. package/server/dist/dist/tsconfig.build.tsbuildinfo +16966 -0
  267. package/server/dist/dist/utils/date.util.d.ts +1 -0
  268. package/server/dist/dist/utils/date.util.js +13 -0
  269. package/server/dist/dist/utils/date.util.js.map +1 -0
  270. package/server/dist/dist/utils/ip.util.d.ts +2 -0
  271. package/server/dist/dist/utils/ip.util.js +27 -0
  272. package/server/dist/dist/utils/ip.util.js.map +1 -0
  273. package/server/dist/dist/utils/markdown.util.d.ts +4 -0
  274. package/server/dist/dist/utils/markdown.util.js +42 -0
  275. package/server/dist/dist/utils/markdown.util.js.map +1 -0
  276. package/server/dist/dist/utils/oss/aliyun-oss-client.d.ts +6 -0
  277. package/server/dist/dist/utils/oss/aliyun-oss-client.js +28 -0
  278. package/server/dist/dist/utils/oss/aliyun-oss-client.js.map +1 -0
  279. package/server/dist/dist/utils/oss/oss-client.d.ts +6 -0
  280. package/server/dist/dist/utils/oss/oss-client.js +10 -0
  281. package/server/dist/dist/utils/oss/oss-client.js.map +1 -0
  282. package/server/dist/dist/utils/oss.util.d.ts +13 -0
  283. package/server/dist/dist/utils/oss.util.js +49 -0
  284. package/server/dist/dist/utils/oss.util.js.map +1 -0
  285. package/server/dist/dist/utils/ua.util.d.ts +9 -0
  286. package/server/dist/dist/utils/ua.util.js +36 -0
  287. package/server/dist/dist/utils/ua.util.js.map +1 -0
  288. package/server/dist/dist/utils/uniqueid.util.d.ts +1 -0
  289. package/server/dist/dist/utils/uniqueid.util.js +9 -0
  290. package/server/dist/dist/utils/uniqueid.util.js.map +1 -0
  291. package/server/dist/dist/utils/upload.util.d.ts +5 -0
  292. package/server/dist/dist/utils/upload.util.js +34 -0
  293. package/server/dist/dist/utils/upload.util.js.map +1 -0
  294. package/server/dist/dist/utils/user.util.d.ts +1 -0
  295. package/server/dist/dist/utils/user.util.js +18 -0
  296. package/server/dist/dist/utils/user.util.js.map +1 -0
  297. package/server/logs/error/error.log.-2026-05-19.log +123 -0
  298. package/server/node_modules/@nestjs/cli/node_modules/rimraf/bin.js +0 -0
  299. package/server/node_modules/@nestjs/cli/node_modules/typescript/bin/tsc +0 -0
  300. package/server/node_modules/@nestjs/cli/node_modules/typescript/bin/tsserver +0 -0
  301. package/server/node_modules/@nestjs/common/node_modules/axios/README.md +0 -0
  302. package/server/node_modules/@nestjs/common/node_modules/axios/lib/adapters/http.js +0 -0
  303. package/server/node_modules/@nestjs/config/node_modules/uuid/dist/bin/uuid +0 -0
  304. package/server/node_modules/@nestjs/platform-express/node_modules/mime/cli.js +0 -0
  305. package/server/node_modules/@nestjs/platform-express/node_modules/mime/src/build.js +0 -0
  306. package/server/node_modules/@nestjs/typeorm/node_modules/uuid/dist/bin/uuid +0 -0
  307. package/server/node_modules/@nuxtjs/opencollective/bin/opencollective.js +0 -0
  308. package/server/node_modules/@pm2/agent/node_modules/dayjs/plugin/objectSupport.d.ts +0 -0
  309. package/server/node_modules/@pm2/agent/node_modules/semver/bin/semver.js +0 -0
  310. package/server/node_modules/@pm2/io/node_modules/semver/bin/semver.js +0 -0
  311. package/server/node_modules/@types/node/LICENSE +0 -0
  312. package/server/node_modules/@types/node/README.md +0 -0
  313. package/server/node_modules/@types/node/assert.d.ts +0 -0
  314. package/server/node_modules/@types/node/async_hooks.d.ts +0 -0
  315. package/server/node_modules/@types/node/buffer.d.ts +0 -0
  316. package/server/node_modules/@types/node/child_process.d.ts +0 -0
  317. package/server/node_modules/@types/node/cluster.d.ts +0 -0
  318. package/server/node_modules/@types/node/console.d.ts +0 -0
  319. package/server/node_modules/@types/node/constants.d.ts +0 -0
  320. package/server/node_modules/@types/node/crypto.d.ts +0 -0
  321. package/server/node_modules/@types/node/dgram.d.ts +0 -0
  322. package/server/node_modules/@types/node/dns.d.ts +0 -0
  323. package/server/node_modules/@types/node/domain.d.ts +0 -0
  324. package/server/node_modules/@types/node/events.d.ts +0 -0
  325. package/server/node_modules/@types/node/fs.d.ts +0 -0
  326. package/server/node_modules/@types/node/globals.d.ts +0 -0
  327. package/server/node_modules/@types/node/globals.global.d.ts +0 -0
  328. package/server/node_modules/@types/node/http.d.ts +0 -0
  329. package/server/node_modules/@types/node/http2.d.ts +0 -0
  330. package/server/node_modules/@types/node/https.d.ts +0 -0
  331. package/server/node_modules/@types/node/index.d.ts +0 -0
  332. package/server/node_modules/@types/node/inspector.d.ts +0 -0
  333. package/server/node_modules/@types/node/module.d.ts +0 -0
  334. package/server/node_modules/@types/node/net.d.ts +0 -0
  335. package/server/node_modules/@types/node/os.d.ts +0 -0
  336. package/server/node_modules/@types/node/package.json +0 -0
  337. package/server/node_modules/@types/node/path.d.ts +0 -0
  338. package/server/node_modules/@types/node/perf_hooks.d.ts +0 -0
  339. package/server/node_modules/@types/node/process.d.ts +0 -0
  340. package/server/node_modules/@types/node/punycode.d.ts +0 -0
  341. package/server/node_modules/@types/node/querystring.d.ts +0 -0
  342. package/server/node_modules/@types/node/readline.d.ts +0 -0
  343. package/server/node_modules/@types/node/repl.d.ts +0 -0
  344. package/server/node_modules/@types/node/stream.d.ts +0 -0
  345. package/server/node_modules/@types/node/string_decoder.d.ts +0 -0
  346. package/server/node_modules/@types/node/timers.d.ts +0 -0
  347. package/server/node_modules/@types/node/tls.d.ts +0 -0
  348. package/server/node_modules/@types/node/trace_events.d.ts +0 -0
  349. package/server/node_modules/@types/node/tty.d.ts +0 -0
  350. package/server/node_modules/@types/node/url.d.ts +0 -0
  351. package/server/node_modules/@types/node/util.d.ts +0 -0
  352. package/server/node_modules/@types/node/v8.d.ts +0 -0
  353. package/server/node_modules/@types/node/vm.d.ts +0 -0
  354. package/server/node_modules/@types/node/wasi.d.ts +0 -0
  355. package/server/node_modules/@types/node/worker_threads.d.ts +0 -0
  356. package/server/node_modules/@types/node/zlib.d.ts +0 -0
  357. package/server/node_modules/@types/zen-observable/LICENSE +0 -0
  358. package/server/node_modules/@types/zen-observable/README.md +0 -0
  359. package/server/node_modules/@types/zen-observable/esm.d.ts +0 -0
  360. package/server/node_modules/@types/zen-observable/extras.d.ts +0 -0
  361. package/server/node_modules/@types/zen-observable/index.d.ts +0 -0
  362. package/server/node_modules/@types/zen-observable/package.json +0 -0
  363. package/server/node_modules/ajv/scripts/info +0 -0
  364. package/server/node_modules/ajv/scripts/prepare-tests +0 -0
  365. package/server/node_modules/ajv/scripts/publish-built-version +0 -0
  366. package/server/node_modules/ajv/scripts/travis-gh-pages +0 -0
  367. package/server/node_modules/arr-diff/LICENSE +0 -0
  368. package/server/node_modules/arr-flatten/LICENSE +0 -0
  369. package/server/node_modules/arr-flatten/README.md +0 -0
  370. package/server/node_modules/array-unique/LICENSE +0 -0
  371. package/server/node_modules/array-unique/README.md +0 -0
  372. package/server/node_modules/aws-ssl-profiles/package.json +0 -0
  373. package/server/node_modules/axios/README.md +0 -0
  374. package/server/node_modules/axios/lib/adapters/http.js +0 -0
  375. package/server/node_modules/blessed/bin/tput.js +0 -0
  376. package/server/node_modules/blessed/example/blessed-telnet.js +0 -0
  377. package/server/node_modules/blessed/example/multiplex.js +0 -0
  378. package/server/node_modules/blessed/example/ping +0 -0
  379. package/server/node_modules/blessed/example/time.js +0 -0
  380. package/server/node_modules/cacache/node_modules/rimraf/bin.js +0 -0
  381. package/server/node_modules/cli-color/bin/generate-color-images +0 -0
  382. package/server/node_modules/cli-color/test/__playground/throbber.formatted.js +0 -0
  383. package/server/node_modules/cli-color/test/__playground/throbber.js +0 -0
  384. package/server/node_modules/cli-highlight/node_modules/wrap-ansi/index.js +0 -0
  385. package/server/node_modules/cliui/node_modules/wrap-ansi/index.js +0 -0
  386. package/server/node_modules/constants-browserify/build.sh +0 -0
  387. package/server/node_modules/copy-concurrently/node_modules/rimraf/bin.js +0 -0
  388. package/server/node_modules/copyfiles/copyfiles +0 -0
  389. package/server/node_modules/copyfiles/index.js +0 -0
  390. package/server/node_modules/cross-env/README.md +0 -0
  391. package/server/node_modules/date-fns/esm/index.js +0 -0
  392. package/server/node_modules/date-fns/esm/previousDay/index.js +0 -0
  393. package/server/node_modules/date-fns/esm/previousFriday/index.js +0 -0
  394. package/server/node_modules/date-fns/esm/previousMonday/index.js +0 -0
  395. package/server/node_modules/date-fns/esm/previousSaturday/index.js +0 -0
  396. package/server/node_modules/date-fns/esm/previousSunday/index.js +0 -0
  397. package/server/node_modules/date-fns/esm/previousThursday/index.js +0 -0
  398. package/server/node_modules/date-fns/esm/previousTuesday/index.js +0 -0
  399. package/server/node_modules/date-fns/esm/previousWednesday/index.js +0 -0
  400. package/server/node_modules/date-fns/index.js +0 -0
  401. package/server/node_modules/date-fns/previousDay/index.js +0 -0
  402. package/server/node_modules/date-fns/previousFriday/index.js +0 -0
  403. package/server/node_modules/date-fns/previousMonday/index.js +0 -0
  404. package/server/node_modules/date-fns/previousSaturday/index.js +0 -0
  405. package/server/node_modules/date-fns/previousSunday/index.js +0 -0
  406. package/server/node_modules/date-fns/previousThursday/index.js +0 -0
  407. package/server/node_modules/date-fns/previousTuesday/index.js +0 -0
  408. package/server/node_modules/date-fns/previousWednesday/index.js +0 -0
  409. package/server/node_modules/dayjs/plugin/arraySupport.d.ts +0 -0
  410. package/server/node_modules/dayjs/plugin/objectSupport.d.ts +0 -0
  411. package/server/node_modules/default-user-agent/node_modules/os-name/cli.js +0 -0
  412. package/server/node_modules/degenerator/node_modules/escodegen/bin/escodegen.js +0 -0
  413. package/server/node_modules/degenerator/node_modules/escodegen/bin/esgenerate.js +0 -0
  414. package/server/node_modules/emojis-list/LICENSE.md +0 -0
  415. package/server/node_modules/emojis-list/README.md +0 -0
  416. package/server/node_modules/errno/build.js +0 -0
  417. package/server/node_modules/errno/cli.js +0 -0
  418. package/server/node_modules/es5-ext/_postinstall.js +0 -0
  419. package/server/node_modules/esprima/bin/esparse.js +0 -0
  420. package/server/node_modules/esprima/bin/esvalidate.js +0 -0
  421. package/server/node_modules/esrecurse/package.json +0 -0
  422. package/server/node_modules/execa/node_modules/semver/bin/semver +0 -0
  423. package/server/node_modules/execa/node_modules/which/bin/which +0 -0
  424. package/server/node_modules/extrareqp2/README.md +0 -0
  425. package/server/node_modules/extrareqp2/lib/adapters/http.js +0 -0
  426. package/server/node_modules/fork-ts-checker-webpack-plugin/node_modules/semver/bin/semver +0 -0
  427. package/server/node_modules/is-class-hotfix/.editorconfig +0 -0
  428. package/server/node_modules/is-class-hotfix/.gitattributes +0 -0
  429. package/server/node_modules/is-class-hotfix/CHANGELOG.md +0 -0
  430. package/server/node_modules/is-class-hotfix/LICENSE.md +0 -0
  431. package/server/node_modules/is-class-hotfix/README.md +0 -0
  432. package/server/node_modules/is-class-hotfix/bower.json +0 -0
  433. package/server/node_modules/is-class-hotfix/is-class.js +0 -0
  434. package/server/node_modules/is-class-hotfix/package.json +0 -0
  435. package/server/node_modules/is-class-hotfix/test/is-class.js +0 -0
  436. package/server/node_modules/is-docker/cli.js +0 -0
  437. package/server/node_modules/js-yaml/bin/js-yaml.js +0 -0
  438. package/server/node_modules/jsonwebtoken/node_modules/semver/bin/semver +0 -0
  439. package/server/node_modules/jstoxml/dist.sh +0 -0
  440. package/server/node_modules/log4js/lib/appenders/fileSync.js +0 -0
  441. package/server/node_modules/log4js/lib/connect-logger.js +0 -0
  442. package/server/node_modules/make-dir/node_modules/semver/bin/semver +0 -0
  443. package/server/node_modules/micromatch/LICENSE +0 -0
  444. package/server/node_modules/miller-rabin/bin/miller-rabin +0 -0
  445. package/server/node_modules/mime/cli.js +0 -0
  446. package/server/node_modules/mkdirp/bin/cmd.js +0 -0
  447. package/server/node_modules/move-concurrently/node_modules/rimraf/bin.js +0 -0
  448. package/server/node_modules/nan/tools/1to2.js +0 -0
  449. package/server/node_modules/needle/bin/needle +0 -0
  450. package/server/node_modules/node-libs-browser/node_modules/buffer/bin/download-node-tests.js +0 -0
  451. package/server/node_modules/node-libs-browser/node_modules/buffer/bin/update-authors.sh +0 -0
  452. package/server/node_modules/open/xdg-open +0 -0
  453. package/server/node_modules/osx-release/cli.js +0 -0
  454. package/server/node_modules/pm2/bin/pm2 +0 -0
  455. package/server/node_modules/pm2/bin/pm2-dev +0 -0
  456. package/server/node_modules/pm2/bin/pm2-docker +0 -0
  457. package/server/node_modules/pm2/bin/pm2-runtime +0 -0
  458. package/server/node_modules/pm2/lib/templates/init-scripts/openrc.tpl +0 -0
  459. package/server/node_modules/pm2/lib/tools/xdg-open +0 -0
  460. package/server/node_modules/pm2/node_modules/mkdirp/bin/cmd.js +0 -0
  461. package/server/node_modules/pm2/pm2 +0 -0
  462. package/server/node_modules/pm2-deploy/deploy +0 -0
  463. package/server/node_modules/require-in-the-middle/node_modules/resolve/bin/resolve +0 -0
  464. package/server/node_modules/rimraf/bin.js +0 -0
  465. package/server/node_modules/segment/repl +0 -0
  466. package/server/node_modules/semver/bin/semver.js +0 -0
  467. package/server/node_modules/send/node_modules/mime/cli.js +0 -0
  468. package/server/node_modules/send/node_modules/mime/src/build.js +0 -0
  469. package/server/node_modules/sha.js/bin.js +0 -0
  470. package/server/node_modules/systeminformation/lib/cli.js +0 -0
  471. package/server/node_modules/terser/bin/terser +0 -0
  472. package/server/node_modules/terser/bin/uglifyjs +0 -0
  473. package/server/node_modules/tree-kill/cli.js +0 -0
  474. package/server/node_modules/tree-kill/index.js +0 -0
  475. package/server/node_modules/typeorm/cli.js +0 -0
  476. package/server/node_modules/typeorm/node_modules/mkdirp/bin/cmd.js +0 -0
  477. package/server/node_modules/typeorm/node_modules/uuid/dist/bin/uuid +0 -0
  478. package/server/node_modules/typeorm/node_modules/wrap-ansi/index.js +0 -0
  479. package/server/node_modules/ua-parser-js/script/cli.js +0 -0
  480. package/server/node_modules/ua-parser-js/src/ua-parser.js +0 -0
  481. package/server/node_modules/upath/LICENSE +0 -0
  482. package/server/node_modules/uri-js/LICENSE +0 -0
  483. package/server/node_modules/uri-js/README.md +0 -0
  484. package/server/node_modules/uri-js/dist/es5/uri.all.d.ts +0 -0
  485. package/server/node_modules/uri-js/dist/es5/uri.all.js +0 -0
  486. package/server/node_modules/uri-js/dist/es5/uri.all.js.map +0 -0
  487. package/server/node_modules/uri-js/dist/es5/uri.all.min.d.ts +0 -0
  488. package/server/node_modules/uri-js/dist/es5/uri.all.min.js +0 -0
  489. package/server/node_modules/uri-js/dist/es5/uri.all.min.js.map +0 -0
  490. package/server/node_modules/uri-js/dist/esnext/index.d.ts +0 -0
  491. package/server/node_modules/uri-js/dist/esnext/index.js +0 -0
  492. package/server/node_modules/uri-js/dist/esnext/index.js.map +0 -0
  493. package/server/node_modules/uri-js/dist/esnext/regexps-iri.d.ts +0 -0
  494. package/server/node_modules/uri-js/dist/esnext/regexps-iri.js +0 -0
  495. package/server/node_modules/uri-js/dist/esnext/regexps-iri.js.map +0 -0
  496. package/server/node_modules/uri-js/dist/esnext/regexps-uri.d.ts +0 -0
  497. package/server/node_modules/uri-js/dist/esnext/regexps-uri.js +0 -0
  498. package/server/node_modules/uri-js/dist/esnext/regexps-uri.js.map +0 -0
  499. package/server/node_modules/uri-js/dist/esnext/schemes/http.d.ts +0 -0
  500. package/server/node_modules/uri-js/dist/esnext/schemes/http.js +0 -0
  501. package/server/node_modules/uri-js/dist/esnext/schemes/http.js.map +0 -0
  502. package/server/node_modules/uri-js/dist/esnext/schemes/https.d.ts +0 -0
  503. package/server/node_modules/uri-js/dist/esnext/schemes/https.js +0 -0
  504. package/server/node_modules/uri-js/dist/esnext/schemes/https.js.map +0 -0
  505. package/server/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts +0 -0
  506. package/server/node_modules/uri-js/dist/esnext/schemes/mailto.js +0 -0
  507. package/server/node_modules/uri-js/dist/esnext/schemes/mailto.js.map +0 -0
  508. package/server/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts +0 -0
  509. package/server/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js +0 -0
  510. package/server/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map +0 -0
  511. package/server/node_modules/uri-js/dist/esnext/schemes/urn.d.ts +0 -0
  512. package/server/node_modules/uri-js/dist/esnext/schemes/urn.js +0 -0
  513. package/server/node_modules/uri-js/dist/esnext/schemes/urn.js.map +0 -0
  514. package/server/node_modules/uri-js/dist/esnext/schemes/ws.d.ts +0 -0
  515. package/server/node_modules/uri-js/dist/esnext/schemes/ws.js +0 -0
  516. package/server/node_modules/uri-js/dist/esnext/schemes/ws.js.map +0 -0
  517. package/server/node_modules/uri-js/dist/esnext/schemes/wss.d.ts +0 -0
  518. package/server/node_modules/uri-js/dist/esnext/schemes/wss.js +0 -0
  519. package/server/node_modules/uri-js/dist/esnext/schemes/wss.js.map +0 -0
  520. package/server/node_modules/uri-js/dist/esnext/uri.d.ts +0 -0
  521. package/server/node_modules/uri-js/dist/esnext/uri.js +0 -0
  522. package/server/node_modules/uri-js/dist/esnext/uri.js.map +0 -0
  523. package/server/node_modules/uri-js/dist/esnext/util.d.ts +0 -0
  524. package/server/node_modules/uri-js/dist/esnext/util.js +0 -0
  525. package/server/node_modules/uri-js/dist/esnext/util.js.map +0 -0
  526. package/server/node_modules/uri-js/package.json +0 -0
  527. package/server/node_modules/uri-js/yarn.lock +0 -0
  528. package/server/node_modules/uuid/dist/bin/uuid +0 -0
  529. package/server/node_modules/webpack/node_modules/acorn/bin/acorn +0 -0
  530. package/server/node_modules/webpack/node_modules/ajv/scripts/info +0 -0
  531. package/server/node_modules/webpack/node_modules/ajv/scripts/prepare-tests +0 -0
  532. package/server/node_modules/webpack/node_modules/ajv/scripts/publish-built-version +0 -0
  533. package/server/node_modules/webpack/node_modules/ajv/scripts/travis-gh-pages +0 -0
  534. package/server/node_modules/which/bin/node-which +0 -0
  535. package/server/node_modules/win-release/node_modules/semver/bin/semver +0 -0
  536. package/server/node_modules/wrap-ansi/index.js +0 -0
  537. package/templates/nginx.dev.conf +57 -0
  538. package/templates/nginx.prod.conf +75 -0
  539. package/ui/banner.js +432 -13
  540. package/ui/interactive.js +248 -52
  541. package/ui/theme.js +250 -10
@@ -26,6 +26,19 @@ const STRINGS = {
26
26
  'cli.docker.restart': 'Restart Docker services',
27
27
  'cli.docker.status': 'Docker container status',
28
28
  'cli.docker.logs': 'Docker logs (db | nginx)',
29
+ 'cli.nginx.description': 'Nginx reverse proxy (unified entry on :80)',
30
+ 'cli.nginx.ensure': 'Write default nginx config if missing',
31
+ 'cli.nginx.up': 'Start nginx container',
32
+ 'cli.nginx.down': 'Stop nginx container',
33
+ 'cli.nginx.restart': 'Restart nginx container',
34
+ 'cli.nginx.status': 'Show nginx container and config status',
35
+ 'cli.nginx.logs': 'Follow nginx container logs',
36
+ 'cli.nginx.test': 'Validate nginx config inside container (nginx -t)',
37
+ 'cli.nginx.reload': 'Reload nginx after config change',
38
+ 'cli.nginx.open': 'Open nginx entry URL in browser',
39
+ 'cli.nginx.prod': 'Use production compose + nginx.conf (monorepo only)',
40
+ 'cli.nginx.force': 'Overwrite existing nginx config from template',
41
+ 'cli.help.nginx': ' reactpress nginx up Start reverse proxy (:80)',
29
42
  'cli.status.description': 'Project, API, frontend, and Docker status',
30
43
  'cli.doctor.description': 'Diagnose Node, Docker, ports, database, and API health',
31
44
  'cli.db.description': 'Database operations',
@@ -47,6 +60,19 @@ const STRINGS = {
47
60
  'cli.help.publish': ' reactpress publish Publish npm packages',
48
61
  'cli.build.target': 'Build target: toolkit | server | client | docs | all',
49
62
  'banner.subtitle': ' · Full-stack publishing CLI ',
63
+ /** Left label for the decorative pulse bar (not a URL — the repo link
64
+ * lives directly under the title bar at the top of the card). */
65
+ 'banner.pulseLabel': 'Setup',
66
+ 'banner.pulseReady': 'READY',
67
+ 'banner.pulsePending': 'INIT',
68
+ 'banner.label.mode': 'MODE',
69
+ 'banner.label.path': 'PATH',
70
+ 'banner.mode.standalone': 'STANDALONE',
71
+ 'banner.mode.monorepo': 'MONOREPO',
72
+ 'banner.mode.uninitialized': 'UNINITIALIZED',
73
+ 'banner.systemLabel': 'SYSTEM',
74
+ 'banner.systemOnline': 'ONLINE',
75
+ 'banner.systemPending': 'PENDING',
50
76
  'menu.dev': 'Zero-config dev (env + DB + API + frontend)',
51
77
  'menu.init': 'Initialize project (.reactpress + .env + database)',
52
78
  'menu.status': 'View project status',
@@ -73,6 +99,55 @@ const STRINGS = {
73
99
  'menu.done': 'Done',
74
100
  'menu.opening': 'Opening {url}',
75
101
  'menu.goodbye': ' Goodbye.',
102
+ 'menu.section.run': 'Run',
103
+ 'menu.section.lifecycle': 'Lifecycle',
104
+ 'menu.section.build': 'Build & Deploy',
105
+ 'menu.section.tools': 'Tools',
106
+ 'menu.tip': 'Tip: arrow keys to navigate, Enter to select, Ctrl+C to quit.',
107
+ 'menu.shortcuts': '↑/↓ navigate · enter select · esc back · ctrl+c quit',
108
+ 'menu.statusHeader': 'Status',
109
+ 'menu.contextStandalone': 'Project mode · standalone (using bundled API)',
110
+ 'menu.contextMonorepo': 'Project mode · monorepo (server/src + client/)',
111
+ 'menu.contextUnknown': 'Project mode · not initialized (run `init`)',
112
+ 'menu.statusApi': 'API {status}',
113
+ 'menu.statusDb': 'DB {status}',
114
+ 'menu.statusDocker': 'Docker {status}',
115
+ 'menu.statusLabelApi': 'API',
116
+ 'menu.statusLabelDb': 'DB',
117
+ 'menu.statusLabelDocker': 'Docker',
118
+ 'menu.statusChecking': 'checking…',
119
+ 'menu.startingApi': 'Starting API…',
120
+ 'menu.stoppingApi': 'Stopping API…',
121
+ 'menu.restartingApi': 'Restarting API…',
122
+ 'menu.statusOn': 'online',
123
+ 'menu.statusOff': 'offline',
124
+ 'menu.statusReady': 'ready',
125
+ 'menu.statusNotReady': 'not ready',
126
+ 'menu.statusYes': 'available',
127
+ 'menu.statusNo': 'unavailable',
128
+ 'menu.hint.dev': 'API + DB + frontend',
129
+ 'menu.hint.init': '.reactpress + .env',
130
+ 'menu.hint.status': 'all services overview',
131
+ 'menu.hint.doctor': 'environment diagnostics',
132
+ 'menu.hint.devApi': 'watch mode',
133
+ 'menu.hint.devClient': 'Next.js dev',
134
+ 'menu.hint.serverStart': 'production background',
135
+ 'menu.hint.serverStop': '',
136
+ 'menu.hint.serverRestart': '',
137
+ 'menu.hint.build': 'production output',
138
+ 'menu.hint.dockerStart': 'DB + nginx + dev stack',
139
+ 'menu.hint.dockerUp': 'database only',
140
+ 'menu.hint.dockerStop': '',
141
+ 'menu.nginxUp': 'Start nginx reverse proxy (:80)',
142
+ 'menu.nginxOpen': 'Open nginx entry in browser',
143
+ 'menu.nginxReload': 'Reload nginx after editing config',
144
+ 'menu.hint.nginxUp': 'unified entry :80',
145
+ 'menu.hint.nginxOpen': 'http://localhost',
146
+ 'menu.hint.nginxReload': 'nginx -t && reload',
147
+ 'menu.hint.openAdmin': 'opens in browser',
148
+ 'menu.hint.publish': 'maintainers only',
149
+ 'menu.hint.exit': '',
150
+ 'menu.actionPrefix': 'action',
76
151
  'dev.startingApi': '[reactpress] Starting API (first run may install deps)…',
77
152
  'dev.waitingApi': '[reactpress] Waiting for API: {url}',
78
153
  'dev.apiTimeout': '[reactpress] API not ready within {seconds}s.\n → Run reactpress doctor\n → Embedded MySQL: reactpress docker up\n → Check DB_* and SERVER_SITE_URL in .env',
@@ -84,11 +159,16 @@ const STRINGS = {
84
159
  'dev.nextDoctor': ' → reactpress doctor Diagnostics',
85
160
  'dev.nextDocker': ' → reactpress docker up Start embedded MySQL',
86
161
  'dev.nextEnv': ' → Check DB_* and SERVER_SITE_URL in .env',
87
- 'devBanner.ready': ' ✓ ReactPress dev environment is ready',
162
+ 'dev.standaloneHint': '[reactpress] Standalone project: only API is started here; build your own frontend separately.',
163
+ 'devBanner.ready': 'ReactPress dev environment is ready',
88
164
  'devBanner.site': 'Site',
89
165
  'devBanner.admin': 'Admin',
166
+ 'devBanner.api': 'API',
167
+ 'devBanner.swagger': 'Swagger',
90
168
  'devBanner.health': 'Health',
91
- 'devBanner.hint': ' Diagnostics: reactpress doctor · Status: reactpress status',
169
+ 'devBanner.hint': 'Diagnostics: reactpress doctor · Status: reactpress status',
170
+ 'devBanner.shortcuts': 'Ctrl+C stop',
171
+ 'devBanner.allSystemsGo': 'ALL SYSTEMS GO',
92
172
  'doctor.nodeBad': 'Node.js {version} (requires ≥ 18)',
93
173
  'doctor.nodeFix': 'Install Node.js 18+: https://nodejs.org/',
94
174
  'doctor.dockerOk': 'Docker engine is available',
@@ -119,17 +199,22 @@ const STRINGS = {
119
199
  'doctor.envOk': '.env exists',
120
200
  'doctor.envBad': 'Missing .env',
121
201
  'doctor.envFix': 'Run reactpress init or reactpress config --apply',
122
- 'doctor.project': ' Project: {path}',
123
- 'doctor.allPass': ' All checks passed. You can start developing.',
124
- 'doctor.failed': ' {count} item(s) need attention.',
125
- 'status.title': ' ReactPress project status',
126
- 'status.dir': ' Project {path}',
127
- 'status.apiSource': ' API source {source}',
202
+ 'doctor.project': 'Project {path}',
203
+ 'doctor.allPass': 'All checks passed. You can start developing.',
204
+ 'doctor.failed': '{count} item(s) need attention.',
205
+ 'doctor.title': 'ReactPress Doctor',
206
+ 'doctor.subtitle': 'environment diagnostics',
207
+ 'doctor.checking': 'Checking {name}…',
208
+ 'doctor.summary': '{passed} passed · {failed} failed · {total} total',
209
+ 'doctor.fixesHeader': 'Suggested fixes',
210
+ 'status.title': 'ReactPress project status',
211
+ 'status.dir': 'Project {path}',
212
+ 'status.apiSource': 'API source {source}',
128
213
  'status.apiSource.monorepo': 'monorepo server/',
129
214
  'status.apiSource.bundle': 'reactpress-cli',
130
- 'status.configOk': '.reactpress/config.json ✓',
215
+ 'status.configOk': '.reactpress/config.json',
131
216
  'status.configBad': 'not initialized',
132
- 'status.envOk': '.env ✓',
217
+ 'status.envOk': '.env',
133
218
  'status.envBad': 'missing .env',
134
219
  'status.apiOnline': 'online',
135
220
  'status.apiOffline': 'offline',
@@ -137,10 +222,24 @@ const STRINGS = {
137
222
  'status.dbUp': 'connected',
138
223
  'status.dbDown': 'unavailable',
139
224
  'status.pidRunning': '(running)',
140
- 'status.frontend': ' Frontend',
141
- 'status.docker': ' Docker',
225
+ 'status.frontend': 'Frontend',
226
+ 'status.docker': 'Docker',
142
227
  'status.dockerUp': 'available',
143
228
  'status.dockerDown': 'not running',
229
+ 'status.section.project': 'Project',
230
+ 'status.section.api': 'API service',
231
+ 'status.section.frontend': 'Frontend',
232
+ 'status.section.docker': 'Docker',
233
+ 'status.field.url': 'URL',
234
+ 'status.field.http': 'HTTP',
235
+ 'status.field.health': 'Health',
236
+ 'status.field.database': 'Database',
237
+ 'status.field.pid': 'PID',
238
+ 'status.field.engine': 'Engine',
239
+ 'status.field.config': 'Config',
240
+ 'status.field.env': '.env',
241
+ 'status.field.source': 'Source',
242
+ 'status.field.dir': 'Directory',
144
243
  'bootstrap.configReady': 'Config exists and database is ready.',
145
244
  'bootstrap.projectDbPending': 'Project created, but database is not ready: {message}. Start Docker and run reactpress dev again.',
146
245
  'bootstrap.ready': 'ReactPress dev environment is ready (config + database).',
@@ -151,7 +250,9 @@ const STRINGS = {
151
250
  'bootstrap.dbReady': 'Database is ready',
152
251
  'db.backup.to': 'Backing up database to {path}',
153
252
  'db.backup.done': 'Backup complete',
154
- 'db.backup.fail': 'mysqldump failed; ensure MySQL client is installed and .env is correct',
253
+ 'db.backup.viaDocker': 'mysqldump not on PATH; using mysqldump inside the db container…',
254
+ 'db.backup.fail':
255
+ 'mysqldump failed; install a MySQL client (e.g. brew install mysql-client), or ensure Docker db is running for automatic container backup',
155
256
  'common.done': 'Done',
156
257
  'common.yes': 'yes',
157
258
  'common.no': 'no',
@@ -189,9 +290,37 @@ const STRINGS = {
189
290
  'docker.mysqlTimeout': '[reactpress] MySQL not ready within timeout.',
190
291
  'docker.mysqlNotReady': 'MySQL is not ready',
191
292
  'docker.startDevStack': '[reactpress] Starting API + frontend (Docker MySQL)…',
192
- 'docker.visitUrls': '[reactpress] Visit: http://localhost:8080 (nginx) / http://localhost:3001 (client)',
293
+ 'docker.visitUrls': '[reactpress] Visit: http://localhost (nginx) / http://localhost:3001 (client)',
193
294
  'docker.devProcessExit': 'Dev process exited with code {code}',
194
295
  'docker.unknownCommand': 'Unknown docker command: {command}',
296
+ 'nginx.configCreated': '[reactpress] Created nginx config: {path}',
297
+ 'nginx.configExists': '[reactpress] Nginx config already exists: {path}',
298
+ 'nginx.ensureWarn': '[reactpress] Could not ensure nginx config: {message}',
299
+ 'nginx.started': '[reactpress] Nginx started — {url}',
300
+ 'nginx.configPath': '[reactpress] Config: {path}',
301
+ 'nginx.stopped': '[reactpress] Nginx stopped.',
302
+ 'nginx.startFailed': 'Failed to start nginx container',
303
+ 'nginx.prodMonorepoOnly': 'Production nginx (--prod) requires monorepo with docker-compose.prod.yml',
304
+ 'nginx.statusTitle': '[reactpress] Nginx status',
305
+ 'nginx.statusContainer': ' Container {name}: {running}',
306
+ 'nginx.statusConfig': ' Config {path}: {exists}',
307
+ 'nginx.statusUrl': ' Entry {url} (port {port})',
308
+ 'nginx.statusMode': ' Mode: {mode}',
309
+ 'nginx.notRunning': 'Nginx container is not running. Run: reactpress nginx up',
310
+ 'nginx.testOk': '[reactpress] Nginx config test passed.',
311
+ 'nginx.testFailed': 'Nginx config test failed',
312
+ 'nginx.reloadOk': '[reactpress] Nginx reloaded.',
313
+ 'nginx.reloadFailed': 'Nginx reload failed',
314
+ 'nginx.opening': '[reactpress] Opening {url}',
315
+ 'nginx.unknownCommand': 'Unknown nginx command: {command}',
316
+ 'nginx.templateMissing': 'Bundled nginx template missing: {path}',
317
+ 'nginx.doctorSkippedDocker': 'Skipped (Docker not running)',
318
+ 'nginx.doctorSkippedNotRunning': 'Not started (optional: reactpress nginx up)',
319
+ 'nginx.doctorNotRunningFix': 'reactpress nginx up (or reactpress docker up)',
320
+ 'nginx.doctorOk': 'Nginx healthy ({url}/health)',
321
+ 'nginx.doctorUnhealthy': 'Nginx running but /health failed ({url})',
322
+ 'nginx.doctorUnhealthyFix': 'Ensure client (:3001) and API (:3002) are running; reactpress nginx reload',
323
+ 'doctor.check.nginx': 'Nginx proxy',
195
324
  'apiDev.modeServer': '[reactpress] Dev mode: server/ (nest start --watch)',
196
325
  'apiDev.modeBundled': '[reactpress] Dev mode: bundled API (built-in server)',
197
326
  'apiDev.ctrlCHint': '[reactpress] Press Ctrl+C to stop API.',
@@ -199,12 +328,12 @@ const STRINGS = {
199
328
  'build.unknownTarget': 'Unknown build target: {target}. Available: {available}',
200
329
  'build.recursive': 'Build recursion detected (pnpm run build must not call itself). Use build:toolkit, build:server, or build:client.',
201
330
  'build.forbiddenScript': 'Invalid build script "{script}"; use granular scripts like build:toolkit.',
202
- 'build.stepFailed': '[reactpress] [{current}/{total}] {label} failed',
203
- 'build.plan': '[reactpress] Production build — {total} step(s): toolkit → server → client',
204
- 'build.step': '[reactpress] [{current}/{total}] {label}…',
205
- 'build.stepDone': '[reactpress] [{current}/{total}] {label} ✓ ({seconds}s)',
206
- 'build.stepSkipped': '[reactpress] Skipped {label} (not part of this project layout)',
207
- 'build.done': '[reactpress] Build finished in {seconds}s',
331
+ 'build.stepFailed': '[{current}/{total}] {label} failed',
332
+ 'build.plan': 'Production build — {total} step(s): toolkit → server → client',
333
+ 'build.step': '[{current}/{total}] {label}',
334
+ 'build.stepDone': '[{current}/{total}] {label} ({seconds}s)',
335
+ 'build.stepSkipped': 'skipped {label} (not part of this project layout)',
336
+ 'build.done': 'Build finished in {seconds}s',
208
337
  'build.label.toolkit': 'Toolkit',
209
338
  'build.label.server': 'API (server)',
210
339
  'build.label.client': 'Frontend (client)',
@@ -318,6 +447,19 @@ const STRINGS = {
318
447
  'cli.docker.restart': '重启 Docker 服务',
319
448
  'cli.docker.status': '查看 Docker 容器状态',
320
449
  'cli.docker.logs': '查看 Docker 日志 (db | nginx)',
450
+ 'cli.nginx.description': 'Nginx 反向代理(统一入口 :80)',
451
+ 'cli.nginx.ensure': '若缺失则生成默认 nginx 配置',
452
+ 'cli.nginx.up': '启动 nginx 容器',
453
+ 'cli.nginx.down': '停止 nginx 容器',
454
+ 'cli.nginx.restart': '重启 nginx 容器',
455
+ 'cli.nginx.status': '查看 nginx 容器与配置状态',
456
+ 'cli.nginx.logs': '跟踪 nginx 容器日志',
457
+ 'cli.nginx.test': '在容器内校验配置 (nginx -t)',
458
+ 'cli.nginx.reload': '修改配置后热加载 nginx',
459
+ 'cli.nginx.open': '在浏览器打开 nginx 入口',
460
+ 'cli.nginx.prod': '使用生产 compose + nginx.conf(仅 monorepo)',
461
+ 'cli.nginx.force': '用模板覆盖已有 nginx 配置',
462
+ 'cli.help.nginx': ' reactpress nginx up 启动反向代理 (:80)',
321
463
  'cli.status.description': '查看项目、API、前端、Docker 综合状态',
322
464
  'cli.doctor.description': '诊断环境:Node、Docker、端口、数据库、API 健康',
323
465
  'cli.db.description': '数据库运维',
@@ -339,6 +481,18 @@ const STRINGS = {
339
481
  'cli.help.publish': ' reactpress publish 发布 npm 包',
340
482
  'cli.build.target': '构建目标: toolkit | server | client | docs | all',
341
483
  'banner.subtitle': ' · 全栈发布平台 CLI ',
484
+ /** 左侧装饰性进度条标签(不是网址;仓库地址放在卡片顶部 Title 正下方)。 */
485
+ 'banner.pulseLabel': '准备',
486
+ 'banner.pulseReady': '就绪',
487
+ 'banner.pulsePending': '初始化',
488
+ 'banner.label.mode': '模式',
489
+ 'banner.label.path': '路径',
490
+ 'banner.mode.standalone': '独立项目',
491
+ 'banner.mode.monorepo': 'MONOREPO',
492
+ 'banner.mode.uninitialized': '未初始化',
493
+ 'banner.systemLabel': '系统',
494
+ 'banner.systemOnline': '在线',
495
+ 'banner.systemPending': '准备中',
342
496
  'menu.dev': '零配置开发 (env + DB + API + 前端)',
343
497
  'menu.init': '初始化项目 (.reactpress + .env + 数据库)',
344
498
  'menu.status': '查看项目状态',
@@ -365,6 +519,55 @@ const STRINGS = {
365
519
  'menu.done': '完成',
366
520
  'menu.opening': '打开 {url}',
367
521
  'menu.goodbye': ' 再见。',
522
+ 'menu.section.run': '运行',
523
+ 'menu.section.lifecycle': '生命周期',
524
+ 'menu.section.build': '构建与部署',
525
+ 'menu.section.tools': '工具',
526
+ 'menu.tip': '提示:上下方向键选择,回车确认,Ctrl+C 退出。',
527
+ 'menu.shortcuts': '↑/↓ 选择 · 回车 确认 · esc 返回 · Ctrl+C 退出',
528
+ 'menu.statusHeader': '当前状态',
529
+ 'menu.contextStandalone': '项目类型 · 独立项目(使用内置 API)',
530
+ 'menu.contextMonorepo': '项目类型 · monorepo(server/src + client/)',
531
+ 'menu.contextUnknown': '项目类型 · 未初始化(请先运行 init)',
532
+ 'menu.statusApi': 'API {status}',
533
+ 'menu.statusDb': '数据库 {status}',
534
+ 'menu.statusDocker': 'Docker {status}',
535
+ 'menu.statusLabelApi': 'API',
536
+ 'menu.statusLabelDb': '数据库',
537
+ 'menu.statusLabelDocker': 'Docker',
538
+ 'menu.statusChecking': '检测中…',
539
+ 'menu.startingApi': '正在启动 API…',
540
+ 'menu.stoppingApi': '正在停止 API…',
541
+ 'menu.restartingApi': '正在重启 API…',
542
+ 'menu.statusOn': '在线',
543
+ 'menu.statusOff': '离线',
544
+ 'menu.statusReady': '就绪',
545
+ 'menu.statusNotReady': '未就绪',
546
+ 'menu.statusYes': '可用',
547
+ 'menu.statusNo': '不可用',
548
+ 'menu.hint.dev': 'API + 数据库 + 前端',
549
+ 'menu.hint.init': '生成 .reactpress + .env',
550
+ 'menu.hint.status': '所有服务概览',
551
+ 'menu.hint.doctor': '环境健康检查',
552
+ 'menu.hint.devApi': 'watch 模式',
553
+ 'menu.hint.devClient': 'Next.js 开发',
554
+ 'menu.hint.serverStart': '后台生产模式',
555
+ 'menu.hint.serverStop': '',
556
+ 'menu.hint.serverRestart': '',
557
+ 'menu.hint.build': '生产构建产物',
558
+ 'menu.hint.dockerStart': '数据库 + nginx + 全栈',
559
+ 'menu.hint.dockerUp': '仅数据库',
560
+ 'menu.hint.dockerStop': '',
561
+ 'menu.nginxUp': '启动 nginx 反向代理 (:80)',
562
+ 'menu.nginxOpen': '在浏览器打开 nginx 入口',
563
+ 'menu.nginxReload': '修改配置后重载 nginx',
564
+ 'menu.hint.nginxUp': '统一入口 :80',
565
+ 'menu.hint.nginxOpen': 'http://localhost',
566
+ 'menu.hint.nginxReload': 'nginx -t 后 reload',
567
+ 'menu.hint.openAdmin': '在浏览器打开',
568
+ 'menu.hint.publish': '仅维护者使用',
569
+ 'menu.hint.exit': '',
570
+ 'menu.actionPrefix': '操作',
368
571
  'dev.startingApi': '[reactpress] 正在启动 API(首次可能需安装依赖,请稍候)…',
369
572
  'dev.waitingApi': '[reactpress] 等待 API 就绪: {url}',
370
573
  'dev.apiTimeout': '[reactpress] API 在 {seconds}s 内未就绪。\n → 运行 reactpress doctor 查看详情\n → 嵌入式 MySQL:reactpress docker up\n → 检查 .env 中 DB_* 与 SERVER_SITE_URL',
@@ -376,11 +579,16 @@ const STRINGS = {
376
579
  'dev.nextDoctor': ' → reactpress doctor 环境诊断',
377
580
  'dev.nextDocker': ' → reactpress docker up 启动嵌入式 MySQL',
378
581
  'dev.nextEnv': ' → 检查 .env 中 DB_* 与 SERVER_SITE_URL',
379
- 'devBanner.ready': ' ✓ ReactPress 开发环境已就绪',
582
+ 'dev.standaloneHint': '[reactpress] 独立项目:当前目录仅启动 API,前端请单独构建。',
583
+ 'devBanner.ready': 'ReactPress 开发环境已就绪',
380
584
  'devBanner.site': '前台',
381
585
  'devBanner.admin': '管理端',
586
+ 'devBanner.api': 'API',
587
+ 'devBanner.swagger': 'Swagger',
382
588
  'devBanner.health': '健康检查',
383
- 'devBanner.hint': ' 诊断: reactpress doctor · 状态: reactpress status',
589
+ 'devBanner.hint': '诊断: reactpress doctor · 状态: reactpress status',
590
+ 'devBanner.shortcuts': 'Ctrl+C 停止',
591
+ 'devBanner.allSystemsGo': '一切就绪',
384
592
  'doctor.nodeBad': 'Node.js {version}(需要 ≥ 18)',
385
593
  'doctor.nodeFix': '请安装 Node.js 18+:https://nodejs.org/',
386
594
  'doctor.dockerOk': 'Docker 引擎可用',
@@ -411,17 +619,22 @@ const STRINGS = {
411
619
  'doctor.envOk': '.env 存在',
412
620
  'doctor.envBad': '缺少 .env',
413
621
  'doctor.envFix': '运行 reactpress init 或 reactpress config --apply',
414
- 'doctor.project': ' 项目: {path}',
415
- 'doctor.allPass': ' 全部检查通过,可以开始开发。',
416
- 'doctor.failed': ' {count} 项需要处理。',
417
- 'status.title': ' ReactPress 项目状态',
418
- 'status.dir': ' 项目目录 {path}',
419
- 'status.apiSource': ' API 来源 {source}',
622
+ 'doctor.project': '项目目录 {path}',
623
+ 'doctor.allPass': '全部检查通过,可以开始开发。',
624
+ 'doctor.failed': '{count} 项需要处理。',
625
+ 'doctor.title': 'ReactPress Doctor',
626
+ 'doctor.subtitle': '环境健康检查',
627
+ 'doctor.checking': '正在检查 {name}…',
628
+ 'doctor.summary': '通过 {passed} · 失败 {failed} · 共 {total} 项',
629
+ 'doctor.fixesHeader': '修复建议',
630
+ 'status.title': 'ReactPress 项目状态',
631
+ 'status.dir': '项目目录 {path}',
632
+ 'status.apiSource': 'API 来源 {source}',
420
633
  'status.apiSource.monorepo': 'monorepo server/',
421
634
  'status.apiSource.bundle': 'reactpress-cli',
422
- 'status.configOk': '.reactpress/config.json ✓',
635
+ 'status.configOk': '.reactpress/config.json',
423
636
  'status.configBad': '未初始化',
424
- 'status.envOk': '.env ✓',
637
+ 'status.envOk': '.env',
425
638
  'status.envBad': '缺少 .env',
426
639
  'status.apiOnline': '在线',
427
640
  'status.apiOffline': '离线',
@@ -429,10 +642,24 @@ const STRINGS = {
429
642
  'status.dbUp': '连通',
430
643
  'status.dbDown': '不可用',
431
644
  'status.pidRunning': '(运行中)',
432
- 'status.frontend': ' 前端',
433
- 'status.docker': ' Docker',
645
+ 'status.frontend': '前端',
646
+ 'status.docker': 'Docker',
434
647
  'status.dockerUp': '可用',
435
648
  'status.dockerDown': '未运行',
649
+ 'status.section.project': '项目信息',
650
+ 'status.section.api': 'API 服务',
651
+ 'status.section.frontend': '前端',
652
+ 'status.section.docker': 'Docker',
653
+ 'status.field.url': 'URL',
654
+ 'status.field.http': 'HTTP',
655
+ 'status.field.health': '健康',
656
+ 'status.field.database': '数据库',
657
+ 'status.field.pid': 'PID',
658
+ 'status.field.engine': '引擎',
659
+ 'status.field.config': '配置',
660
+ 'status.field.env': '环境',
661
+ 'status.field.source': '来源',
662
+ 'status.field.dir': '目录',
436
663
  'bootstrap.configReady': '配置已存在,数据库已就绪。',
437
664
  'bootstrap.projectDbPending': '项目已创建,但数据库未就绪: {message}。请确认 Docker 已启动后重试 reactpress dev。',
438
665
  'bootstrap.ready': 'ReactPress 开发环境已就绪(配置 + 数据库)。',
@@ -443,7 +670,9 @@ const STRINGS = {
443
670
  'bootstrap.dbReady': '数据库已就绪',
444
671
  'db.backup.to': '备份数据库到 {path}',
445
672
  'db.backup.done': '备份完成',
446
- 'db.backup.fail': 'mysqldump 失败,请确认已安装 MySQL 客户端且 .env 正确',
673
+ 'db.backup.viaDocker': '本机未找到 mysqldump,改用 Docker 内 db 容器的 mysqldump…',
674
+ 'db.backup.fail':
675
+ 'mysqldump 失败:请安装 MySQL 客户端(如 brew install mysql-client),或确保 Docker 数据库已运行以便自动在容器内备份',
447
676
  'common.done': '完成',
448
677
  'common.yes': '是',
449
678
  'common.no': '否',
@@ -481,9 +710,37 @@ const STRINGS = {
481
710
  'docker.mysqlTimeout': '[reactpress] MySQL 在超时时间内未就绪。',
482
711
  'docker.mysqlNotReady': 'MySQL 未就绪',
483
712
  'docker.startDevStack': '[reactpress] 启动 API + 前端 (Docker MySQL)…',
484
- 'docker.visitUrls': '[reactpress] 访问: http://localhost:8080 (nginx) / http://localhost:3001 (client)',
713
+ 'docker.visitUrls': '[reactpress] 访问: http://localhost (nginx) / http://localhost:3001 (client)',
485
714
  'docker.devProcessExit': '开发进程退出: {code}',
486
715
  'docker.unknownCommand': '未知 docker 命令: {command}',
716
+ 'nginx.configCreated': '[reactpress] 已生成 nginx 配置: {path}',
717
+ 'nginx.configExists': '[reactpress] nginx 配置已存在: {path}',
718
+ 'nginx.ensureWarn': '[reactpress] 无法确保 nginx 配置: {message}',
719
+ 'nginx.started': '[reactpress] Nginx 已启动 — {url}',
720
+ 'nginx.configPath': '[reactpress] 配置: {path}',
721
+ 'nginx.stopped': '[reactpress] Nginx 已停止。',
722
+ 'nginx.startFailed': '启动 nginx 容器失败',
723
+ 'nginx.prodMonorepoOnly': '生产 nginx(--prod)需要 monorepo 且存在 docker-compose.prod.yml',
724
+ 'nginx.statusTitle': '[reactpress] Nginx 状态',
725
+ 'nginx.statusContainer': ' 容器 {name}: {running}',
726
+ 'nginx.statusConfig': ' 配置 {path}: {exists}',
727
+ 'nginx.statusUrl': ' 入口 {url} (端口 {port})',
728
+ 'nginx.statusMode': ' 模式: {mode}',
729
+ 'nginx.notRunning': 'Nginx 容器未运行。请执行: reactpress nginx up',
730
+ 'nginx.testOk': '[reactpress] Nginx 配置校验通过。',
731
+ 'nginx.testFailed': 'Nginx 配置校验失败',
732
+ 'nginx.reloadOk': '[reactpress] Nginx 已重载。',
733
+ 'nginx.reloadFailed': 'Nginx 重载失败',
734
+ 'nginx.opening': '[reactpress] 正在打开 {url}',
735
+ 'nginx.unknownCommand': '未知 nginx 命令: {command}',
736
+ 'nginx.templateMissing': '内置 nginx 模板缺失: {path}',
737
+ 'nginx.doctorSkippedDocker': '已跳过(Docker 未运行)',
738
+ 'nginx.doctorSkippedNotRunning': '未启动(可选: reactpress nginx up)',
739
+ 'nginx.doctorNotRunningFix': 'reactpress nginx up(或 reactpress docker up)',
740
+ 'nginx.doctorOk': 'Nginx 健康 ({url}/health)',
741
+ 'nginx.doctorUnhealthy': 'Nginx 在运行但 /health 失败 ({url})',
742
+ 'nginx.doctorUnhealthyFix': '确认前端 (:3001) 与 API (:3002) 已启动;可执行 reactpress nginx reload',
743
+ 'doctor.check.nginx': 'Nginx 代理',
487
744
  'apiDev.modeServer': '[reactpress] 开发模式: server/ (nest start --watch)',
488
745
  'apiDev.modeBundled': '[reactpress] 开发模式: 内置 API(随包附带)',
489
746
  'apiDev.ctrlCHint': '[reactpress] 按 Ctrl+C 停止 API。',
@@ -491,12 +748,12 @@ const STRINGS = {
491
748
  'build.unknownTarget': '未知构建目标: {target},可选: {available}',
492
749
  'build.recursive': '检测到构建递归(pnpm run build 不能再次调用自身)。请使用 build:toolkit、build:server 或 build:client。',
493
750
  'build.forbiddenScript': '无效的构建脚本 "{script}",请使用 build:toolkit 等细分脚本。',
494
- 'build.stepFailed': '[reactpress] [{current}/{total}] {label} 失败',
495
- 'build.plan': '[reactpress] 生产构建 — 共 {total} 步:toolkit → server → client',
496
- 'build.step': '[reactpress] [{current}/{total}] {label}…',
497
- 'build.stepDone': '[reactpress] [{current}/{total}] {label} ✓ ({seconds}s)',
498
- 'build.stepSkipped': '[reactpress] 已跳过 {label}(当前项目无对应源码包)',
499
- 'build.done': '[reactpress] 构建完成,耗时 {seconds}s',
751
+ 'build.stepFailed': '[{current}/{total}] {label} 失败',
752
+ 'build.plan': '生产构建 — 共 {total} 步:toolkit → server → client',
753
+ 'build.step': '[{current}/{total}] {label}',
754
+ 'build.stepDone': '[{current}/{total}] {label} ({seconds}s)',
755
+ 'build.stepSkipped': '已跳过 {label}(当前项目无对应源码包)',
756
+ 'build.done': '构建完成,耗时 {seconds}s',
500
757
  'build.label.toolkit': 'Toolkit',
501
758
  'build.label.server': 'API (server)',
502
759
  'build.label.client': '前端 (client)',
package/lib/lifecycle.js CHANGED
@@ -1,4 +1,5 @@
1
1
  const { spawn } = require('child_process');
2
+ const ora = require('ora');
2
3
  const { ensureProjectEnvironment } = require('./bootstrap');
3
4
  const { loadServerSiteUrl, waitForHttp } = require('./http');
4
5
  const {
@@ -8,10 +9,43 @@ const {
8
9
  canStartLocalApi,
9
10
  getPidFile,
10
11
  } = require('./paths');
12
+ const net = require('net');
11
13
  const { readPid, isProcessRunning, clearPidFile, writePid } = require('./process');
12
14
  const { ensureOriginalCwd } = require('./root');
13
15
  const { t } = require('./i18n');
14
16
 
17
+ function parseServerPort(projectRoot) {
18
+ try {
19
+ const url = new URL(loadServerSiteUrl(projectRoot));
20
+ return Number(url.port) || 3002;
21
+ } catch {
22
+ return 3002;
23
+ }
24
+ }
25
+
26
+ function isPortBusy(port, host = '127.0.0.1') {
27
+ return new Promise((resolve) => {
28
+ const socket = net.createConnection({ port, host }, () => {
29
+ socket.destroy();
30
+ resolve(true);
31
+ });
32
+ socket.on('error', () => resolve(false));
33
+ socket.setTimeout(800, () => {
34
+ socket.destroy();
35
+ resolve(false);
36
+ });
37
+ });
38
+ }
39
+
40
+ async function waitForPortFree(port, timeoutMs = 8000) {
41
+ const deadline = Date.now() + timeoutMs;
42
+ while (Date.now() < deadline) {
43
+ if (!(await isPortBusy(port))) return true;
44
+ await new Promise((r) => setTimeout(r, 200));
45
+ }
46
+ return false;
47
+ }
48
+
15
49
  async function ensureConfig(projectRoot) {
16
50
  try {
17
51
  await ensureProjectEnvironment(projectRoot);
@@ -77,12 +111,17 @@ async function startApi(projectRoot, { wait = true } = {}) {
77
111
  }
78
112
 
79
113
  const serverUrl = loadServerSiteUrl(projectRoot);
114
+ const spinner = ora({
115
+ text: t('dev.waitingApi', { url: serverUrl }),
116
+ color: 'magenta',
117
+ spinner: 'dots',
118
+ }).start();
80
119
  const ready = await waitForHttp(serverUrl);
81
120
  if (!ready) {
82
- console.error(t('lifecycle.apiTimeout120', { url: serverUrl }));
121
+ spinner.fail(t('lifecycle.apiTimeout120', { url: serverUrl }));
83
122
  return 1;
84
123
  }
85
- console.log(t('lifecycle.apiReady', { url: serverUrl }));
124
+ spinner.succeed(t('lifecycle.apiReady', { url: serverUrl }));
86
125
  return 0;
87
126
  }
88
127
 
@@ -132,6 +171,8 @@ async function runLifecycleCommand(command, projectRoot = ensureOriginalCwd()) {
132
171
  return 0;
133
172
  case 'restart':
134
173
  stopApi(projectRoot);
174
+ await waitForPortFree(parseServerPort(projectRoot));
175
+ await new Promise((r) => setTimeout(r, 400));
135
176
  return startApi(projectRoot, { wait: true });
136
177
  case 'status':
137
178
  await statusApi(projectRoot);