@fecommunity/reactpress-server 1.0.0-beta.3 → 1.0.0-beta.31

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/dist/main.js CHANGED
@@ -1,44 +1,301 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@nestjs/core");
4
- const swagger_1 = require("@nestjs/swagger");
5
- const bodyParser = require("body-parser");
6
- const compression = require("compression");
7
- const express = require("express");
8
- const rateLimit = require("express-rate-limit");
9
- const helmet = require("helmet");
3
+ const fs = require("fs");
10
4
  const path_1 = require("path");
5
+ const express = require("express");
6
+ const bodyParser = require("body-parser");
11
7
  const open = require("open");
12
- const app_module_1 = require("./app.module");
13
- const http_exception_filter_1 = require("./filters/http-exception.filter");
14
- const transform_interceptor_1 = require("./interceptors/transform.interceptor");
15
- async function bootstrap() {
16
- const app = await core_1.NestFactory.create(app_module_1.AppModule);
17
- const configService = app.get('ConfigService');
18
- app.enableCors();
19
- app.setGlobalPrefix(configService.get('SERVER_API_PREFIX', '/api'));
20
- app.use(rateLimit({
21
- windowMs: 60 * 1000,
22
- max: 10000,
23
- }));
24
- const rootDir = path_1.join(__dirname, '../public');
25
- app.use('/public', express.static(rootDir));
26
- app.use(compression());
27
- app.use(helmet());
28
- app.useGlobalInterceptors(new transform_interceptor_1.TransformInterceptor());
29
- app.useGlobalFilters(new http_exception_filter_1.HttpExceptionFilter());
30
- app.use(bodyParser.json({ limit: '10mb' }));
31
- app.use(bodyParser.urlencoded({ limit: '10mb', extended: true }));
32
- const swaggerConfig = new swagger_1.DocumentBuilder()
33
- .setTitle('ReactPress Open Api')
34
- .setDescription('ReactPress Open Api Document')
35
- .setVersion('1.0')
36
- .build();
37
- const document = swagger_1.SwaggerModule.createDocument(app, swaggerConfig);
38
- swagger_1.SwaggerModule.setup('api', app, document);
39
- await app.listen(configService.get('SERVER_PORT', 3002));
40
- await open(`http://localhost:${configService.get('SERVER_PORT', 3002)}/api`);
41
- console.log(`[ReactPress] 服务启动成功`);
42
- }
43
- bootstrap();
8
+ const net = require("net");
9
+ const INSTALLATION_PORT = 3002;
10
+ const MAX_PORT_ATTEMPTS = 10;
11
+ const serverState = {
12
+ server: null,
13
+ isClosing: false,
14
+ isListening: false
15
+ };
16
+ const checkPort = (port) => {
17
+ return new Promise((resolve) => {
18
+ const server = net.createServer();
19
+ server.once('error', (err) => {
20
+ if (err.code === 'EADDRINUSE') {
21
+ resolve(false);
22
+ }
23
+ else {
24
+ resolve(false);
25
+ }
26
+ });
27
+ server.once('listening', () => {
28
+ server.once('close', () => resolve(true)).close();
29
+ });
30
+ server.listen(port);
31
+ });
32
+ };
33
+ const findAvailablePort = async (startPort) => {
34
+ for (let port = startPort; port < startPort + MAX_PORT_ATTEMPTS; port++) {
35
+ if (await checkPort(port)) {
36
+ return port;
37
+ }
38
+ }
39
+ throw new Error(`No available ports found in range ${startPort}-${startPort + MAX_PORT_ATTEMPTS - 1}`);
40
+ };
41
+ const safelyCloseServer = async () => {
42
+ if (!serverState.server || serverState.isClosing) {
43
+ return;
44
+ }
45
+ serverState.isClosing = true;
46
+ return new Promise((resolve) => {
47
+ if (!serverState.isListening) {
48
+ serverState.server = null;
49
+ serverState.isClosing = false;
50
+ resolve();
51
+ return;
52
+ }
53
+ const timeout = setTimeout(() => {
54
+ console.log('[ReactPress] Force closing server due to timeout');
55
+ serverState.server = null;
56
+ serverState.isClosing = false;
57
+ serverState.isListening = false;
58
+ resolve();
59
+ }, 3000);
60
+ serverState.server.close((err) => {
61
+ clearTimeout(timeout);
62
+ if (err && err.code !== 'ERR_SERVER_NOT_RUNNING') {
63
+ console.warn('[ReactPress] Server close warning:', err.message);
64
+ }
65
+ serverState.server = null;
66
+ serverState.isClosing = false;
67
+ serverState.isListening = false;
68
+ resolve();
69
+ });
70
+ if (serverState.server.closeAllConnections) {
71
+ serverState.server.closeAllConnections();
72
+ }
73
+ });
74
+ };
75
+ const startServerWithState = (app, port) => {
76
+ return new Promise((resolve, reject) => {
77
+ if (serverState.server) {
78
+ reject(new Error('Server is already running'));
79
+ return;
80
+ }
81
+ const server = app.listen(port, () => {
82
+ serverState.server = server;
83
+ serverState.isListening = true;
84
+ global.installationPort = port;
85
+ console.log(`[ReactPress] Installation server running on http://localhost:${port}`);
86
+ resolve();
87
+ });
88
+ server.on('error', (error) => {
89
+ serverState.isListening = false;
90
+ reject(error);
91
+ });
92
+ server.on('close', () => {
93
+ serverState.isListening = false;
94
+ });
95
+ });
96
+ };
97
+ const setupSignalHandlers = () => {
98
+ const shutdown = async (signal) => {
99
+ console.log(`\n[ReactPress] Received ${signal}, shutting down gracefully...`);
100
+ await safelyCloseServer();
101
+ process.exit(0);
102
+ };
103
+ process.on('SIGINT', () => shutdown('SIGINT'));
104
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
105
+ process.on('SIGHUP', () => shutdown('SIGHUP'));
106
+ };
107
+ const main = async () => {
108
+ try {
109
+ setupSignalHandlers();
110
+ const projectRoot = getProjectRoot();
111
+ const envPath = path_1.join(projectRoot, '.env');
112
+ if (fs.existsSync(envPath)) {
113
+ console.log('[ReactPress] Environment file exists, starting main application');
114
+ await startMainApplication();
115
+ return;
116
+ }
117
+ console.log('[ReactPress] Starting installation wizard');
118
+ await runInstallationWizard();
119
+ }
120
+ catch (error) {
121
+ console.error('[ReactPress] Fatal error:', error);
122
+ await safelyCloseServer();
123
+ process.exit(1);
124
+ }
125
+ };
126
+ const getProjectRoot = () => {
127
+ let currentDir = __dirname;
128
+ for (let i = 0; i < 5; i++) {
129
+ const packageJsonPath = path_1.join(currentDir, 'package.json');
130
+ if (fs.existsSync(packageJsonPath)) {
131
+ try {
132
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
133
+ if (packageJson.name === 'reactpress' ||
134
+ (packageJson.dependencies && packageJson.dependencies['@fecommunity/reactpress-server']) ||
135
+ (packageJson.devDependencies && packageJson.devDependencies['@fecommunity/reactpress-server'])) {
136
+ console.log(`[ReactPress] Found project root at: ${currentDir}`);
137
+ return currentDir;
138
+ }
139
+ }
140
+ catch (e) {
141
+ console.warn(`[ReactPress] Failed to parse package.json at ${packageJsonPath}`);
142
+ }
143
+ }
144
+ currentDir = path_1.dirname(currentDir);
145
+ }
146
+ currentDir = __dirname;
147
+ for (let i = 0; i < 5; i++) {
148
+ const workspacePath = path_1.join(currentDir, 'pnpm-workspace.yaml');
149
+ if (fs.existsSync(workspacePath)) {
150
+ console.log(`[ReactPress] Found project root via pnpm-workspace.yaml at: ${currentDir}`);
151
+ return currentDir;
152
+ }
153
+ currentDir = path_1.dirname(currentDir);
154
+ }
155
+ currentDir = __dirname;
156
+ for (let i = 0; i < 5; i++) {
157
+ const requiredDirs = ['client', 'server', 'config'];
158
+ const hasRequiredDirs = requiredDirs.every(dir => fs.existsSync(path_1.join(currentDir, dir)));
159
+ if (hasRequiredDirs) {
160
+ const packageJsonPath = path_1.join(currentDir, 'package.json');
161
+ if (fs.existsSync(packageJsonPath)) {
162
+ console.log(`[ReactPress] Found project root via directory structure at: ${currentDir}`);
163
+ return currentDir;
164
+ }
165
+ }
166
+ currentDir = path_1.dirname(currentDir);
167
+ }
168
+ const traditionalRoot = path_1.join(__dirname, '../../');
169
+ if (fs.existsSync(path_1.join(traditionalRoot, 'package.json'))) {
170
+ console.log(`[ReactPress] Using traditional root detection: ${traditionalRoot}`);
171
+ return traditionalRoot;
172
+ }
173
+ console.log(`[ReactPress] Using current working directory as fallback: ${process.cwd()}`);
174
+ return process.cwd();
175
+ };
176
+ const runInstallationWizard = async () => {
177
+ try {
178
+ const port = await findAvailablePort(INSTALLATION_PORT);
179
+ const app = express();
180
+ app.use(bodyParser.json({ limit: '10mb' }));
181
+ app.use(bodyParser.urlencoded({ limit: '10mb', extended: true }));
182
+ app.use('/public', express.static(path_1.join(__dirname, '../public')));
183
+ app.get('/', (req, res) => {
184
+ res.sendFile(path_1.join(__dirname, '../public/index.html'));
185
+ });
186
+ app.post('/test-db', async (req, res) => {
187
+ try {
188
+ const mysql = await Promise.resolve().then(() => require('mysql2/promise'));
189
+ const { host, port, user, password, database } = req.body;
190
+ const connection = await mysql.createConnection({
191
+ host: host || 'localhost',
192
+ port: parseInt(port) || 3306,
193
+ user,
194
+ password,
195
+ database
196
+ });
197
+ await connection.execute('SELECT 1');
198
+ await connection.end();
199
+ res.json({ success: true, message: 'Database connection successful!' });
200
+ }
201
+ catch (error) {
202
+ res.status(400).json({
203
+ success: false,
204
+ message: `Database connection failed: ${error.message}`
205
+ });
206
+ }
207
+ });
208
+ app.post('/install', async (req, res) => {
209
+ try {
210
+ const { db, site } = req.body;
211
+ if (!db || !site) {
212
+ return res.status(400).json({
213
+ success: false,
214
+ message: 'Missing configuration data'
215
+ });
216
+ }
217
+ const mysql = await Promise.resolve().then(() => require('mysql2/promise'));
218
+ const connection = await mysql.createConnection({
219
+ host: db.host || 'localhost',
220
+ port: parseInt(db.port) || 3306,
221
+ user: db.user,
222
+ password: db.password,
223
+ database: db.database
224
+ });
225
+ await connection.execute('SELECT 1');
226
+ await connection.end();
227
+ const envContent = `# Database Config
228
+ DB_HOST=${db.host || '127.0.0.1'}
229
+ DB_PORT=${db.port || 3306}
230
+ DB_USER=${db.user}
231
+ DB_PASSWD=${db.password}
232
+ DB_DATABASE=${db.database}
233
+
234
+ # Client Config
235
+ CLIENT_SITE_URL=${site.clientUrl || 'http://localhost:3001'}
236
+
237
+ # Server Config
238
+ SERVER_SITE_URL=${site.serverUrl || 'http://localhost:3002'}
239
+ SERVER_PORT=${site.serverPort || 3002}
240
+ SERVER_API_PREFIX=/api`.trim();
241
+ const projectRoot = getProjectRoot();
242
+ const envPath = path_1.join(projectRoot, '.env');
243
+ fs.writeFileSync(envPath, envContent, 'utf8');
244
+ res.json({
245
+ success: true,
246
+ message: 'Installation completed! Server will restart.',
247
+ serverUrl: site.serverUrl || 'http://localhost:3002'
248
+ });
249
+ res.on('finish', async () => {
250
+ try {
251
+ console.log('[ReactPress] Installation complete, restarting server...');
252
+ await safelyCloseServer();
253
+ await startMainApplication();
254
+ }
255
+ catch (error) {
256
+ console.error('[ReactPress] Restart error:', error);
257
+ }
258
+ });
259
+ }
260
+ catch (error) {
261
+ res.status(400).json({
262
+ success: false,
263
+ message: `Installation failed: ${error.message}`
264
+ });
265
+ }
266
+ });
267
+ await startServerWithState(app, port);
268
+ try {
269
+ await open(`http://localhost:${port}`);
270
+ }
271
+ catch (error) {
272
+ console.log(`[ReactPress] Please visit http://localhost:${port} manually`);
273
+ }
274
+ }
275
+ catch (error) {
276
+ console.error('[ReactPress] Installation wizard failed:', error);
277
+ await safelyCloseServer();
278
+ throw error;
279
+ }
280
+ };
281
+ const startMainApplication = async () => {
282
+ try {
283
+ console.log('[ReactPress] Starting main application...');
284
+ await safelyCloseServer();
285
+ global.isInstalling = false;
286
+ await new Promise(resolve => setTimeout(resolve, 1000));
287
+ const { bootstrap } = await Promise.resolve().then(() => require('./starter'));
288
+ if (typeof bootstrap === 'function') {
289
+ await bootstrap();
290
+ }
291
+ else {
292
+ throw new Error('Bootstrap function not found');
293
+ }
294
+ }
295
+ catch (error) {
296
+ console.error('[ReactPress] Failed to start main application:', error);
297
+ process.exit(1);
298
+ }
299
+ };
300
+ main();
44
301
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,6CAAiE;AACjE,0CAA0C;AAC1C,2CAA2C;AAC3C,mCAAmC;AACnC,gDAAgD;AAChD,iCAAiC;AACjC,+BAA4B;AAC5B,6BAA6B;AAE7B,6CAAyC;AACzC,2EAAsE;AACtE,gFAA4E;AAE5E,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAE/C,GAAG,CAAC,UAAU,EAAE,CAAC;IACjB,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,GAAG,CAAC,GAAG,CACL,SAAS,CAAC;QACR,QAAQ,EAAE,EAAE,GAAG,IAAI;QACnB,GAAG,EAAE,KAAK;KACX,CAAC,CACH,CAAC;IAGF,MAAM,OAAO,GAAG,WAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC7C,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5C,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACvB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAClB,GAAG,CAAC,qBAAqB,CAAC,IAAI,4CAAoB,EAAE,CAAC,CAAC;IACtD,GAAG,CAAC,gBAAgB,CAAC,IAAI,2CAAmB,EAAE,CAAC,CAAC;IAChD,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5C,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClE,MAAM,aAAa,GAAG,IAAI,yBAAe,EAAE;SACxC,QAAQ,CAAC,qBAAqB,CAAC;SAC/B,cAAc,CAAC,8BAA8B,CAAC;SAC9C,UAAU,CAAC,KAAK,CAAC;SACjB,KAAK,EAAE,CAAC;IACX,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAClE,uBAAa,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE1C,MAAM,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;IACzD,MAAM,IAAI,CAAC,oBAAoB,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -26,30 +26,54 @@ let SettingService = class SettingService {
26
26
  this.initGlobalConfig();
27
27
  }
28
28
  async initI18n() {
29
- const items = await this.settingRepository.find();
30
- const target = (items && items[0]) || {};
31
- let data = {};
32
29
  try {
33
- data = JSON.parse(target.i18n);
30
+ console.log('[SettingService] i18n constant keys:', Object.keys(setting_constant_1.i18n));
31
+ const items = await this.settingRepository.find();
32
+ const target = (items && items[0]) || {};
33
+ let data = {};
34
+ try {
35
+ if (target.i18n) {
36
+ data = JSON.parse(target.i18n);
37
+ }
38
+ }
39
+ catch (e) {
40
+ console.warn('[SettingService] Error parsing i18n from DB:', e);
41
+ data = {};
42
+ }
43
+ const mergedI18n = merge({}, setting_constant_1.i18n, data);
44
+ const mergedI18nString = JSON.stringify(mergedI18n);
45
+ if (!target.i18n || target.i18n !== mergedI18nString) {
46
+ target.i18n = mergedI18nString;
47
+ await this.settingRepository.save(target);
48
+ console.log('[SettingService] i18n updated in database');
49
+ }
50
+ else {
51
+ console.log('[SettingService] i18n already up to date');
52
+ }
34
53
  }
35
- catch (e) {
36
- data = {};
54
+ catch (error) {
55
+ console.error('[SettingService] Error in initI18n:', error);
56
+ throw error;
37
57
  }
38
- target.i18n = JSON.stringify(merge({}, setting_constant_1.i18n, data));
39
- await this.settingRepository.save(target);
40
58
  }
41
59
  async initGlobalConfig() {
42
60
  const items = await this.settingRepository.find();
43
61
  const target = (items && items[0]) || {};
44
62
  let data = {};
45
63
  try {
46
- data = JSON.parse(target.globalSetting);
64
+ if (target.globalSetting) {
65
+ data = JSON.parse(target.globalSetting);
66
+ }
47
67
  }
48
68
  catch (e) {
49
69
  data = {};
50
70
  }
51
- target.globalSetting = JSON.stringify(merge({}, setting_constant_1.settings, data));
52
- await this.settingRepository.save(target);
71
+ const mergedSettings = merge({}, setting_constant_1.settings, data);
72
+ const mergedSettingsString = JSON.stringify(mergedSettings);
73
+ if (!target.globalSetting || target.globalSetting !== mergedSettingsString) {
74
+ target.globalSetting = mergedSettingsString;
75
+ await this.settingRepository.save(target);
76
+ }
53
77
  }
54
78
  async findAll(innerInvoke = false, isAdmin = false) {
55
79
  const data = await this.settingRepository.find();
@@ -1 +1 @@
1
- {"version":3,"file":"setting.service.js","sourceRoot":"","sources":["../../../src/modules/setting/setting.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setting.service.js","sourceRoot":"","sources":["../../../src/modules/setting/setting.service.ts"],"names":[],"mappings":"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"}