@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.
Files changed (104) hide show
  1. package/README.md +460 -41
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +1 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/context.d.ts +6 -8
  6. package/dist/context.d.ts.map +1 -1
  7. package/dist/context.js +30 -21
  8. package/dist/context.js.map +1 -1
  9. package/dist/database/index.d.ts +108 -5
  10. package/dist/database/index.d.ts.map +1 -1
  11. package/dist/database/index.js +148 -12
  12. package/dist/database/index.js.map +1 -1
  13. package/dist/devtools/controllers/config.controller.d.ts +28 -0
  14. package/dist/devtools/controllers/config.controller.d.ts.map +1 -0
  15. package/dist/devtools/controllers/config.controller.js +100 -0
  16. package/dist/devtools/controllers/config.controller.js.map +1 -0
  17. package/dist/devtools/controllers/i18n.controller.d.ts +22 -0
  18. package/dist/devtools/controllers/i18n.controller.d.ts.map +1 -0
  19. package/dist/devtools/controllers/i18n.controller.js +93 -0
  20. package/dist/devtools/controllers/i18n.controller.js.map +1 -0
  21. package/dist/devtools/controllers/modules.controller.d.ts +16 -0
  22. package/dist/devtools/controllers/modules.controller.d.ts.map +1 -0
  23. package/dist/devtools/controllers/modules.controller.js +73 -0
  24. package/dist/devtools/controllers/modules.controller.js.map +1 -0
  25. package/dist/devtools/controllers/routes.controller.d.ts +13 -0
  26. package/dist/devtools/controllers/routes.controller.d.ts.map +1 -0
  27. package/dist/devtools/controllers/routes.controller.js +32 -0
  28. package/dist/devtools/controllers/routes.controller.js.map +1 -0
  29. package/dist/devtools/index.d.ts +28 -0
  30. package/dist/devtools/index.d.ts.map +1 -0
  31. package/dist/devtools/index.js +66 -0
  32. package/dist/devtools/index.js.map +1 -0
  33. package/dist/devtools/middleware.d.ts +11 -0
  34. package/dist/devtools/middleware.d.ts.map +1 -0
  35. package/dist/devtools/middleware.js +30 -0
  36. package/dist/devtools/middleware.js.map +1 -0
  37. package/dist/devtools/types.d.ts +59 -0
  38. package/dist/devtools/types.d.ts.map +1 -0
  39. package/dist/devtools/types.js +5 -0
  40. package/dist/devtools/types.js.map +1 -0
  41. package/dist/errors/ConfigError.d.ts +6 -0
  42. package/dist/errors/ConfigError.d.ts.map +1 -0
  43. package/dist/errors/ConfigError.js +16 -0
  44. package/dist/errors/ConfigError.js.map +1 -0
  45. package/dist/errors/RequestError.d.ts +6 -0
  46. package/dist/errors/RequestError.d.ts.map +1 -0
  47. package/dist/errors/RequestError.js +16 -0
  48. package/dist/errors/RequestError.js.map +1 -0
  49. package/dist/errors/index.d.ts +9 -0
  50. package/dist/errors/index.d.ts.map +1 -0
  51. package/dist/errors/index.js +5 -0
  52. package/dist/errors/index.js.map +1 -0
  53. package/dist/index.d.ts +15 -6
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +13 -3
  56. package/dist/index.js.map +1 -1
  57. package/dist/logger/index.d.ts +102 -0
  58. package/dist/logger/index.d.ts.map +1 -0
  59. package/dist/logger/index.js +147 -0
  60. package/dist/logger/index.js.map +1 -0
  61. package/dist/module/index.d.ts +6 -0
  62. package/dist/module/index.d.ts.map +1 -0
  63. package/dist/module/index.js +5 -0
  64. package/dist/module/index.js.map +1 -0
  65. package/dist/module/module-loader.d.ts +60 -0
  66. package/dist/module/module-loader.d.ts.map +1 -0
  67. package/dist/module/module-loader.js +119 -0
  68. package/dist/module/module-loader.js.map +1 -0
  69. package/dist/routing/ErrorCatcher.d.ts +18 -0
  70. package/dist/routing/ErrorCatcher.d.ts.map +1 -0
  71. package/dist/routing/ErrorCatcher.js +50 -0
  72. package/dist/routing/ErrorCatcher.js.map +1 -0
  73. package/dist/routing/RaiMatcher.d.ts +27 -0
  74. package/dist/routing/RaiMatcher.d.ts.map +1 -0
  75. package/dist/routing/RaiMatcher.js +127 -0
  76. package/dist/routing/RaiMatcher.js.map +1 -0
  77. package/dist/routing/Route.d.ts +28 -0
  78. package/dist/routing/Route.d.ts.map +1 -0
  79. package/dist/routing/Route.js +125 -0
  80. package/dist/routing/Route.js.map +1 -0
  81. package/dist/routing/Routes.d.ts +31 -0
  82. package/dist/routing/Routes.d.ts.map +1 -0
  83. package/dist/routing/Routes.js +151 -0
  84. package/dist/routing/Routes.js.map +1 -0
  85. package/dist/routing/RoutesParam.d.ts +29 -0
  86. package/dist/routing/RoutesParam.d.ts.map +1 -0
  87. package/dist/routing/RoutesParam.js +113 -0
  88. package/dist/routing/RoutesParam.js.map +1 -0
  89. package/dist/routing/Wecon.d.ts +66 -0
  90. package/dist/routing/Wecon.d.ts.map +1 -0
  91. package/dist/routing/Wecon.js +248 -0
  92. package/dist/routing/Wecon.js.map +1 -0
  93. package/dist/routing/index.d.ts +9 -0
  94. package/dist/routing/index.d.ts.map +1 -0
  95. package/dist/routing/index.js +7 -0
  96. package/dist/routing/index.js.map +1 -0
  97. package/dist/server/index.d.ts +162 -10
  98. package/dist/server/index.d.ts.map +1 -1
  99. package/dist/server/index.js +339 -25
  100. package/dist/server/index.js.map +1 -1
  101. package/dist/types.d.ts +75 -3
  102. package/dist/types.d.ts.map +1 -1
  103. package/dist/types.js +1 -1
  104. package/package.json +21 -4
package/README.md CHANGED
@@ -5,6 +5,19 @@
5
5
  [![npm version](https://img.shields.io/npm/v/@weconjs/core.svg)](https://www.npmjs.com/package/@weconjs/core)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
- - 🔧 **Configuration System** - Mode-based config with inheritance
19
- - 📦 **Module System** - Auto-discovery and dependency resolution
20
- - 🌐 **i18n Support** - Auto-load translations from modules
21
- - 🔌 **Socket.IO Integration** - Auto-discover socket handlers
22
- - 🗄️ **Database Connection** - MongoDB/Mongoose integration
23
- - 🚀 **Server Factory** - Express server setup in one call
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
- ### Define Configuration
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
- database: { uri: 'mongodb://localhost:27017/myapp' },
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
- database: { uri: process.env.DATABASE_URL },
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 Modules
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: userRoutes,
142
+ routes: usersRoutes,
143
+ dependencies: ['auth'], // Load auth module first
60
144
  onInit: async (ctx) => {
61
- console.log('Users module initialized');
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
- // src/index.ts
70
- import { createWecon, resolveConfig, loadConfig, createDatabaseConnection } from '@weconjs/core';
310
+ import { resolveModuleDependencies, loadModule } from '@weconjs/core';
71
311
 
72
- const config = resolveConfig(await loadConfig(), process.env.NODE_ENV);
73
- const db = await createDatabaseConnection({ uri: config.database.uri });
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: [usersModule, authModule],
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
- await db.connect();
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
- await app.start();
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
- - `defineConfig(config)` - Define application configuration
93
- - `resolveConfig(config, mode)` - Resolve config for a specific mode
94
- - `loadConfig()` - Load config from `wecon.config.ts`
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
- - `defineModule(definition)` - Define a module
99
- - `loadModule(path)` - Load a module from file
100
- - `resolveModuleDependencies(modules)` - Topologically sort modules
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
- - `createWecon(options)` - Create Wecon application
105
- - `initI18n(modulesDir)` - Initialize i18n middleware
106
- - `createDatabaseConnection(options)` - Create database connection
502
+ | Function | Description |
503
+ |----------|-------------|
504
+ | `createWecon(options)` | Create and configure Wecon application |
107
505
 
108
- ### Socket.IO
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
- - `setupSocketIO(httpServer, modulesDir, options)` - Setup Socket.IO
111
- - `discoverSocketHandlers(modulesDir)` - Find socket handlers
112
- - `discoverSocketMiddleware(modulesDir)` - Find socket middleware
514
+ ### Logging
113
515
 
114
- ### Context
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
- - `createContext(options)` - Create application context
117
- - `createLogger(options)` - Create logger instance
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 # Run tests
123
- yarn build # Build package
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)
@@ -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,CAoChB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CAYzB"}
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]) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
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
- * Enhance the logger based on configuration
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
@@ -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;AAYpB;;;;;GAKG;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;CACtB,GAAG,YAAY,CAuBf;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,YAAY,CAAC,EAAE,WAAW,GACzB,WAAW,CAiCb"}
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"}