@morojs/moro 1.6.2 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/http/http-server.js +12 -9
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/uws-http-server.js +1 -1
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
- package/dist/core/middleware/built-in/auth/core.js +358 -0
- package/dist/core/middleware/built-in/auth/core.js.map +1 -0
- package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
- package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
- package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
- package/dist/core/middleware/built-in/auth/hook.js +99 -0
- package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
- package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
- package/dist/core/middleware/built-in/auth/index.js +15 -0
- package/dist/core/middleware/built-in/auth/index.js.map +1 -0
- package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
- package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
- package/dist/core/middleware/built-in/auth/middleware.js +71 -0
- package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
- package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
- package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
- package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
- package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
- package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
- package/dist/core/middleware/built-in/cache/core.js +87 -0
- package/dist/core/middleware/built-in/cache/core.js.map +1 -0
- package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
- package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cache/index.js +9 -0
- package/dist/core/middleware/built-in/cache/index.js.map +1 -0
- package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/cache/middleware.js +44 -0
- package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
- package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
- package/dist/core/middleware/built-in/cdn/core.js +144 -0
- package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
- package/dist/core/middleware/built-in/cdn/hook.js +70 -0
- package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
- package/dist/core/middleware/built-in/cdn/index.js +11 -0
- package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
- package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
- package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
- package/dist/core/middleware/built-in/cookie/core.js +83 -0
- package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/cookie/hook.js +47 -0
- package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cookie/index.js +9 -0
- package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
- package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
- package/dist/core/middleware/built-in/cors/core.js +51 -0
- package/dist/core/middleware/built-in/cors/core.js.map +1 -0
- package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/cors/hook.js +37 -0
- package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cors/index.js +9 -0
- package/dist/core/middleware/built-in/cors/index.js.map +1 -0
- package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/cors/middleware.js +22 -0
- package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
- package/dist/core/middleware/built-in/csp/core.js +88 -0
- package/dist/core/middleware/built-in/csp/core.js.map +1 -0
- package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
- package/dist/core/middleware/built-in/csp/hook.js +47 -0
- package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
- package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
- package/dist/core/middleware/built-in/csp/index.js +9 -0
- package/dist/core/middleware/built-in/csp/index.js.map +1 -0
- package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
- package/dist/core/middleware/built-in/csp/middleware.js +29 -0
- package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
- package/dist/core/middleware/built-in/csrf/core.js +69 -0
- package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/csrf/hook.js +45 -0
- package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
- package/dist/core/middleware/built-in/csrf/index.js +9 -0
- package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
- package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
- package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
- package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
- package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
- package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/index.d.ts +25 -59
- package/dist/core/middleware/built-in/index.js +31 -31
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
- package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
- package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
- package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
- package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
- package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
- package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
- package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
- package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
- package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
- package/dist/core/middleware/built-in/request-logger/index.js +4 -0
- package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
- package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
- package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/session/core.d.ts +73 -0
- package/dist/core/middleware/built-in/session/core.js +227 -0
- package/dist/core/middleware/built-in/session/core.js.map +1 -0
- package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/session/hook.js +53 -0
- package/dist/core/middleware/built-in/session/hook.js.map +1 -0
- package/dist/core/middleware/built-in/session/index.d.ts +3 -0
- package/dist/core/middleware/built-in/session/index.js +9 -0
- package/dist/core/middleware/built-in/session/index.js.map +1 -0
- package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/session/middleware.js +38 -0
- package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
- package/dist/core/middleware/built-in/sse/core.js +117 -0
- package/dist/core/middleware/built-in/sse/core.js.map +1 -0
- package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
- package/dist/core/middleware/built-in/sse/hook.js +60 -0
- package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
- package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
- package/dist/core/middleware/built-in/sse/index.js +9 -0
- package/dist/core/middleware/built-in/sse/index.js.map +1 -0
- package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
- package/dist/core/middleware/built-in/sse/middleware.js +43 -0
- package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
- package/dist/core/middleware/built-in/validation/core.js +93 -0
- package/dist/core/middleware/built-in/validation/core.js.map +1 -0
- package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
- package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
- package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
- package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
- package/dist/core/middleware/built-in/validation/index.js +9 -0
- package/dist/core/middleware/built-in/validation/index.js.map +1 -0
- package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/validation/middleware.js +27 -0
- package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
- package/dist/core/middleware/index.js +6 -0
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/routing/unified-router.d.ts +4 -20
- package/dist/core/routing/unified-router.js +61 -106
- package/dist/core/routing/unified-router.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/moro.js +12 -18
- package/dist/moro.js.map +1 -1
- package/dist/types/hooks.d.ts +3 -0
- package/package.json +2 -6
- package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
- package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
- package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
- package/dist/core/middleware/built-in/auth.d.ts +0 -30
- package/dist/core/middleware/built-in/auth.js +0 -348
- package/dist/core/middleware/built-in/auth.js.map +0 -1
- package/dist/core/middleware/built-in/cache.d.ts +0 -3
- package/dist/core/middleware/built-in/cache.js.map +0 -1
- package/dist/core/middleware/built-in/cdn.d.ts +0 -3
- package/dist/core/middleware/built-in/cdn.js +0 -109
- package/dist/core/middleware/built-in/cdn.js.map +0 -1
- package/dist/core/middleware/built-in/cookie.d.ts +0 -14
- package/dist/core/middleware/built-in/cookie.js +0 -64
- package/dist/core/middleware/built-in/cookie.js.map +0 -1
- package/dist/core/middleware/built-in/cors.d.ts +0 -2
- package/dist/core/middleware/built-in/cors.js +0 -25
- package/dist/core/middleware/built-in/cors.js.map +0 -1
- package/dist/core/middleware/built-in/csp.d.ts +0 -22
- package/dist/core/middleware/built-in/csp.js +0 -68
- package/dist/core/middleware/built-in/csp.js.map +0 -1
- package/dist/core/middleware/built-in/csrf.d.ts +0 -9
- package/dist/core/middleware/built-in/csrf.js +0 -60
- package/dist/core/middleware/built-in/csrf.js.map +0 -1
- package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
- package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
- package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
- package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
- package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
- package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
- package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
- package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
- package/dist/core/middleware/built-in/request-logger.js.map +0 -1
- package/dist/core/middleware/built-in/session.d.ts +0 -41
- package/dist/core/middleware/built-in/session.js +0 -205
- package/dist/core/middleware/built-in/session.js.map +0 -1
- package/dist/core/middleware/built-in/sse.d.ts +0 -6
- package/dist/core/middleware/built-in/sse.js +0 -69
- package/dist/core/middleware/built-in/sse.js.map +0 -1
- package/dist/core/middleware/built-in/validation.d.ts +0 -2
- package/dist/core/middleware/built-in/validation.js.map +0 -1
- package/jest.config.mjs +0 -41
- package/src/core/auth/README.md +0 -339
- package/src/core/auth/morojs-adapter.ts +0 -415
- package/src/core/config/config-manager.ts +0 -133
- package/src/core/config/config-sources.ts +0 -600
- package/src/core/config/config-validator.ts +0 -1116
- package/src/core/config/file-loader.ts +0 -150
- package/src/core/config/index.ts +0 -109
- package/src/core/config/schema.ts +0 -164
- package/src/core/config/utils.ts +0 -244
- package/src/core/database/README.md +0 -238
- package/src/core/database/adapters/drizzle.ts +0 -415
- package/src/core/database/adapters/index.ts +0 -42
- package/src/core/database/adapters/mongodb.ts +0 -317
- package/src/core/database/adapters/mysql.ts +0 -235
- package/src/core/database/adapters/postgresql.ts +0 -226
- package/src/core/database/adapters/redis.ts +0 -379
- package/src/core/database/adapters/sqlite.ts +0 -263
- package/src/core/database/index.ts +0 -3
- package/src/core/docs/index.ts +0 -231
- package/src/core/docs/openapi-generator.ts +0 -576
- package/src/core/docs/schema-to-openapi.ts +0 -145
- package/src/core/docs/simple-docs.ts +0 -295
- package/src/core/docs/swagger-ui.ts +0 -354
- package/src/core/docs/zod-to-openapi.ts +0 -532
- package/src/core/events/event-bus.ts +0 -231
- package/src/core/events/index.ts +0 -12
- package/src/core/framework.ts +0 -885
- package/src/core/http/http-server.ts +0 -1847
- package/src/core/http/index.ts +0 -7
- package/src/core/http/uws-http-server.ts +0 -591
- package/src/core/logger/filters.ts +0 -153
- package/src/core/logger/index.ts +0 -21
- package/src/core/logger/logger.ts +0 -1033
- package/src/core/logger/outputs.ts +0 -132
- package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
- package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
- package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
- package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
- package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
- package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
- package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
- package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
- package/src/core/middleware/built-in/auth-helpers.ts +0 -401
- package/src/core/middleware/built-in/auth-providers.ts +0 -480
- package/src/core/middleware/built-in/auth.ts +0 -410
- package/src/core/middleware/built-in/cache.ts +0 -213
- package/src/core/middleware/built-in/cdn.ts +0 -124
- package/src/core/middleware/built-in/cookie.ts +0 -85
- package/src/core/middleware/built-in/cors.ts +0 -38
- package/src/core/middleware/built-in/csp.ts +0 -101
- package/src/core/middleware/built-in/csrf.ts +0 -82
- package/src/core/middleware/built-in/error-tracker.ts +0 -16
- package/src/core/middleware/built-in/index.ts +0 -87
- package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
- package/src/core/middleware/built-in/performance-monitor.ts +0 -25
- package/src/core/middleware/built-in/rate-limit.ts +0 -60
- package/src/core/middleware/built-in/request-logger.ts +0 -16
- package/src/core/middleware/built-in/session.ts +0 -287
- package/src/core/middleware/built-in/sse.ts +0 -88
- package/src/core/middleware/built-in/validation.ts +0 -33
- package/src/core/middleware/index.ts +0 -177
- package/src/core/modules/auto-discovery.ts +0 -726
- package/src/core/modules/index.ts +0 -3
- package/src/core/modules/modules.ts +0 -135
- package/src/core/networking/adapters/index.ts +0 -17
- package/src/core/networking/adapters/socketio-adapter.ts +0 -254
- package/src/core/networking/adapters/uws-adapter.ts +0 -619
- package/src/core/networking/adapters/ws-adapter.ts +0 -429
- package/src/core/networking/index.ts +0 -4
- package/src/core/networking/service-discovery.ts +0 -303
- package/src/core/networking/websocket-adapter.ts +0 -217
- package/src/core/networking/websocket-manager.ts +0 -308
- package/src/core/pooling/object-pool-manager.ts +0 -630
- package/src/core/routing/app-integration.ts +0 -164
- package/src/core/routing/index.ts +0 -261
- package/src/core/routing/path-matcher.ts +0 -222
- package/src/core/routing/router.ts +0 -97
- package/src/core/routing/unified-router.ts +0 -870
- package/src/core/runtime/aws-lambda-adapter.ts +0 -147
- package/src/core/runtime/base-adapter.ts +0 -130
- package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
- package/src/core/runtime/index.ts +0 -62
- package/src/core/runtime/node-adapter.ts +0 -202
- package/src/core/runtime/vercel-edge-adapter.ts +0 -114
- package/src/core/utilities/circuit-breaker.ts +0 -46
- package/src/core/utilities/container.ts +0 -736
- package/src/core/utilities/hooks.ts +0 -142
- package/src/core/utilities/index.ts +0 -17
- package/src/core/utilities/package-utils.ts +0 -59
- package/src/core/validation/adapters.ts +0 -147
- package/src/core/validation/index.ts +0 -258
- package/src/core/validation/schema-interface.ts +0 -100
- package/src/index.ts +0 -233
- package/src/moro.ts +0 -1728
- package/src/types/auth.ts +0 -440
- package/src/types/cache.ts +0 -38
- package/src/types/cdn.ts +0 -22
- package/src/types/config.ts +0 -229
- package/src/types/core.ts +0 -58
- package/src/types/database.ts +0 -32
- package/src/types/discovery.ts +0 -7
- package/src/types/events.ts +0 -82
- package/src/types/hooks.ts +0 -47
- package/src/types/http.ts +0 -89
- package/src/types/logger.ts +0 -102
- package/src/types/module.ts +0 -99
- package/src/types/runtime.ts +0 -76
- package/src/types/session.ts +0 -89
- package/tsconfig.json +0 -23
- /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
- /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
- /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
- /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
// Configuration File Loader - Load moro.config.js/ts files
|
|
2
|
-
import { existsSync } from 'fs';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
import { createRequire } from 'module';
|
|
5
|
-
import { AppConfig } from './schema.js';
|
|
6
|
-
import { createFrameworkLogger } from '../logger/index.js';
|
|
7
|
-
|
|
8
|
-
const logger = createFrameworkLogger('ConfigFile');
|
|
9
|
-
|
|
10
|
-
// Create require function for ESM to enable synchronous config loading
|
|
11
|
-
// Use process.cwd() as base since we're loading with absolute paths anyway
|
|
12
|
-
const moduleRequire = createRequire(join(process.cwd(), 'index.js'));
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Supported configuration file names in order of preference
|
|
16
|
-
*/
|
|
17
|
-
const CONFIG_FILES = ['moro.config.js', 'moro.config.ts'] as const;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Find and load configuration from moro.config.js (synchronously)
|
|
21
|
-
* @param cwd Current working directory to search for config files
|
|
22
|
-
* @returns Partial configuration object or null if no config file found
|
|
23
|
-
*/
|
|
24
|
-
export function loadConfigFileSync(cwd: string = process.cwd()): Partial<AppConfig> | null {
|
|
25
|
-
const configFile = findConfigFile(cwd);
|
|
26
|
-
|
|
27
|
-
if (!configFile) {
|
|
28
|
-
logger.debug('No configuration file found');
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
logger.debug(`Loading configuration from: ${configFile}`);
|
|
33
|
-
|
|
34
|
-
try {
|
|
35
|
-
// Use createRequire to enable synchronous loading in ESM
|
|
36
|
-
// Clear the require cache to ensure fresh config on each load
|
|
37
|
-
delete moduleRequire.cache[moduleRequire.resolve(configFile)];
|
|
38
|
-
|
|
39
|
-
const configModule = moduleRequire(configFile);
|
|
40
|
-
|
|
41
|
-
// Handle ES module default export
|
|
42
|
-
const config = configModule.default || configModule;
|
|
43
|
-
|
|
44
|
-
if (!config || typeof config !== '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 config;
|
|
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. Run your application with tsx or ts-node: "tsx your-app.ts" or "ts-node your-app.ts"`
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
throw error;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Setup TypeScript loader for .ts config files
|
|
141
|
-
* Note: This function is intentionally minimal because TypeScript config files
|
|
142
|
-
* should be handled by the runtime environment (tsx, ts-node, etc.) when the
|
|
143
|
-
* user runs their application, not by the framework itself.
|
|
144
|
-
*/
|
|
145
|
-
async function setupTypeScriptLoader(): Promise<void> {
|
|
146
|
-
// No-op: TypeScript loading is handled by the runtime environment
|
|
147
|
-
// When users run `tsx moro.config.ts` or `ts-node moro.config.ts`,
|
|
148
|
-
// the TypeScript transpilation is already handled by those tools.
|
|
149
|
-
logger.debug('TypeScript config loading delegated to runtime environment');
|
|
150
|
-
}
|
package/src/core/config/index.ts
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Configuration System - Immutable Config with createApp Override Support
|
|
3
|
-
*
|
|
4
|
-
* This is the main entry point for the MoroJS configuration system.
|
|
5
|
-
* It provides a clean, immutable configuration that is locked at createApp() time.
|
|
6
|
-
*
|
|
7
|
-
* Key Features:
|
|
8
|
-
* - Immutable configuration after initialization
|
|
9
|
-
* - Clear precedence: Env Vars > createApp Options > Config File > Defaults
|
|
10
|
-
* - Type-safe validation
|
|
11
|
-
* - Single source of truth
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
// Export types and core components
|
|
15
|
-
export * from './schema.js';
|
|
16
|
-
export * from './config-sources.js';
|
|
17
|
-
export * from './config-validator.js';
|
|
18
|
-
export * from './file-loader.js';
|
|
19
|
-
|
|
20
|
-
// Export specific functions from config-manager to avoid conflicts
|
|
21
|
-
export {
|
|
22
|
-
initializeAndLockConfig,
|
|
23
|
-
isConfigLocked,
|
|
24
|
-
resetConfigForTesting,
|
|
25
|
-
} from './config-manager.js';
|
|
26
|
-
|
|
27
|
-
// Export utilities for backward compatibility
|
|
28
|
-
export * from './utils.js';
|
|
29
|
-
|
|
30
|
-
import { MoroOptions } from '../../types/core.js';
|
|
31
|
-
import { AppConfig } from '../../types/config.js';
|
|
32
|
-
import { loadConfigFromAllSources } from './config-sources.js';
|
|
33
|
-
import {
|
|
34
|
-
initializeAndLockConfig,
|
|
35
|
-
getGlobalConfig as getConfig,
|
|
36
|
-
isConfigLocked,
|
|
37
|
-
resetConfigForTesting,
|
|
38
|
-
} from './config-manager.js';
|
|
39
|
-
import { createFrameworkLogger } from '../logger/index.js';
|
|
40
|
-
|
|
41
|
-
const logger = createFrameworkLogger('ConfigSystem');
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Initialize configuration system with createApp options
|
|
45
|
-
* This is the main entry point called by createApp()
|
|
46
|
-
*
|
|
47
|
-
* @param options - createApp options that can override config file and defaults
|
|
48
|
-
* @returns Immutable, validated configuration object
|
|
49
|
-
*/
|
|
50
|
-
export function initializeConfig(options?: MoroOptions): Readonly<AppConfig> {
|
|
51
|
-
if (isConfigLocked()) {
|
|
52
|
-
logger.debug('Configuration already locked, returning existing config');
|
|
53
|
-
return getConfig();
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
logger.debug('Initializing configuration system');
|
|
57
|
-
|
|
58
|
-
// Load configuration from all sources with proper precedence
|
|
59
|
-
const config = loadConfigFromAllSources(options);
|
|
60
|
-
|
|
61
|
-
// Lock the configuration to prevent further changes
|
|
62
|
-
initializeAndLockConfig(config);
|
|
63
|
-
|
|
64
|
-
logger.info(
|
|
65
|
-
`Configuration system initialized and locked: ${process.env.NODE_ENV || 'development'}:${config.server.port} (sources: env + file + options + defaults)`
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
return config;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Load configuration without locking (for testing and utilities)
|
|
73
|
-
* This maintains backward compatibility with existing code
|
|
74
|
-
*/
|
|
75
|
-
export function loadConfig(): AppConfig {
|
|
76
|
-
return loadConfigFromAllSources();
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Load configuration with createApp options (for testing and utilities)
|
|
81
|
-
* This maintains backward compatibility with existing code
|
|
82
|
-
*/
|
|
83
|
-
export function loadConfigWithOptions(options: MoroOptions): AppConfig {
|
|
84
|
-
return loadConfigFromAllSources(options);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Get the current global configuration
|
|
89
|
-
* Alias for getGlobalConfig() for backward compatibility
|
|
90
|
-
*/
|
|
91
|
-
export function getGlobalConfig(): Readonly<AppConfig> {
|
|
92
|
-
return getConfig();
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Check if configuration has been initialized and locked
|
|
97
|
-
* Alias for isConfigLocked() for backward compatibility
|
|
98
|
-
*/
|
|
99
|
-
export function isConfigInitialized(): boolean {
|
|
100
|
-
return isConfigLocked();
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Reset configuration state (for testing only)
|
|
105
|
-
* @internal
|
|
106
|
-
*/
|
|
107
|
-
export function resetConfig(): void {
|
|
108
|
-
resetConfigForTesting();
|
|
109
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
// Core Configuration Schema for Moro Framework
|
|
2
|
-
|
|
3
|
-
import { AppConfig } from '../../types/config.js';
|
|
4
|
-
|
|
5
|
-
// Minimal default configuration - performance-focused, most things opt-in
|
|
6
|
-
export const DEFAULT_CONFIG: AppConfig = {
|
|
7
|
-
server: {
|
|
8
|
-
port: 3001,
|
|
9
|
-
host: 'localhost',
|
|
10
|
-
maxConnections: 1000,
|
|
11
|
-
timeout: 30000,
|
|
12
|
-
bodySizeLimit: '10mb',
|
|
13
|
-
useUWebSockets: false, // Opt-in for high performance
|
|
14
|
-
requestTracking: {
|
|
15
|
-
enabled: true, // Enable by default for debugging
|
|
16
|
-
},
|
|
17
|
-
requestLogging: {
|
|
18
|
-
enabled: true, // Enable by default - logs requests independently
|
|
19
|
-
},
|
|
20
|
-
errorBoundary: {
|
|
21
|
-
enabled: true, // Always enabled for safety
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
serviceDiscovery: {
|
|
25
|
-
enabled: false,
|
|
26
|
-
type: 'memory',
|
|
27
|
-
consulUrl: 'http://localhost:8500',
|
|
28
|
-
kubernetesNamespace: 'default',
|
|
29
|
-
healthCheckInterval: 30000,
|
|
30
|
-
retryAttempts: 3,
|
|
31
|
-
},
|
|
32
|
-
database: {},
|
|
33
|
-
modules: {
|
|
34
|
-
cache: {
|
|
35
|
-
enabled: false, // Opt-in for better performance
|
|
36
|
-
defaultTtl: 300,
|
|
37
|
-
maxSize: 1000,
|
|
38
|
-
strategy: 'lru',
|
|
39
|
-
},
|
|
40
|
-
rateLimit: {
|
|
41
|
-
enabled: false, // Opt-in to avoid unnecessary overhead
|
|
42
|
-
defaultRequests: 100,
|
|
43
|
-
defaultWindow: 60000,
|
|
44
|
-
skipSuccessfulRequests: false,
|
|
45
|
-
skipFailedRequests: false,
|
|
46
|
-
},
|
|
47
|
-
validation: {
|
|
48
|
-
enabled: false,
|
|
49
|
-
stripUnknown: true,
|
|
50
|
-
abortEarly: false,
|
|
51
|
-
},
|
|
52
|
-
autoDiscovery: {
|
|
53
|
-
enabled: true, // Enable by default for better DX
|
|
54
|
-
paths: ['./modules', './src/modules'],
|
|
55
|
-
patterns: ['**/*.module.{ts,js}', '**/index.{ts,js}', '**/*.config.{ts,js}'],
|
|
56
|
-
recursive: true,
|
|
57
|
-
loadingStrategy: 'eager',
|
|
58
|
-
watchForChanges: false, // Opt-in for development
|
|
59
|
-
ignorePatterns: ['**/*.test.{ts,js}', '**/*.spec.{ts,js}', '**/node_modules/**'],
|
|
60
|
-
loadOrder: 'dependency',
|
|
61
|
-
failOnError: false, // Graceful degradation
|
|
62
|
-
maxDepth: 5,
|
|
63
|
-
},
|
|
64
|
-
},
|
|
65
|
-
logging: {
|
|
66
|
-
level: 'info',
|
|
67
|
-
format: 'pretty',
|
|
68
|
-
enableColors: true,
|
|
69
|
-
enableTimestamp: true,
|
|
70
|
-
enableContext: true,
|
|
71
|
-
outputs: {
|
|
72
|
-
console: true,
|
|
73
|
-
file: {
|
|
74
|
-
enabled: false,
|
|
75
|
-
path: './logs/moro.log',
|
|
76
|
-
maxSize: '10MB',
|
|
77
|
-
maxFiles: 5,
|
|
78
|
-
},
|
|
79
|
-
webhook: {
|
|
80
|
-
enabled: false,
|
|
81
|
-
headers: {},
|
|
82
|
-
},
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
security: {
|
|
86
|
-
cors: {
|
|
87
|
-
enabled: false, // Opt-in for better performance
|
|
88
|
-
origin: '*',
|
|
89
|
-
methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
|
|
90
|
-
allowedHeaders: ['Content-Type', 'Authorization'],
|
|
91
|
-
credentials: false,
|
|
92
|
-
},
|
|
93
|
-
helmet: {
|
|
94
|
-
enabled: false, // Opt-in for better performance
|
|
95
|
-
contentSecurityPolicy: true,
|
|
96
|
-
hsts: true,
|
|
97
|
-
noSniff: true,
|
|
98
|
-
frameguard: true,
|
|
99
|
-
},
|
|
100
|
-
rateLimit: {
|
|
101
|
-
global: {
|
|
102
|
-
enabled: false,
|
|
103
|
-
requests: 1000,
|
|
104
|
-
window: 60000,
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
},
|
|
108
|
-
external: {},
|
|
109
|
-
performance: {
|
|
110
|
-
compression: {
|
|
111
|
-
enabled: false, // Opt-in to avoid overhead
|
|
112
|
-
level: 6,
|
|
113
|
-
threshold: 1024,
|
|
114
|
-
},
|
|
115
|
-
circuitBreaker: {
|
|
116
|
-
enabled: false, // Opt-in to avoid overhead
|
|
117
|
-
failureThreshold: 5,
|
|
118
|
-
resetTimeout: 60000,
|
|
119
|
-
monitoringPeriod: 10000,
|
|
120
|
-
},
|
|
121
|
-
clustering: {
|
|
122
|
-
enabled: false,
|
|
123
|
-
workers: 1,
|
|
124
|
-
memoryPerWorkerGB: undefined,
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
websocket: {
|
|
128
|
-
enabled: false, // Opt-in - user must explicitly enable WebSockets
|
|
129
|
-
},
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
// Schema validation is now handled by config-validator.ts
|
|
133
|
-
// This export is kept for backward compatibility only
|
|
134
|
-
// Note: For actual validation, use validateConfig() from config-validator.ts directly
|
|
135
|
-
export const ConfigSchema = {
|
|
136
|
-
parse: (data: any): AppConfig => {
|
|
137
|
-
// Simple pass-through for backward compatibility
|
|
138
|
-
// Real validation happens in the config loading pipeline
|
|
139
|
-
return data as AppConfig;
|
|
140
|
-
},
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
// Re-export types for backward compatibility
|
|
144
|
-
export type {
|
|
145
|
-
AppConfig,
|
|
146
|
-
ServerConfig,
|
|
147
|
-
ServiceDiscoveryConfig,
|
|
148
|
-
DatabaseConfig,
|
|
149
|
-
ModuleDefaultsConfig,
|
|
150
|
-
LoggingConfig,
|
|
151
|
-
SecurityConfig,
|
|
152
|
-
ExternalServicesConfig,
|
|
153
|
-
PerformanceConfig,
|
|
154
|
-
} from '../../types/config.js';
|
|
155
|
-
|
|
156
|
-
// For backward compatibility with modules that expect schema objects
|
|
157
|
-
export const ServerConfigSchema = { parse: (data: any) => data };
|
|
158
|
-
export const ServiceDiscoveryConfigSchema = { parse: (data: any) => data };
|
|
159
|
-
export const DatabaseConfigSchema = { parse: (data: any) => data };
|
|
160
|
-
export const ModuleDefaultsConfigSchema = { parse: (data: any) => data };
|
|
161
|
-
export const LoggingConfigSchema = { parse: (data: any) => data };
|
|
162
|
-
export const SecurityConfigSchema = { parse: (data: any) => data };
|
|
163
|
-
export const ExternalServicesConfigSchema = { parse: (data: any) => data };
|
|
164
|
-
export const PerformanceConfigSchema = { parse: (data: any) => data };
|
package/src/core/config/utils.ts
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
// Configuration Utilities for Modules and Environment Handling
|
|
2
|
-
import { AppConfig } from './schema.js';
|
|
3
|
-
import { createFrameworkLogger } from '../logger/index.js';
|
|
4
|
-
import { getGlobalConfig } from './config-manager.js';
|
|
5
|
-
|
|
6
|
-
const logger = createFrameworkLogger('ConfigUtils');
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Set the global configuration (deprecated - for backward compatibility only)
|
|
10
|
-
* @deprecated Use the new immutable config system instead
|
|
11
|
-
*/
|
|
12
|
-
export function setConfig(_config: AppConfig): void {
|
|
13
|
-
logger.warn(
|
|
14
|
-
'setConfig() is deprecated. Configuration is now immutable after createApp() initialization.'
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Get the global configuration
|
|
20
|
-
* This now delegates to the new config manager
|
|
21
|
-
*/
|
|
22
|
-
export function getConfig(): AppConfig {
|
|
23
|
-
return getGlobalConfig();
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Coerce environment variable string values to appropriate types
|
|
28
|
-
*/
|
|
29
|
-
function coerceEnvironmentValue(value: string): any {
|
|
30
|
-
// Handle boolean values
|
|
31
|
-
if (value.toLowerCase() === 'true') return true;
|
|
32
|
-
if (value.toLowerCase() === 'false') return false;
|
|
33
|
-
|
|
34
|
-
// Handle numeric values
|
|
35
|
-
if (/^\d+$/.test(value)) {
|
|
36
|
-
const num = parseInt(value, 10);
|
|
37
|
-
return num;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (/^\d+\.\d+$/.test(value)) {
|
|
41
|
-
const num = parseFloat(value);
|
|
42
|
-
return num;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// Handle JSON objects/arrays
|
|
46
|
-
if (
|
|
47
|
-
(value.startsWith('{') && value.endsWith('}')) ||
|
|
48
|
-
(value.startsWith('[') && value.endsWith(']'))
|
|
49
|
-
) {
|
|
50
|
-
try {
|
|
51
|
-
return JSON.parse(value);
|
|
52
|
-
} catch {
|
|
53
|
-
// If JSON parsing fails, return as string
|
|
54
|
-
return value;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Return as string for all other cases
|
|
59
|
-
return value;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Create module-specific configuration with environment override support
|
|
64
|
-
* This now uses the new immutable config system
|
|
65
|
-
*/
|
|
66
|
-
export function createModuleConfig<T>(
|
|
67
|
-
schema: { parse: (data: any) => T },
|
|
68
|
-
defaultConfig: Partial<T>,
|
|
69
|
-
envPrefix?: string
|
|
70
|
-
): T {
|
|
71
|
-
// Try to get global config, but don't fail if not initialized
|
|
72
|
-
let globalConfig = {};
|
|
73
|
-
try {
|
|
74
|
-
globalConfig = getGlobalConfig();
|
|
75
|
-
} catch {
|
|
76
|
-
// Global config not initialized - use empty object (module config can still work independently)
|
|
77
|
-
logger.debug(
|
|
78
|
-
`Global config not available for module config with prefix ${envPrefix}, using defaults only`
|
|
79
|
-
);
|
|
80
|
-
globalConfig = {};
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Build environment configuration object with type coercion
|
|
84
|
-
const envConfig: Record<string, any> = {};
|
|
85
|
-
|
|
86
|
-
if (envPrefix) {
|
|
87
|
-
// Extract environment variables with the given prefix
|
|
88
|
-
Object.keys(process.env).forEach(key => {
|
|
89
|
-
if (key.startsWith(envPrefix)) {
|
|
90
|
-
const configKey = key
|
|
91
|
-
.substring(envPrefix.length)
|
|
92
|
-
.toLowerCase()
|
|
93
|
-
.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
94
|
-
|
|
95
|
-
const envValue = process.env[key];
|
|
96
|
-
if (envValue !== undefined) {
|
|
97
|
-
// Attempt basic type coercion for common types
|
|
98
|
-
envConfig[configKey] = coerceEnvironmentValue(envValue);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Merge default config, global defaults, and environment overrides
|
|
105
|
-
// Priority: environment variables > global config > default config
|
|
106
|
-
const mergedConfig = {
|
|
107
|
-
...defaultConfig,
|
|
108
|
-
...globalConfig, // Now uses the new immutable config system
|
|
109
|
-
...envConfig,
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
try {
|
|
113
|
-
return schema.parse(mergedConfig);
|
|
114
|
-
} catch (error) {
|
|
115
|
-
logger.error(`Module configuration validation failed for prefix ${envPrefix}:`, String(error));
|
|
116
|
-
throw error;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Get environment variable with type conversion
|
|
122
|
-
*/
|
|
123
|
-
export function getEnvVar<T>(key: string, defaultValue: T, converter?: (value: string) => T): T {
|
|
124
|
-
const value = process.env[key];
|
|
125
|
-
|
|
126
|
-
if (value === undefined) {
|
|
127
|
-
return defaultValue;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (converter) {
|
|
131
|
-
try {
|
|
132
|
-
return converter(value);
|
|
133
|
-
} catch (error) {
|
|
134
|
-
logger.warn(`Failed to convert environment variable ${key}:`, String(error));
|
|
135
|
-
return defaultValue;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Default type conversions
|
|
140
|
-
if (typeof defaultValue === 'boolean') {
|
|
141
|
-
return (value.toLowerCase() === 'true') as T;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (typeof defaultValue === 'number') {
|
|
145
|
-
const num = Number(value);
|
|
146
|
-
return (isNaN(num) ? defaultValue : num) as T;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
return value as T;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Parse comma-separated environment variable as array
|
|
154
|
-
*/
|
|
155
|
-
export function getEnvArray(key: string, defaultValue: string[] = []): string[] {
|
|
156
|
-
const value = process.env[key];
|
|
157
|
-
|
|
158
|
-
if (!value) {
|
|
159
|
-
return defaultValue;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return value
|
|
163
|
-
.split(',')
|
|
164
|
-
.map(item => item.trim())
|
|
165
|
-
.filter(Boolean);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Parse JSON environment variable safely
|
|
170
|
-
*/
|
|
171
|
-
export function getEnvJson<T>(key: string, defaultValue: T): T {
|
|
172
|
-
const value = process.env[key];
|
|
173
|
-
|
|
174
|
-
if (!value) {
|
|
175
|
-
return defaultValue;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
try {
|
|
179
|
-
return JSON.parse(value);
|
|
180
|
-
} catch (error) {
|
|
181
|
-
logger.warn(`Failed to parse JSON environment variable ${key}:`, String(error));
|
|
182
|
-
return defaultValue;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Validate required environment variables
|
|
188
|
-
*/
|
|
189
|
-
export function requireEnvVars(...keys: string[]): void {
|
|
190
|
-
const missing: string[] = [];
|
|
191
|
-
|
|
192
|
-
keys.forEach(key => {
|
|
193
|
-
if (!process.env[key]) {
|
|
194
|
-
missing.push(key);
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
if (missing.length > 0) {
|
|
199
|
-
throw new Error(`Missing required environment variables: ${missing.join(', ')}`);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Create environment variable name with prefix
|
|
205
|
-
*/
|
|
206
|
-
export function envVar(prefix: string, name: string): string {
|
|
207
|
-
return `${prefix.toUpperCase()}_${name.toUpperCase()}`;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Get configuration value with dot notation
|
|
212
|
-
* This now delegates to the new config manager
|
|
213
|
-
*/
|
|
214
|
-
export function getConfigValue(path: string): any {
|
|
215
|
-
const config = getGlobalConfig();
|
|
216
|
-
|
|
217
|
-
return path.split('.').reduce((obj, key) => {
|
|
218
|
-
return obj && obj[key] !== undefined ? obj[key] : undefined;
|
|
219
|
-
}, config as any);
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Check if we're in development environment
|
|
224
|
-
* Now reads NODE_ENV directly for consistency with Node.js ecosystem
|
|
225
|
-
*/
|
|
226
|
-
export function isDevelopment(): boolean {
|
|
227
|
-
return process.env.NODE_ENV === 'development';
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Check if we're in production environment
|
|
232
|
-
* Now reads NODE_ENV directly for consistency with Node.js ecosystem
|
|
233
|
-
*/
|
|
234
|
-
export function isProduction(): boolean {
|
|
235
|
-
return process.env.NODE_ENV === 'production';
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Check if we're in staging environment
|
|
240
|
-
* Now reads NODE_ENV directly for consistency with Node.js ecosystem
|
|
241
|
-
*/
|
|
242
|
-
export function isStaging(): boolean {
|
|
243
|
-
return process.env.NODE_ENV === 'staging';
|
|
244
|
-
}
|