@morojs/moro 1.5.17 → 1.6.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 +70 -269
- package/dist/core/auth/morojs-adapter.js +5 -9
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/config-manager.d.ts +1 -1
- package/dist/core/config/config-manager.js +10 -20
- package/dist/core/config/config-manager.js.map +1 -1
- package/dist/core/config/config-sources.d.ts +2 -2
- package/dist/core/config/config-sources.js +17 -20
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/config/config-validator.d.ts +1 -1
- package/dist/core/config/config-validator.js +33 -10
- package/dist/core/config/config-validator.js.map +1 -1
- package/dist/core/config/file-loader.d.ts +1 -1
- package/dist/core/config/file-loader.js +19 -78
- package/dist/core/config/file-loader.js.map +1 -1
- package/dist/core/config/index.d.ts +8 -8
- package/dist/core/config/index.js +25 -51
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/schema.d.ts +2 -2
- package/dist/core/config/schema.js +11 -13
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/utils.d.ts +1 -1
- package/dist/core/config/utils.js +18 -32
- package/dist/core/config/utils.js.map +1 -1
- package/dist/core/database/adapters/drizzle.d.ts +1 -1
- package/dist/core/database/adapters/drizzle.js +18 -11
- package/dist/core/database/adapters/drizzle.js.map +1 -1
- package/dist/core/database/adapters/index.d.ts +7 -7
- package/dist/core/database/adapters/index.js +19 -29
- package/dist/core/database/adapters/index.js.map +1 -1
- package/dist/core/database/adapters/mongodb.d.ts +3 -1
- package/dist/core/database/adapters/mongodb.js +23 -8
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.d.ts +3 -1
- package/dist/core/database/adapters/mysql.js +18 -9
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.d.ts +3 -1
- package/dist/core/database/adapters/postgresql.js +18 -8
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.d.ts +3 -1
- package/dist/core/database/adapters/redis.js +34 -9
- package/dist/core/database/adapters/redis.js.map +1 -1
- package/dist/core/database/adapters/sqlite.d.ts +3 -1
- package/dist/core/database/adapters/sqlite.js +19 -8
- package/dist/core/database/adapters/sqlite.js.map +1 -1
- package/dist/core/database/index.d.ts +2 -2
- package/dist/core/database/index.js +2 -18
- package/dist/core/database/index.js.map +1 -1
- package/dist/core/docs/index.d.ts +9 -9
- package/dist/core/docs/index.js +14 -35
- package/dist/core/docs/index.js.map +1 -1
- package/dist/core/docs/openapi-generator.d.ts +2 -2
- package/dist/core/docs/openapi-generator.js +11 -16
- package/dist/core/docs/openapi-generator.js.map +1 -1
- package/dist/core/docs/schema-to-openapi.d.ts +2 -2
- package/dist/core/docs/schema-to-openapi.js +5 -11
- package/dist/core/docs/schema-to-openapi.js.map +1 -1
- package/dist/core/docs/simple-docs.d.ts +1 -1
- package/dist/core/docs/simple-docs.js +4 -9
- package/dist/core/docs/simple-docs.js.map +1 -1
- package/dist/core/docs/swagger-ui.d.ts +2 -2
- package/dist/core/docs/swagger-ui.js +26 -29
- package/dist/core/docs/swagger-ui.js.map +1 -1
- package/dist/core/docs/zod-to-openapi.js +31 -28
- package/dist/core/docs/zod-to-openapi.js.map +1 -1
- package/dist/core/events/event-bus.d.ts +1 -1
- package/dist/core/events/event-bus.js +6 -10
- package/dist/core/events/event-bus.js.map +1 -1
- package/dist/core/events/index.d.ts +2 -2
- package/dist/core/events/index.js +1 -5
- package/dist/core/events/index.js.map +1 -1
- package/dist/core/framework.d.ts +14 -6
- package/dist/core/framework.js +150 -88
- package/dist/core/framework.js.map +1 -1
- package/dist/core/http/http-server.d.ts +1 -1
- package/dist/core/http/http-server.js +24 -62
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/index.d.ts +4 -3
- package/dist/core/http/index.js +3 -8
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/router.d.ts +1 -1
- package/dist/core/http/router.js +3 -7
- package/dist/core/http/router.js.map +1 -1
- package/dist/core/http/uws-http-server.d.ts +64 -0
- package/dist/core/http/uws-http-server.js +688 -0
- package/dist/core/http/uws-http-server.js.map +1 -0
- package/dist/core/logger/filters.d.ts +1 -1
- package/dist/core/logger/filters.js +8 -19
- package/dist/core/logger/filters.js.map +1 -1
- package/dist/core/logger/index.d.ts +3 -3
- package/dist/core/logger/index.js +2 -25
- package/dist/core/logger/index.js.map +1 -1
- package/dist/core/logger/logger.d.ts +1 -1
- package/dist/core/logger/logger.js +21 -23
- package/dist/core/logger/logger.js.map +1 -1
- package/dist/core/logger/outputs.d.ts +1 -1
- package/dist/core/logger/outputs.js +8 -15
- package/dist/core/logger/outputs.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cache/file.js +10 -47
- package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
- package/dist/core/middleware/built-in/adapters/cache/index.js +10 -17
- package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.js +3 -7
- package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +3 -1
- package/dist/core/middleware/built-in/adapters/cache/redis.js +11 -9
- package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.js +3 -7
- package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +3 -7
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +3 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +12 -10
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
- package/dist/core/middleware/built-in/adapters/cdn/index.js +10 -17
- package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
- package/dist/core/middleware/built-in/adapters/index.js +4 -23
- package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
- package/dist/core/middleware/built-in/auth-helpers.js +11 -22
- package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
- package/dist/core/middleware/built-in/auth-providers.js +4 -9
- package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
- package/dist/core/middleware/built-in/auth.d.ts +2 -2
- package/dist/core/middleware/built-in/auth.js +10 -14
- package/dist/core/middleware/built-in/auth.js.map +1 -1
- package/dist/core/middleware/built-in/cache.d.ts +2 -2
- package/dist/core/middleware/built-in/cache.js +8 -11
- package/dist/core/middleware/built-in/cache.js.map +1 -1
- package/dist/core/middleware/built-in/cdn.d.ts +2 -2
- package/dist/core/middleware/built-in/cdn.js +5 -9
- package/dist/core/middleware/built-in/cdn.js.map +1 -1
- package/dist/core/middleware/built-in/cookie.d.ts +1 -1
- package/dist/core/middleware/built-in/cookie.js +3 -7
- package/dist/core/middleware/built-in/cookie.js.map +1 -1
- package/dist/core/middleware/built-in/cors.d.ts +1 -1
- package/dist/core/middleware/built-in/cors.js +3 -7
- package/dist/core/middleware/built-in/cors.js.map +1 -1
- package/dist/core/middleware/built-in/csp.d.ts +1 -1
- package/dist/core/middleware/built-in/csp.js +5 -8
- package/dist/core/middleware/built-in/csp.js.map +1 -1
- package/dist/core/middleware/built-in/csrf.d.ts +1 -1
- package/dist/core/middleware/built-in/csrf.js +5 -8
- package/dist/core/middleware/built-in/csrf.js.map +1 -1
- package/dist/core/middleware/built-in/error-tracker.js +3 -7
- package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
- package/dist/core/middleware/built-in/index.d.ts +28 -28
- package/dist/core/middleware/built-in/index.js +47 -82
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/jwt-helpers.d.ts +1 -1
- package/dist/core/middleware/built-in/jwt-helpers.js +6 -9
- package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor.js +3 -7
- package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
- package/dist/core/middleware/built-in/rate-limit.js +3 -7
- package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
- package/dist/core/middleware/built-in/request-logger.js +3 -7
- package/dist/core/middleware/built-in/request-logger.js.map +1 -1
- package/dist/core/middleware/built-in/session.d.ts +2 -2
- package/dist/core/middleware/built-in/session.js +11 -15
- package/dist/core/middleware/built-in/session.js.map +1 -1
- package/dist/core/middleware/built-in/sse.d.ts +1 -1
- package/dist/core/middleware/built-in/sse.js +3 -7
- package/dist/core/middleware/built-in/sse.js.map +1 -1
- package/dist/core/middleware/built-in/validation.d.ts +1 -1
- package/dist/core/middleware/built-in/validation.js +3 -7
- package/dist/core/middleware/built-in/validation.js.map +1 -1
- package/dist/core/middleware/index.d.ts +4 -4
- package/dist/core/middleware/index.js +8 -28
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/modules/auto-discovery.d.ts +3 -3
- package/dist/core/modules/auto-discovery.js +43 -81
- package/dist/core/modules/auto-discovery.js.map +1 -1
- package/dist/core/modules/index.d.ts +2 -2
- package/dist/core/modules/index.js +2 -9
- package/dist/core/modules/index.js.map +1 -1
- package/dist/core/modules/modules.d.ts +3 -3
- package/dist/core/modules/modules.js +11 -52
- package/dist/core/modules/modules.js.map +1 -1
- package/dist/core/networking/adapters/index.d.ts +4 -3
- package/dist/core/networking/adapters/index.js +3 -7
- package/dist/core/networking/adapters/index.js.map +1 -1
- package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
- package/dist/core/networking/adapters/socketio-adapter.js +5 -40
- package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
- package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
- package/dist/core/networking/adapters/uws-adapter.js +513 -0
- package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
- package/dist/core/networking/adapters/ws-adapter.d.ts +1 -1
- package/dist/core/networking/adapters/ws-adapter.js +7 -42
- package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
- package/dist/core/networking/index.d.ts +3 -2
- package/dist/core/networking/index.js +2 -7
- package/dist/core/networking/index.js.map +1 -1
- package/dist/core/networking/service-discovery.js +3 -7
- package/dist/core/networking/service-discovery.js.map +1 -1
- package/dist/core/networking/websocket-adapter.js +1 -2
- package/dist/core/networking/websocket-adapter.js.map +1 -1
- package/dist/core/networking/websocket-manager.d.ts +3 -3
- package/dist/core/networking/websocket-manager.js +9 -11
- package/dist/core/networking/websocket-manager.js.map +1 -1
- package/dist/core/routing/app-integration.d.ts +2 -2
- package/dist/core/routing/app-integration.js +7 -12
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/index.d.ts +2 -2
- package/dist/core/routing/index.js +7 -14
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
- package/dist/core/runtime/aws-lambda-adapter.js +2 -6
- package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
- package/dist/core/runtime/base-adapter.d.ts +2 -2
- package/dist/core/runtime/base-adapter.js +3 -7
- package/dist/core/runtime/base-adapter.js.map +1 -1
- package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
- package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
- package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
- package/dist/core/runtime/index.d.ts +12 -12
- package/dist/core/runtime/index.js +22 -35
- package/dist/core/runtime/index.js.map +1 -1
- package/dist/core/runtime/node-adapter.d.ts +4 -4
- package/dist/core/runtime/node-adapter.js +6 -43
- package/dist/core/runtime/node-adapter.js.map +1 -1
- package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
- package/dist/core/runtime/vercel-edge-adapter.js +2 -6
- package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
- package/dist/core/utilities/circuit-breaker.js +1 -5
- package/dist/core/utilities/circuit-breaker.js.map +1 -1
- package/dist/core/utilities/container.js +12 -22
- package/dist/core/utilities/container.js.map +1 -1
- package/dist/core/utilities/hooks.d.ts +2 -2
- package/dist/core/utilities/hooks.js +7 -12
- package/dist/core/utilities/hooks.js.map +1 -1
- package/dist/core/utilities/index.d.ts +5 -4
- package/dist/core/utilities/index.js +5 -19
- package/dist/core/utilities/index.js.map +1 -1
- package/dist/core/utilities/package-utils.d.ts +38 -0
- package/dist/core/utilities/package-utils.js +57 -0
- package/dist/core/utilities/package-utils.js.map +1 -0
- package/dist/core/validation/adapters.d.ts +1 -1
- package/dist/core/validation/adapters.js +15 -26
- package/dist/core/validation/adapters.js.map +1 -1
- package/dist/core/validation/index.d.ts +6 -4
- package/dist/core/validation/index.js +57 -28
- package/dist/core/validation/index.js.map +1 -1
- package/dist/core/validation/schema-interface.js +3 -9
- package/dist/core/validation/schema-interface.js.map +1 -1
- package/dist/index.d.ts +51 -52
- package/dist/index.js +23 -132
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +13 -10
- package/dist/moro.js +132 -102
- package/dist/moro.js.map +1 -1
- package/dist/types/auth.js +3 -9
- package/dist/types/auth.js.map +1 -1
- package/dist/types/cache.js +1 -2
- package/dist/types/cdn.js +1 -2
- package/dist/types/config.d.ts +13 -1
- package/dist/types/config.js +1 -2
- package/dist/types/config.js.map +1 -1
- package/dist/types/core.d.ts +3 -3
- package/dist/types/core.js +1 -2
- package/dist/types/database.js +1 -2
- package/dist/types/discovery.js +1 -2
- package/dist/types/events.js +1 -2
- package/dist/types/hooks.d.ts +1 -1
- package/dist/types/hooks.js +1 -2
- package/dist/types/http.js +1 -2
- package/dist/types/logger.js +1 -2
- package/dist/types/module.js +1 -2
- package/dist/types/runtime.d.ts +1 -1
- package/dist/types/runtime.js +1 -2
- package/dist/types/session.js +1 -2
- package/jest.config.mjs +41 -0
- package/package.json +18 -51
- package/src/core/auth/morojs-adapter.ts +1 -1
- package/src/core/config/config-manager.ts +2 -2
- package/src/core/config/config-sources.ts +6 -6
- package/src/core/config/config-validator.ts +38 -3
- package/src/core/config/file-loader.ts +13 -40
- package/src/core/config/index.ts +15 -11
- package/src/core/config/schema.ts +3 -2
- package/src/core/config/utils.ts +3 -3
- package/src/core/database/adapters/drizzle.ts +18 -6
- package/src/core/database/adapters/index.ts +13 -13
- package/src/core/database/adapters/mongodb.ts +23 -3
- package/src/core/database/adapters/mysql.ts +18 -4
- package/src/core/database/adapters/postgresql.ts +18 -3
- package/src/core/database/adapters/redis.ts +34 -4
- package/src/core/database/adapters/sqlite.ts +19 -3
- package/src/core/database/index.ts +2 -2
- package/src/core/docs/index.ts +8 -8
- package/src/core/docs/openapi-generator.ts +4 -4
- package/src/core/docs/schema-to-openapi.ts +3 -6
- package/src/core/docs/simple-docs.ts +2 -2
- package/src/core/docs/swagger-ui.ts +19 -16
- package/src/core/docs/zod-to-openapi.ts +34 -34
- package/src/core/events/event-bus.ts +2 -2
- package/src/core/events/index.ts +2 -2
- package/src/core/framework.ts +148 -44
- package/src/core/http/http-server.ts +14 -9
- package/src/core/http/index.ts +4 -3
- package/src/core/http/router.ts +2 -2
- package/src/core/http/uws-http-server.ts +794 -0
- package/src/core/logger/filters.ts +1 -1
- package/src/core/logger/index.ts +3 -3
- package/src/core/logger/logger.ts +9 -1
- package/src/core/logger/outputs.ts +1 -1
- package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
- package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
- package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
- package/src/core/middleware/built-in/adapters/cache/redis.ts +18 -4
- package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
- package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
- package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +16 -5
- package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
- package/src/core/middleware/built-in/adapters/index.ts +4 -4
- package/src/core/middleware/built-in/auth-helpers.ts +1 -1
- package/src/core/middleware/built-in/auth-providers.ts +1 -1
- package/src/core/middleware/built-in/auth.ts +6 -6
- package/src/core/middleware/built-in/cache.ts +5 -5
- package/src/core/middleware/built-in/cdn.ts +4 -4
- package/src/core/middleware/built-in/cookie.ts +2 -2
- package/src/core/middleware/built-in/cors.ts +2 -2
- package/src/core/middleware/built-in/csp.ts +3 -3
- package/src/core/middleware/built-in/csrf.ts +3 -3
- package/src/core/middleware/built-in/error-tracker.ts +1 -1
- package/src/core/middleware/built-in/index.ts +31 -31
- package/src/core/middleware/built-in/jwt-helpers.ts +6 -3
- package/src/core/middleware/built-in/performance-monitor.ts +1 -1
- package/src/core/middleware/built-in/rate-limit.ts +2 -2
- package/src/core/middleware/built-in/request-logger.ts +1 -1
- package/src/core/middleware/built-in/session.ts +7 -8
- package/src/core/middleware/built-in/sse.ts +2 -2
- package/src/core/middleware/built-in/validation.ts +2 -2
- package/src/core/middleware/index.ts +6 -6
- package/src/core/modules/auto-discovery.ts +4 -4
- package/src/core/modules/index.ts +2 -2
- package/src/core/modules/modules.ts +4 -4
- package/src/core/networking/adapters/index.ts +4 -3
- package/src/core/networking/adapters/socketio-adapter.ts +5 -3
- package/src/core/networking/adapters/uws-adapter.ts +619 -0
- package/src/core/networking/adapters/ws-adapter.ts +6 -4
- package/src/core/networking/index.ts +3 -2
- package/src/core/networking/service-discovery.ts +1 -1
- package/src/core/networking/websocket-manager.ts +7 -7
- package/src/core/routing/app-integration.ts +3 -3
- package/src/core/routing/index.ts +3 -3
- package/src/core/runtime/aws-lambda-adapter.ts +3 -3
- package/src/core/runtime/base-adapter.ts +2 -2
- package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
- package/src/core/runtime/index.ts +13 -13
- package/src/core/runtime/node-adapter.ts +4 -4
- package/src/core/runtime/vercel-edge-adapter.ts +3 -3
- package/src/core/utilities/hooks.ts +3 -3
- package/src/core/utilities/index.ts +5 -4
- package/src/core/utilities/package-utils.ts +59 -0
- package/src/core/validation/adapters.ts +1 -1
- package/src/core/validation/index.ts +68 -16
- package/src/index.ts +73 -66
- package/src/moro.ts +144 -51
- package/src/types/config.ts +13 -1
- package/src/types/core.ts +3 -3
- package/src/types/hooks.ts +1 -1
- package/src/types/runtime.ts +1 -1
- package/tsconfig.json +4 -2
package/src/index.ts
CHANGED
|
@@ -7,9 +7,9 @@ export {
|
|
|
7
7
|
createAppEdge,
|
|
8
8
|
createAppLambda,
|
|
9
9
|
createAppWorker,
|
|
10
|
-
} from './moro';
|
|
10
|
+
} from './moro.js';
|
|
11
11
|
|
|
12
|
-
export type { MoroOptions } from './core/framework';
|
|
12
|
+
export type { MoroOptions } from './core/framework.js';
|
|
13
13
|
|
|
14
14
|
// Export auth types and middleware
|
|
15
15
|
export type {
|
|
@@ -29,13 +29,13 @@ export type {
|
|
|
29
29
|
EmailProvider,
|
|
30
30
|
SignInOptions,
|
|
31
31
|
SignOutOptions,
|
|
32
|
-
} from './types/auth';
|
|
32
|
+
} from './types/auth.js';
|
|
33
33
|
|
|
34
34
|
// Export native @auth/morojs adapter
|
|
35
|
-
export { createAuthMiddleware, MoroJSAuth } from './core/auth/morojs-adapter';
|
|
35
|
+
export { createAuthMiddleware, MoroJSAuth } from './core/auth/morojs-adapter.js';
|
|
36
36
|
|
|
37
37
|
// Export Auth.js middleware and providers
|
|
38
|
-
export { auth, providers } from './core/middleware/built-in/auth';
|
|
38
|
+
export { auth, providers } from './core/middleware/built-in/auth.js';
|
|
39
39
|
|
|
40
40
|
// Runtime system exports
|
|
41
41
|
export type {
|
|
@@ -43,7 +43,7 @@ export type {
|
|
|
43
43
|
RuntimeAdapter,
|
|
44
44
|
RuntimeConfig,
|
|
45
45
|
RuntimeHttpResponse,
|
|
46
|
-
} from './types/runtime';
|
|
46
|
+
} from './types/runtime.js';
|
|
47
47
|
|
|
48
48
|
export {
|
|
49
49
|
NodeRuntimeAdapter,
|
|
@@ -55,23 +55,27 @@ export {
|
|
|
55
55
|
createEdgeHandler,
|
|
56
56
|
createLambdaHandler,
|
|
57
57
|
createWorkerHandler,
|
|
58
|
-
} from './core/runtime';
|
|
58
|
+
} from './core/runtime/index.js';
|
|
59
59
|
|
|
60
60
|
// Runtime-specific types
|
|
61
|
-
export type {
|
|
62
|
-
|
|
61
|
+
export type {
|
|
62
|
+
LambdaEvent,
|
|
63
|
+
LambdaContext,
|
|
64
|
+
LambdaResponse,
|
|
65
|
+
} from './core/runtime/aws-lambda-adapter.js';
|
|
66
|
+
export type { WorkersEnv, WorkersContext } from './core/runtime/cloudflare-workers-adapter.js';
|
|
63
67
|
|
|
64
68
|
// Core exports
|
|
65
|
-
export {
|
|
66
|
-
|
|
69
|
+
export {
|
|
70
|
+
MoroHttpServer,
|
|
71
|
+
UWebSocketsHttpServer,
|
|
72
|
+
middleware as httpMiddleware,
|
|
73
|
+
} from './core/http/index.js';
|
|
74
|
+
export { builtInMiddleware, simpleMiddleware } from './core/middleware/built-in/index.js';
|
|
67
75
|
|
|
68
76
|
// Networking System
|
|
69
|
-
export {
|
|
70
|
-
|
|
71
|
-
ServiceRegistry,
|
|
72
|
-
ServiceInfo,
|
|
73
|
-
ServiceDiscoveryOptions,
|
|
74
|
-
} from './core/networking';
|
|
77
|
+
export { WebSocketManager, ServiceRegistry } from './core/networking/index.js';
|
|
78
|
+
export type { ServiceInfo, ServiceDiscoveryOptions } from './core/networking/service-discovery.js';
|
|
75
79
|
|
|
76
80
|
// Utilities and Container System
|
|
77
81
|
export {
|
|
@@ -87,10 +91,13 @@ export {
|
|
|
87
91
|
HookManager,
|
|
88
92
|
HOOK_EVENTS,
|
|
89
93
|
middleware,
|
|
90
|
-
|
|
94
|
+
isPackageAvailable,
|
|
95
|
+
resolveUserPackage,
|
|
96
|
+
createUserRequire,
|
|
97
|
+
} from './core/utilities/index.js';
|
|
91
98
|
|
|
92
99
|
// Event System
|
|
93
|
-
export { MoroEventBus } from './core/events';
|
|
100
|
+
export { MoroEventBus } from './core/events/index.js';
|
|
94
101
|
export type {
|
|
95
102
|
EventContext,
|
|
96
103
|
EventPayload,
|
|
@@ -100,38 +107,29 @@ export type {
|
|
|
100
107
|
EventMetrics,
|
|
101
108
|
SystemEvents,
|
|
102
109
|
EventHandler,
|
|
103
|
-
} from './types/events';
|
|
110
|
+
} from './types/events.js';
|
|
104
111
|
|
|
105
112
|
// Logger System
|
|
106
|
-
export { createFrameworkLogger, logger } from './core/logger';
|
|
113
|
+
export { createFrameworkLogger, logger } from './core/logger/index.js';
|
|
107
114
|
|
|
108
115
|
// Universal Validation System
|
|
109
|
-
export { validate, body, query, params, combineSchemas } from './core/validation';
|
|
110
|
-
|
|
111
|
-
// Dynamic Zod export (optional dependency)
|
|
112
|
-
let z: any;
|
|
113
|
-
try {
|
|
114
|
-
z = require('zod').z;
|
|
115
|
-
} catch {
|
|
116
|
-
// Zod not available - that's fine!
|
|
117
|
-
z = undefined;
|
|
118
|
-
}
|
|
119
|
-
export { z };
|
|
116
|
+
export { validate, body, query, params, combineSchemas, z } from './core/validation/index.js';
|
|
117
|
+
|
|
120
118
|
export type {
|
|
121
119
|
ValidationConfig,
|
|
122
120
|
ValidationResult,
|
|
123
121
|
ValidationErrorDetail,
|
|
124
122
|
ValidatedRequest,
|
|
125
|
-
} from './core/validation';
|
|
123
|
+
} from './core/validation/index.js';
|
|
126
124
|
|
|
127
|
-
//
|
|
125
|
+
// Validation Interfaces and Adapters
|
|
128
126
|
export type {
|
|
129
127
|
ValidationSchema,
|
|
130
128
|
ValidationError,
|
|
131
129
|
InferSchemaType,
|
|
132
|
-
} from './core/validation/schema-interface';
|
|
133
|
-
export { normalizeValidationError } from './core/validation/schema-interface';
|
|
134
|
-
export { joi, yup, fn as customValidator, classValidator } from './core/validation/adapters';
|
|
130
|
+
} from './core/validation/schema-interface.js';
|
|
131
|
+
export { normalizeValidationError } from './core/validation/schema-interface.js';
|
|
132
|
+
export { joi, yup, fn as customValidator, classValidator } from './core/validation/adapters.js';
|
|
135
133
|
|
|
136
134
|
// Module System
|
|
137
135
|
export {
|
|
@@ -139,8 +137,8 @@ export {
|
|
|
139
137
|
ModuleLoader,
|
|
140
138
|
ModuleDiscovery,
|
|
141
139
|
autoDiscoverModuleDirectories,
|
|
142
|
-
} from './core/modules';
|
|
143
|
-
export type { ModuleDefinition, ModuleRoute, ModuleSocket, ModuleConfig } from './types/module';
|
|
140
|
+
} from './core/modules/index.js';
|
|
141
|
+
export type { ModuleDefinition, ModuleRoute, ModuleSocket, ModuleConfig } from './types/module.js';
|
|
144
142
|
|
|
145
143
|
// WebSocket Adapter System
|
|
146
144
|
export type {
|
|
@@ -151,14 +149,18 @@ export type {
|
|
|
151
149
|
WebSocketEmitter,
|
|
152
150
|
WebSocketMiddleware,
|
|
153
151
|
WebSocketEventHandler,
|
|
154
|
-
} from './core/networking/websocket-adapter';
|
|
152
|
+
} from './core/networking/websocket-adapter.js';
|
|
155
153
|
|
|
156
154
|
// Built-in WebSocket Adapters
|
|
157
|
-
export {
|
|
155
|
+
export {
|
|
156
|
+
SocketIOAdapter,
|
|
157
|
+
WSAdapter,
|
|
158
|
+
UWebSocketsAdapter,
|
|
159
|
+
} from './core/networking/adapters/index.js';
|
|
158
160
|
|
|
159
161
|
// Intelligent Routing System
|
|
160
|
-
export { createRoute, defineRoute, EXECUTION_PHASES } from './core/routing';
|
|
161
|
-
export { IntelligentRoutingManager, RouteRegistry } from './core/routing/app-integration';
|
|
162
|
+
export { createRoute, defineRoute, EXECUTION_PHASES } from './core/routing/index.js';
|
|
163
|
+
export { IntelligentRoutingManager, RouteRegistry } from './core/routing/app-integration.js';
|
|
162
164
|
export type {
|
|
163
165
|
RouteBuilder,
|
|
164
166
|
RouteSchema,
|
|
@@ -169,7 +171,7 @@ export type {
|
|
|
169
171
|
CacheConfig,
|
|
170
172
|
MiddlewarePhases,
|
|
171
173
|
ExecutionPhase,
|
|
172
|
-
} from './core/routing';
|
|
174
|
+
} from './core/routing/index.js';
|
|
173
175
|
|
|
174
176
|
// Documentation System
|
|
175
177
|
export {
|
|
@@ -177,8 +179,8 @@ export {
|
|
|
177
179
|
AppDocumentationManager,
|
|
178
180
|
createDocumentationSystem,
|
|
179
181
|
generateDocsFromIntelligentRoutes,
|
|
180
|
-
} from './core/docs';
|
|
181
|
-
export type { DocsConfig } from './core/docs';
|
|
182
|
+
} from './core/docs/index.js';
|
|
183
|
+
export type { DocsConfig } from './core/docs/index.js';
|
|
182
184
|
|
|
183
185
|
// Configuration utilities
|
|
184
186
|
export {
|
|
@@ -193,34 +195,39 @@ export {
|
|
|
193
195
|
requireEnvVars,
|
|
194
196
|
envVar,
|
|
195
197
|
getConfigValue,
|
|
196
|
-
} from './core/config/utils';
|
|
198
|
+
} from './core/config/utils.js';
|
|
197
199
|
|
|
198
|
-
export {
|
|
200
|
+
export {
|
|
201
|
+
initializeConfig,
|
|
202
|
+
getGlobalConfig,
|
|
203
|
+
isConfigInitialized,
|
|
204
|
+
resetConfig,
|
|
205
|
+
} from './core/config/index.js';
|
|
199
206
|
|
|
200
207
|
// Export configuration types for TypeScript users
|
|
201
|
-
export type { AppConfig } from './core/config';
|
|
208
|
+
export type { AppConfig } from './core/config/index.js';
|
|
202
209
|
|
|
203
210
|
// Middleware System
|
|
204
|
-
export { MiddlewareManager } from './core/middleware';
|
|
205
|
-
export type { MiddlewareInterface, MoroMiddleware } from './core/middleware';
|
|
211
|
+
export { MiddlewareManager } from './core/middleware/index.js';
|
|
212
|
+
export type { MiddlewareInterface, MoroMiddleware } from './core/middleware/index.js';
|
|
206
213
|
|
|
207
214
|
// Types
|
|
208
|
-
export type * from './types/core';
|
|
209
|
-
export type * from './types/http';
|
|
210
|
-
export type * from './types/hooks';
|
|
211
|
-
export type * from './types/cache';
|
|
212
|
-
export type * from './types/cdn';
|
|
213
|
-
export type * from './types/database';
|
|
214
|
-
export type * from './types/logger';
|
|
215
|
-
export type * from './types/session';
|
|
216
|
-
export type * from './types/discovery';
|
|
215
|
+
export type * from './types/core.js';
|
|
216
|
+
export type * from './types/http.js';
|
|
217
|
+
export type * from './types/hooks.js';
|
|
218
|
+
export type * from './types/cache.js';
|
|
219
|
+
export type * from './types/cdn.js';
|
|
220
|
+
export type * from './types/database.js';
|
|
221
|
+
export type * from './types/logger.js';
|
|
222
|
+
export type * from './types/session.js';
|
|
223
|
+
export type * from './types/discovery.js';
|
|
217
224
|
|
|
218
225
|
// Adapters
|
|
219
|
-
export * from './core/middleware/built-in/adapters';
|
|
220
|
-
export * from './core/database/adapters';
|
|
226
|
+
export * from './core/middleware/built-in/adapters/index.js';
|
|
227
|
+
export * from './core/database/adapters/index.js';
|
|
221
228
|
|
|
222
229
|
// Re-export commonly used types for convenience
|
|
223
|
-
export type { CacheAdapter, CacheOptions, CacheStrategy } from './types/cache';
|
|
224
|
-
export type { CDNAdapter, CDNOptions } from './types/cdn';
|
|
225
|
-
export type { DatabaseAdapter, DatabaseTransaction, DatabaseConfig } from './types/database';
|
|
226
|
-
export type { CookieOptions } from './types/http';
|
|
230
|
+
export type { CacheAdapter, CacheOptions, CacheStrategy } from './types/cache.js';
|
|
231
|
+
export type { CDNAdapter, CDNOptions } from './types/cdn.js';
|
|
232
|
+
export type { DatabaseAdapter, DatabaseTransaction, DatabaseConfig } from './types/database.js';
|
|
233
|
+
export type { CookieOptions } from './types/http.js';
|
package/src/moro.ts
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
// Moro Framework - Modern TypeScript API Framework
|
|
2
2
|
// Built for developers who demand performance, elegance, and zero compromises
|
|
3
3
|
// Event-driven • Modular • Enterprise-ready • Developer-first
|
|
4
|
-
import { Moro as MoroCore } from './core/framework';
|
|
5
|
-
import { HttpRequest, HttpResponse, middleware } from './core/http';
|
|
6
|
-
import { ModuleConfig, InternalRouteDefinition } from './types/module';
|
|
7
|
-
import { MoroOptions } from './types/core';
|
|
8
|
-
import { ModuleDefaultsConfig } from './types/config';
|
|
9
|
-
import { MoroEventBus } from './core/events';
|
|
10
|
-
import { createFrameworkLogger, applyLoggingConfiguration } from './core/logger';
|
|
11
|
-
import { Logger } from './types/logger';
|
|
12
|
-
import { MiddlewareManager } from './core/middleware';
|
|
13
|
-
import { IntelligentRoutingManager } from './core/routing/app-integration';
|
|
14
|
-
import { RouteBuilder, RouteSchema, CompiledRoute } from './core/routing';
|
|
15
|
-
import { AppDocumentationManager, DocsConfig } from './core/docs';
|
|
4
|
+
import { Moro as MoroCore } from './core/framework.js';
|
|
5
|
+
import { HttpRequest, HttpResponse, middleware } from './core/http/index.js';
|
|
6
|
+
import { ModuleConfig, InternalRouteDefinition } from './types/module.js';
|
|
7
|
+
import { MoroOptions } from './types/core.js';
|
|
8
|
+
import { ModuleDefaultsConfig } from './types/config.js';
|
|
9
|
+
import { MoroEventBus } from './core/events/index.js';
|
|
10
|
+
import { createFrameworkLogger, applyLoggingConfiguration } from './core/logger/index.js';
|
|
11
|
+
import { Logger } from './types/logger.js';
|
|
12
|
+
import { MiddlewareManager } from './core/middleware/index.js';
|
|
13
|
+
import { IntelligentRoutingManager } from './core/routing/app-integration.js';
|
|
14
|
+
import { RouteBuilder, RouteSchema, CompiledRoute } from './core/routing/index.js';
|
|
15
|
+
import { AppDocumentationManager, DocsConfig } from './core/docs/index.js';
|
|
16
16
|
import { EventEmitter } from 'events';
|
|
17
|
+
import cluster from 'cluster';
|
|
18
|
+
import os from 'os';
|
|
19
|
+
import { normalizeValidationError } from './core/validation/schema-interface.js';
|
|
17
20
|
// Configuration System Integration
|
|
18
|
-
import { initializeConfig, type AppConfig } from './core/config';
|
|
21
|
+
import { initializeConfig, type AppConfig } from './core/config/index.js';
|
|
19
22
|
// Runtime System Integration
|
|
20
|
-
import { RuntimeAdapter, RuntimeType, createRuntimeAdapter } from './core/runtime';
|
|
23
|
+
import { RuntimeAdapter, RuntimeType, createRuntimeAdapter } from './core/runtime/index.js';
|
|
21
24
|
|
|
22
25
|
export class Moro extends EventEmitter {
|
|
23
|
-
private coreFramework
|
|
26
|
+
private coreFramework!: MoroCore;
|
|
24
27
|
private routes: InternalRouteDefinition[] = [];
|
|
25
28
|
private moduleCounter = 0;
|
|
26
29
|
private loadedModules = new Set<string>();
|
|
@@ -31,7 +34,7 @@ export class Moro extends EventEmitter {
|
|
|
31
34
|
private autoDiscoveryInitialized = false;
|
|
32
35
|
private autoDiscoveryPromise: Promise<void> | null = null;
|
|
33
36
|
// Enterprise event system integration
|
|
34
|
-
private eventBus
|
|
37
|
+
private eventBus!: MoroEventBus;
|
|
35
38
|
// Application logger
|
|
36
39
|
private logger!: Logger;
|
|
37
40
|
// Intelligent routing system
|
|
@@ -39,12 +42,18 @@ export class Moro extends EventEmitter {
|
|
|
39
42
|
// Documentation system
|
|
40
43
|
private documentation = new AppDocumentationManager();
|
|
41
44
|
// Configuration system
|
|
42
|
-
private config
|
|
45
|
+
private config!: AppConfig;
|
|
43
46
|
// Runtime system
|
|
44
|
-
private runtimeAdapter
|
|
45
|
-
private runtimeType
|
|
47
|
+
private runtimeAdapter!: RuntimeAdapter;
|
|
48
|
+
private runtimeType!: RuntimeType;
|
|
46
49
|
// Middleware system
|
|
47
|
-
private middlewareManager
|
|
50
|
+
private middlewareManager!: MiddlewareManager;
|
|
51
|
+
// Queued WebSocket registrations (for async adapter detection)
|
|
52
|
+
private queuedWebSocketRegistrations: Array<{
|
|
53
|
+
namespace: string;
|
|
54
|
+
handlers: Record<string, Function>;
|
|
55
|
+
processed: boolean;
|
|
56
|
+
}> = [];
|
|
48
57
|
|
|
49
58
|
constructor(options: MoroOptions = {}) {
|
|
50
59
|
super(); // Call EventEmitter constructor
|
|
@@ -88,7 +97,11 @@ export class Moro extends EventEmitter {
|
|
|
88
97
|
const frameworkOptions: any = {
|
|
89
98
|
...options,
|
|
90
99
|
logger: this.config.logging,
|
|
91
|
-
|
|
100
|
+
// Enable websockets if either config has it enabled OR user passed websocket options
|
|
101
|
+
websocket:
|
|
102
|
+
this.config.websocket.enabled || options.websocket
|
|
103
|
+
? options.websocket || this.config.websocket || {}
|
|
104
|
+
: false,
|
|
92
105
|
config: this.config,
|
|
93
106
|
};
|
|
94
107
|
|
|
@@ -375,34 +388,45 @@ export class Moro extends EventEmitter {
|
|
|
375
388
|
|
|
376
389
|
// WebSocket helper with events
|
|
377
390
|
websocket(namespace: string, handlers: Record<string, Function>) {
|
|
391
|
+
// Queue the registration to be processed after adapter initialization
|
|
392
|
+
const registration = { namespace, handlers, processed: false };
|
|
393
|
+
this.queuedWebSocketRegistrations.push(registration);
|
|
394
|
+
|
|
395
|
+
// Try to process immediately if adapter is already ready
|
|
378
396
|
const adapter = this.coreFramework.getWebSocketAdapter();
|
|
379
|
-
if (!
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
'or\n' +
|
|
384
|
-
'new Moro({ websocket: { adapter: new SocketIOAdapter() } })'
|
|
385
|
-
);
|
|
397
|
+
if (adapter && !registration.processed) {
|
|
398
|
+
// Adapter is ready, process immediately
|
|
399
|
+
this.processWebSocketRegistration(namespace, handlers, adapter);
|
|
400
|
+
registration.processed = true;
|
|
386
401
|
}
|
|
402
|
+
// Otherwise, it will be processed when the server starts
|
|
403
|
+
|
|
404
|
+
return this;
|
|
405
|
+
}
|
|
387
406
|
|
|
407
|
+
private processWebSocketRegistration(
|
|
408
|
+
namespace: string,
|
|
409
|
+
handlers: Record<string, Function>,
|
|
410
|
+
adapter: any
|
|
411
|
+
) {
|
|
388
412
|
this.emit('websocket:registering', { namespace, handlers });
|
|
389
413
|
|
|
390
414
|
const ns = adapter.createNamespace(namespace);
|
|
391
415
|
|
|
392
416
|
Object.entries(handlers).forEach(([event, handler]) => {
|
|
393
|
-
ns.on('connection', socket => {
|
|
417
|
+
ns.on('connection', (socket: any) => {
|
|
394
418
|
this.emit('websocket:connection', { namespace, event, socket });
|
|
395
419
|
|
|
396
|
-
socket.on(event, (data, callback) => {
|
|
420
|
+
socket.on(event, (data: any, callback: any) => {
|
|
397
421
|
this.emit('websocket:event', { namespace, event, data });
|
|
398
422
|
|
|
399
423
|
Promise.resolve(handler(socket, data))
|
|
400
|
-
.then(result => {
|
|
424
|
+
.then((result: any) => {
|
|
401
425
|
this.emit('websocket:response', { namespace, event, result });
|
|
402
426
|
if (callback) callback(result);
|
|
403
427
|
else if (result) socket.emit(`${event}:response`, result);
|
|
404
428
|
})
|
|
405
|
-
.catch(error => {
|
|
429
|
+
.catch((error: any) => {
|
|
406
430
|
this.emit('websocket:error', { namespace, event, error });
|
|
407
431
|
const errorResponse = { success: false, error: error.message };
|
|
408
432
|
if (callback) callback(errorResponse);
|
|
@@ -413,7 +437,40 @@ export class Moro extends EventEmitter {
|
|
|
413
437
|
});
|
|
414
438
|
|
|
415
439
|
this.emit('websocket:registered', { namespace, handlers });
|
|
416
|
-
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
private async processQueuedWebSocketRegistrations() {
|
|
443
|
+
// Wait for WebSocket adapter to be ready
|
|
444
|
+
await this.coreFramework.ensureWebSocketReady();
|
|
445
|
+
|
|
446
|
+
const adapter = this.coreFramework.getWebSocketAdapter();
|
|
447
|
+
|
|
448
|
+
// Check if any unprocessed registrations exist
|
|
449
|
+
const unprocessedRegistrations = this.queuedWebSocketRegistrations.filter(r => !r.processed);
|
|
450
|
+
|
|
451
|
+
if (!adapter && unprocessedRegistrations.length > 0) {
|
|
452
|
+
throw new Error(
|
|
453
|
+
'WebSocket features require a WebSocket adapter.\n\n' +
|
|
454
|
+
'Option 1: Install socket.io (auto-detected):\n' +
|
|
455
|
+
' npm install socket.io\n' +
|
|
456
|
+
' const app = new Moro({ websocket: {} });\n\n' +
|
|
457
|
+
'Option 2: Configure a specific adapter:\n' +
|
|
458
|
+
" import { SocketIOAdapter } from '@morojs/moro';\n" +
|
|
459
|
+
' const app = new Moro({ websocket: { adapter: new SocketIOAdapter() } });\n\n' +
|
|
460
|
+
'Option 3: Enable in config file (moro.config.js):\n' +
|
|
461
|
+
' export default { websocket: { enabled: true } };'
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
if (adapter) {
|
|
466
|
+
// Process all unprocessed registrations
|
|
467
|
+
for (const registration of this.queuedWebSocketRegistrations) {
|
|
468
|
+
if (!registration.processed) {
|
|
469
|
+
this.processWebSocketRegistration(registration.namespace, registration.handlers, adapter);
|
|
470
|
+
registration.processed = true;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
417
474
|
}
|
|
418
475
|
|
|
419
476
|
// Start server with events (Node.js only)
|
|
@@ -469,9 +526,21 @@ export class Moro extends EventEmitter {
|
|
|
469
526
|
}
|
|
470
527
|
|
|
471
528
|
// Check if clustering is enabled for massive performance gains
|
|
529
|
+
// NOTE: uWebSockets.js does NOT support Node.js clustering - it's single-threaded only
|
|
530
|
+
const usingUWebSockets = this.config.server?.useUWebSockets || false;
|
|
531
|
+
|
|
472
532
|
if (this.config.performance?.clustering?.enabled) {
|
|
473
|
-
|
|
474
|
-
|
|
533
|
+
if (usingUWebSockets) {
|
|
534
|
+
this.logger.warn(
|
|
535
|
+
'Clustering is not supported with uWebSockets.js - running in single-threaded mode. ' +
|
|
536
|
+
'uWebSockets is so fast that single-threaded performance often exceeds multi-threaded Node.js!',
|
|
537
|
+
'Cluster'
|
|
538
|
+
);
|
|
539
|
+
// Continue without clustering
|
|
540
|
+
} else {
|
|
541
|
+
this.startWithClustering(port, host as string, callback);
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
475
544
|
}
|
|
476
545
|
this.eventBus.emit('server:starting', { port, runtime: this.runtimeType });
|
|
477
546
|
|
|
@@ -529,16 +598,23 @@ export class Moro extends EventEmitter {
|
|
|
529
598
|
}
|
|
530
599
|
};
|
|
531
600
|
|
|
532
|
-
// Ensure auto-discovery is complete before starting server
|
|
533
|
-
this.ensureAutoDiscoveryComplete()
|
|
601
|
+
// Ensure auto-discovery and WebSocket setup is complete before starting server
|
|
602
|
+
Promise.all([this.ensureAutoDiscoveryComplete(), this.processQueuedWebSocketRegistrations()])
|
|
534
603
|
.then(() => {
|
|
535
604
|
startServer();
|
|
536
605
|
})
|
|
537
606
|
.catch(error => {
|
|
538
|
-
this.logger.error('
|
|
607
|
+
this.logger.error('Initialization failed during server start', 'Framework', {
|
|
539
608
|
error: error instanceof Error ? error.message : String(error),
|
|
540
609
|
});
|
|
541
|
-
//
|
|
610
|
+
// For auto-discovery failures, start server anyway
|
|
611
|
+
// For WebSocket failures with queued registrations, error will propagate
|
|
612
|
+
if (
|
|
613
|
+
error instanceof Error &&
|
|
614
|
+
error.message.includes('WebSocket features require a WebSocket adapter')
|
|
615
|
+
) {
|
|
616
|
+
throw error;
|
|
617
|
+
}
|
|
542
618
|
startServer();
|
|
543
619
|
});
|
|
544
620
|
}
|
|
@@ -901,7 +977,6 @@ export class Moro extends EventEmitter {
|
|
|
901
977
|
req.body = validated;
|
|
902
978
|
} catch (error: any) {
|
|
903
979
|
// Handle universal validation errors
|
|
904
|
-
const { normalizeValidationError } = require('./core/validation/schema-interface');
|
|
905
980
|
const normalizedError = normalizeValidationError(error);
|
|
906
981
|
res.status(400).json({
|
|
907
982
|
success: false,
|
|
@@ -1016,7 +1091,7 @@ export class Moro extends EventEmitter {
|
|
|
1016
1091
|
|
|
1017
1092
|
// Enhanced auto-discovery initialization
|
|
1018
1093
|
private async initializeAutoDiscovery(options: MoroOptions): Promise<void> {
|
|
1019
|
-
const { ModuleDiscovery } = await import('./core/modules/auto-discovery');
|
|
1094
|
+
const { ModuleDiscovery } = await import('./core/modules/auto-discovery.js');
|
|
1020
1095
|
|
|
1021
1096
|
// Merge auto-discovery configuration
|
|
1022
1097
|
const autoDiscoveryConfig = this.mergeAutoDiscoveryConfig(options);
|
|
@@ -1251,9 +1326,6 @@ export class Moro extends EventEmitter {
|
|
|
1251
1326
|
private clusterWorkers = new Map<number, any>();
|
|
1252
1327
|
|
|
1253
1328
|
private startWithClustering(port: number, host?: string, callback?: () => void): void {
|
|
1254
|
-
const cluster = require('cluster');
|
|
1255
|
-
const os = require('os');
|
|
1256
|
-
|
|
1257
1329
|
// Worker count calculation - respect user choice
|
|
1258
1330
|
let workerCount = this.config.performance?.clustering?.workers || os.cpus().length;
|
|
1259
1331
|
|
|
@@ -1374,9 +1446,8 @@ export class Moro extends EventEmitter {
|
|
|
1374
1446
|
}
|
|
1375
1447
|
|
|
1376
1448
|
// Research-based memory optimization for workers
|
|
1377
|
-
const os = require('os');
|
|
1378
1449
|
const totalMemoryGB = os.totalmem() / (1024 * 1024 * 1024);
|
|
1379
|
-
const workerCount = Object.keys(
|
|
1450
|
+
const workerCount = Object.keys(cluster.workers || {}).length || 1;
|
|
1380
1451
|
|
|
1381
1452
|
// Conservative memory allocation
|
|
1382
1453
|
const heapSizePerWorkerMB = Math.min(
|
|
@@ -1477,11 +1548,33 @@ export class Moro extends EventEmitter {
|
|
|
1477
1548
|
});
|
|
1478
1549
|
};
|
|
1479
1550
|
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1551
|
+
// Ensure WebSocket setup is complete before starting worker
|
|
1552
|
+
this.processQueuedWebSocketRegistrations()
|
|
1553
|
+
.then(() => {
|
|
1554
|
+
if (host) {
|
|
1555
|
+
this.coreFramework.listen(port, host, workerCallback);
|
|
1556
|
+
} else {
|
|
1557
|
+
this.coreFramework.listen(port, workerCallback);
|
|
1558
|
+
}
|
|
1559
|
+
})
|
|
1560
|
+
.catch(error => {
|
|
1561
|
+
this.logger.error('WebSocket initialization failed in worker', 'Worker', {
|
|
1562
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1563
|
+
});
|
|
1564
|
+
// For WebSocket failures with queued registrations, error will propagate
|
|
1565
|
+
if (
|
|
1566
|
+
error instanceof Error &&
|
|
1567
|
+
error.message.includes('WebSocket features require a WebSocket adapter')
|
|
1568
|
+
) {
|
|
1569
|
+
throw error;
|
|
1570
|
+
}
|
|
1571
|
+
// Start anyway for other errors
|
|
1572
|
+
if (host) {
|
|
1573
|
+
this.coreFramework.listen(port, host, workerCallback);
|
|
1574
|
+
} else {
|
|
1575
|
+
this.coreFramework.listen(port, workerCallback);
|
|
1576
|
+
}
|
|
1577
|
+
});
|
|
1485
1578
|
}
|
|
1486
1579
|
}
|
|
1487
1580
|
|
package/src/types/config.ts
CHANGED
|
@@ -12,6 +12,12 @@ export interface ServerConfig {
|
|
|
12
12
|
errorBoundary: {
|
|
13
13
|
enabled: boolean;
|
|
14
14
|
};
|
|
15
|
+
useUWebSockets?: boolean; // Enable uWebSockets for both HTTP and WebSocket
|
|
16
|
+
ssl?: {
|
|
17
|
+
key_file_name?: string;
|
|
18
|
+
cert_file_name?: string;
|
|
19
|
+
passphrase?: string;
|
|
20
|
+
};
|
|
15
21
|
}
|
|
16
22
|
|
|
17
23
|
export interface ServiceDiscoveryConfig {
|
|
@@ -187,7 +193,7 @@ export interface PerformanceConfig {
|
|
|
187
193
|
|
|
188
194
|
export interface WebSocketConfig {
|
|
189
195
|
enabled: boolean;
|
|
190
|
-
adapter?: string | 'socket.io' | 'ws';
|
|
196
|
+
adapter?: string | 'socket.io' | 'ws' | 'uws';
|
|
191
197
|
compression?: boolean;
|
|
192
198
|
customIdGenerator?: () => string;
|
|
193
199
|
options?: {
|
|
@@ -197,6 +203,12 @@ export interface WebSocketConfig {
|
|
|
197
203
|
};
|
|
198
204
|
path?: string;
|
|
199
205
|
maxPayloadLength?: number;
|
|
206
|
+
idleTimeout?: number;
|
|
207
|
+
ssl?: {
|
|
208
|
+
key_file_name?: string;
|
|
209
|
+
cert_file_name?: string;
|
|
210
|
+
passphrase?: string;
|
|
211
|
+
};
|
|
200
212
|
};
|
|
201
213
|
}
|
|
202
214
|
|
package/src/types/core.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Core Framework Types
|
|
2
|
-
import { RuntimeConfig } from './runtime';
|
|
3
|
-
import { LogLevel, LoggerOptions } from './logger';
|
|
4
|
-
import { AppConfig } from './config';
|
|
2
|
+
import { RuntimeConfig } from './runtime.js';
|
|
3
|
+
import { LogLevel, LoggerOptions } from './logger.js';
|
|
4
|
+
import { AppConfig } from './config.js';
|
|
5
5
|
|
|
6
6
|
export interface MoroOptions {
|
|
7
7
|
autoDiscover?:
|
package/src/types/hooks.ts
CHANGED
package/src/types/runtime.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Runtime abstraction types for multi-environment support
|
|
2
|
-
import { HttpRequest, HttpResponse } from '
|
|
2
|
+
import { HttpRequest, HttpResponse } from '../core/http/index.js';
|
|
3
3
|
|
|
4
4
|
export type RuntimeType = 'node' | 'vercel-edge' | 'aws-lambda' | 'cloudflare-workers';
|
|
5
5
|
|
package/tsconfig.json
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
{
|
|
3
3
|
"compilerOptions": {
|
|
4
4
|
"target": "ES2022",
|
|
5
|
-
"module": "
|
|
5
|
+
"module": "NodeNext",
|
|
6
|
+
"moduleResolution": "NodeNext",
|
|
6
7
|
"lib": ["ES2022"],
|
|
7
8
|
"outDir": "./dist",
|
|
8
9
|
"rootDir": "./src",
|
|
@@ -14,7 +15,8 @@
|
|
|
14
15
|
"emitDecoratorMetadata": true,
|
|
15
16
|
"resolveJsonModule": true,
|
|
16
17
|
"declaration": true,
|
|
17
|
-
"sourceMap": true
|
|
18
|
+
"sourceMap": true,
|
|
19
|
+
"isolatedModules": true
|
|
18
20
|
},
|
|
19
21
|
"include": ["src/**/*"],
|
|
20
22
|
"exclude": ["node_modules", "dist"]
|