@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,164 +0,0 @@
|
|
|
1
|
-
// Integration layer for intelligent routing system with main Moro app
|
|
2
|
-
// Provides both chainable and schema-first APIs
|
|
3
|
-
//
|
|
4
|
-
// NOTE: This is now a thin facade to UnifiedRouter
|
|
5
|
-
// All routing logic has been consolidated in unified-router.ts
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
RouteBuilder,
|
|
9
|
-
RouteSchema,
|
|
10
|
-
CompiledRoute,
|
|
11
|
-
createRoute,
|
|
12
|
-
defineRoute,
|
|
13
|
-
HttpMethod,
|
|
14
|
-
} from './index.js';
|
|
15
|
-
import { HttpRequest, HttpResponse } from '../http/index.js';
|
|
16
|
-
import { UnifiedRouter } from './unified-router.js';
|
|
17
|
-
import { createFrameworkLogger } from '../logger/index.js';
|
|
18
|
-
|
|
19
|
-
const logger = createFrameworkLogger('AppIntegration');
|
|
20
|
-
|
|
21
|
-
// ===== RouteRegistry (Public API - Backward Compatibility) =====
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* RouteRegistry - Facade to UnifiedRouter for backward compatibility
|
|
25
|
-
* This was part of the public API, so we maintain it as an alias
|
|
26
|
-
*/
|
|
27
|
-
export class RouteRegistry {
|
|
28
|
-
private router = UnifiedRouter.getInstance();
|
|
29
|
-
|
|
30
|
-
register(route: CompiledRoute): void {
|
|
31
|
-
// Routes are automatically registered with UnifiedRouter when created
|
|
32
|
-
// This is a no-op for API compatibility
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async handleRequest(req: HttpRequest, res: HttpResponse): Promise<boolean> {
|
|
36
|
-
return this.router.handleRequest(req, res) as Promise<boolean>;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
getRoutes(): CompiledRoute[] {
|
|
40
|
-
const routes = this.router.getAllRoutes();
|
|
41
|
-
return routes.map(routeSchema => ({
|
|
42
|
-
schema: routeSchema as RouteSchema,
|
|
43
|
-
execute: async (_req: HttpRequest, _res: HttpResponse) => {
|
|
44
|
-
throw new Error('CompiledRoute.execute() not used - routing handled by UnifiedRouter');
|
|
45
|
-
},
|
|
46
|
-
}));
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Extended app interface with intelligent routing
|
|
51
|
-
export interface IntelligentApp {
|
|
52
|
-
get(path: string): RouteBuilder;
|
|
53
|
-
post(path: string): RouteBuilder;
|
|
54
|
-
put(path: string): RouteBuilder;
|
|
55
|
-
delete(path: string): RouteBuilder;
|
|
56
|
-
patch(path: string): RouteBuilder;
|
|
57
|
-
head(path: string): RouteBuilder;
|
|
58
|
-
options(path: string): RouteBuilder;
|
|
59
|
-
route(schema: RouteSchema): CompiledRoute;
|
|
60
|
-
register(route: CompiledRoute): void;
|
|
61
|
-
directRoute(method: string, path: string, handler: Function, options?: any): void;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Intelligent routing manager class
|
|
65
|
-
// Now a thin facade to UnifiedRouter
|
|
66
|
-
export class IntelligentRoutingManager implements IntelligentApp {
|
|
67
|
-
private router = UnifiedRouter.getInstance();
|
|
68
|
-
|
|
69
|
-
// Chainable route methods - delegate to createRoute
|
|
70
|
-
get(path: string): RouteBuilder {
|
|
71
|
-
return this.createChainableRoute('GET', path);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
post(path: string): RouteBuilder {
|
|
75
|
-
return this.createChainableRoute('POST', path);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
put(path: string): RouteBuilder {
|
|
79
|
-
return this.createChainableRoute('PUT', path);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
delete(path: string): RouteBuilder {
|
|
83
|
-
return this.createChainableRoute('DELETE', path);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
patch(path: string): RouteBuilder {
|
|
87
|
-
return this.createChainableRoute('PATCH', path);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
head(path: string): RouteBuilder {
|
|
91
|
-
return this.createChainableRoute('HEAD', path);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
options(path: string): RouteBuilder {
|
|
95
|
-
return this.createChainableRoute('OPTIONS', path);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Schema-first route method
|
|
99
|
-
route(schema: RouteSchema): CompiledRoute {
|
|
100
|
-
const compiledRoute = defineRoute(schema);
|
|
101
|
-
this.register(compiledRoute);
|
|
102
|
-
return compiledRoute;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Register compiled route (no-op, already registered by defineRoute)
|
|
106
|
-
register(_route: CompiledRoute): void {
|
|
107
|
-
// Routes are automatically registered with UnifiedRouter in defineRoute()
|
|
108
|
-
// This is just for API compatibility
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Handle incoming requests - delegates to UnifiedRouter
|
|
112
|
-
async handleIntelligentRoute(req: HttpRequest, res: HttpResponse): Promise<boolean> {
|
|
113
|
-
return this.router.handleRequest(req, res) as Promise<boolean>;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Get all registered routes - fetch from UnifiedRouter
|
|
117
|
-
getIntelligentRoutes(): CompiledRoute[] {
|
|
118
|
-
// Convert UnifiedRouter's internal routes to CompiledRoute format for docs
|
|
119
|
-
const routes = this.router.getAllRoutes();
|
|
120
|
-
return routes.map(routeSchema => ({
|
|
121
|
-
schema: routeSchema as RouteSchema, // Cast to match CompiledRoute interface
|
|
122
|
-
execute: async (_req: HttpRequest, _res: HttpResponse) => {
|
|
123
|
-
// Not used - routing handled by UnifiedRouter
|
|
124
|
-
throw new Error('CompiledRoute.execute() not used - routing handled by UnifiedRouter');
|
|
125
|
-
},
|
|
126
|
-
}));
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Direct route method (deprecated but kept for compatibility)
|
|
130
|
-
directRoute(method: string, path: string, handler: Function, options?: any): void {
|
|
131
|
-
logger.warn('Using deprecated direct route method', 'DirectRoute', {
|
|
132
|
-
method,
|
|
133
|
-
path,
|
|
134
|
-
suggestion: 'Use chainable or schema-first API instead',
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
const schema: RouteSchema = {
|
|
138
|
-
method: method.toUpperCase() as HttpMethod,
|
|
139
|
-
path,
|
|
140
|
-
handler: handler as any,
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
if (options?.validation) {
|
|
144
|
-
schema.validation = { body: options.validation };
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (options?.rateLimit) {
|
|
148
|
-
schema.rateLimit = options.rateLimit;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
this.route(schema);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
private createChainableRoute(method: HttpMethod, path: string): RouteBuilder {
|
|
155
|
-
// Just create and return the builder - it auto-registers with UnifiedRouter
|
|
156
|
-
return createRoute(method, path);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Convenience type for apps with intelligent routing
|
|
161
|
-
export type AppWithIntelligentRouting = IntelligentApp & {
|
|
162
|
-
handleIntelligentRoute(req: HttpRequest, res: HttpResponse): Promise<boolean>;
|
|
163
|
-
getIntelligentRoutes(): CompiledRoute[];
|
|
164
|
-
};
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
// Intelligent Routing System for Moro Framework
|
|
2
|
-
// Schema-first with automatic middleware ordering and chainable API
|
|
3
|
-
//
|
|
4
|
-
// NOTE: This file exports types and thin facades to UnifiedRouter
|
|
5
|
-
// All routing logic has been consolidated in unified-router.ts
|
|
6
|
-
|
|
7
|
-
import { ValidationSchema } from '../validation/schema-interface.js';
|
|
8
|
-
import { HttpRequest, HttpResponse } from '../http/index.js';
|
|
9
|
-
import { UnifiedRouter } from './unified-router.js';
|
|
10
|
-
|
|
11
|
-
// ===== TYPE EXPORTS (Keep all - used by app code) =====
|
|
12
|
-
|
|
13
|
-
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
|
|
14
|
-
export type RouteHandler<T = any> = (req: HttpRequest, res: HttpResponse) => T | Promise<T>;
|
|
15
|
-
export type Middleware = (
|
|
16
|
-
req: HttpRequest,
|
|
17
|
-
res: HttpResponse,
|
|
18
|
-
next: () => void
|
|
19
|
-
) => void | Promise<void>;
|
|
20
|
-
|
|
21
|
-
export interface ValidationConfig {
|
|
22
|
-
body?: ValidationSchema;
|
|
23
|
-
query?: ValidationSchema;
|
|
24
|
-
params?: ValidationSchema;
|
|
25
|
-
headers?: ValidationSchema;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface AuthConfig {
|
|
29
|
-
roles?: string[];
|
|
30
|
-
permissions?: string[];
|
|
31
|
-
optional?: boolean;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface RateLimitConfig {
|
|
35
|
-
requests: number;
|
|
36
|
-
window: number;
|
|
37
|
-
skipSuccessfulRequests?: boolean;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface CacheConfig {
|
|
41
|
-
ttl: number;
|
|
42
|
-
key?: string;
|
|
43
|
-
tags?: string[];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export interface MiddlewarePhases {
|
|
47
|
-
before?: Middleware[];
|
|
48
|
-
after?: Middleware[];
|
|
49
|
-
transform?: Middleware[];
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface RouteSchema {
|
|
53
|
-
method: HttpMethod;
|
|
54
|
-
path: string;
|
|
55
|
-
handler: RouteHandler;
|
|
56
|
-
validation?: ValidationConfig;
|
|
57
|
-
auth?: AuthConfig;
|
|
58
|
-
rateLimit?: RateLimitConfig;
|
|
59
|
-
cache?: CacheConfig;
|
|
60
|
-
middleware?: MiddlewarePhases;
|
|
61
|
-
description?: string;
|
|
62
|
-
tags?: string[];
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export const EXECUTION_PHASES = [
|
|
66
|
-
'security',
|
|
67
|
-
'parsing',
|
|
68
|
-
'rateLimit',
|
|
69
|
-
'before',
|
|
70
|
-
'auth',
|
|
71
|
-
'validation',
|
|
72
|
-
'transform',
|
|
73
|
-
'cache',
|
|
74
|
-
'after',
|
|
75
|
-
'handler',
|
|
76
|
-
] as const;
|
|
77
|
-
|
|
78
|
-
export type ExecutionPhase = (typeof EXECUTION_PHASES)[number];
|
|
79
|
-
|
|
80
|
-
export interface ValidatedRequest<T = any> extends HttpRequest {
|
|
81
|
-
validatedBody?: T;
|
|
82
|
-
validatedQuery?: any;
|
|
83
|
-
validatedParams?: any;
|
|
84
|
-
validatedHeaders?: any;
|
|
85
|
-
user?: any;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// ===== ROUTE BUILDER INTERFACE (Public API) =====
|
|
89
|
-
|
|
90
|
-
export interface RouteBuilder {
|
|
91
|
-
validate(config: ValidationConfig): RouteBuilder;
|
|
92
|
-
body<T>(schema: ValidationSchema<T>): RouteBuilder;
|
|
93
|
-
query<T>(schema: ValidationSchema<T>): RouteBuilder;
|
|
94
|
-
params<T>(schema: ValidationSchema<T>): RouteBuilder;
|
|
95
|
-
headers<T>(schema: ValidationSchema<T>): RouteBuilder;
|
|
96
|
-
auth(config: AuthConfig): RouteBuilder;
|
|
97
|
-
rateLimit(config: RateLimitConfig): RouteBuilder;
|
|
98
|
-
cache(config: CacheConfig): RouteBuilder;
|
|
99
|
-
before(...middleware: Middleware[]): RouteBuilder;
|
|
100
|
-
after(...middleware: Middleware[]): RouteBuilder;
|
|
101
|
-
transform(...middleware: Middleware[]): RouteBuilder;
|
|
102
|
-
use(...middleware: Middleware[]): RouteBuilder;
|
|
103
|
-
describe(description: string): RouteBuilder;
|
|
104
|
-
tag(...tags: string[]): RouteBuilder;
|
|
105
|
-
handler<T>(handler: RouteHandler<T>): void;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// ===== COMPILED ROUTE INTERFACE (Public API) =====
|
|
109
|
-
|
|
110
|
-
export interface CompiledRoute {
|
|
111
|
-
schema: RouteSchema;
|
|
112
|
-
execute(req: HttpRequest, res: HttpResponse): Promise<void>;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// ===== FACADE IMPLEMENTATIONS (Delegate to UnifiedRouter) =====
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Thin facade to UnifiedRouter.RouteBuilder
|
|
119
|
-
* Maintains backward compatibility while using optimized implementation
|
|
120
|
-
*/
|
|
121
|
-
export class IntelligentRouteBuilder implements RouteBuilder {
|
|
122
|
-
private schema: Partial<RouteSchema>;
|
|
123
|
-
private router = UnifiedRouter.getInstance();
|
|
124
|
-
|
|
125
|
-
constructor(method: HttpMethod, path: string) {
|
|
126
|
-
this.schema = {
|
|
127
|
-
method,
|
|
128
|
-
path,
|
|
129
|
-
middleware: {} as MiddlewarePhases,
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
validate(config: ValidationConfig): RouteBuilder {
|
|
134
|
-
this.schema.validation = { ...this.schema.validation, ...config };
|
|
135
|
-
return this;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
body<T>(schema: ValidationSchema<T>): RouteBuilder {
|
|
139
|
-
if (!this.schema.validation) this.schema.validation = {};
|
|
140
|
-
this.schema.validation.body = schema;
|
|
141
|
-
return this;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
query<T>(schema: ValidationSchema<T>): RouteBuilder {
|
|
145
|
-
if (!this.schema.validation) this.schema.validation = {};
|
|
146
|
-
this.schema.validation.query = schema;
|
|
147
|
-
return this;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
params<T>(schema: ValidationSchema<T>): RouteBuilder {
|
|
151
|
-
if (!this.schema.validation) this.schema.validation = {};
|
|
152
|
-
this.schema.validation.params = schema;
|
|
153
|
-
return this;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
headers<T>(schema: ValidationSchema<T>): RouteBuilder {
|
|
157
|
-
if (!this.schema.validation) this.schema.validation = {};
|
|
158
|
-
this.schema.validation.headers = schema;
|
|
159
|
-
return this;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
auth(config: AuthConfig): RouteBuilder {
|
|
163
|
-
this.schema.auth = config;
|
|
164
|
-
return this;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
rateLimit(config: RateLimitConfig): RouteBuilder {
|
|
168
|
-
this.schema.rateLimit = config;
|
|
169
|
-
return this;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
cache(config: CacheConfig): RouteBuilder {
|
|
173
|
-
this.schema.cache = config;
|
|
174
|
-
return this;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
before(...middleware: Middleware[]): RouteBuilder {
|
|
178
|
-
if (!this.schema.middleware) this.schema.middleware = {};
|
|
179
|
-
const phases = this.schema.middleware as MiddlewarePhases;
|
|
180
|
-
phases.before = [...(phases.before || []), ...middleware];
|
|
181
|
-
return this;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
after(...middleware: Middleware[]): RouteBuilder {
|
|
185
|
-
if (!this.schema.middleware) this.schema.middleware = {};
|
|
186
|
-
const phases = this.schema.middleware as MiddlewarePhases;
|
|
187
|
-
phases.after = [...(phases.after || []), ...middleware];
|
|
188
|
-
return this;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
transform(...middleware: Middleware[]): RouteBuilder {
|
|
192
|
-
if (!this.schema.middleware) this.schema.middleware = {};
|
|
193
|
-
const phases = this.schema.middleware as MiddlewarePhases;
|
|
194
|
-
phases.transform = [...(phases.transform || []), ...middleware];
|
|
195
|
-
return this;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
use(...middleware: Middleware[]): RouteBuilder {
|
|
199
|
-
return this.after(...middleware);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
describe(description: string): RouteBuilder {
|
|
203
|
-
this.schema.description = description;
|
|
204
|
-
return this;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
tag(...tags: string[]): RouteBuilder {
|
|
208
|
-
this.schema.tags = [...(this.schema.tags || []), ...tags];
|
|
209
|
-
return this;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
handler<T>(handler: RouteHandler<T>): void {
|
|
213
|
-
if (!handler) {
|
|
214
|
-
throw new Error('Handler is required');
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
const completeSchema: RouteSchema = {
|
|
218
|
-
...(this.schema as RouteSchema),
|
|
219
|
-
handler,
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
// Delegate to UnifiedRouter
|
|
223
|
-
this.router.registerRoute(completeSchema);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Thin facade implementing CompiledRoute interface
|
|
229
|
-
* Just stores schema for documentation purposes
|
|
230
|
-
*/
|
|
231
|
-
export class ExecutableRoute implements CompiledRoute {
|
|
232
|
-
constructor(public readonly schema: RouteSchema) {
|
|
233
|
-
// Register with UnifiedRouter
|
|
234
|
-
UnifiedRouter.getInstance().registerRoute(schema);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
async execute(req: HttpRequest, res: HttpResponse): Promise<void> {
|
|
238
|
-
// This is never called - UnifiedRouter handles execution
|
|
239
|
-
// But we implement it for interface compatibility
|
|
240
|
-
throw new Error(
|
|
241
|
-
'ExecutableRoute.execute() should not be called directly - routing handled by UnifiedRouter'
|
|
242
|
-
);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// ===== FACTORY FUNCTIONS (Backward Compatibility) =====
|
|
247
|
-
|
|
248
|
-
export function createRoute(method: HttpMethod, path: string): RouteBuilder {
|
|
249
|
-
return new IntelligentRouteBuilder(method, path);
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
export function defineRoute(schema: RouteSchema): CompiledRoute {
|
|
253
|
-
return new ExecutableRoute(schema);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// ===== RE-EXPORTS FROM UNIFIED ROUTER =====
|
|
257
|
-
|
|
258
|
-
export { UnifiedRouter } from './unified-router.js';
|
|
259
|
-
export { RouteBuilder as UnifiedRouteBuilder } from './unified-router.js';
|
|
260
|
-
export { PathMatcher, type CompiledPath, type MatchResult } from './path-matcher.js';
|
|
261
|
-
export { ObjectPoolManager, getPoolManager } from '../pooling/object-pool-manager.js';
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
// Shared Path Matching Utility with Caching
|
|
2
|
-
// Replaces 6 different pathToRegex implementations across the codebase
|
|
3
|
-
|
|
4
|
-
export interface CompiledPath {
|
|
5
|
-
pattern: RegExp | null;
|
|
6
|
-
paramNames: string[];
|
|
7
|
-
isStatic: boolean;
|
|
8
|
-
path: string;
|
|
9
|
-
segments: number;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface MatchResult {
|
|
13
|
-
params: Record<string, string>;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* LRU Cache implementation for compiled paths
|
|
18
|
-
*/
|
|
19
|
-
class LRUCache<K, V> {
|
|
20
|
-
private cache = new Map<K, V>();
|
|
21
|
-
private readonly maxSize: number;
|
|
22
|
-
|
|
23
|
-
constructor(maxSize: number = 1000) {
|
|
24
|
-
this.maxSize = maxSize;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
get(key: K): V | undefined {
|
|
28
|
-
const value = this.cache.get(key);
|
|
29
|
-
if (value !== undefined) {
|
|
30
|
-
// Move to end (most recently used)
|
|
31
|
-
this.cache.delete(key);
|
|
32
|
-
this.cache.set(key, value);
|
|
33
|
-
}
|
|
34
|
-
return value;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
set(key: K, value: V): void {
|
|
38
|
-
// Remove if exists (to update position)
|
|
39
|
-
if (this.cache.has(key)) {
|
|
40
|
-
this.cache.delete(key);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Add to end
|
|
44
|
-
this.cache.set(key, value);
|
|
45
|
-
|
|
46
|
-
// Evict oldest if over capacity
|
|
47
|
-
if (this.cache.size > this.maxSize) {
|
|
48
|
-
const firstKey = this.cache.keys().next().value;
|
|
49
|
-
if (firstKey !== undefined) {
|
|
50
|
-
this.cache.delete(firstKey);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
has(key: K): boolean {
|
|
56
|
-
return this.cache.has(key);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
clear(): void {
|
|
60
|
-
this.cache.clear();
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
get size(): number {
|
|
64
|
-
return this.cache.size;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* PathMatcher - Single source of truth for path pattern compilation and matching
|
|
70
|
-
*/
|
|
71
|
-
export class PathMatcher {
|
|
72
|
-
private static readonly cache = new LRUCache<string, CompiledPath>(1000);
|
|
73
|
-
private static compilationCount = 0;
|
|
74
|
-
private static cacheHits = 0;
|
|
75
|
-
private static cacheMisses = 0;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Compile a path pattern into an efficient matching structure
|
|
79
|
-
* Results are cached for performance
|
|
80
|
-
*/
|
|
81
|
-
static compile(path: string): CompiledPath {
|
|
82
|
-
// Check cache first
|
|
83
|
-
const cached = this.cache.get(path);
|
|
84
|
-
if (cached) {
|
|
85
|
-
this.cacheHits++;
|
|
86
|
-
return cached;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
this.cacheMisses++;
|
|
90
|
-
this.compilationCount++;
|
|
91
|
-
|
|
92
|
-
// Compile the pattern
|
|
93
|
-
const compiled = this.compileInternal(path);
|
|
94
|
-
this.cache.set(path, compiled);
|
|
95
|
-
return compiled;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Internal compilation logic
|
|
100
|
-
*/
|
|
101
|
-
private static compileInternal(path: string): CompiledPath {
|
|
102
|
-
const paramNames: string[] = [];
|
|
103
|
-
const isStatic = !path.includes(':') && !path.includes('*');
|
|
104
|
-
|
|
105
|
-
// Calculate segment count for optimization
|
|
106
|
-
const segments = path.split('/').filter(s => s.length > 0).length;
|
|
107
|
-
|
|
108
|
-
if (isStatic) {
|
|
109
|
-
// No regex needed for static routes
|
|
110
|
-
return {
|
|
111
|
-
pattern: null,
|
|
112
|
-
paramNames: [],
|
|
113
|
-
isStatic: true,
|
|
114
|
-
path,
|
|
115
|
-
segments,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Convert parameterized routes to regex
|
|
120
|
-
// Match :paramName and capture the parameter name
|
|
121
|
-
const regexPath = path
|
|
122
|
-
.replace(/\/:([^/]+)/g, (match, paramName) => {
|
|
123
|
-
paramNames.push(paramName);
|
|
124
|
-
return '/([^/]+)';
|
|
125
|
-
})
|
|
126
|
-
.replace(/\//g, '\\/');
|
|
127
|
-
|
|
128
|
-
return {
|
|
129
|
-
pattern: new RegExp(`^${regexPath}$`),
|
|
130
|
-
paramNames,
|
|
131
|
-
isStatic: false,
|
|
132
|
-
path,
|
|
133
|
-
segments,
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Match a request path against a compiled pattern
|
|
139
|
-
* Returns match result with extracted parameters, or null if no match
|
|
140
|
-
*/
|
|
141
|
-
static match(compiledPath: CompiledPath, requestPath: string): MatchResult | null {
|
|
142
|
-
// Path for static routes - simple string comparison
|
|
143
|
-
if (compiledPath.isStatic) {
|
|
144
|
-
return compiledPath.path === requestPath ? { params: {} } : null;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Dynamic route - use regex matching
|
|
148
|
-
if (!compiledPath.pattern) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const matches = requestPath.match(compiledPath.pattern);
|
|
153
|
-
if (!matches) {
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Extract parameters
|
|
158
|
-
const params: Record<string, string> = {};
|
|
159
|
-
compiledPath.paramNames.forEach((name, index) => {
|
|
160
|
-
params[name] = matches[index + 1];
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
return { params };
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Compile and match in one operation (convenience method)
|
|
168
|
-
*/
|
|
169
|
-
static compileAndMatch(pathPattern: string, requestPath: string): MatchResult | null {
|
|
170
|
-
const compiled = this.compile(pathPattern);
|
|
171
|
-
return this.match(compiled, requestPath);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Check if a path pattern is static (no parameters)
|
|
176
|
-
*/
|
|
177
|
-
static isStatic(path: string): boolean {
|
|
178
|
-
return !path.includes(':') && !path.includes('*');
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Get performance statistics
|
|
183
|
-
*/
|
|
184
|
-
static getStats() {
|
|
185
|
-
const totalRequests = this.cacheHits + this.cacheMisses;
|
|
186
|
-
return {
|
|
187
|
-
cacheSize: this.cache.size,
|
|
188
|
-
cacheHits: this.cacheHits,
|
|
189
|
-
cacheMisses: this.cacheMisses,
|
|
190
|
-
hitRate: totalRequests > 0 ? this.cacheHits / totalRequests : 0,
|
|
191
|
-
compilationCount: this.compilationCount,
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Clear the cache (useful for testing)
|
|
197
|
-
*/
|
|
198
|
-
static clearCache(): void {
|
|
199
|
-
this.cache.clear();
|
|
200
|
-
this.cacheHits = 0;
|
|
201
|
-
this.cacheMisses = 0;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Pre-compile multiple paths (cache warming)
|
|
206
|
-
*/
|
|
207
|
-
static precompile(paths: string[]): void {
|
|
208
|
-
paths.forEach(path => this.compile(path));
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Legacy compatibility function - maps to PathMatcher.compile
|
|
214
|
-
* @deprecated Use PathMatcher.compile instead
|
|
215
|
-
*/
|
|
216
|
-
export function pathToRegex(path: string): { pattern: RegExp; paramNames: string[] } {
|
|
217
|
-
const compiled = PathMatcher.compile(path);
|
|
218
|
-
return {
|
|
219
|
-
pattern: compiled.pattern || new RegExp(`^${path.replace(/\//g, '\\/')}$`),
|
|
220
|
-
paramNames: compiled.paramNames,
|
|
221
|
-
};
|
|
222
|
-
}
|