@weconjs/core 0.1.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +460 -41
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +6 -8
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +30 -21
- package/dist/context.js.map +1 -1
- package/dist/database/index.d.ts +108 -5
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +148 -12
- package/dist/database/index.js.map +1 -1
- package/dist/devtools/controllers/config.controller.d.ts +28 -0
- package/dist/devtools/controllers/config.controller.d.ts.map +1 -0
- package/dist/devtools/controllers/config.controller.js +100 -0
- package/dist/devtools/controllers/config.controller.js.map +1 -0
- package/dist/devtools/controllers/i18n.controller.d.ts +22 -0
- package/dist/devtools/controllers/i18n.controller.d.ts.map +1 -0
- package/dist/devtools/controllers/i18n.controller.js +93 -0
- package/dist/devtools/controllers/i18n.controller.js.map +1 -0
- package/dist/devtools/controllers/modules.controller.d.ts +16 -0
- package/dist/devtools/controllers/modules.controller.d.ts.map +1 -0
- package/dist/devtools/controllers/modules.controller.js +73 -0
- package/dist/devtools/controllers/modules.controller.js.map +1 -0
- package/dist/devtools/controllers/routes.controller.d.ts +13 -0
- package/dist/devtools/controllers/routes.controller.d.ts.map +1 -0
- package/dist/devtools/controllers/routes.controller.js +32 -0
- package/dist/devtools/controllers/routes.controller.js.map +1 -0
- package/dist/devtools/index.d.ts +28 -0
- package/dist/devtools/index.d.ts.map +1 -0
- package/dist/devtools/index.js +66 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/devtools/middleware.d.ts +11 -0
- package/dist/devtools/middleware.d.ts.map +1 -0
- package/dist/devtools/middleware.js +30 -0
- package/dist/devtools/middleware.js.map +1 -0
- package/dist/devtools/types.d.ts +59 -0
- package/dist/devtools/types.d.ts.map +1 -0
- package/dist/devtools/types.js +5 -0
- package/dist/devtools/types.js.map +1 -0
- package/dist/errors/ConfigError.d.ts +6 -0
- package/dist/errors/ConfigError.d.ts.map +1 -0
- package/dist/errors/ConfigError.js +16 -0
- package/dist/errors/ConfigError.js.map +1 -0
- package/dist/errors/RequestError.d.ts +6 -0
- package/dist/errors/RequestError.d.ts.map +1 -0
- package/dist/errors/RequestError.js +16 -0
- package/dist/errors/RequestError.js.map +1 -0
- package/dist/errors/index.d.ts +9 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +5 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +15 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -3
- package/dist/index.js.map +1 -1
- package/dist/logger/index.d.ts +102 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +147 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/module/index.d.ts +6 -0
- package/dist/module/index.d.ts.map +1 -0
- package/dist/module/index.js +5 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/module-loader.d.ts +60 -0
- package/dist/module/module-loader.d.ts.map +1 -0
- package/dist/module/module-loader.js +119 -0
- package/dist/module/module-loader.js.map +1 -0
- package/dist/routing/ErrorCatcher.d.ts +18 -0
- package/dist/routing/ErrorCatcher.d.ts.map +1 -0
- package/dist/routing/ErrorCatcher.js +50 -0
- package/dist/routing/ErrorCatcher.js.map +1 -0
- package/dist/routing/RaiMatcher.d.ts +27 -0
- package/dist/routing/RaiMatcher.d.ts.map +1 -0
- package/dist/routing/RaiMatcher.js +127 -0
- package/dist/routing/RaiMatcher.js.map +1 -0
- package/dist/routing/Route.d.ts +28 -0
- package/dist/routing/Route.d.ts.map +1 -0
- package/dist/routing/Route.js +125 -0
- package/dist/routing/Route.js.map +1 -0
- package/dist/routing/Routes.d.ts +31 -0
- package/dist/routing/Routes.d.ts.map +1 -0
- package/dist/routing/Routes.js +151 -0
- package/dist/routing/Routes.js.map +1 -0
- package/dist/routing/RoutesParam.d.ts +29 -0
- package/dist/routing/RoutesParam.d.ts.map +1 -0
- package/dist/routing/RoutesParam.js +113 -0
- package/dist/routing/RoutesParam.js.map +1 -0
- package/dist/routing/Wecon.d.ts +66 -0
- package/dist/routing/Wecon.d.ts.map +1 -0
- package/dist/routing/Wecon.js +248 -0
- package/dist/routing/Wecon.js.map +1 -0
- package/dist/routing/index.d.ts +9 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +7 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/server/index.d.ts +162 -10
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +339 -25
- package/dist/server/index.js.map +1 -1
- package/dist/types.d.ts +75 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +21 -4
package/README.md
CHANGED
|
@@ -5,6 +5,19 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/@weconjs/core)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
|
+
## Table of Contents
|
|
9
|
+
|
|
10
|
+
- [Installation](#installation)
|
|
11
|
+
- [Features](#features)
|
|
12
|
+
- [Quick Start](#quick-start)
|
|
13
|
+
- [Configuration System](#configuration-system)
|
|
14
|
+
- [Module System](#module-system)
|
|
15
|
+
- [Server Factory](#server-factory)
|
|
16
|
+
- [Database Integration](#database-integration)
|
|
17
|
+
- [Logging](#logging)
|
|
18
|
+
- [API Reference](#api-reference)
|
|
19
|
+
- [Testing](#testing)
|
|
20
|
+
|
|
8
21
|
## Installation
|
|
9
22
|
|
|
10
23
|
```bash
|
|
@@ -13,18 +26,36 @@ npm install @weconjs/core
|
|
|
13
26
|
yarn add @weconjs/core
|
|
14
27
|
```
|
|
15
28
|
|
|
29
|
+
### Optional Dependencies
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Winston logging with daily file rotation
|
|
33
|
+
npm install winston winston-daily-rotate-file
|
|
34
|
+
|
|
35
|
+
# Field-level access control for Mongoose
|
|
36
|
+
npm install @weconjs/mongoose-field-shield
|
|
37
|
+
```
|
|
38
|
+
|
|
16
39
|
## Features
|
|
17
40
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
41
|
+
| Feature | Description |
|
|
42
|
+
|---------|-------------|
|
|
43
|
+
| **Configuration System** | Mode-based configuration with inheritance (development, staging, production) |
|
|
44
|
+
| **Module System** | Auto-discovery, dependency resolution, and lifecycle hooks |
|
|
45
|
+
| **i18n Support** | Automatic translation file loading from module directories |
|
|
46
|
+
| **Socket.IO Integration** | Auto-discover and register socket handlers and middleware |
|
|
47
|
+
| **Database Connection** | MongoDB/Mongoose with URI builders, plugins, retry logic |
|
|
48
|
+
| **Server Factory** | Complete Express bootstrap with HTTPS, graceful shutdown |
|
|
49
|
+
| **Winston Logger** | Production-ready logging with console and file rotation |
|
|
50
|
+
| **Response Helpers** | Standardized API responses via `res.respond()` |
|
|
51
|
+
| **HTTPS Support** | Built-in SSL/TLS certificate loading and validation |
|
|
52
|
+
| **Graceful Shutdown** | Proper SIGTERM/SIGINT handling with cleanup hooks |
|
|
53
|
+
|
|
54
|
+
---
|
|
24
55
|
|
|
25
56
|
## Quick Start
|
|
26
57
|
|
|
27
|
-
###
|
|
58
|
+
### 1. Create Configuration File
|
|
28
59
|
|
|
29
60
|
```typescript
|
|
30
61
|
// wecon.config.ts
|
|
@@ -35,94 +66,482 @@ export default defineConfig({
|
|
|
35
66
|
name: 'my-api',
|
|
36
67
|
version: '1.0.0',
|
|
37
68
|
},
|
|
38
|
-
port: 3000,
|
|
39
69
|
modes: {
|
|
40
70
|
development: {
|
|
41
|
-
|
|
71
|
+
port: 3000,
|
|
72
|
+
database: {
|
|
73
|
+
mongoose: {
|
|
74
|
+
protocol: 'mongodb',
|
|
75
|
+
host: 'localhost',
|
|
76
|
+
port: 27017,
|
|
77
|
+
database: 'myapp_dev',
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
logging: { level: 'debug' },
|
|
42
81
|
},
|
|
43
82
|
production: {
|
|
44
|
-
|
|
83
|
+
port: 8080,
|
|
84
|
+
database: {
|
|
85
|
+
mongoose: {
|
|
86
|
+
protocol: 'mongodb+srv',
|
|
87
|
+
host: process.env.DB_HOST,
|
|
88
|
+
database: 'myapp',
|
|
89
|
+
username: process.env.DB_USER,
|
|
90
|
+
password: process.env.DB_PASSWORD,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
logging: {
|
|
94
|
+
level: 'info',
|
|
95
|
+
enableFile: true,
|
|
96
|
+
directory: './logs',
|
|
97
|
+
},
|
|
98
|
+
https: {
|
|
99
|
+
enabled: true,
|
|
100
|
+
keyPath: './certs/privkey.pem',
|
|
101
|
+
certPath: './certs/fullchain.pem',
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
modules: ['./src/modules/users', './src/modules/auth'],
|
|
106
|
+
features: {
|
|
107
|
+
i18n: {
|
|
108
|
+
enabled: true,
|
|
109
|
+
defaultLocale: 'en',
|
|
110
|
+
supported: ['en', 'es', 'fr'],
|
|
111
|
+
},
|
|
112
|
+
fieldShield: {
|
|
113
|
+
enabled: true,
|
|
114
|
+
strict: true,
|
|
45
115
|
},
|
|
46
116
|
},
|
|
47
117
|
});
|
|
48
118
|
```
|
|
49
119
|
|
|
50
|
-
### Define
|
|
120
|
+
### 2. Define a Module
|
|
51
121
|
|
|
52
122
|
```typescript
|
|
53
123
|
// src/modules/users/users.module.ts
|
|
54
124
|
import { defineModule } from '@weconjs/core';
|
|
125
|
+
import { Routes, Route } from '@weconjs/lib';
|
|
126
|
+
import { userController } from './controllers/user.controller.js';
|
|
127
|
+
|
|
128
|
+
const usersRoutes = new Routes({
|
|
129
|
+
prefix: '/users',
|
|
130
|
+
routes: [
|
|
131
|
+
new Route({ method: 'get', path: '/', handler: userController.findAll }),
|
|
132
|
+
new Route({ method: 'get', path: '/:id', handler: userController.findById }),
|
|
133
|
+
new Route({ method: 'post', path: '/', handler: userController.create }),
|
|
134
|
+
new Route({ method: 'put', path: '/:id', handler: userController.update }),
|
|
135
|
+
new Route({ method: 'delete', path: '/:id', handler: userController.delete }),
|
|
136
|
+
],
|
|
137
|
+
});
|
|
55
138
|
|
|
56
139
|
export default defineModule({
|
|
57
140
|
name: 'users',
|
|
58
141
|
description: 'User management module',
|
|
59
|
-
routes:
|
|
142
|
+
routes: usersRoutes,
|
|
143
|
+
dependencies: ['auth'], // Load auth module first
|
|
60
144
|
onInit: async (ctx) => {
|
|
61
|
-
|
|
145
|
+
ctx.logger.info('Users module initialized');
|
|
146
|
+
// Setup module-specific resources
|
|
62
147
|
},
|
|
63
148
|
});
|
|
64
149
|
```
|
|
65
150
|
|
|
66
|
-
### Create Application
|
|
151
|
+
### 3. Create Application Entry Point
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
// src/main.ts
|
|
155
|
+
import path from 'path';
|
|
156
|
+
import {
|
|
157
|
+
createWecon,
|
|
158
|
+
loadConfig,
|
|
159
|
+
buildUriFromConfig,
|
|
160
|
+
type WeconContext
|
|
161
|
+
} from '@weconjs/core';
|
|
162
|
+
|
|
163
|
+
async function main() {
|
|
164
|
+
// Load configuration with mode resolution
|
|
165
|
+
const config = await loadConfig(
|
|
166
|
+
path.resolve(process.cwd(), 'wecon.config.ts'),
|
|
167
|
+
process.env.NODE_ENV
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
console.log(`Starting ${config.app.name} v${config.app.version}`);
|
|
171
|
+
console.log(`Mode: ${config.mode}`);
|
|
172
|
+
|
|
173
|
+
// Dynamic import after config is loaded
|
|
174
|
+
const { wecon, modules } = await import('./bootstrap.js');
|
|
175
|
+
|
|
176
|
+
// Create and configure the application
|
|
177
|
+
const app = await createWecon({
|
|
178
|
+
config,
|
|
179
|
+
modules: [...modules],
|
|
180
|
+
wecon,
|
|
181
|
+
middleware: [], // Your custom middleware array
|
|
182
|
+
database: {
|
|
183
|
+
enabled: true,
|
|
184
|
+
uri: buildUriFromConfig(config.database),
|
|
185
|
+
plugins: [], // Global Mongoose plugins
|
|
186
|
+
debug: config.mode === 'development',
|
|
187
|
+
},
|
|
188
|
+
plugins: {
|
|
189
|
+
fieldShield: config.features?.fieldShield?.enabled
|
|
190
|
+
? { strict: config.features.fieldShield.strict ?? true }
|
|
191
|
+
: false,
|
|
192
|
+
},
|
|
193
|
+
i18n: {
|
|
194
|
+
enabled: config.features?.i18n?.enabled ?? false,
|
|
195
|
+
modulesDir: './src/modules',
|
|
196
|
+
},
|
|
197
|
+
logger: {
|
|
198
|
+
useWinston: true,
|
|
199
|
+
level: config.logging?.level ?? 'info',
|
|
200
|
+
appName: config.app.name,
|
|
201
|
+
enableFile: config.logging?.enableFile ?? false,
|
|
202
|
+
logsDir: config.logging?.directory ?? './logs',
|
|
203
|
+
},
|
|
204
|
+
hooks: {
|
|
205
|
+
onBoot: async (ctx: WeconContext) => {
|
|
206
|
+
ctx.logger.info('Application ready to receive requests');
|
|
207
|
+
},
|
|
208
|
+
onShutdown: async (ctx: WeconContext) => {
|
|
209
|
+
ctx.logger.info('Application shutting down...');
|
|
210
|
+
// Cleanup resources, close connections
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
await app.start();
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
main().catch((err) => {
|
|
219
|
+
console.error('Failed to start application:', err);
|
|
220
|
+
process.exit(1);
|
|
221
|
+
});
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Configuration System
|
|
227
|
+
|
|
228
|
+
### Mode-Based Configuration
|
|
229
|
+
|
|
230
|
+
Define environment-specific settings that inherit from a base configuration:
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
import { defineConfig } from '@weconjs/core';
|
|
234
|
+
|
|
235
|
+
export default defineConfig({
|
|
236
|
+
// Base configuration (shared across all modes)
|
|
237
|
+
app: { name: 'my-api', version: '1.0.0' },
|
|
238
|
+
|
|
239
|
+
// Mode-specific overrides
|
|
240
|
+
modes: {
|
|
241
|
+
development: {
|
|
242
|
+
port: 3000,
|
|
243
|
+
logging: { level: 'debug' },
|
|
244
|
+
},
|
|
245
|
+
staging: {
|
|
246
|
+
port: 3000,
|
|
247
|
+
logging: { level: 'info' },
|
|
248
|
+
},
|
|
249
|
+
production: {
|
|
250
|
+
port: 8080,
|
|
251
|
+
logging: { level: 'warn', enableFile: true },
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Loading Configuration
|
|
258
|
+
|
|
259
|
+
```typescript
|
|
260
|
+
import { loadConfig, resolveConfig } from '@weconjs/core';
|
|
261
|
+
|
|
262
|
+
// Load and resolve for current environment
|
|
263
|
+
const config = await loadConfig('./wecon.config.ts', process.env.NODE_ENV);
|
|
264
|
+
|
|
265
|
+
// Or load and resolve separately
|
|
266
|
+
const rawConfig = await loadConfig('./wecon.config.ts');
|
|
267
|
+
const resolved = resolveConfig(rawConfig, 'production');
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## Module System
|
|
273
|
+
|
|
274
|
+
### Module Definition
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
import { defineModule, type WeconContext } from '@weconjs/core';
|
|
278
|
+
|
|
279
|
+
export default defineModule({
|
|
280
|
+
name: 'auth',
|
|
281
|
+
description: 'Authentication and authorization',
|
|
282
|
+
routes: authRoutes,
|
|
283
|
+
|
|
284
|
+
// Declare dependencies (loaded first)
|
|
285
|
+
dependencies: ['database-seeds'],
|
|
286
|
+
|
|
287
|
+
// Lifecycle hooks
|
|
288
|
+
onInit: async (module, ctx: WeconContext) => {
|
|
289
|
+
// Called when module is registered
|
|
290
|
+
ctx.logger.debug(`${module.name} module initializing`);
|
|
291
|
+
},
|
|
292
|
+
|
|
293
|
+
onBoot: async (module, ctx: WeconContext) => {
|
|
294
|
+
// Called after all modules initialized, before server starts
|
|
295
|
+
await seedDefaultRoles(ctx);
|
|
296
|
+
},
|
|
297
|
+
|
|
298
|
+
onShutdown: async (module, ctx: WeconContext) => {
|
|
299
|
+
// Called on graceful shutdown
|
|
300
|
+
await cleanupSessions();
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Module Discovery
|
|
306
|
+
|
|
307
|
+
The framework automatically resolves dependencies using topological sorting:
|
|
67
308
|
|
|
68
309
|
```typescript
|
|
69
|
-
|
|
70
|
-
import { createWecon, resolveConfig, loadConfig, createDatabaseConnection } from '@weconjs/core';
|
|
310
|
+
import { resolveModuleDependencies, loadModule } from '@weconjs/core';
|
|
71
311
|
|
|
72
|
-
const
|
|
73
|
-
|
|
312
|
+
const modules = await Promise.all([
|
|
313
|
+
loadModule('./src/modules/users'),
|
|
314
|
+
loadModule('./src/modules/auth'),
|
|
315
|
+
loadModule('./src/modules/orders'),
|
|
316
|
+
]);
|
|
317
|
+
|
|
318
|
+
// Returns modules in correct initialization order
|
|
319
|
+
const sorted = resolveModuleDependencies(modules);
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Server Factory
|
|
325
|
+
|
|
326
|
+
### Basic Usage
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
import { createWecon } from '@weconjs/core';
|
|
74
330
|
|
|
75
331
|
const app = await createWecon({
|
|
76
332
|
config,
|
|
77
|
-
modules
|
|
333
|
+
modules,
|
|
334
|
+
wecon, // @weconjs/lib instance
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
await app.start();
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Full Configuration
|
|
341
|
+
|
|
342
|
+
```typescript
|
|
343
|
+
const app = await createWecon({
|
|
344
|
+
config,
|
|
345
|
+
modules,
|
|
346
|
+
wecon,
|
|
347
|
+
|
|
348
|
+
// Custom Express middleware
|
|
349
|
+
middleware: [cors(), helmet(), rateLimit()],
|
|
350
|
+
|
|
351
|
+
// Database configuration
|
|
352
|
+
database: {
|
|
353
|
+
enabled: true,
|
|
354
|
+
uri: 'mongodb://localhost/myapp',
|
|
355
|
+
plugins: [timestampPlugin, auditPlugin],
|
|
356
|
+
debug: true,
|
|
357
|
+
retryAttempts: 5,
|
|
358
|
+
retryDelay: 2000,
|
|
359
|
+
},
|
|
360
|
+
|
|
361
|
+
// FieldShield integration
|
|
362
|
+
plugins: {
|
|
363
|
+
fieldShield: { strict: true },
|
|
364
|
+
},
|
|
365
|
+
|
|
366
|
+
// i18n configuration
|
|
367
|
+
i18n: {
|
|
368
|
+
enabled: true,
|
|
369
|
+
modulesDir: './src/modules',
|
|
370
|
+
},
|
|
371
|
+
|
|
372
|
+
// Logger configuration
|
|
373
|
+
logger: {
|
|
374
|
+
useWinston: true,
|
|
375
|
+
level: 'info',
|
|
376
|
+
appName: 'my-api',
|
|
377
|
+
enableFile: true,
|
|
378
|
+
logsDir: './logs',
|
|
379
|
+
},
|
|
380
|
+
|
|
381
|
+
// Lifecycle hooks
|
|
78
382
|
hooks: {
|
|
79
|
-
onBoot: async () => {
|
|
80
|
-
|
|
81
|
-
},
|
|
383
|
+
onBoot: async (ctx) => { /* Server starting */ },
|
|
384
|
+
onShutdown: async (ctx) => { /* Cleanup */ },
|
|
385
|
+
onModuleInit: async (module, ctx) => { /* Module loaded */ },
|
|
82
386
|
},
|
|
83
387
|
});
|
|
388
|
+
```
|
|
84
389
|
|
|
85
|
-
|
|
390
|
+
### Response Helpers
|
|
391
|
+
|
|
392
|
+
The server factory installs `res.respond()` on all Express responses:
|
|
393
|
+
|
|
394
|
+
```typescript
|
|
395
|
+
// Controller example
|
|
396
|
+
async findAll(req: Request, res: Response) {
|
|
397
|
+
const users = await userService.findAll();
|
|
398
|
+
|
|
399
|
+
res.respond({
|
|
400
|
+
success: true,
|
|
401
|
+
data: users,
|
|
402
|
+
meta: { total: users.length },
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// Error response
|
|
407
|
+
res.respond({
|
|
408
|
+
success: false,
|
|
409
|
+
message: req.t('user_not_found'),
|
|
410
|
+
errors: [{ code: 'NOT_FOUND', field: 'id' }],
|
|
411
|
+
}, 404);
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Database Integration
|
|
417
|
+
|
|
418
|
+
### URI Builder
|
|
419
|
+
|
|
420
|
+
Build MongoDB connection strings from configuration:
|
|
421
|
+
|
|
422
|
+
```typescript
|
|
423
|
+
import { buildMongoUri, buildUriFromConfig } from '@weconjs/core';
|
|
424
|
+
|
|
425
|
+
// From individual parts
|
|
426
|
+
const uri = buildMongoUri({
|
|
427
|
+
protocol: 'mongodb+srv',
|
|
428
|
+
host: 'cluster.mongodb.net',
|
|
429
|
+
database: 'myapp',
|
|
430
|
+
username: 'user',
|
|
431
|
+
password: 'pass',
|
|
432
|
+
options: { retryWrites: 'true', w: 'majority' },
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
// From config object
|
|
436
|
+
const uri = buildUriFromConfig(config.database);
|
|
86
437
|
```
|
|
87
438
|
|
|
439
|
+
### Database Connection
|
|
440
|
+
|
|
441
|
+
```typescript
|
|
442
|
+
import { createDatabaseConnection } from '@weconjs/core';
|
|
443
|
+
|
|
444
|
+
const db = await createDatabaseConnection({
|
|
445
|
+
uri: 'mongodb://localhost/myapp',
|
|
446
|
+
plugins: [timestampPlugin],
|
|
447
|
+
debug: process.env.NODE_ENV === 'development',
|
|
448
|
+
retryAttempts: 5,
|
|
449
|
+
retryDelay: 2000,
|
|
450
|
+
});
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## Logging
|
|
456
|
+
|
|
457
|
+
### Winston Logger
|
|
458
|
+
|
|
459
|
+
```typescript
|
|
460
|
+
import { createWinstonLogger, createConsoleLogger } from '@weconjs/core';
|
|
461
|
+
|
|
462
|
+
// Winston with file rotation (requires winston + winston-daily-rotate-file)
|
|
463
|
+
const logger = await createWinstonLogger({
|
|
464
|
+
level: 'info',
|
|
465
|
+
appName: 'my-api',
|
|
466
|
+
enableFile: true,
|
|
467
|
+
logsDir: './logs',
|
|
468
|
+
});
|
|
469
|
+
|
|
470
|
+
// Console-only fallback
|
|
471
|
+
const logger = createConsoleLogger({
|
|
472
|
+
level: 'debug',
|
|
473
|
+
appName: 'my-api',
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
logger.info('Server started', { port: 3000 });
|
|
477
|
+
logger.error('Database connection failed', { error: err.message });
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
88
482
|
## API Reference
|
|
89
483
|
|
|
90
484
|
### Configuration
|
|
91
485
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
486
|
+
| Function | Description |
|
|
487
|
+
|----------|-------------|
|
|
488
|
+
| `defineConfig(config)` | Define application configuration with TypeScript support |
|
|
489
|
+
| `resolveConfig(config, mode)` | Resolve configuration for a specific mode |
|
|
490
|
+
| `loadConfig(path, mode?)` | Load configuration file and optionally resolve mode |
|
|
95
491
|
|
|
96
492
|
### Modules
|
|
97
493
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
494
|
+
| Function | Description |
|
|
495
|
+
|----------|-------------|
|
|
496
|
+
| `defineModule(definition)` | Define a module with routes and lifecycle hooks |
|
|
497
|
+
| `loadModule(path)` | Load a module from file path |
|
|
498
|
+
| `resolveModuleDependencies(modules)` | Sort modules by dependencies |
|
|
101
499
|
|
|
102
500
|
### Server
|
|
103
501
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
502
|
+
| Function | Description |
|
|
503
|
+
|----------|-------------|
|
|
504
|
+
| `createWecon(options)` | Create and configure Wecon application |
|
|
107
505
|
|
|
108
|
-
###
|
|
506
|
+
### Database
|
|
507
|
+
|
|
508
|
+
| Function | Description |
|
|
509
|
+
|----------|-------------|
|
|
510
|
+
| `createDatabaseConnection(options)` | Create MongoDB connection with retry logic |
|
|
511
|
+
| `buildMongoUri(parts)` | Build MongoDB URI from parts |
|
|
512
|
+
| `buildUriFromConfig(config)` | Build URI from database config object |
|
|
109
513
|
|
|
110
|
-
|
|
111
|
-
- `discoverSocketHandlers(modulesDir)` - Find socket handlers
|
|
112
|
-
- `discoverSocketMiddleware(modulesDir)` - Find socket middleware
|
|
514
|
+
### Logging
|
|
113
515
|
|
|
114
|
-
|
|
516
|
+
| Function | Description |
|
|
517
|
+
|----------|-------------|
|
|
518
|
+
| `createWinstonLogger(options)` | Create Winston logger with file rotation |
|
|
519
|
+
| `createConsoleLogger(options)` | Create console-based logger |
|
|
520
|
+
|
|
521
|
+
### Socket.IO
|
|
115
522
|
|
|
116
|
-
|
|
117
|
-
|
|
523
|
+
| Function | Description |
|
|
524
|
+
|----------|-------------|
|
|
525
|
+
| `setupSocketIO(server, modulesDir, options)` | Setup Socket.IO with auto-discovery |
|
|
526
|
+
| `discoverSocketHandlers(modulesDir)` | Find socket handlers in modules |
|
|
527
|
+
| `discoverSocketMiddleware(modulesDir)` | Find socket middleware in modules |
|
|
528
|
+
|
|
529
|
+
---
|
|
118
530
|
|
|
119
531
|
## Testing
|
|
120
532
|
|
|
121
533
|
```bash
|
|
122
|
-
yarn test
|
|
123
|
-
yarn build
|
|
534
|
+
yarn test # Run all 82 unit tests
|
|
535
|
+
yarn build # Build TypeScript to dist/
|
|
124
536
|
```
|
|
125
537
|
|
|
538
|
+
## Requirements
|
|
539
|
+
|
|
540
|
+
- Node.js >= 18.0.0
|
|
541
|
+
- TypeScript >= 5.0.0
|
|
542
|
+
- Express 5.x
|
|
543
|
+
- Mongoose 8.x
|
|
544
|
+
|
|
126
545
|
## License
|
|
127
546
|
|
|
128
547
|
MIT © [weconjs](https://github.com/weconjs)
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAc,MAAM,YAAY,CAAC;AAiC1E;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAiB7D;AAwED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,cAAc,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAc,MAAM,YAAY,CAAC;AAiC1E;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAiB7D;AAwED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,cAAc,CAqChB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CAYzB"}
|
package/dist/config.js
CHANGED
|
@@ -143,6 +143,7 @@ export function resolveConfig(config, mode) {
|
|
|
143
143
|
https: { ...DEFAULT_CONFIG.https },
|
|
144
144
|
features: { ...DEFAULT_CONFIG.features },
|
|
145
145
|
modules: [...(config.modules ?? [])],
|
|
146
|
+
moduleConfigs: { ...(config.moduleConfigs ?? {}) },
|
|
146
147
|
};
|
|
147
148
|
// Apply mode-specific configuration if defined
|
|
148
149
|
if (config.modes && config.modes[targetMode]) {
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;GAEG;AACH,MAAM,cAAc,GAA4B;IAC9C,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE;QACR,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE;YACR,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,WAAW;SACtB;KACF;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;QACb,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,KAAK;KAClB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;KACf;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QAC9C,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;QAC5C,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;KAC3B;IACD,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,yDAAyD;IACzD,OAAO;QACL,GAAG,EAAE;YACH,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;YACrB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO;SACvC;QACD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;KAC1B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAChB,MAAS,EACT,MAAkB;IAElB,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAO,CAAC;IAElC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAc,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,GAAc,CAAC,CAAC;QAE3C,IACE,WAAW;YACX,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3B,WAAW;YACX,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAC3B,CAAC;YACA,MAAkC,CAAC,GAAG,CAAC,GAAG,SAAS,CAClD,WAAqB,EACrB,WAAqB,CACtB,CAAC;QACJ,CAAC;aAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACpC,MAAkC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAClB,KAAiC,EACjC,QAAgB,EAChB,UAAuB,IAAI,GAAG,EAAE;IAEhC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,+CAA+C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACrE,MAAM,CACP,OAAO,QAAQ,EAAE,CACnB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,8BAA8B,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEtB,yDAAyD;IACzD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,kBAAkB,EAAE,GAAG,IAAI,CAAC;QACnD,OAAO,SAAS,CAAC,UAAU,EAAE,kBAAyC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAmB,EACnB,IAAa;IAEb,MAAM,UAAU,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;IAEjE,sBAAsB;IACtB,IAAI,QAAQ,GAAmB;QAC7B,GAAG,EAAE;YACH,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;YACrB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO;SACvC;QACD,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,cAAc,CAAC,IAAK;QAC1B,QAAQ,EAAE,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE;QACxC,OAAO,EAAE,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE;QACtC,KAAK,EAAE,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE;QAClC,QAAQ,EAAE,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE;QACxC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -6,24 +6,22 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { Application } from "express";
|
|
8
8
|
import type { Server } from "socket.io";
|
|
9
|
+
import type { z } from "zod";
|
|
9
10
|
import type { WeconContext, ResolvedConfig, WeconLogger } from "./types.js";
|
|
10
11
|
/**
|
|
11
|
-
* Create a Wecon application context
|
|
12
|
-
*
|
|
13
|
-
* @param options - Context options
|
|
14
|
-
* @returns The application context
|
|
12
|
+
* Create a Wecon application context.
|
|
13
|
+
* Includes service registry and typed module config access.
|
|
15
14
|
*/
|
|
16
15
|
export declare function createContext(options: {
|
|
17
16
|
config: ResolvedConfig;
|
|
18
17
|
app: Application;
|
|
19
18
|
io?: Server;
|
|
20
19
|
logger?: WeconLogger;
|
|
20
|
+
/** Zod schemas for module configs (used by setModuleConfig validation) */
|
|
21
|
+
moduleSchemas?: Map<string, z.ZodType>;
|
|
21
22
|
}): WeconContext;
|
|
22
23
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* @param config - The resolved configuration
|
|
26
|
-
* @param customLogger - Optional custom logger implementation
|
|
24
|
+
* Create a level-aware logger from config.
|
|
27
25
|
*/
|
|
28
26
|
export declare function createLogger(config: ResolvedConfig, customLogger?: WeconLogger): WeconLogger;
|
|
29
27
|
//# sourceMappingURL=context.d.ts.map
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,WAAW,EAEZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,WAAW,EAEZ,MAAM,YAAY,CAAC;AASpB;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,WAAW,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;CACxC,GAAG,YAAY,CAgDf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,YAAY,CAAC,EAAE,WAAW,GACzB,WAAW,CAuBb"}
|