@fecommunity/reactpress-cli 0.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.
- package/LICENSE +21 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +102 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +54 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +33 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/restart.d.ts +2 -0
- package/dist/commands/restart.d.ts.map +1 -0
- package/dist/commands/restart.js +29 -0
- package/dist/commands/restart.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +31 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +20 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +5 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +29 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/services/config.d.ts +11 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +102 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/database.d.ts +43 -0
- package/dist/services/database.d.ts.map +1 -0
- package/dist/services/database.js +252 -0
- package/dist/services/database.js.map +1 -0
- package/dist/services/exec.d.ts +22 -0
- package/dist/services/exec.d.ts.map +1 -0
- package/dist/services/exec.js +46 -0
- package/dist/services/exec.js.map +1 -0
- package/dist/services/init.d.ts +10 -0
- package/dist/services/init.d.ts.map +1 -0
- package/dist/services/init.js +50 -0
- package/dist/services/init.js.map +1 -0
- package/dist/services/process.d.ts +9 -0
- package/dist/services/process.d.ts.map +1 -0
- package/dist/services/process.js +98 -0
- package/dist/services/process.js.map +1 -0
- package/dist/services/server-health.d.ts +4 -0
- package/dist/services/server-health.d.ts.map +1 -0
- package/dist/services/server-health.js +27 -0
- package/dist/services/server-health.js.map +1 -0
- package/dist/services/server.d.ts +19 -0
- package/dist/services/server.d.ts.map +1 -0
- package/dist/services/server.js +133 -0
- package/dist/services/server.js.map +1 -0
- package/dist/templates/config.default.json +12 -0
- package/dist/templates/docker-compose.yml +27 -0
- package/dist/templates/env.default +11 -0
- package/dist/templates/package.json +10 -0
- package/dist/types/config.d.ts +30 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/utils/cli-context.d.ts +4 -0
- package/dist/utils/cli-context.d.ts.map +1 -0
- package/dist/utils/cli-context.js +10 -0
- package/dist/utils/cli-context.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +32 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +17 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +27 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/platform.d.ts +8 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +21 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/port.d.ts +5 -0
- package/dist/utils/port.d.ts.map +1 -0
- package/dist/utils/port.js +25 -0
- package/dist/utils/port.js.map +1 -0
- package/dist/utils/server-bundle.d.ts +11 -0
- package/dist/utils/server-bundle.d.ts.map +1 -0
- package/dist/utils/server-bundle.js +71 -0
- package/dist/utils/server-bundle.js.map +1 -0
- package/package.json +69 -0
- package/scripts/install-bundled-runtime.mjs +46 -0
- package/server/bin/reactpress-server.js +203 -0
- package/server/dist/app.module.d.ts +2 -0
- package/server/dist/app.module.js +80 -0
- package/server/dist/app.module.js.map +1 -0
- package/server/dist/filters/http-exception.filter.d.ts +4 -0
- package/server/dist/filters/http-exception.filter.js +36 -0
- package/server/dist/filters/http-exception.filter.js.map +1 -0
- package/server/dist/generate-swagger.d.ts +1 -0
- package/server/dist/generate-swagger.js +73 -0
- package/server/dist/generate-swagger.js.map +1 -0
- package/server/dist/interceptors/transform.interceptor.d.ts +9 -0
- package/server/dist/interceptors/transform.interceptor.js +36 -0
- package/server/dist/interceptors/transform.interceptor.js.map +1 -0
- package/server/dist/logger/index.d.ts +4 -0
- package/server/dist/logger/index.js +33 -0
- package/server/dist/logger/index.js.map +1 -0
- package/server/dist/main.d.ts +6 -0
- package/server/dist/main.js +263 -0
- package/server/dist/main.js.map +1 -0
- package/server/dist/modules/article/article.controller.d.ts +27 -0
- package/server/dist/modules/article/article.controller.js +198 -0
- package/server/dist/modules/article/article.controller.js.map +1 -0
- package/server/dist/modules/article/article.entity.d.ts +23 -0
- package/server/dist/modules/article/article.entity.js +128 -0
- package/server/dist/modules/article/article.entity.js.map +1 -0
- package/server/dist/modules/article/article.module.d.ts +2 -0
- package/server/dist/modules/article/article.module.js +30 -0
- package/server/dist/modules/article/article.module.js.map +1 -0
- package/server/dist/modules/article/article.service.d.ts +30 -0
- package/server/dist/modules/article/article.service.js +303 -0
- package/server/dist/modules/article/article.service.js.map +1 -0
- package/server/dist/modules/article/article.util.d.ts +1 -0
- package/server/dist/modules/article/article.util.js +9 -0
- package/server/dist/modules/article/article.util.js.map +1 -0
- package/server/dist/modules/auth/auth.controller.d.ts +12 -0
- package/server/dist/modules/auth/auth.controller.js +66 -0
- package/server/dist/modules/auth/auth.controller.js.map +1 -0
- package/server/dist/modules/auth/auth.module.d.ts +2 -0
- package/server/dist/modules/auth/auth.module.js +41 -0
- package/server/dist/modules/auth/auth.module.js.map +1 -0
- package/server/dist/modules/auth/auth.service.d.ts +26 -0
- package/server/dist/modules/auth/auth.service.js +127 -0
- package/server/dist/modules/auth/auth.service.js.map +1 -0
- package/server/dist/modules/auth/jwt-auth.guard.d.ts +7 -0
- package/server/dist/modules/auth/jwt-auth.guard.js +29 -0
- package/server/dist/modules/auth/jwt-auth.guard.js.map +1 -0
- package/server/dist/modules/auth/jwt.strategy.d.ts +9 -0
- package/server/dist/modules/auth/jwt.strategy.js +38 -0
- package/server/dist/modules/auth/jwt.strategy.js.map +1 -0
- package/server/dist/modules/auth/roles.guard.d.ts +10 -0
- package/server/dist/modules/auth/roles.guard.js +46 -0
- package/server/dist/modules/auth/roles.guard.js.map +1 -0
- package/server/dist/modules/category/category.controller.d.ts +11 -0
- package/server/dist/modules/category/category.controller.js +91 -0
- package/server/dist/modules/category/category.controller.js.map +1 -0
- package/server/dist/modules/category/category.entity.d.ts +9 -0
- package/server/dist/modules/category/category.entity.js +60 -0
- package/server/dist/modules/category/category.entity.js.map +1 -0
- package/server/dist/modules/category/category.module.d.ts +2 -0
- package/server/dist/modules/category/category.module.js +27 -0
- package/server/dist/modules/category/category.module.js.map +1 -0
- package/server/dist/modules/category/category.service.d.ts +12 -0
- package/server/dist/modules/category/category.service.js +89 -0
- package/server/dist/modules/category/category.service.js.map +1 -0
- package/server/dist/modules/comment/comment.controller.d.ts +12 -0
- package/server/dist/modules/comment/comment.controller.js +100 -0
- package/server/dist/modules/comment/comment.controller.js.map +1 -0
- package/server/dist/modules/comment/comment.entity.d.ts +17 -0
- package/server/dist/modules/comment/comment.entity.js +104 -0
- package/server/dist/modules/comment/comment.entity.js.map +1 -0
- package/server/dist/modules/comment/comment.module.d.ts +2 -0
- package/server/dist/modules/comment/comment.module.js +30 -0
- package/server/dist/modules/comment/comment.module.js.map +1 -0
- package/server/dist/modules/comment/comment.service.d.ts +24 -0
- package/server/dist/modules/comment/comment.service.js +172 -0
- package/server/dist/modules/comment/comment.service.js.map +1 -0
- package/server/dist/modules/comment/html.d.ts +15 -0
- package/server/dist/modules/comment/html.js +632 -0
- package/server/dist/modules/comment/html.js.map +1 -0
- package/server/dist/modules/file/file.controller.d.ts +10 -0
- package/server/dist/modules/file/file.controller.js +84 -0
- package/server/dist/modules/file/file.controller.js.map +1 -0
- package/server/dist/modules/file/file.entity.d.ts +9 -0
- package/server/dist/modules/file/file.entity.js +60 -0
- package/server/dist/modules/file/file.entity.js.map +1 -0
- package/server/dist/modules/file/file.module.d.ts +2 -0
- package/server/dist/modules/file/file.module.js +27 -0
- package/server/dist/modules/file/file.module.js.map +1 -0
- package/server/dist/modules/file/file.service.d.ts +17 -0
- package/server/dist/modules/file/file.service.js +111 -0
- package/server/dist/modules/file/file.service.js.map +1 -0
- package/server/dist/modules/install/install.controller.d.ts +11 -0
- package/server/dist/modules/install/install.controller.js +49 -0
- package/server/dist/modules/install/install.controller.js.map +1 -0
- package/server/dist/modules/install/install.module.d.ts +2 -0
- package/server/dist/modules/install/install.module.js +26 -0
- package/server/dist/modules/install/install.module.js.map +1 -0
- package/server/dist/modules/install/install.service.d.ts +12 -0
- package/server/dist/modules/install/install.service.js +63 -0
- package/server/dist/modules/install/install.service.js.map +1 -0
- package/server/dist/modules/knowledge/knowledge.controller.d.ts +14 -0
- package/server/dist/modules/knowledge/knowledge.controller.js +128 -0
- package/server/dist/modules/knowledge/knowledge.controller.js.map +1 -0
- package/server/dist/modules/knowledge/knowledge.entity.d.ts +18 -0
- package/server/dist/modules/knowledge/knowledge.entity.js +109 -0
- package/server/dist/modules/knowledge/knowledge.entity.js.map +1 -0
- package/server/dist/modules/knowledge/knowledge.module.d.ts +2 -0
- package/server/dist/modules/knowledge/knowledge.module.js +27 -0
- package/server/dist/modules/knowledge/knowledge.module.js.map +1 -0
- package/server/dist/modules/knowledge/knowledge.service.d.ts +14 -0
- package/server/dist/modules/knowledge/knowledge.service.js +143 -0
- package/server/dist/modules/knowledge/knowledge.service.js.map +1 -0
- package/server/dist/modules/page/page.controller.d.ts +12 -0
- package/server/dist/modules/page/page.controller.js +102 -0
- package/server/dist/modules/page/page.controller.js.map +1 -0
- package/server/dist/modules/page/page.entity.d.ts +15 -0
- package/server/dist/modules/page/page.entity.js +94 -0
- package/server/dist/modules/page/page.entity.js.map +1 -0
- package/server/dist/modules/page/page.module.d.ts +2 -0
- package/server/dist/modules/page/page.module.js +27 -0
- package/server/dist/modules/page/page.module.js.map +1 -0
- package/server/dist/modules/page/page.service.d.ts +12 -0
- package/server/dist/modules/page/page.service.js +97 -0
- package/server/dist/modules/page/page.service.js.map +1 -0
- package/server/dist/modules/search/search.controller.d.ts +8 -0
- package/server/dist/modules/search/search.controller.js +67 -0
- package/server/dist/modules/search/search.controller.js.map +1 -0
- package/server/dist/modules/search/search.entity.d.ts +8 -0
- package/server/dist/modules/search/search.entity.js +59 -0
- package/server/dist/modules/search/search.entity.js.map +1 -0
- package/server/dist/modules/search/search.module.d.ts +2 -0
- package/server/dist/modules/search/search.module.js +27 -0
- package/server/dist/modules/search/search.module.js.map +1 -0
- package/server/dist/modules/search/search.service.d.ts +12 -0
- package/server/dist/modules/search/search.service.js +84 -0
- package/server/dist/modules/search/search.service.js.map +1 -0
- package/server/dist/modules/setting/setting.constant.d.ts +3 -0
- package/server/dist/modules/setting/setting.constant.js +25 -0
- package/server/dist/modules/setting/setting.constant.js.map +1 -0
- package/server/dist/modules/setting/setting.controller.d.ts +12 -0
- package/server/dist/modules/setting/setting.controller.js +77 -0
- package/server/dist/modules/setting/setting.controller.js.map +1 -0
- package/server/dist/modules/setting/setting.entity.d.ts +26 -0
- package/server/dist/modules/setting/setting.entity.js +149 -0
- package/server/dist/modules/setting/setting.entity.js.map +1 -0
- package/server/dist/modules/setting/setting.module.d.ts +2 -0
- package/server/dist/modules/setting/setting.module.js +28 -0
- package/server/dist/modules/setting/setting.module.js.map +1 -0
- package/server/dist/modules/setting/setting.service.d.ts +10 -0
- package/server/dist/modules/setting/setting.service.js +106 -0
- package/server/dist/modules/setting/setting.service.js.map +1 -0
- package/server/dist/modules/smtp/mail.util.d.ts +6 -0
- package/server/dist/modules/smtp/mail.util.js +33 -0
- package/server/dist/modules/smtp/mail.util.js.map +1 -0
- package/server/dist/modules/smtp/smtp.controller.d.ts +9 -0
- package/server/dist/modules/smtp/smtp.controller.js +69 -0
- package/server/dist/modules/smtp/smtp.controller.js.map +1 -0
- package/server/dist/modules/smtp/smtp.entity.d.ts +9 -0
- package/server/dist/modules/smtp/smtp.entity.js +60 -0
- package/server/dist/modules/smtp/smtp.entity.js.map +1 -0
- package/server/dist/modules/smtp/smtp.module.d.ts +2 -0
- package/server/dist/modules/smtp/smtp.module.js +28 -0
- package/server/dist/modules/smtp/smtp.module.js.map +1 -0
- package/server/dist/modules/smtp/smtp.service.d.ts +11 -0
- package/server/dist/modules/smtp/smtp.service.js +82 -0
- package/server/dist/modules/smtp/smtp.service.js.map +1 -0
- package/server/dist/modules/tag/tag.controller.d.ts +12 -0
- package/server/dist/modules/tag/tag.controller.js +101 -0
- package/server/dist/modules/tag/tag.controller.js.map +1 -0
- package/server/dist/modules/tag/tag.entity.d.ts +9 -0
- package/server/dist/modules/tag/tag.entity.js +59 -0
- package/server/dist/modules/tag/tag.entity.js.map +1 -0
- package/server/dist/modules/tag/tag.module.d.ts +2 -0
- package/server/dist/modules/tag/tag.module.js +27 -0
- package/server/dist/modules/tag/tag.module.js.map +1 -0
- package/server/dist/modules/tag/tag.service.d.ts +13 -0
- package/server/dist/modules/tag/tag.service.js +103 -0
- package/server/dist/modules/tag/tag.service.js.map +1 -0
- package/server/dist/modules/user/user.controller.d.ts +13 -0
- package/server/dist/modules/user/user.controller.js +114 -0
- package/server/dist/modules/user/user.controller.js.map +1 -0
- package/server/dist/modules/user/user.entity.d.ts +15 -0
- package/server/dist/modules/user/user.entity.js +96 -0
- package/server/dist/modules/user/user.entity.js.map +1 -0
- package/server/dist/modules/user/user.module.d.ts +2 -0
- package/server/dist/modules/user/user.module.js +28 -0
- package/server/dist/modules/user/user.module.js.map +1 -0
- package/server/dist/modules/user/user.service.d.ts +16 -0
- package/server/dist/modules/user/user.service.js +151 -0
- package/server/dist/modules/user/user.service.js.map +1 -0
- package/server/dist/modules/view/view.controller.d.ts +11 -0
- package/server/dist/modules/view/view.controller.js +92 -0
- package/server/dist/modules/view/view.controller.js.map +1 -0
- package/server/dist/modules/view/view.entity.d.ts +14 -0
- package/server/dist/modules/view/view.entity.js +88 -0
- package/server/dist/modules/view/view.entity.js.map +1 -0
- package/server/dist/modules/view/view.module.d.ts +2 -0
- package/server/dist/modules/view/view.module.js +27 -0
- package/server/dist/modules/view/view.module.js.map +1 -0
- package/server/dist/modules/view/view.service.d.ts +11 -0
- package/server/dist/modules/view/view.service.js +89 -0
- package/server/dist/modules/view/view.service.js.map +1 -0
- package/server/dist/public/favicon.png +0 -0
- package/server/dist/public/index.html +439 -0
- package/server/dist/public/swagger/custom.css +11 -0
- package/server/dist/starter.d.ts +1 -0
- package/server/dist/starter.js +84 -0
- package/server/dist/starter.js.map +1 -0
- package/server/dist/tsconfig.build.tsbuildinfo +16764 -0
- package/server/dist/utils/date.util.d.ts +1 -0
- package/server/dist/utils/date.util.js +13 -0
- package/server/dist/utils/date.util.js.map +1 -0
- package/server/dist/utils/ip.util.d.ts +2 -0
- package/server/dist/utils/ip.util.js +27 -0
- package/server/dist/utils/ip.util.js.map +1 -0
- package/server/dist/utils/markdown.util.d.ts +4 -0
- package/server/dist/utils/markdown.util.js +42 -0
- package/server/dist/utils/markdown.util.js.map +1 -0
- package/server/dist/utils/oss/aliyun-oss-client.d.ts +6 -0
- package/server/dist/utils/oss/aliyun-oss-client.js +28 -0
- package/server/dist/utils/oss/aliyun-oss-client.js.map +1 -0
- package/server/dist/utils/oss/oss-client.d.ts +6 -0
- package/server/dist/utils/oss/oss-client.js +10 -0
- package/server/dist/utils/oss/oss-client.js.map +1 -0
- package/server/dist/utils/oss.util.d.ts +13 -0
- package/server/dist/utils/oss.util.js +48 -0
- package/server/dist/utils/oss.util.js.map +1 -0
- package/server/dist/utils/ua.util.d.ts +9 -0
- package/server/dist/utils/ua.util.js +36 -0
- package/server/dist/utils/ua.util.js.map +1 -0
- package/server/dist/utils/uniqueid.util.d.ts +1 -0
- package/server/dist/utils/uniqueid.util.js +9 -0
- package/server/dist/utils/uniqueid.util.js.map +1 -0
- package/server/dist/utils/upload.util.d.ts +5 -0
- package/server/dist/utils/upload.util.js +34 -0
- package/server/dist/utils/upload.util.js.map +1 -0
- package/server/dist/utils/user.util.d.ts +1 -0
- package/server/dist/utils/user.util.js +18 -0
- package/server/dist/utils/user.util.js.map +1 -0
- package/server/ecosystem.config.js +18 -0
- package/server/package.json +149 -0
- package/server/public/favicon.png +0 -0
- package/server/public/index.html +439 -0
- package/server/public/swagger/custom.css +11 -0
- package/templates/config.default.json +12 -0
- package/templates/docker-compose.yml +27 -0
- package/templates/env.default +11 -0
- package/templates/package.json +10 -0
- package/toolkit/dist/api/Article.d.ts +123 -0
- package/toolkit/dist/api/Article.js +188 -0
- package/toolkit/dist/api/Auth.d.ts +32 -0
- package/toolkit/dist/api/Auth.js +58 -0
- package/toolkit/dist/api/Category.d.ts +51 -0
- package/toolkit/dist/api/Category.js +84 -0
- package/toolkit/dist/api/Comment.d.ts +60 -0
- package/toolkit/dist/api/Comment.js +97 -0
- package/toolkit/dist/api/File.d.ts +42 -0
- package/toolkit/dist/api/File.js +71 -0
- package/toolkit/dist/api/HttpClient.d.ts +41 -0
- package/toolkit/dist/api/HttpClient.js +96 -0
- package/toolkit/dist/api/Knowledge.d.ts +78 -0
- package/toolkit/dist/api/Knowledge.js +123 -0
- package/toolkit/dist/api/Page.d.ts +60 -0
- package/toolkit/dist/api/Page.js +97 -0
- package/toolkit/dist/api/Search.d.ts +32 -0
- package/toolkit/dist/api/Search.js +58 -0
- package/toolkit/dist/api/Setting.d.ts +24 -0
- package/toolkit/dist/api/Setting.js +45 -0
- package/toolkit/dist/api/Smtp.d.ts +33 -0
- package/toolkit/dist/api/Smtp.js +58 -0
- package/toolkit/dist/api/Tag.d.ts +60 -0
- package/toolkit/dist/api/Tag.js +97 -0
- package/toolkit/dist/api/User.d.ts +43 -0
- package/toolkit/dist/api/User.js +72 -0
- package/toolkit/dist/api/View.d.ts +51 -0
- package/toolkit/dist/api/View.js +84 -0
- package/toolkit/dist/api/index.d.ts +13 -0
- package/toolkit/dist/api/index.js +30 -0
- package/toolkit/dist/api/instance.d.ts +47 -0
- package/toolkit/dist/api/instance.js +71 -0
- package/toolkit/dist/config/env.d.ts +1 -0
- package/toolkit/dist/config/env.js +89 -0
- package/toolkit/dist/config/global.d.ts +34 -0
- package/toolkit/dist/config/global.js +382 -0
- package/toolkit/dist/config/i18n.d.ts +4 -0
- package/toolkit/dist/config/i18n.js +43 -0
- package/toolkit/dist/config/index.d.ts +15 -0
- package/toolkit/dist/config/index.js +25 -0
- package/toolkit/dist/index.d.ts +11 -0
- package/toolkit/dist/index.js +38 -0
- package/toolkit/dist/locales/en.json +97 -0
- package/toolkit/dist/locales/zh.json +97 -0
- package/toolkit/dist/types/index.d.ts +245 -0
- package/toolkit/dist/types/index.js +12 -0
- package/toolkit/dist/utils/index.d.ts +33 -0
- package/toolkit/dist/utils/index.js +59 -0
- package/toolkit/package.json +19 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 FECommunity
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,aAAa,IAAI,OAAO,CAiFvC;AAED,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzE"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { runInitCommand } from './commands/init.js';
|
|
6
|
+
import { runStartCommand } from './commands/start.js';
|
|
7
|
+
import { runStopCommand } from './commands/stop.js';
|
|
8
|
+
import { runRestartCommand } from './commands/restart.js';
|
|
9
|
+
import { runStatusCommand } from './commands/status.js';
|
|
10
|
+
import { runConfigCommand } from './commands/config.js';
|
|
11
|
+
import { printBanner, logger } from './utils/logger.js';
|
|
12
|
+
import { setProjectCwd } from './utils/cli-context.js';
|
|
13
|
+
function getVersion() {
|
|
14
|
+
try {
|
|
15
|
+
const pkgPath = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
|
|
16
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
17
|
+
return pkg.version;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return '1.0.0';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function createProgram() {
|
|
24
|
+
const program = new Command();
|
|
25
|
+
program
|
|
26
|
+
.name('reactpress-cli')
|
|
27
|
+
.description('零配置初始化与管理 ReactPress CMS & 博客服务器')
|
|
28
|
+
.version(getVersion())
|
|
29
|
+
.option('--cwd <dir>', 'ReactPress 项目目录(默认:当前工作目录)')
|
|
30
|
+
.hook('preAction', (thisCommand) => {
|
|
31
|
+
printBanner();
|
|
32
|
+
const opts = thisCommand.optsWithGlobals();
|
|
33
|
+
setProjectCwd(opts.cwd);
|
|
34
|
+
});
|
|
35
|
+
program
|
|
36
|
+
.command('init')
|
|
37
|
+
.description('一键初始化 ReactPress CMS & 博客服务器(零配置)')
|
|
38
|
+
.argument('[directory]', '项目目录', '.')
|
|
39
|
+
.option('-f, --force', '覆盖已有配置')
|
|
40
|
+
.action(async (directory, opts) => {
|
|
41
|
+
const code = await runInitCommand({
|
|
42
|
+
directory,
|
|
43
|
+
force: opts.force,
|
|
44
|
+
});
|
|
45
|
+
process.exitCode = code;
|
|
46
|
+
});
|
|
47
|
+
program
|
|
48
|
+
.command('start')
|
|
49
|
+
.description('启动服务器(自动准备数据库)')
|
|
50
|
+
.action(async () => {
|
|
51
|
+
process.exitCode = await runStartCommand();
|
|
52
|
+
});
|
|
53
|
+
program
|
|
54
|
+
.command('stop')
|
|
55
|
+
.description('停止服务器')
|
|
56
|
+
.option('--database', '同时停止嵌入式数据库容器')
|
|
57
|
+
.action(async (opts) => {
|
|
58
|
+
process.exitCode = await runStopCommand({ database: opts.database });
|
|
59
|
+
});
|
|
60
|
+
program
|
|
61
|
+
.command('restart')
|
|
62
|
+
.description('重启服务器')
|
|
63
|
+
.action(async () => {
|
|
64
|
+
process.exitCode = await runRestartCommand();
|
|
65
|
+
});
|
|
66
|
+
program
|
|
67
|
+
.command('status')
|
|
68
|
+
.description('查看服务与数据库状态')
|
|
69
|
+
.action(async () => {
|
|
70
|
+
process.exitCode = await runStatusCommand();
|
|
71
|
+
});
|
|
72
|
+
program
|
|
73
|
+
.command('config')
|
|
74
|
+
.description('查看或更新配置(更新后可用 --apply 重启生效)')
|
|
75
|
+
.argument('[key]', '配置键,如 server.port')
|
|
76
|
+
.argument('[value]', '新值')
|
|
77
|
+
.option('-l, --list', '列出所有配置')
|
|
78
|
+
.option('-a, --apply', '更新后自动重启服务')
|
|
79
|
+
.action(async (key, value, opts) => {
|
|
80
|
+
process.exitCode = await runConfigCommand({
|
|
81
|
+
key,
|
|
82
|
+
value,
|
|
83
|
+
list: opts.list,
|
|
84
|
+
apply: opts.apply,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
program.on('command:*', () => {
|
|
88
|
+
logger.error(`未知命令: ${program.args.join(' ')}`);
|
|
89
|
+
program.outputHelp();
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
});
|
|
92
|
+
return program;
|
|
93
|
+
}
|
|
94
|
+
export async function runCli(argv = process.argv) {
|
|
95
|
+
const program = createProgram();
|
|
96
|
+
await program.parseAsync(argv);
|
|
97
|
+
if (!argv.slice(2).length) {
|
|
98
|
+
program.outputHelp();
|
|
99
|
+
process.exitCode = 0;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAwB,CAAC;QAC7E,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,gBAAgB,CAAC;SACtB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,OAAO,CAAC,UAAU,EAAE,CAAC;SACrB,MAAM,CAAC,aAAa,EAAE,4BAA4B,CAAC;SACnD,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;QACjC,WAAW,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,WAAW,CAAC,eAAe,EAAsB,CAAC;QAC/D,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,CAAC;SACpC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,IAAyB,EAAE,EAAE;QAC7D,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC;YAChC,SAAS;YACT,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gBAAgB,CAAC;SAC7B,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,IAA4B,EAAE,EAAE;QAC7C,OAAO,CAAC,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,YAAY,CAAC;SACzB,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,CAAC,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;SACtC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;SACzB,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC;SAC9B,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC;SAClC,MAAM,CACL,KAAK,EAAE,GAAuB,EAAE,KAAyB,EAAE,IAAyC,EAAE,EAAE;QACtG,OAAO,CAAC,QAAQ,GAAG,MAAM,gBAAgB,CAAC;YACxC,GAAG;YACH,KAAK;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEJ,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAiB,OAAO,CAAC,IAAI;IACxD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsDrF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import { getConfigValue, listConfigKeys, loadConfig, saveConfig, setConfigValue, syncEnvFromConfig, } from '../services/config.js';
|
|
3
|
+
import { resolveProjectRoot, restartServer } from '../services/server.js';
|
|
4
|
+
import { isReactPressProject } from '../services/config.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
export async function runConfigCommand(options) {
|
|
7
|
+
const projectRoot = await resolveProjectRoot();
|
|
8
|
+
if (!(await isReactPressProject(projectRoot))) {
|
|
9
|
+
logger.error('当前目录不是 ReactPress 项目。');
|
|
10
|
+
return 1;
|
|
11
|
+
}
|
|
12
|
+
const config = await loadConfig(projectRoot);
|
|
13
|
+
if (options.list) {
|
|
14
|
+
logger.title('配置项');
|
|
15
|
+
for (const key of listConfigKeys(config)) {
|
|
16
|
+
logger.dim(`${key} = ${getConfigValue(config, key)}`);
|
|
17
|
+
}
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
if (!options.key) {
|
|
21
|
+
logger.error('请指定配置键,例如: reactpress-cli config server.port 3003');
|
|
22
|
+
logger.dim('使用 --list 查看所有配置项');
|
|
23
|
+
return 1;
|
|
24
|
+
}
|
|
25
|
+
if (options.value === undefined) {
|
|
26
|
+
try {
|
|
27
|
+
logger.info(`${options.key} = ${getConfigValue(config, options.key)}`);
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const updated = setConfigValue(config, options.key, options.value);
|
|
36
|
+
await saveConfig(projectRoot, updated);
|
|
37
|
+
await syncEnvFromConfig(projectRoot, updated);
|
|
38
|
+
logger.success(`已更新 ${options.key} = ${options.value}`);
|
|
39
|
+
if (options.apply) {
|
|
40
|
+
const spinner = ora({ text: '正在重启以使配置生效…', color: 'cyan' }).start();
|
|
41
|
+
const result = await restartServer(projectRoot);
|
|
42
|
+
if (result.ok) {
|
|
43
|
+
spinner.succeed('配置已应用');
|
|
44
|
+
logger.success(result.message ?? '完成');
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
spinner.fail('重启失败');
|
|
48
|
+
logger.warn(result.message ?? '请手动运行 reactpress-cli restart');
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
logger.dim('运行 reactpress-cli restart 或 config --apply 使配置生效');
|
|
52
|
+
return 0;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BjF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { initProject } from '../services/init.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
export async function runInitCommand(options) {
|
|
6
|
+
const targetDir = resolve(process.cwd(), options.directory ?? '.');
|
|
7
|
+
const spinner = ora({
|
|
8
|
+
text: '正在初始化 ReactPress 项目…',
|
|
9
|
+
color: 'cyan',
|
|
10
|
+
}).start();
|
|
11
|
+
try {
|
|
12
|
+
const result = await initProject({
|
|
13
|
+
directory: targetDir,
|
|
14
|
+
force: options.force,
|
|
15
|
+
});
|
|
16
|
+
if (result.ok) {
|
|
17
|
+
spinner.succeed('初始化完成');
|
|
18
|
+
logger.success(result.message ?? '完成');
|
|
19
|
+
logger.dim(`项目目录: ${result.projectRoot}`);
|
|
20
|
+
logger.dim('下一步: reactpress-cli start');
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
spinner.fail('初始化失败');
|
|
24
|
+
logger.error(result.message ?? '未知错误');
|
|
25
|
+
return 1;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
spinner.fail('初始化失败');
|
|
29
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
30
|
+
return 1;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAO5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;IAEnE,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACxC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAKA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAyBzD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import { resolveProjectRoot, restartServer } from '../services/server.js';
|
|
3
|
+
import { isReactPressProject } from '../services/config.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
export async function runRestartCommand() {
|
|
6
|
+
const projectRoot = await resolveProjectRoot();
|
|
7
|
+
if (!(await isReactPressProject(projectRoot))) {
|
|
8
|
+
logger.error('当前目录不是 ReactPress 项目。');
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
11
|
+
const spinner = ora({ text: '正在重启服务…', color: 'cyan' }).start();
|
|
12
|
+
try {
|
|
13
|
+
const result = await restartServer(projectRoot);
|
|
14
|
+
if (result.ok) {
|
|
15
|
+
spinner.succeed('重启完成');
|
|
16
|
+
logger.success(result.message ?? '完成');
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
spinner.fail('重启失败');
|
|
20
|
+
logger.error(result.message ?? '未知错误');
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
spinner.fail('重启失败');
|
|
25
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
26
|
+
return 1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=restart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE/C,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAEhE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAKA,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CA0BvD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import { resolveProjectRoot, startServer } from '../services/server.js';
|
|
3
|
+
import { isReactPressProject } from '../services/config.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
export async function runStartCommand() {
|
|
6
|
+
const projectRoot = await resolveProjectRoot();
|
|
7
|
+
if (!(await isReactPressProject(projectRoot))) {
|
|
8
|
+
logger.error('当前目录不是 ReactPress 项目。请先运行 reactpress-cli init。');
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
11
|
+
const spinner = ora({ text: '正在准备数据库与服务…', color: 'cyan' }).start();
|
|
12
|
+
try {
|
|
13
|
+
const result = await startServer(projectRoot);
|
|
14
|
+
if (result.ok) {
|
|
15
|
+
spinner.succeed('服务已启动');
|
|
16
|
+
logger.success(result.message ?? '完成');
|
|
17
|
+
if (result.pid)
|
|
18
|
+
logger.dim(`PID: ${result.pid}`);
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
spinner.fail('启动失败');
|
|
22
|
+
logger.error(result.message ?? '未知错误');
|
|
23
|
+
return 1;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
spinner.fail('启动失败');
|
|
27
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
28
|
+
return 1;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE/C,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC/D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAKA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAyBxD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { resolveProjectRoot, getServerStatus } from '../services/server.js';
|
|
2
|
+
import { isReactPressProject } from '../services/config.js';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
export async function runStatusCommand() {
|
|
6
|
+
const projectRoot = await resolveProjectRoot();
|
|
7
|
+
if (!(await isReactPressProject(projectRoot))) {
|
|
8
|
+
logger.error('当前目录不是 ReactPress 项目。');
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
11
|
+
const status = await getServerStatus(projectRoot);
|
|
12
|
+
logger.title('服务状态');
|
|
13
|
+
logger.dim(`项目: ${projectRoot}`);
|
|
14
|
+
logger.dim(`服务: ${status.running ? chalk.green('运行中') : chalk.gray('已停止')}${status.pid ? ` (PID ${status.pid})` : ''}`);
|
|
15
|
+
if (status.url)
|
|
16
|
+
logger.dim(`地址: ${status.url}`);
|
|
17
|
+
logger.dim(`数据库: ${status.databaseReady ? chalk.green('就绪') : chalk.yellow('未就绪')} (${status.databaseMode})`);
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE/C,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IAElD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,CAAC,OAAO,WAAW,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,CACR,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EACxC,EAAE,CACH,CAAC;IACF,IAAI,MAAM,CAAC,GAAG;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,CACR,QACE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAC/D,KAAK,MAAM,CAAC,YAAY,GAAG,CAC5B,CAAC;IAEF,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBjF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import { resolveProjectRoot, stopServer } from '../services/server.js';
|
|
3
|
+
import { isReactPressProject } from '../services/config.js';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
export async function runStopCommand(options) {
|
|
6
|
+
const projectRoot = await resolveProjectRoot();
|
|
7
|
+
if (!(await isReactPressProject(projectRoot))) {
|
|
8
|
+
logger.error('当前目录不是 ReactPress 项目。');
|
|
9
|
+
return 1;
|
|
10
|
+
}
|
|
11
|
+
const spinner = ora({ text: '正在停止服务…', color: 'cyan' }).start();
|
|
12
|
+
try {
|
|
13
|
+
const result = await stopServer(projectRoot, { stopDatabase: options.database });
|
|
14
|
+
if (result.ok) {
|
|
15
|
+
spinner.succeed('已停止');
|
|
16
|
+
logger.success(result.message ?? '完成');
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
spinner.fail('停止失败');
|
|
20
|
+
logger.error(result.message ?? '未知错误');
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
spinner.fail('停止失败');
|
|
25
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
26
|
+
return 1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAM5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE/C,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAEhE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACvB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EnvMap, ReactPressConfig } from '../types/config.js';
|
|
2
|
+
export declare function loadConfig(projectRoot: string): Promise<ReactPressConfig>;
|
|
3
|
+
export declare function saveConfig(projectRoot: string, config: ReactPressConfig): Promise<void>;
|
|
4
|
+
export declare function loadEnvFile(envPath: string): Promise<EnvMap>;
|
|
5
|
+
export declare function writeEnvFile(envPath: string, map: EnvMap): Promise<void>;
|
|
6
|
+
export declare function syncEnvFromConfig(projectRoot: string, config: ReactPressConfig): Promise<void>;
|
|
7
|
+
export declare function setConfigValue(config: ReactPressConfig, keyPath: string, value: string): ReactPressConfig;
|
|
8
|
+
export declare function getConfigValue(config: ReactPressConfig, keyPath: string): string;
|
|
9
|
+
export declare function listConfigKeys(obj: Record<string, unknown>, prefix?: string): string[];
|
|
10
|
+
export declare function isReactPressProject(projectRoot: string): Promise<boolean>;
|
|
11
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGnE,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAM/E;AAED,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWlE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9E;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,gBAAgB,CAkBlB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAahF;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,SAAK,GACV,MAAM,EAAE,CAWV;AAED,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG/E"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { getProjectPaths } from '../utils/paths.js';
|
|
3
|
+
export async function loadConfig(projectRoot) {
|
|
4
|
+
const { configPath } = getProjectPaths(projectRoot);
|
|
5
|
+
if (!(await fs.pathExists(configPath))) {
|
|
6
|
+
throw new Error('未找到 ReactPress 项目。请先运行 reactpress-cli init 初始化。');
|
|
7
|
+
}
|
|
8
|
+
return fs.readJson(configPath);
|
|
9
|
+
}
|
|
10
|
+
export async function saveConfig(projectRoot, config) {
|
|
11
|
+
const { configPath, reactpressDir } = getProjectPaths(projectRoot);
|
|
12
|
+
await fs.ensureDir(reactpressDir);
|
|
13
|
+
await fs.writeJson(configPath, config, { spaces: 2 });
|
|
14
|
+
}
|
|
15
|
+
export async function loadEnvFile(envPath) {
|
|
16
|
+
const content = await fs.readFile(envPath, 'utf8');
|
|
17
|
+
const map = {};
|
|
18
|
+
for (const line of content.split('\n')) {
|
|
19
|
+
const trimmed = line.trim();
|
|
20
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
21
|
+
continue;
|
|
22
|
+
const eq = trimmed.indexOf('=');
|
|
23
|
+
if (eq === -1)
|
|
24
|
+
continue;
|
|
25
|
+
map[trimmed.slice(0, eq)] = trimmed.slice(eq + 1);
|
|
26
|
+
}
|
|
27
|
+
return map;
|
|
28
|
+
}
|
|
29
|
+
export async function writeEnvFile(envPath, map) {
|
|
30
|
+
const lines = [
|
|
31
|
+
'# ReactPress — managed by reactpress-cli',
|
|
32
|
+
...Object.entries(map).map(([k, v]) => `${k}=${v}`),
|
|
33
|
+
'',
|
|
34
|
+
];
|
|
35
|
+
await fs.writeFile(envPath, lines.join('\n'), 'utf8');
|
|
36
|
+
}
|
|
37
|
+
export async function syncEnvFromConfig(projectRoot, config) {
|
|
38
|
+
const { envPath } = getProjectPaths(projectRoot);
|
|
39
|
+
const existing = (await fs.pathExists(envPath))
|
|
40
|
+
? await loadEnvFile(envPath)
|
|
41
|
+
: {};
|
|
42
|
+
const merged = {
|
|
43
|
+
...existing,
|
|
44
|
+
DB_HOST: config.database.host ?? existing.DB_HOST ?? '127.0.0.1',
|
|
45
|
+
DB_PORT: String(config.database.port ?? existing.DB_PORT ?? 3306),
|
|
46
|
+
DB_USER: config.database.user ?? existing.DB_USER ?? 'reactpress',
|
|
47
|
+
DB_PASSWD: config.database.password ?? existing.DB_PASSWD ?? 'reactpress',
|
|
48
|
+
DB_DATABASE: config.database.database ?? existing.DB_DATABASE ?? 'reactpress',
|
|
49
|
+
SERVER_PORT: String(config.server.port),
|
|
50
|
+
CLIENT_SITE_URL: config.server.clientUrl,
|
|
51
|
+
SERVER_SITE_URL: config.server.serverUrl,
|
|
52
|
+
};
|
|
53
|
+
await writeEnvFile(envPath, merged);
|
|
54
|
+
}
|
|
55
|
+
export function setConfigValue(config, keyPath, value) {
|
|
56
|
+
const parts = keyPath.split('.');
|
|
57
|
+
const clone = structuredClone(config);
|
|
58
|
+
let cursor = clone;
|
|
59
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
60
|
+
const part = parts[i];
|
|
61
|
+
if (typeof cursor[part] !== 'object' || cursor[part] === null) {
|
|
62
|
+
cursor[part] = {};
|
|
63
|
+
}
|
|
64
|
+
cursor = cursor[part];
|
|
65
|
+
}
|
|
66
|
+
const last = parts[parts.length - 1];
|
|
67
|
+
const numericKeys = new Set(['port', 'version']);
|
|
68
|
+
cursor[last] = numericKeys.has(last) ? Number(value) : value;
|
|
69
|
+
return clone;
|
|
70
|
+
}
|
|
71
|
+
export function getConfigValue(config, keyPath) {
|
|
72
|
+
const parts = keyPath.split('.');
|
|
73
|
+
let cursor = config;
|
|
74
|
+
for (const part of parts) {
|
|
75
|
+
if (typeof cursor !== 'object' || cursor === null) {
|
|
76
|
+
throw new Error(`配置项不存在: ${keyPath}`);
|
|
77
|
+
}
|
|
78
|
+
cursor = cursor[part];
|
|
79
|
+
}
|
|
80
|
+
if (cursor === undefined) {
|
|
81
|
+
throw new Error(`配置项不存在: ${keyPath}`);
|
|
82
|
+
}
|
|
83
|
+
return String(cursor);
|
|
84
|
+
}
|
|
85
|
+
export function listConfigKeys(obj, prefix = '') {
|
|
86
|
+
const keys = [];
|
|
87
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
88
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
89
|
+
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
90
|
+
keys.push(...listConfigKeys(value, path));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
keys.push(path);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return keys;
|
|
97
|
+
}
|
|
98
|
+
export async function isReactPressProject(projectRoot) {
|
|
99
|
+
const { configPath } = getProjectPaths(projectRoot);
|
|
100
|
+
return fs.pathExists(configPath);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ReactPressConfig } from '../types/config.js';
|
|
2
|
+
declare const DEFAULT_CREDS: {
|
|
3
|
+
host: string;
|
|
4
|
+
port: number;
|
|
5
|
+
user: string;
|
|
6
|
+
password: string;
|
|
7
|
+
database: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function getDatabaseCredentials(projectRoot: string): Promise<typeof DEFAULT_CREDS>;
|
|
10
|
+
export type DatabaseCredentials = {
|
|
11
|
+
host: string;
|
|
12
|
+
port: number;
|
|
13
|
+
user: string;
|
|
14
|
+
password: string;
|
|
15
|
+
database: string;
|
|
16
|
+
};
|
|
17
|
+
export type ConnectionTester = (creds: DatabaseCredentials) => Promise<boolean>;
|
|
18
|
+
/** @internal test hook */
|
|
19
|
+
export declare function setConnectionTesterForTests(tester: ConnectionTester | null): void;
|
|
20
|
+
export declare function testDatabaseConnection(creds: DatabaseCredentials): Promise<boolean>;
|
|
21
|
+
export declare function waitForDatabase(creds: typeof DEFAULT_CREDS, maxAttempts?: number, intervalMs?: number): Promise<boolean>;
|
|
22
|
+
/** 解析 `docker port <name> 3306/tcp` 输出的宿主机端口 */
|
|
23
|
+
export declare function parseDockerPublishedPort(output: string): number | null;
|
|
24
|
+
/** 若嵌入式库容器已在运行,返回其映射的宿主机端口 */
|
|
25
|
+
export declare function getContainerPublishedHostPort(containerName: string, containerPort?: number): Promise<number | null>;
|
|
26
|
+
/** 为嵌入式 Docker MySQL 选择未被占用的宿主机端口,并写回 config / .env */
|
|
27
|
+
export declare function ensureDatabaseHostPort(projectRoot: string, forcePort?: number, configOverride?: ReactPressConfig): Promise<{
|
|
28
|
+
port: number;
|
|
29
|
+
changed: boolean;
|
|
30
|
+
previousPort: number;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function startEmbeddedDatabase(projectRoot: string, config: ReactPressConfig): Promise<{
|
|
33
|
+
ok: boolean;
|
|
34
|
+
message?: string;
|
|
35
|
+
}>;
|
|
36
|
+
export declare function stopEmbeddedDatabase(projectRoot: string, config: ReactPressConfig): Promise<void>;
|
|
37
|
+
export declare function ensureDatabase(projectRoot: string, config: ReactPressConfig): Promise<{
|
|
38
|
+
ok: boolean;
|
|
39
|
+
message?: string;
|
|
40
|
+
}>;
|
|
41
|
+
export declare function isDatabaseReady(projectRoot: string): Promise<boolean>;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=database.d.ts.map
|