@fecommunity/reactpress-server 4.0.0 → 4.0.1
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/README.md +325 -56
- package/bin/reactpress-server.js +6 -50
- package/dist/app.module.js +30 -18
- package/dist/app.module.js.map +1 -1
- package/dist/filters/http-exception.filter.js +1 -1
- package/dist/filters/http-exception.filter.js.map +1 -1
- package/dist/generate-swagger.d.ts +1 -1
- package/dist/generate-swagger.js +11 -12
- package/dist/generate-swagger.js.map +1 -1
- package/dist/interceptors/transform.interceptor.d.ts +6 -2
- package/dist/interceptors/transform.interceptor.js +5 -10
- package/dist/interceptors/transform.interceptor.js.map +1 -1
- package/dist/logger/index.js +4 -5
- package/dist/logger/index.js.map +1 -1
- package/dist/main.d.ts +1 -3
- package/dist/main.js +23 -47
- package/dist/main.js.map +1 -1
- package/dist/modules/article/article.controller.d.ts +2 -7
- package/dist/modules/article/article.controller.js +48 -103
- package/dist/modules/article/article.controller.js.map +1 -1
- package/dist/modules/article/article.entity.d.ts +0 -4
- package/dist/modules/article/article.entity.js +41 -61
- package/dist/modules/article/article.entity.js.map +1 -1
- package/dist/modules/article/article.module.js +3 -18
- package/dist/modules/article/article.module.js.map +1 -1
- package/dist/modules/article/article.service.d.ts +2 -16
- package/dist/modules/article/article.service.js +29 -151
- package/dist/modules/article/article.service.js.map +1 -1
- package/dist/modules/auth/auth.controller.js +11 -11
- package/dist/modules/auth/auth.controller.js.map +1 -1
- package/dist/modules/auth/auth.module.js +4 -4
- package/dist/modules/auth/auth.module.js.map +1 -1
- package/dist/modules/auth/auth.service.js +7 -8
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/jwt-auth.guard.js +3 -4
- package/dist/modules/auth/jwt-auth.guard.js.map +1 -1
- package/dist/modules/auth/jwt.strategy.js +3 -4
- package/dist/modules/auth/jwt.strategy.js.map +1 -1
- package/dist/modules/auth/roles.guard.js +2 -2
- package/dist/modules/auth/roles.guard.js.map +1 -1
- package/dist/modules/category/category.controller.js +20 -21
- package/dist/modules/category/category.controller.js.map +1 -1
- package/dist/modules/category/category.entity.js +13 -13
- package/dist/modules/category/category.entity.js.map +1 -1
- package/dist/modules/category/category.module.js +1 -1
- package/dist/modules/category/category.module.js.map +1 -1
- package/dist/modules/category/category.service.js +4 -5
- package/dist/modules/category/category.service.js.map +1 -1
- package/dist/modules/comment/comment.controller.js +20 -24
- package/dist/modules/comment/comment.controller.js.map +1 -1
- package/dist/modules/comment/comment.entity.js +31 -31
- package/dist/modules/comment/comment.entity.js.map +1 -1
- package/dist/modules/comment/comment.module.js +2 -11
- package/dist/modules/comment/comment.module.js.map +1 -1
- package/dist/modules/comment/comment.service.d.ts +1 -5
- package/dist/modules/comment/comment.service.js +16 -43
- package/dist/modules/comment/comment.service.js.map +1 -1
- package/dist/modules/comment/html.d.ts +1 -1
- package/dist/modules/comment/html.js +3 -3
- package/dist/modules/comment/html.js.map +1 -1
- package/dist/modules/file/file.controller.d.ts +1 -1
- package/dist/modules/file/file.controller.js +20 -22
- package/dist/modules/file/file.controller.js.map +1 -1
- package/dist/modules/file/file.entity.d.ts +0 -7
- package/dist/modules/file/file.entity.js +15 -20
- package/dist/modules/file/file.entity.js.map +1 -1
- package/dist/modules/file/file.module.js +4 -16
- package/dist/modules/file/file.module.js.map +1 -1
- package/dist/modules/file/file.service.d.ts +1 -6
- package/dist/modules/file/file.service.js +38 -88
- package/dist/modules/file/file.service.js.map +1 -1
- package/dist/modules/install/install.controller.js +5 -5
- package/dist/modules/install/install.controller.js.map +1 -1
- package/dist/modules/install/install.module.js +1 -1
- package/dist/modules/install/install.module.js.map +1 -1
- package/dist/modules/install/install.service.js +2 -2
- package/dist/modules/install/install.service.js.map +1 -1
- package/dist/modules/knowledge/knowledge.controller.js +33 -35
- package/dist/modules/knowledge/knowledge.controller.js.map +1 -1
- package/dist/modules/knowledge/knowledge.entity.js +33 -33
- package/dist/modules/knowledge/knowledge.entity.js.map +1 -1
- package/dist/modules/knowledge/knowledge.module.js +1 -1
- package/dist/modules/knowledge/knowledge.module.js.map +1 -1
- package/dist/modules/knowledge/knowledge.service.js +11 -12
- package/dist/modules/knowledge/knowledge.service.js.map +1 -1
- package/dist/modules/page/page.controller.js +23 -24
- package/dist/modules/page/page.controller.js.map +1 -1
- package/dist/modules/page/page.entity.js +27 -27
- package/dist/modules/page/page.entity.js.map +1 -1
- package/dist/modules/page/page.module.js +1 -1
- package/dist/modules/page/page.module.js.map +1 -1
- package/dist/modules/page/page.service.js +12 -12
- package/dist/modules/page/page.service.js.map +1 -1
- package/dist/modules/search/search.controller.js +12 -12
- package/dist/modules/search/search.controller.js.map +1 -1
- package/dist/modules/search/search.entity.js +13 -13
- package/dist/modules/search/search.entity.js.map +1 -1
- package/dist/modules/search/search.module.js +1 -1
- package/dist/modules/search/search.module.js.map +1 -1
- package/dist/modules/search/search.service.js +2 -2
- package/dist/modules/search/search.service.js.map +1 -1
- package/dist/modules/setting/setting.constant.d.ts +4 -5
- package/dist/modules/setting/setting.constant.js +20 -5
- package/dist/modules/setting/setting.constant.js.map +1 -1
- package/dist/modules/setting/setting.controller.js +11 -11
- package/dist/modules/setting/setting.controller.js.map +1 -1
- package/dist/modules/setting/setting.entity.d.ts +0 -3
- package/dist/modules/setting/setting.entity.js +49 -64
- package/dist/modules/setting/setting.entity.js.map +1 -1
- package/dist/modules/setting/setting.module.js +2 -2
- package/dist/modules/setting/setting.module.js.map +1 -1
- package/dist/modules/setting/setting.service.d.ts +2 -13
- package/dist/modules/setting/setting.service.js +24 -169
- package/dist/modules/setting/setting.service.js.map +1 -1
- package/dist/modules/smtp/mail.util.d.ts +6 -7
- package/dist/modules/smtp/mail.util.js +9 -5
- package/dist/modules/smtp/mail.util.js.map +1 -1
- package/dist/modules/smtp/smtp.controller.d.ts +0 -3
- package/dist/modules/smtp/smtp.controller.js +14 -27
- package/dist/modules/smtp/smtp.controller.js.map +1 -1
- package/dist/modules/smtp/smtp.entity.js +15 -15
- package/dist/modules/smtp/smtp.entity.js.map +1 -1
- package/dist/modules/smtp/smtp.module.js +2 -2
- package/dist/modules/smtp/smtp.module.js.map +1 -1
- package/dist/modules/smtp/smtp.service.d.ts +0 -14
- package/dist/modules/smtp/smtp.service.js +12 -40
- package/dist/modules/smtp/smtp.service.js.map +1 -1
- package/dist/modules/tag/tag.controller.js +22 -24
- package/dist/modules/tag/tag.controller.js.map +1 -1
- package/dist/modules/tag/tag.entity.js +12 -12
- package/dist/modules/tag/tag.entity.js.map +1 -1
- package/dist/modules/tag/tag.module.js +1 -1
- package/dist/modules/tag/tag.module.js.map +1 -1
- package/dist/modules/tag/tag.service.js +4 -5
- package/dist/modules/tag/tag.service.js.map +1 -1
- package/dist/modules/user/user.controller.js +28 -39
- package/dist/modules/user/user.controller.js.map +1 -1
- package/dist/modules/user/user.entity.js +22 -22
- package/dist/modules/user/user.entity.js.map +1 -1
- package/dist/modules/user/user.module.js +2 -2
- package/dist/modules/user/user.module.js.map +1 -1
- package/dist/modules/user/user.service.js +14 -18
- package/dist/modules/user/user.service.js.map +1 -1
- package/dist/modules/view/view.controller.js +19 -20
- package/dist/modules/view/view.controller.js.map +1 -1
- package/dist/modules/view/view.entity.js +24 -24
- package/dist/modules/view/view.entity.js.map +1 -1
- package/dist/modules/view/view.module.js +1 -1
- package/dist/modules/view/view.module.js.map +1 -1
- package/dist/modules/view/view.service.js +4 -4
- package/dist/modules/view/view.service.js.map +1 -1
- package/dist/public/favicon.png +0 -0
- package/dist/starter.d.ts +1 -3
- package/dist/starter.js +14 -202
- package/dist/starter.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +15957 -1
- package/dist/utils/date.util.js +1 -1
- package/dist/utils/date.util.js.map +1 -1
- package/dist/utils/markdown.util.js +1 -1
- package/dist/utils/markdown.util.js.map +1 -1
- package/dist/utils/oss/aliyun-oss-client.d.ts +1 -3
- package/dist/utils/oss/aliyun-oss-client.js +0 -5
- package/dist/utils/oss/aliyun-oss-client.js.map +1 -1
- package/dist/utils/oss/oss-client.d.ts +1 -3
- package/dist/utils/oss/oss-client.js.map +1 -1
- package/dist/utils/oss.util.d.ts +1 -3
- package/dist/utils/oss.util.js +1 -6
- package/dist/utils/oss.util.js.map +1 -1
- package/dist/utils/uniqueid.util.js +1 -1
- package/dist/utils/uniqueid.util.js.map +1 -1
- package/dist/utils/upload.util.d.ts +2 -6
- package/dist/utils/upload.util.js +8 -23
- package/dist/utils/upload.util.js.map +1 -1
- package/dist/utils/user.util.d.ts +0 -1
- package/dist/utils/user.util.js +2 -6
- package/dist/utils/user.util.js.map +1 -1
- package/package.json +32 -36
- package/public/favicon.png +0 -0
- package/dist/common/api-messages.d.ts +0 -41
- package/dist/common/api-messages.js +0 -45
- package/dist/common/api-messages.js.map +0 -1
- package/dist/database/typeorm-options.d.ts +0 -3
- package/dist/database/typeorm-options.js +0 -71
- package/dist/database/typeorm-options.js.map +0 -1
- package/dist/modules/api-key/api-key.controller.d.ts +0 -14
- package/dist/modules/api-key/api-key.controller.js +0 -63
- package/dist/modules/api-key/api-key.controller.js.map +0 -1
- package/dist/modules/api-key/api-key.entity.d.ts +0 -11
- package/dist/modules/api-key/api-key.entity.js +0 -63
- package/dist/modules/api-key/api-key.entity.js.map +0 -1
- package/dist/modules/api-key/api-key.guard.d.ts +0 -7
- package/dist/modules/api-key/api-key.guard.js +0 -39
- package/dist/modules/api-key/api-key.guard.js.map +0 -1
- package/dist/modules/api-key/api-key.module.d.ts +0 -2
- package/dist/modules/api-key/api-key.module.js +0 -28
- package/dist/modules/api-key/api-key.module.js.map +0 -1
- package/dist/modules/api-key/api-key.service.d.ts +0 -15
- package/dist/modules/api-key/api-key.service.js +0 -81
- package/dist/modules/api-key/api-key.service.js.map +0 -1
- package/dist/modules/article/article-revision.entity.d.ts +0 -11
- package/dist/modules/article/article-revision.entity.js +0 -53
- package/dist/modules/article/article-revision.entity.js.map +0 -1
- package/dist/modules/article/article-slug.util.d.ts +0 -2
- package/dist/modules/article/article-slug.util.js +0 -19
- package/dist/modules/article/article-slug.util.js.map +0 -1
- package/dist/modules/article/scheduled-publish.service.d.ts +0 -13
- package/dist/modules/article/scheduled-publish.service.js +0 -65
- package/dist/modules/article/scheduled-publish.service.js.map +0 -1
- package/dist/modules/bootstrap/bootstrap.constants.d.ts +0 -20
- package/dist/modules/bootstrap/bootstrap.constants.js +0 -171
- package/dist/modules/bootstrap/bootstrap.constants.js.map +0 -1
- package/dist/modules/bootstrap/bootstrap.service.d.ts +0 -22
- package/dist/modules/bootstrap/bootstrap.service.js +0 -183
- package/dist/modules/bootstrap/bootstrap.service.js.map +0 -1
- package/dist/modules/bootstrap/install-locale.d.ts +0 -2
- package/dist/modules/bootstrap/install-locale.js +0 -11
- package/dist/modules/bootstrap/install-locale.js.map +0 -1
- package/dist/modules/extension/extension.module.d.ts +0 -9
- package/dist/modules/extension/extension.module.js +0 -52
- package/dist/modules/extension/extension.module.js.map +0 -1
- package/dist/modules/extension/plugin-loader.service.d.ts +0 -12
- package/dist/modules/extension/plugin-loader.service.js +0 -96
- package/dist/modules/extension/plugin-loader.service.js.map +0 -1
- package/dist/modules/extension/plugin-registry.bridge.d.ts +0 -3
- package/dist/modules/extension/plugin-registry.bridge.js +0 -44
- package/dist/modules/extension/plugin-registry.bridge.js.map +0 -1
- package/dist/modules/extension/plugin.controller.d.ts +0 -22
- package/dist/modules/extension/plugin.controller.js +0 -155
- package/dist/modules/extension/plugin.controller.js.map +0 -1
- package/dist/modules/extension/plugin.service.d.ts +0 -54
- package/dist/modules/extension/plugin.service.js +0 -414
- package/dist/modules/extension/plugin.service.js.map +0 -1
- package/dist/modules/extension/preview-draft.store.d.ts +0 -13
- package/dist/modules/extension/preview-draft.store.js +0 -41
- package/dist/modules/extension/preview-draft.store.js.map +0 -1
- package/dist/modules/extension/theme-registry.bridge.d.ts +0 -56
- package/dist/modules/extension/theme-registry.bridge.js +0 -68
- package/dist/modules/extension/theme-registry.bridge.js.map +0 -1
- package/dist/modules/extension/theme.controller.d.ts +0 -66
- package/dist/modules/extension/theme.controller.js +0 -301
- package/dist/modules/extension/theme.controller.js.map +0 -1
- package/dist/modules/extension/theme.service.d.ts +0 -140
- package/dist/modules/extension/theme.service.js +0 -1039
- package/dist/modules/extension/theme.service.js.map +0 -1
- package/dist/modules/file/content-image-scan.util.d.ts +0 -52
- package/dist/modules/file/content-image-scan.util.js +0 -222
- package/dist/modules/file/content-image-scan.util.js.map +0 -1
- package/dist/modules/file/file-optimization.controller.d.ts +0 -12
- package/dist/modules/file/file-optimization.controller.js +0 -79
- package/dist/modules/file/file-optimization.controller.js.map +0 -1
- package/dist/modules/file/file-optimization.service.d.ts +0 -36
- package/dist/modules/file/file-optimization.service.js +0 -387
- package/dist/modules/file/file-optimization.service.js.map +0 -1
- package/dist/modules/file/file-optimization.types.d.ts +0 -66
- package/dist/modules/file/file-optimization.types.js +0 -5
- package/dist/modules/file/file-optimization.types.js.map +0 -1
- package/dist/modules/file/image-optimizer-plugin.guard.d.ts +0 -7
- package/dist/modules/file/image-optimizer-plugin.guard.js +0 -33
- package/dist/modules/file/image-optimizer-plugin.guard.js.map +0 -1
- package/dist/modules/health/health.controller.d.ts +0 -11
- package/dist/modules/health/health.controller.js +0 -55
- package/dist/modules/health/health.controller.js.map +0 -1
- package/dist/modules/health/health.module.d.ts +0 -2
- package/dist/modules/health/health.module.js +0 -20
- package/dist/modules/health/health.module.js.map +0 -1
- package/dist/modules/hook/hook.module.d.ts +0 -2
- package/dist/modules/hook/hook.module.js +0 -22
- package/dist/modules/hook/hook.module.js.map +0 -1
- package/dist/modules/hook/hook.service.d.ts +0 -26
- package/dist/modules/hook/hook.service.js +0 -105
- package/dist/modules/hook/hook.service.js.map +0 -1
- package/dist/modules/webhook/webhook.controller.d.ts +0 -12
- package/dist/modules/webhook/webhook.controller.js +0 -63
- package/dist/modules/webhook/webhook.controller.js.map +0 -1
- package/dist/modules/webhook/webhook.entity.d.ts +0 -9
- package/dist/modules/webhook/webhook.entity.js +0 -54
- package/dist/modules/webhook/webhook.entity.js.map +0 -1
- package/dist/modules/webhook/webhook.module.d.ts +0 -2
- package/dist/modules/webhook/webhook.module.js +0 -27
- package/dist/modules/webhook/webhook.module.js.map +0 -1
- package/dist/modules/webhook/webhook.service.d.ts +0 -16
- package/dist/modules/webhook/webhook.service.js +0 -100
- package/dist/modules/webhook/webhook.service.js.map +0 -1
- package/dist/node-polyfills.d.ts +0 -18
- package/dist/node-polyfills.js +0 -24
- package/dist/node-polyfills.js.map +0 -1
- package/dist/public/apple-touch-icon.png +0 -0
- package/dist/public/favicon-16.png +0 -0
- package/dist/public/favicon-32.png +0 -0
- package/dist/public/favicon-48.png +0 -0
- package/dist/public/favicon.ico +0 -0
- package/dist/public/icon-192.png +0 -0
- package/dist/public/icon-512.png +0 -0
- package/dist/public/logo-200.png +0 -0
- package/dist/public/logo-400.png +0 -0
- package/dist/public/logo.png +0 -0
- package/dist/public/logo.svg +0 -7
- package/dist/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
- package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
- package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
- package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
- package/dist/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utils/html-sanitize.util.d.ts +0 -1
- package/dist/utils/html-sanitize.util.js +0 -33
- package/dist/utils/html-sanitize.util.js.map +0 -1
- package/dist/utils/image-processor.util.d.ts +0 -23
- package/dist/utils/image-processor.util.js +0 -88
- package/dist/utils/image-processor.util.js.map +0 -1
- package/dist/utils/local-api-quiet.util.d.ts +0 -1
- package/dist/utils/local-api-quiet.util.js +0 -8
- package/dist/utils/local-api-quiet.util.js.map +0 -1
- package/dist/utils/project-root.util.d.ts +0 -2
- package/dist/utils/project-root.util.js +0 -42
- package/dist/utils/project-root.util.js.map +0 -1
- package/dist/utils/query-whitelist.util.d.ts +0 -1
- package/dist/utils/query-whitelist.util.js +0 -100
- package/dist/utils/query-whitelist.util.js.map +0 -1
- package/dist/utils/theme-placeholder-cover.d.ts +0 -7
- package/dist/utils/theme-placeholder-cover.js +0 -94
- package/dist/utils/theme-placeholder-cover.js.map +0 -1
- package/dist/utils/upload-url.util.d.ts +0 -4
- package/dist/utils/upload-url.util.js +0 -34
- package/dist/utils/upload-url.util.js.map +0 -1
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon-16.png +0 -0
- package/public/favicon-32.png +0 -0
- package/public/favicon-48.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/icon-192.png +0 -0
- package/public/icon-512.png +0 -0
- package/public/logo-200.png +0 -0
- package/public/logo-400.png +0 -0
- package/public/logo.png +0 -0
- package/public/logo.svg +0 -7
- package/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
- package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
- package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
- package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
- package/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getSystemSettingSeedDefaults = exports.getHelloWorldSeed = exports.HELLO_WORLD_LEGACY_TITLES = exports.HELLO_WORLD_SEED_MARKER = void 0;
|
|
4
|
-
exports.HELLO_WORLD_SEED_MARKER = 'reactpress-seed:v4';
|
|
5
|
-
exports.HELLO_WORLD_LEGACY_TITLES = ['Hello World', '世界,您好!'];
|
|
6
|
-
const SHARED_QUICK_START = `\`\`\`bash
|
|
7
|
-
npm i -g @fecommunity/reactpress@3
|
|
8
|
-
mkdir my-blog && cd my-blog
|
|
9
|
-
reactpress init
|
|
10
|
-
reactpress dev
|
|
11
|
-
\`\`\``;
|
|
12
|
-
const SEED_BY_LOCALE = {
|
|
13
|
-
zh: {
|
|
14
|
-
systemTitle: 'ReactPress',
|
|
15
|
-
systemSubTitle: '又一个 ReactPress 站点',
|
|
16
|
-
seoKeyword: 'React,博客,CMS,ReactPress',
|
|
17
|
-
seoDesc: '又一个 ReactPress 站点。',
|
|
18
|
-
articleTitle: '世界,您好!',
|
|
19
|
-
category: { label: '未分类', value: 'uncategorized' },
|
|
20
|
-
tags: [
|
|
21
|
-
{ label: 'ReactPress', value: 'reactpress' },
|
|
22
|
-
{ label: '入门', value: 'getting-started' },
|
|
23
|
-
{ label: 'CMS', value: 'cms' },
|
|
24
|
-
],
|
|
25
|
-
markdown: `# 世界,您好!
|
|
26
|
-
|
|
27
|
-
欢迎光临 ReactPress。这是您的第一篇示例文章,同时演示 Markdown 常用写法。编辑或删掉它,然后开始写作吧!
|
|
28
|
-
|
|
29
|
-
这是一个普通段落。段落之间用**空行**分隔,行内可以写 **粗体**、*斜体*、~~删除线~~ 和 \`行内代码\`。
|
|
30
|
-
|
|
31
|
-
## 什么是 ReactPress?
|
|
32
|
-
|
|
33
|
-
**ReactPress 3.0** 是基于 React、Next.js 与 NestJS 的现代化全栈发布平台。安装 CLI 后执行 \`init\` 与 \`dev\`,即可获得前台站点、管理后台与 API,无需手写复杂配置或手动接数据库。
|
|
34
|
-
|
|
35
|
-
> **一个内容中心,多种呈现方式。** 在同一后台发布内容,通过 Web、管理端或 Headless API 展示。
|
|
36
|
-
|
|
37
|
-
### 列表示例
|
|
38
|
-
|
|
39
|
-
无序列表:
|
|
40
|
-
|
|
41
|
-
- 编辑或删除本篇示例文章
|
|
42
|
-
- 在「外观」中切换主题
|
|
43
|
-
- 在「设置」中配置站点信息
|
|
44
|
-
|
|
45
|
-
有序列表:
|
|
46
|
-
|
|
47
|
-
1. 安装 CLI 并初始化项目
|
|
48
|
-
2. 运行 \`reactpress dev\` 启动开发环境
|
|
49
|
-
3. 运行 \`reactpress doctor\` 做环境诊断
|
|
50
|
-
|
|
51
|
-
#### 图片与链接
|
|
52
|
-
|
|
53
|
-
站点 Logo 示例(可将 \`/logo.png\` 换成媒体库中的地址):
|
|
54
|
-
|
|
55
|
-

|
|
56
|
-
|
|
57
|
-
项目链接:[ReactPress 项目主页](https://github.com/fecommunity/reactpress)
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## 快速开始
|
|
62
|
-
|
|
63
|
-
${SHARED_QUICK_START}
|
|
64
|
-
|
|
65
|
-
| 服务 | 说明 |
|
|
66
|
-
| :--- | :--- |
|
|
67
|
-
| 前台站点 | \`http://localhost:3001\` |
|
|
68
|
-
| 管理后台 | \`http://localhost:3001/admin\` |
|
|
69
|
-
| API | \`http://localhost:3002/api\` |
|
|
70
|
-
|
|
71
|
-
代码块示例:
|
|
72
|
-
|
|
73
|
-
\`\`\`js
|
|
74
|
-
console.log('Hello ReactPress');
|
|
75
|
-
\`\`\`
|
|
76
|
-
|
|
77
|
-
> 提示:使用后台编辑器工具栏可快速插入标题、图片、表格与代码块;右侧栏可设置分类、标签与发布选项。
|
|
78
|
-
|
|
79
|
-
祝您使用愉快!`,
|
|
80
|
-
},
|
|
81
|
-
en: {
|
|
82
|
-
systemTitle: 'ReactPress',
|
|
83
|
-
systemSubTitle: 'Just another ReactPress site',
|
|
84
|
-
seoKeyword: 'React,blog,CMS,ReactPress',
|
|
85
|
-
seoDesc: 'Just another ReactPress site.',
|
|
86
|
-
articleTitle: 'Hello World',
|
|
87
|
-
category: { label: 'Uncategorized', value: 'uncategorized' },
|
|
88
|
-
tags: [
|
|
89
|
-
{ label: 'ReactPress', value: 'reactpress' },
|
|
90
|
-
{ label: 'Getting Started', value: 'getting-started' },
|
|
91
|
-
{ label: 'CMS', value: 'cms' },
|
|
92
|
-
],
|
|
93
|
-
markdown: `# Hello World
|
|
94
|
-
|
|
95
|
-
Welcome to ReactPress. This is your first sample post and a quick tour of common Markdown syntax. Edit or delete it, then start writing!
|
|
96
|
-
|
|
97
|
-
This is a normal paragraph. Separate paragraphs with a **blank line**. Inline styles: **bold**, *italic*, ~~strikethrough~~, and \`inline code\`.
|
|
98
|
-
|
|
99
|
-
## What is ReactPress?
|
|
100
|
-
|
|
101
|
-
**ReactPress** is a modern publishing platform built with React, Next.js, and NestJS. Run \`init\` and \`dev\` after installing the CLI to get a public site, admin console, and API — without hand-writing config or wiring a database yourself.
|
|
102
|
-
|
|
103
|
-
> **One backend, many fronts.** Publish in one place; show content on the web, in admin, or through your own apps via the API.
|
|
104
|
-
|
|
105
|
-
### Lists
|
|
106
|
-
|
|
107
|
-
Bullet list:
|
|
108
|
-
|
|
109
|
-
- Edit or delete this sample post
|
|
110
|
-
- Switch themes under Appearance
|
|
111
|
-
- Configure your site under Settings
|
|
112
|
-
|
|
113
|
-
Numbered list:
|
|
114
|
-
|
|
115
|
-
1. Install the CLI and initialize a project
|
|
116
|
-
2. Run \`reactpress dev\` to start developing
|
|
117
|
-
3. Run \`reactpress doctor\` for environment diagnostics
|
|
118
|
-
|
|
119
|
-
#### Images and links
|
|
120
|
-
|
|
121
|
-
Site logo example (replace \`/logo.png\` with a URL from the media library):
|
|
122
|
-
|
|
123
|
-

|
|
124
|
-
|
|
125
|
-
Project link: [ReactPress on GitHub](https://github.com/fecommunity/reactpress)
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## Quick start
|
|
130
|
-
|
|
131
|
-
${SHARED_QUICK_START}
|
|
132
|
-
|
|
133
|
-
| Service | URL |
|
|
134
|
-
| :------ | :-- |
|
|
135
|
-
| Public site | \`http://localhost:3001\` |
|
|
136
|
-
| Admin | \`http://localhost:3001/admin\` |
|
|
137
|
-
| API | \`http://localhost:3002/api\` |
|
|
138
|
-
|
|
139
|
-
Code block example:
|
|
140
|
-
|
|
141
|
-
\`\`\`js
|
|
142
|
-
console.log('Hello ReactPress');
|
|
143
|
-
\`\`\`
|
|
144
|
-
|
|
145
|
-
> Tip: Use the admin editor toolbar for headings, images, tables, and code blocks. Set category, tags, and publish options in the sidebar.
|
|
146
|
-
|
|
147
|
-
Happy publishing!`,
|
|
148
|
-
},
|
|
149
|
-
};
|
|
150
|
-
function getHelloWorldSeed(locale) {
|
|
151
|
-
const seed = SEED_BY_LOCALE[locale];
|
|
152
|
-
const marker = `<!-- ${exports.HELLO_WORLD_SEED_MARKER}:${locale} -->`;
|
|
153
|
-
return Object.assign(Object.assign({}, seed), { markdown: `${marker}\n${seed.markdown}` });
|
|
154
|
-
}
|
|
155
|
-
exports.getHelloWorldSeed = getHelloWorldSeed;
|
|
156
|
-
function getSystemSettingSeedDefaults(locale) {
|
|
157
|
-
const seed = SEED_BY_LOCALE[locale];
|
|
158
|
-
return {
|
|
159
|
-
systemTitle: seed.systemTitle,
|
|
160
|
-
systemSubTitle: seed.systemSubTitle,
|
|
161
|
-
systemLogo: '/logo.png',
|
|
162
|
-
systemFavicon: '/favicon.png',
|
|
163
|
-
systemNoticeInfo: '[]',
|
|
164
|
-
seoKeyword: seed.seoKeyword,
|
|
165
|
-
seoDesc: seed.seoDesc,
|
|
166
|
-
baiduAnalyticsId: '',
|
|
167
|
-
googleAnalyticsId: '',
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
exports.getSystemSettingSeedDefaults = getSystemSettingSeedDefaults;
|
|
171
|
-
//# sourceMappingURL=bootstrap.constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.constants.js","sourceRoot":"","sources":["../../../src/modules/bootstrap/bootstrap.constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,uBAAuB,GAAG,oBAAoB,CAAC;AAE/C,QAAA,yBAAyB,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAU,CAAC;AAE5E,MAAM,kBAAkB,GAAG;;;;;OAKpB,CAAC;AAER,MAAM,cAAc,GAYhB;IACF,EAAE,EAAE;QACF,WAAW,EAAE,YAAY;QACzB,cAAc,EAAE,mBAAmB;QACnC,UAAU,EAAE,yBAAyB;QACrC,OAAO,EAAE,oBAAoB;QAC7B,YAAY,EAAE,QAAQ;QACtB,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE;QAClD,IAAI,EAAE;YACJ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;YAC5C,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE;YACzC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;SAC/B;QACD,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCZ,kBAAkB;;;;;;;;;;;;;;;;QAgBZ;KACL;IACD,EAAE,EAAE;QACF,WAAW,EAAE,YAAY;QACzB,cAAc,EAAE,8BAA8B;QAC9C,UAAU,EAAE,2BAA2B;QACvC,OAAO,EAAE,+BAA+B;QACxC,YAAY,EAAE,aAAa;QAC3B,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;QAC5D,IAAI,EAAE;YACJ,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;YAC5C,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE;YACtD,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;SAC/B;QACD,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCZ,kBAAkB;;;;;;;;;;;;;;;;kBAgBF;KACf;CACF,CAAC;AAEF,SAAgB,iBAAiB,CAAC,MAAqB;IACrD,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,QAAQ,+BAAuB,IAAI,MAAM,MAAM,CAAC;IAC/D,uCACK,IAAI,KACP,QAAQ,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,IACvC;AACJ,CAAC;AAPD,8CAOC;AAED,SAAgB,4BAA4B,CAAC,MAAqB;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,UAAU,EAAE,WAAW;QACvB,aAAa,EAAE,cAAc;QAC7B,gBAAgB,EAAE,IAAI;QACtB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,gBAAgB,EAAE,EAAE;QACpB,iBAAiB,EAAE,EAAE;KACtB,CAAC;AACJ,CAAC;AAbD,oEAaC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
-
import { ConfigService } from '@nestjs/config';
|
|
3
|
-
import { Repository } from 'typeorm';
|
|
4
|
-
import { ArticleService } from '../article/article.service';
|
|
5
|
-
import { Article } from '../article/article.entity';
|
|
6
|
-
import { Category } from '../category/category.entity';
|
|
7
|
-
import { Tag } from '../tag/tag.entity';
|
|
8
|
-
export declare class BootstrapService implements OnModuleInit {
|
|
9
|
-
private readonly articleRepository;
|
|
10
|
-
private readonly categoryRepository;
|
|
11
|
-
private readonly tagRepository;
|
|
12
|
-
private readonly articleService;
|
|
13
|
-
private readonly configService;
|
|
14
|
-
private readonly logger;
|
|
15
|
-
constructor(articleRepository: Repository<Article>, categoryRepository: Repository<Category>, tagRepository: Repository<Tag>, articleService: ArticleService, configService: ConfigService);
|
|
16
|
-
onModuleInit(): void;
|
|
17
|
-
private resolveLocale;
|
|
18
|
-
private runFirstRunBootstrap;
|
|
19
|
-
seedHelloWorldArticle(): Promise<void>;
|
|
20
|
-
private findOrCreateCategory;
|
|
21
|
-
private findOrCreateTag;
|
|
22
|
-
}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
|
-
var BootstrapService_1;
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.BootstrapService = void 0;
|
|
17
|
-
const common_1 = require("@nestjs/common");
|
|
18
|
-
const config_1 = require("@nestjs/config");
|
|
19
|
-
const typeorm_1 = require("@nestjs/typeorm");
|
|
20
|
-
const typeorm_2 = require("typeorm");
|
|
21
|
-
const markdown_util_1 = require("../../utils/markdown.util");
|
|
22
|
-
const article_service_1 = require("../article/article.service");
|
|
23
|
-
const article_entity_1 = require("../article/article.entity");
|
|
24
|
-
const category_entity_1 = require("../category/category.entity");
|
|
25
|
-
const tag_entity_1 = require("../tag/tag.entity");
|
|
26
|
-
const bootstrap_constants_1 = require("./bootstrap.constants");
|
|
27
|
-
const install_locale_1 = require("./install-locale");
|
|
28
|
-
function extractSummary(markdown) {
|
|
29
|
-
var _a;
|
|
30
|
-
const plain = (_a = markdown
|
|
31
|
-
.replace(/^<!--.*-->$/gm, '')
|
|
32
|
-
.replace(/^#+\s+.*$/gm, '')
|
|
33
|
-
.replace(/\*\*([^*]+)\*\*/g, '$1')
|
|
34
|
-
.replace(/`([^`]+)`/g, '$1')
|
|
35
|
-
.replace(/^\d+\.\s+/gm, '')
|
|
36
|
-
.replace(/^>\s+.*/gm, '')
|
|
37
|
-
.replace(/^---$/gm, '')
|
|
38
|
-
.trim()
|
|
39
|
-
.split('\n\n')
|
|
40
|
-
.find((block) => block.trim() && !block.startsWith('```'))) !== null && _a !== void 0 ? _a : '';
|
|
41
|
-
const line = plain.replace(/\n/g, ' ').trim();
|
|
42
|
-
if (!line)
|
|
43
|
-
return '';
|
|
44
|
-
return line.length > 160 ? `${line.slice(0, 157)}...` : line;
|
|
45
|
-
}
|
|
46
|
-
function needsTocRepair(toc) {
|
|
47
|
-
if (!(toc === null || toc === void 0 ? void 0 : toc.trim()))
|
|
48
|
-
return true;
|
|
49
|
-
try {
|
|
50
|
-
const parsed = JSON.parse(toc);
|
|
51
|
-
if (!Array.isArray(parsed) || parsed.length === 0)
|
|
52
|
-
return true;
|
|
53
|
-
const first = parsed[0];
|
|
54
|
-
return Array.isArray(first) || !(first && typeof first === 'object' && 'id' in first);
|
|
55
|
-
}
|
|
56
|
-
catch (_a) {
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function needsContentRefresh(content, locale) {
|
|
61
|
-
if (!(content === null || content === void 0 ? void 0 : content.trim()))
|
|
62
|
-
return true;
|
|
63
|
-
const marker = `<!-- ${bootstrap_constants_1.HELLO_WORLD_SEED_MARKER}:${locale} -->`;
|
|
64
|
-
if (content.includes(marker))
|
|
65
|
-
return false;
|
|
66
|
-
return (content.includes('## English') ||
|
|
67
|
-
content.includes('## 中文') ||
|
|
68
|
-
content.includes('Hello World / 欢迎使用') ||
|
|
69
|
-
content.includes('reactpress-seed:'));
|
|
70
|
-
}
|
|
71
|
-
const HELLO_WORLD_COVER = '/logo.png';
|
|
72
|
-
function ensureHelloWorldHomeRecommend(article) {
|
|
73
|
-
var _a;
|
|
74
|
-
let changed = false;
|
|
75
|
-
if (!article.isRecommended) {
|
|
76
|
-
article.isRecommended = true;
|
|
77
|
-
changed = true;
|
|
78
|
-
}
|
|
79
|
-
if (!((_a = article.cover) === null || _a === void 0 ? void 0 : _a.trim())) {
|
|
80
|
-
article.cover = HELLO_WORLD_COVER;
|
|
81
|
-
changed = true;
|
|
82
|
-
}
|
|
83
|
-
return changed;
|
|
84
|
-
}
|
|
85
|
-
let BootstrapService = BootstrapService_1 = class BootstrapService {
|
|
86
|
-
constructor(articleRepository, categoryRepository, tagRepository, articleService, configService) {
|
|
87
|
-
this.articleRepository = articleRepository;
|
|
88
|
-
this.categoryRepository = categoryRepository;
|
|
89
|
-
this.tagRepository = tagRepository;
|
|
90
|
-
this.articleService = articleService;
|
|
91
|
-
this.configService = configService;
|
|
92
|
-
this.logger = new common_1.Logger(BootstrapService_1.name);
|
|
93
|
-
}
|
|
94
|
-
onModuleInit() {
|
|
95
|
-
void this.runFirstRunBootstrap();
|
|
96
|
-
}
|
|
97
|
-
resolveLocale() {
|
|
98
|
-
return (0, install_locale_1.resolveInstallLocale)(this.configService.get('REACTPRESS_LANG') || this.configService.get('LANG'));
|
|
99
|
-
}
|
|
100
|
-
async runFirstRunBootstrap() {
|
|
101
|
-
try {
|
|
102
|
-
await this.seedHelloWorldArticle();
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
this.logger.error('First-run bootstrap failed', error instanceof Error ? error.stack : String(error));
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
async seedHelloWorldArticle() {
|
|
109
|
-
const locale = this.resolveLocale();
|
|
110
|
-
const seed = (0, bootstrap_constants_1.getHelloWorldSeed)(locale);
|
|
111
|
-
const { html, toc } = (0, markdown_util_1.marked)(seed.markdown);
|
|
112
|
-
const summary = extractSummary(seed.markdown);
|
|
113
|
-
const existing = await this.articleRepository.findOne({
|
|
114
|
-
where: { title: (0, typeorm_2.In)([...bootstrap_constants_1.HELLO_WORLD_LEGACY_TITLES, seed.articleTitle]) },
|
|
115
|
-
});
|
|
116
|
-
if (existing) {
|
|
117
|
-
const refreshContent = needsContentRefresh(existing.content, locale);
|
|
118
|
-
const refreshToc = needsTocRepair(existing.toc);
|
|
119
|
-
const refreshRecommend = ensureHelloWorldHomeRecommend(existing);
|
|
120
|
-
if (!refreshContent && !refreshToc && !refreshRecommend)
|
|
121
|
-
return;
|
|
122
|
-
if (refreshContent) {
|
|
123
|
-
existing.title = seed.articleTitle;
|
|
124
|
-
existing.content = seed.markdown;
|
|
125
|
-
existing.summary = summary;
|
|
126
|
-
}
|
|
127
|
-
if (refreshContent || refreshToc) {
|
|
128
|
-
existing.html = html;
|
|
129
|
-
existing.toc = toc;
|
|
130
|
-
}
|
|
131
|
-
await this.articleRepository.save(existing);
|
|
132
|
-
this.logger.log(`Hello World sample article updated (${locale})`);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
if ((await this.articleRepository.count()) > 0)
|
|
136
|
-
return;
|
|
137
|
-
const category = await this.findOrCreateCategory(seed.category);
|
|
138
|
-
const tags = await Promise.all(seed.tags.map((tag) => this.findOrCreateTag(tag)));
|
|
139
|
-
await this.articleService.create({
|
|
140
|
-
title: seed.articleTitle,
|
|
141
|
-
content: seed.markdown,
|
|
142
|
-
html,
|
|
143
|
-
toc,
|
|
144
|
-
summary,
|
|
145
|
-
status: 'publish',
|
|
146
|
-
cover: HELLO_WORLD_COVER,
|
|
147
|
-
category: category.id,
|
|
148
|
-
tags: tags.map((tag) => tag.id).join(','),
|
|
149
|
-
isRecommended: true,
|
|
150
|
-
isCommentable: true,
|
|
151
|
-
});
|
|
152
|
-
this.logger.log(`Hello World sample article seeded (${locale})`);
|
|
153
|
-
}
|
|
154
|
-
async findOrCreateCategory(def) {
|
|
155
|
-
var _a;
|
|
156
|
-
let category = (_a = (await this.categoryRepository.findOne({ where: { value: def.value } }))) !== null && _a !== void 0 ? _a : (await this.categoryRepository.findOne({ where: { label: def.label } }));
|
|
157
|
-
if (category)
|
|
158
|
-
return category;
|
|
159
|
-
category = this.categoryRepository.create(def);
|
|
160
|
-
return this.categoryRepository.save(category);
|
|
161
|
-
}
|
|
162
|
-
async findOrCreateTag(def) {
|
|
163
|
-
var _a;
|
|
164
|
-
let tag = (_a = (await this.tagRepository.findOne({ where: { value: def.value } }))) !== null && _a !== void 0 ? _a : (await this.tagRepository.findOne({ where: { label: def.label } }));
|
|
165
|
-
if (tag)
|
|
166
|
-
return tag;
|
|
167
|
-
tag = this.tagRepository.create(def);
|
|
168
|
-
return this.tagRepository.save(tag);
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
BootstrapService = BootstrapService_1 = __decorate([
|
|
172
|
-
(0, common_1.Injectable)(),
|
|
173
|
-
__param(0, (0, typeorm_1.InjectRepository)(article_entity_1.Article)),
|
|
174
|
-
__param(1, (0, typeorm_1.InjectRepository)(category_entity_1.Category)),
|
|
175
|
-
__param(2, (0, typeorm_1.InjectRepository)(tag_entity_1.Tag)),
|
|
176
|
-
__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
177
|
-
typeorm_2.Repository,
|
|
178
|
-
typeorm_2.Repository,
|
|
179
|
-
article_service_1.ArticleService,
|
|
180
|
-
config_1.ConfigService])
|
|
181
|
-
], BootstrapService);
|
|
182
|
-
exports.BootstrapService = BootstrapService;
|
|
183
|
-
//# sourceMappingURL=bootstrap.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.service.js","sourceRoot":"","sources":["../../../src/modules/bootstrap/bootstrap.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resolveInstallLocale = void 0;
|
|
4
|
-
function resolveInstallLocale(raw) {
|
|
5
|
-
const code = String(raw || process.env.REACTPRESS_LANG || process.env.LANG || 'en')
|
|
6
|
-
.split(/[._-]/)[0]
|
|
7
|
-
.toLowerCase();
|
|
8
|
-
return code === 'zh' ? 'zh' : 'en';
|
|
9
|
-
}
|
|
10
|
-
exports.resolveInstallLocale = resolveInstallLocale;
|
|
11
|
-
//# sourceMappingURL=install-locale.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-locale.js","sourceRoot":"","sources":["../../../src/modules/bootstrap/install-locale.ts"],"names":[],"mappings":";;;AAGA,SAAgB,oBAAoB,CAAC,GAAY;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;SAChF,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACjB,WAAW,EAAE,CAAC;IACjB,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC;AALD,oDAKC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
-
import { PluginLoaderService } from './plugin-loader.service';
|
|
3
|
-
import { ThemeService } from './theme.service';
|
|
4
|
-
export declare class ExtensionModule implements OnModuleInit {
|
|
5
|
-
private readonly themeService;
|
|
6
|
-
private readonly pluginLoader;
|
|
7
|
-
constructor(themeService: ThemeService, pluginLoader: PluginLoaderService);
|
|
8
|
-
onModuleInit(): void;
|
|
9
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.ExtensionModule = void 0;
|
|
13
|
-
const common_1 = require("@nestjs/common");
|
|
14
|
-
const typeorm_1 = require("@nestjs/typeorm");
|
|
15
|
-
const auth_module_1 = require("../auth/auth.module");
|
|
16
|
-
const hook_module_1 = require("../hook/hook.module");
|
|
17
|
-
const setting_module_1 = require("../setting/setting.module");
|
|
18
|
-
const setting_entity_1 = require("../setting/setting.entity");
|
|
19
|
-
const plugin_controller_1 = require("./plugin.controller");
|
|
20
|
-
const plugin_loader_service_1 = require("./plugin-loader.service");
|
|
21
|
-
const plugin_service_1 = require("./plugin.service");
|
|
22
|
-
const theme_controller_1 = require("./theme.controller");
|
|
23
|
-
const theme_service_1 = require("./theme.service");
|
|
24
|
-
let ExtensionModule = class ExtensionModule {
|
|
25
|
-
constructor(themeService, pluginLoader) {
|
|
26
|
-
this.themeService = themeService;
|
|
27
|
-
this.pluginLoader = pluginLoader;
|
|
28
|
-
}
|
|
29
|
-
onModuleInit() {
|
|
30
|
-
void this.themeService.ensureDefaultTheme().catch((err) => {
|
|
31
|
-
console.warn('[ThemeService] ensureDefaultTheme skipped:', err instanceof Error ? err.message : err);
|
|
32
|
-
});
|
|
33
|
-
void this.pluginLoader.loadActivePlugins();
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
ExtensionModule = __decorate([
|
|
37
|
-
(0, common_1.Module)({
|
|
38
|
-
imports: [
|
|
39
|
-
typeorm_1.TypeOrmModule.forFeature([setting_entity_1.Setting]),
|
|
40
|
-
(0, common_1.forwardRef)(() => auth_module_1.AuthModule),
|
|
41
|
-
setting_module_1.SettingModule,
|
|
42
|
-
hook_module_1.HookModule,
|
|
43
|
-
],
|
|
44
|
-
controllers: [theme_controller_1.ThemeController, plugin_controller_1.PluginController],
|
|
45
|
-
providers: [theme_service_1.ThemeService, plugin_service_1.PluginService, plugin_loader_service_1.PluginLoaderService],
|
|
46
|
-
exports: [theme_service_1.ThemeService, plugin_service_1.PluginService, plugin_loader_service_1.PluginLoaderService],
|
|
47
|
-
}),
|
|
48
|
-
__metadata("design:paramtypes", [theme_service_1.ThemeService,
|
|
49
|
-
plugin_loader_service_1.PluginLoaderService])
|
|
50
|
-
], ExtensionModule);
|
|
51
|
-
exports.ExtensionModule = ExtensionModule;
|
|
52
|
-
//# sourceMappingURL=extension.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extension.module.js","sourceRoot":"","sources":["../../../src/modules/extension/extension.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAkE;AAClE,6CAAgD;AAEhD,qDAAiD;AACjD,qDAAiD;AACjD,8DAA0D;AAC1D,8DAAoD;AACpD,2DAAuD;AACvD,mEAA8D;AAC9D,qDAAiD;AACjD,yDAAqD;AACrD,mDAA+C;AAaxC,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YACmB,YAA0B,EAC1B,YAAiC;QADjC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,iBAAY,GAAZ,YAAY,CAAqB;IACjD,CAAC;IAEJ,YAAY;QACV,KAAK,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACxD,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACvG,CAAC,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;IAC7C,CAAC;CACF,CAAA;AAZY,eAAe;IAX3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,wBAAO,CAAC,CAAC;YACnC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,wBAAU,CAAC;YAC5B,8BAAa;YACb,wBAAU;SACX;QACD,WAAW,EAAE,CAAC,kCAAe,EAAE,oCAAgB,CAAC;QAChD,SAAS,EAAE,CAAC,4BAAY,EAAE,8BAAa,EAAE,2CAAmB,CAAC;QAC7D,OAAO,EAAE,CAAC,4BAAY,EAAE,8BAAa,EAAE,2CAAmB,CAAC;KAC5D,CAAC;qCAGiC,4BAAY;QACZ,2CAAmB;GAHzC,eAAe,CAY3B;AAZY,0CAAe"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { HookService } from '../hook/hook.service';
|
|
2
|
-
import { PluginService } from './plugin.service';
|
|
3
|
-
export declare class PluginLoaderService {
|
|
4
|
-
private readonly hookService;
|
|
5
|
-
private readonly pluginService;
|
|
6
|
-
private readonly logger;
|
|
7
|
-
constructor(hookService: HookService, pluginService: PluginService);
|
|
8
|
-
loadActivePlugins(): Promise<void>;
|
|
9
|
-
loadPlugin(pluginId: string): Promise<void>;
|
|
10
|
-
unloadPlugin(pluginId: string): Promise<void>;
|
|
11
|
-
reloadPlugin(pluginId: string): Promise<void>;
|
|
12
|
-
}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
var PluginLoaderService_1;
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.PluginLoaderService = void 0;
|
|
14
|
-
const extension_1 = require("../../../../toolkit/dist/plugin/extension");
|
|
15
|
-
const extension_2 = require("../../../../toolkit/dist/plugin/extension");
|
|
16
|
-
const server_1 = require("../../../../toolkit/dist/plugin/server");
|
|
17
|
-
const common_1 = require("@nestjs/common");
|
|
18
|
-
const fs = require("fs");
|
|
19
|
-
const hook_service_1 = require("../hook/hook.service");
|
|
20
|
-
const plugin_service_1 = require("./plugin.service");
|
|
21
|
-
let PluginLoaderService = PluginLoaderService_1 = class PluginLoaderService {
|
|
22
|
-
constructor(hookService, pluginService) {
|
|
23
|
-
this.hookService = hookService;
|
|
24
|
-
this.pluginService = pluginService;
|
|
25
|
-
this.logger = new common_1.Logger(PluginLoaderService_1.name);
|
|
26
|
-
}
|
|
27
|
-
async loadActivePlugins() {
|
|
28
|
-
const state = await this.pluginService.getPluginState();
|
|
29
|
-
for (const pluginId of state.activePlugins) {
|
|
30
|
-
if (!(0, extension_2.isValidPluginId)(pluginId)) {
|
|
31
|
-
this.logger.warn(`Skipping active plugin with invalid id: ${pluginId}`);
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
await this.loadPlugin(pluginId);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
async loadPlugin(pluginId) {
|
|
38
|
-
var _a, _b;
|
|
39
|
-
if (!(0, extension_2.isValidPluginId)(pluginId)) {
|
|
40
|
-
this.logger.warn(`Refusing to load plugin with invalid id: ${pluginId}`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
await this.unloadPlugin(pluginId);
|
|
44
|
-
const manifest = this.pluginService.readRuntimeManifest(pluginId);
|
|
45
|
-
if (!((_a = manifest === null || manifest === void 0 ? void 0 : manifest.server) === null || _a === void 0 ? void 0 : _a.module)) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const modulePath = this.pluginService.resolveServerModulePath(pluginId, manifest.server.module);
|
|
49
|
-
if (!modulePath || !fs.existsSync(modulePath)) {
|
|
50
|
-
await this.pluginService.recordLoadError(pluginId, `Server module not found: ${manifest.server.module}`);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
try {
|
|
54
|
-
try {
|
|
55
|
-
delete require.cache[require.resolve(modulePath)];
|
|
56
|
-
}
|
|
57
|
-
catch (_c) {
|
|
58
|
-
}
|
|
59
|
-
const loaded = require(modulePath);
|
|
60
|
-
const mod = ((_b = loaded.default) !== null && _b !== void 0 ? _b : loaded);
|
|
61
|
-
if (typeof mod.register !== 'function') {
|
|
62
|
-
await this.pluginService.recordLoadError(pluginId, 'Plugin server module has no register() export');
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
this.hookService.registerLoadedModule(pluginId, loaded);
|
|
66
|
-
const ctx = await this.pluginService.createPluginContext(pluginId, manifest);
|
|
67
|
-
await mod.register(this.hookService, ctx);
|
|
68
|
-
await this.pluginService.clearLoadError(pluginId);
|
|
69
|
-
this.logger.log(`Loaded plugin "${pluginId}" v${manifest.version}`);
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
await this.unloadPlugin(pluginId);
|
|
73
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
74
|
-
await this.pluginService.recordLoadError(pluginId, message);
|
|
75
|
-
this.logger.error(`Failed to load plugin "${pluginId}": ${message}`);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
async unloadPlugin(pluginId) {
|
|
79
|
-
this.hookService.removePluginHooks(pluginId);
|
|
80
|
-
await this.hookService.deactivatePluginModule(pluginId);
|
|
81
|
-
}
|
|
82
|
-
async reloadPlugin(pluginId) {
|
|
83
|
-
await this.unloadPlugin(pluginId);
|
|
84
|
-
const state = await this.pluginService.getPluginState();
|
|
85
|
-
if (state.activePlugins.includes(pluginId)) {
|
|
86
|
-
await this.loadPlugin(pluginId);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
PluginLoaderService = PluginLoaderService_1 = __decorate([
|
|
91
|
-
(0, common_1.Injectable)(),
|
|
92
|
-
__metadata("design:paramtypes", [hook_service_1.HookService,
|
|
93
|
-
plugin_service_1.PluginService])
|
|
94
|
-
], PluginLoaderService);
|
|
95
|
-
exports.PluginLoaderService = PluginLoaderService;
|
|
96
|
-
//# sourceMappingURL=plugin-loader.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-loader.service.js","sourceRoot":"","sources":["../../../src/modules/extension/plugin-loader.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.readPluginsPackageMeta = void 0;
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const project_root_util_1 = require("../../utils/project-root.util");
|
|
7
|
-
const extension_1 = require("../../../../toolkit/dist/plugin/extension");
|
|
8
|
-
function scanPluginDirectories(pluginsDir) {
|
|
9
|
-
if (!fs.existsSync(pluginsDir))
|
|
10
|
-
return [];
|
|
11
|
-
const discovered = [];
|
|
12
|
-
for (const entry of fs.readdirSync(pluginsDir, { withFileTypes: true })) {
|
|
13
|
-
if (!entry.isDirectory())
|
|
14
|
-
continue;
|
|
15
|
-
if (!(0, extension_1.isValidPluginId)(entry.name))
|
|
16
|
-
continue;
|
|
17
|
-
if (fs.existsSync(path.join(pluginsDir, entry.name, 'plugin.json'))) {
|
|
18
|
-
discovered.push(entry.name);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return discovered.sort();
|
|
22
|
-
}
|
|
23
|
-
function readPluginsPackageMeta(root = (0, project_root_util_1.resolveProjectRoot)()) {
|
|
24
|
-
var _a;
|
|
25
|
-
const pluginsDir = path.join(root, 'plugins');
|
|
26
|
-
const pkgPath = path.join(pluginsDir, 'package.json');
|
|
27
|
-
let fromRegistry = [];
|
|
28
|
-
if (fs.existsSync(pkgPath)) {
|
|
29
|
-
try {
|
|
30
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
31
|
-
fromRegistry = Array.isArray((_a = pkg.reactpress) === null || _a === void 0 ? void 0 : _a.local)
|
|
32
|
-
? pkg.reactpress.local.filter((id) => typeof id === 'string' && (0, extension_1.isValidPluginId)(id))
|
|
33
|
-
: [];
|
|
34
|
-
}
|
|
35
|
-
catch (_b) {
|
|
36
|
-
fromRegistry = [];
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
const discovered = scanPluginDirectories(pluginsDir);
|
|
40
|
-
const local = [...new Set([...fromRegistry, ...discovered])].sort();
|
|
41
|
-
return { local };
|
|
42
|
-
}
|
|
43
|
-
exports.readPluginsPackageMeta = readPluginsPackageMeta;
|
|
44
|
-
//# sourceMappingURL=plugin-registry.bridge.js.map
|