@fecommunity/reactpress 3.7.0 → 4.0.0-beta.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 (406) hide show
  1. package/bin/reactpress-cli-shim.js +2 -6
  2. package/bin/reactpress-theme-client.js +2 -0
  3. package/bin/reactpress.js +1 -380
  4. package/out/.source-fingerprint-cli +1 -0
  5. package/out/bin/reactpress-cli-shim.d.ts +3 -0
  6. package/out/bin/reactpress-cli-shim.d.ts.map +1 -0
  7. package/out/bin/reactpress-cli-shim.js +28 -0
  8. package/out/bin/reactpress-cli-shim.js.map +1 -0
  9. package/out/bin/reactpress-theme-client.d.ts +3 -0
  10. package/out/bin/reactpress-theme-client.d.ts.map +1 -0
  11. package/out/bin/reactpress-theme-client.js +113 -0
  12. package/out/bin/reactpress-theme-client.js.map +1 -0
  13. package/out/bin/reactpress.d.ts +3 -0
  14. package/out/bin/reactpress.d.ts.map +1 -0
  15. package/out/bin/reactpress.js +534 -0
  16. package/out/bin/reactpress.js.map +1 -0
  17. package/out/core/services/config.d.ts +12 -0
  18. package/out/core/services/config.d.ts.map +1 -0
  19. package/out/core/services/config.js +137 -0
  20. package/out/core/services/config.js.map +1 -0
  21. package/out/core/services/database/index.d.ts +17 -0
  22. package/out/core/services/database/index.d.ts.map +1 -0
  23. package/out/core/services/database/index.js +242 -0
  24. package/out/core/services/database/index.js.map +1 -0
  25. package/out/core/services/database/mysql.d.ts +14 -0
  26. package/out/core/services/database/mysql.d.ts.map +1 -0
  27. package/out/core/services/database/mysql.js +82 -0
  28. package/out/core/services/database/mysql.js.map +1 -0
  29. package/out/core/services/database/profile.d.ts +6 -0
  30. package/out/core/services/database/profile.d.ts.map +1 -0
  31. package/out/core/services/database/profile.js +60 -0
  32. package/out/core/services/database/profile.js.map +1 -0
  33. package/out/core/services/database/sqlite.d.ts +10 -0
  34. package/out/core/services/database/sqlite.d.ts.map +1 -0
  35. package/out/core/services/database/sqlite.js +73 -0
  36. package/out/core/services/database/sqlite.js.map +1 -0
  37. package/out/core/services/exec.d.ts +21 -0
  38. package/out/core/services/exec.d.ts.map +1 -0
  39. package/out/core/services/exec.js +56 -0
  40. package/out/core/services/exec.js.map +1 -0
  41. package/out/core/services/init.d.ts +11 -0
  42. package/out/core/services/init.d.ts.map +1 -0
  43. package/out/core/services/init.js +60 -0
  44. package/out/core/services/init.js.map +1 -0
  45. package/out/core/services/local-site.d.ts +24 -0
  46. package/out/core/services/local-site.d.ts.map +1 -0
  47. package/out/core/services/local-site.js +144 -0
  48. package/out/core/services/local-site.js.map +1 -0
  49. package/out/core/utils/cli-context.d.ts +3 -0
  50. package/out/core/utils/cli-context.d.ts.map +1 -0
  51. package/out/core/utils/cli-context.js +12 -0
  52. package/out/core/utils/cli-context.js.map +1 -0
  53. package/out/core/utils/paths.d.ts +20 -0
  54. package/out/core/utils/paths.d.ts.map +1 -0
  55. package/out/core/utils/paths.js +34 -0
  56. package/out/core/utils/paths.js.map +1 -0
  57. package/out/core/utils/platform.d.ts +7 -0
  58. package/out/core/utils/platform.d.ts.map +1 -0
  59. package/out/core/utils/platform.js +28 -0
  60. package/out/core/utils/platform.js.map +1 -0
  61. package/out/core/utils/port.d.ts +4 -0
  62. package/out/core/utils/port.d.ts.map +1 -0
  63. package/out/core/utils/port.js +32 -0
  64. package/out/core/utils/port.js.map +1 -0
  65. package/out/lib/api-dev-runner.d.ts +3 -0
  66. package/out/lib/api-dev-runner.d.ts.map +1 -0
  67. package/{lib → out/lib}/api-dev-runner.js +4 -1
  68. package/out/lib/api-dev-runner.js.map +1 -0
  69. package/out/lib/api-dev.d.ts +2 -0
  70. package/out/lib/api-dev.d.ts.map +1 -0
  71. package/out/lib/api-dev.js +101 -0
  72. package/out/lib/api-dev.js.map +1 -0
  73. package/out/lib/bootstrap.d.ts +18 -0
  74. package/out/lib/bootstrap.d.ts.map +1 -0
  75. package/out/lib/bootstrap.js +93 -0
  76. package/out/lib/bootstrap.js.map +1 -0
  77. package/out/lib/build.d.ts +2 -0
  78. package/out/lib/build.d.ts.map +1 -0
  79. package/out/lib/build.js +191 -0
  80. package/out/lib/build.js.map +1 -0
  81. package/out/lib/db-backup.d.ts +2 -0
  82. package/out/lib/db-backup.d.ts.map +1 -0
  83. package/out/lib/db-backup.js +68 -0
  84. package/out/lib/db-backup.js.map +1 -0
  85. package/out/lib/dev-banner.d.ts +2 -0
  86. package/out/lib/dev-banner.d.ts.map +1 -0
  87. package/out/lib/dev-banner.js +102 -0
  88. package/out/lib/dev-banner.js.map +1 -0
  89. package/out/lib/dev-child-io.d.ts +2 -0
  90. package/out/lib/dev-child-io.d.ts.map +1 -0
  91. package/out/lib/dev-child-io.js +80 -0
  92. package/out/lib/dev-child-io.js.map +1 -0
  93. package/out/lib/dev-log.d.ts +2 -0
  94. package/out/lib/dev-log.d.ts.map +1 -0
  95. package/out/lib/dev-log.js +64 -0
  96. package/out/lib/dev-log.js.map +1 -0
  97. package/out/lib/dev-session.d.ts +2 -0
  98. package/out/lib/dev-session.d.ts.map +1 -0
  99. package/out/lib/dev-session.js +95 -0
  100. package/out/lib/dev-session.js.map +1 -0
  101. package/out/lib/dev.d.ts +2 -0
  102. package/out/lib/dev.d.ts.map +1 -0
  103. package/out/lib/dev.js +906 -0
  104. package/out/lib/dev.js.map +1 -0
  105. package/out/lib/docker.d.ts +2 -0
  106. package/out/lib/docker.d.ts.map +1 -0
  107. package/out/lib/docker.js +398 -0
  108. package/out/lib/docker.js.map +1 -0
  109. package/out/lib/doctor.d.ts +2 -0
  110. package/out/lib/doctor.d.ts.map +1 -0
  111. package/out/lib/doctor.js +260 -0
  112. package/out/lib/doctor.js.map +1 -0
  113. package/out/lib/health-parse.d.ts +5 -0
  114. package/out/lib/health-parse.d.ts.map +1 -0
  115. package/out/lib/health-parse.js +36 -0
  116. package/out/lib/health-parse.js.map +1 -0
  117. package/out/lib/health-parse.test.d.ts +2 -0
  118. package/out/lib/health-parse.test.d.ts.map +1 -0
  119. package/out/lib/health-parse.test.js +19 -0
  120. package/out/lib/health-parse.test.js.map +1 -0
  121. package/out/lib/http.d.ts +2 -0
  122. package/out/lib/http.d.ts.map +1 -0
  123. package/out/lib/http.js +234 -0
  124. package/out/lib/http.js.map +1 -0
  125. package/out/lib/i18n/index.d.ts +2 -0
  126. package/out/lib/i18n/index.d.ts.map +1 -0
  127. package/out/lib/i18n/index.js +29 -0
  128. package/out/lib/i18n/index.js.map +1 -0
  129. package/out/lib/i18n/strings.d.ts +2 -0
  130. package/out/lib/i18n/strings.d.ts.map +1 -0
  131. package/out/lib/i18n/strings.js +1140 -0
  132. package/out/lib/i18n/strings.js.map +1 -0
  133. package/out/lib/lifecycle.d.ts +2 -0
  134. package/out/lib/lifecycle.d.ts.map +1 -0
  135. package/out/lib/lifecycle.js +169 -0
  136. package/out/lib/lifecycle.js.map +1 -0
  137. package/out/lib/nginx.d.ts +2 -0
  138. package/out/lib/nginx.d.ts.map +1 -0
  139. package/out/lib/nginx.js +618 -0
  140. package/out/lib/nginx.js.map +1 -0
  141. package/out/lib/paths.d.ts +2 -0
  142. package/out/lib/paths.d.ts.map +1 -0
  143. package/out/lib/paths.js +106 -0
  144. package/out/lib/paths.js.map +1 -0
  145. package/out/lib/plugin-build.d.ts +2 -0
  146. package/out/lib/plugin-build.d.ts.map +1 -0
  147. package/out/lib/plugin-build.js +104 -0
  148. package/out/lib/plugin-build.js.map +1 -0
  149. package/out/lib/plugin-cli.d.ts +2 -0
  150. package/out/lib/plugin-cli.d.ts.map +1 -0
  151. package/out/lib/plugin-cli.js +142 -0
  152. package/out/lib/plugin-cli.js.map +1 -0
  153. package/out/lib/pm2.d.ts +2 -0
  154. package/out/lib/pm2.d.ts.map +1 -0
  155. package/out/lib/pm2.js +32 -0
  156. package/out/lib/pm2.js.map +1 -0
  157. package/out/lib/ports.d.ts +2 -0
  158. package/out/lib/ports.d.ts.map +1 -0
  159. package/out/lib/ports.js +394 -0
  160. package/out/lib/ports.js.map +1 -0
  161. package/out/lib/process.d.ts +2 -0
  162. package/out/lib/process.d.ts.map +1 -0
  163. package/out/lib/process.js +47 -0
  164. package/out/lib/process.js.map +1 -0
  165. package/out/lib/prod-memory.d.ts +6 -0
  166. package/out/lib/prod-memory.d.ts.map +1 -0
  167. package/out/lib/prod-memory.js +57 -0
  168. package/out/lib/prod-memory.js.map +1 -0
  169. package/out/lib/project-type.d.ts +2 -0
  170. package/out/lib/project-type.d.ts.map +1 -0
  171. package/out/lib/project-type.js +77 -0
  172. package/out/lib/project-type.js.map +1 -0
  173. package/out/lib/publish.d.ts +3 -0
  174. package/out/lib/publish.d.ts.map +1 -0
  175. package/out/lib/publish.js +388 -0
  176. package/out/lib/publish.js.map +1 -0
  177. package/out/lib/remote-dev.d.ts +2 -0
  178. package/out/lib/remote-dev.d.ts.map +1 -0
  179. package/out/lib/remote-dev.js +158 -0
  180. package/out/lib/remote-dev.js.map +1 -0
  181. package/out/lib/root.d.ts +2 -0
  182. package/out/lib/root.d.ts.map +1 -0
  183. package/out/lib/root.js +85 -0
  184. package/out/lib/root.js.map +1 -0
  185. package/out/lib/spawn.d.ts +2 -0
  186. package/out/lib/spawn.d.ts.map +1 -0
  187. package/out/lib/spawn.js +96 -0
  188. package/out/lib/spawn.js.map +1 -0
  189. package/out/lib/status.d.ts +2 -0
  190. package/out/lib/status.d.ts.map +1 -0
  191. package/out/lib/status.js +78 -0
  192. package/out/lib/status.js.map +1 -0
  193. package/out/lib/theme-catalog.d.ts +2 -0
  194. package/out/lib/theme-catalog.d.ts.map +1 -0
  195. package/out/lib/theme-catalog.js +6 -0
  196. package/out/lib/theme-catalog.js.map +1 -0
  197. package/out/lib/theme-cli.d.ts +2 -0
  198. package/out/lib/theme-cli.d.ts.map +1 -0
  199. package/out/lib/theme-cli.js +50 -0
  200. package/out/lib/theme-cli.js.map +1 -0
  201. package/out/lib/theme-dev.d.ts +2 -0
  202. package/out/lib/theme-dev.d.ts.map +1 -0
  203. package/out/lib/theme-dev.js +759 -0
  204. package/out/lib/theme-dev.js.map +1 -0
  205. package/out/lib/theme-env.d.ts +2 -0
  206. package/out/lib/theme-env.d.ts.map +1 -0
  207. package/out/lib/theme-env.js +101 -0
  208. package/out/lib/theme-env.js.map +1 -0
  209. package/out/lib/theme-install.d.ts +2 -0
  210. package/out/lib/theme-install.d.ts.map +1 -0
  211. package/out/lib/theme-install.js +363 -0
  212. package/out/lib/theme-install.js.map +1 -0
  213. package/out/lib/theme-lock.d.ts +2 -0
  214. package/out/lib/theme-lock.d.ts.map +1 -0
  215. package/out/lib/theme-lock.js +70 -0
  216. package/out/lib/theme-lock.js.map +1 -0
  217. package/out/lib/theme-paths.d.ts +2 -0
  218. package/out/lib/theme-paths.d.ts.map +1 -0
  219. package/out/lib/theme-paths.js +73 -0
  220. package/out/lib/theme-paths.js.map +1 -0
  221. package/out/lib/theme-placeholder-cover.d.ts +13 -0
  222. package/out/lib/theme-placeholder-cover.d.ts.map +1 -0
  223. package/out/lib/theme-placeholder-cover.js +95 -0
  224. package/out/lib/theme-placeholder-cover.js.map +1 -0
  225. package/out/lib/theme-preview-frame.d.ts +2 -0
  226. package/out/lib/theme-preview-frame.d.ts.map +1 -0
  227. package/out/lib/theme-preview-frame.js +107 -0
  228. package/out/lib/theme-preview-frame.js.map +1 -0
  229. package/out/lib/theme-preview-pool.d.ts +2 -0
  230. package/out/lib/theme-preview-pool.d.ts.map +1 -0
  231. package/out/lib/theme-preview-pool.js +484 -0
  232. package/out/lib/theme-preview-pool.js.map +1 -0
  233. package/out/lib/theme-preview-proxy.d.ts +2 -0
  234. package/out/lib/theme-preview-proxy.d.ts.map +1 -0
  235. package/out/lib/theme-preview-proxy.js +101 -0
  236. package/out/lib/theme-preview-proxy.js.map +1 -0
  237. package/out/lib/theme-prod.d.ts +2 -0
  238. package/out/lib/theme-prod.d.ts.map +1 -0
  239. package/out/lib/theme-prod.js +400 -0
  240. package/out/lib/theme-prod.js.map +1 -0
  241. package/out/lib/theme-registry.d.ts +2 -0
  242. package/out/lib/theme-registry.d.ts.map +1 -0
  243. package/out/lib/theme-registry.js +135 -0
  244. package/out/lib/theme-registry.js.map +1 -0
  245. package/out/lib/theme-runtime.d.ts +2 -0
  246. package/out/lib/theme-runtime.d.ts.map +1 -0
  247. package/out/lib/theme-runtime.js +344 -0
  248. package/out/lib/theme-runtime.js.map +1 -0
  249. package/out/lib/theme-sources.d.ts +2 -0
  250. package/out/lib/theme-sources.d.ts.map +1 -0
  251. package/out/lib/theme-sources.js +347 -0
  252. package/out/lib/theme-sources.js.map +1 -0
  253. package/out/lib/theme-warmup.d.ts +2 -0
  254. package/out/lib/theme-warmup.d.ts.map +1 -0
  255. package/out/lib/theme-warmup.js +167 -0
  256. package/out/lib/theme-warmup.js.map +1 -0
  257. package/out/lib/toolkit-build.d.ts +2 -0
  258. package/out/lib/toolkit-build.d.ts.map +1 -0
  259. package/out/lib/toolkit-build.js +57 -0
  260. package/out/lib/toolkit-build.js.map +1 -0
  261. package/out/types/config.d.ts +57 -0
  262. package/out/types/config.d.ts.map +1 -0
  263. package/out/types/config.js +3 -0
  264. package/out/types/config.js.map +1 -0
  265. package/out/ui/banner.d.ts +2 -0
  266. package/out/ui/banner.d.ts.map +1 -0
  267. package/out/ui/banner.js +358 -0
  268. package/out/ui/banner.js.map +1 -0
  269. package/out/ui/interactive.d.ts +2 -0
  270. package/out/ui/interactive.d.ts.map +1 -0
  271. package/out/ui/interactive.js +328 -0
  272. package/out/ui/interactive.js.map +1 -0
  273. package/out/ui/theme.d.ts +2 -0
  274. package/out/ui/theme.d.ts.map +1 -0
  275. package/out/ui/theme.js +250 -0
  276. package/out/ui/theme.js.map +1 -0
  277. package/package.json +13 -7
  278. package/server/dist/common/api-messages.d.ts +9 -0
  279. package/server/dist/common/api-messages.js +9 -0
  280. package/server/dist/common/api-messages.js.map +1 -1
  281. package/server/dist/database/typeorm-options.d.ts +3 -0
  282. package/server/dist/database/typeorm-options.js +60 -0
  283. package/server/dist/database/typeorm-options.js.map +1 -0
  284. package/server/dist/modules/api-key/api-key.controller.js.map +1 -1
  285. package/server/dist/modules/api-key/api-key.entity.js.map +1 -1
  286. package/server/dist/modules/api-key/api-key.guard.js +2 -3
  287. package/server/dist/modules/api-key/api-key.guard.js.map +1 -1
  288. package/server/dist/modules/api-key/api-key.module.js.map +1 -1
  289. package/server/dist/modules/api-key/api-key.service.js +1 -1
  290. package/server/dist/modules/api-key/api-key.service.js.map +1 -1
  291. package/server/dist/modules/article/article-revision.entity.js +3 -3
  292. package/server/dist/modules/article/article-revision.entity.js.map +1 -1
  293. package/server/dist/modules/article/article-slug.util.d.ts +2 -0
  294. package/server/dist/modules/article/article-slug.util.js +19 -0
  295. package/server/dist/modules/article/article-slug.util.js.map +1 -0
  296. package/server/dist/modules/article/scheduled-publish.service.js.map +1 -1
  297. package/server/dist/modules/bootstrap/bootstrap.constants.d.ts +20 -0
  298. package/server/dist/modules/bootstrap/bootstrap.constants.js +171 -0
  299. package/server/dist/modules/bootstrap/bootstrap.constants.js.map +1 -0
  300. package/server/dist/modules/bootstrap/bootstrap.service.d.ts +22 -0
  301. package/server/dist/modules/bootstrap/bootstrap.service.js +183 -0
  302. package/server/dist/modules/bootstrap/bootstrap.service.js.map +1 -0
  303. package/server/dist/modules/bootstrap/install-locale.d.ts +2 -0
  304. package/server/dist/modules/bootstrap/install-locale.js +11 -0
  305. package/server/dist/modules/bootstrap/install-locale.js.map +1 -0
  306. package/server/dist/modules/extension/extension.module.d.ts +9 -0
  307. package/server/dist/modules/extension/extension.module.js +50 -0
  308. package/server/dist/modules/extension/extension.module.js.map +1 -0
  309. package/server/dist/modules/extension/plugin-loader.service.d.ts +12 -0
  310. package/server/dist/modules/extension/plugin-loader.service.js +96 -0
  311. package/server/dist/modules/extension/plugin-loader.service.js.map +1 -0
  312. package/server/dist/modules/extension/plugin-registry.bridge.d.ts +3 -0
  313. package/server/dist/modules/extension/plugin-registry.bridge.js +44 -0
  314. package/server/dist/modules/extension/plugin-registry.bridge.js.map +1 -0
  315. package/server/dist/modules/extension/plugin.controller.d.ts +22 -0
  316. package/server/dist/modules/extension/plugin.controller.js +155 -0
  317. package/server/dist/modules/extension/plugin.controller.js.map +1 -0
  318. package/server/dist/modules/extension/plugin.service.d.ts +52 -0
  319. package/server/dist/modules/extension/plugin.service.js +391 -0
  320. package/server/dist/modules/extension/plugin.service.js.map +1 -0
  321. package/server/dist/modules/extension/preview-draft.store.d.ts +13 -0
  322. package/server/dist/modules/extension/preview-draft.store.js +41 -0
  323. package/server/dist/modules/extension/preview-draft.store.js.map +1 -0
  324. package/server/dist/modules/extension/theme-registry.bridge.d.ts +56 -0
  325. package/server/dist/modules/extension/theme-registry.bridge.js +46 -0
  326. package/server/dist/modules/extension/theme-registry.bridge.js.map +1 -0
  327. package/server/dist/modules/extension/theme.controller.d.ts +66 -0
  328. package/server/dist/modules/extension/theme.controller.js +301 -0
  329. package/server/dist/modules/extension/theme.controller.js.map +1 -0
  330. package/server/dist/modules/extension/theme.service.d.ts +140 -0
  331. package/server/dist/modules/extension/theme.service.js +1039 -0
  332. package/server/dist/modules/extension/theme.service.js.map +1 -0
  333. package/server/dist/modules/file/file-optimization.controller.d.ts +12 -0
  334. package/server/dist/modules/file/file-optimization.controller.js +79 -0
  335. package/server/dist/modules/file/file-optimization.controller.js.map +1 -0
  336. package/server/dist/modules/file/file-optimization.service.d.ts +36 -0
  337. package/server/dist/modules/file/file-optimization.service.js +385 -0
  338. package/server/dist/modules/file/file-optimization.service.js.map +1 -0
  339. package/server/dist/modules/file/file-optimization.types.d.ts +66 -0
  340. package/server/dist/modules/file/file-optimization.types.js +5 -0
  341. package/server/dist/modules/file/file-optimization.types.js.map +1 -0
  342. package/server/dist/modules/file/image-optimizer-plugin.guard.d.ts +7 -0
  343. package/server/dist/modules/file/image-optimizer-plugin.guard.js +33 -0
  344. package/server/dist/modules/file/image-optimizer-plugin.guard.js.map +1 -0
  345. package/server/dist/modules/health/health.controller.js +2 -4
  346. package/server/dist/modules/health/health.controller.js.map +1 -1
  347. package/server/dist/modules/health/health.module.js.map +1 -1
  348. package/server/dist/modules/hook/hook.module.d.ts +2 -0
  349. package/server/dist/modules/hook/hook.module.js +22 -0
  350. package/server/dist/modules/hook/hook.module.js.map +1 -0
  351. package/server/dist/modules/hook/hook.service.d.ts +26 -0
  352. package/server/dist/modules/hook/hook.service.js +105 -0
  353. package/server/dist/modules/hook/hook.service.js.map +1 -0
  354. package/server/dist/modules/webhook/webhook.controller.js.map +1 -1
  355. package/server/dist/modules/webhook/webhook.entity.js.map +1 -1
  356. package/server/dist/modules/webhook/webhook.module.js.map +1 -1
  357. package/server/dist/modules/webhook/webhook.service.d.ts +1 -1
  358. package/server/dist/modules/webhook/webhook.service.js +5 -2
  359. package/server/dist/modules/webhook/webhook.service.js.map +1 -1
  360. package/server/dist/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
  361. package/server/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
  362. package/server/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
  363. package/server/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
  364. package/server/dist/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
  365. package/server/dist/tsconfig.tsbuildinfo +1 -0
  366. package/server/dist/utils/image-processor.util.d.ts +23 -0
  367. package/server/dist/utils/image-processor.util.js +88 -0
  368. package/server/dist/utils/image-processor.util.js.map +1 -0
  369. package/server/dist/utils/local-api-quiet.util.d.ts +1 -0
  370. package/server/dist/utils/local-api-quiet.util.js +8 -0
  371. package/server/dist/utils/local-api-quiet.util.js.map +1 -0
  372. package/server/dist/utils/project-root.util.d.ts +2 -0
  373. package/server/dist/utils/project-root.util.js +42 -0
  374. package/server/dist/utils/project-root.util.js.map +1 -0
  375. package/server/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
  376. package/server/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
  377. package/server/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
  378. package/server/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
  379. package/server/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
  380. package/templates/config.local.json +13 -0
  381. package/templates/env.local.default +10 -0
  382. package/templates/theme-catalog.json +27 -0
  383. package/lib/api-dev.js +0 -89
  384. package/lib/bootstrap.js +0 -114
  385. package/lib/build.js +0 -162
  386. package/lib/db-backup.js +0 -67
  387. package/lib/dev-banner.js +0 -72
  388. package/lib/dev.js +0 -141
  389. package/lib/docker.js +0 -275
  390. package/lib/doctor.js +0 -266
  391. package/lib/http.js +0 -182
  392. package/lib/i18n/index.js +0 -32
  393. package/lib/i18n/strings.js +0 -846
  394. package/lib/lifecycle.js +0 -190
  395. package/lib/nginx.js +0 -342
  396. package/lib/paths.js +0 -108
  397. package/lib/pm2.js +0 -32
  398. package/lib/process.js +0 -45
  399. package/lib/project-type.js +0 -72
  400. package/lib/publish.js +0 -968
  401. package/lib/root.js +0 -88
  402. package/lib/spawn.js +0 -92
  403. package/lib/status.js +0 -132
  404. package/ui/banner.js +0 -441
  405. package/ui/interactive.js +0 -380
  406. package/ui/theme.js +0 -265
@@ -1,846 +0,0 @@
1
- /** CLI user-facing strings — English first, Chinese via REACTPRESS_LANG=zh or zh LANG */
2
- const STRINGS = {
3
- en: {
4
- 'cli.description': 'ReactPress CLI — init, dev, build, deploy, and publish',
5
- 'cli.init.description': 'Initialize project (.reactpress/config.json + .env + Docker MySQL)',
6
- 'cli.init.directory': 'Project directory',
7
- 'cli.init.force': 'Overwrite existing config',
8
- 'cli.dev.description': 'Zero-config dev: env check + toolkit build + API + frontend',
9
- 'cli.dev.apiOnly': 'API only (watch)',
10
- 'cli.dev.clientOnly': 'Frontend only',
11
- 'cli.server.description': 'Manage API service',
12
- 'cli.server.start.description': 'Start API (wait until HTTP ready)',
13
- 'cli.server.start.pm2': 'Start with PM2 (production)',
14
- 'cli.server.start.bg': 'Start in background without waiting for HTTP',
15
- 'cli.server.stop': 'Stop API',
16
- 'cli.server.restart': 'Restart API',
17
- 'cli.server.status': 'API status',
18
- 'cli.client.description': 'Manage frontend',
19
- 'cli.client.start': 'Start Next.js client',
20
- 'cli.client.start.pm2': 'Start with PM2',
21
- 'cli.build.description': 'Build production artifacts',
22
- 'cli.docker.description': 'Docker dev environment (MySQL + nginx)',
23
- 'cli.docker.up': 'Start Docker services and wait for MySQL',
24
- 'cli.docker.down': 'Stop Docker services',
25
- 'cli.docker.start': 'Start Docker + full-stack dev (API + frontend)',
26
- 'cli.docker.restart': 'Restart Docker services',
27
- 'cli.docker.status': 'Docker container status',
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)',
42
- 'cli.status.description': 'Project, API, frontend, and Docker status',
43
- 'cli.doctor.description': 'Diagnose Node, Docker, ports, database, and API health',
44
- 'cli.db.description': 'Database operations',
45
- 'cli.db.backup': 'Backup current project database with mysqldump',
46
- 'cli.db.backup.output': 'Output SQL file path',
47
- 'cli.publish.description': 'Build and publish npm packages (interactive)',
48
- 'cli.publish.build': 'Build all packages only',
49
- 'cli.publish.publish': 'Interactive publish',
50
- 'cli.start.description': 'Production: start API + frontend',
51
- 'cli.help.examples': 'Examples:',
52
- 'cli.help.interactive': ' reactpress Interactive menu',
53
- 'cli.help.dev': ' reactpress dev Zero-config full-stack dev',
54
- 'cli.help.init': ' reactpress init --force Re-initialize config',
55
- 'cli.help.server': ' reactpress server start Start API',
56
- 'cli.help.status': ' reactpress status Combined status',
57
- 'cli.help.doctor': ' reactpress doctor Environment diagnostics',
58
- 'cli.help.docker': ' reactpress docker start Docker + full stack',
59
- 'cli.help.build': ' reactpress build -t client Build one target (toolkit|server|client|docs|all)',
60
- 'cli.help.publish': ' reactpress publish Publish npm packages',
61
- 'cli.build.target': 'Build target: toolkit | server | client | docs | all',
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',
76
- 'menu.dev': 'Zero-config dev (env + DB + API + frontend)',
77
- 'menu.init': 'Initialize project (.reactpress + .env + database)',
78
- 'menu.status': 'View project status',
79
- 'menu.doctor': 'Environment diagnostics (doctor)',
80
- 'menu.devApi': 'API only (dev watch)',
81
- 'menu.devClient': 'Frontend only',
82
- 'menu.serverStart': 'Start API (production background)',
83
- 'menu.serverStop': 'Stop API',
84
- 'menu.serverRestart': 'Restart API',
85
- 'menu.build': 'Build (toolkit → server → client)',
86
- 'menu.buildTarget': 'What do you want to build?',
87
- 'menu.buildAll': 'All (toolkit → server → client)',
88
- 'menu.dockerStart': 'Docker dev (DB + nginx + full stack)',
89
- 'menu.dockerUp': 'Docker: database only',
90
- 'menu.dockerStop': 'Stop Docker services',
91
- 'menu.openAdmin': 'Open admin in browser',
92
- 'menu.publish': 'Publish npm packages (interactive)',
93
- 'menu.exit': 'Exit',
94
- 'menu.prompt': 'Choose an action',
95
- 'menu.back': 'Return to main menu?',
96
- 'menu.retry': 'Return to main menu and retry?',
97
- 'menu.startingDev': 'Starting full-stack dev…',
98
- 'menu.initProject': 'Initializing project…',
99
- 'menu.done': 'Done',
100
- 'menu.opening': 'Opening {url}',
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',
151
- 'dev.startingApi': '[reactpress] Starting API (first run may install deps)…',
152
- 'dev.waitingApi': '[reactpress] Waiting for API: {url}',
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',
154
- 'dev.apiReady': '[reactpress] API ready, starting frontend…',
155
- 'dev.clientSlow': '[reactpress] Frontend not responding within {seconds}s; it may still be compiling. Visit {url} later',
156
- 'dev.envFailed': '[reactpress] Environment setup failed:',
157
- 'dev.toolkitFailed': 'toolkit build failed with exit code: {code}',
158
- 'dev.nextSteps': 'Suggested next steps:',
159
- 'dev.nextDoctor': ' → reactpress doctor Diagnostics',
160
- 'dev.nextDocker': ' → reactpress docker up Start embedded MySQL',
161
- 'dev.nextEnv': ' → Check DB_* and SERVER_SITE_URL in .env',
162
- 'dev.standaloneHint': '[reactpress] Standalone project: only API is started here; build your own frontend separately.',
163
- 'devBanner.ready': 'ReactPress dev environment is ready',
164
- 'devBanner.site': 'Site',
165
- 'devBanner.admin': 'Admin',
166
- 'devBanner.api': 'API',
167
- 'devBanner.swagger': 'Swagger',
168
- 'devBanner.health': 'Health',
169
- 'devBanner.hint': 'Diagnostics: reactpress doctor · Status: reactpress status',
170
- 'devBanner.shortcuts': 'Ctrl+C stop',
171
- 'devBanner.allSystemsGo': 'ALL SYSTEMS GO',
172
- 'doctor.nodeBad': 'Node.js {version} (requires ≥ 18)',
173
- 'doctor.nodeFix': 'Install Node.js 18+: https://nodejs.org/',
174
- 'doctor.dockerOk': 'Docker engine is available',
175
- 'doctor.dockerBad': 'Docker is not running or unavailable',
176
- 'doctor.dockerFix': 'Install and start Docker: https://docs.docker.com/get-docker/ , then run reactpress docker up; or use external MySQL in config.json',
177
- 'doctor.portApiBusy': 'API port {port} is in use',
178
- 'doctor.portClientBusy': 'Frontend port {port} is in use',
179
- 'doctor.portFix': 'Change SERVER_PORT / CLIENT_PORT in .env, or stop the blocking process',
180
- 'doctor.portOk': 'Ports {apiPort} (API) and {clientPort} (frontend) are available',
181
- 'doctor.dbNoMysql2': 'mysql2 not installed; cannot check database',
182
- 'doctor.dbMysql2Fix': 'Run pnpm install at monorepo root',
183
- 'doctor.dbOk': 'MySQL {host}:{port}/{database} connected',
184
- 'doctor.dbBad': 'Database connection failed: {error}',
185
- 'doctor.dbFix': 'Run reactpress docker up or check DB_* in .env',
186
- 'doctor.apiOk': 'API health check passed ({url})',
187
- 'doctor.apiBad': 'API health check failed ({url})',
188
- 'doctor.apiFix': 'Run reactpress server start or reactpress dev',
189
- 'doctor.pnpmBad': 'pnpm not found',
190
- 'doctor.pnpmFix': 'npm i -g pnpm, or enable corepack at monorepo root',
191
- 'doctor.check.config': 'Config file',
192
- 'doctor.check.env': 'Environment',
193
- 'doctor.check.ports': 'Ports',
194
- 'doctor.check.database': 'Database',
195
- 'doctor.check.api': 'API health',
196
- 'doctor.configOk': '.reactpress/config.json exists',
197
- 'doctor.configBad': 'Missing .reactpress/config.json',
198
- 'doctor.configFix': 'Run reactpress init',
199
- 'doctor.envOk': '.env exists',
200
- 'doctor.envBad': 'Missing .env',
201
- 'doctor.envFix': 'Run reactpress init or reactpress config --apply',
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}',
213
- 'status.apiSource.monorepo': 'monorepo server/',
214
- 'status.apiSource.bundle': 'reactpress-cli',
215
- 'status.configOk': '.reactpress/config.json',
216
- 'status.configBad': 'not initialized',
217
- 'status.envOk': '.env',
218
- 'status.envBad': 'missing .env',
219
- 'status.apiOnline': 'online',
220
- 'status.apiOffline': 'offline',
221
- 'status.apiUnreachable': '{url} (offline or not started)',
222
- 'status.dbUp': 'connected',
223
- 'status.dbDown': 'unavailable',
224
- 'status.pidRunning': '(running)',
225
- 'status.frontend': 'Frontend',
226
- 'status.docker': 'Docker',
227
- 'status.dockerUp': 'available',
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',
243
- 'bootstrap.configReady': 'Config exists and database is ready.',
244
- 'bootstrap.projectDbPending': 'Project created, but database is not ready: {message}. Start Docker and run reactpress dev again.',
245
- 'bootstrap.ready': 'ReactPress dev environment is ready (config + database).',
246
- 'bootstrap.initFailed': 'Initialization failed',
247
- 'bootstrap.cliInitFailed': 'reactpress-cli init failed',
248
- 'bootstrap.dbPendingShort': 'Database not ready',
249
- 'bootstrap.dbNotReady': '{message}. Tip: start Docker and run reactpress docker up, or run reactpress doctor',
250
- 'bootstrap.dbReady': 'Database is ready',
251
- 'db.backup.to': 'Backing up database to {path}',
252
- 'db.backup.done': 'Backup complete',
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',
256
- 'common.done': 'Done',
257
- 'common.yes': 'yes',
258
- 'common.no': 'no',
259
- 'common.none': '(none)',
260
- 'common.unknownError': 'Unknown error',
261
- 'lifecycle.apiStopped': '[reactpress] API process stopped (pid {pid})',
262
- 'lifecycle.stopPidFailed': '[reactpress] Failed to stop pid {pid}:',
263
- 'lifecycle.apiAlreadyRunning': '[reactpress] API already running (pid {pid})',
264
- 'lifecycle.noServerAvailable': '[reactpress] No API runtime found. Reinstall @fecommunity/reactpress or run from a project with server/src.',
265
- 'lifecycle.startingLocalApi': '[reactpress] Starting local API (server/)…',
266
- 'lifecycle.startingBundledApi': '[reactpress] Starting bundled API…',
267
- 'lifecycle.apiStartedBg': '[reactpress] API started in background (pid {pid})',
268
- 'lifecycle.apiTimeout120': '[reactpress] API not ready within 120s: {url}',
269
- 'lifecycle.apiReady': '[reactpress] API ready: {url}',
270
- 'lifecycle.apiStatusTitle': '[reactpress] API status',
271
- 'lifecycle.source': ' Source: {source}',
272
- 'lifecycle.source.monorepo': 'monorepo server/',
273
- 'lifecycle.source.bundle': 'bundled API (@fecommunity/reactpress)',
274
- 'lifecycle.pidFile': ' PID file: {path}',
275
- 'lifecycle.recordedPid': ' Recorded PID: {pid}',
276
- 'lifecycle.processAlive': ' Process alive: {alive}',
277
- 'lifecycle.httpStatus': ' HTTP ({url}): {status}',
278
- 'lifecycle.httpReachable': 'reachable',
279
- 'lifecycle.httpUnreachable': 'unreachable',
280
- 'lifecycle.unknownCommand': 'Unknown lifecycle command: {command}',
281
- 'docker.stopping': '[reactpress] Stopping Docker services…',
282
- 'docker.stopped': '[reactpress] Docker services stopped.',
283
- 'docker.stopFailed': '[reactpress] Failed to stop Docker:',
284
- 'docker.starting': '[reactpress] Starting Docker services…',
285
- 'docker.notRunning': 'Docker is not running. Please start Docker Desktop first.',
286
- 'docker.started': '[reactpress] Docker services started.',
287
- 'docker.waitingMysql': '[reactpress] Waiting for MySQL…',
288
- 'docker.mysqlReady': '[reactpress] MySQL is ready.',
289
- 'docker.waitingMysqlProgress': '[reactpress] Waiting for MySQL… ({attempts}/{max})',
290
- 'docker.mysqlTimeout': '[reactpress] MySQL not ready within timeout.',
291
- 'docker.mysqlNotReady': 'MySQL is not ready',
292
- 'docker.startDevStack': '[reactpress] Starting API + frontend (Docker MySQL)…',
293
- 'docker.visitUrls': '[reactpress] Visit: http://localhost (nginx) / http://localhost:3001 (client)',
294
- 'docker.devProcessExit': 'Dev process exited with code {code}',
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',
324
- 'apiDev.modeServer': '[reactpress] Dev mode: server/ (nest start --watch)',
325
- 'apiDev.modeBundled': '[reactpress] Dev mode: bundled API (built-in server)',
326
- 'apiDev.ctrlCHint': '[reactpress] Press Ctrl+C to stop API.',
327
- 'apiDev.stopHint': '[reactpress] Stop separately: reactpress server stop',
328
- 'build.unknownTarget': 'Unknown build target: {target}. Available: {available}',
329
- 'build.recursive': 'Build recursion detected (pnpm run build must not call itself). Use build:toolkit, build:server, or build:client.',
330
- 'build.forbiddenScript': 'Invalid build script "{script}"; use granular scripts like build:toolkit.',
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',
337
- 'build.label.toolkit': 'Toolkit',
338
- 'build.label.server': 'API (server)',
339
- 'build.label.client': 'Frontend (client)',
340
- 'build.label.docs': 'Documentation (docs)',
341
- 'pm2.startFailed': '[reactpress] PM2 failed to start API:',
342
- 'pm2.exitCode': 'PM2 exited with code {code}',
343
- 'spawn.commandFailed': 'Command failed ({command}): exit code {code}',
344
- 'spawn.exitCode': 'Exit code {code}',
345
- 'shim.deprecated': '\n[deprecated] reactpress-cli will be removed in 3.1. Use instead:\n npm i -g @fecommunity/reactpress\n reactpress init · reactpress dev · reactpress doctor\n',
346
- 'server.help.invokedBy': ' (usually invoked by reactpress server start)',
347
- 'publish.pkg.main': 'ReactPress 3.0 main package — single entry (init / dev / doctor / publish)',
348
- 'publish.pkg.server': 'NestJS backend API (deprecated — use bundled API in reactpress-cli)',
349
- 'bundle.cli.description': 'Zero-config init and manage ReactPress CMS & blog server',
350
- 'bundle.cli.cwd': 'ReactPress project directory (default: current working directory)',
351
- 'bundle.cli.init.description': 'One-click init ReactPress CMS & blog (zero config)',
352
- 'bundle.cli.init.directory': 'Project directory',
353
- 'bundle.cli.init.force': 'Overwrite existing config',
354
- 'bundle.cli.start.description': 'Start server (prepares database automatically)',
355
- 'bundle.cli.stop.description': 'Stop server',
356
- 'bundle.cli.stop.database': 'Also stop embedded database container',
357
- 'bundle.cli.restart.description': 'Restart server',
358
- 'bundle.cli.status.description': 'Server and database status',
359
- 'bundle.cli.config.description': 'View or update config (--apply to restart)',
360
- 'bundle.cli.config.key': 'Config key, e.g. server.port',
361
- 'bundle.cli.config.value': 'New value',
362
- 'bundle.cli.config.list': 'List all config keys',
363
- 'bundle.cli.config.apply': 'Restart automatically after update',
364
- 'bundle.cli.unknownCommand': 'Unknown command: {command}',
365
- 'bundle.cmd.init.spinner': 'Initializing ReactPress project…',
366
- 'bundle.cmd.init.succeed': 'Initialization complete',
367
- 'bundle.cmd.init.fail': 'Initialization failed',
368
- 'bundle.cmd.init.projectDir': 'Project directory: {path}',
369
- 'bundle.cmd.init.nextStep': 'Next: reactpress-cli start',
370
- 'bundle.cmd.notProject': 'This directory is not a ReactPress project.',
371
- 'bundle.cmd.notProjectInit': 'This directory is not a ReactPress project. Run reactpress-cli init first.',
372
- 'bundle.cmd.start.spinner': 'Preparing database and server…',
373
- 'bundle.cmd.start.succeed': 'Server started',
374
- 'bundle.cmd.start.fail': 'Start failed',
375
- 'bundle.cmd.stop.spinner': 'Stopping server…',
376
- 'bundle.cmd.stop.succeed': 'Stopped',
377
- 'bundle.cmd.stop.fail': 'Stop failed',
378
- 'bundle.cmd.restart.spinner': 'Restarting server…',
379
- 'bundle.cmd.restart.succeed': 'Restart complete',
380
- 'bundle.cmd.restart.fail': 'Restart failed',
381
- 'bundle.cmd.status.title': 'Service status',
382
- 'bundle.cmd.status.project': 'Project: {path}',
383
- 'bundle.cmd.status.service': 'Service: {status}{pid}',
384
- 'bundle.cmd.status.running': 'running',
385
- 'bundle.cmd.status.stopped': 'stopped',
386
- 'bundle.cmd.status.url': 'URL: {url}',
387
- 'bundle.cmd.status.database': 'Database: {status} ({mode})',
388
- 'bundle.cmd.status.dbReady': 'ready',
389
- 'bundle.cmd.status.dbNotReady': 'not ready',
390
- 'bundle.cmd.config.title': 'Configuration',
391
- 'bundle.cmd.config.keyRequired': 'Specify a config key, e.g.: reactpress-cli config server.port 3003',
392
- 'bundle.cmd.config.listHint': 'Use --list to show all keys',
393
- 'bundle.cmd.config.updated': 'Updated {key} = {value}',
394
- 'bundle.cmd.config.restartSpinner': 'Restarting to apply config…',
395
- 'bundle.cmd.config.applied': 'Config applied',
396
- 'bundle.cmd.config.restartFail': 'Restart failed',
397
- 'bundle.cmd.config.restartManual': 'Run reactpress-cli restart manually',
398
- 'bundle.cmd.config.applyHint': 'Run reactpress-cli restart or config --apply to apply changes',
399
- 'bundle.service.init.alreadyProject': 'Directory is already a ReactPress project. Use --force to overwrite config.',
400
- 'bundle.service.init.dbPending': 'Project created, but database is not ready: {message}. Run reactpress-cli start later.',
401
- 'bundle.service.init.complete': 'ReactPress project initialized. Run reactpress-cli start to launch the server.',
402
- 'bundle.service.init.templateMissing': 'Template file missing: {path}',
403
- 'bundle.service.config.notFound': 'ReactPress project not found. Run reactpress-cli init first.',
404
- 'bundle.service.config.keyMissing': 'Config key does not exist: {key}',
405
- 'bundle.service.server.alreadyRunning': 'Server already running (PID {pid}), visit {url}',
406
- 'bundle.service.server.portBusy': 'Port {port} is in use; ReactPress cannot bind. If you started via Docker Compose, run: docker stop reactpress_server. Or change server.port in .reactpress/config.json.',
407
- 'bundle.service.server.cannotStart': 'Could not start ReactPress server process.',
408
- 'bundle.service.server.noHttp': 'Server process started (PID {pid}) but no HTTP response at {url}. Check port conflicts or DB_* in .env.',
409
- 'bundle.service.server.started': 'ReactPress server started at {url}',
410
- 'bundle.service.server.stopped': 'ReactPress server stopped.',
411
- 'bundle.service.server.cannotStopPid': 'Could not stop process PID {pid}',
412
- 'bundle.service.database.dockerMissing': 'Docker not detected. Install and start Docker, or set database.mode to external with an existing MySQL.',
413
- 'bundle.service.database.portSwitched': 'Host port {previous} was in use; switched to {port} (.env updated)',
414
- 'bundle.service.database.portBindRetry': 'Port {port} bind failed, trying another port…',
415
- 'bundle.service.database.containerStartFailed': 'Failed to start database container: {detail}',
416
- 'bundle.service.database.credsMismatch': 'Database container is on port {port} but user "{user}" cannot connect (volume credentials differ from .env). Run: cd .reactpress && docker compose down -v && cd .. && reactpress-cli start',
417
- 'bundle.service.database.connectionTimeout': 'Database container started but connection timed out. Run: docker logs {container}',
418
- 'bundle.service.database.cannotConnect': 'Cannot connect to database {host}:{port}. Check DB_* in .env.',
419
- 'bundle.serverBundle.missing': 'Bundled server is missing. Reinstall reactpress-cli.',
420
- 'bundle.serverBundle.installFailed': 'Bundled server dependency install failed. In the reactpress-cli install dir run: cd server && npm install --omit=dev --no-bin-links',
421
- 'bundle.serverBundle.notBuilt': 'Bundled server is not built or dependencies are incomplete. Run npm run build:server (dev) or reinstall reactpress-cli.',
422
- 'bundle.port.notFound': 'No available port in range {start}-{end}',
423
- },
424
- zh: {
425
- 'cli.description': 'ReactPress 全栈 CLI — 初始化、开发、构建、部署、发布',
426
- 'cli.init.description': '初始化项目 (.reactpress/config.json + .env + Docker MySQL)',
427
- 'cli.init.directory': '项目目录',
428
- 'cli.init.force': '覆盖已有配置',
429
- 'cli.dev.description': '零配置开发: 环境检查 + toolkit 构建 + API + 前端',
430
- 'cli.dev.apiOnly': '仅启动 API (watch)',
431
- 'cli.dev.clientOnly': '仅启动前端',
432
- 'cli.server.description': '管理 API 服务',
433
- 'cli.server.start.description': '启动 API(等待 HTTP 就绪)',
434
- 'cli.server.start.pm2': '使用 PM2 启动(生产)',
435
- 'cli.server.start.bg': '后台启动,不等待 HTTP',
436
- 'cli.server.stop': '停止 API',
437
- 'cli.server.restart': '重启 API',
438
- 'cli.server.status': '查看 API 状态',
439
- 'cli.client.description': '管理前端',
440
- 'cli.client.start': '启动 Next.js 客户端',
441
- 'cli.client.start.pm2': '使用 PM2 启动',
442
- 'cli.build.description': '构建生产产物',
443
- 'cli.docker.description': 'Docker 开发环境 (MySQL + nginx)',
444
- 'cli.docker.up': '仅启动 Docker 服务并等待 MySQL',
445
- 'cli.docker.down': '停止 Docker 服务',
446
- 'cli.docker.start': '启动 Docker + 全栈开发 (API + 前端)',
447
- 'cli.docker.restart': '重启 Docker 服务',
448
- 'cli.docker.status': '查看 Docker 容器状态',
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)',
463
- 'cli.status.description': '查看项目、API、前端、Docker 综合状态',
464
- 'cli.doctor.description': '诊断环境:Node、Docker、端口、数据库、API 健康',
465
- 'cli.db.description': '数据库运维',
466
- 'cli.db.backup': '使用 mysqldump 备份当前项目数据库',
467
- 'cli.db.backup.output': '输出 SQL 文件路径',
468
- 'cli.publish.description': '构建并发布 npm 包 (交互式)',
469
- 'cli.publish.build': '仅构建所有包',
470
- 'cli.publish.publish': '交互式发布',
471
- 'cli.start.description': '生产模式: 启动 API + 前端',
472
- 'cli.help.examples': '示例:',
473
- 'cli.help.interactive': ' reactpress 交互式菜单',
474
- 'cli.help.dev': ' reactpress dev 零配置全栈开发',
475
- 'cli.help.init': ' reactpress init --force 重新初始化配置',
476
- 'cli.help.server': ' reactpress server start 启动 API',
477
- 'cli.help.status': ' reactpress status 综合状态',
478
- 'cli.help.doctor': ' reactpress doctor 环境诊断',
479
- 'cli.help.docker': ' reactpress docker start Docker + 全栈',
480
- 'cli.help.build': ' reactpress build -t client 构建指定目标 (toolkit|server|client|docs|all)',
481
- 'cli.help.publish': ' reactpress publish 发布 npm 包',
482
- 'cli.build.target': '构建目标: toolkit | server | client | docs | all',
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': '准备中',
496
- 'menu.dev': '零配置开发 (env + DB + API + 前端)',
497
- 'menu.init': '初始化项目 (.reactpress + .env + 数据库)',
498
- 'menu.status': '查看项目状态',
499
- 'menu.doctor': '环境诊断 (doctor)',
500
- 'menu.devApi': '仅启动 API (开发 watch)',
501
- 'menu.devClient': '仅启动前端',
502
- 'menu.serverStart': '启动 API (后台生产)',
503
- 'menu.serverStop': '停止 API',
504
- 'menu.serverRestart': '重启 API',
505
- 'menu.build': '构建 (toolkit → server → client)',
506
- 'menu.buildTarget': '选择要构建的目标',
507
- 'menu.buildAll': '全部 (toolkit → server → client)',
508
- 'menu.dockerStart': 'Docker 开发环境 (DB + nginx + 全栈)',
509
- 'menu.dockerUp': 'Docker 仅启动数据库',
510
- 'menu.dockerStop': '停止 Docker 服务',
511
- 'menu.openAdmin': '在浏览器打开管理后台',
512
- 'menu.publish': '发布 npm 包 (交互式)',
513
- 'menu.exit': '退出',
514
- 'menu.prompt': '选择操作',
515
- 'menu.back': '返回主菜单?',
516
- 'menu.retry': '返回主菜单重试?',
517
- 'menu.startingDev': '启动全栈开发…',
518
- 'menu.initProject': '初始化项目…',
519
- 'menu.done': '完成',
520
- 'menu.opening': '打开 {url}',
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': '操作',
571
- 'dev.startingApi': '[reactpress] 正在启动 API(首次可能需安装依赖,请稍候)…',
572
- 'dev.waitingApi': '[reactpress] 等待 API 就绪: {url}',
573
- 'dev.apiTimeout': '[reactpress] API 在 {seconds}s 内未就绪。\n → 运行 reactpress doctor 查看详情\n → 嵌入式 MySQL:reactpress docker up\n → 检查 .env 中 DB_* 与 SERVER_SITE_URL',
574
- 'dev.apiReady': '[reactpress] API 已就绪,正在启动前端…',
575
- 'dev.clientSlow': '[reactpress] 前端在 {seconds}s 内未响应,可能仍在编译。稍后访问 {url}',
576
- 'dev.envFailed': '[reactpress] 环境准备失败:',
577
- 'dev.toolkitFailed': 'toolkit 构建失败,退出码: {code}',
578
- 'dev.nextSteps': '下一步建议:',
579
- 'dev.nextDoctor': ' → reactpress doctor 环境诊断',
580
- 'dev.nextDocker': ' → reactpress docker up 启动嵌入式 MySQL',
581
- 'dev.nextEnv': ' → 检查 .env 中 DB_* 与 SERVER_SITE_URL',
582
- 'dev.standaloneHint': '[reactpress] 独立项目:当前目录仅启动 API,前端请单独构建。',
583
- 'devBanner.ready': 'ReactPress 开发环境已就绪',
584
- 'devBanner.site': '前台',
585
- 'devBanner.admin': '管理端',
586
- 'devBanner.api': 'API',
587
- 'devBanner.swagger': 'Swagger',
588
- 'devBanner.health': '健康检查',
589
- 'devBanner.hint': '诊断: reactpress doctor · 状态: reactpress status',
590
- 'devBanner.shortcuts': 'Ctrl+C 停止',
591
- 'devBanner.allSystemsGo': '一切就绪',
592
- 'doctor.nodeBad': 'Node.js {version}(需要 ≥ 18)',
593
- 'doctor.nodeFix': '请安装 Node.js 18+:https://nodejs.org/',
594
- 'doctor.dockerOk': 'Docker 引擎可用',
595
- 'doctor.dockerBad': 'Docker 未运行或不可用',
596
- 'doctor.dockerFix': '安装并启动 Docker:https://docs.docker.com/get-docker/ ,然后运行 reactpress docker up;或改 config.json 使用外部 MySQL',
597
- 'doctor.portApiBusy': 'API 端口 {port} 已被占用',
598
- 'doctor.portClientBusy': '前端端口 {port} 已被占用',
599
- 'doctor.portFix': '修改 .env 中 SERVER_PORT / CLIENT_PORT,或停止占用进程',
600
- 'doctor.portOk': '端口 {apiPort}(API)、{clientPort}(前端)可用',
601
- 'doctor.dbNoMysql2': '未安装 mysql2,无法检测数据库',
602
- 'doctor.dbMysql2Fix': '在 monorepo 根目录执行 pnpm install',
603
- 'doctor.dbOk': 'MySQL {host}:{port}/{database} 连通',
604
- 'doctor.dbBad': '数据库连接失败: {error}',
605
- 'doctor.dbFix': '运行 reactpress docker up 或检查 .env 中 DB_* 配置',
606
- 'doctor.apiOk': 'API 健康检查通过 ({url})',
607
- 'doctor.apiBad': 'API 未响应健康检查 ({url})',
608
- 'doctor.apiFix': '运行 reactpress server start 或 reactpress dev',
609
- 'doctor.pnpmBad': '未检测到 pnpm',
610
- 'doctor.pnpmFix': 'npm i -g pnpm,或在 monorepo 根目录使用 corepack enable',
611
- 'doctor.check.config': '配置文件',
612
- 'doctor.check.env': '环境变量',
613
- 'doctor.check.ports': '端口',
614
- 'doctor.check.database': '数据库',
615
- 'doctor.check.api': 'API 健康',
616
- 'doctor.configOk': '.reactpress/config.json 存在',
617
- 'doctor.configBad': '缺少 .reactpress/config.json',
618
- 'doctor.configFix': '运行 reactpress init',
619
- 'doctor.envOk': '.env 存在',
620
- 'doctor.envBad': '缺少 .env',
621
- 'doctor.envFix': '运行 reactpress init 或 reactpress config --apply',
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}',
633
- 'status.apiSource.monorepo': 'monorepo server/',
634
- 'status.apiSource.bundle': 'reactpress-cli',
635
- 'status.configOk': '.reactpress/config.json',
636
- 'status.configBad': '未初始化',
637
- 'status.envOk': '.env',
638
- 'status.envBad': '缺少 .env',
639
- 'status.apiOnline': '在线',
640
- 'status.apiOffline': '离线',
641
- 'status.apiUnreachable': '{url} (离线或未启动)',
642
- 'status.dbUp': '连通',
643
- 'status.dbDown': '不可用',
644
- 'status.pidRunning': '(运行中)',
645
- 'status.frontend': '前端',
646
- 'status.docker': 'Docker',
647
- 'status.dockerUp': '可用',
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': '目录',
663
- 'bootstrap.configReady': '配置已存在,数据库已就绪。',
664
- 'bootstrap.projectDbPending': '项目已创建,但数据库未就绪: {message}。请确认 Docker 已启动后重试 reactpress dev。',
665
- 'bootstrap.ready': 'ReactPress 开发环境已就绪(配置 + 数据库)。',
666
- 'bootstrap.initFailed': '初始化失败',
667
- 'bootstrap.cliInitFailed': 'reactpress-cli init 失败',
668
- 'bootstrap.dbPendingShort': '数据库未就绪',
669
- 'bootstrap.dbNotReady': '{message}。建议:启动 Docker 后运行 reactpress docker up,或执行 reactpress doctor',
670
- 'bootstrap.dbReady': '数据库已就绪',
671
- 'db.backup.to': '备份数据库到 {path}',
672
- 'db.backup.done': '备份完成',
673
- 'db.backup.viaDocker': '本机未找到 mysqldump,改用 Docker 内 db 容器的 mysqldump…',
674
- 'db.backup.fail':
675
- 'mysqldump 失败:请安装 MySQL 客户端(如 brew install mysql-client),或确保 Docker 数据库已运行以便自动在容器内备份',
676
- 'common.done': '完成',
677
- 'common.yes': '是',
678
- 'common.no': '否',
679
- 'common.none': '(无)',
680
- 'common.unknownError': '未知错误',
681
- 'lifecycle.apiStopped': '[reactpress] 已停止 API 进程 (pid {pid})',
682
- 'lifecycle.stopPidFailed': '[reactpress] 停止 pid {pid} 失败:',
683
- 'lifecycle.apiAlreadyRunning': '[reactpress] API 已在运行 (pid {pid})',
684
- 'lifecycle.noServerAvailable': '[reactpress] 未找到可用的 API 运行时。请重新安装 @fecommunity/reactpress,或在含 server/src 的项目目录中运行。',
685
- 'lifecycle.startingLocalApi': '[reactpress] 正在启动本地 API (server/)…',
686
- 'lifecycle.startingBundledApi': '[reactpress] 正在启动内置 API…',
687
- 'lifecycle.apiStartedBg': '[reactpress] API 已后台启动 (pid {pid})',
688
- 'lifecycle.apiTimeout120': '[reactpress] API 在 120s 内未就绪: {url}',
689
- 'lifecycle.apiReady': '[reactpress] API 已就绪: {url}',
690
- 'lifecycle.apiStatusTitle': '[reactpress] API 状态',
691
- 'lifecycle.source': ' 来源: {source}',
692
- 'lifecycle.source.monorepo': 'monorepo server/',
693
- 'lifecycle.source.bundle': '内置 API (@fecommunity/reactpress)',
694
- 'lifecycle.pidFile': ' PID 文件: {path}',
695
- 'lifecycle.recordedPid': ' 记录 PID: {pid}',
696
- 'lifecycle.processAlive': ' 进程存活: {alive}',
697
- 'lifecycle.httpStatus': ' HTTP ({url}): {status}',
698
- 'lifecycle.httpReachable': '可访问',
699
- 'lifecycle.httpUnreachable': '不可访问',
700
- 'lifecycle.unknownCommand': '未知 lifecycle 命令: {command}',
701
- 'docker.stopping': '[reactpress] 正在停止 Docker 服务…',
702
- 'docker.stopped': '[reactpress] Docker 服务已停止。',
703
- 'docker.stopFailed': '[reactpress] 停止 Docker 失败:',
704
- 'docker.starting': '[reactpress] 正在启动 Docker 服务…',
705
- 'docker.notRunning': 'Docker 未运行,请先启动 Docker Desktop。',
706
- 'docker.started': '[reactpress] Docker 服务已启动。',
707
- 'docker.waitingMysql': '[reactpress] 等待 MySQL 就绪…',
708
- 'docker.mysqlReady': '[reactpress] MySQL 已就绪。',
709
- 'docker.waitingMysqlProgress': '[reactpress] 等待 MySQL… ({attempts}/{max})',
710
- 'docker.mysqlTimeout': '[reactpress] MySQL 在超时时间内未就绪。',
711
- 'docker.mysqlNotReady': 'MySQL 未就绪',
712
- 'docker.startDevStack': '[reactpress] 启动 API + 前端 (Docker MySQL)…',
713
- 'docker.visitUrls': '[reactpress] 访问: http://localhost (nginx) / http://localhost:3001 (client)',
714
- 'docker.devProcessExit': '开发进程退出: {code}',
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 代理',
744
- 'apiDev.modeServer': '[reactpress] 开发模式: server/ (nest start --watch)',
745
- 'apiDev.modeBundled': '[reactpress] 开发模式: 内置 API(随包附带)',
746
- 'apiDev.ctrlCHint': '[reactpress] 按 Ctrl+C 停止 API。',
747
- 'apiDev.stopHint': '[reactpress] 单独停止: reactpress server stop',
748
- 'build.unknownTarget': '未知构建目标: {target},可选: {available}',
749
- 'build.recursive': '检测到构建递归(pnpm run build 不能再次调用自身)。请使用 build:toolkit、build:server 或 build:client。',
750
- 'build.forbiddenScript': '无效的构建脚本 "{script}",请使用 build:toolkit 等细分脚本。',
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',
757
- 'build.label.toolkit': 'Toolkit',
758
- 'build.label.server': 'API (server)',
759
- 'build.label.client': '前端 (client)',
760
- 'build.label.docs': '文档 (docs)',
761
- 'pm2.startFailed': '[reactpress] PM2 启动 API 失败:',
762
- 'pm2.exitCode': 'PM2 退出码 {code}',
763
- 'spawn.commandFailed': '命令失败 ({command}): 退出码 {code}',
764
- 'spawn.exitCode': '退出码 {code}',
765
- 'shim.deprecated': '\n[deprecated] reactpress-cli 将在 3.1 移除。请改用:\n npm i -g @fecommunity/reactpress\n reactpress init · reactpress dev · reactpress doctor\n',
766
- 'server.help.invokedBy': ' (通常由 reactpress server start 调用)',
767
- 'publish.pkg.main': 'ReactPress 3.0 主包 — 唯一入口 (init / dev / doctor / publish)',
768
- 'publish.pkg.server': 'NestJS 后端 API (deprecated — 使用 reactpress-cli 内置 API)',
769
- 'bundle.cli.description': '零配置初始化与管理 ReactPress CMS & 博客服务器',
770
- 'bundle.cli.cwd': 'ReactPress 项目目录(默认:当前工作目录)',
771
- 'bundle.cli.init.description': '一键初始化 ReactPress CMS & 博客服务器(零配置)',
772
- 'bundle.cli.init.directory': '项目目录',
773
- 'bundle.cli.init.force': '覆盖已有配置',
774
- 'bundle.cli.start.description': '启动服务器(自动准备数据库)',
775
- 'bundle.cli.stop.description': '停止服务器',
776
- 'bundle.cli.stop.database': '同时停止嵌入式数据库容器',
777
- 'bundle.cli.restart.description': '重启服务器',
778
- 'bundle.cli.status.description': '查看服务与数据库状态',
779
- 'bundle.cli.config.description': '查看或更新配置(更新后可用 --apply 重启生效)',
780
- 'bundle.cli.config.key': '配置键,如 server.port',
781
- 'bundle.cli.config.value': '新值',
782
- 'bundle.cli.config.list': '列出所有配置',
783
- 'bundle.cli.config.apply': '更新后自动重启服务',
784
- 'bundle.cli.unknownCommand': '未知命令: {command}',
785
- 'bundle.cmd.init.spinner': '正在初始化 ReactPress 项目…',
786
- 'bundle.cmd.init.succeed': '初始化完成',
787
- 'bundle.cmd.init.fail': '初始化失败',
788
- 'bundle.cmd.init.projectDir': '项目目录: {path}',
789
- 'bundle.cmd.init.nextStep': '下一步: reactpress-cli start',
790
- 'bundle.cmd.notProject': '当前目录不是 ReactPress 项目。',
791
- 'bundle.cmd.notProjectInit': '当前目录不是 ReactPress 项目。请先运行 reactpress-cli init。',
792
- 'bundle.cmd.start.spinner': '正在准备数据库与服务…',
793
- 'bundle.cmd.start.succeed': '服务已启动',
794
- 'bundle.cmd.start.fail': '启动失败',
795
- 'bundle.cmd.stop.spinner': '正在停止服务…',
796
- 'bundle.cmd.stop.succeed': '已停止',
797
- 'bundle.cmd.stop.fail': '停止失败',
798
- 'bundle.cmd.restart.spinner': '正在重启服务…',
799
- 'bundle.cmd.restart.succeed': '重启完成',
800
- 'bundle.cmd.restart.fail': '重启失败',
801
- 'bundle.cmd.status.title': '服务状态',
802
- 'bundle.cmd.status.project': '项目: {path}',
803
- 'bundle.cmd.status.service': '服务: {status}{pid}',
804
- 'bundle.cmd.status.running': '运行中',
805
- 'bundle.cmd.status.stopped': '已停止',
806
- 'bundle.cmd.status.url': '地址: {url}',
807
- 'bundle.cmd.status.database': '数据库: {status} ({mode})',
808
- 'bundle.cmd.status.dbReady': '就绪',
809
- 'bundle.cmd.status.dbNotReady': '未就绪',
810
- 'bundle.cmd.config.title': '配置项',
811
- 'bundle.cmd.config.keyRequired': '请指定配置键,例如: reactpress-cli config server.port 3003',
812
- 'bundle.cmd.config.listHint': '使用 --list 查看所有配置项',
813
- 'bundle.cmd.config.updated': '已更新 {key} = {value}',
814
- 'bundle.cmd.config.restartSpinner': '正在重启以使配置生效…',
815
- 'bundle.cmd.config.applied': '配置已应用',
816
- 'bundle.cmd.config.restartFail': '重启失败',
817
- 'bundle.cmd.config.restartManual': '请手动运行 reactpress-cli restart',
818
- 'bundle.cmd.config.applyHint': '运行 reactpress-cli restart 或 config --apply 使配置生效',
819
- 'bundle.service.init.alreadyProject': '目录已是 ReactPress 项目。使用 --force 覆盖配置。',
820
- 'bundle.service.init.dbPending': '项目已创建,但数据库未就绪: {message}。可稍后运行 reactpress-cli start。',
821
- 'bundle.service.init.complete': 'ReactPress 项目初始化完成。运行 reactpress-cli start 启动服务。',
822
- 'bundle.service.init.templateMissing': '模板文件缺失: {path}',
823
- 'bundle.service.config.notFound': '未找到 ReactPress 项目。请先运行 reactpress-cli init 初始化。',
824
- 'bundle.service.config.keyMissing': '配置项不存在: {key}',
825
- 'bundle.service.server.alreadyRunning': '服务已在运行 (PID {pid}),访问 {url}',
826
- 'bundle.service.server.portBusy': '端口 {port} 已被占用,ReactPress 无法绑定。若曾用 Docker Compose 启动过 ReactPress,请执行: docker stop reactpress_server。也可在 .reactpress/config.json 中修改 server.port。',
827
- 'bundle.service.server.cannotStart': '无法启动 ReactPress 服务进程。',
828
- 'bundle.service.server.noHttp': '服务进程已启动 (PID {pid}),但 {url} 无 HTTP 响应。请检查端口占用或 .env 数据库配置。',
829
- 'bundle.service.server.started': 'ReactPress 服务已启动,访问 {url}',
830
- 'bundle.service.server.stopped': 'ReactPress 服务已停止。',
831
- 'bundle.service.server.cannotStopPid': '无法停止进程 PID {pid}',
832
- 'bundle.service.database.dockerMissing': '未检测到 Docker。请安装并启动 Docker,或将 database.mode 设为 external 并使用已有 MySQL。',
833
- 'bundle.service.database.portSwitched': '宿主机端口 {previous} 已被占用,已改用 {port}(已更新 .env)',
834
- 'bundle.service.database.portBindRetry': '端口 {port} 绑定失败,正在尝试其他端口…',
835
- 'bundle.service.database.containerStartFailed': '启动数据库容器失败: {detail}',
836
- 'bundle.service.database.credsMismatch': '数据库容器已在端口 {port} 运行,但账号「{user}」无法连接(数据卷中的凭证与 .env 不一致)。请在项目目录执行: cd .reactpress && docker compose down -v && cd .. && reactpress-cli start',
837
- 'bundle.service.database.connectionTimeout': '数据库容器已启动,但连接超时。请执行 docker logs {container} 查看详情。',
838
- 'bundle.service.database.cannotConnect': '无法连接数据库 {host}:{port},请检查 .env 中的 DB_* 配置。',
839
- 'bundle.serverBundle.missing': '内置服务端缺失,请重新安装 reactpress-cli。',
840
- 'bundle.serverBundle.installFailed': '内置服务端依赖安装失败。请在 reactpress-cli 安装目录下手动执行: cd server && npm install --omit=dev --no-bin-links',
841
- 'bundle.serverBundle.notBuilt': '内置服务端未构建或依赖不完整。请运行 npm run build:server(开发)或重新安装 reactpress-cli。',
842
- 'bundle.port.notFound': '在 {start}-{end} 范围内未找到可用端口',
843
- },
844
- };
845
-
846
- module.exports = { STRINGS };