@morojs/moro 1.5.17 → 1.6.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.
Files changed (138) hide show
  1. package/README.md +48 -65
  2. package/dist/core/auth/morojs-adapter.js +12 -16
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/file-loader.d.ts +5 -0
  5. package/dist/core/config/file-loader.js +171 -0
  6. package/dist/core/config/file-loader.js.map +1 -1
  7. package/dist/core/config/index.d.ts +10 -39
  8. package/dist/core/config/index.js +29 -66
  9. package/dist/core/config/index.js.map +1 -1
  10. package/dist/core/config/loader.d.ts +7 -0
  11. package/dist/core/config/loader.js +269 -0
  12. package/dist/core/config/loader.js.map +1 -0
  13. package/dist/core/config/schema.js +31 -41
  14. package/dist/core/config/schema.js.map +1 -1
  15. package/dist/core/config/utils.d.ts +2 -9
  16. package/dist/core/config/utils.js +32 -19
  17. package/dist/core/config/utils.js.map +1 -1
  18. package/dist/core/config/validation.d.ts +17 -0
  19. package/dist/core/config/validation.js +131 -0
  20. package/dist/core/config/validation.js.map +1 -0
  21. package/dist/core/database/adapters/mongodb.d.ts +0 -10
  22. package/dist/core/database/adapters/mongodb.js +2 -23
  23. package/dist/core/database/adapters/mongodb.js.map +1 -1
  24. package/dist/core/database/adapters/mysql.d.ts +0 -11
  25. package/dist/core/database/adapters/mysql.js +0 -1
  26. package/dist/core/database/adapters/mysql.js.map +1 -1
  27. package/dist/core/database/adapters/postgresql.d.ts +1 -9
  28. package/dist/core/database/adapters/postgresql.js +1 -1
  29. package/dist/core/database/adapters/postgresql.js.map +1 -1
  30. package/dist/core/database/adapters/redis.d.ts +0 -9
  31. package/dist/core/database/adapters/redis.js +4 -14
  32. package/dist/core/database/adapters/redis.js.map +1 -1
  33. package/dist/core/framework.d.ts +7 -6
  34. package/dist/core/framework.js +16 -131
  35. package/dist/core/framework.js.map +1 -1
  36. package/dist/core/http/http-server.d.ts +0 -12
  37. package/dist/core/http/http-server.js +23 -151
  38. package/dist/core/http/http-server.js.map +1 -1
  39. package/dist/core/http/router.d.ts +0 -12
  40. package/dist/core/http/router.js +36 -114
  41. package/dist/core/http/router.js.map +1 -1
  42. package/dist/core/logger/filters.js +4 -12
  43. package/dist/core/logger/filters.js.map +1 -1
  44. package/dist/core/logger/index.d.ts +1 -1
  45. package/dist/core/logger/index.js +1 -2
  46. package/dist/core/logger/index.js.map +1 -1
  47. package/dist/core/logger/logger.d.ts +13 -29
  48. package/dist/core/logger/logger.js +203 -380
  49. package/dist/core/logger/logger.js.map +1 -1
  50. package/dist/core/logger/outputs.js +2 -0
  51. package/dist/core/logger/outputs.js.map +1 -1
  52. package/dist/core/middleware/built-in/auth.js +17 -88
  53. package/dist/core/middleware/built-in/auth.js.map +1 -1
  54. package/dist/core/middleware/built-in/cache.js +1 -3
  55. package/dist/core/middleware/built-in/cache.js.map +1 -1
  56. package/dist/core/middleware/built-in/index.d.ts +0 -1
  57. package/dist/core/middleware/built-in/index.js +1 -6
  58. package/dist/core/middleware/built-in/index.js.map +1 -1
  59. package/dist/core/middleware/built-in/request-logger.js +2 -3
  60. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  61. package/dist/core/middleware/built-in/sse.js +7 -9
  62. package/dist/core/middleware/built-in/sse.js.map +1 -1
  63. package/dist/core/modules/auto-discovery.d.ts +0 -17
  64. package/dist/core/modules/auto-discovery.js +12 -367
  65. package/dist/core/modules/auto-discovery.js.map +1 -1
  66. package/dist/core/modules/modules.js +2 -12
  67. package/dist/core/modules/modules.js.map +1 -1
  68. package/dist/core/networking/adapters/ws-adapter.d.ts +1 -1
  69. package/dist/core/networking/adapters/ws-adapter.js +2 -2
  70. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  71. package/dist/core/networking/service-discovery.js +7 -7
  72. package/dist/core/networking/service-discovery.js.map +1 -1
  73. package/dist/core/routing/index.d.ts +0 -20
  74. package/dist/core/routing/index.js +13 -178
  75. package/dist/core/routing/index.js.map +1 -1
  76. package/dist/core/runtime/node-adapter.js +6 -12
  77. package/dist/core/runtime/node-adapter.js.map +1 -1
  78. package/dist/moro.d.ts +0 -48
  79. package/dist/moro.js +148 -456
  80. package/dist/moro.js.map +1 -1
  81. package/dist/types/config.d.ts +2 -58
  82. package/dist/types/core.d.ts +40 -34
  83. package/dist/types/http.d.ts +1 -16
  84. package/dist/types/logger.d.ts +0 -7
  85. package/dist/types/module.d.ts +0 -11
  86. package/package.json +2 -2
  87. package/src/core/auth/morojs-adapter.ts +13 -18
  88. package/src/core/config/file-loader.ts +233 -0
  89. package/src/core/config/index.ts +32 -77
  90. package/src/core/config/loader.ts +633 -0
  91. package/src/core/config/schema.ts +31 -41
  92. package/src/core/config/utils.ts +29 -22
  93. package/src/core/config/validation.ts +140 -0
  94. package/src/core/database/README.md +16 -26
  95. package/src/core/database/adapters/mongodb.ts +2 -30
  96. package/src/core/database/adapters/mysql.ts +0 -14
  97. package/src/core/database/adapters/postgresql.ts +2 -12
  98. package/src/core/database/adapters/redis.ts +4 -27
  99. package/src/core/framework.ts +23 -163
  100. package/src/core/http/http-server.ts +36 -176
  101. package/src/core/http/router.ts +38 -127
  102. package/src/core/logger/filters.ts +4 -12
  103. package/src/core/logger/index.ts +0 -1
  104. package/src/core/logger/logger.ts +216 -427
  105. package/src/core/logger/outputs.ts +2 -0
  106. package/src/core/middleware/built-in/auth.ts +17 -98
  107. package/src/core/middleware/built-in/cache.ts +1 -3
  108. package/src/core/middleware/built-in/index.ts +0 -8
  109. package/src/core/middleware/built-in/request-logger.ts +1 -3
  110. package/src/core/middleware/built-in/sse.ts +7 -9
  111. package/src/core/modules/auto-discovery.ts +13 -476
  112. package/src/core/modules/modules.ts +9 -20
  113. package/src/core/networking/adapters/ws-adapter.ts +5 -2
  114. package/src/core/networking/service-discovery.ts +7 -6
  115. package/src/core/routing/index.ts +14 -198
  116. package/src/core/runtime/node-adapter.ts +6 -12
  117. package/src/moro.ts +166 -554
  118. package/src/types/config.ts +2 -59
  119. package/src/types/core.ts +45 -47
  120. package/src/types/http.ts +1 -23
  121. package/src/types/logger.ts +0 -9
  122. package/src/types/module.ts +0 -12
  123. package/dist/core/config/config-manager.d.ts +0 -44
  124. package/dist/core/config/config-manager.js +0 -114
  125. package/dist/core/config/config-manager.js.map +0 -1
  126. package/dist/core/config/config-sources.d.ts +0 -21
  127. package/dist/core/config/config-sources.js +0 -502
  128. package/dist/core/config/config-sources.js.map +0 -1
  129. package/dist/core/config/config-validator.d.ts +0 -21
  130. package/dist/core/config/config-validator.js +0 -765
  131. package/dist/core/config/config-validator.js.map +0 -1
  132. package/dist/core/middleware/built-in/jwt-helpers.d.ts +0 -118
  133. package/dist/core/middleware/built-in/jwt-helpers.js +0 -221
  134. package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
  135. package/src/core/config/config-manager.ts +0 -133
  136. package/src/core/config/config-sources.ts +0 -596
  137. package/src/core/config/config-validator.ts +0 -1078
  138. package/src/core/middleware/built-in/jwt-helpers.ts +0 -240
@@ -1,502 +0,0 @@
1
- "use strict";
2
- /**
3
- * Configuration Sources - Load from Environment, Files, and Options
4
- *
5
- * This module handles loading configuration from different sources with clear precedence:
6
- * Environment Variables > createApp Options > Config File > Schema Defaults
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.loadConfigFromAllSources = loadConfigFromAllSources;
10
- const schema_1 = require("./schema");
11
- const file_loader_1 = require("./file-loader");
12
- const logger_1 = require("../logger");
13
- const config_validator_1 = require("./config-validator");
14
- const logger = (0, logger_1.createFrameworkLogger)('ConfigSources');
15
- /**
16
- * Load configuration from all sources with proper precedence
17
- * Returns a validated, complete configuration object
18
- */
19
- function loadConfigFromAllSources(createAppOptions) {
20
- logger.debug('Loading configuration from all sources');
21
- // 1. Start with schema defaults
22
- let config = JSON.parse(JSON.stringify(schema_1.DEFAULT_CONFIG));
23
- const sourceMap = new Map();
24
- // Track default values
25
- trackConfigSource(config, sourceMap, 'default', 'schema');
26
- // 2. Load and merge config file (if exists)
27
- try {
28
- const fileConfig = (0, file_loader_1.loadConfigFileSync)();
29
- if (fileConfig) {
30
- config = deepMerge(config, fileConfig);
31
- trackConfigSource(fileConfig, sourceMap, 'configFile', 'moro.config.js/ts');
32
- logger.debug('Config file loaded and merged');
33
- }
34
- }
35
- catch (error) {
36
- logger.warn('Config file loading failed, continuing without it:', String(error));
37
- }
38
- // 3. Load and merge environment variables
39
- const envConfig = loadEnvironmentConfig();
40
- config = deepMerge(config, envConfig);
41
- trackConfigSource(envConfig, sourceMap, 'environment', 'process.env');
42
- // 4. Load and merge createApp options (highest precedence)
43
- if (createAppOptions) {
44
- const normalizedOptions = normalizeCreateAppOptions(createAppOptions);
45
- config = deepMerge(config, normalizedOptions);
46
- trackConfigSource(normalizedOptions, sourceMap, 'createApp', 'createApp()');
47
- logger.debug('createApp options merged');
48
- }
49
- // 5. Validate the final configuration
50
- const validatedConfig = (0, config_validator_1.validateConfig)(config);
51
- // Log configuration sources for debugging
52
- logConfigurationSources(sourceMap);
53
- return validatedConfig;
54
- }
55
- /**
56
- * Load configuration from environment variables
57
- * Handles both standard and MORO_ prefixed variables
58
- */
59
- function loadEnvironmentConfig() {
60
- const config = {};
61
- // Server configuration
62
- if (process.env.PORT || process.env.MORO_PORT) {
63
- if (!config.server)
64
- config.server = {};
65
- config.server.port = parseInt(process.env.PORT || process.env.MORO_PORT || '3001', 10);
66
- }
67
- if (process.env.HOST || process.env.MORO_HOST) {
68
- if (!config.server)
69
- config.server = {};
70
- config.server.host = process.env.HOST || process.env.MORO_HOST || 'localhost';
71
- }
72
- if (process.env.MAX_CONNECTIONS || process.env.MORO_MAX_CONNECTIONS) {
73
- if (!config.server)
74
- config.server = {};
75
- config.server.maxConnections = parseInt(process.env.MAX_CONNECTIONS || process.env.MORO_MAX_CONNECTIONS || '1000', 10);
76
- }
77
- if (process.env.REQUEST_TIMEOUT || process.env.MORO_TIMEOUT) {
78
- if (!config.server)
79
- config.server = {};
80
- config.server.timeout = parseInt(process.env.REQUEST_TIMEOUT || process.env.MORO_TIMEOUT || '30000', 10);
81
- }
82
- // Database configuration
83
- if (process.env.DATABASE_URL || process.env.MORO_DATABASE_URL) {
84
- if (!config.database)
85
- config.database = {};
86
- config.database.url = process.env.DATABASE_URL || process.env.MORO_DATABASE_URL;
87
- }
88
- // Redis configuration
89
- if (process.env.REDIS_URL || process.env.MORO_REDIS_URL) {
90
- if (!config.database)
91
- config.database = {};
92
- if (!config.database.redis)
93
- config.database.redis = {};
94
- config.database.redis.url =
95
- process.env.REDIS_URL || process.env.MORO_REDIS_URL || 'redis://localhost:6379';
96
- config.database.redis.maxRetries = parseInt(process.env.REDIS_MAX_RETRIES || process.env.MORO_REDIS_MAX_RETRIES || '3', 10);
97
- config.database.redis.retryDelay = parseInt(process.env.REDIS_RETRY_DELAY || process.env.MORO_REDIS_RETRY_DELAY || '1000', 10);
98
- config.database.redis.keyPrefix =
99
- process.env.REDIS_KEY_PREFIX || process.env.MORO_REDIS_KEY_PREFIX || 'moro:';
100
- }
101
- // MySQL configuration - only include if MYSQL_HOST is set
102
- if (process.env.MYSQL_HOST || process.env.MORO_MYSQL_HOST) {
103
- if (!config.database)
104
- config.database = {};
105
- config.database.mysql = {
106
- host: process.env.MYSQL_HOST || process.env.MORO_MYSQL_HOST || 'localhost',
107
- port: parseInt(process.env.MYSQL_PORT || process.env.MORO_MYSQL_PORT || '3306', 10),
108
- database: process.env.MYSQL_DATABASE || process.env.MORO_MYSQL_DB,
109
- username: process.env.MYSQL_USERNAME || process.env.MORO_MYSQL_USER,
110
- password: process.env.MYSQL_PASSWORD || process.env.MORO_MYSQL_PASS,
111
- connectionLimit: parseInt(process.env.MYSQL_CONNECTION_LIMIT || process.env.MORO_MYSQL_CONNECTIONS || '10', 10),
112
- acquireTimeout: parseInt(process.env.MYSQL_ACQUIRE_TIMEOUT || process.env.MORO_MYSQL_ACQUIRE || '60000', 10),
113
- timeout: parseInt(process.env.MYSQL_TIMEOUT || process.env.MORO_MYSQL_TIMEOUT || '60000', 10),
114
- };
115
- }
116
- // Logging configuration
117
- if (process.env.LOG_LEVEL || process.env.MORO_LOG_LEVEL) {
118
- const level = process.env.LOG_LEVEL || process.env.MORO_LOG_LEVEL;
119
- if (level === 'debug' ||
120
- level === 'info' ||
121
- level === 'warn' ||
122
- level === 'error' ||
123
- level === 'fatal') {
124
- if (!config.logging)
125
- config.logging = {};
126
- config.logging.level = level;
127
- }
128
- }
129
- // External services - only include if configured
130
- const externalConfig = {};
131
- // Stripe
132
- if (process.env.STRIPE_SECRET_KEY || process.env.MORO_STRIPE_SECRET) {
133
- externalConfig.stripe = {
134
- secretKey: process.env.STRIPE_SECRET_KEY || process.env.MORO_STRIPE_SECRET,
135
- publishableKey: process.env.STRIPE_PUBLISHABLE_KEY || process.env.MORO_STRIPE_PUBLIC,
136
- webhookSecret: process.env.STRIPE_WEBHOOK_SECRET || process.env.MORO_STRIPE_WEBHOOK,
137
- apiVersion: process.env.STRIPE_API_VERSION || process.env.MORO_STRIPE_VERSION || '2023-10-16',
138
- };
139
- }
140
- // PayPal
141
- if (process.env.PAYPAL_CLIENT_ID || process.env.MORO_PAYPAL_CLIENT) {
142
- externalConfig.paypal = {
143
- clientId: process.env.PAYPAL_CLIENT_ID || process.env.MORO_PAYPAL_CLIENT,
144
- clientSecret: process.env.PAYPAL_CLIENT_SECRET || process.env.MORO_PAYPAL_SECRET,
145
- webhookId: process.env.PAYPAL_WEBHOOK_ID || process.env.MORO_PAYPAL_WEBHOOK,
146
- environment: (process.env.PAYPAL_ENVIRONMENT || process.env.MORO_PAYPAL_ENV) === 'production'
147
- ? 'production'
148
- : 'sandbox',
149
- };
150
- }
151
- // SMTP
152
- if (process.env.SMTP_HOST || process.env.MORO_SMTP_HOST) {
153
- externalConfig.smtp = {
154
- host: process.env.SMTP_HOST || process.env.MORO_SMTP_HOST,
155
- port: parseInt(process.env.SMTP_PORT || process.env.MORO_SMTP_PORT || '587', 10),
156
- secure: (process.env.SMTP_SECURE || 'false').toLowerCase() === 'true',
157
- username: process.env.SMTP_USERNAME || process.env.MORO_SMTP_USER,
158
- password: process.env.SMTP_PASSWORD || process.env.MORO_SMTP_PASS,
159
- };
160
- }
161
- if (Object.keys(externalConfig).length > 0) {
162
- config.external = externalConfig;
163
- }
164
- // Module configuration
165
- const moduleEnvVars = [
166
- // Cache
167
- 'CACHE_ENABLED',
168
- 'MORO_CACHE_ENABLED',
169
- 'DEFAULT_CACHE_TTL',
170
- 'MORO_CACHE_TTL',
171
- 'CACHE_MAX_SIZE',
172
- 'MORO_CACHE_SIZE',
173
- 'CACHE_STRATEGY',
174
- 'MORO_CACHE_STRATEGY',
175
- // Rate Limit
176
- 'RATE_LIMIT_ENABLED',
177
- 'MORO_RATE_LIMIT_ENABLED',
178
- 'DEFAULT_RATE_LIMIT_REQUESTS',
179
- 'MORO_RATE_LIMIT_REQUESTS',
180
- 'DEFAULT_RATE_LIMIT_WINDOW',
181
- 'MORO_RATE_LIMIT_WINDOW',
182
- // Validation
183
- 'VALIDATION_ENABLED',
184
- 'MORO_VALIDATION_ENABLED',
185
- // Auto-Discovery
186
- 'AUTO_DISCOVERY_ENABLED',
187
- 'MORO_AUTO_DISCOVERY_ENABLED',
188
- 'AUTO_DISCOVERY_PATHS',
189
- 'MORO_AUTO_DISCOVERY_PATHS',
190
- 'AUTO_DISCOVERY_PATTERNS',
191
- 'MORO_AUTO_DISCOVERY_PATTERNS',
192
- 'AUTO_DISCOVERY_LOADING_STRATEGY',
193
- 'MORO_AUTO_DISCOVERY_LOADING_STRATEGY',
194
- 'AUTO_DISCOVERY_WATCH_FOR_CHANGES',
195
- 'MORO_AUTO_DISCOVERY_WATCH_FOR_CHANGES',
196
- 'AUTO_DISCOVERY_LOAD_ORDER',
197
- 'MORO_AUTO_DISCOVERY_LOAD_ORDER',
198
- 'AUTO_DISCOVERY_FAIL_ON_ERROR',
199
- 'MORO_AUTO_DISCOVERY_FAIL_ON_ERROR',
200
- 'AUTO_DISCOVERY_MAX_DEPTH',
201
- 'MORO_AUTO_DISCOVERY_MAX_DEPTH',
202
- ];
203
- if (moduleEnvVars.some(envVar => process.env[envVar])) {
204
- if (!config.modules)
205
- config.modules = {};
206
- // Cache configuration
207
- if (process.env.CACHE_ENABLED || process.env.MORO_CACHE_ENABLED) {
208
- if (!config.modules.cache)
209
- config.modules.cache = {};
210
- config.modules.cache.enabled =
211
- (process.env.CACHE_ENABLED || process.env.MORO_CACHE_ENABLED) === 'true';
212
- }
213
- if (process.env.DEFAULT_CACHE_TTL || process.env.MORO_CACHE_TTL) {
214
- if (!config.modules.cache)
215
- config.modules.cache = {};
216
- config.modules.cache.defaultTtl = parseInt(process.env.DEFAULT_CACHE_TTL || process.env.MORO_CACHE_TTL || '300', 10);
217
- }
218
- if (process.env.CACHE_MAX_SIZE || process.env.MORO_CACHE_SIZE) {
219
- if (!config.modules.cache)
220
- config.modules.cache = {};
221
- config.modules.cache.maxSize = parseInt(process.env.CACHE_MAX_SIZE || process.env.MORO_CACHE_SIZE || '1000', 10);
222
- }
223
- if (process.env.CACHE_STRATEGY || process.env.MORO_CACHE_STRATEGY) {
224
- if (!config.modules.cache)
225
- config.modules.cache = {};
226
- const strategy = process.env.CACHE_STRATEGY || process.env.MORO_CACHE_STRATEGY;
227
- if (['lru', 'lfu', 'fifo'].includes(strategy || '')) {
228
- config.modules.cache.strategy = strategy;
229
- }
230
- }
231
- // Rate limit configuration
232
- if (process.env.RATE_LIMIT_ENABLED || process.env.MORO_RATE_LIMIT_ENABLED) {
233
- if (!config.modules.rateLimit)
234
- config.modules.rateLimit = {};
235
- config.modules.rateLimit.enabled =
236
- (process.env.RATE_LIMIT_ENABLED || process.env.MORO_RATE_LIMIT_ENABLED) === 'true';
237
- }
238
- if (process.env.DEFAULT_RATE_LIMIT_REQUESTS || process.env.MORO_RATE_LIMIT_REQUESTS) {
239
- if (!config.modules.rateLimit)
240
- config.modules.rateLimit = {};
241
- config.modules.rateLimit.defaultRequests = parseInt(process.env.DEFAULT_RATE_LIMIT_REQUESTS || process.env.MORO_RATE_LIMIT_REQUESTS || '100', 10);
242
- }
243
- if (process.env.DEFAULT_RATE_LIMIT_WINDOW || process.env.MORO_RATE_LIMIT_WINDOW) {
244
- if (!config.modules.rateLimit)
245
- config.modules.rateLimit = {};
246
- config.modules.rateLimit.defaultWindow = parseInt(process.env.DEFAULT_RATE_LIMIT_WINDOW || process.env.MORO_RATE_LIMIT_WINDOW || '60000', 10);
247
- }
248
- // Validation configuration
249
- if (process.env.VALIDATION_ENABLED || process.env.MORO_VALIDATION_ENABLED) {
250
- if (!config.modules.validation)
251
- config.modules.validation = {};
252
- config.modules.validation.enabled =
253
- (process.env.VALIDATION_ENABLED || process.env.MORO_VALIDATION_ENABLED) === 'true';
254
- }
255
- // Auto-Discovery configuration
256
- if (process.env.AUTO_DISCOVERY_ENABLED || process.env.MORO_AUTO_DISCOVERY_ENABLED) {
257
- if (!config.modules.autoDiscovery)
258
- config.modules.autoDiscovery = {};
259
- config.modules.autoDiscovery.enabled =
260
- (process.env.AUTO_DISCOVERY_ENABLED || process.env.MORO_AUTO_DISCOVERY_ENABLED) === 'true';
261
- }
262
- if (process.env.AUTO_DISCOVERY_PATHS || process.env.MORO_AUTO_DISCOVERY_PATHS) {
263
- if (!config.modules.autoDiscovery)
264
- config.modules.autoDiscovery = {};
265
- const paths = (process.env.AUTO_DISCOVERY_PATHS ||
266
- process.env.MORO_AUTO_DISCOVERY_PATHS ||
267
- '')
268
- .split(',')
269
- .map(p => p.trim())
270
- .filter(Boolean);
271
- if (paths.length > 0) {
272
- config.modules.autoDiscovery.paths = paths;
273
- }
274
- }
275
- if (process.env.AUTO_DISCOVERY_PATTERNS || process.env.MORO_AUTO_DISCOVERY_PATTERNS) {
276
- if (!config.modules.autoDiscovery)
277
- config.modules.autoDiscovery = {};
278
- const patterns = (process.env.AUTO_DISCOVERY_PATTERNS ||
279
- process.env.MORO_AUTO_DISCOVERY_PATTERNS ||
280
- '')
281
- .split(',')
282
- .map(p => p.trim())
283
- .filter(Boolean);
284
- if (patterns.length > 0) {
285
- config.modules.autoDiscovery.patterns = patterns;
286
- }
287
- }
288
- if (process.env.AUTO_DISCOVERY_LOADING_STRATEGY ||
289
- process.env.MORO_AUTO_DISCOVERY_LOADING_STRATEGY) {
290
- if (!config.modules.autoDiscovery)
291
- config.modules.autoDiscovery = {};
292
- const strategy = process.env.AUTO_DISCOVERY_LOADING_STRATEGY ||
293
- process.env.MORO_AUTO_DISCOVERY_LOADING_STRATEGY;
294
- if (['eager', 'lazy', 'conditional'].includes(strategy || '')) {
295
- config.modules.autoDiscovery.loadingStrategy = strategy;
296
- }
297
- }
298
- if (process.env.AUTO_DISCOVERY_WATCH_FOR_CHANGES ||
299
- process.env.MORO_AUTO_DISCOVERY_WATCH_FOR_CHANGES) {
300
- if (!config.modules.autoDiscovery)
301
- config.modules.autoDiscovery = {};
302
- config.modules.autoDiscovery.watchForChanges =
303
- (process.env.AUTO_DISCOVERY_WATCH_FOR_CHANGES ||
304
- process.env.MORO_AUTO_DISCOVERY_WATCH_FOR_CHANGES) === 'true';
305
- }
306
- if (process.env.AUTO_DISCOVERY_LOAD_ORDER || process.env.MORO_AUTO_DISCOVERY_LOAD_ORDER) {
307
- if (!config.modules.autoDiscovery)
308
- config.modules.autoDiscovery = {};
309
- const loadOrder = process.env.AUTO_DISCOVERY_LOAD_ORDER || process.env.MORO_AUTO_DISCOVERY_LOAD_ORDER;
310
- if (['alphabetical', 'dependency', 'custom'].includes(loadOrder || '')) {
311
- config.modules.autoDiscovery.loadOrder = loadOrder;
312
- }
313
- }
314
- if (process.env.AUTO_DISCOVERY_FAIL_ON_ERROR || process.env.MORO_AUTO_DISCOVERY_FAIL_ON_ERROR) {
315
- if (!config.modules.autoDiscovery)
316
- config.modules.autoDiscovery = {};
317
- config.modules.autoDiscovery.failOnError =
318
- (process.env.AUTO_DISCOVERY_FAIL_ON_ERROR ||
319
- process.env.MORO_AUTO_DISCOVERY_FAIL_ON_ERROR) === 'true';
320
- }
321
- if (process.env.AUTO_DISCOVERY_MAX_DEPTH || process.env.MORO_AUTO_DISCOVERY_MAX_DEPTH) {
322
- if (!config.modules.autoDiscovery)
323
- config.modules.autoDiscovery = {};
324
- config.modules.autoDiscovery.maxDepth = parseInt(process.env.AUTO_DISCOVERY_MAX_DEPTH || process.env.MORO_AUTO_DISCOVERY_MAX_DEPTH || '5', 10);
325
- }
326
- }
327
- return config;
328
- }
329
- /**
330
- * Normalize createApp options to match AppConfig structure
331
- * This handles the flexible createApp API while converting to structured config
332
- */
333
- function normalizeCreateAppOptions(options) {
334
- const config = {};
335
- // Direct config section overrides - merge with existing config
336
- if (options.server) {
337
- config.server = { ...config.server, ...options.server };
338
- }
339
- if (options.database) {
340
- config.database = { ...config.database, ...options.database };
341
- }
342
- if (options.modules) {
343
- config.modules = { ...config.modules, ...options.modules };
344
- }
345
- // Handle autoDiscover option (maps to modules.autoDiscovery)
346
- if (options.autoDiscover !== undefined) {
347
- const autoDiscoveryConfig = typeof options.autoDiscover === 'boolean'
348
- ? { enabled: options.autoDiscover }
349
- : options.autoDiscover;
350
- config.modules = {
351
- ...config.modules,
352
- autoDiscovery: {
353
- ...schema_1.DEFAULT_CONFIG.modules.autoDiscovery,
354
- ...autoDiscoveryConfig,
355
- },
356
- };
357
- }
358
- // Handle legacy modulesPath option (maps to modules.autoDiscovery.paths)
359
- if (options.modulesPath) {
360
- config.modules = {
361
- ...config.modules,
362
- autoDiscovery: {
363
- ...schema_1.DEFAULT_CONFIG.modules.autoDiscovery,
364
- ...config.modules?.autoDiscovery,
365
- enabled: true,
366
- paths: [options.modulesPath],
367
- },
368
- };
369
- }
370
- if (options.logging) {
371
- config.logging = { ...config.logging, ...options.logging };
372
- }
373
- if (options.security) {
374
- config.security = { ...config.security, ...options.security };
375
- }
376
- if (options.external) {
377
- config.external = { ...config.external, ...options.external };
378
- }
379
- if (options.performance) {
380
- config.performance = { ...config.performance, ...options.performance };
381
- }
382
- // Handle shorthand boolean/object options
383
- if (options.cors !== undefined) {
384
- config.security = {
385
- ...config.security,
386
- cors: typeof options.cors === 'boolean'
387
- ? { ...schema_1.DEFAULT_CONFIG.security.cors, enabled: options.cors }
388
- : { ...schema_1.DEFAULT_CONFIG.security.cors, ...options.cors },
389
- };
390
- }
391
- if (options.compression !== undefined) {
392
- config.performance = {
393
- ...config.performance,
394
- compression: typeof options.compression === 'boolean'
395
- ? { ...schema_1.DEFAULT_CONFIG.performance.compression, enabled: options.compression }
396
- : { ...schema_1.DEFAULT_CONFIG.performance.compression, ...options.compression },
397
- };
398
- }
399
- if (options.helmet !== undefined) {
400
- config.security = {
401
- ...config.security,
402
- helmet: typeof options.helmet === 'boolean'
403
- ? { ...schema_1.DEFAULT_CONFIG.security.helmet, enabled: options.helmet }
404
- : { ...schema_1.DEFAULT_CONFIG.security.helmet, ...options.helmet },
405
- };
406
- }
407
- return config;
408
- }
409
- /**
410
- * Check if a config field contains sensitive information
411
- */
412
- function isSensitiveField(path) {
413
- const sensitivePatterns = [
414
- 'password',
415
- 'secret',
416
- 'key',
417
- 'token',
418
- 'auth',
419
- 'stripe',
420
- 'paypal',
421
- 'smtp.password',
422
- 'smtp.username',
423
- 'database.url',
424
- 'redis.url',
425
- 'mysql.password',
426
- ];
427
- return sensitivePatterns.some(pattern => path.toLowerCase().includes(pattern.toLowerCase()));
428
- }
429
- /**
430
- * Deep merge two configuration objects
431
- * Later object properties override earlier ones
432
- */
433
- function deepMerge(target, source) {
434
- const result = { ...target };
435
- for (const key in source) {
436
- const sourceValue = source[key];
437
- const targetValue = result[key];
438
- if (sourceValue &&
439
- typeof sourceValue === 'object' &&
440
- !Array.isArray(sourceValue) &&
441
- targetValue &&
442
- typeof targetValue === 'object' &&
443
- !Array.isArray(targetValue)) {
444
- result[key] = deepMerge(targetValue, sourceValue);
445
- }
446
- else if (sourceValue !== undefined) {
447
- result[key] = sourceValue;
448
- }
449
- }
450
- return result;
451
- }
452
- /**
453
- * Track configuration sources for debugging
454
- */
455
- function trackConfigSource(config, sourceMap, source, path) {
456
- function traverse(obj, currentPath) {
457
- for (const key in obj) {
458
- const value = obj[key];
459
- const fullPath = currentPath ? `${currentPath}.${key}` : key;
460
- if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
461
- traverse(value, fullPath);
462
- }
463
- else {
464
- sourceMap.set(fullPath, { source, path, value });
465
- }
466
- }
467
- }
468
- traverse(config, '');
469
- }
470
- /**
471
- * Log configuration sources for debugging
472
- */
473
- function logConfigurationSources(sourceMap) {
474
- const allSources = Array.from(sourceMap.entries()).sort(([a], [b]) => a.localeCompare(b));
475
- const nonDefaultSources = allSources.filter(([_, info]) => info.source !== 'default');
476
- if (process.env.NODE_ENV === 'production') {
477
- // In production, only show non-default values with sensitive data obfuscated
478
- if (nonDefaultSources.length > 0) {
479
- logger.debug(`Configuration overrides loaded (${nonDefaultSources.length} total)`);
480
- nonDefaultSources.forEach(([path, info]) => {
481
- const valueStr = isSensitiveField(path)
482
- ? '***'
483
- : typeof info.value === 'object'
484
- ? JSON.stringify(info.value)
485
- : String(info.value);
486
- logger.debug(` ${path}: ${valueStr} (from ${info.source})`);
487
- });
488
- }
489
- else {
490
- logger.debug('Using default configuration (no overrides)');
491
- }
492
- }
493
- else {
494
- // In development, show all sources for debugging
495
- logger.debug(`Configuration sources loaded (${allSources.length} total)`);
496
- allSources.forEach(([path, info]) => {
497
- const valueStr = typeof info.value === 'object' ? JSON.stringify(info.value) : String(info.value);
498
- logger.debug(` ${path}: ${valueStr} (from ${info.source})`);
499
- });
500
- }
501
- }
502
- //# sourceMappingURL=config-sources.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-sources.js","sourceRoot":"","sources":["../../../src/core/config/config-sources.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Configuration Validator - Type-Safe Schema Validation
3
- *
4
- * This module provides runtime validation for configuration objects using
5
- * simple TypeScript functions that match the type definitions exactly.
6
- */
7
- import { AppConfig } from '../../types/config';
8
- /**
9
- * Configuration validation error with detailed context
10
- */
11
- export declare class ConfigValidationError extends Error {
12
- readonly field: string;
13
- readonly value: unknown;
14
- readonly expectedType: string;
15
- constructor(field: string, value: unknown, expectedType: string, message: string);
16
- }
17
- /**
18
- * Validate and normalize a complete configuration object
19
- * This ensures type safety and provides helpful error messages
20
- */
21
- export declare function validateConfig(config: any): AppConfig;