@morojs/moro 1.6.1 → 1.6.2
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 +74 -256
- package/dist/core/auth/morojs-adapter.js +20 -20
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/config-manager.d.ts +44 -0
- package/dist/core/config/config-manager.js +104 -0
- package/dist/core/config/config-manager.js.map +1 -0
- package/dist/core/config/config-sources.d.ts +21 -0
- package/dist/core/config/config-sources.js +503 -0
- package/dist/core/config/config-sources.js.map +1 -0
- package/dist/core/config/config-validator.d.ts +21 -0
- package/dist/core/config/config-validator.js +791 -0
- package/dist/core/config/config-validator.js.map +1 -0
- package/dist/core/config/file-loader.d.ts +1 -6
- package/dist/core/config/file-loader.js +21 -249
- package/dist/core/config/file-loader.js.map +1 -1
- package/dist/core/config/index.d.ts +41 -12
- package/dist/core/config/index.js +65 -54
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/schema.d.ts +2 -2
- package/dist/core/config/schema.js +55 -44
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/utils.d.ts +10 -3
- package/dist/core/config/utils.js +31 -58
- 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 +13 -1
- package/dist/core/database/adapters/mongodb.js +46 -10
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.d.ts +14 -1
- package/dist/core/database/adapters/mysql.js +19 -9
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.d.ts +12 -2
- package/dist/core/database/adapters/postgresql.js +19 -9
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.d.ts +12 -1
- package/dist/core/database/adapters/redis.js +48 -13
- 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 +7 -11
- 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 +20 -13
- package/dist/core/framework.js +285 -102
- package/dist/core/framework.js.map +1 -1
- package/dist/core/http/http-server.d.ts +59 -7
- package/dist/core/http/http-server.js +190 -176
- 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/uws-http-server.d.ts +46 -0
- package/dist/core/http/uws-http-server.js +523 -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 +20 -23
- 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 -24
- package/dist/core/logger/index.js.map +1 -1
- package/dist/core/logger/logger.d.ts +30 -14
- package/dist/core/logger/logger.js +398 -223
- 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 -17
- 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 +93 -26
- 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 +11 -12
- 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 -27
- package/dist/core/middleware/built-in/index.js +48 -78
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/jwt-helpers.d.ts +118 -0
- package/dist/core/middleware/built-in/jwt-helpers.js +218 -0
- package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -0
- 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 +5 -8
- 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 +12 -14
- 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 +19 -2
- package/dist/core/modules/auto-discovery.js +391 -74
- 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 +23 -54
- 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 +2 -2
- package/dist/core/networking/adapters/ws-adapter.js +8 -43
- 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 +8 -12
- 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/pooling/object-pool-manager.d.ts +140 -0
- package/dist/core/pooling/object-pool-manager.js +502 -0
- package/dist/core/pooling/object-pool-manager.js.map +1 -0
- package/dist/core/routing/app-integration.d.ts +14 -12
- package/dist/core/routing/app-integration.js +49 -85
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/index.d.ts +17 -11
- package/dist/core/routing/index.js +48 -237
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/routing/path-matcher.d.ts +67 -0
- package/dist/core/routing/path-matcher.js +182 -0
- package/dist/core/routing/path-matcher.js.map +1 -0
- package/dist/core/routing/router.d.ts +38 -0
- package/dist/core/routing/router.js +68 -0
- package/dist/core/routing/router.js.map +1 -0
- package/dist/core/routing/unified-router.d.ts +148 -0
- package/dist/core/routing/unified-router.js +684 -0
- package/dist/core/routing/unified-router.js.map +1 -0
- 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 +18 -49
- 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 +70 -16
- package/dist/moro.js +658 -271
- 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 +73 -2
- package/dist/types/config.js +1 -2
- package/dist/types/config.js.map +1 -1
- package/dist/types/core.d.ts +36 -42
- 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.d.ts +16 -1
- package/dist/types/http.js +1 -2
- package/dist/types/logger.d.ts +7 -0
- package/dist/types/logger.js +1 -2
- package/dist/types/module.d.ts +11 -0
- 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 +19 -52
- package/src/core/auth/morojs-adapter.ts +18 -13
- package/src/core/config/config-manager.ts +133 -0
- package/src/core/config/config-sources.ts +600 -0
- package/src/core/config/config-validator.ts +1116 -0
- package/src/core/config/file-loader.ts +16 -273
- package/src/core/config/index.ts +83 -34
- package/src/core/config/schema.ts +47 -33
- package/src/core/config/utils.ts +24 -31
- package/src/core/database/README.md +26 -16
- 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 +53 -5
- package/src/core/database/adapters/mysql.ts +32 -4
- package/src/core/database/adapters/postgresql.ts +30 -5
- package/src/core/database/adapters/redis.ts +61 -8
- 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 +3 -3
- package/src/core/events/index.ts +2 -2
- package/src/core/framework.ts +320 -71
- package/src/core/http/http-server.ts +203 -143
- package/src/core/http/index.ts +4 -3
- package/src/core/http/uws-http-server.ts +591 -0
- package/src/core/logger/filters.ts +13 -5
- package/src/core/logger/index.ts +4 -3
- package/src/core/logger/logger.ts +435 -216
- package/src/core/logger/outputs.ts +1 -3
- 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 +102 -21
- package/src/core/middleware/built-in/cache.ts +8 -6
- 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 +38 -30
- package/src/core/middleware/built-in/jwt-helpers.ts +243 -0
- 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 +3 -1
- package/src/core/middleware/built-in/session.ts +7 -8
- package/src/core/middleware/built-in/sse.ts +11 -9
- 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 +478 -15
- package/src/core/modules/index.ts +2 -2
- package/src/core/modules/modules.ts +23 -12
- 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 +8 -9
- package/src/core/networking/index.ts +3 -2
- package/src/core/networking/service-discovery.ts +6 -7
- package/src/core/networking/websocket-manager.ts +7 -7
- package/src/core/pooling/object-pool-manager.ts +630 -0
- package/src/core/routing/app-integration.ts +60 -112
- package/src/core/routing/index.ts +66 -293
- package/src/core/routing/path-matcher.ts +222 -0
- package/src/core/routing/router.ts +97 -0
- package/src/core/routing/unified-router.ts +870 -0
- 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 +16 -10
- 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 +784 -253
- package/src/types/config.ts +74 -2
- package/src/types/core.ts +49 -47
- package/src/types/hooks.ts +1 -1
- package/src/types/http.ts +23 -1
- package/src/types/logger.ts +9 -0
- package/src/types/module.ts +12 -0
- package/src/types/runtime.ts +1 -1
- package/tsconfig.json +4 -2
- package/dist/core/config/loader.d.ts +0 -7
- package/dist/core/config/loader.js +0 -269
- package/dist/core/config/loader.js.map +0 -1
- package/dist/core/config/validation.d.ts +0 -17
- package/dist/core/config/validation.js +0 -131
- package/dist/core/config/validation.js.map +0 -1
- package/dist/core/http/router.d.ts +0 -14
- package/dist/core/http/router.js +0 -109
- package/dist/core/http/router.js.map +0 -1
- package/src/core/config/loader.ts +0 -633
- package/src/core/config/validation.ts +0 -140
- package/src/core/http/router.ts +0 -141
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export interface CompiledPath {
|
|
2
|
+
pattern: RegExp | null;
|
|
3
|
+
paramNames: string[];
|
|
4
|
+
isStatic: boolean;
|
|
5
|
+
path: string;
|
|
6
|
+
segments: number;
|
|
7
|
+
}
|
|
8
|
+
export interface MatchResult {
|
|
9
|
+
params: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* PathMatcher - Single source of truth for path pattern compilation and matching
|
|
13
|
+
*/
|
|
14
|
+
export declare class PathMatcher {
|
|
15
|
+
private static readonly cache;
|
|
16
|
+
private static compilationCount;
|
|
17
|
+
private static cacheHits;
|
|
18
|
+
private static cacheMisses;
|
|
19
|
+
/**
|
|
20
|
+
* Compile a path pattern into an efficient matching structure
|
|
21
|
+
* Results are cached for performance
|
|
22
|
+
*/
|
|
23
|
+
static compile(path: string): CompiledPath;
|
|
24
|
+
/**
|
|
25
|
+
* Internal compilation logic
|
|
26
|
+
*/
|
|
27
|
+
private static compileInternal;
|
|
28
|
+
/**
|
|
29
|
+
* Match a request path against a compiled pattern
|
|
30
|
+
* Returns match result with extracted parameters, or null if no match
|
|
31
|
+
*/
|
|
32
|
+
static match(compiledPath: CompiledPath, requestPath: string): MatchResult | null;
|
|
33
|
+
/**
|
|
34
|
+
* Compile and match in one operation (convenience method)
|
|
35
|
+
*/
|
|
36
|
+
static compileAndMatch(pathPattern: string, requestPath: string): MatchResult | null;
|
|
37
|
+
/**
|
|
38
|
+
* Check if a path pattern is static (no parameters)
|
|
39
|
+
*/
|
|
40
|
+
static isStatic(path: string): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Get performance statistics
|
|
43
|
+
*/
|
|
44
|
+
static getStats(): {
|
|
45
|
+
cacheSize: number;
|
|
46
|
+
cacheHits: number;
|
|
47
|
+
cacheMisses: number;
|
|
48
|
+
hitRate: number;
|
|
49
|
+
compilationCount: number;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Clear the cache (useful for testing)
|
|
53
|
+
*/
|
|
54
|
+
static clearCache(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Pre-compile multiple paths (cache warming)
|
|
57
|
+
*/
|
|
58
|
+
static precompile(paths: string[]): void;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Legacy compatibility function - maps to PathMatcher.compile
|
|
62
|
+
* @deprecated Use PathMatcher.compile instead
|
|
63
|
+
*/
|
|
64
|
+
export declare function pathToRegex(path: string): {
|
|
65
|
+
pattern: RegExp;
|
|
66
|
+
paramNames: string[];
|
|
67
|
+
};
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Shared Path Matching Utility with Caching
|
|
2
|
+
// Replaces 6 different pathToRegex implementations across the codebase
|
|
3
|
+
/**
|
|
4
|
+
* LRU Cache implementation for compiled paths
|
|
5
|
+
*/
|
|
6
|
+
class LRUCache {
|
|
7
|
+
cache = new Map();
|
|
8
|
+
maxSize;
|
|
9
|
+
constructor(maxSize = 1000) {
|
|
10
|
+
this.maxSize = maxSize;
|
|
11
|
+
}
|
|
12
|
+
get(key) {
|
|
13
|
+
const value = this.cache.get(key);
|
|
14
|
+
if (value !== undefined) {
|
|
15
|
+
// Move to end (most recently used)
|
|
16
|
+
this.cache.delete(key);
|
|
17
|
+
this.cache.set(key, value);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
set(key, value) {
|
|
22
|
+
// Remove if exists (to update position)
|
|
23
|
+
if (this.cache.has(key)) {
|
|
24
|
+
this.cache.delete(key);
|
|
25
|
+
}
|
|
26
|
+
// Add to end
|
|
27
|
+
this.cache.set(key, value);
|
|
28
|
+
// Evict oldest if over capacity
|
|
29
|
+
if (this.cache.size > this.maxSize) {
|
|
30
|
+
const firstKey = this.cache.keys().next().value;
|
|
31
|
+
if (firstKey !== undefined) {
|
|
32
|
+
this.cache.delete(firstKey);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
has(key) {
|
|
37
|
+
return this.cache.has(key);
|
|
38
|
+
}
|
|
39
|
+
clear() {
|
|
40
|
+
this.cache.clear();
|
|
41
|
+
}
|
|
42
|
+
get size() {
|
|
43
|
+
return this.cache.size;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* PathMatcher - Single source of truth for path pattern compilation and matching
|
|
48
|
+
*/
|
|
49
|
+
export class PathMatcher {
|
|
50
|
+
static cache = new LRUCache(1000);
|
|
51
|
+
static compilationCount = 0;
|
|
52
|
+
static cacheHits = 0;
|
|
53
|
+
static cacheMisses = 0;
|
|
54
|
+
/**
|
|
55
|
+
* Compile a path pattern into an efficient matching structure
|
|
56
|
+
* Results are cached for performance
|
|
57
|
+
*/
|
|
58
|
+
static compile(path) {
|
|
59
|
+
// Check cache first
|
|
60
|
+
const cached = this.cache.get(path);
|
|
61
|
+
if (cached) {
|
|
62
|
+
this.cacheHits++;
|
|
63
|
+
return cached;
|
|
64
|
+
}
|
|
65
|
+
this.cacheMisses++;
|
|
66
|
+
this.compilationCount++;
|
|
67
|
+
// Compile the pattern
|
|
68
|
+
const compiled = this.compileInternal(path);
|
|
69
|
+
this.cache.set(path, compiled);
|
|
70
|
+
return compiled;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Internal compilation logic
|
|
74
|
+
*/
|
|
75
|
+
static compileInternal(path) {
|
|
76
|
+
const paramNames = [];
|
|
77
|
+
const isStatic = !path.includes(':') && !path.includes('*');
|
|
78
|
+
// Calculate segment count for optimization
|
|
79
|
+
const segments = path.split('/').filter(s => s.length > 0).length;
|
|
80
|
+
if (isStatic) {
|
|
81
|
+
// No regex needed for static routes
|
|
82
|
+
return {
|
|
83
|
+
pattern: null,
|
|
84
|
+
paramNames: [],
|
|
85
|
+
isStatic: true,
|
|
86
|
+
path,
|
|
87
|
+
segments,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Convert parameterized routes to regex
|
|
91
|
+
// Match :paramName and capture the parameter name
|
|
92
|
+
const regexPath = path
|
|
93
|
+
.replace(/\/:([^/]+)/g, (match, paramName) => {
|
|
94
|
+
paramNames.push(paramName);
|
|
95
|
+
return '/([^/]+)';
|
|
96
|
+
})
|
|
97
|
+
.replace(/\//g, '\\/');
|
|
98
|
+
return {
|
|
99
|
+
pattern: new RegExp(`^${regexPath}$`),
|
|
100
|
+
paramNames,
|
|
101
|
+
isStatic: false,
|
|
102
|
+
path,
|
|
103
|
+
segments,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Match a request path against a compiled pattern
|
|
108
|
+
* Returns match result with extracted parameters, or null if no match
|
|
109
|
+
*/
|
|
110
|
+
static match(compiledPath, requestPath) {
|
|
111
|
+
// Path for static routes - simple string comparison
|
|
112
|
+
if (compiledPath.isStatic) {
|
|
113
|
+
return compiledPath.path === requestPath ? { params: {} } : null;
|
|
114
|
+
}
|
|
115
|
+
// Dynamic route - use regex matching
|
|
116
|
+
if (!compiledPath.pattern) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
const matches = requestPath.match(compiledPath.pattern);
|
|
120
|
+
if (!matches) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
// Extract parameters
|
|
124
|
+
const params = {};
|
|
125
|
+
compiledPath.paramNames.forEach((name, index) => {
|
|
126
|
+
params[name] = matches[index + 1];
|
|
127
|
+
});
|
|
128
|
+
return { params };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Compile and match in one operation (convenience method)
|
|
132
|
+
*/
|
|
133
|
+
static compileAndMatch(pathPattern, requestPath) {
|
|
134
|
+
const compiled = this.compile(pathPattern);
|
|
135
|
+
return this.match(compiled, requestPath);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Check if a path pattern is static (no parameters)
|
|
139
|
+
*/
|
|
140
|
+
static isStatic(path) {
|
|
141
|
+
return !path.includes(':') && !path.includes('*');
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get performance statistics
|
|
145
|
+
*/
|
|
146
|
+
static getStats() {
|
|
147
|
+
const totalRequests = this.cacheHits + this.cacheMisses;
|
|
148
|
+
return {
|
|
149
|
+
cacheSize: this.cache.size,
|
|
150
|
+
cacheHits: this.cacheHits,
|
|
151
|
+
cacheMisses: this.cacheMisses,
|
|
152
|
+
hitRate: totalRequests > 0 ? this.cacheHits / totalRequests : 0,
|
|
153
|
+
compilationCount: this.compilationCount,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Clear the cache (useful for testing)
|
|
158
|
+
*/
|
|
159
|
+
static clearCache() {
|
|
160
|
+
this.cache.clear();
|
|
161
|
+
this.cacheHits = 0;
|
|
162
|
+
this.cacheMisses = 0;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Pre-compile multiple paths (cache warming)
|
|
166
|
+
*/
|
|
167
|
+
static precompile(paths) {
|
|
168
|
+
paths.forEach(path => this.compile(path));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Legacy compatibility function - maps to PathMatcher.compile
|
|
173
|
+
* @deprecated Use PathMatcher.compile instead
|
|
174
|
+
*/
|
|
175
|
+
export function pathToRegex(path) {
|
|
176
|
+
const compiled = PathMatcher.compile(path);
|
|
177
|
+
return {
|
|
178
|
+
pattern: compiled.pattern || new RegExp(`^${path.replace(/\//g, '\\/')}$`),
|
|
179
|
+
paramNames: compiled.paramNames,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=path-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-matcher.js","sourceRoot":"","sources":["../../../src/core/routing/path-matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { HttpRequest, HttpResponse, HttpHandler, Middleware, RouteDefinition } from '../../types/http.js';
|
|
2
|
+
export declare class Router {
|
|
3
|
+
private logger;
|
|
4
|
+
private unifiedRouter;
|
|
5
|
+
private routes;
|
|
6
|
+
get(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
|
|
7
|
+
post(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
|
|
8
|
+
put(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
|
|
9
|
+
delete(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
|
|
10
|
+
patch(path: string, ...handlers: (Middleware | HttpHandler)[]): void;
|
|
11
|
+
private addRoute;
|
|
12
|
+
handle(req: HttpRequest, res: HttpResponse, basePath?: string): Promise<boolean>;
|
|
13
|
+
getRoutes(): RouteDefinition[];
|
|
14
|
+
getPerformanceStats(): {
|
|
15
|
+
poolManager: {
|
|
16
|
+
routeCacheHitRate: number;
|
|
17
|
+
responseCacheHitRate: number;
|
|
18
|
+
paramPoolUtilization: number;
|
|
19
|
+
totalMemoryKB: number;
|
|
20
|
+
};
|
|
21
|
+
pathMatcher: {
|
|
22
|
+
cacheSize: number;
|
|
23
|
+
cacheHits: number;
|
|
24
|
+
cacheMisses: number;
|
|
25
|
+
hitRate: number;
|
|
26
|
+
compilationCount: number;
|
|
27
|
+
};
|
|
28
|
+
totalRoutes: number;
|
|
29
|
+
staticRoutes: number;
|
|
30
|
+
dynamicRoutes: number;
|
|
31
|
+
fastPathRoutes: number;
|
|
32
|
+
requestCount: number;
|
|
33
|
+
fastPathHits: number;
|
|
34
|
+
staticHits: number;
|
|
35
|
+
dynamicHits: number;
|
|
36
|
+
cacheHits: number;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
2
|
+
import { UnifiedRouter } from './unified-router.js';
|
|
3
|
+
export class Router {
|
|
4
|
+
logger = createFrameworkLogger('Router');
|
|
5
|
+
// Delegate to shared UnifiedRouter singleton for actual routing
|
|
6
|
+
unifiedRouter = UnifiedRouter.getInstance();
|
|
7
|
+
// Maintain route definitions for backward compatibility (getRoutes())
|
|
8
|
+
routes = [];
|
|
9
|
+
get(path, ...handlers) {
|
|
10
|
+
this.addRoute('GET', path, handlers);
|
|
11
|
+
}
|
|
12
|
+
post(path, ...handlers) {
|
|
13
|
+
this.addRoute('POST', path, handlers);
|
|
14
|
+
}
|
|
15
|
+
put(path, ...handlers) {
|
|
16
|
+
this.addRoute('PUT', path, handlers);
|
|
17
|
+
}
|
|
18
|
+
delete(path, ...handlers) {
|
|
19
|
+
this.addRoute('DELETE', path, handlers);
|
|
20
|
+
}
|
|
21
|
+
patch(path, ...handlers) {
|
|
22
|
+
this.addRoute('PATCH', path, handlers);
|
|
23
|
+
}
|
|
24
|
+
addRoute(method, path, handlers) {
|
|
25
|
+
const handler = handlers.pop();
|
|
26
|
+
const middleware = handlers;
|
|
27
|
+
// Delegate to UnifiedRouter for actual routing
|
|
28
|
+
this.unifiedRouter.addRoute(method, path, handler, middleware);
|
|
29
|
+
// Keep route definition for backward compatibility (getRoutes())
|
|
30
|
+
const route = {
|
|
31
|
+
method,
|
|
32
|
+
path,
|
|
33
|
+
pattern: new RegExp(''), // Not used since we delegate
|
|
34
|
+
paramNames: [],
|
|
35
|
+
handler,
|
|
36
|
+
middleware,
|
|
37
|
+
};
|
|
38
|
+
this.routes.push(route);
|
|
39
|
+
this.logger.debug(`Delegated route to UnifiedRouter: ${method} ${path}`, 'Facade');
|
|
40
|
+
}
|
|
41
|
+
async handle(req, res, basePath = '') {
|
|
42
|
+
// Adjust path for basePath
|
|
43
|
+
let path = req.path.startsWith(basePath) ? req.path.substring(basePath.length) : req.path;
|
|
44
|
+
if (path === '' || path === undefined) {
|
|
45
|
+
path = '/';
|
|
46
|
+
}
|
|
47
|
+
this.logger.debug(`Router delegating to UnifiedRouter: originalPath="${req.path}", basePath="${basePath}", processedPath="${path}"`, 'Facade');
|
|
48
|
+
// Temporarily adjust request path for processing
|
|
49
|
+
const originalPath = req.path;
|
|
50
|
+
req.path = path;
|
|
51
|
+
try {
|
|
52
|
+
// Delegate to UnifiedRouter for actual routing
|
|
53
|
+
return await this.unifiedRouter.handleRequest(req, res);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
// Restore original path
|
|
57
|
+
req.path = originalPath;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
getRoutes() {
|
|
61
|
+
return [...this.routes];
|
|
62
|
+
}
|
|
63
|
+
// Performance statistics for monitoring (delegates to UnifiedRouter)
|
|
64
|
+
getPerformanceStats() {
|
|
65
|
+
return this.unifiedRouter.getStats();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/core/routing/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { HttpRequest, HttpResponse } from '../../types/http.js';
|
|
2
|
+
import { ValidationSchema } from '../validation/schema-interface.js';
|
|
3
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
|
|
4
|
+
export type RouteHandler<T = any> = (req: HttpRequest, res: HttpResponse) => T | Promise<T>;
|
|
5
|
+
export type Middleware = (req: HttpRequest, res: HttpResponse, next: () => void) => void | Promise<void>;
|
|
6
|
+
export interface ValidationConfig {
|
|
7
|
+
body?: ValidationSchema;
|
|
8
|
+
query?: ValidationSchema;
|
|
9
|
+
params?: ValidationSchema;
|
|
10
|
+
headers?: ValidationSchema;
|
|
11
|
+
}
|
|
12
|
+
export interface AuthConfig {
|
|
13
|
+
roles?: string[];
|
|
14
|
+
permissions?: string[];
|
|
15
|
+
optional?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface RateLimitConfig {
|
|
18
|
+
requests: number;
|
|
19
|
+
window: number;
|
|
20
|
+
skipSuccessfulRequests?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface CacheConfig {
|
|
23
|
+
ttl: number;
|
|
24
|
+
key?: string;
|
|
25
|
+
tags?: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface MiddlewarePhases {
|
|
28
|
+
before?: Middleware[];
|
|
29
|
+
after?: Middleware[];
|
|
30
|
+
transform?: Middleware[];
|
|
31
|
+
}
|
|
32
|
+
export interface RouteSchema {
|
|
33
|
+
method: HttpMethod;
|
|
34
|
+
path: string;
|
|
35
|
+
handler: RouteHandler;
|
|
36
|
+
validation?: ValidationConfig;
|
|
37
|
+
auth?: AuthConfig;
|
|
38
|
+
rateLimit?: RateLimitConfig;
|
|
39
|
+
cache?: CacheConfig;
|
|
40
|
+
middleware?: MiddlewarePhases | Middleware[];
|
|
41
|
+
description?: string;
|
|
42
|
+
tags?: string[];
|
|
43
|
+
}
|
|
44
|
+
export declare class RouteBuilder {
|
|
45
|
+
private schema;
|
|
46
|
+
private router;
|
|
47
|
+
constructor(method: HttpMethod, path: string, router: UnifiedRouter);
|
|
48
|
+
validate(config: ValidationConfig): this;
|
|
49
|
+
body<T>(schema: ValidationSchema<T>): this;
|
|
50
|
+
query<T>(schema: ValidationSchema<T>): this;
|
|
51
|
+
params<T>(schema: ValidationSchema<T>): this;
|
|
52
|
+
headers<T>(schema: ValidationSchema<T>): this;
|
|
53
|
+
auth(config: AuthConfig): this;
|
|
54
|
+
rateLimit(config: RateLimitConfig): this;
|
|
55
|
+
cache(config: CacheConfig): this;
|
|
56
|
+
before(...middleware: Middleware[]): this;
|
|
57
|
+
after(...middleware: Middleware[]): this;
|
|
58
|
+
transform(...middleware: Middleware[]): this;
|
|
59
|
+
use(...middleware: Middleware[]): this;
|
|
60
|
+
describe(description: string): this;
|
|
61
|
+
tag(...tags: string[]): this;
|
|
62
|
+
handler<T>(handler: RouteHandler<T>): void;
|
|
63
|
+
}
|
|
64
|
+
export declare class UnifiedRouter {
|
|
65
|
+
private static instance;
|
|
66
|
+
private readonly poolManager;
|
|
67
|
+
private staticRoutes;
|
|
68
|
+
private dynamicRoutesBySegments;
|
|
69
|
+
private fastPathRoutes;
|
|
70
|
+
private allRoutes;
|
|
71
|
+
private stats;
|
|
72
|
+
constructor();
|
|
73
|
+
/**
|
|
74
|
+
* Get singleton instance (optional - can still create new instances)
|
|
75
|
+
*/
|
|
76
|
+
static getInstance(): UnifiedRouter;
|
|
77
|
+
/**
|
|
78
|
+
* Reset singleton (useful for testing)
|
|
79
|
+
*/
|
|
80
|
+
static reset(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Clear all routes (useful for testing)
|
|
83
|
+
*/
|
|
84
|
+
clearAllRoutes(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Register a route (internal method)
|
|
87
|
+
*/
|
|
88
|
+
registerRoute(schema: RouteSchema): void;
|
|
89
|
+
/**
|
|
90
|
+
* Chainable API methods
|
|
91
|
+
*/
|
|
92
|
+
get(path: string): RouteBuilder;
|
|
93
|
+
post(path: string): RouteBuilder;
|
|
94
|
+
put(path: string): RouteBuilder;
|
|
95
|
+
delete(path: string): RouteBuilder;
|
|
96
|
+
patch(path: string): RouteBuilder;
|
|
97
|
+
head(path: string): RouteBuilder;
|
|
98
|
+
options(path: string): RouteBuilder;
|
|
99
|
+
/**
|
|
100
|
+
* Schema-first route registration
|
|
101
|
+
*/
|
|
102
|
+
route(schema: RouteSchema): void;
|
|
103
|
+
/**
|
|
104
|
+
* Direct API (for backward compatibility)
|
|
105
|
+
*/
|
|
106
|
+
addRoute(method: HttpMethod, path: string, handler: RouteHandler, middleware?: Middleware[]): void;
|
|
107
|
+
/**
|
|
108
|
+
* Find a matching route for the request
|
|
109
|
+
* Returns boolean (sync) for fast-path routes, Promise<boolean> for others
|
|
110
|
+
*/
|
|
111
|
+
handleRequest(req: HttpRequest, res: HttpResponse): Promise<boolean> | boolean;
|
|
112
|
+
private executeRoute;
|
|
113
|
+
private executePhase;
|
|
114
|
+
private executeMiddleware;
|
|
115
|
+
private executeRateLimit;
|
|
116
|
+
private executeAuth;
|
|
117
|
+
private executeValidation;
|
|
118
|
+
private executeCache;
|
|
119
|
+
private isFastPathRoute;
|
|
120
|
+
private buildExecutionOrder;
|
|
121
|
+
getAllRoutes(): RouteSchema[];
|
|
122
|
+
getRouteCount(): number;
|
|
123
|
+
getStats(): {
|
|
124
|
+
poolManager: {
|
|
125
|
+
routeCacheHitRate: number;
|
|
126
|
+
responseCacheHitRate: number;
|
|
127
|
+
paramPoolUtilization: number;
|
|
128
|
+
totalMemoryKB: number;
|
|
129
|
+
};
|
|
130
|
+
pathMatcher: {
|
|
131
|
+
cacheSize: number;
|
|
132
|
+
cacheHits: number;
|
|
133
|
+
cacheMisses: number;
|
|
134
|
+
hitRate: number;
|
|
135
|
+
compilationCount: number;
|
|
136
|
+
};
|
|
137
|
+
totalRoutes: number;
|
|
138
|
+
staticRoutes: number;
|
|
139
|
+
dynamicRoutes: number;
|
|
140
|
+
fastPathRoutes: number;
|
|
141
|
+
requestCount: number;
|
|
142
|
+
fastPathHits: number;
|
|
143
|
+
staticHits: number;
|
|
144
|
+
dynamicHits: number;
|
|
145
|
+
cacheHits: number;
|
|
146
|
+
};
|
|
147
|
+
logPerformanceStats(): void;
|
|
148
|
+
}
|