@fecommunity/reactpress 2.0.0-beta.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/LICENSE +6 -6
  2. package/README.md +28 -176
  3. package/bin/reactpress-cli-shim.js +28 -0
  4. package/bin/reactpress.js +244 -61
  5. package/dist/cli.d.ts +4 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +102 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/config.d.ts +8 -0
  10. package/dist/commands/config.d.ts.map +1 -0
  11. package/dist/commands/config.js +54 -0
  12. package/dist/commands/config.js.map +1 -0
  13. package/dist/commands/init.d.ts +6 -0
  14. package/dist/commands/init.d.ts.map +1 -0
  15. package/dist/commands/init.js +33 -0
  16. package/dist/commands/init.js.map +1 -0
  17. package/dist/commands/restart.d.ts +2 -0
  18. package/dist/commands/restart.d.ts.map +1 -0
  19. package/dist/commands/restart.js +29 -0
  20. package/dist/commands/restart.js.map +1 -0
  21. package/dist/commands/start.d.ts +2 -0
  22. package/dist/commands/start.d.ts.map +1 -0
  23. package/dist/commands/start.js +31 -0
  24. package/dist/commands/start.js.map +1 -0
  25. package/dist/commands/status.d.ts +2 -0
  26. package/dist/commands/status.d.ts.map +1 -0
  27. package/dist/commands/status.js +20 -0
  28. package/dist/commands/status.js.map +1 -0
  29. package/dist/commands/stop.d.ts +5 -0
  30. package/dist/commands/stop.d.ts.map +1 -0
  31. package/dist/commands/stop.js +29 -0
  32. package/dist/commands/stop.js.map +1 -0
  33. package/dist/i18n.js +8 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +7 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/package.json +3 -0
  39. package/dist/services/config.d.ts +11 -0
  40. package/dist/services/config.d.ts.map +1 -0
  41. package/dist/services/config.js +102 -0
  42. package/dist/services/config.js.map +1 -0
  43. package/dist/services/database.d.ts +43 -0
  44. package/dist/services/database.d.ts.map +1 -0
  45. package/dist/services/database.js +252 -0
  46. package/dist/services/database.js.map +1 -0
  47. package/dist/services/exec.d.ts +22 -0
  48. package/dist/services/exec.d.ts.map +1 -0
  49. package/dist/services/exec.js +46 -0
  50. package/dist/services/exec.js.map +1 -0
  51. package/dist/services/init.d.ts +10 -0
  52. package/dist/services/init.d.ts.map +1 -0
  53. package/dist/services/init.js +50 -0
  54. package/dist/services/init.js.map +1 -0
  55. package/dist/services/process.d.ts +9 -0
  56. package/dist/services/process.d.ts.map +1 -0
  57. package/dist/services/process.js +98 -0
  58. package/dist/services/process.js.map +1 -0
  59. package/dist/services/server-health.d.ts +4 -0
  60. package/dist/services/server-health.d.ts.map +1 -0
  61. package/dist/services/server-health.js +27 -0
  62. package/dist/services/server-health.js.map +1 -0
  63. package/dist/services/server.d.ts +19 -0
  64. package/dist/services/server.d.ts.map +1 -0
  65. package/dist/services/server.js +133 -0
  66. package/dist/services/server.js.map +1 -0
  67. package/dist/templates/config.default.json +12 -0
  68. package/dist/templates/docker-compose.yml +27 -0
  69. package/dist/templates/env.default +11 -0
  70. package/dist/templates/package.json +10 -0
  71. package/dist/types/config.d.ts +30 -0
  72. package/dist/types/config.d.ts.map +1 -0
  73. package/dist/types/config.js +2 -0
  74. package/dist/types/config.js.map +1 -0
  75. package/dist/utils/cli-context.d.ts +4 -0
  76. package/dist/utils/cli-context.d.ts.map +1 -0
  77. package/dist/utils/cli-context.js +10 -0
  78. package/dist/utils/cli-context.js.map +1 -0
  79. package/dist/utils/logger.d.ts +10 -0
  80. package/dist/utils/logger.d.ts.map +1 -0
  81. package/dist/utils/logger.js +32 -0
  82. package/dist/utils/logger.js.map +1 -0
  83. package/dist/utils/paths.d.ts +17 -0
  84. package/dist/utils/paths.d.ts.map +1 -0
  85. package/dist/utils/paths.js +27 -0
  86. package/dist/utils/paths.js.map +1 -0
  87. package/dist/utils/platform.d.ts +8 -0
  88. package/dist/utils/platform.d.ts.map +1 -0
  89. package/dist/utils/platform.js +21 -0
  90. package/dist/utils/platform.js.map +1 -0
  91. package/dist/utils/port.d.ts +5 -0
  92. package/dist/utils/port.d.ts.map +1 -0
  93. package/dist/utils/port.js +25 -0
  94. package/dist/utils/port.js.map +1 -0
  95. package/dist/utils/server-bundle.d.ts +11 -0
  96. package/dist/utils/server-bundle.d.ts.map +1 -0
  97. package/dist/utils/server-bundle.js +71 -0
  98. package/dist/utils/server-bundle.js.map +1 -0
  99. package/lib/api-dev-runner.js +6 -0
  100. package/lib/api-dev.js +85 -0
  101. package/lib/bootstrap.js +114 -0
  102. package/lib/build.js +29 -0
  103. package/lib/db-backup.js +46 -0
  104. package/lib/dev-banner.js +40 -0
  105. package/lib/dev.js +134 -0
  106. package/lib/docker.js +157 -0
  107. package/lib/doctor.js +210 -0
  108. package/lib/http.js +147 -0
  109. package/lib/i18n/index.js +32 -0
  110. package/lib/i18n/strings.js +559 -0
  111. package/lib/lifecycle.js +160 -0
  112. package/lib/paths.js +75 -0
  113. package/lib/pm2.js +32 -0
  114. package/lib/process.js +45 -0
  115. package/{scripts/publish-packages.js → lib/publish.js} +255 -58
  116. package/lib/root.js +31 -0
  117. package/lib/spawn.js +91 -0
  118. package/lib/status.js +108 -0
  119. package/package.json +34 -72
  120. package/scripts/install-bundled-runtime.mjs +46 -0
  121. package/server/bin/reactpress-server.js +4 -4
  122. package/server/dist/app.module.d.ts +2 -0
  123. package/server/dist/app.module.js +105 -0
  124. package/server/dist/app.module.js.map +1 -0
  125. package/server/dist/common/api-messages.d.ts +32 -0
  126. package/server/dist/common/api-messages.js +36 -0
  127. package/server/dist/common/api-messages.js.map +1 -0
  128. package/server/dist/filters/http-exception.filter.d.ts +4 -0
  129. package/server/dist/filters/http-exception.filter.js +36 -0
  130. package/server/dist/filters/http-exception.filter.js.map +1 -0
  131. package/server/dist/generate-swagger.d.ts +1 -0
  132. package/server/dist/generate-swagger.js +73 -0
  133. package/server/dist/generate-swagger.js.map +1 -0
  134. package/server/dist/interceptors/transform.interceptor.d.ts +9 -0
  135. package/server/dist/interceptors/transform.interceptor.js +36 -0
  136. package/server/dist/interceptors/transform.interceptor.js.map +1 -0
  137. package/server/dist/logger/index.d.ts +4 -0
  138. package/server/dist/logger/index.js +33 -0
  139. package/server/dist/logger/index.js.map +1 -0
  140. package/server/dist/main.d.ts +6 -0
  141. package/server/dist/main.js +263 -0
  142. package/server/dist/main.js.map +1 -0
  143. package/server/dist/modules/api-key/api-key.controller.d.ts +14 -0
  144. package/server/dist/modules/api-key/api-key.controller.js +63 -0
  145. package/server/dist/modules/api-key/api-key.controller.js.map +1 -0
  146. package/server/dist/modules/api-key/api-key.entity.d.ts +11 -0
  147. package/server/dist/modules/api-key/api-key.entity.js +63 -0
  148. package/server/dist/modules/api-key/api-key.entity.js.map +1 -0
  149. package/server/dist/modules/api-key/api-key.guard.d.ts +7 -0
  150. package/server/dist/modules/api-key/api-key.guard.js +40 -0
  151. package/server/dist/modules/api-key/api-key.guard.js.map +1 -0
  152. package/server/dist/modules/api-key/api-key.module.d.ts +2 -0
  153. package/server/dist/modules/api-key/api-key.module.js +28 -0
  154. package/server/dist/modules/api-key/api-key.module.js.map +1 -0
  155. package/server/dist/modules/api-key/api-key.service.d.ts +15 -0
  156. package/server/dist/modules/api-key/api-key.service.js +81 -0
  157. package/server/dist/modules/api-key/api-key.service.js.map +1 -0
  158. package/server/dist/modules/article/article-revision.entity.d.ts +11 -0
  159. package/server/dist/modules/article/article-revision.entity.js +53 -0
  160. package/server/dist/modules/article/article-revision.entity.js.map +1 -0
  161. package/server/dist/modules/article/article.controller.d.ts +32 -0
  162. package/server/dist/modules/article/article.controller.js +242 -0
  163. package/server/dist/modules/article/article.controller.js.map +1 -0
  164. package/server/dist/modules/article/article.entity.d.ts +24 -0
  165. package/server/dist/modules/article/article.entity.js +133 -0
  166. package/server/dist/modules/article/article.entity.js.map +1 -0
  167. package/server/dist/modules/article/article.module.d.ts +2 -0
  168. package/server/dist/modules/article/article.module.js +42 -0
  169. package/server/dist/modules/article/article.module.js.map +1 -0
  170. package/server/dist/modules/article/article.service.d.ts +38 -0
  171. package/server/dist/modules/article/article.service.js +357 -0
  172. package/server/dist/modules/article/article.service.js.map +1 -0
  173. package/server/dist/modules/article/article.util.d.ts +1 -0
  174. package/server/dist/modules/article/article.util.js +9 -0
  175. package/server/dist/modules/article/article.util.js.map +1 -0
  176. package/server/dist/modules/article/scheduled-publish.service.d.ts +13 -0
  177. package/server/dist/modules/article/scheduled-publish.service.js +65 -0
  178. package/server/dist/modules/article/scheduled-publish.service.js.map +1 -0
  179. package/server/dist/modules/auth/auth.controller.d.ts +12 -0
  180. package/server/dist/modules/auth/auth.controller.js +66 -0
  181. package/server/dist/modules/auth/auth.controller.js.map +1 -0
  182. package/server/dist/modules/auth/auth.module.d.ts +2 -0
  183. package/server/dist/modules/auth/auth.module.js +41 -0
  184. package/server/dist/modules/auth/auth.module.js.map +1 -0
  185. package/server/dist/modules/auth/auth.service.d.ts +26 -0
  186. package/server/dist/modules/auth/auth.service.js +128 -0
  187. package/server/dist/modules/auth/auth.service.js.map +1 -0
  188. package/server/dist/modules/auth/jwt-auth.guard.d.ts +7 -0
  189. package/server/dist/modules/auth/jwt-auth.guard.js +30 -0
  190. package/server/dist/modules/auth/jwt-auth.guard.js.map +1 -0
  191. package/server/dist/modules/auth/jwt.strategy.d.ts +9 -0
  192. package/server/dist/modules/auth/jwt.strategy.js +39 -0
  193. package/server/dist/modules/auth/jwt.strategy.js.map +1 -0
  194. package/server/dist/modules/auth/roles.guard.d.ts +10 -0
  195. package/server/dist/modules/auth/roles.guard.js +46 -0
  196. package/server/dist/modules/auth/roles.guard.js.map +1 -0
  197. package/server/dist/modules/category/category.controller.d.ts +11 -0
  198. package/server/dist/modules/category/category.controller.js +91 -0
  199. package/server/dist/modules/category/category.controller.js.map +1 -0
  200. package/server/dist/modules/category/category.entity.d.ts +9 -0
  201. package/server/dist/modules/category/category.entity.js +60 -0
  202. package/server/dist/modules/category/category.entity.js.map +1 -0
  203. package/server/dist/modules/category/category.module.d.ts +2 -0
  204. package/server/dist/modules/category/category.module.js +27 -0
  205. package/server/dist/modules/category/category.module.js.map +1 -0
  206. package/server/dist/modules/category/category.service.d.ts +12 -0
  207. package/server/dist/modules/category/category.service.js +90 -0
  208. package/server/dist/modules/category/category.service.js.map +1 -0
  209. package/server/dist/modules/comment/comment.controller.d.ts +12 -0
  210. package/server/dist/modules/comment/comment.controller.js +100 -0
  211. package/server/dist/modules/comment/comment.controller.js.map +1 -0
  212. package/server/dist/modules/comment/comment.entity.d.ts +17 -0
  213. package/server/dist/modules/comment/comment.entity.js +104 -0
  214. package/server/dist/modules/comment/comment.entity.js.map +1 -0
  215. package/server/dist/modules/comment/comment.module.d.ts +2 -0
  216. package/server/dist/modules/comment/comment.module.js +39 -0
  217. package/server/dist/modules/comment/comment.module.js.map +1 -0
  218. package/server/dist/modules/comment/comment.service.d.ts +26 -0
  219. package/server/dist/modules/comment/comment.service.js +182 -0
  220. package/server/dist/modules/comment/comment.service.js.map +1 -0
  221. package/server/dist/modules/comment/html.d.ts +15 -0
  222. package/server/dist/modules/comment/html.js +632 -0
  223. package/server/dist/modules/comment/html.js.map +1 -0
  224. package/server/dist/modules/file/file.controller.d.ts +10 -0
  225. package/server/dist/modules/file/file.controller.js +84 -0
  226. package/server/dist/modules/file/file.controller.js.map +1 -0
  227. package/server/dist/modules/file/file.entity.d.ts +9 -0
  228. package/server/dist/modules/file/file.entity.js +60 -0
  229. package/server/dist/modules/file/file.entity.js.map +1 -0
  230. package/server/dist/modules/file/file.module.d.ts +2 -0
  231. package/server/dist/modules/file/file.module.js +27 -0
  232. package/server/dist/modules/file/file.module.js.map +1 -0
  233. package/server/dist/modules/file/file.service.d.ts +17 -0
  234. package/server/dist/modules/file/file.service.js +111 -0
  235. package/server/dist/modules/file/file.service.js.map +1 -0
  236. package/server/dist/modules/health/health.controller.d.ts +11 -0
  237. package/server/dist/modules/health/health.controller.js +57 -0
  238. package/server/dist/modules/health/health.controller.js.map +1 -0
  239. package/server/dist/modules/health/health.module.d.ts +2 -0
  240. package/server/dist/modules/health/health.module.js +20 -0
  241. package/server/dist/modules/health/health.module.js.map +1 -0
  242. package/server/dist/modules/install/install.controller.d.ts +11 -0
  243. package/server/dist/modules/install/install.controller.js +49 -0
  244. package/server/dist/modules/install/install.controller.js.map +1 -0
  245. package/server/dist/modules/install/install.module.d.ts +2 -0
  246. package/server/dist/modules/install/install.module.js +26 -0
  247. package/server/dist/modules/install/install.module.js.map +1 -0
  248. package/server/dist/modules/install/install.service.d.ts +12 -0
  249. package/server/dist/modules/install/install.service.js +63 -0
  250. package/server/dist/modules/install/install.service.js.map +1 -0
  251. package/server/dist/modules/knowledge/knowledge.controller.d.ts +14 -0
  252. package/server/dist/modules/knowledge/knowledge.controller.js +128 -0
  253. package/server/dist/modules/knowledge/knowledge.controller.js.map +1 -0
  254. package/server/dist/modules/knowledge/knowledge.entity.d.ts +18 -0
  255. package/server/dist/modules/knowledge/knowledge.entity.js +109 -0
  256. package/server/dist/modules/knowledge/knowledge.entity.js.map +1 -0
  257. package/server/dist/modules/knowledge/knowledge.module.d.ts +2 -0
  258. package/server/dist/modules/knowledge/knowledge.module.js +27 -0
  259. package/server/dist/modules/knowledge/knowledge.module.js.map +1 -0
  260. package/server/dist/modules/knowledge/knowledge.service.d.ts +14 -0
  261. package/server/dist/modules/knowledge/knowledge.service.js +144 -0
  262. package/server/dist/modules/knowledge/knowledge.service.js.map +1 -0
  263. package/server/dist/modules/page/page.controller.d.ts +12 -0
  264. package/server/dist/modules/page/page.controller.js +102 -0
  265. package/server/dist/modules/page/page.controller.js.map +1 -0
  266. package/server/dist/modules/page/page.entity.d.ts +15 -0
  267. package/server/dist/modules/page/page.entity.js +94 -0
  268. package/server/dist/modules/page/page.entity.js.map +1 -0
  269. package/server/dist/modules/page/page.module.d.ts +2 -0
  270. package/server/dist/modules/page/page.module.js +27 -0
  271. package/server/dist/modules/page/page.module.js.map +1 -0
  272. package/server/dist/modules/page/page.service.d.ts +12 -0
  273. package/server/dist/modules/page/page.service.js +98 -0
  274. package/server/dist/modules/page/page.service.js.map +1 -0
  275. package/server/dist/modules/search/search.controller.d.ts +8 -0
  276. package/server/dist/modules/search/search.controller.js +67 -0
  277. package/server/dist/modules/search/search.controller.js.map +1 -0
  278. package/server/dist/modules/search/search.entity.d.ts +8 -0
  279. package/server/dist/modules/search/search.entity.js +59 -0
  280. package/server/dist/modules/search/search.entity.js.map +1 -0
  281. package/server/dist/modules/search/search.module.d.ts +2 -0
  282. package/server/dist/modules/search/search.module.js +27 -0
  283. package/server/dist/modules/search/search.module.js.map +1 -0
  284. package/server/dist/modules/search/search.service.d.ts +12 -0
  285. package/server/dist/modules/search/search.service.js +84 -0
  286. package/server/dist/modules/search/search.service.js.map +1 -0
  287. package/server/dist/modules/setting/setting.constant.d.ts +3 -0
  288. package/server/dist/modules/setting/setting.constant.js +25 -0
  289. package/server/dist/modules/setting/setting.constant.js.map +1 -0
  290. package/server/dist/modules/setting/setting.controller.d.ts +12 -0
  291. package/server/dist/modules/setting/setting.controller.js +77 -0
  292. package/server/dist/modules/setting/setting.controller.js.map +1 -0
  293. package/server/dist/modules/setting/setting.entity.d.ts +26 -0
  294. package/server/dist/modules/setting/setting.entity.js +149 -0
  295. package/server/dist/modules/setting/setting.entity.js.map +1 -0
  296. package/server/dist/modules/setting/setting.module.d.ts +2 -0
  297. package/server/dist/modules/setting/setting.module.js +28 -0
  298. package/server/dist/modules/setting/setting.module.js.map +1 -0
  299. package/server/dist/modules/setting/setting.service.d.ts +10 -0
  300. package/server/dist/modules/setting/setting.service.js +106 -0
  301. package/server/dist/modules/setting/setting.service.js.map +1 -0
  302. package/server/dist/modules/smtp/mail.util.d.ts +6 -0
  303. package/server/dist/modules/smtp/mail.util.js +33 -0
  304. package/server/dist/modules/smtp/mail.util.js.map +1 -0
  305. package/server/dist/modules/smtp/smtp.controller.d.ts +9 -0
  306. package/server/dist/modules/smtp/smtp.controller.js +69 -0
  307. package/server/dist/modules/smtp/smtp.controller.js.map +1 -0
  308. package/server/dist/modules/smtp/smtp.entity.d.ts +9 -0
  309. package/server/dist/modules/smtp/smtp.entity.js +60 -0
  310. package/server/dist/modules/smtp/smtp.entity.js.map +1 -0
  311. package/server/dist/modules/smtp/smtp.module.d.ts +2 -0
  312. package/server/dist/modules/smtp/smtp.module.js +28 -0
  313. package/server/dist/modules/smtp/smtp.module.js.map +1 -0
  314. package/server/dist/modules/smtp/smtp.service.d.ts +11 -0
  315. package/server/dist/modules/smtp/smtp.service.js +83 -0
  316. package/server/dist/modules/smtp/smtp.service.js.map +1 -0
  317. package/server/dist/modules/tag/tag.controller.d.ts +12 -0
  318. package/server/dist/modules/tag/tag.controller.js +101 -0
  319. package/server/dist/modules/tag/tag.controller.js.map +1 -0
  320. package/server/dist/modules/tag/tag.entity.d.ts +9 -0
  321. package/server/dist/modules/tag/tag.entity.js +59 -0
  322. package/server/dist/modules/tag/tag.entity.js.map +1 -0
  323. package/server/dist/modules/tag/tag.module.d.ts +2 -0
  324. package/server/dist/modules/tag/tag.module.js +27 -0
  325. package/server/dist/modules/tag/tag.module.js.map +1 -0
  326. package/server/dist/modules/tag/tag.service.d.ts +13 -0
  327. package/server/dist/modules/tag/tag.service.js +104 -0
  328. package/server/dist/modules/tag/tag.service.js.map +1 -0
  329. package/server/dist/modules/user/user.controller.d.ts +13 -0
  330. package/server/dist/modules/user/user.controller.js +115 -0
  331. package/server/dist/modules/user/user.controller.js.map +1 -0
  332. package/server/dist/modules/user/user.entity.d.ts +15 -0
  333. package/server/dist/modules/user/user.entity.js +96 -0
  334. package/server/dist/modules/user/user.entity.js.map +1 -0
  335. package/server/dist/modules/user/user.module.d.ts +2 -0
  336. package/server/dist/modules/user/user.module.js +28 -0
  337. package/server/dist/modules/user/user.module.js.map +1 -0
  338. package/server/dist/modules/user/user.service.d.ts +16 -0
  339. package/server/dist/modules/user/user.service.js +152 -0
  340. package/server/dist/modules/user/user.service.js.map +1 -0
  341. package/server/dist/modules/view/view.controller.d.ts +11 -0
  342. package/server/dist/modules/view/view.controller.js +92 -0
  343. package/server/dist/modules/view/view.controller.js.map +1 -0
  344. package/server/dist/modules/view/view.entity.d.ts +14 -0
  345. package/server/dist/modules/view/view.entity.js +88 -0
  346. package/server/dist/modules/view/view.entity.js.map +1 -0
  347. package/server/dist/modules/view/view.module.d.ts +2 -0
  348. package/server/dist/modules/view/view.module.js +27 -0
  349. package/server/dist/modules/view/view.module.js.map +1 -0
  350. package/server/dist/modules/view/view.service.d.ts +11 -0
  351. package/server/dist/modules/view/view.service.js +89 -0
  352. package/server/dist/modules/view/view.service.js.map +1 -0
  353. package/server/dist/modules/webhook/webhook.controller.d.ts +12 -0
  354. package/server/dist/modules/webhook/webhook.controller.js +63 -0
  355. package/server/dist/modules/webhook/webhook.controller.js.map +1 -0
  356. package/server/dist/modules/webhook/webhook.entity.d.ts +9 -0
  357. package/server/dist/modules/webhook/webhook.entity.js +54 -0
  358. package/server/dist/modules/webhook/webhook.entity.js.map +1 -0
  359. package/server/dist/modules/webhook/webhook.module.d.ts +2 -0
  360. package/server/dist/modules/webhook/webhook.module.js +27 -0
  361. package/server/dist/modules/webhook/webhook.module.js.map +1 -0
  362. package/server/dist/modules/webhook/webhook.service.d.ts +16 -0
  363. package/server/dist/modules/webhook/webhook.service.js +97 -0
  364. package/server/dist/modules/webhook/webhook.service.js.map +1 -0
  365. package/server/dist/public/favicon.png +0 -0
  366. package/server/dist/public/index.html +439 -0
  367. package/server/dist/public/swagger/custom.css +11 -0
  368. package/server/dist/starter.d.ts +1 -0
  369. package/server/dist/starter.js +84 -0
  370. package/server/dist/starter.js.map +1 -0
  371. package/server/dist/tsconfig.build.tsbuildinfo +16966 -0
  372. package/server/dist/utils/date.util.d.ts +1 -0
  373. package/server/dist/utils/date.util.js +13 -0
  374. package/server/dist/utils/date.util.js.map +1 -0
  375. package/server/dist/utils/ip.util.d.ts +2 -0
  376. package/server/dist/utils/ip.util.js +27 -0
  377. package/server/dist/utils/ip.util.js.map +1 -0
  378. package/server/dist/utils/markdown.util.d.ts +4 -0
  379. package/server/dist/utils/markdown.util.js +42 -0
  380. package/server/dist/utils/markdown.util.js.map +1 -0
  381. package/server/dist/utils/oss/aliyun-oss-client.d.ts +6 -0
  382. package/server/dist/utils/oss/aliyun-oss-client.js +28 -0
  383. package/server/dist/utils/oss/aliyun-oss-client.js.map +1 -0
  384. package/server/dist/utils/oss/oss-client.d.ts +6 -0
  385. package/server/dist/utils/oss/oss-client.js +10 -0
  386. package/server/dist/utils/oss/oss-client.js.map +1 -0
  387. package/server/dist/utils/oss.util.d.ts +13 -0
  388. package/server/dist/utils/oss.util.js +49 -0
  389. package/server/dist/utils/oss.util.js.map +1 -0
  390. package/server/dist/utils/ua.util.d.ts +9 -0
  391. package/server/dist/utils/ua.util.js +36 -0
  392. package/server/dist/utils/ua.util.js.map +1 -0
  393. package/server/dist/utils/uniqueid.util.d.ts +1 -0
  394. package/server/dist/utils/uniqueid.util.js +9 -0
  395. package/server/dist/utils/uniqueid.util.js.map +1 -0
  396. package/server/dist/utils/upload.util.d.ts +5 -0
  397. package/server/dist/utils/upload.util.js +34 -0
  398. package/server/dist/utils/upload.util.js.map +1 -0
  399. package/server/dist/utils/user.util.d.ts +1 -0
  400. package/server/dist/utils/user.util.js +18 -0
  401. package/server/dist/utils/user.util.js.map +1 -0
  402. package/server/ecosystem.config.js +18 -0
  403. package/server/package.json +146 -0
  404. package/server/public/favicon.png +0 -0
  405. package/server/public/index.html +439 -0
  406. package/server/public/swagger/custom.css +11 -0
  407. package/templates/config.default.json +12 -0
  408. package/templates/docker-compose.prod.yml +56 -0
  409. package/templates/docker-compose.yml +27 -0
  410. package/templates/env.default +11 -0
  411. package/templates/package.json +10 -0
  412. package/ui/banner.js +22 -0
  413. package/ui/interactive.js +168 -0
  414. package/ui/theme.js +25 -0
  415. package/CONTRIBUTING.md +0 -122
  416. package/client/bin/reactpress-client.js +0 -190
  417. package/scripts/build-packages.js +0 -271
  418. package/scripts/deploy.sh +0 -25
  419. package/scripts/dev.js +0 -39
  420. package/scripts/reactpress-server-old.js +0 -130
  421. package/scripts/reactpress-server.js +0 -666
@@ -0,0 +1,439 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>ReactPress › Installation</title>
7
+ <style>
8
+ /* 保持原有样式不变 */
9
+ * { margin: 0; padding: 0; box-sizing: border-box; }
10
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: #f1f1f1; color: #444; line-height: 1.4; }
11
+ .wp-container { max-width: 600px; margin: 40px auto; background: #fff; border: 1px solid #ccd0d4; box-shadow: 0 1px 3px rgba(0,0,0,0.04); }
12
+ .wp-header { background: #0073aa; color: #fff; padding: 24px; text-align: center; border-bottom: 1px solid #005a87; }
13
+ .wp-header h1 { font-size: 24px; font-weight: 400; margin-bottom: 8px; }
14
+ .wp-header p { font-size: 16px; opacity: 0.9; }
15
+ .wp-content { padding: 24px; }
16
+ .wp-step { display: none; }
17
+ .wp-step.active { display: block; }
18
+ .wp-step h2 { font-size: 22px; font-weight: 600; margin-bottom: 20px; color: #1d2327; }
19
+ .wp-description { background: #f0f6fc; border: 1px solid #c3e4f0; border-left: 4px solid #0073aa; padding: 12px 16px; margin-bottom: 20px; font-size: 14px; color: #0c4a6e; }
20
+ .wp-form-table { width: 100%; margin-bottom: 20px; }
21
+ .wp-form-table th { text-align: left; padding: 10px 0; width: 140px; vertical-align: top; font-weight: 600; color: #1d2327; }
22
+ .wp-form-table td { padding: 10px 0; }
23
+ .wp-form-table input[type="text"], .wp-form-table input[type="password"], .wp-form-table input[type="number"], .wp-form-table input[type="url"] { width: 100%; max-width: 320px; padding: 8px 12px; border: 1px solid #8c8f94; border-radius: 4px; font-size: 14px; line-height: 1.4; transition: border-color 0.15s ease-in-out; }
24
+ .wp-form-table input:focus { border-color: #0073aa; outline: 0; box-shadow: 0 0 0 1px #0073aa; }
25
+ .wp-form-table .description { font-size: 13px; color: #646970; margin-top: 4px; }
26
+ .wp-button { background: #0073aa; color: #fff; border: 1px solid #0073aa; padding: 8px 16px; font-size: 14px; font-weight: 600; border-radius: 3px; cursor: pointer; transition: all 0.15s ease-in-out; text-decoration: none; display: inline-block; }
27
+ .wp-button:hover { background: #005a87; border-color: #005a87; }
28
+ .wp-button:disabled { background: #f0f0f1; border-color: #dcdcde; color: #a7aaad; cursor: not-allowed; }
29
+ .wp-button.button-large { padding: 12px 24px; font-size: 16px; }
30
+ .wp-notice { border: 1px solid #c3c4c7; border-left-width: 4px; padding: 12px; margin: 16px 0; background: #fff; }
31
+ .wp-notice.notice-success { border-left-color: #00a32a; background: #f7fcf7; }
32
+ .wp-notice.notice-error { border-left-color: #d63638; background: #fcf2f2; }
33
+ .wp-notice p { margin: 0; font-size: 14px; }
34
+ .wp-progress { background: #f0f0f1; height: 4px; margin-bottom: 20px; }
35
+ .wp-progress-bar { background: #0073aa; height: 100%; transition: width 0.3s ease; }
36
+ .wp-loader { display: inline-block; width: 16px; height: 16px; border: 2px solid #f3f3f3; border-top: 2px solid #0073aa; border-radius: 50%; animation: wp-spin 1s linear infinite; margin-right: 8px; }
37
+ @keyframes wp-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
38
+ .wp-footer { background: #f6f7f7; border-top: 1px solid #c3c4c7; padding: 16px 24px; text-align: center; font-size: 13px; color: #646970; }
39
+ .text-center { text-align: center; }
40
+ .countdown-container { display: none; text-align: center; margin: 20px 0; }
41
+ .countdown-timer { font-weight: bold; color: #0073aa; }
42
+
43
+ /* 新增重试按钮样式 */
44
+ .retry-button {
45
+ background: #d63638;
46
+ color: white;
47
+ border: none;
48
+ padding: 8px 16px;
49
+ border-radius: 3px;
50
+ cursor: pointer;
51
+ margin-top: 10px;
52
+ }
53
+ .retry-button:hover {
54
+ background: #b32d2e;
55
+ }
56
+ </style>
57
+ </head>
58
+ <body>
59
+ <div class="wp-container">
60
+ <div class="wp-header">
61
+ <h1>ReactPress</h1>
62
+ <p>5-Minute Installation</p>
63
+ </div>
64
+
65
+ <div class="wp-progress">
66
+ <div class="wp-progress-bar" id="progressBar" style="width: 33%;"></div>
67
+ </div>
68
+
69
+ <div class="wp-content">
70
+ <!-- Step 1: Database Configuration -->
71
+ <div class="wp-step active" id="step1">
72
+ <h2>Database Connection Information</h2>
73
+
74
+ <div class="wp-description">
75
+ You should have this information available from your web hosting provider. If you don't have it, contact them before continuing.
76
+ </div>
77
+
78
+ <table class="wp-form-table">
79
+ <tr>
80
+ <th><label for="dbHost">Database Host</label></th>
81
+ <td>
82
+ <input type="text" id="dbHost" value="127.0.0.1" />
83
+ <p class="description">Usually "localhost" or "127.0.0.1"</p>
84
+ </td>
85
+ </tr>
86
+ <tr>
87
+ <th><label for="dbPort">Database Port</label></th>
88
+ <td>
89
+ <input type="number" id="dbPort" value="3306" />
90
+ <p class="description">Default MySQL port is 3306</p>
91
+ </td>
92
+ </tr>
93
+ <tr>
94
+ <th><label for="dbUser">Username</label></th>
95
+ <td>
96
+ <input type="text" id="dbUser" value="" placeholder="Database username" />
97
+ <p class="description">Your MySQL username</p>
98
+ </td>
99
+ </tr>
100
+ <tr>
101
+ <th><label for="dbPassword">Password</label></th>
102
+ <td>
103
+ <input type="password" id="dbPassword" value="" placeholder="Database password" />
104
+ <p class="description">Your MySQL password</p>
105
+ </td>
106
+ </tr>
107
+ <tr>
108
+ <th><label for="dbName">Database Name</label></th>
109
+ <td>
110
+ <input type="text" id="dbName" value="reactpress" />
111
+ <p class="description">The name of the database you want to use with ReactPress</p>
112
+ </td>
113
+ </tr>
114
+ </table>
115
+
116
+ <div id="dbResult"></div>
117
+
118
+ <p class="text-center">
119
+ <button class="wp-button button-large" onclick="testDatabase()" id="testBtn">
120
+ Test Database Connection
121
+ </button>
122
+ </p>
123
+ </div>
124
+
125
+ <!-- Step 2: Site Configuration -->
126
+ <div class="wp-step" id="step2">
127
+ <h2>Site Information</h2>
128
+
129
+ <div class="wp-description">
130
+ Please provide the following information. Don't worry, you can always change these settings later.
131
+ </div>
132
+
133
+ <table class="wp-form-table">
134
+ <tr>
135
+ <th><label for="clientUrl">Client Site URL</label></th>
136
+ <td>
137
+ <input type="url" id="clientUrl" value="http://localhost:3001" />
138
+ <p class="description">The URL where your ReactPress frontend will be accessible</p>
139
+ </td>
140
+ </tr>
141
+ <tr>
142
+ <th><label for="serverUrl">API Server URL</label></th>
143
+ <td>
144
+ <input type="url" id="serverUrl" value="http://localhost:3002" />
145
+ <p class="description">The URL where your ReactPress API server will run</p>
146
+ </td>
147
+ </tr>
148
+ </table>
149
+
150
+ <div id="installResult"></div>
151
+
152
+ <p class="text-center">
153
+ <button class="wp-button button-large" onclick="installReactPress()" id="installBtn">
154
+ Install & Start ReactPress
155
+ </button>
156
+ </p>
157
+ </div>
158
+
159
+ <!-- Step 3: Success -->
160
+ <div class="wp-step" id="step3">
161
+ <h2>🎉 Installation Complete!</h2>
162
+
163
+ <div class="wp-notice notice-success">
164
+ <p><strong>ReactPress has been installed successfully!</strong></p>
165
+ </div>
166
+
167
+ <p>Your ReactPress server configuration has been saved. You can:</p>
168
+
169
+ <ul style="margin: 16px 0 16px 20px;">
170
+ <li>Close this browser window</li>
171
+ <li>Restart the server by running <code>npx @fecommunity/reactpress-server</code> in your terminal</li>
172
+ <li>Access your admin panel at <strong id="adminUrl">http://localhost:3001/admin</strong> (when client is running)</li>
173
+ </ul>
174
+
175
+ <!-- 重定向状态显示 -->
176
+ <div class="wp-notice" id="redirectStatus">
177
+ <p>Waiting for server to start...</p>
178
+ </div>
179
+
180
+ <div class="text-center">
181
+ <button class="wp-button" onclick="checkServerStatus()" id="checkStatusBtn">
182
+ Check Server Status
183
+ </button>
184
+ <button class="retry-button" onclick="retryRedirect()" id="retryBtn" style="display: none;">
185
+ Retry Connection
186
+ </button>
187
+ </div>
188
+
189
+ <div class="wp-description">
190
+ <strong>Note:</strong> To start the server with your new configuration, run <code>npx @fecommunity/reactpress-server</code> in your terminal.
191
+ </div>
192
+ </div>
193
+ </div>
194
+
195
+ <div class="wp-footer">
196
+ <p>Need help? <a href="https://github.com/fecommunity/reactpress/issues" target="_blank">ReactPress Documentation</a></p>
197
+ </div>
198
+ </div>
199
+
200
+ <script>
201
+ // State management
202
+ let currentStep = 1;
203
+ const totalSteps = 3;
204
+ let isTestingConnection = false;
205
+ let countdownInterval = null;
206
+ let serverUrl = 'http://localhost:3002';
207
+ let redirectAttempts = 0;
208
+ const maxRedirectAttempts = 30; // 30秒超时
209
+
210
+ // Update progress bar
211
+ function updateProgress() {
212
+ const progress = (currentStep / totalSteps) * 100;
213
+ document.getElementById('progressBar').style.width = progress + '%';
214
+ }
215
+
216
+ // Show a specific step
217
+ function showStep(step) {
218
+ document.querySelectorAll('.wp-step').forEach(s => s.classList.remove('active'));
219
+ document.getElementById('step' + step).classList.add('active');
220
+ currentStep = step;
221
+ updateProgress();
222
+ }
223
+
224
+ // Show a notice message
225
+ function showNotice(message, type = 'error', containerId = 'dbResult') {
226
+ const container = document.getElementById(containerId);
227
+ container.innerHTML = `
228
+ <div class="wp-notice notice-${type}">
229
+ <p>${message}</p>
230
+ </div>
231
+ `;
232
+ }
233
+
234
+ // 检查服务器状态
235
+ async function checkServerStatus() {
236
+ const statusElement = document.getElementById('redirectStatus');
237
+ const checkBtn = document.getElementById('checkStatusBtn');
238
+ const retryBtn = document.getElementById('retryBtn');
239
+
240
+ statusElement.innerHTML = '<p>Checking server status...</p>';
241
+ statusElement.className = 'wp-notice';
242
+ checkBtn.disabled = true;
243
+
244
+ try {
245
+ const response = await fetch(`${serverUrl}/api`, {
246
+ method: 'GET',
247
+ headers: { 'Content-Type': 'application/json' },
248
+ // 添加超时处理
249
+ signal: AbortSignal.timeout(5000)
250
+ });
251
+
252
+ if (response.ok) {
253
+ statusElement.innerHTML = '<p>Server is running! Redirecting to API documentation...</p>';
254
+ statusElement.className = 'wp-notice notice-success';
255
+
256
+ // 服务器已启动,重定向到API页面
257
+ setTimeout(() => {
258
+ window.location.href = `${serverUrl}/api`;
259
+ }, 1000);
260
+ } else {
261
+ statusElement.innerHTML = '<p>Server responded but with an error. Please try again later.</p>';
262
+ statusElement.className = 'wp-notice notice-error';
263
+ retryBtn.style.display = 'inline-block';
264
+ }
265
+ } catch (error) {
266
+ statusElement.innerHTML = `<p>Cannot connect to server: ${error.message}. The server may still be starting up.</p>`;
267
+ statusElement.className = 'wp-notice notice-error';
268
+ retryBtn.style.display = 'inline-block';
269
+ } finally {
270
+ checkBtn.disabled = false;
271
+ }
272
+ }
273
+
274
+ // 重试重定向
275
+ function retryRedirect() {
276
+ const retryBtn = document.getElementById('retryBtn');
277
+ retryBtn.style.display = 'none';
278
+ checkServerStatus();
279
+ }
280
+
281
+ // 启动服务器状态检查
282
+ function startServerStatusCheck() {
283
+ // 每2秒检查一次服务器状态,最多尝试30次(60秒)
284
+ const checkInterval = setInterval(() => {
285
+ if (redirectAttempts >= maxRedirectAttempts) {
286
+ clearInterval(checkInterval);
287
+ const statusElement = document.getElementById('redirectStatus');
288
+ statusElement.innerHTML = '<p>Server did not start in time. Please check your terminal for errors and try restarting the server manually.</p>';
289
+ statusElement.className = 'wp-notice notice-error';
290
+ document.getElementById('retryBtn').style.display = 'inline-block';
291
+ return;
292
+ }
293
+
294
+ fetch(`${serverUrl}/api`, {
295
+ method: 'HEAD',
296
+ // 添加超时处理
297
+ signal: AbortSignal.timeout(3000)
298
+ })
299
+ .then(response => {
300
+ if (response.ok) {
301
+ clearInterval(checkInterval);
302
+ const statusElement = document.getElementById('redirectStatus');
303
+ statusElement.innerHTML = '<p>Server is running! Redirecting to API documentation...</p>';
304
+ statusElement.className = 'wp-notice notice-success';
305
+
306
+ // 服务器已启动,重定向到API页面
307
+ setTimeout(() => {
308
+ window.location.href = `${serverUrl}/api`;
309
+ }, 1000);
310
+ }
311
+ })
312
+ .catch(() => {
313
+ // 忽略错误,继续尝试
314
+ redirectAttempts++;
315
+ const statusElement = document.getElementById('redirectStatus');
316
+ statusElement.innerHTML = `<p>Waiting for server to start... (${redirectAttempts}/${maxRedirectAttempts})</p>`;
317
+ });
318
+ }, 2000);
319
+ }
320
+
321
+ // Validate database input fields
322
+ function validateDatabaseInputs() {
323
+ const host = document.getElementById('dbHost').value.trim();
324
+ const port = document.getElementById('dbPort').value.trim();
325
+ const user = document.getElementById('dbUser').value.trim();
326
+ const password = document.getElementById('dbPassword').value;
327
+ const database = document.getElementById('dbName').value.trim();
328
+
329
+ if (!host || !port || !user || !database) {
330
+ showNotice('Please fill in all required fields.', 'error');
331
+ return false;
332
+ }
333
+
334
+ if (isNaN(port) || port < 1 || port > 65535) {
335
+ showNotice('Please enter a valid port number (1-65535).', 'error');
336
+ return false;
337
+ }
338
+
339
+ return { host, port, user, password, database };
340
+ }
341
+
342
+ // Test database connection
343
+ async function testDatabase() {
344
+ if (isTestingConnection) return;
345
+
346
+ const dbData = validateDatabaseInputs();
347
+ if (!dbData) return;
348
+
349
+ isTestingConnection = true;
350
+ const testBtn = document.getElementById('testBtn');
351
+ const originalText = testBtn.innerHTML;
352
+
353
+ testBtn.disabled = true;
354
+ testBtn.innerHTML = '<span class="wp-loader"></span>Testing connection...';
355
+
356
+ try {
357
+ const response = await fetch('/test-db', {
358
+ method: 'POST',
359
+ headers: { 'Content-Type': 'application/json' },
360
+ body: JSON.stringify(dbData)
361
+ });
362
+
363
+ const result = await response.json();
364
+
365
+ if (result.success) {
366
+ showNotice(result.message, 'success');
367
+ setTimeout(() => {
368
+ showStep(2);
369
+ }, 1500);
370
+ } else {
371
+ showNotice(result.message, 'error');
372
+ }
373
+ } catch (error) {
374
+ showNotice('Failed to connect to server. Please try again.', 'error');
375
+ } finally {
376
+ isTestingConnection = false;
377
+ testBtn.disabled = false;
378
+ testBtn.innerHTML = originalText;
379
+ }
380
+ }
381
+
382
+ // Install ReactPress
383
+ async function installReactPress() {
384
+ const dbData = validateDatabaseInputs();
385
+ if (!dbData) {
386
+ showStep(1);
387
+ return;
388
+ }
389
+
390
+ const clientUrl = document.getElementById('clientUrl').value.trim();
391
+ serverUrl = document.getElementById('serverUrl').value.trim();
392
+
393
+ if (!clientUrl || !serverUrl) {
394
+ showNotice('Please fill in all site URLs.', 'error', 'installResult');
395
+ return;
396
+ }
397
+
398
+ // 更新管理URL显示
399
+ document.getElementById('adminUrl').textContent = `${clientUrl}/admin`;
400
+
401
+ const installBtn = document.getElementById('installBtn');
402
+ const originalText = installBtn.innerHTML;
403
+
404
+ installBtn.disabled = true;
405
+ installBtn.innerHTML = '<span class="wp-loader"></span>Installing & Starting...';
406
+
407
+ try {
408
+ const response = await fetch('/install', {
409
+ method: 'POST',
410
+ headers: { 'Content-Type': 'application/json' },
411
+ body: JSON.stringify({
412
+ db: dbData,
413
+ site: { clientUrl, serverUrl }
414
+ })
415
+ });
416
+
417
+ const result = await response.json();
418
+
419
+ if (result.success) {
420
+ showStep(3);
421
+ // 启动服务器状态检查
422
+ startServerStatusCheck();
423
+ } else {
424
+ showNotice(result.message, 'error', 'installResult');
425
+ }
426
+ } catch (error) {
427
+ showNotice('Installation failed. Please try again.', 'error', 'installResult');
428
+ } finally {
429
+ installBtn.disabled = false;
430
+ installBtn.innerHTML = originalText;
431
+ }
432
+ }
433
+
434
+ // Initialize the wizard
435
+ updateProgress();
436
+ document.getElementById('dbHost').focus();
437
+ </script>
438
+ </body>
439
+ </html>
@@ -0,0 +1,11 @@
1
+ .swagger-ui div.topbar {
2
+ display: none !important;
3
+ padding: 0 !important;
4
+ }
5
+
6
+
7
+ .swagger-ui .scheme-container {
8
+ display: none !important;
9
+ margin: 0 !important;
10
+ padding: 0 !important;
11
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 1,
3
+ "database": {
4
+ "mode": "embedded-docker",
5
+ "containerName": "reactpress_cli_db"
6
+ },
7
+ "server": {
8
+ "port": 3002,
9
+ "clientUrl": "http://localhost:3001",
10
+ "serverUrl": "http://localhost:3002"
11
+ }
12
+ }
@@ -0,0 +1,56 @@
1
+ # ReactPress 3.0 生产部署示例
2
+ # 用法: 复制到项目根目录,按需修改环境变量后 docker compose -f docker-compose.prod.yml up -d
3
+
4
+ services:
5
+ db:
6
+ image: mysql:8.0
7
+ restart: unless-stopped
8
+ environment:
9
+ MYSQL_ROOT_PASSWORD: ${DB_PASSWD:-reactpress}
10
+ MYSQL_DATABASE: ${DB_DATABASE:-reactpress}
11
+ volumes:
12
+ - reactpress_mysql_data:/var/lib/mysql
13
+ ports:
14
+ - '${DB_PORT:-3306}:3306'
15
+ healthcheck:
16
+ test: ['CMD', 'mysqladmin', 'ping', '-h', 'localhost']
17
+ interval: 10s
18
+ timeout: 5s
19
+ retries: 5
20
+
21
+ api:
22
+ image: node:20-alpine
23
+ restart: unless-stopped
24
+ working_dir: /app
25
+ depends_on:
26
+ db:
27
+ condition: service_healthy
28
+ environment:
29
+ NODE_ENV: production
30
+ DB_HOST: db
31
+ DB_PORT: 3306
32
+ DB_USER: root
33
+ DB_PASSWD: ${DB_PASSWD:-reactpress}
34
+ DB_DATABASE: ${DB_DATABASE:-reactpress}
35
+ SERVER_PORT: 3002
36
+ SERVER_SITE_URL: http://localhost:3002
37
+ SERVER_API_PREFIX: /api
38
+ ports:
39
+ - '3002:3002'
40
+ command: sh -c "npm i -g @fecommunity/reactpress-cli@3 && reactpress-cli start --api-only"
41
+ # 生产建议挂载已 init 的项目目录,或使用自定义镜像内置 dist
42
+
43
+ client:
44
+ image: node:20-alpine
45
+ restart: unless-stopped
46
+ depends_on:
47
+ - api
48
+ environment:
49
+ CLIENT_SITE_URL: http://localhost:3001
50
+ SERVER_SITE_URL: http://api:3002
51
+ ports:
52
+ - '3001:3001'
53
+ command: sh -c "npm i -g @fecommunity/reactpress-client@3 && reactpress-client start"
54
+
55
+ volumes:
56
+ reactpress_mysql_data:
@@ -0,0 +1,27 @@
1
+ services:
2
+ db:
3
+ image: mysql:8.0
4
+ container_name: reactpress_cli_db
5
+ restart: unless-stopped
6
+ environment:
7
+ MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-reactpress_root}
8
+ MYSQL_DATABASE: ${DB_DATABASE:-reactpress}
9
+ MYSQL_USER: ${DB_USER:-reactpress}
10
+ MYSQL_PASSWORD: ${DB_PASSWD:-reactpress}
11
+ command:
12
+ - --character-set-server=utf8mb4
13
+ - --collation-server=utf8mb4_unicode_ci
14
+ - --default-authentication-plugin=mysql_native_password
15
+ volumes:
16
+ - reactpress_cli_db_data:/var/lib/mysql
17
+ ports:
18
+ - "${DB_PORT:-3306}:3306"
19
+ healthcheck:
20
+ test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-reactpress_root}"]
21
+ interval: 5s
22
+ timeout: 5s
23
+ retries: 12
24
+ start_period: 20s
25
+
26
+ volumes:
27
+ reactpress_cli_db_data:
@@ -0,0 +1,11 @@
1
+ # ReactPress — auto-generated by reactpress-cli (do not edit DB_* unless you know what you are doing)
2
+ DB_HOST=127.0.0.1
3
+ DB_PORT=3306
4
+ DB_USER=reactpress
5
+ DB_PASSWD=reactpress
6
+ DB_DATABASE=reactpress
7
+
8
+ CLIENT_SITE_URL=http://localhost:3001
9
+ SERVER_SITE_URL=http://localhost:3002
10
+ SERVER_PORT=3002
11
+ SERVER_API_PREFIX=/api
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "reactpress-site",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "description": "ReactPress CMS & Blog site",
6
+ "scripts": {
7
+ "start": "reactpress-cli start",
8
+ "stop": "reactpress-cli stop"
9
+ }
10
+ }
package/ui/banner.js ADDED
@@ -0,0 +1,22 @@
1
+ const chalk = require('chalk');
2
+ const { brand } = require('./theme');
3
+ const { getMonorepoRoot } = require('../lib/root');
4
+ const path = require('path');
5
+ const { t } = require('../lib/i18n');
6
+
7
+ function printBanner() {
8
+ const version = require(path.join(getMonorepoRoot(), 'package.json')).version;
9
+ console.log('');
10
+ console.log(brand.primary(' ╭─────────────────────────────────────────╮'));
11
+ console.log(
12
+ brand.primary(' │') +
13
+ chalk.bold.white(' ReactPress') +
14
+ brand.muted(t('banner.subtitle')) +
15
+ brand.primary('│'),
16
+ );
17
+ console.log(brand.primary(' ╰─────────────────────────────────────────╯'));
18
+ console.log(brand.muted(` v${version} · init · dev · build · deploy · publish`));
19
+ console.log('');
20
+ }
21
+
22
+ module.exports = { printBanner };