@morojs/moro 1.0.3 → 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 +1 -1
- package/dist/core/config/file-loader.d.ts +18 -0
- package/dist/core/config/file-loader.js +345 -0
- package/dist/core/config/file-loader.js.map +1 -0
- package/dist/core/config/index.d.ts +6 -0
- package/dist/core/config/index.js +15 -0
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/loader.d.ts +2 -1
- package/dist/core/config/loader.js +15 -2
- package/dist/core/config/loader.js.map +1 -1
- package/dist/core/config/utils.js +50 -3
- package/dist/core/config/utils.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/core/config/file-loader.ts +398 -0
- package/src/core/config/index.ts +18 -0
- package/src/core/config/loader.ts +18 -2
- package/src/core/config/utils.ts +53 -3
- package/src/index.ts +4 -1
- package/tsconfig.json +1 -1
package/README.md
CHANGED
|
@@ -228,6 +228,6 @@ MIT © [Moro Framework Team](https://morojs.com)
|
|
|
228
228
|
|
|
229
229
|
**Ready to deploy everywhere with one codebase?**
|
|
230
230
|
|
|
231
|
-
[Get Started](./docs/GETTING_STARTED.md) • [GitHub](https://github.com/Moro-JS/moro) • [npm](https://www.npmjs.com/package/@morojs/moro)
|
|
231
|
+
[Get Started](./docs/GETTING_STARTED.md) • [GitHub](https://github.com/Moro-JS/moro) • [npm](https://www.npmjs.com/package/@morojs/moro) • [Discord](https://morojs.com/discord)
|
|
232
232
|
|
|
233
233
|
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AppConfig } from './schema';
|
|
2
|
+
/**
|
|
3
|
+
* Find and load configuration from moro.config.js (synchronously)
|
|
4
|
+
* @param cwd Current working directory to search for config files
|
|
5
|
+
* @returns Partial configuration object or null if no config file found
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadConfigFileSync(cwd?: string): Partial<AppConfig> | null;
|
|
8
|
+
/**
|
|
9
|
+
* Find and load configuration from moro.config.js or moro.config.ts (async)
|
|
10
|
+
* @param cwd Current working directory to search for config files
|
|
11
|
+
* @returns Partial configuration object or null if no config file found
|
|
12
|
+
*/
|
|
13
|
+
export declare function loadConfigFile(cwd?: string): Promise<Partial<AppConfig> | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Convert a configuration object to environment variable mappings
|
|
16
|
+
* This function flattens the config object and sets corresponding environment variables
|
|
17
|
+
*/
|
|
18
|
+
export declare function applyConfigAsEnvironmentVariables(config: Partial<AppConfig>): void;
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadConfigFileSync = loadConfigFileSync;
|
|
37
|
+
exports.loadConfigFile = loadConfigFile;
|
|
38
|
+
exports.applyConfigAsEnvironmentVariables = applyConfigAsEnvironmentVariables;
|
|
39
|
+
// Configuration File Loader - Load moro.config.js/ts files
|
|
40
|
+
const fs_1 = require("fs");
|
|
41
|
+
const path_1 = require("path");
|
|
42
|
+
const logger_1 = require("../logger");
|
|
43
|
+
const logger = (0, logger_1.createFrameworkLogger)('ConfigFile');
|
|
44
|
+
/**
|
|
45
|
+
* Supported configuration file names in order of preference
|
|
46
|
+
*/
|
|
47
|
+
const CONFIG_FILES = ['moro.config.js', 'moro.config.ts'];
|
|
48
|
+
/**
|
|
49
|
+
* Find and load configuration from moro.config.js (synchronously)
|
|
50
|
+
* @param cwd Current working directory to search for config files
|
|
51
|
+
* @returns Partial configuration object or null if no config file found
|
|
52
|
+
*/
|
|
53
|
+
function loadConfigFileSync(cwd = process.cwd()) {
|
|
54
|
+
const configFile = findConfigFile(cwd);
|
|
55
|
+
if (!configFile) {
|
|
56
|
+
logger.debug('No configuration file found');
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
// Only support .js files for synchronous loading to avoid complexity
|
|
60
|
+
if (!configFile.endsWith('.js')) {
|
|
61
|
+
logger.debug('Found config file, but only JavaScript files are supported in sync mode. Use loadConfigFile() for TypeScript support.');
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
logger.debug(`Loading configuration from: ${configFile}`);
|
|
65
|
+
try {
|
|
66
|
+
// Clear module cache to ensure fresh load
|
|
67
|
+
delete require.cache[require.resolve(configFile)];
|
|
68
|
+
const config = require(configFile);
|
|
69
|
+
const configData = config.default || config;
|
|
70
|
+
if (!configData || typeof configData !== 'object') {
|
|
71
|
+
logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
logger.info(`Configuration loaded from: ${configFile}`);
|
|
75
|
+
return configData;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
logger.error(`Failed to load configuration file ${configFile}:`, String(error));
|
|
79
|
+
logger.warn('Falling back to environment variable configuration');
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Find and load configuration from moro.config.js or moro.config.ts (async)
|
|
85
|
+
* @param cwd Current working directory to search for config files
|
|
86
|
+
* @returns Partial configuration object or null if no config file found
|
|
87
|
+
*/
|
|
88
|
+
async function loadConfigFile(cwd = process.cwd()) {
|
|
89
|
+
const configFile = findConfigFile(cwd);
|
|
90
|
+
if (!configFile) {
|
|
91
|
+
logger.debug('No configuration file found');
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
logger.debug(`Loading configuration from: ${configFile}`);
|
|
95
|
+
try {
|
|
96
|
+
const config = await importConfigFile(configFile);
|
|
97
|
+
if (!config || typeof config !== 'object') {
|
|
98
|
+
logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
logger.info(`Configuration loaded from: ${configFile}`);
|
|
102
|
+
return config;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
logger.error(`Failed to load configuration file ${configFile}:`, String(error));
|
|
106
|
+
logger.warn('Falling back to environment variable configuration');
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Find the first existing configuration file in the given directory
|
|
112
|
+
*/
|
|
113
|
+
function findConfigFile(cwd) {
|
|
114
|
+
for (const fileName of CONFIG_FILES) {
|
|
115
|
+
const filePath = (0, path_1.join)(cwd, fileName);
|
|
116
|
+
if ((0, fs_1.existsSync)(filePath)) {
|
|
117
|
+
return filePath;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Dynamically import a configuration file
|
|
124
|
+
*/
|
|
125
|
+
async function importConfigFile(filePath) {
|
|
126
|
+
const isTypeScript = filePath.endsWith('.ts');
|
|
127
|
+
if (isTypeScript) {
|
|
128
|
+
// For TypeScript files, we need to handle ts-node/tsx or similar
|
|
129
|
+
await setupTypeScriptLoader();
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
// Use dynamic import to load the configuration
|
|
133
|
+
const configModule = await Promise.resolve(`${filePath}`).then(s => __importStar(require(s)));
|
|
134
|
+
// Handle both default export and module.exports
|
|
135
|
+
const config = configModule.default || configModule;
|
|
136
|
+
return config;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
// If TypeScript loading fails, provide helpful error message
|
|
140
|
+
if (isTypeScript &&
|
|
141
|
+
error instanceof Error &&
|
|
142
|
+
error.message.includes('Unknown file extension')) {
|
|
143
|
+
throw new Error(`Failed to load TypeScript config file. Make sure you have ts-node installed: npm install --save-dev ts-node`);
|
|
144
|
+
}
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Setup TypeScript loader for .ts config files
|
|
150
|
+
*/
|
|
151
|
+
async function setupTypeScriptLoader() {
|
|
152
|
+
try {
|
|
153
|
+
// Try to register ts-node if available
|
|
154
|
+
const tsNode = await Promise.resolve().then(() => __importStar(require('ts-node')));
|
|
155
|
+
if (!tsNode.register) {
|
|
156
|
+
// ts-node might already be registered
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
tsNode.register({
|
|
160
|
+
transpileOnly: true,
|
|
161
|
+
compilerOptions: {
|
|
162
|
+
module: 'commonjs',
|
|
163
|
+
target: 'es2020',
|
|
164
|
+
moduleResolution: 'node',
|
|
165
|
+
allowSyntheticDefaultImports: true,
|
|
166
|
+
esModuleInterop: true,
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
// ts-node not available, try other methods or fail gracefully
|
|
172
|
+
logger.debug('ts-node not available for TypeScript config loading');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Convert a configuration object to environment variable mappings
|
|
177
|
+
* This function flattens the config object and sets corresponding environment variables
|
|
178
|
+
*/
|
|
179
|
+
function applyConfigAsEnvironmentVariables(config) {
|
|
180
|
+
if (!config || typeof config !== 'object') {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Apply server configuration
|
|
184
|
+
if (config.server) {
|
|
185
|
+
setEnvIfNotSet('PORT', config.server.port?.toString());
|
|
186
|
+
setEnvIfNotSet('HOST', config.server.host);
|
|
187
|
+
setEnvIfNotSet('NODE_ENV', config.server.environment);
|
|
188
|
+
setEnvIfNotSet('MAX_CONNECTIONS', config.server.maxConnections?.toString());
|
|
189
|
+
setEnvIfNotSet('REQUEST_TIMEOUT', config.server.timeout?.toString());
|
|
190
|
+
}
|
|
191
|
+
// Apply database configuration
|
|
192
|
+
if (config.database) {
|
|
193
|
+
setEnvIfNotSet('DATABASE_URL', config.database.url);
|
|
194
|
+
if (config.database.redis) {
|
|
195
|
+
setEnvIfNotSet('REDIS_URL', config.database.redis.url);
|
|
196
|
+
setEnvIfNotSet('REDIS_MAX_RETRIES', config.database.redis.maxRetries?.toString());
|
|
197
|
+
setEnvIfNotSet('REDIS_RETRY_DELAY', config.database.redis.retryDelay?.toString());
|
|
198
|
+
setEnvIfNotSet('REDIS_KEY_PREFIX', config.database.redis.keyPrefix);
|
|
199
|
+
}
|
|
200
|
+
if (config.database.mysql) {
|
|
201
|
+
setEnvIfNotSet('MYSQL_HOST', config.database.mysql.host);
|
|
202
|
+
setEnvIfNotSet('MYSQL_PORT', config.database.mysql.port?.toString());
|
|
203
|
+
setEnvIfNotSet('MYSQL_DATABASE', config.database.mysql.database);
|
|
204
|
+
setEnvIfNotSet('MYSQL_USERNAME', config.database.mysql.username);
|
|
205
|
+
setEnvIfNotSet('MYSQL_PASSWORD', config.database.mysql.password);
|
|
206
|
+
setEnvIfNotSet('MYSQL_CONNECTION_LIMIT', config.database.mysql.connectionLimit?.toString());
|
|
207
|
+
setEnvIfNotSet('MYSQL_ACQUIRE_TIMEOUT', config.database.mysql.acquireTimeout?.toString());
|
|
208
|
+
setEnvIfNotSet('MYSQL_TIMEOUT', config.database.mysql.timeout?.toString());
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Apply service discovery configuration
|
|
212
|
+
if (config.serviceDiscovery) {
|
|
213
|
+
setEnvIfNotSet('SERVICE_DISCOVERY_ENABLED', config.serviceDiscovery.enabled?.toString());
|
|
214
|
+
setEnvIfNotSet('DISCOVERY_TYPE', config.serviceDiscovery.type);
|
|
215
|
+
setEnvIfNotSet('CONSUL_URL', config.serviceDiscovery.consulUrl);
|
|
216
|
+
setEnvIfNotSet('K8S_NAMESPACE', config.serviceDiscovery.kubernetesNamespace);
|
|
217
|
+
setEnvIfNotSet('HEALTH_CHECK_INTERVAL', config.serviceDiscovery.healthCheckInterval?.toString());
|
|
218
|
+
setEnvIfNotSet('DISCOVERY_RETRY_ATTEMPTS', config.serviceDiscovery.retryAttempts?.toString());
|
|
219
|
+
}
|
|
220
|
+
// Apply logging configuration
|
|
221
|
+
if (config.logging) {
|
|
222
|
+
setEnvIfNotSet('LOG_LEVEL', config.logging.level);
|
|
223
|
+
setEnvIfNotSet('LOG_FORMAT', config.logging.format);
|
|
224
|
+
setEnvIfNotSet('LOG_COLORS', config.logging.enableColors?.toString());
|
|
225
|
+
setEnvIfNotSet('LOG_TIMESTAMP', config.logging.enableTimestamp?.toString());
|
|
226
|
+
setEnvIfNotSet('LOG_CONTEXT', config.logging.enableContext?.toString());
|
|
227
|
+
if (config.logging.outputs) {
|
|
228
|
+
setEnvIfNotSet('LOG_CONSOLE', config.logging.outputs.console?.toString());
|
|
229
|
+
if (config.logging.outputs.file) {
|
|
230
|
+
setEnvIfNotSet('LOG_FILE_ENABLED', config.logging.outputs.file.enabled?.toString());
|
|
231
|
+
setEnvIfNotSet('LOG_FILE_PATH', config.logging.outputs.file.path);
|
|
232
|
+
setEnvIfNotSet('LOG_FILE_MAX_SIZE', config.logging.outputs.file.maxSize);
|
|
233
|
+
setEnvIfNotSet('LOG_FILE_MAX_FILES', config.logging.outputs.file.maxFiles?.toString());
|
|
234
|
+
}
|
|
235
|
+
if (config.logging.outputs.webhook) {
|
|
236
|
+
setEnvIfNotSet('LOG_WEBHOOK_ENABLED', config.logging.outputs.webhook.enabled?.toString());
|
|
237
|
+
setEnvIfNotSet('LOG_WEBHOOK_URL', config.logging.outputs.webhook.url);
|
|
238
|
+
if (config.logging.outputs.webhook.headers) {
|
|
239
|
+
setEnvIfNotSet('LOG_WEBHOOK_HEADERS', JSON.stringify(config.logging.outputs.webhook.headers));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Apply module defaults
|
|
245
|
+
if (config.modules) {
|
|
246
|
+
if (config.modules.cache) {
|
|
247
|
+
setEnvIfNotSet('CACHE_ENABLED', config.modules.cache.enabled?.toString());
|
|
248
|
+
setEnvIfNotSet('DEFAULT_CACHE_TTL', config.modules.cache.defaultTtl?.toString());
|
|
249
|
+
setEnvIfNotSet('CACHE_MAX_SIZE', config.modules.cache.maxSize?.toString());
|
|
250
|
+
setEnvIfNotSet('CACHE_STRATEGY', config.modules.cache.strategy);
|
|
251
|
+
}
|
|
252
|
+
if (config.modules.rateLimit) {
|
|
253
|
+
setEnvIfNotSet('RATE_LIMIT_ENABLED', config.modules.rateLimit.enabled?.toString());
|
|
254
|
+
setEnvIfNotSet('DEFAULT_RATE_LIMIT_REQUESTS', config.modules.rateLimit.defaultRequests?.toString());
|
|
255
|
+
setEnvIfNotSet('DEFAULT_RATE_LIMIT_WINDOW', config.modules.rateLimit.defaultWindow?.toString());
|
|
256
|
+
setEnvIfNotSet('RATE_LIMIT_SKIP_SUCCESS', config.modules.rateLimit.skipSuccessfulRequests?.toString());
|
|
257
|
+
setEnvIfNotSet('RATE_LIMIT_SKIP_FAILED', config.modules.rateLimit.skipFailedRequests?.toString());
|
|
258
|
+
}
|
|
259
|
+
if (config.modules.validation) {
|
|
260
|
+
setEnvIfNotSet('VALIDATION_ENABLED', config.modules.validation.enabled?.toString());
|
|
261
|
+
setEnvIfNotSet('VALIDATION_STRIP_UNKNOWN', config.modules.validation.stripUnknown?.toString());
|
|
262
|
+
setEnvIfNotSet('VALIDATION_ABORT_EARLY', config.modules.validation.abortEarly?.toString());
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Apply security configuration
|
|
266
|
+
if (config.security) {
|
|
267
|
+
if (config.security.cors) {
|
|
268
|
+
setEnvIfNotSet('CORS_ENABLED', config.security.cors.enabled?.toString());
|
|
269
|
+
if (typeof config.security.cors.origin === 'string') {
|
|
270
|
+
setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin);
|
|
271
|
+
}
|
|
272
|
+
else if (Array.isArray(config.security.cors.origin)) {
|
|
273
|
+
setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin.join(','));
|
|
274
|
+
}
|
|
275
|
+
else if (typeof config.security.cors.origin === 'boolean') {
|
|
276
|
+
setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin.toString());
|
|
277
|
+
}
|
|
278
|
+
setEnvIfNotSet('CORS_METHODS', config.security.cors.methods?.join(','));
|
|
279
|
+
setEnvIfNotSet('CORS_HEADERS', config.security.cors.allowedHeaders?.join(','));
|
|
280
|
+
setEnvIfNotSet('CORS_CREDENTIALS', config.security.cors.credentials?.toString());
|
|
281
|
+
}
|
|
282
|
+
if (config.security.helmet) {
|
|
283
|
+
setEnvIfNotSet('HELMET_ENABLED', config.security.helmet.enabled?.toString());
|
|
284
|
+
setEnvIfNotSet('HELMET_CSP', config.security.helmet.contentSecurityPolicy?.toString());
|
|
285
|
+
setEnvIfNotSet('HELMET_HSTS', config.security.helmet.hsts?.toString());
|
|
286
|
+
setEnvIfNotSet('HELMET_NO_SNIFF', config.security.helmet.noSniff?.toString());
|
|
287
|
+
setEnvIfNotSet('HELMET_FRAMEGUARD', config.security.helmet.frameguard?.toString());
|
|
288
|
+
}
|
|
289
|
+
if (config.security.rateLimit?.global) {
|
|
290
|
+
setEnvIfNotSet('GLOBAL_RATE_LIMIT_ENABLED', config.security.rateLimit.global.enabled?.toString());
|
|
291
|
+
setEnvIfNotSet('GLOBAL_RATE_LIMIT_REQUESTS', config.security.rateLimit.global.requests?.toString());
|
|
292
|
+
setEnvIfNotSet('GLOBAL_RATE_LIMIT_WINDOW', config.security.rateLimit.global.window?.toString());
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Apply external services configuration
|
|
296
|
+
if (config.external) {
|
|
297
|
+
if (config.external.stripe) {
|
|
298
|
+
setEnvIfNotSet('STRIPE_SECRET_KEY', config.external.stripe.secretKey);
|
|
299
|
+
setEnvIfNotSet('STRIPE_PUBLISHABLE_KEY', config.external.stripe.publishableKey);
|
|
300
|
+
setEnvIfNotSet('STRIPE_WEBHOOK_SECRET', config.external.stripe.webhookSecret);
|
|
301
|
+
setEnvIfNotSet('STRIPE_API_VERSION', config.external.stripe.apiVersion);
|
|
302
|
+
}
|
|
303
|
+
if (config.external.paypal) {
|
|
304
|
+
setEnvIfNotSet('PAYPAL_CLIENT_ID', config.external.paypal.clientId);
|
|
305
|
+
setEnvIfNotSet('PAYPAL_CLIENT_SECRET', config.external.paypal.clientSecret);
|
|
306
|
+
setEnvIfNotSet('PAYPAL_WEBHOOK_ID', config.external.paypal.webhookId);
|
|
307
|
+
setEnvIfNotSet('PAYPAL_ENVIRONMENT', config.external.paypal.environment);
|
|
308
|
+
}
|
|
309
|
+
if (config.external.smtp) {
|
|
310
|
+
setEnvIfNotSet('SMTP_HOST', config.external.smtp.host);
|
|
311
|
+
setEnvIfNotSet('SMTP_PORT', config.external.smtp.port?.toString());
|
|
312
|
+
setEnvIfNotSet('SMTP_SECURE', config.external.smtp.secure?.toString());
|
|
313
|
+
setEnvIfNotSet('SMTP_USERNAME', config.external.smtp.username);
|
|
314
|
+
setEnvIfNotSet('SMTP_PASSWORD', config.external.smtp.password);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// Apply performance configuration
|
|
318
|
+
if (config.performance) {
|
|
319
|
+
if (config.performance.compression) {
|
|
320
|
+
setEnvIfNotSet('COMPRESSION_ENABLED', config.performance.compression.enabled?.toString());
|
|
321
|
+
setEnvIfNotSet('COMPRESSION_LEVEL', config.performance.compression.level?.toString());
|
|
322
|
+
setEnvIfNotSet('COMPRESSION_THRESHOLD', config.performance.compression.threshold?.toString());
|
|
323
|
+
}
|
|
324
|
+
if (config.performance.circuitBreaker) {
|
|
325
|
+
setEnvIfNotSet('CIRCUIT_BREAKER_ENABLED', config.performance.circuitBreaker.enabled?.toString());
|
|
326
|
+
setEnvIfNotSet('CIRCUIT_BREAKER_THRESHOLD', config.performance.circuitBreaker.failureThreshold?.toString());
|
|
327
|
+
setEnvIfNotSet('CIRCUIT_BREAKER_RESET', config.performance.circuitBreaker.resetTimeout?.toString());
|
|
328
|
+
setEnvIfNotSet('CIRCUIT_BREAKER_MONITOR', config.performance.circuitBreaker.monitoringPeriod?.toString());
|
|
329
|
+
}
|
|
330
|
+
if (config.performance.clustering) {
|
|
331
|
+
setEnvIfNotSet('CLUSTERING_ENABLED', config.performance.clustering.enabled?.toString());
|
|
332
|
+
setEnvIfNotSet('CLUSTER_WORKERS', config.performance.clustering.workers?.toString());
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Set environment variable only if it's not already set
|
|
338
|
+
* This ensures environment variables take precedence over config file values
|
|
339
|
+
*/
|
|
340
|
+
function setEnvIfNotSet(key, value) {
|
|
341
|
+
if (value !== undefined && process.env[key] === undefined) {
|
|
342
|
+
process.env[key] = value;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=file-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-loader.js","sourceRoot":"","sources":["../../../src/core/config/file-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './schema';
|
|
2
2
|
export * from './loader';
|
|
3
3
|
export * from './utils';
|
|
4
|
+
export * from './file-loader';
|
|
4
5
|
export { z } from 'zod';
|
|
5
6
|
import type { AppConfig } from './schema';
|
|
6
7
|
/**
|
|
@@ -17,3 +18,8 @@ export declare function getGlobalConfig(): AppConfig;
|
|
|
17
18
|
* Check if configuration has been initialized
|
|
18
19
|
*/
|
|
19
20
|
export declare function isConfigInitialized(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Reset the global configuration state (for testing purposes)
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare function resetConfig(): void;
|
|
@@ -18,15 +18,18 @@ exports.z = void 0;
|
|
|
18
18
|
exports.initializeConfig = initializeConfig;
|
|
19
19
|
exports.getGlobalConfig = getGlobalConfig;
|
|
20
20
|
exports.isConfigInitialized = isConfigInitialized;
|
|
21
|
+
exports.resetConfig = resetConfig;
|
|
21
22
|
// Configuration System - Main Exports and Utilities
|
|
22
23
|
__exportStar(require("./schema"), exports);
|
|
23
24
|
__exportStar(require("./loader"), exports);
|
|
24
25
|
__exportStar(require("./utils"), exports);
|
|
26
|
+
__exportStar(require("./file-loader"), exports);
|
|
25
27
|
// Re-export common Zod utilities for configuration
|
|
26
28
|
var zod_1 = require("zod");
|
|
27
29
|
Object.defineProperty(exports, "z", { enumerable: true, get: function () { return zod_1.z; } });
|
|
28
30
|
// Main configuration loading function
|
|
29
31
|
const loader_1 = require("./loader");
|
|
32
|
+
const utils_1 = require("./utils");
|
|
30
33
|
// Global configuration instance
|
|
31
34
|
let globalConfig = null;
|
|
32
35
|
/**
|
|
@@ -38,6 +41,8 @@ function initializeConfig() {
|
|
|
38
41
|
return globalConfig;
|
|
39
42
|
}
|
|
40
43
|
globalConfig = (0, loader_1.loadConfig)();
|
|
44
|
+
// Also set the config for utils functions
|
|
45
|
+
(0, utils_1.setConfig)(globalConfig);
|
|
41
46
|
return globalConfig;
|
|
42
47
|
}
|
|
43
48
|
/**
|
|
@@ -56,4 +61,14 @@ function getGlobalConfig() {
|
|
|
56
61
|
function isConfigInitialized() {
|
|
57
62
|
return globalConfig !== null;
|
|
58
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Reset the global configuration state (for testing purposes)
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
function resetConfig() {
|
|
69
|
+
globalConfig = null;
|
|
70
|
+
// Also reset the utils config (by setting it to null via direct access)
|
|
71
|
+
const { setConfig } = require('./utils');
|
|
72
|
+
setConfig(null);
|
|
73
|
+
}
|
|
59
74
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAqBA,4CAWC;AAMD,0CAKC;AAKD,kDAEC;AAMD,kCAMC;AA9DD,oDAAoD;AACpD,2CAAyB;AACzB,2CAAyB;AACzB,0CAAwB;AACxB,gDAA8B;AAE9B,mDAAmD;AACnD,2BAAwB;AAAf,wFAAA,CAAC,OAAA;AAEV,sCAAsC;AACtC,qCAAsC;AAEtC,mCAAoC;AAEpC,gCAAgC;AAChC,IAAI,YAAY,GAAqB,IAAI,CAAC;AAE1C;;;GAGG;AACH,SAAgB,gBAAgB;IAC9B,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,YAAY,GAAG,IAAA,mBAAU,GAAE,CAAC;IAE5B,0CAA0C;IAC1C,IAAA,iBAAS,EAAC,YAAY,CAAC,CAAC;IAExB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe;IAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,YAAY,KAAK,IAAI,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW;IACzB,YAAY,GAAG,IAAI,CAAC;IAEpB,wEAAwE;IACxE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,SAAS,CAAC,IAAW,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AppConfig } from './schema';
|
|
2
2
|
/**
|
|
3
|
-
* Load and validate configuration from environment variables
|
|
3
|
+
* Load and validate configuration from config files and environment variables
|
|
4
|
+
* Priority: Environment Variables > Config File > Schema Defaults
|
|
4
5
|
* @returns Validated and typed application configuration
|
|
5
6
|
*/
|
|
6
7
|
export declare function loadConfig(): AppConfig;
|
|
@@ -5,13 +5,26 @@ exports.loadConfig = loadConfig;
|
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
6
|
const schema_1 = require("./schema");
|
|
7
7
|
const logger_1 = require("../logger");
|
|
8
|
+
const file_loader_1 = require("./file-loader");
|
|
8
9
|
const logger = (0, logger_1.createFrameworkLogger)('Config');
|
|
9
10
|
/**
|
|
10
|
-
* Load and validate configuration from environment variables
|
|
11
|
+
* Load and validate configuration from config files and environment variables
|
|
12
|
+
* Priority: Environment Variables > Config File > Schema Defaults
|
|
11
13
|
* @returns Validated and typed application configuration
|
|
12
14
|
*/
|
|
13
15
|
function loadConfig() {
|
|
14
|
-
logger.debug('Loading configuration from environment variables');
|
|
16
|
+
logger.debug('Loading configuration from config files and environment variables');
|
|
17
|
+
// First, try to load from config file and apply as environment variables (synchronously)
|
|
18
|
+
try {
|
|
19
|
+
const fileConfig = (0, file_loader_1.loadConfigFileSync)();
|
|
20
|
+
if (fileConfig) {
|
|
21
|
+
logger.debug('Applying config file values as environment variables');
|
|
22
|
+
(0, file_loader_1.applyConfigAsEnvironmentVariables)(fileConfig);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
logger.warn('Config file loading failed, continuing with environment variables only:', String(error));
|
|
27
|
+
}
|
|
15
28
|
// Map environment variables to configuration structure
|
|
16
29
|
const envConfig = {
|
|
17
30
|
server: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,12 +32,53 @@ function getConfig() {
|
|
|
32
32
|
}
|
|
33
33
|
return appConfig;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Coerce environment variable string values to appropriate types
|
|
37
|
+
*/
|
|
38
|
+
function coerceEnvironmentValue(value) {
|
|
39
|
+
// Handle boolean values
|
|
40
|
+
if (value.toLowerCase() === 'true')
|
|
41
|
+
return true;
|
|
42
|
+
if (value.toLowerCase() === 'false')
|
|
43
|
+
return false;
|
|
44
|
+
// Handle numeric values
|
|
45
|
+
if (/^\d+$/.test(value)) {
|
|
46
|
+
const num = parseInt(value, 10);
|
|
47
|
+
return num;
|
|
48
|
+
}
|
|
49
|
+
if (/^\d+\.\d+$/.test(value)) {
|
|
50
|
+
const num = parseFloat(value);
|
|
51
|
+
return num;
|
|
52
|
+
}
|
|
53
|
+
// Handle JSON objects/arrays
|
|
54
|
+
if ((value.startsWith('{') && value.endsWith('}')) ||
|
|
55
|
+
(value.startsWith('[') && value.endsWith(']'))) {
|
|
56
|
+
try {
|
|
57
|
+
return JSON.parse(value);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// If JSON parsing fails, return as string
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Return as string for all other cases
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
35
67
|
/**
|
|
36
68
|
* Create module-specific configuration with environment override support
|
|
37
69
|
*/
|
|
38
70
|
function createModuleConfig(schema, defaultConfig, envPrefix) {
|
|
39
|
-
|
|
40
|
-
|
|
71
|
+
// Try to get global config, but don't fail if not initialized
|
|
72
|
+
let globalConfig = {};
|
|
73
|
+
try {
|
|
74
|
+
const { getGlobalConfig } = require('./index');
|
|
75
|
+
globalConfig = getGlobalConfig();
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Global config not initialized - use empty object (module config can still work independently)
|
|
79
|
+
globalConfig = {};
|
|
80
|
+
}
|
|
81
|
+
// Build environment configuration object with type coercion
|
|
41
82
|
const envConfig = {};
|
|
42
83
|
if (envPrefix) {
|
|
43
84
|
// Extract environment variables with the given prefix
|
|
@@ -47,13 +88,19 @@ function createModuleConfig(schema, defaultConfig, envPrefix) {
|
|
|
47
88
|
.substring(envPrefix.length)
|
|
48
89
|
.toLowerCase()
|
|
49
90
|
.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
50
|
-
|
|
91
|
+
const envValue = process.env[key];
|
|
92
|
+
if (envValue !== undefined) {
|
|
93
|
+
// Attempt basic type coercion for common types
|
|
94
|
+
envConfig[configKey] = coerceEnvironmentValue(envValue);
|
|
95
|
+
}
|
|
51
96
|
}
|
|
52
97
|
});
|
|
53
98
|
}
|
|
54
99
|
// Merge default config, global defaults, and environment overrides
|
|
100
|
+
// Priority: environment variables > global config > default config
|
|
55
101
|
const mergedConfig = {
|
|
56
102
|
...defaultConfig,
|
|
103
|
+
...globalConfig, // Now actually using global config!
|
|
57
104
|
...envConfig,
|
|
58
105
|
};
|
|
59
106
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/config/utils.ts"],"names":[],"mappings":";;AAaA,8BAGC;AAKD,8BAKC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/core/config/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -21,7 +21,8 @@ export type { RouteBuilder, RouteSchema, CompiledRoute, HttpMethod, AuthConfig,
|
|
|
21
21
|
export { DocumentationSystem, AppDocumentationManager, createDocumentationSystem, generateDocsFromIntelligentRoutes, } from './core/docs';
|
|
22
22
|
export type { DocsConfig } from './core/docs';
|
|
23
23
|
export { getConfig, createModuleConfig, getEnvVar, getEnvArray, getEnvJson, isDevelopment, isProduction, isStaging, requireEnvVars, envVar, getConfigValue, } from './core/config/utils';
|
|
24
|
-
export { initializeConfig, getGlobalConfig, isConfigInitialized } from './core/config';
|
|
24
|
+
export { initializeConfig, getGlobalConfig, isConfigInitialized, resetConfig } from './core/config';
|
|
25
|
+
export type { AppConfig } from './core/config';
|
|
25
26
|
export { MiddlewareManager } from './core/middleware';
|
|
26
27
|
export type { MiddlewareInterface, MoroMiddleware } from './core/middleware';
|
|
27
28
|
export type * from './types/core';
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.EXECUTION_PHASES = exports.defineRoute = exports.createRoute = exports.autoDiscoverModuleDirectories = exports.ModuleDiscovery = exports.ModuleLoader = exports.defineModule = exports.z = exports.combineSchemas = exports.params = exports.query = exports.body = exports.validate = exports.logger = exports.createFrameworkLogger = exports.MoroEventBus = exports.middleware = exports.HOOK_EVENTS = exports.HookManager = exports.CircuitBreaker = exports.withTimeout = exports.withRetry = exports.withCaching = exports.withLogging = exports.ServiceLifecycle = exports.ServiceScope = exports.FunctionalContainer = exports.Container = exports.ServiceRegistry = exports.WebSocketManager = exports.simpleMiddleware = exports.builtInMiddleware = exports.httpMiddleware = exports.MoroHttpServer = exports.createWorkerHandler = exports.createLambdaHandler = exports.createEdgeHandler = exports.createNodeHandler = exports.createRuntimeAdapter = exports.CloudflareWorkersAdapter = exports.AWSLambdaAdapter = exports.VercelEdgeAdapter = exports.NodeRuntimeAdapter = exports.createAppWorker = exports.createAppLambda = exports.createAppEdge = exports.createAppNode = exports.createApp = exports.MoroCore = exports.Moro = void 0;
|
|
18
|
-
exports.MiddlewareManager = exports.isConfigInitialized = exports.getGlobalConfig = exports.initializeConfig = exports.getConfigValue = exports.envVar = exports.requireEnvVars = exports.isStaging = exports.isProduction = exports.isDevelopment = exports.getEnvJson = exports.getEnvArray = exports.getEnvVar = exports.createModuleConfig = exports.getConfig = exports.generateDocsFromIntelligentRoutes = exports.createDocumentationSystem = exports.AppDocumentationManager = exports.DocumentationSystem = exports.RouteRegistry = exports.IntelligentRoutingManager = void 0;
|
|
18
|
+
exports.MiddlewareManager = exports.resetConfig = exports.isConfigInitialized = exports.getGlobalConfig = exports.initializeConfig = exports.getConfigValue = exports.envVar = exports.requireEnvVars = exports.isStaging = exports.isProduction = exports.isDevelopment = exports.getEnvJson = exports.getEnvArray = exports.getEnvVar = exports.createModuleConfig = exports.getConfig = exports.generateDocsFromIntelligentRoutes = exports.createDocumentationSystem = exports.AppDocumentationManager = exports.DocumentationSystem = exports.RouteRegistry = exports.IntelligentRoutingManager = void 0;
|
|
19
19
|
// MoroJS Framework - Main Entry Point
|
|
20
20
|
var moro_1 = require("./moro");
|
|
21
21
|
Object.defineProperty(exports, "Moro", { enumerable: true, get: function () { return moro_1.Moro; } });
|
|
@@ -112,6 +112,7 @@ var config_1 = require("./core/config");
|
|
|
112
112
|
Object.defineProperty(exports, "initializeConfig", { enumerable: true, get: function () { return config_1.initializeConfig; } });
|
|
113
113
|
Object.defineProperty(exports, "getGlobalConfig", { enumerable: true, get: function () { return config_1.getGlobalConfig; } });
|
|
114
114
|
Object.defineProperty(exports, "isConfigInitialized", { enumerable: true, get: function () { return config_1.isConfigInitialized; } });
|
|
115
|
+
Object.defineProperty(exports, "resetConfig", { enumerable: true, get: function () { return config_1.resetConfig; } });
|
|
115
116
|
// Middleware System
|
|
116
117
|
var middleware_1 = require("./core/middleware");
|
|
117
118
|
Object.defineProperty(exports, "MiddlewareManager", { enumerable: true, get: function () { return middleware_1.MiddlewareManager; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,sCAAsC;AACtC,+BAQgB;AAPd,4FAAA,IAAI,OAAA;AACJ,gGAAA,IAAI,OAAY;AAChB,iGAAA,SAAS,OAAA;AACT,qGAAA,aAAa,OAAA;AACb,qGAAA,aAAa,OAAA;AACb,uGAAA,eAAe,OAAA;AACf,uGAAA,eAAe,OAAA;AAajB,0CAUwB;AATtB,6GAAA,kBAAkB,OAAA;AAClB,4GAAA,iBAAiB,OAAA;AACjB,2GAAA,gBAAgB,OAAA;AAChB,mHAAA,wBAAwB,OAAA;AACxB,+GAAA,oBAAoB,OAAA;AACpB,4GAAA,iBAAiB,OAAA;AACjB,4GAAA,iBAAiB,OAAA;AACjB,8GAAA,mBAAmB,OAAA;AACnB,8GAAA,mBAAmB,OAAA;AAOrB,eAAe;AACf,oCAA2E;AAAlE,sGAAA,cAAc,OAAA;AAAE,sGAAA,UAAU,OAAkB;AACrD,uDAAiF;AAAxE,6GAAA,iBAAiB,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAE5C,oBAAoB;AACpB,gDAK2B;AAJzB,8GAAA,gBAAgB,OAAA;AAChB,6GAAA,eAAe,OAAA;AAKjB,iCAAiC;AACjC,8CAa0B;AAZxB,sGAAA,SAAS,OAAA;AACT,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA;AACZ,6GAAA,gBAAgB,OAAA;AAChB,wGAAA,WAAW,OAAA;AACX,wGAAA,WAAW,OAAA;AACX,sGAAA,SAAS,OAAA;AACT,wGAAA,WAAW,OAAA;AACX,2GAAA,cAAc,OAAA;AACd,wGAAA,WAAW,OAAA;AACX,wGAAA,WAAW,OAAA;AACX,uGAAA,UAAU,OAAA;AAGZ,eAAe;AACf,wCAA6C;AAApC,sGAAA,YAAY,OAAA;AAYrB,gBAAgB;AAChB,wCAA8D;AAArD,+GAAA,qBAAqB,OAAA;AAAE,gGAAA,MAAM,OAAA;AAEtC,gCAAgC;AAChC,gDAAqF;AAA5E,sGAAA,QAAQ,OAAA;AAAE,kGAAA,IAAI,OAAA;AAAE,mGAAA,KAAK,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,4GAAA,cAAc,OAAA;AAAE,+FAAA,CAAC,OAAA;AAQzD,gBAAgB;AAChB,0CAKwB;AAJtB,uGAAA,YAAY,OAAA;AACZ,uGAAA,YAAY,OAAA;AACZ,0GAAA,eAAe,OAAA;AACf,wHAAA,6BAA6B,OAAA;AAI/B,6BAA6B;AAC7B,0CAA4E;AAAnE,sGAAA,WAAW,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AACnD,kEAA0F;AAAjF,4HAAA,yBAAyB,OAAA;AAAE,gHAAA,aAAa,OAAA;AAajD,uBAAuB;AACvB,oCAKqB;AAJnB,2GAAA,mBAAmB,OAAA;AACnB,+GAAA,uBAAuB,OAAA;AACvB,iHAAA,yBAAyB,OAAA;AACzB,yHAAA,iCAAiC,OAAA;AAInC,0BAA0B;AAC1B,6CAY6B;AAX3B,kGAAA,SAAS,OAAA;AACT,2GAAA,kBAAkB,OAAA;AAClB,kGAAA,SAAS,OAAA;AACT,oGAAA,WAAW,OAAA;AACX,mGAAA,UAAU,OAAA;AACV,sGAAA,aAAa,OAAA;AACb,qGAAA,YAAY,OAAA;AACZ,kGAAA,SAAS,OAAA;AACT,uGAAA,cAAc,OAAA;AACd,+FAAA,MAAM,OAAA;AACN,uGAAA,cAAc,OAAA;AAGhB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@morojs/moro",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "High-performance Node.js framework with intelligent routing, automatic middleware ordering, type-safe Zod validation, and functional architecture",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
// Configuration File Loader - Load moro.config.js/ts files
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { AppConfig } from './schema';
|
|
5
|
+
import { createFrameworkLogger } from '../logger';
|
|
6
|
+
|
|
7
|
+
const logger = createFrameworkLogger('ConfigFile');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Supported configuration file names in order of preference
|
|
11
|
+
*/
|
|
12
|
+
const CONFIG_FILES = ['moro.config.js', 'moro.config.ts'] as const;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Find and load configuration from moro.config.js (synchronously)
|
|
16
|
+
* @param cwd Current working directory to search for config files
|
|
17
|
+
* @returns Partial configuration object or null if no config file found
|
|
18
|
+
*/
|
|
19
|
+
export function loadConfigFileSync(cwd: string = process.cwd()): Partial<AppConfig> | null {
|
|
20
|
+
const configFile = findConfigFile(cwd);
|
|
21
|
+
|
|
22
|
+
if (!configFile) {
|
|
23
|
+
logger.debug('No configuration file found');
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Only support .js files for synchronous loading to avoid complexity
|
|
28
|
+
if (!configFile.endsWith('.js')) {
|
|
29
|
+
logger.debug(
|
|
30
|
+
'Found config file, but only JavaScript files are supported in sync mode. Use loadConfigFile() for TypeScript support.'
|
|
31
|
+
);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
logger.debug(`Loading configuration from: ${configFile}`);
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
// Clear module cache to ensure fresh load
|
|
39
|
+
delete require.cache[require.resolve(configFile)];
|
|
40
|
+
|
|
41
|
+
const config = require(configFile);
|
|
42
|
+
const configData = config.default || config;
|
|
43
|
+
|
|
44
|
+
if (!configData || typeof configData !== 'object') {
|
|
45
|
+
logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
logger.info(`Configuration loaded from: ${configFile}`);
|
|
50
|
+
return configData;
|
|
51
|
+
} catch (error) {
|
|
52
|
+
logger.error(`Failed to load configuration file ${configFile}:`, String(error));
|
|
53
|
+
logger.warn('Falling back to environment variable configuration');
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Find and load configuration from moro.config.js or moro.config.ts (async)
|
|
60
|
+
* @param cwd Current working directory to search for config files
|
|
61
|
+
* @returns Partial configuration object or null if no config file found
|
|
62
|
+
*/
|
|
63
|
+
export async function loadConfigFile(
|
|
64
|
+
cwd: string = process.cwd()
|
|
65
|
+
): Promise<Partial<AppConfig> | null> {
|
|
66
|
+
const configFile = findConfigFile(cwd);
|
|
67
|
+
|
|
68
|
+
if (!configFile) {
|
|
69
|
+
logger.debug('No configuration file found');
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
logger.debug(`Loading configuration from: ${configFile}`);
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
const config = await importConfigFile(configFile);
|
|
77
|
+
|
|
78
|
+
if (!config || typeof config !== 'object') {
|
|
79
|
+
logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
logger.info(`Configuration loaded from: ${configFile}`);
|
|
84
|
+
return config;
|
|
85
|
+
} catch (error) {
|
|
86
|
+
logger.error(`Failed to load configuration file ${configFile}:`, String(error));
|
|
87
|
+
logger.warn('Falling back to environment variable configuration');
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Find the first existing configuration file in the given directory
|
|
94
|
+
*/
|
|
95
|
+
function findConfigFile(cwd: string): string | null {
|
|
96
|
+
for (const fileName of CONFIG_FILES) {
|
|
97
|
+
const filePath = join(cwd, fileName);
|
|
98
|
+
if (existsSync(filePath)) {
|
|
99
|
+
return filePath;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Dynamically import a configuration file
|
|
107
|
+
*/
|
|
108
|
+
async function importConfigFile(filePath: string): Promise<Partial<AppConfig> | null> {
|
|
109
|
+
const isTypeScript = filePath.endsWith('.ts');
|
|
110
|
+
|
|
111
|
+
if (isTypeScript) {
|
|
112
|
+
// For TypeScript files, we need to handle ts-node/tsx or similar
|
|
113
|
+
await setupTypeScriptLoader();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
try {
|
|
117
|
+
// Use dynamic import to load the configuration
|
|
118
|
+
const configModule = await import(filePath);
|
|
119
|
+
|
|
120
|
+
// Handle both default export and module.exports
|
|
121
|
+
const config = configModule.default || configModule;
|
|
122
|
+
|
|
123
|
+
return config;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
// If TypeScript loading fails, provide helpful error message
|
|
126
|
+
if (
|
|
127
|
+
isTypeScript &&
|
|
128
|
+
error instanceof Error &&
|
|
129
|
+
error.message.includes('Unknown file extension')
|
|
130
|
+
) {
|
|
131
|
+
throw new Error(
|
|
132
|
+
`Failed to load TypeScript config file. Make sure you have ts-node installed: npm install --save-dev ts-node`
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Setup TypeScript loader for .ts config files
|
|
141
|
+
*/
|
|
142
|
+
async function setupTypeScriptLoader(): Promise<void> {
|
|
143
|
+
try {
|
|
144
|
+
// Try to register ts-node if available
|
|
145
|
+
const tsNode = await import('ts-node');
|
|
146
|
+
if (!tsNode.register) {
|
|
147
|
+
// ts-node might already be registered
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
tsNode.register({
|
|
152
|
+
transpileOnly: true,
|
|
153
|
+
compilerOptions: {
|
|
154
|
+
module: 'commonjs',
|
|
155
|
+
target: 'es2020',
|
|
156
|
+
moduleResolution: 'node',
|
|
157
|
+
allowSyntheticDefaultImports: true,
|
|
158
|
+
esModuleInterop: true,
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
} catch (error) {
|
|
162
|
+
// ts-node not available, try other methods or fail gracefully
|
|
163
|
+
logger.debug('ts-node not available for TypeScript config loading');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Convert a configuration object to environment variable mappings
|
|
169
|
+
* This function flattens the config object and sets corresponding environment variables
|
|
170
|
+
*/
|
|
171
|
+
export function applyConfigAsEnvironmentVariables(config: Partial<AppConfig>): void {
|
|
172
|
+
if (!config || typeof config !== 'object') {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Apply server configuration
|
|
177
|
+
if (config.server) {
|
|
178
|
+
setEnvIfNotSet('PORT', config.server.port?.toString());
|
|
179
|
+
setEnvIfNotSet('HOST', config.server.host);
|
|
180
|
+
setEnvIfNotSet('NODE_ENV', config.server.environment);
|
|
181
|
+
setEnvIfNotSet('MAX_CONNECTIONS', config.server.maxConnections?.toString());
|
|
182
|
+
setEnvIfNotSet('REQUEST_TIMEOUT', config.server.timeout?.toString());
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Apply database configuration
|
|
186
|
+
if (config.database) {
|
|
187
|
+
setEnvIfNotSet('DATABASE_URL', config.database.url);
|
|
188
|
+
|
|
189
|
+
if (config.database.redis) {
|
|
190
|
+
setEnvIfNotSet('REDIS_URL', config.database.redis.url);
|
|
191
|
+
setEnvIfNotSet('REDIS_MAX_RETRIES', config.database.redis.maxRetries?.toString());
|
|
192
|
+
setEnvIfNotSet('REDIS_RETRY_DELAY', config.database.redis.retryDelay?.toString());
|
|
193
|
+
setEnvIfNotSet('REDIS_KEY_PREFIX', config.database.redis.keyPrefix);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (config.database.mysql) {
|
|
197
|
+
setEnvIfNotSet('MYSQL_HOST', config.database.mysql.host);
|
|
198
|
+
setEnvIfNotSet('MYSQL_PORT', config.database.mysql.port?.toString());
|
|
199
|
+
setEnvIfNotSet('MYSQL_DATABASE', config.database.mysql.database);
|
|
200
|
+
setEnvIfNotSet('MYSQL_USERNAME', config.database.mysql.username);
|
|
201
|
+
setEnvIfNotSet('MYSQL_PASSWORD', config.database.mysql.password);
|
|
202
|
+
setEnvIfNotSet('MYSQL_CONNECTION_LIMIT', config.database.mysql.connectionLimit?.toString());
|
|
203
|
+
setEnvIfNotSet('MYSQL_ACQUIRE_TIMEOUT', config.database.mysql.acquireTimeout?.toString());
|
|
204
|
+
setEnvIfNotSet('MYSQL_TIMEOUT', config.database.mysql.timeout?.toString());
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Apply service discovery configuration
|
|
209
|
+
if (config.serviceDiscovery) {
|
|
210
|
+
setEnvIfNotSet('SERVICE_DISCOVERY_ENABLED', config.serviceDiscovery.enabled?.toString());
|
|
211
|
+
setEnvIfNotSet('DISCOVERY_TYPE', config.serviceDiscovery.type);
|
|
212
|
+
setEnvIfNotSet('CONSUL_URL', config.serviceDiscovery.consulUrl);
|
|
213
|
+
setEnvIfNotSet('K8S_NAMESPACE', config.serviceDiscovery.kubernetesNamespace);
|
|
214
|
+
setEnvIfNotSet(
|
|
215
|
+
'HEALTH_CHECK_INTERVAL',
|
|
216
|
+
config.serviceDiscovery.healthCheckInterval?.toString()
|
|
217
|
+
);
|
|
218
|
+
setEnvIfNotSet('DISCOVERY_RETRY_ATTEMPTS', config.serviceDiscovery.retryAttempts?.toString());
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Apply logging configuration
|
|
222
|
+
if (config.logging) {
|
|
223
|
+
setEnvIfNotSet('LOG_LEVEL', config.logging.level);
|
|
224
|
+
setEnvIfNotSet('LOG_FORMAT', config.logging.format);
|
|
225
|
+
setEnvIfNotSet('LOG_COLORS', config.logging.enableColors?.toString());
|
|
226
|
+
setEnvIfNotSet('LOG_TIMESTAMP', config.logging.enableTimestamp?.toString());
|
|
227
|
+
setEnvIfNotSet('LOG_CONTEXT', config.logging.enableContext?.toString());
|
|
228
|
+
|
|
229
|
+
if (config.logging.outputs) {
|
|
230
|
+
setEnvIfNotSet('LOG_CONSOLE', config.logging.outputs.console?.toString());
|
|
231
|
+
|
|
232
|
+
if (config.logging.outputs.file) {
|
|
233
|
+
setEnvIfNotSet('LOG_FILE_ENABLED', config.logging.outputs.file.enabled?.toString());
|
|
234
|
+
setEnvIfNotSet('LOG_FILE_PATH', config.logging.outputs.file.path);
|
|
235
|
+
setEnvIfNotSet('LOG_FILE_MAX_SIZE', config.logging.outputs.file.maxSize);
|
|
236
|
+
setEnvIfNotSet('LOG_FILE_MAX_FILES', config.logging.outputs.file.maxFiles?.toString());
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (config.logging.outputs.webhook) {
|
|
240
|
+
setEnvIfNotSet('LOG_WEBHOOK_ENABLED', config.logging.outputs.webhook.enabled?.toString());
|
|
241
|
+
setEnvIfNotSet('LOG_WEBHOOK_URL', config.logging.outputs.webhook.url);
|
|
242
|
+
if (config.logging.outputs.webhook.headers) {
|
|
243
|
+
setEnvIfNotSet(
|
|
244
|
+
'LOG_WEBHOOK_HEADERS',
|
|
245
|
+
JSON.stringify(config.logging.outputs.webhook.headers)
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Apply module defaults
|
|
253
|
+
if (config.modules) {
|
|
254
|
+
if (config.modules.cache) {
|
|
255
|
+
setEnvIfNotSet('CACHE_ENABLED', config.modules.cache.enabled?.toString());
|
|
256
|
+
setEnvIfNotSet('DEFAULT_CACHE_TTL', config.modules.cache.defaultTtl?.toString());
|
|
257
|
+
setEnvIfNotSet('CACHE_MAX_SIZE', config.modules.cache.maxSize?.toString());
|
|
258
|
+
setEnvIfNotSet('CACHE_STRATEGY', config.modules.cache.strategy);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (config.modules.rateLimit) {
|
|
262
|
+
setEnvIfNotSet('RATE_LIMIT_ENABLED', config.modules.rateLimit.enabled?.toString());
|
|
263
|
+
setEnvIfNotSet(
|
|
264
|
+
'DEFAULT_RATE_LIMIT_REQUESTS',
|
|
265
|
+
config.modules.rateLimit.defaultRequests?.toString()
|
|
266
|
+
);
|
|
267
|
+
setEnvIfNotSet(
|
|
268
|
+
'DEFAULT_RATE_LIMIT_WINDOW',
|
|
269
|
+
config.modules.rateLimit.defaultWindow?.toString()
|
|
270
|
+
);
|
|
271
|
+
setEnvIfNotSet(
|
|
272
|
+
'RATE_LIMIT_SKIP_SUCCESS',
|
|
273
|
+
config.modules.rateLimit.skipSuccessfulRequests?.toString()
|
|
274
|
+
);
|
|
275
|
+
setEnvIfNotSet(
|
|
276
|
+
'RATE_LIMIT_SKIP_FAILED',
|
|
277
|
+
config.modules.rateLimit.skipFailedRequests?.toString()
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (config.modules.validation) {
|
|
282
|
+
setEnvIfNotSet('VALIDATION_ENABLED', config.modules.validation.enabled?.toString());
|
|
283
|
+
setEnvIfNotSet(
|
|
284
|
+
'VALIDATION_STRIP_UNKNOWN',
|
|
285
|
+
config.modules.validation.stripUnknown?.toString()
|
|
286
|
+
);
|
|
287
|
+
setEnvIfNotSet('VALIDATION_ABORT_EARLY', config.modules.validation.abortEarly?.toString());
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Apply security configuration
|
|
292
|
+
if (config.security) {
|
|
293
|
+
if (config.security.cors) {
|
|
294
|
+
setEnvIfNotSet('CORS_ENABLED', config.security.cors.enabled?.toString());
|
|
295
|
+
if (typeof config.security.cors.origin === 'string') {
|
|
296
|
+
setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin);
|
|
297
|
+
} else if (Array.isArray(config.security.cors.origin)) {
|
|
298
|
+
setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin.join(','));
|
|
299
|
+
} else if (typeof config.security.cors.origin === 'boolean') {
|
|
300
|
+
setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin.toString());
|
|
301
|
+
}
|
|
302
|
+
setEnvIfNotSet('CORS_METHODS', config.security.cors.methods?.join(','));
|
|
303
|
+
setEnvIfNotSet('CORS_HEADERS', config.security.cors.allowedHeaders?.join(','));
|
|
304
|
+
setEnvIfNotSet('CORS_CREDENTIALS', config.security.cors.credentials?.toString());
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (config.security.helmet) {
|
|
308
|
+
setEnvIfNotSet('HELMET_ENABLED', config.security.helmet.enabled?.toString());
|
|
309
|
+
setEnvIfNotSet('HELMET_CSP', config.security.helmet.contentSecurityPolicy?.toString());
|
|
310
|
+
setEnvIfNotSet('HELMET_HSTS', config.security.helmet.hsts?.toString());
|
|
311
|
+
setEnvIfNotSet('HELMET_NO_SNIFF', config.security.helmet.noSniff?.toString());
|
|
312
|
+
setEnvIfNotSet('HELMET_FRAMEGUARD', config.security.helmet.frameguard?.toString());
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
if (config.security.rateLimit?.global) {
|
|
316
|
+
setEnvIfNotSet(
|
|
317
|
+
'GLOBAL_RATE_LIMIT_ENABLED',
|
|
318
|
+
config.security.rateLimit.global.enabled?.toString()
|
|
319
|
+
);
|
|
320
|
+
setEnvIfNotSet(
|
|
321
|
+
'GLOBAL_RATE_LIMIT_REQUESTS',
|
|
322
|
+
config.security.rateLimit.global.requests?.toString()
|
|
323
|
+
);
|
|
324
|
+
setEnvIfNotSet(
|
|
325
|
+
'GLOBAL_RATE_LIMIT_WINDOW',
|
|
326
|
+
config.security.rateLimit.global.window?.toString()
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Apply external services configuration
|
|
332
|
+
if (config.external) {
|
|
333
|
+
if (config.external.stripe) {
|
|
334
|
+
setEnvIfNotSet('STRIPE_SECRET_KEY', config.external.stripe.secretKey);
|
|
335
|
+
setEnvIfNotSet('STRIPE_PUBLISHABLE_KEY', config.external.stripe.publishableKey);
|
|
336
|
+
setEnvIfNotSet('STRIPE_WEBHOOK_SECRET', config.external.stripe.webhookSecret);
|
|
337
|
+
setEnvIfNotSet('STRIPE_API_VERSION', config.external.stripe.apiVersion);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
if (config.external.paypal) {
|
|
341
|
+
setEnvIfNotSet('PAYPAL_CLIENT_ID', config.external.paypal.clientId);
|
|
342
|
+
setEnvIfNotSet('PAYPAL_CLIENT_SECRET', config.external.paypal.clientSecret);
|
|
343
|
+
setEnvIfNotSet('PAYPAL_WEBHOOK_ID', config.external.paypal.webhookId);
|
|
344
|
+
setEnvIfNotSet('PAYPAL_ENVIRONMENT', config.external.paypal.environment);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (config.external.smtp) {
|
|
348
|
+
setEnvIfNotSet('SMTP_HOST', config.external.smtp.host);
|
|
349
|
+
setEnvIfNotSet('SMTP_PORT', config.external.smtp.port?.toString());
|
|
350
|
+
setEnvIfNotSet('SMTP_SECURE', config.external.smtp.secure?.toString());
|
|
351
|
+
setEnvIfNotSet('SMTP_USERNAME', config.external.smtp.username);
|
|
352
|
+
setEnvIfNotSet('SMTP_PASSWORD', config.external.smtp.password);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Apply performance configuration
|
|
357
|
+
if (config.performance) {
|
|
358
|
+
if (config.performance.compression) {
|
|
359
|
+
setEnvIfNotSet('COMPRESSION_ENABLED', config.performance.compression.enabled?.toString());
|
|
360
|
+
setEnvIfNotSet('COMPRESSION_LEVEL', config.performance.compression.level?.toString());
|
|
361
|
+
setEnvIfNotSet('COMPRESSION_THRESHOLD', config.performance.compression.threshold?.toString());
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if (config.performance.circuitBreaker) {
|
|
365
|
+
setEnvIfNotSet(
|
|
366
|
+
'CIRCUIT_BREAKER_ENABLED',
|
|
367
|
+
config.performance.circuitBreaker.enabled?.toString()
|
|
368
|
+
);
|
|
369
|
+
setEnvIfNotSet(
|
|
370
|
+
'CIRCUIT_BREAKER_THRESHOLD',
|
|
371
|
+
config.performance.circuitBreaker.failureThreshold?.toString()
|
|
372
|
+
);
|
|
373
|
+
setEnvIfNotSet(
|
|
374
|
+
'CIRCUIT_BREAKER_RESET',
|
|
375
|
+
config.performance.circuitBreaker.resetTimeout?.toString()
|
|
376
|
+
);
|
|
377
|
+
setEnvIfNotSet(
|
|
378
|
+
'CIRCUIT_BREAKER_MONITOR',
|
|
379
|
+
config.performance.circuitBreaker.monitoringPeriod?.toString()
|
|
380
|
+
);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
if (config.performance.clustering) {
|
|
384
|
+
setEnvIfNotSet('CLUSTERING_ENABLED', config.performance.clustering.enabled?.toString());
|
|
385
|
+
setEnvIfNotSet('CLUSTER_WORKERS', config.performance.clustering.workers?.toString());
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Set environment variable only if it's not already set
|
|
392
|
+
* This ensures environment variables take precedence over config file values
|
|
393
|
+
*/
|
|
394
|
+
function setEnvIfNotSet(key: string, value: string | undefined): void {
|
|
395
|
+
if (value !== undefined && process.env[key] === undefined) {
|
|
396
|
+
process.env[key] = value;
|
|
397
|
+
}
|
|
398
|
+
}
|
package/src/core/config/index.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
export * from './schema';
|
|
3
3
|
export * from './loader';
|
|
4
4
|
export * from './utils';
|
|
5
|
+
export * from './file-loader';
|
|
5
6
|
|
|
6
7
|
// Re-export common Zod utilities for configuration
|
|
7
8
|
export { z } from 'zod';
|
|
@@ -9,6 +10,7 @@ export { z } from 'zod';
|
|
|
9
10
|
// Main configuration loading function
|
|
10
11
|
import { loadConfig } from './loader';
|
|
11
12
|
import type { AppConfig } from './schema';
|
|
13
|
+
import { setConfig } from './utils';
|
|
12
14
|
|
|
13
15
|
// Global configuration instance
|
|
14
16
|
let globalConfig: AppConfig | null = null;
|
|
@@ -23,6 +25,10 @@ export function initializeConfig(): AppConfig {
|
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
globalConfig = loadConfig();
|
|
28
|
+
|
|
29
|
+
// Also set the config for utils functions
|
|
30
|
+
setConfig(globalConfig);
|
|
31
|
+
|
|
26
32
|
return globalConfig;
|
|
27
33
|
}
|
|
28
34
|
|
|
@@ -43,3 +49,15 @@ export function getGlobalConfig(): AppConfig {
|
|
|
43
49
|
export function isConfigInitialized(): boolean {
|
|
44
50
|
return globalConfig !== null;
|
|
45
51
|
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Reset the global configuration state (for testing purposes)
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
57
|
+
export function resetConfig(): void {
|
|
58
|
+
globalConfig = null;
|
|
59
|
+
|
|
60
|
+
// Also reset the utils config (by setting it to null via direct access)
|
|
61
|
+
const { setConfig } = require('./utils');
|
|
62
|
+
setConfig(null as any);
|
|
63
|
+
}
|
|
@@ -2,15 +2,31 @@
|
|
|
2
2
|
import { ZodError } from 'zod';
|
|
3
3
|
import { ConfigSchema, AppConfig } from './schema';
|
|
4
4
|
import { createFrameworkLogger } from '../logger';
|
|
5
|
+
import { loadConfigFileSync, applyConfigAsEnvironmentVariables } from './file-loader';
|
|
5
6
|
|
|
6
7
|
const logger = createFrameworkLogger('Config');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
* Load and validate configuration from environment variables
|
|
10
|
+
* Load and validate configuration from config files and environment variables
|
|
11
|
+
* Priority: Environment Variables > Config File > Schema Defaults
|
|
10
12
|
* @returns Validated and typed application configuration
|
|
11
13
|
*/
|
|
12
14
|
export function loadConfig(): AppConfig {
|
|
13
|
-
logger.debug('Loading configuration from environment variables');
|
|
15
|
+
logger.debug('Loading configuration from config files and environment variables');
|
|
16
|
+
|
|
17
|
+
// First, try to load from config file and apply as environment variables (synchronously)
|
|
18
|
+
try {
|
|
19
|
+
const fileConfig = loadConfigFileSync();
|
|
20
|
+
if (fileConfig) {
|
|
21
|
+
logger.debug('Applying config file values as environment variables');
|
|
22
|
+
applyConfigAsEnvironmentVariables(fileConfig);
|
|
23
|
+
}
|
|
24
|
+
} catch (error) {
|
|
25
|
+
logger.warn(
|
|
26
|
+
'Config file loading failed, continuing with environment variables only:',
|
|
27
|
+
String(error)
|
|
28
|
+
);
|
|
29
|
+
}
|
|
14
30
|
|
|
15
31
|
// Map environment variables to configuration structure
|
|
16
32
|
const envConfig = {
|
package/src/core/config/utils.ts
CHANGED
|
@@ -26,6 +26,42 @@ export function getConfig(): AppConfig {
|
|
|
26
26
|
return appConfig;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Coerce environment variable string values to appropriate types
|
|
31
|
+
*/
|
|
32
|
+
function coerceEnvironmentValue(value: string): any {
|
|
33
|
+
// Handle boolean values
|
|
34
|
+
if (value.toLowerCase() === 'true') return true;
|
|
35
|
+
if (value.toLowerCase() === 'false') return false;
|
|
36
|
+
|
|
37
|
+
// Handle numeric values
|
|
38
|
+
if (/^\d+$/.test(value)) {
|
|
39
|
+
const num = parseInt(value, 10);
|
|
40
|
+
return num;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (/^\d+\.\d+$/.test(value)) {
|
|
44
|
+
const num = parseFloat(value);
|
|
45
|
+
return num;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Handle JSON objects/arrays
|
|
49
|
+
if (
|
|
50
|
+
(value.startsWith('{') && value.endsWith('}')) ||
|
|
51
|
+
(value.startsWith('[') && value.endsWith(']'))
|
|
52
|
+
) {
|
|
53
|
+
try {
|
|
54
|
+
return JSON.parse(value);
|
|
55
|
+
} catch {
|
|
56
|
+
// If JSON parsing fails, return as string
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Return as string for all other cases
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
|
|
29
65
|
/**
|
|
30
66
|
* Create module-specific configuration with environment override support
|
|
31
67
|
*/
|
|
@@ -34,9 +70,17 @@ export function createModuleConfig<T>(
|
|
|
34
70
|
defaultConfig: Partial<T>,
|
|
35
71
|
envPrefix?: string
|
|
36
72
|
): T {
|
|
37
|
-
|
|
73
|
+
// Try to get global config, but don't fail if not initialized
|
|
74
|
+
let globalConfig = {};
|
|
75
|
+
try {
|
|
76
|
+
const { getGlobalConfig } = require('./index');
|
|
77
|
+
globalConfig = getGlobalConfig();
|
|
78
|
+
} catch {
|
|
79
|
+
// Global config not initialized - use empty object (module config can still work independently)
|
|
80
|
+
globalConfig = {};
|
|
81
|
+
}
|
|
38
82
|
|
|
39
|
-
// Build environment configuration object
|
|
83
|
+
// Build environment configuration object with type coercion
|
|
40
84
|
const envConfig: Record<string, any> = {};
|
|
41
85
|
|
|
42
86
|
if (envPrefix) {
|
|
@@ -48,14 +92,20 @@ export function createModuleConfig<T>(
|
|
|
48
92
|
.toLowerCase()
|
|
49
93
|
.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
50
94
|
|
|
51
|
-
|
|
95
|
+
const envValue = process.env[key];
|
|
96
|
+
if (envValue !== undefined) {
|
|
97
|
+
// Attempt basic type coercion for common types
|
|
98
|
+
envConfig[configKey] = coerceEnvironmentValue(envValue);
|
|
99
|
+
}
|
|
52
100
|
}
|
|
53
101
|
});
|
|
54
102
|
}
|
|
55
103
|
|
|
56
104
|
// Merge default config, global defaults, and environment overrides
|
|
105
|
+
// Priority: environment variables > global config > default config
|
|
57
106
|
const mergedConfig = {
|
|
58
107
|
...defaultConfig,
|
|
108
|
+
...globalConfig, // Now actually using global config!
|
|
59
109
|
...envConfig,
|
|
60
110
|
};
|
|
61
111
|
|
package/src/index.ts
CHANGED
|
@@ -136,7 +136,10 @@ export {
|
|
|
136
136
|
getConfigValue,
|
|
137
137
|
} from './core/config/utils';
|
|
138
138
|
|
|
139
|
-
export { initializeConfig, getGlobalConfig, isConfigInitialized } from './core/config';
|
|
139
|
+
export { initializeConfig, getGlobalConfig, isConfigInitialized, resetConfig } from './core/config';
|
|
140
|
+
|
|
141
|
+
// Export configuration types for TypeScript users
|
|
142
|
+
export type { AppConfig } from './core/config';
|
|
140
143
|
|
|
141
144
|
// Middleware System
|
|
142
145
|
export { MiddlewareManager } from './core/middleware';
|
package/tsconfig.json
CHANGED