@fecommunity/reactpress 3.0.3 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/bin/reactpress.js +127 -20
  2. package/dist/index.js +0 -0
  3. package/lib/build.js +25 -9
  4. package/lib/db-backup.js +21 -0
  5. package/lib/dev-banner.js +42 -10
  6. package/lib/dev.js +48 -29
  7. package/lib/docker.js +162 -44
  8. package/lib/doctor.js +71 -15
  9. package/lib/http.js +39 -4
  10. package/lib/i18n/strings.js +297 -40
  11. package/lib/lifecycle.js +43 -2
  12. package/lib/nginx.js +342 -0
  13. package/lib/project-type.js +72 -0
  14. package/lib/publish.js +46 -30
  15. package/lib/status.js +69 -45
  16. package/package.json +5 -6
  17. package/server/dist/dist/app.module.d.ts +2 -0
  18. package/server/dist/dist/app.module.js +105 -0
  19. package/server/dist/dist/app.module.js.map +1 -0
  20. package/server/dist/dist/common/api-messages.d.ts +32 -0
  21. package/server/dist/dist/common/api-messages.js +36 -0
  22. package/server/dist/dist/common/api-messages.js.map +1 -0
  23. package/server/dist/dist/filters/http-exception.filter.d.ts +4 -0
  24. package/server/dist/dist/filters/http-exception.filter.js +36 -0
  25. package/server/dist/dist/filters/http-exception.filter.js.map +1 -0
  26. package/server/dist/dist/generate-swagger.d.ts +1 -0
  27. package/server/dist/dist/generate-swagger.js +73 -0
  28. package/server/dist/dist/generate-swagger.js.map +1 -0
  29. package/server/dist/dist/interceptors/transform.interceptor.d.ts +9 -0
  30. package/server/dist/dist/interceptors/transform.interceptor.js +36 -0
  31. package/server/dist/dist/interceptors/transform.interceptor.js.map +1 -0
  32. package/server/dist/dist/logger/index.d.ts +4 -0
  33. package/server/dist/dist/logger/index.js +33 -0
  34. package/server/dist/dist/logger/index.js.map +1 -0
  35. package/server/dist/dist/main.d.ts +6 -0
  36. package/server/dist/dist/main.js +263 -0
  37. package/server/dist/dist/main.js.map +1 -0
  38. package/server/dist/dist/modules/api-key/api-key.controller.d.ts +14 -0
  39. package/server/dist/dist/modules/api-key/api-key.controller.js +63 -0
  40. package/server/dist/dist/modules/api-key/api-key.controller.js.map +1 -0
  41. package/server/dist/dist/modules/api-key/api-key.entity.d.ts +11 -0
  42. package/server/dist/dist/modules/api-key/api-key.entity.js +63 -0
  43. package/server/dist/dist/modules/api-key/api-key.entity.js.map +1 -0
  44. package/server/dist/dist/modules/api-key/api-key.guard.d.ts +7 -0
  45. package/server/dist/dist/modules/api-key/api-key.guard.js +40 -0
  46. package/server/dist/dist/modules/api-key/api-key.guard.js.map +1 -0
  47. package/server/dist/dist/modules/api-key/api-key.module.d.ts +2 -0
  48. package/server/dist/dist/modules/api-key/api-key.module.js +28 -0
  49. package/server/dist/dist/modules/api-key/api-key.module.js.map +1 -0
  50. package/server/dist/dist/modules/api-key/api-key.service.d.ts +15 -0
  51. package/server/dist/dist/modules/api-key/api-key.service.js +81 -0
  52. package/server/dist/dist/modules/api-key/api-key.service.js.map +1 -0
  53. package/server/dist/dist/modules/article/article-revision.entity.d.ts +11 -0
  54. package/server/dist/dist/modules/article/article-revision.entity.js +53 -0
  55. package/server/dist/dist/modules/article/article-revision.entity.js.map +1 -0
  56. package/server/dist/dist/modules/article/article.controller.d.ts +32 -0
  57. package/server/dist/dist/modules/article/article.controller.js +242 -0
  58. package/server/dist/dist/modules/article/article.controller.js.map +1 -0
  59. package/server/dist/dist/modules/article/article.entity.d.ts +24 -0
  60. package/server/dist/dist/modules/article/article.entity.js +133 -0
  61. package/server/dist/dist/modules/article/article.entity.js.map +1 -0
  62. package/server/dist/dist/modules/article/article.module.d.ts +2 -0
  63. package/server/dist/dist/modules/article/article.module.js +42 -0
  64. package/server/dist/dist/modules/article/article.module.js.map +1 -0
  65. package/server/dist/dist/modules/article/article.service.d.ts +38 -0
  66. package/server/dist/dist/modules/article/article.service.js +357 -0
  67. package/server/dist/dist/modules/article/article.service.js.map +1 -0
  68. package/server/dist/dist/modules/article/article.util.d.ts +1 -0
  69. package/server/dist/dist/modules/article/article.util.js +9 -0
  70. package/server/dist/dist/modules/article/article.util.js.map +1 -0
  71. package/server/dist/dist/modules/article/scheduled-publish.service.d.ts +13 -0
  72. package/server/dist/dist/modules/article/scheduled-publish.service.js +65 -0
  73. package/server/dist/dist/modules/article/scheduled-publish.service.js.map +1 -0
  74. package/server/dist/dist/modules/auth/auth.controller.d.ts +12 -0
  75. package/server/dist/dist/modules/auth/auth.controller.js +66 -0
  76. package/server/dist/dist/modules/auth/auth.controller.js.map +1 -0
  77. package/server/dist/dist/modules/auth/auth.module.d.ts +2 -0
  78. package/server/dist/dist/modules/auth/auth.module.js +41 -0
  79. package/server/dist/dist/modules/auth/auth.module.js.map +1 -0
  80. package/server/dist/dist/modules/auth/auth.service.d.ts +26 -0
  81. package/server/dist/dist/modules/auth/auth.service.js +128 -0
  82. package/server/dist/dist/modules/auth/auth.service.js.map +1 -0
  83. package/server/dist/dist/modules/auth/jwt-auth.guard.d.ts +7 -0
  84. package/server/dist/dist/modules/auth/jwt-auth.guard.js +30 -0
  85. package/server/dist/dist/modules/auth/jwt-auth.guard.js.map +1 -0
  86. package/server/dist/dist/modules/auth/jwt.strategy.d.ts +9 -0
  87. package/server/dist/dist/modules/auth/jwt.strategy.js +39 -0
  88. package/server/dist/dist/modules/auth/jwt.strategy.js.map +1 -0
  89. package/server/dist/dist/modules/auth/roles.guard.d.ts +10 -0
  90. package/server/dist/dist/modules/auth/roles.guard.js +46 -0
  91. package/server/dist/dist/modules/auth/roles.guard.js.map +1 -0
  92. package/server/dist/dist/modules/category/category.controller.d.ts +11 -0
  93. package/server/dist/dist/modules/category/category.controller.js +91 -0
  94. package/server/dist/dist/modules/category/category.controller.js.map +1 -0
  95. package/server/dist/dist/modules/category/category.entity.d.ts +9 -0
  96. package/server/dist/dist/modules/category/category.entity.js +60 -0
  97. package/server/dist/dist/modules/category/category.entity.js.map +1 -0
  98. package/server/dist/dist/modules/category/category.module.d.ts +2 -0
  99. package/server/dist/dist/modules/category/category.module.js +27 -0
  100. package/server/dist/dist/modules/category/category.module.js.map +1 -0
  101. package/server/dist/dist/modules/category/category.service.d.ts +12 -0
  102. package/server/dist/dist/modules/category/category.service.js +90 -0
  103. package/server/dist/dist/modules/category/category.service.js.map +1 -0
  104. package/server/dist/dist/modules/comment/comment.controller.d.ts +12 -0
  105. package/server/dist/dist/modules/comment/comment.controller.js +100 -0
  106. package/server/dist/dist/modules/comment/comment.controller.js.map +1 -0
  107. package/server/dist/dist/modules/comment/comment.entity.d.ts +17 -0
  108. package/server/dist/dist/modules/comment/comment.entity.js +104 -0
  109. package/server/dist/dist/modules/comment/comment.entity.js.map +1 -0
  110. package/server/dist/dist/modules/comment/comment.module.d.ts +2 -0
  111. package/server/dist/dist/modules/comment/comment.module.js +39 -0
  112. package/server/dist/dist/modules/comment/comment.module.js.map +1 -0
  113. package/server/dist/dist/modules/comment/comment.service.d.ts +26 -0
  114. package/server/dist/dist/modules/comment/comment.service.js +182 -0
  115. package/server/dist/dist/modules/comment/comment.service.js.map +1 -0
  116. package/server/dist/dist/modules/comment/html.d.ts +15 -0
  117. package/server/dist/dist/modules/comment/html.js +632 -0
  118. package/server/dist/dist/modules/comment/html.js.map +1 -0
  119. package/server/dist/dist/modules/file/file.controller.d.ts +10 -0
  120. package/server/dist/dist/modules/file/file.controller.js +84 -0
  121. package/server/dist/dist/modules/file/file.controller.js.map +1 -0
  122. package/server/dist/dist/modules/file/file.entity.d.ts +9 -0
  123. package/server/dist/dist/modules/file/file.entity.js +60 -0
  124. package/server/dist/dist/modules/file/file.entity.js.map +1 -0
  125. package/server/dist/dist/modules/file/file.module.d.ts +2 -0
  126. package/server/dist/dist/modules/file/file.module.js +27 -0
  127. package/server/dist/dist/modules/file/file.module.js.map +1 -0
  128. package/server/dist/dist/modules/file/file.service.d.ts +17 -0
  129. package/server/dist/dist/modules/file/file.service.js +111 -0
  130. package/server/dist/dist/modules/file/file.service.js.map +1 -0
  131. package/server/dist/dist/modules/health/health.controller.d.ts +11 -0
  132. package/server/dist/dist/modules/health/health.controller.js +57 -0
  133. package/server/dist/dist/modules/health/health.controller.js.map +1 -0
  134. package/server/dist/dist/modules/health/health.module.d.ts +2 -0
  135. package/server/dist/dist/modules/health/health.module.js +20 -0
  136. package/server/dist/dist/modules/health/health.module.js.map +1 -0
  137. package/server/dist/dist/modules/install/install.controller.d.ts +11 -0
  138. package/server/dist/dist/modules/install/install.controller.js +49 -0
  139. package/server/dist/dist/modules/install/install.controller.js.map +1 -0
  140. package/server/dist/dist/modules/install/install.module.d.ts +2 -0
  141. package/server/dist/dist/modules/install/install.module.js +26 -0
  142. package/server/dist/dist/modules/install/install.module.js.map +1 -0
  143. package/server/dist/dist/modules/install/install.service.d.ts +12 -0
  144. package/server/dist/dist/modules/install/install.service.js +63 -0
  145. package/server/dist/dist/modules/install/install.service.js.map +1 -0
  146. package/server/dist/dist/modules/knowledge/knowledge.controller.d.ts +14 -0
  147. package/server/dist/dist/modules/knowledge/knowledge.controller.js +128 -0
  148. package/server/dist/dist/modules/knowledge/knowledge.controller.js.map +1 -0
  149. package/server/dist/dist/modules/knowledge/knowledge.entity.d.ts +18 -0
  150. package/server/dist/dist/modules/knowledge/knowledge.entity.js +109 -0
  151. package/server/dist/dist/modules/knowledge/knowledge.entity.js.map +1 -0
  152. package/server/dist/dist/modules/knowledge/knowledge.module.d.ts +2 -0
  153. package/server/dist/dist/modules/knowledge/knowledge.module.js +27 -0
  154. package/server/dist/dist/modules/knowledge/knowledge.module.js.map +1 -0
  155. package/server/dist/dist/modules/knowledge/knowledge.service.d.ts +14 -0
  156. package/server/dist/dist/modules/knowledge/knowledge.service.js +144 -0
  157. package/server/dist/dist/modules/knowledge/knowledge.service.js.map +1 -0
  158. package/server/dist/dist/modules/page/page.controller.d.ts +12 -0
  159. package/server/dist/dist/modules/page/page.controller.js +102 -0
  160. package/server/dist/dist/modules/page/page.controller.js.map +1 -0
  161. package/server/dist/dist/modules/page/page.entity.d.ts +15 -0
  162. package/server/dist/dist/modules/page/page.entity.js +94 -0
  163. package/server/dist/dist/modules/page/page.entity.js.map +1 -0
  164. package/server/dist/dist/modules/page/page.module.d.ts +2 -0
  165. package/server/dist/dist/modules/page/page.module.js +27 -0
  166. package/server/dist/dist/modules/page/page.module.js.map +1 -0
  167. package/server/dist/dist/modules/page/page.service.d.ts +12 -0
  168. package/server/dist/dist/modules/page/page.service.js +98 -0
  169. package/server/dist/dist/modules/page/page.service.js.map +1 -0
  170. package/server/dist/dist/modules/search/search.controller.d.ts +8 -0
  171. package/server/dist/dist/modules/search/search.controller.js +67 -0
  172. package/server/dist/dist/modules/search/search.controller.js.map +1 -0
  173. package/server/dist/dist/modules/search/search.entity.d.ts +8 -0
  174. package/server/dist/dist/modules/search/search.entity.js +59 -0
  175. package/server/dist/dist/modules/search/search.entity.js.map +1 -0
  176. package/server/dist/dist/modules/search/search.module.d.ts +2 -0
  177. package/server/dist/dist/modules/search/search.module.js +27 -0
  178. package/server/dist/dist/modules/search/search.module.js.map +1 -0
  179. package/server/dist/dist/modules/search/search.service.d.ts +12 -0
  180. package/server/dist/dist/modules/search/search.service.js +84 -0
  181. package/server/dist/dist/modules/search/search.service.js.map +1 -0
  182. package/server/dist/dist/modules/setting/setting.constant.d.ts +3 -0
  183. package/server/dist/dist/modules/setting/setting.constant.js +25 -0
  184. package/server/dist/dist/modules/setting/setting.constant.js.map +1 -0
  185. package/server/dist/dist/modules/setting/setting.controller.d.ts +12 -0
  186. package/server/dist/dist/modules/setting/setting.controller.js +77 -0
  187. package/server/dist/dist/modules/setting/setting.controller.js.map +1 -0
  188. package/server/dist/dist/modules/setting/setting.entity.d.ts +26 -0
  189. package/server/dist/dist/modules/setting/setting.entity.js +149 -0
  190. package/server/dist/dist/modules/setting/setting.entity.js.map +1 -0
  191. package/server/dist/dist/modules/setting/setting.module.d.ts +2 -0
  192. package/server/dist/dist/modules/setting/setting.module.js +28 -0
  193. package/server/dist/dist/modules/setting/setting.module.js.map +1 -0
  194. package/server/dist/dist/modules/setting/setting.service.d.ts +10 -0
  195. package/server/dist/dist/modules/setting/setting.service.js +106 -0
  196. package/server/dist/dist/modules/setting/setting.service.js.map +1 -0
  197. package/server/dist/dist/modules/smtp/mail.util.d.ts +6 -0
  198. package/server/dist/dist/modules/smtp/mail.util.js +33 -0
  199. package/server/dist/dist/modules/smtp/mail.util.js.map +1 -0
  200. package/server/dist/dist/modules/smtp/smtp.controller.d.ts +9 -0
  201. package/server/dist/dist/modules/smtp/smtp.controller.js +69 -0
  202. package/server/dist/dist/modules/smtp/smtp.controller.js.map +1 -0
  203. package/server/dist/dist/modules/smtp/smtp.entity.d.ts +9 -0
  204. package/server/dist/dist/modules/smtp/smtp.entity.js +60 -0
  205. package/server/dist/dist/modules/smtp/smtp.entity.js.map +1 -0
  206. package/server/dist/dist/modules/smtp/smtp.module.d.ts +2 -0
  207. package/server/dist/dist/modules/smtp/smtp.module.js +28 -0
  208. package/server/dist/dist/modules/smtp/smtp.module.js.map +1 -0
  209. package/server/dist/dist/modules/smtp/smtp.service.d.ts +11 -0
  210. package/server/dist/dist/modules/smtp/smtp.service.js +83 -0
  211. package/server/dist/dist/modules/smtp/smtp.service.js.map +1 -0
  212. package/server/dist/dist/modules/tag/tag.controller.d.ts +12 -0
  213. package/server/dist/dist/modules/tag/tag.controller.js +101 -0
  214. package/server/dist/dist/modules/tag/tag.controller.js.map +1 -0
  215. package/server/dist/dist/modules/tag/tag.entity.d.ts +9 -0
  216. package/server/dist/dist/modules/tag/tag.entity.js +59 -0
  217. package/server/dist/dist/modules/tag/tag.entity.js.map +1 -0
  218. package/server/dist/dist/modules/tag/tag.module.d.ts +2 -0
  219. package/server/dist/dist/modules/tag/tag.module.js +27 -0
  220. package/server/dist/dist/modules/tag/tag.module.js.map +1 -0
  221. package/server/dist/dist/modules/tag/tag.service.d.ts +13 -0
  222. package/server/dist/dist/modules/tag/tag.service.js +104 -0
  223. package/server/dist/dist/modules/tag/tag.service.js.map +1 -0
  224. package/server/dist/dist/modules/user/user.controller.d.ts +13 -0
  225. package/server/dist/dist/modules/user/user.controller.js +115 -0
  226. package/server/dist/dist/modules/user/user.controller.js.map +1 -0
  227. package/server/dist/dist/modules/user/user.entity.d.ts +15 -0
  228. package/server/dist/dist/modules/user/user.entity.js +96 -0
  229. package/server/dist/dist/modules/user/user.entity.js.map +1 -0
  230. package/server/dist/dist/modules/user/user.module.d.ts +2 -0
  231. package/server/dist/dist/modules/user/user.module.js +28 -0
  232. package/server/dist/dist/modules/user/user.module.js.map +1 -0
  233. package/server/dist/dist/modules/user/user.service.d.ts +16 -0
  234. package/server/dist/dist/modules/user/user.service.js +152 -0
  235. package/server/dist/dist/modules/user/user.service.js.map +1 -0
  236. package/server/dist/dist/modules/view/view.controller.d.ts +11 -0
  237. package/server/dist/dist/modules/view/view.controller.js +92 -0
  238. package/server/dist/dist/modules/view/view.controller.js.map +1 -0
  239. package/server/dist/dist/modules/view/view.entity.d.ts +14 -0
  240. package/server/dist/dist/modules/view/view.entity.js +88 -0
  241. package/server/dist/dist/modules/view/view.entity.js.map +1 -0
  242. package/server/dist/dist/modules/view/view.module.d.ts +2 -0
  243. package/server/dist/dist/modules/view/view.module.js +27 -0
  244. package/server/dist/dist/modules/view/view.module.js.map +1 -0
  245. package/server/dist/dist/modules/view/view.service.d.ts +11 -0
  246. package/server/dist/dist/modules/view/view.service.js +89 -0
  247. package/server/dist/dist/modules/view/view.service.js.map +1 -0
  248. package/server/dist/dist/modules/webhook/webhook.controller.d.ts +12 -0
  249. package/server/dist/dist/modules/webhook/webhook.controller.js +63 -0
  250. package/server/dist/dist/modules/webhook/webhook.controller.js.map +1 -0
  251. package/server/dist/dist/modules/webhook/webhook.entity.d.ts +9 -0
  252. package/server/dist/dist/modules/webhook/webhook.entity.js +54 -0
  253. package/server/dist/dist/modules/webhook/webhook.entity.js.map +1 -0
  254. package/server/dist/dist/modules/webhook/webhook.module.d.ts +2 -0
  255. package/server/dist/dist/modules/webhook/webhook.module.js +27 -0
  256. package/server/dist/dist/modules/webhook/webhook.module.js.map +1 -0
  257. package/server/dist/dist/modules/webhook/webhook.service.d.ts +16 -0
  258. package/server/dist/dist/modules/webhook/webhook.service.js +97 -0
  259. package/server/dist/dist/modules/webhook/webhook.service.js.map +1 -0
  260. package/server/dist/dist/public/favicon.png +0 -0
  261. package/server/dist/dist/public/index.html +439 -0
  262. package/server/dist/dist/public/swagger/custom.css +11 -0
  263. package/server/dist/dist/starter.d.ts +1 -0
  264. package/server/dist/dist/starter.js +84 -0
  265. package/server/dist/dist/starter.js.map +1 -0
  266. package/server/dist/dist/tsconfig.build.tsbuildinfo +16966 -0
  267. package/server/dist/dist/utils/date.util.d.ts +1 -0
  268. package/server/dist/dist/utils/date.util.js +13 -0
  269. package/server/dist/dist/utils/date.util.js.map +1 -0
  270. package/server/dist/dist/utils/ip.util.d.ts +2 -0
  271. package/server/dist/dist/utils/ip.util.js +27 -0
  272. package/server/dist/dist/utils/ip.util.js.map +1 -0
  273. package/server/dist/dist/utils/markdown.util.d.ts +4 -0
  274. package/server/dist/dist/utils/markdown.util.js +42 -0
  275. package/server/dist/dist/utils/markdown.util.js.map +1 -0
  276. package/server/dist/dist/utils/oss/aliyun-oss-client.d.ts +6 -0
  277. package/server/dist/dist/utils/oss/aliyun-oss-client.js +28 -0
  278. package/server/dist/dist/utils/oss/aliyun-oss-client.js.map +1 -0
  279. package/server/dist/dist/utils/oss/oss-client.d.ts +6 -0
  280. package/server/dist/dist/utils/oss/oss-client.js +10 -0
  281. package/server/dist/dist/utils/oss/oss-client.js.map +1 -0
  282. package/server/dist/dist/utils/oss.util.d.ts +13 -0
  283. package/server/dist/dist/utils/oss.util.js +49 -0
  284. package/server/dist/dist/utils/oss.util.js.map +1 -0
  285. package/server/dist/dist/utils/ua.util.d.ts +9 -0
  286. package/server/dist/dist/utils/ua.util.js +36 -0
  287. package/server/dist/dist/utils/ua.util.js.map +1 -0
  288. package/server/dist/dist/utils/uniqueid.util.d.ts +1 -0
  289. package/server/dist/dist/utils/uniqueid.util.js +9 -0
  290. package/server/dist/dist/utils/uniqueid.util.js.map +1 -0
  291. package/server/dist/dist/utils/upload.util.d.ts +5 -0
  292. package/server/dist/dist/utils/upload.util.js +34 -0
  293. package/server/dist/dist/utils/upload.util.js.map +1 -0
  294. package/server/dist/dist/utils/user.util.d.ts +1 -0
  295. package/server/dist/dist/utils/user.util.js +18 -0
  296. package/server/dist/dist/utils/user.util.js.map +1 -0
  297. package/server/logs/error/error.log.-2026-05-19.log +123 -0
  298. package/server/node_modules/@nestjs/cli/node_modules/rimraf/bin.js +0 -0
  299. package/server/node_modules/@nestjs/cli/node_modules/typescript/bin/tsc +0 -0
  300. package/server/node_modules/@nestjs/cli/node_modules/typescript/bin/tsserver +0 -0
  301. package/server/node_modules/@nestjs/common/node_modules/axios/README.md +0 -0
  302. package/server/node_modules/@nestjs/common/node_modules/axios/lib/adapters/http.js +0 -0
  303. package/server/node_modules/@nestjs/config/node_modules/uuid/dist/bin/uuid +0 -0
  304. package/server/node_modules/@nestjs/platform-express/node_modules/mime/cli.js +0 -0
  305. package/server/node_modules/@nestjs/platform-express/node_modules/mime/src/build.js +0 -0
  306. package/server/node_modules/@nestjs/typeorm/node_modules/uuid/dist/bin/uuid +0 -0
  307. package/server/node_modules/@nuxtjs/opencollective/bin/opencollective.js +0 -0
  308. package/server/node_modules/@pm2/agent/node_modules/dayjs/plugin/objectSupport.d.ts +0 -0
  309. package/server/node_modules/@pm2/agent/node_modules/semver/bin/semver.js +0 -0
  310. package/server/node_modules/@pm2/io/node_modules/semver/bin/semver.js +0 -0
  311. package/server/node_modules/@types/node/LICENSE +0 -0
  312. package/server/node_modules/@types/node/README.md +0 -0
  313. package/server/node_modules/@types/node/assert.d.ts +0 -0
  314. package/server/node_modules/@types/node/async_hooks.d.ts +0 -0
  315. package/server/node_modules/@types/node/buffer.d.ts +0 -0
  316. package/server/node_modules/@types/node/child_process.d.ts +0 -0
  317. package/server/node_modules/@types/node/cluster.d.ts +0 -0
  318. package/server/node_modules/@types/node/console.d.ts +0 -0
  319. package/server/node_modules/@types/node/constants.d.ts +0 -0
  320. package/server/node_modules/@types/node/crypto.d.ts +0 -0
  321. package/server/node_modules/@types/node/dgram.d.ts +0 -0
  322. package/server/node_modules/@types/node/dns.d.ts +0 -0
  323. package/server/node_modules/@types/node/domain.d.ts +0 -0
  324. package/server/node_modules/@types/node/events.d.ts +0 -0
  325. package/server/node_modules/@types/node/fs.d.ts +0 -0
  326. package/server/node_modules/@types/node/globals.d.ts +0 -0
  327. package/server/node_modules/@types/node/globals.global.d.ts +0 -0
  328. package/server/node_modules/@types/node/http.d.ts +0 -0
  329. package/server/node_modules/@types/node/http2.d.ts +0 -0
  330. package/server/node_modules/@types/node/https.d.ts +0 -0
  331. package/server/node_modules/@types/node/index.d.ts +0 -0
  332. package/server/node_modules/@types/node/inspector.d.ts +0 -0
  333. package/server/node_modules/@types/node/module.d.ts +0 -0
  334. package/server/node_modules/@types/node/net.d.ts +0 -0
  335. package/server/node_modules/@types/node/os.d.ts +0 -0
  336. package/server/node_modules/@types/node/package.json +0 -0
  337. package/server/node_modules/@types/node/path.d.ts +0 -0
  338. package/server/node_modules/@types/node/perf_hooks.d.ts +0 -0
  339. package/server/node_modules/@types/node/process.d.ts +0 -0
  340. package/server/node_modules/@types/node/punycode.d.ts +0 -0
  341. package/server/node_modules/@types/node/querystring.d.ts +0 -0
  342. package/server/node_modules/@types/node/readline.d.ts +0 -0
  343. package/server/node_modules/@types/node/repl.d.ts +0 -0
  344. package/server/node_modules/@types/node/stream.d.ts +0 -0
  345. package/server/node_modules/@types/node/string_decoder.d.ts +0 -0
  346. package/server/node_modules/@types/node/timers.d.ts +0 -0
  347. package/server/node_modules/@types/node/tls.d.ts +0 -0
  348. package/server/node_modules/@types/node/trace_events.d.ts +0 -0
  349. package/server/node_modules/@types/node/tty.d.ts +0 -0
  350. package/server/node_modules/@types/node/url.d.ts +0 -0
  351. package/server/node_modules/@types/node/util.d.ts +0 -0
  352. package/server/node_modules/@types/node/v8.d.ts +0 -0
  353. package/server/node_modules/@types/node/vm.d.ts +0 -0
  354. package/server/node_modules/@types/node/wasi.d.ts +0 -0
  355. package/server/node_modules/@types/node/worker_threads.d.ts +0 -0
  356. package/server/node_modules/@types/node/zlib.d.ts +0 -0
  357. package/server/node_modules/@types/zen-observable/LICENSE +0 -0
  358. package/server/node_modules/@types/zen-observable/README.md +0 -0
  359. package/server/node_modules/@types/zen-observable/esm.d.ts +0 -0
  360. package/server/node_modules/@types/zen-observable/extras.d.ts +0 -0
  361. package/server/node_modules/@types/zen-observable/index.d.ts +0 -0
  362. package/server/node_modules/@types/zen-observable/package.json +0 -0
  363. package/server/node_modules/ajv/scripts/info +0 -0
  364. package/server/node_modules/ajv/scripts/prepare-tests +0 -0
  365. package/server/node_modules/ajv/scripts/publish-built-version +0 -0
  366. package/server/node_modules/ajv/scripts/travis-gh-pages +0 -0
  367. package/server/node_modules/arr-diff/LICENSE +0 -0
  368. package/server/node_modules/arr-flatten/LICENSE +0 -0
  369. package/server/node_modules/arr-flatten/README.md +0 -0
  370. package/server/node_modules/array-unique/LICENSE +0 -0
  371. package/server/node_modules/array-unique/README.md +0 -0
  372. package/server/node_modules/aws-ssl-profiles/package.json +0 -0
  373. package/server/node_modules/axios/README.md +0 -0
  374. package/server/node_modules/axios/lib/adapters/http.js +0 -0
  375. package/server/node_modules/blessed/bin/tput.js +0 -0
  376. package/server/node_modules/blessed/example/blessed-telnet.js +0 -0
  377. package/server/node_modules/blessed/example/multiplex.js +0 -0
  378. package/server/node_modules/blessed/example/ping +0 -0
  379. package/server/node_modules/blessed/example/time.js +0 -0
  380. package/server/node_modules/cacache/node_modules/rimraf/bin.js +0 -0
  381. package/server/node_modules/cli-color/bin/generate-color-images +0 -0
  382. package/server/node_modules/cli-color/test/__playground/throbber.formatted.js +0 -0
  383. package/server/node_modules/cli-color/test/__playground/throbber.js +0 -0
  384. package/server/node_modules/cli-highlight/node_modules/wrap-ansi/index.js +0 -0
  385. package/server/node_modules/cliui/node_modules/wrap-ansi/index.js +0 -0
  386. package/server/node_modules/constants-browserify/build.sh +0 -0
  387. package/server/node_modules/copy-concurrently/node_modules/rimraf/bin.js +0 -0
  388. package/server/node_modules/copyfiles/copyfiles +0 -0
  389. package/server/node_modules/copyfiles/index.js +0 -0
  390. package/server/node_modules/cross-env/README.md +0 -0
  391. package/server/node_modules/date-fns/esm/index.js +0 -0
  392. package/server/node_modules/date-fns/esm/previousDay/index.js +0 -0
  393. package/server/node_modules/date-fns/esm/previousFriday/index.js +0 -0
  394. package/server/node_modules/date-fns/esm/previousMonday/index.js +0 -0
  395. package/server/node_modules/date-fns/esm/previousSaturday/index.js +0 -0
  396. package/server/node_modules/date-fns/esm/previousSunday/index.js +0 -0
  397. package/server/node_modules/date-fns/esm/previousThursday/index.js +0 -0
  398. package/server/node_modules/date-fns/esm/previousTuesday/index.js +0 -0
  399. package/server/node_modules/date-fns/esm/previousWednesday/index.js +0 -0
  400. package/server/node_modules/date-fns/index.js +0 -0
  401. package/server/node_modules/date-fns/previousDay/index.js +0 -0
  402. package/server/node_modules/date-fns/previousFriday/index.js +0 -0
  403. package/server/node_modules/date-fns/previousMonday/index.js +0 -0
  404. package/server/node_modules/date-fns/previousSaturday/index.js +0 -0
  405. package/server/node_modules/date-fns/previousSunday/index.js +0 -0
  406. package/server/node_modules/date-fns/previousThursday/index.js +0 -0
  407. package/server/node_modules/date-fns/previousTuesday/index.js +0 -0
  408. package/server/node_modules/date-fns/previousWednesday/index.js +0 -0
  409. package/server/node_modules/dayjs/plugin/arraySupport.d.ts +0 -0
  410. package/server/node_modules/dayjs/plugin/objectSupport.d.ts +0 -0
  411. package/server/node_modules/default-user-agent/node_modules/os-name/cli.js +0 -0
  412. package/server/node_modules/degenerator/node_modules/escodegen/bin/escodegen.js +0 -0
  413. package/server/node_modules/degenerator/node_modules/escodegen/bin/esgenerate.js +0 -0
  414. package/server/node_modules/emojis-list/LICENSE.md +0 -0
  415. package/server/node_modules/emojis-list/README.md +0 -0
  416. package/server/node_modules/errno/build.js +0 -0
  417. package/server/node_modules/errno/cli.js +0 -0
  418. package/server/node_modules/es5-ext/_postinstall.js +0 -0
  419. package/server/node_modules/esprima/bin/esparse.js +0 -0
  420. package/server/node_modules/esprima/bin/esvalidate.js +0 -0
  421. package/server/node_modules/esrecurse/package.json +0 -0
  422. package/server/node_modules/execa/node_modules/semver/bin/semver +0 -0
  423. package/server/node_modules/execa/node_modules/which/bin/which +0 -0
  424. package/server/node_modules/extrareqp2/README.md +0 -0
  425. package/server/node_modules/extrareqp2/lib/adapters/http.js +0 -0
  426. package/server/node_modules/fork-ts-checker-webpack-plugin/node_modules/semver/bin/semver +0 -0
  427. package/server/node_modules/is-class-hotfix/.editorconfig +0 -0
  428. package/server/node_modules/is-class-hotfix/.gitattributes +0 -0
  429. package/server/node_modules/is-class-hotfix/CHANGELOG.md +0 -0
  430. package/server/node_modules/is-class-hotfix/LICENSE.md +0 -0
  431. package/server/node_modules/is-class-hotfix/README.md +0 -0
  432. package/server/node_modules/is-class-hotfix/bower.json +0 -0
  433. package/server/node_modules/is-class-hotfix/is-class.js +0 -0
  434. package/server/node_modules/is-class-hotfix/package.json +0 -0
  435. package/server/node_modules/is-class-hotfix/test/is-class.js +0 -0
  436. package/server/node_modules/is-docker/cli.js +0 -0
  437. package/server/node_modules/js-yaml/bin/js-yaml.js +0 -0
  438. package/server/node_modules/jsonwebtoken/node_modules/semver/bin/semver +0 -0
  439. package/server/node_modules/jstoxml/dist.sh +0 -0
  440. package/server/node_modules/log4js/lib/appenders/fileSync.js +0 -0
  441. package/server/node_modules/log4js/lib/connect-logger.js +0 -0
  442. package/server/node_modules/make-dir/node_modules/semver/bin/semver +0 -0
  443. package/server/node_modules/micromatch/LICENSE +0 -0
  444. package/server/node_modules/miller-rabin/bin/miller-rabin +0 -0
  445. package/server/node_modules/mime/cli.js +0 -0
  446. package/server/node_modules/mkdirp/bin/cmd.js +0 -0
  447. package/server/node_modules/move-concurrently/node_modules/rimraf/bin.js +0 -0
  448. package/server/node_modules/nan/tools/1to2.js +0 -0
  449. package/server/node_modules/needle/bin/needle +0 -0
  450. package/server/node_modules/node-libs-browser/node_modules/buffer/bin/download-node-tests.js +0 -0
  451. package/server/node_modules/node-libs-browser/node_modules/buffer/bin/update-authors.sh +0 -0
  452. package/server/node_modules/open/xdg-open +0 -0
  453. package/server/node_modules/osx-release/cli.js +0 -0
  454. package/server/node_modules/pm2/bin/pm2 +0 -0
  455. package/server/node_modules/pm2/bin/pm2-dev +0 -0
  456. package/server/node_modules/pm2/bin/pm2-docker +0 -0
  457. package/server/node_modules/pm2/bin/pm2-runtime +0 -0
  458. package/server/node_modules/pm2/lib/templates/init-scripts/openrc.tpl +0 -0
  459. package/server/node_modules/pm2/lib/tools/xdg-open +0 -0
  460. package/server/node_modules/pm2/node_modules/mkdirp/bin/cmd.js +0 -0
  461. package/server/node_modules/pm2/pm2 +0 -0
  462. package/server/node_modules/pm2-deploy/deploy +0 -0
  463. package/server/node_modules/require-in-the-middle/node_modules/resolve/bin/resolve +0 -0
  464. package/server/node_modules/rimraf/bin.js +0 -0
  465. package/server/node_modules/segment/repl +0 -0
  466. package/server/node_modules/semver/bin/semver.js +0 -0
  467. package/server/node_modules/send/node_modules/mime/cli.js +0 -0
  468. package/server/node_modules/send/node_modules/mime/src/build.js +0 -0
  469. package/server/node_modules/sha.js/bin.js +0 -0
  470. package/server/node_modules/systeminformation/lib/cli.js +0 -0
  471. package/server/node_modules/terser/bin/terser +0 -0
  472. package/server/node_modules/terser/bin/uglifyjs +0 -0
  473. package/server/node_modules/tree-kill/cli.js +0 -0
  474. package/server/node_modules/tree-kill/index.js +0 -0
  475. package/server/node_modules/typeorm/cli.js +0 -0
  476. package/server/node_modules/typeorm/node_modules/mkdirp/bin/cmd.js +0 -0
  477. package/server/node_modules/typeorm/node_modules/uuid/dist/bin/uuid +0 -0
  478. package/server/node_modules/typeorm/node_modules/wrap-ansi/index.js +0 -0
  479. package/server/node_modules/ua-parser-js/script/cli.js +0 -0
  480. package/server/node_modules/ua-parser-js/src/ua-parser.js +0 -0
  481. package/server/node_modules/upath/LICENSE +0 -0
  482. package/server/node_modules/uri-js/LICENSE +0 -0
  483. package/server/node_modules/uri-js/README.md +0 -0
  484. package/server/node_modules/uri-js/dist/es5/uri.all.d.ts +0 -0
  485. package/server/node_modules/uri-js/dist/es5/uri.all.js +0 -0
  486. package/server/node_modules/uri-js/dist/es5/uri.all.js.map +0 -0
  487. package/server/node_modules/uri-js/dist/es5/uri.all.min.d.ts +0 -0
  488. package/server/node_modules/uri-js/dist/es5/uri.all.min.js +0 -0
  489. package/server/node_modules/uri-js/dist/es5/uri.all.min.js.map +0 -0
  490. package/server/node_modules/uri-js/dist/esnext/index.d.ts +0 -0
  491. package/server/node_modules/uri-js/dist/esnext/index.js +0 -0
  492. package/server/node_modules/uri-js/dist/esnext/index.js.map +0 -0
  493. package/server/node_modules/uri-js/dist/esnext/regexps-iri.d.ts +0 -0
  494. package/server/node_modules/uri-js/dist/esnext/regexps-iri.js +0 -0
  495. package/server/node_modules/uri-js/dist/esnext/regexps-iri.js.map +0 -0
  496. package/server/node_modules/uri-js/dist/esnext/regexps-uri.d.ts +0 -0
  497. package/server/node_modules/uri-js/dist/esnext/regexps-uri.js +0 -0
  498. package/server/node_modules/uri-js/dist/esnext/regexps-uri.js.map +0 -0
  499. package/server/node_modules/uri-js/dist/esnext/schemes/http.d.ts +0 -0
  500. package/server/node_modules/uri-js/dist/esnext/schemes/http.js +0 -0
  501. package/server/node_modules/uri-js/dist/esnext/schemes/http.js.map +0 -0
  502. package/server/node_modules/uri-js/dist/esnext/schemes/https.d.ts +0 -0
  503. package/server/node_modules/uri-js/dist/esnext/schemes/https.js +0 -0
  504. package/server/node_modules/uri-js/dist/esnext/schemes/https.js.map +0 -0
  505. package/server/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts +0 -0
  506. package/server/node_modules/uri-js/dist/esnext/schemes/mailto.js +0 -0
  507. package/server/node_modules/uri-js/dist/esnext/schemes/mailto.js.map +0 -0
  508. package/server/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts +0 -0
  509. package/server/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js +0 -0
  510. package/server/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map +0 -0
  511. package/server/node_modules/uri-js/dist/esnext/schemes/urn.d.ts +0 -0
  512. package/server/node_modules/uri-js/dist/esnext/schemes/urn.js +0 -0
  513. package/server/node_modules/uri-js/dist/esnext/schemes/urn.js.map +0 -0
  514. package/server/node_modules/uri-js/dist/esnext/schemes/ws.d.ts +0 -0
  515. package/server/node_modules/uri-js/dist/esnext/schemes/ws.js +0 -0
  516. package/server/node_modules/uri-js/dist/esnext/schemes/ws.js.map +0 -0
  517. package/server/node_modules/uri-js/dist/esnext/schemes/wss.d.ts +0 -0
  518. package/server/node_modules/uri-js/dist/esnext/schemes/wss.js +0 -0
  519. package/server/node_modules/uri-js/dist/esnext/schemes/wss.js.map +0 -0
  520. package/server/node_modules/uri-js/dist/esnext/uri.d.ts +0 -0
  521. package/server/node_modules/uri-js/dist/esnext/uri.js +0 -0
  522. package/server/node_modules/uri-js/dist/esnext/uri.js.map +0 -0
  523. package/server/node_modules/uri-js/dist/esnext/util.d.ts +0 -0
  524. package/server/node_modules/uri-js/dist/esnext/util.js +0 -0
  525. package/server/node_modules/uri-js/dist/esnext/util.js.map +0 -0
  526. package/server/node_modules/uri-js/package.json +0 -0
  527. package/server/node_modules/uri-js/yarn.lock +0 -0
  528. package/server/node_modules/uuid/dist/bin/uuid +0 -0
  529. package/server/node_modules/webpack/node_modules/acorn/bin/acorn +0 -0
  530. package/server/node_modules/webpack/node_modules/ajv/scripts/info +0 -0
  531. package/server/node_modules/webpack/node_modules/ajv/scripts/prepare-tests +0 -0
  532. package/server/node_modules/webpack/node_modules/ajv/scripts/publish-built-version +0 -0
  533. package/server/node_modules/webpack/node_modules/ajv/scripts/travis-gh-pages +0 -0
  534. package/server/node_modules/which/bin/node-which +0 -0
  535. package/server/node_modules/win-release/node_modules/semver/bin/semver +0 -0
  536. package/server/node_modules/wrap-ansi/index.js +0 -0
  537. package/templates/nginx.dev.conf +57 -0
  538. package/templates/nginx.prod.conf +75 -0
  539. package/ui/banner.js +432 -13
  540. package/ui/interactive.js +248 -52
  541. package/ui/theme.js +250 -10
package/lib/nginx.js ADDED
@@ -0,0 +1,342 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+ const http = require('http');
4
+ const { spawnSync } = require('child_process');
5
+ const open = require('open');
6
+ const { detectProjectType } = require('./project-type');
7
+ const { isDockerRunning, pickDockerComposeCommand } = require('./docker');
8
+ const { t } = require('./i18n');
9
+
10
+ const NGINX_CONTAINER = 'reactpress_nginx';
11
+ const DEFAULT_NGINX_PORT = 80;
12
+
13
+ function resolveNginxMode(options = {}) {
14
+ return options.prod ? 'prod' : 'dev';
15
+ }
16
+
17
+ function resolveNginxConfigBasename(mode) {
18
+ return mode === 'prod' ? 'nginx.conf' : 'nginx.dev.conf';
19
+ }
20
+
21
+ function resolveNginxConfigPath(projectRoot, mode = 'dev') {
22
+ const basename = resolveNginxConfigBasename(mode);
23
+ const type = detectProjectType(projectRoot);
24
+ if (type === 'monorepo') {
25
+ return path.join(projectRoot, basename);
26
+ }
27
+ return path.join(projectRoot, '.reactpress', basename);
28
+ }
29
+
30
+ function bundledTemplatePath(mode) {
31
+ const file = mode === 'prod' ? 'nginx.prod.conf' : 'nginx.dev.conf';
32
+ return path.join(__dirname, '..', 'templates', file);
33
+ }
34
+
35
+ function resolveNginxPort(projectRoot) {
36
+ const envPath = path.join(projectRoot, '.env');
37
+ try {
38
+ const content = fs.readFileSync(envPath, 'utf8');
39
+ const m = content.match(/^NGINX_PORT=(.+)$/m);
40
+ if (m) {
41
+ const port = parseInt(m[1].trim().replace(/^['"]|['"]$/g, ''), 10);
42
+ if (port > 0) return port;
43
+ }
44
+ } catch {
45
+ // ignore
46
+ }
47
+ return DEFAULT_NGINX_PORT;
48
+ }
49
+
50
+ function nginxEntryUrl(projectRoot) {
51
+ const port = resolveNginxPort(projectRoot);
52
+ return port === 80 ? 'http://localhost' : `http://localhost:${port}`;
53
+ }
54
+
55
+ /**
56
+ * Write default nginx config from CLI templates when missing (or when force).
57
+ *
58
+ * @returns {{ configPath: string, created: boolean, mode: 'dev' | 'prod' }}
59
+ */
60
+ function ensureNginxConfig(projectRoot, options = {}) {
61
+ const mode = resolveNginxMode(options);
62
+ const configPath = resolveNginxConfigPath(projectRoot, mode);
63
+ const templatePath = bundledTemplatePath(mode);
64
+ if (!fs.existsSync(templatePath)) {
65
+ throw new Error(t('nginx.templateMissing', { path: templatePath }));
66
+ }
67
+
68
+ const exists = fs.existsSync(configPath);
69
+ if (exists && !options.force) {
70
+ return { configPath, created: false, mode };
71
+ }
72
+
73
+ fs.mkdirSync(path.dirname(configPath), { recursive: true });
74
+ fs.copyFileSync(templatePath, configPath);
75
+ return { configPath, created: !exists || !!options.force, mode };
76
+ }
77
+
78
+ function resolveNginxComposeContext(projectRoot, mode = 'dev') {
79
+ const type = detectProjectType(projectRoot);
80
+ if (mode === 'prod' && type === 'monorepo') {
81
+ return {
82
+ composeFile: path.join(projectRoot, 'docker-compose.prod.yml'),
83
+ cwd: projectRoot,
84
+ service: 'nginx',
85
+ };
86
+ }
87
+ if (type === 'monorepo') {
88
+ return {
89
+ composeFile: path.join(projectRoot, 'docker-compose.dev.yml'),
90
+ cwd: projectRoot,
91
+ service: 'nginx',
92
+ };
93
+ }
94
+ return {
95
+ composeFile: path.join(projectRoot, '.reactpress', 'docker-compose.yml'),
96
+ cwd: path.join(projectRoot, '.reactpress'),
97
+ service: 'nginx',
98
+ };
99
+ }
100
+
101
+ function composeDefinesNginxService(composeFile) {
102
+ try {
103
+ const content = fs.readFileSync(composeFile, 'utf8');
104
+ return /^\s*nginx:\s*$/m.test(content);
105
+ } catch {
106
+ return false;
107
+ }
108
+ }
109
+
110
+ function runComposeOnContext(ctx, args, options = {}) {
111
+ const { command, baseArgs } = pickDockerComposeCommand();
112
+ return spawnSync(command, [...baseArgs, '-f', ctx.composeFile, ...args], {
113
+ stdio: options.stdio ?? 'inherit',
114
+ cwd: ctx.cwd,
115
+ ...options,
116
+ });
117
+ }
118
+
119
+ function isNginxContainerRunning() {
120
+ const res = spawnSync(
121
+ 'docker',
122
+ ['inspect', '-f', '{{.State.Running}}', NGINX_CONTAINER],
123
+ { encoding: 'utf8' }
124
+ );
125
+ return res.status === 0 && res.stdout.trim() === 'true';
126
+ }
127
+
128
+ function startNginxContainer(configPath, port) {
129
+ spawnSync('docker', ['rm', '-f', NGINX_CONTAINER], { stdio: 'ignore' });
130
+ const absConfig = path.resolve(configPath);
131
+ const res = spawnSync(
132
+ 'docker',
133
+ [
134
+ 'run',
135
+ '-d',
136
+ '--name',
137
+ NGINX_CONTAINER,
138
+ '-p',
139
+ `${port}:80`,
140
+ '-v',
141
+ `${absConfig}:/etc/nginx/conf.d/default.conf:ro`,
142
+ '--add-host',
143
+ 'host.docker.internal:host-gateway',
144
+ 'nginx:alpine',
145
+ ],
146
+ { encoding: 'utf8' }
147
+ );
148
+ if (res.status !== 0) {
149
+ throw new Error(res.stderr?.trim() || t('nginx.startFailed'));
150
+ }
151
+ }
152
+
153
+ function stopNginxContainer() {
154
+ spawnSync('docker', ['rm', '-sf', NGINX_CONTAINER], { stdio: 'ignore' });
155
+ }
156
+
157
+ function nginxUp(projectRoot, options = {}) {
158
+ if (!isDockerRunning()) {
159
+ throw new Error(t('docker.notRunning'));
160
+ }
161
+
162
+ const mode = resolveNginxMode(options);
163
+ const type = detectProjectType(projectRoot);
164
+
165
+ if (mode === 'prod' && type !== 'monorepo') {
166
+ throw new Error(t('nginx.prodMonorepoOnly'));
167
+ }
168
+
169
+ const { configPath } = ensureNginxConfig(projectRoot, { mode, force: options.force });
170
+ const port = resolveNginxPort(projectRoot);
171
+ const ctx = resolveNginxComposeContext(projectRoot, mode);
172
+
173
+ if (fs.existsSync(ctx.composeFile) && composeDefinesNginxService(ctx.composeFile)) {
174
+ const result = runComposeOnContext(ctx, ['up', '-d', ctx.service]);
175
+ if (result.status !== 0) {
176
+ throw new Error(t('nginx.startFailed'));
177
+ }
178
+ } else {
179
+ startNginxContainer(configPath, port);
180
+ }
181
+
182
+ console.log(t('nginx.started', { url: nginxEntryUrl(projectRoot) }));
183
+ console.log(t('nginx.configPath', { path: configPath }));
184
+ }
185
+
186
+ function nginxDown(projectRoot, options = {}) {
187
+ const mode = resolveNginxMode(options);
188
+ const ctx = resolveNginxComposeContext(projectRoot, mode);
189
+ if (fs.existsSync(ctx.composeFile) && composeDefinesNginxService(ctx.composeFile)) {
190
+ runComposeOnContext(ctx, ['stop', ctx.service], { stdio: 'ignore' });
191
+ }
192
+ stopNginxContainer();
193
+ console.log(t('nginx.stopped'));
194
+ }
195
+
196
+ function nginxRestart(projectRoot, options = {}) {
197
+ nginxDown(projectRoot, options);
198
+ nginxUp(projectRoot, options);
199
+ }
200
+
201
+ function nginxStatus(projectRoot, options = {}) {
202
+ const mode = resolveNginxMode(options);
203
+ const configPath = resolveNginxConfigPath(projectRoot, mode);
204
+ const port = resolveNginxPort(projectRoot);
205
+ const running = isNginxContainerRunning();
206
+ const configExists = fs.existsSync(configPath);
207
+
208
+ console.log(t('nginx.statusTitle'));
209
+ console.log(t('nginx.statusContainer', { name: NGINX_CONTAINER, running: running ? t('common.yes') : t('common.no') }));
210
+ console.log(t('nginx.statusConfig', { path: configPath, exists: configExists ? t('common.yes') : t('common.no') }));
211
+ console.log(t('nginx.statusUrl', { url: nginxEntryUrl(projectRoot), port }));
212
+ console.log(t('nginx.statusMode', { mode }));
213
+ }
214
+
215
+ function nginxLogs(extraArgs = []) {
216
+ const args = ['logs', '-f', NGINX_CONTAINER, ...extraArgs];
217
+ spawnSync('docker', args, { stdio: 'inherit' });
218
+ }
219
+
220
+ function dockerExecNginx(args) {
221
+ return spawnSync('docker', ['exec', NGINX_CONTAINER, 'nginx', ...args], {
222
+ encoding: 'utf8',
223
+ });
224
+ }
225
+
226
+ function nginxTest() {
227
+ if (!isNginxContainerRunning()) {
228
+ throw new Error(t('nginx.notRunning'));
229
+ }
230
+ const res = dockerExecNginx(['-t']);
231
+ process.stdout.write(res.stdout || '');
232
+ process.stderr.write(res.stderr || '');
233
+ if (res.status !== 0) {
234
+ throw new Error(t('nginx.testFailed'));
235
+ }
236
+ console.log(t('nginx.testOk'));
237
+ }
238
+
239
+ function nginxReload() {
240
+ nginxTest();
241
+ const res = dockerExecNginx(['-s', 'reload']);
242
+ if (res.status !== 0) {
243
+ throw new Error(res.stderr?.trim() || t('nginx.reloadFailed'));
244
+ }
245
+ console.log(t('nginx.reloadOk'));
246
+ }
247
+
248
+ async function nginxOpen(projectRoot) {
249
+ const url = nginxEntryUrl(projectRoot);
250
+ console.log(t('nginx.opening', { url }));
251
+ await open(url);
252
+ }
253
+
254
+ function probeNginxHealth(projectRoot, timeoutMs = 2000) {
255
+ const url = new URL('/health', nginxEntryUrl(projectRoot));
256
+ return new Promise((resolve) => {
257
+ const req = http.get(url, { timeout: timeoutMs }, (res) => {
258
+ res.resume();
259
+ resolve(res.statusCode === 200);
260
+ });
261
+ req.on('error', () => resolve(false));
262
+ req.on('timeout', () => {
263
+ req.destroy();
264
+ resolve(false);
265
+ });
266
+ });
267
+ }
268
+
269
+ async function checkNginx(projectRoot) {
270
+ if (!isDockerRunning()) {
271
+ return { ok: true, message: t('nginx.doctorSkippedDocker') };
272
+ }
273
+ if (!isNginxContainerRunning()) {
274
+ return { ok: true, message: t('nginx.doctorSkippedNotRunning') };
275
+ }
276
+ const healthy = await probeNginxHealth(projectRoot);
277
+ if (healthy) {
278
+ return {
279
+ ok: true,
280
+ message: t('nginx.doctorOk', { url: nginxEntryUrl(projectRoot) }),
281
+ };
282
+ }
283
+ return {
284
+ ok: false,
285
+ message: t('nginx.doctorUnhealthy', { url: nginxEntryUrl(projectRoot) }),
286
+ fix: t('nginx.doctorUnhealthyFix'),
287
+ };
288
+ }
289
+
290
+ async function runNginxCommand(command, projectRoot, extraArgs = [], options = {}) {
291
+ switch (command) {
292
+ case 'ensure': {
293
+ const { configPath, created } = ensureNginxConfig(projectRoot, options);
294
+ console.log(
295
+ created ? t('nginx.configCreated', { path: configPath }) : t('nginx.configExists', { path: configPath })
296
+ );
297
+ return;
298
+ }
299
+ case 'up':
300
+ nginxUp(projectRoot, options);
301
+ return;
302
+ case 'down':
303
+ case 'stop':
304
+ nginxDown(projectRoot, options);
305
+ return;
306
+ case 'restart':
307
+ nginxRestart(projectRoot, options);
308
+ return;
309
+ case 'status':
310
+ nginxStatus(projectRoot, options);
311
+ return;
312
+ case 'logs':
313
+ nginxLogs(extraArgs);
314
+ return;
315
+ case 'test':
316
+ nginxTest();
317
+ return;
318
+ case 'reload':
319
+ nginxReload();
320
+ return;
321
+ case 'open':
322
+ await nginxOpen(projectRoot);
323
+ return;
324
+ default:
325
+ throw new Error(t('nginx.unknownCommand', { command }));
326
+ }
327
+ }
328
+
329
+ module.exports = {
330
+ NGINX_CONTAINER,
331
+ DEFAULT_NGINX_PORT,
332
+ resolveNginxMode,
333
+ resolveNginxConfigPath,
334
+ resolveNginxComposeContext,
335
+ ensureNginxConfig,
336
+ nginxEntryUrl,
337
+ resolveNginxPort,
338
+ isNginxContainerRunning,
339
+ probeNginxHealth,
340
+ checkNginx,
341
+ runNginxCommand,
342
+ };
@@ -0,0 +1,72 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ /**
5
+ * Decide whether a given directory is a ReactPress monorepo checkout (with
6
+ * editable `server/src`, `client/`, `toolkit/`) or a standalone project that
7
+ * was created with `reactpress init` and relies on the bundled runtime.
8
+ *
9
+ * @param {string} root absolute project root
10
+ * @returns {'monorepo' | 'standalone' | 'unknown'}
11
+ */
12
+ function detectProjectType(root) {
13
+ if (!root) return 'unknown';
14
+ const abs = path.resolve(root);
15
+
16
+ const monorepoMarkers = [
17
+ path.join(abs, 'pnpm-workspace.yaml'),
18
+ path.join(abs, 'server', 'src', 'main.ts'),
19
+ ];
20
+ if (monorepoMarkers.some((p) => fs.existsSync(p))) {
21
+ return 'monorepo';
22
+ }
23
+
24
+ if (fs.existsSync(path.join(abs, '.reactpress', 'config.json'))) {
25
+ return 'standalone';
26
+ }
27
+
28
+ return 'unknown';
29
+ }
30
+
31
+ /**
32
+ * @param {string} root
33
+ */
34
+ function hasClient(root) {
35
+ return fs.existsSync(path.join(root, 'client', 'package.json'));
36
+ }
37
+
38
+ /**
39
+ * @param {string} root
40
+ */
41
+ function hasServerSource(root) {
42
+ return fs.existsSync(path.join(root, 'server', 'src', 'main.ts'));
43
+ }
44
+
45
+ /**
46
+ * @param {string} root
47
+ */
48
+ function hasToolkit(root) {
49
+ return fs.existsSync(path.join(root, 'toolkit', 'package.json'));
50
+ }
51
+
52
+ /**
53
+ * @param {string} root
54
+ */
55
+ function describeProject(root) {
56
+ const type = detectProjectType(root);
57
+ return {
58
+ type,
59
+ root,
60
+ hasClient: hasClient(root),
61
+ hasServerSource: hasServerSource(root),
62
+ hasToolkit: hasToolkit(root),
63
+ };
64
+ }
65
+
66
+ module.exports = {
67
+ detectProjectType,
68
+ describeProject,
69
+ hasClient,
70
+ hasServerSource,
71
+ hasToolkit,
72
+ };
package/lib/publish.js CHANGED
@@ -7,6 +7,15 @@ const chalk = require('chalk');
7
7
  const inquirer = require('inquirer');
8
8
  const crypto = require('crypto');
9
9
  const { t } = require('./i18n');
10
+ const { getMonorepoRoot } = require('./root');
11
+
12
+ function getWorkspaceRoot() {
13
+ const root = getMonorepoRoot();
14
+ if (fs.existsSync(path.join(root, 'pnpm-workspace.yaml'))) {
15
+ return root;
16
+ }
17
+ return process.cwd();
18
+ }
10
19
 
11
20
  function getPackages() {
12
21
  return [
@@ -67,7 +76,7 @@ function generateHash(filePath) {
67
76
 
68
77
  // Get package content hash
69
78
  function getPackageHash(packagePath) {
70
- const fullPath = path.join(process.cwd(), packagePath);
79
+ const fullPath = path.join(getWorkspaceRoot(), packagePath);
71
80
  return generateHash(fullPath);
72
81
  }
73
82
 
@@ -75,7 +84,7 @@ function getPackageHash(packagePath) {
75
84
  function hasMeaningfulChangesForBuild(packagePath, packageName) {
76
85
  try {
77
86
  // Create a hash file path to store previous hash in node_modules
78
- const hashFilePath = path.join(process.cwd(), 'node_modules', '.build-cache', `${packageName.replace('/', '_')}.hash`);
87
+ const hashFilePath = path.join(getWorkspaceRoot(), 'node_modules', '.build-cache', `${packageName.replace('/', '_')}.hash`);
79
88
 
80
89
  // Generate current hash
81
90
  const currentHash = getPackageHash(packagePath);
@@ -98,7 +107,7 @@ function hasMeaningfulChangesForBuild(packagePath, packageName) {
98
107
  function hasMeaningfulChangesForPublish(packagePath, packageName) {
99
108
  try {
100
109
  // Create a hash file path to store previous hash in node_modules
101
- const hashFilePath = path.join(process.cwd(), 'node_modules', '.publish-cache', `${packageName.replace('/', '_')}.hash`);
110
+ const hashFilePath = path.join(getWorkspaceRoot(), 'node_modules', '.publish-cache', `${packageName.replace('/', '_')}.hash`);
102
111
 
103
112
  // Generate current hash
104
113
  const currentHash = getPackageHash(packagePath);
@@ -120,7 +129,7 @@ function hasMeaningfulChangesForPublish(packagePath, packageName) {
120
129
  // Save package hash (for build)
121
130
  function savePackageHashForBuild(packagePath, packageName) {
122
131
  try {
123
- const hashFilePath = path.join(process.cwd(), 'node_modules', '.build-cache', `${packageName.replace('/', '_')}.hash`);
132
+ const hashFilePath = path.join(getWorkspaceRoot(), 'node_modules', '.build-cache', `${packageName.replace('/', '_')}.hash`);
124
133
 
125
134
  // Ensure cache directory exists
126
135
  const cacheDir = path.dirname(hashFilePath);
@@ -139,7 +148,7 @@ function savePackageHashForBuild(packagePath, packageName) {
139
148
  // Save package hash (for publish)
140
149
  function savePackageHashForPublish(packagePath, packageName) {
141
150
  try {
142
- const hashFilePath = path.join(process.cwd(), 'node_modules', '.publish-cache', `${packageName.replace('/', '_')}.hash`);
151
+ const hashFilePath = path.join(getWorkspaceRoot(), 'node_modules', '.publish-cache', `${packageName.replace('/', '_')}.hash`);
143
152
 
144
153
  // Ensure cache directory exists
145
154
  const cacheDir = path.dirname(hashFilePath);
@@ -158,7 +167,7 @@ function savePackageHashForPublish(packagePath, packageName) {
158
167
  // Get current versions
159
168
  function getCurrentVersion(packagePath) {
160
169
  try {
161
- const pkgPath = path.join(process.cwd(), packagePath, 'package.json');
170
+ const pkgPath = path.join(getWorkspaceRoot(), packagePath, 'package.json');
162
171
  const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
163
172
  return pkg.version;
164
173
  } catch (error) {
@@ -168,10 +177,12 @@ function getCurrentVersion(packagePath) {
168
177
 
169
178
  // Increment version based on type
170
179
  function incrementVersion(version, type) {
171
- const parts = version.split('-')[0].split('.');
172
- const major = parseInt(parts[0]);
173
- const minor = parseInt(parts[1]);
174
- const patch = parseInt(parts[2]);
180
+ const base = String(version).split('-')[0];
181
+ const parts = base.split('.').map((p) => parseInt(p, 10));
182
+ while (parts.length < 3) parts.push(0);
183
+ const major = Number.isFinite(parts[0]) ? parts[0] : 0;
184
+ const minor = Number.isFinite(parts[1]) ? parts[1] : 0;
185
+ const patch = Number.isFinite(parts[2]) ? parts[2] : 0;
175
186
 
176
187
  switch (type) {
177
188
  case 'major':
@@ -246,7 +257,7 @@ function getNextAvailableVersion(packageName, currentVersion, versionType) {
246
257
  function updateVersion(packagePath, newVersion) {
247
258
  console.log(chalk.blue(`\n✏️ Updating version to ${newVersion}...`));
248
259
 
249
- const pkgPath = path.join(process.cwd(), packagePath, 'package.json');
260
+ const pkgPath = path.join(getWorkspaceRoot(), packagePath, 'package.json');
250
261
  const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
251
262
 
252
263
  const oldVersion = pkg.version;
@@ -260,7 +271,7 @@ function updateVersion(packagePath, newVersion) {
260
271
  function fixWorkspaceDependenciesForBuild(packagePath) {
261
272
  console.log(chalk.blue(`🔧 Fixing workspace dependencies for build: ${packagePath}...`));
262
273
 
263
- const pkgPath = path.join(process.cwd(), packagePath, 'package.json');
274
+ const pkgPath = path.join(getWorkspaceRoot(), packagePath, 'package.json');
264
275
  const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
265
276
 
266
277
  // Fix dependencies
@@ -291,7 +302,7 @@ function fixWorkspaceDependenciesForBuild(packagePath) {
291
302
  function restoreWorkspaceDependenciesAfterBuild(packagePath) {
292
303
  console.log(chalk.blue(`🔄 Restoring workspace dependencies after build: ${packagePath}...`));
293
304
 
294
- const pkgPath = path.join(process.cwd(), packagePath, 'package.json');
305
+ const pkgPath = path.join(getWorkspaceRoot(), packagePath, 'package.json');
295
306
  const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
296
307
 
297
308
  // Restore dependencies
@@ -319,7 +330,7 @@ function restoreWorkspaceDependenciesAfterBuild(packagePath) {
319
330
  function fixWorkspaceDependenciesForPublish(packagePath, packageVersions) {
320
331
  console.log(chalk.blue(`🔧 Fixing workspace dependencies for publish: ${packagePath}...`));
321
332
 
322
- const pkgPath = path.join(process.cwd(), packagePath, 'package.json');
333
+ const pkgPath = path.join(getWorkspaceRoot(), packagePath, 'package.json');
323
334
  const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
324
335
 
325
336
  // Fix dependencies
@@ -350,7 +361,7 @@ function fixWorkspaceDependenciesForPublish(packagePath, packageVersions) {
350
361
  function restoreWorkspaceDependenciesAfterPublish(packagePath) {
351
362
  console.log(chalk.blue(`🔄 Restoring workspace dependencies for ${packagePath}...`));
352
363
 
353
- const pkgPath = path.join(process.cwd(), packagePath, 'package.json');
364
+ const pkgPath = path.join(getWorkspaceRoot(), packagePath, 'package.json');
354
365
  const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
355
366
 
356
367
  // Restore dependencies
@@ -383,15 +394,22 @@ function buildPackage(pkg) {
383
394
  fixWorkspaceDependenciesForBuild(pkg.path);
384
395
 
385
396
  try {
386
- if (pkg.path === 'config') {
387
- execSync('pnpm run build', { cwd: path.join(process.cwd(), pkg.path), stdio: 'inherit' });
397
+ const pkgDir = path.join(getWorkspaceRoot(), pkg.path);
398
+ if (pkg.path === 'cli') {
399
+ execSync('node scripts/sync-bundled-core.mjs', { cwd: pkgDir, stdio: 'inherit' });
400
+ if (fs.existsSync(path.join(pkgDir, 'server', 'package.json'))) {
401
+ execSync('pnpm run build', { cwd: path.join(pkgDir, 'server'), stdio: 'inherit' });
402
+ }
403
+ } else if (pkg.path === 'server') {
404
+ execSync('pnpm run build', { cwd: pkgDir, stdio: 'inherit' });
388
405
  } else if (pkg.path === 'client') {
389
- execSync('pnpm run prebuild && pnpm run build', { cwd: path.join(process.cwd(), pkg.path), stdio: 'inherit' });
406
+ execSync('pnpm run prebuild && pnpm run build', { cwd: pkgDir, stdio: 'inherit' });
390
407
  } else if (pkg.path === 'toolkit') {
391
- execSync('pnpm run build', { cwd: path.join(process.cwd(), pkg.path), stdio: 'inherit' });
408
+ execSync('pnpm run build', { cwd: pkgDir, stdio: 'inherit' });
392
409
  } else if (pkg.path === 'templates/hello-world' || pkg.path === 'templates/twentytwentyfive') {
393
- // Templates don't need to be built, just validate package.json
394
410
  console.log(chalk.gray(' Templates do not require building, skipping...'));
411
+ } else if (fs.existsSync(path.join(pkgDir, 'package.json'))) {
412
+ execSync('pnpm run build', { cwd: pkgDir, stdio: 'inherit' });
395
413
  }
396
414
  console.log(chalk.green(`✅ ${pkg.name} built successfully`));
397
415
  } finally {
@@ -410,7 +428,7 @@ function publishPackage(packagePath, packageName, tag = 'latest') {
410
428
 
411
429
  try {
412
430
  const command = `pnpm publish --access public --tag ${tag} --registry https://registry.npmjs.org --no-git-checks`;
413
- execSync(command, { cwd: path.join(process.cwd(), packagePath), stdio: 'inherit' });
431
+ execSync(command, { cwd: path.join(getWorkspaceRoot(), packagePath), stdio: 'inherit' });
414
432
  console.log(chalk.green(`✅ ${packageName} published successfully!`));
415
433
  } catch (error) {
416
434
  console.log(chalk.red(`❌ Failed to publish ${packageName}`));
@@ -472,7 +490,7 @@ async function buildPackages() {
472
490
 
473
491
  // Check for meaningful changes in each package
474
492
  for (const pkg of packages) {
475
- if (fs.existsSync(path.join(process.cwd(), pkg.path))) {
493
+ if (fs.existsSync(path.join(getWorkspaceRoot(), pkg.path))) {
476
494
  if (hasMeaningfulChangesForBuild(pkg.path, pkg.name)) {
477
495
  packagesToBuild.push(pkg);
478
496
  console.log(chalk.blue(`\n📦 ${pkg.name} has changes, will be built`));
@@ -552,7 +570,7 @@ async function publishPackages() {
552
570
 
553
571
  // Check for meaningful changes in each package
554
572
  for (const pkg of packages) {
555
- if (fs.existsSync(path.join(process.cwd(), pkg.path))) {
573
+ if (fs.existsSync(path.join(getWorkspaceRoot(), pkg.path))) {
556
574
  if (hasMeaningfulChangesForPublish(pkg.path, pkg.name)) {
557
575
  packagesToBuild.push(pkg);
558
576
  console.log(chalk.blue(`\n📦 ${pkg.name} has changes, will be built`));
@@ -569,17 +587,15 @@ async function publishPackages() {
569
587
  return;
570
588
  }
571
589
 
572
- // Build packages that have changes
573
590
  for (const pkg of packagesToBuild) {
574
- buildPackage(pkg);
575
- // Save the hash after successful build
591
+ await buildPackage(pkg);
576
592
  savePackageHashForPublish(pkg.path, pkg.name);
577
593
  }
578
-
594
+
579
595
  console.log(chalk.green(`\n🎉 ${packagesToBuild.length} package(s) built successfully!`));
580
596
  return;
581
597
  }
582
-
598
+
583
599
  if (action === 'publish-one') {
584
600
  const { selectedPackage } = await inquirer.prompt([
585
601
  {
@@ -706,7 +722,7 @@ async function publishPackages() {
706
722
 
707
723
  // Check for meaningful changes in each package
708
724
  for (const pkg of packages) {
709
- if (!fs.existsSync(path.join(process.cwd(), pkg.path))) {
725
+ if (!fs.existsSync(path.join(getWorkspaceRoot(), pkg.path))) {
710
726
  console.log(chalk.yellow(`⚠️ Package ${pkg.name} directory not found, skipping...`));
711
727
  continue;
712
728
  }
@@ -845,7 +861,7 @@ async function publishPackages() {
845
861
 
846
862
  // Check for meaningful changes in each package
847
863
  for (const pkg of packages) {
848
- if (!fs.existsSync(path.join(process.cwd(), pkg.path))) {
864
+ if (!fs.existsSync(path.join(getWorkspaceRoot(), pkg.path))) {
849
865
  console.log(chalk.yellow(`⚠️ Package ${pkg.name} directory not found, skipping...`));
850
866
  continue;
851
867
  }