@morojs/moro 1.6.1 → 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/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 +202 -185
- 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/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} +12 -23
- 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/auth/jwt-helpers.d.ts +118 -0
- package/dist/core/middleware/built-in/auth/jwt-helpers.js +218 -0
- 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} +5 -10
- 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 +10 -47
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
- package/dist/core/middleware/built-in/cache/adapters/cache/index.d.ts +5 -0
- package/dist/core/middleware/built-in/cache/adapters/cache/index.js +21 -0
- 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 +3 -7
- 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 +3 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +11 -9
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
- package/dist/core/middleware/built-in/cache/adapters/index.d.ts +2 -0
- package/dist/core/middleware/built-in/cache/adapters/index.js +5 -0
- 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} +30 -14
- 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 +3 -7
- 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 +3 -7
- 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 +3 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +12 -10
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/adapters/cdn/index.d.ts +5 -0
- package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js +21 -0
- 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/cdn/adapters/index.js +5 -0
- 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/middleware.js +26 -0
- package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/index.d.ts +28 -61
- 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/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/middleware.js +29 -0
- 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} +24 -22
- 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/middleware.js +24 -0
- 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} +16 -9
- 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.d.ts +4 -4
- package/dist/core/middleware/index.js +14 -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 +132 -0
- package/dist/core/routing/unified-router.js +639 -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 +52 -52
- package/dist/index.js +24 -132
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +70 -16
- package/dist/moro.js +650 -269
- 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 +4 -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/package.json +18 -55
- 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/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/index.d.ts +0 -5
- package/dist/core/middleware/built-in/adapters/cache/index.js +0 -28
- 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.d.ts +0 -5
- package/dist/core/middleware/built-in/adapters/cdn/index.js +0 -28
- package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/index.d.ts +0 -4
- package/dist/core/middleware/built-in/adapters/index.js +0 -26
- 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 -281
- 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 -113
- 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 -68
- 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 -29
- 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 -71
- 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 -63
- 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 +0 -19
- package/dist/core/middleware/built-in/error-tracker.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 +0 -22
- 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 +0 -16
- 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 -209
- 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 -71
- 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/src/core/auth/README.md +0 -339
- package/src/core/auth/morojs-adapter.ts +0 -410
- package/src/core/config/file-loader.ts +0 -407
- package/src/core/config/index.ts +0 -60
- package/src/core/config/loader.ts +0 -633
- package/src/core/config/schema.ts +0 -150
- package/src/core/config/utils.ts +0 -251
- package/src/core/config/validation.ts +0 -140
- package/src/core/database/README.md +0 -228
- package/src/core/database/adapters/drizzle.ts +0 -403
- package/src/core/database/adapters/index.ts +0 -42
- package/src/core/database/adapters/mongodb.ts +0 -269
- package/src/core/database/adapters/mysql.ts +0 -207
- package/src/core/database/adapters/postgresql.ts +0 -201
- package/src/core/database/adapters/redis.ts +0 -326
- package/src/core/database/adapters/sqlite.ts +0 -247
- 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 -148
- package/src/core/docs/simple-docs.ts +0 -295
- package/src/core/docs/swagger-ui.ts +0 -351
- 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 -636
- package/src/core/http/http-server.ts +0 -1787
- package/src/core/http/index.ts +0 -6
- package/src/core/http/router.ts +0 -141
- package/src/core/logger/filters.ts +0 -145
- package/src/core/logger/index.ts +0 -20
- package/src/core/logger/logger.ts +0 -814
- package/src/core/logger/outputs.ts +0 -134
- 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 -100
- 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 -83
- package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
- package/src/core/middleware/built-in/adapters/index.ts +0 -7
- 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 -329
- package/src/core/middleware/built-in/cache.ts +0 -211
- 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 -79
- 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 -14
- package/src/core/middleware/built-in/session.ts +0 -288
- package/src/core/middleware/built-in/sse.ts +0 -86
- 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 -263
- package/src/core/modules/index.ts +0 -3
- package/src/core/modules/modules.ts +0 -124
- package/src/core/networking/adapters/index.ts +0 -16
- package/src/core/networking/adapters/socketio-adapter.ts +0 -252
- package/src/core/networking/adapters/ws-adapter.ts +0 -430
- package/src/core/networking/index.ts +0 -3
- package/src/core/networking/service-discovery.ts +0 -304
- package/src/core/networking/websocket-adapter.ts +0 -217
- package/src/core/networking/websocket-manager.ts +0 -308
- package/src/core/routing/app-integration.ts +0 -216
- package/src/core/routing/index.ts +0 -488
- 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 -196
- 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 -16
- package/src/core/validation/adapters.ts +0 -147
- package/src/core/validation/index.ts +0 -206
- package/src/core/validation/schema-interface.ts +0 -100
- package/src/index.ts +0 -226
- package/src/moro.ts +0 -1197
- 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 -157
- package/src/types/core.ts +0 -56
- 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 -67
- package/src/types/logger.ts +0 -93
- package/src/types/module.ts +0 -87
- package/src/types/runtime.ts +0 -76
- package/src/types/session.ts +0 -89
- package/tsconfig.json +0 -21
- /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
|
@@ -1,82 +1,27 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.middleware = exports.MoroHttpServer = void 0;
|
|
37
1
|
// src/core/http-server.ts
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
2
|
+
import { createServer } from 'http';
|
|
3
|
+
import * as zlib from 'zlib';
|
|
4
|
+
import { createReadStream } from 'fs';
|
|
5
|
+
import * as crypto from 'crypto';
|
|
6
|
+
import { promisify } from 'util';
|
|
7
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
8
|
+
import { PathMatcher } from '../routing/path-matcher.js';
|
|
9
|
+
import { ObjectPoolManager } from '../pooling/object-pool-manager.js';
|
|
10
|
+
const gzip = promisify(zlib.gzip);
|
|
11
|
+
const deflate = promisify(zlib.deflate);
|
|
12
|
+
export class MoroHttpServer {
|
|
45
13
|
server;
|
|
46
14
|
routes = [];
|
|
47
15
|
globalMiddleware = [];
|
|
48
16
|
compressionEnabled = true;
|
|
49
17
|
compressionThreshold = 1024;
|
|
50
|
-
|
|
18
|
+
requestTrackingEnabled = true; // Generate request IDs
|
|
19
|
+
logger = createFrameworkLogger('HttpServer');
|
|
51
20
|
hookManager;
|
|
52
21
|
requestCounter = 0;
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
maxPoolSize = 50;
|
|
57
|
-
// Request handler pooling to avoid function creation overhead
|
|
58
|
-
middlewareExecutionCache = new Map();
|
|
59
|
-
// String interning for common values (massive memory savings)
|
|
60
|
-
static INTERNED_METHODS = new Map([
|
|
61
|
-
['GET', 'GET'],
|
|
62
|
-
['POST', 'POST'],
|
|
63
|
-
['PUT', 'PUT'],
|
|
64
|
-
['DELETE', 'DELETE'],
|
|
65
|
-
['PATCH', 'PATCH'],
|
|
66
|
-
['HEAD', 'HEAD'],
|
|
67
|
-
['OPTIONS', 'OPTIONS'],
|
|
68
|
-
]);
|
|
69
|
-
static INTERNED_HEADERS = new Map([
|
|
70
|
-
['content-type', 'content-type'],
|
|
71
|
-
['content-length', 'content-length'],
|
|
72
|
-
['authorization', 'authorization'],
|
|
73
|
-
['accept', 'accept'],
|
|
74
|
-
['user-agent', 'user-agent'],
|
|
75
|
-
['host', 'host'],
|
|
76
|
-
['connection', 'connection'],
|
|
77
|
-
['cache-control', 'cache-control'],
|
|
78
|
-
]);
|
|
79
|
-
// Pre-compiled response templates for ultra-common responses
|
|
22
|
+
// Use shared object pool manager
|
|
23
|
+
poolManager = ObjectPoolManager.getInstance();
|
|
24
|
+
// Pre-compiled response templates for common responses
|
|
80
25
|
static RESPONSE_TEMPLATES = {
|
|
81
26
|
notFound: Buffer.from('{"success":false,"error":"Not found"}'),
|
|
82
27
|
unauthorized: Buffer.from('{"success":false,"error":"Unauthorized"}'),
|
|
@@ -85,7 +30,7 @@ class MoroHttpServer {
|
|
|
85
30
|
methodNotAllowed: Buffer.from('{"success":false,"error":"Method not allowed"}'),
|
|
86
31
|
rateLimited: Buffer.from('{"success":false,"error":"Rate limit exceeded"}'),
|
|
87
32
|
};
|
|
88
|
-
//
|
|
33
|
+
// Buffer pool for zero-copy operations
|
|
89
34
|
static BUFFER_SIZES = [64, 256, 1024, 4096, 16384];
|
|
90
35
|
static BUFFER_POOLS = new Map();
|
|
91
36
|
static {
|
|
@@ -120,7 +65,7 @@ class MoroHttpServer {
|
|
|
120
65
|
}
|
|
121
66
|
}
|
|
122
67
|
constructor() {
|
|
123
|
-
this.server =
|
|
68
|
+
this.server = createServer(this.handleRequest.bind(this));
|
|
124
69
|
// Optimize server for high performance (conservative settings for compatibility)
|
|
125
70
|
this.server.keepAliveTimeout = 5000; // 5 seconds
|
|
126
71
|
this.server.headersTimeout = 6000; // 6 seconds
|
|
@@ -140,6 +85,10 @@ class MoroHttpServer {
|
|
|
140
85
|
this.compressionThreshold = Infinity; // Never compress
|
|
141
86
|
}
|
|
142
87
|
}
|
|
88
|
+
// Configure request tracking (ID generation)
|
|
89
|
+
setRequestTracking(enabled) {
|
|
90
|
+
this.requestTrackingEnabled = enabled;
|
|
91
|
+
}
|
|
143
92
|
// Middleware management
|
|
144
93
|
use(middleware) {
|
|
145
94
|
this.globalMiddleware.push(middleware);
|
|
@@ -195,39 +144,33 @@ class MoroHttpServer {
|
|
|
195
144
|
}
|
|
196
145
|
}
|
|
197
146
|
pathToRegex(path) {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
const regexPattern = path
|
|
201
|
-
.replace(/\/:([^/]+)/g, (match, paramName) => {
|
|
202
|
-
paramNames.push(paramName);
|
|
203
|
-
return '/([^/]+)';
|
|
204
|
-
})
|
|
205
|
-
.replace(/\//g, '\\/');
|
|
147
|
+
// Use shared PathMatcher for consistent path compilation
|
|
148
|
+
const compiled = PathMatcher.compile(path);
|
|
206
149
|
return {
|
|
207
|
-
pattern: new RegExp(`^${
|
|
208
|
-
paramNames,
|
|
150
|
+
pattern: compiled.pattern || new RegExp(`^${path.replace(/\//g, '\\/')}$`),
|
|
151
|
+
paramNames: compiled.paramNames,
|
|
209
152
|
};
|
|
210
153
|
}
|
|
211
154
|
async handleRequest(req, res) {
|
|
212
155
|
const httpReq = this.enhanceRequest(req);
|
|
213
|
-
const httpRes = this.enhanceResponse(res);
|
|
156
|
+
const httpRes = this.enhanceResponse(res, httpReq);
|
|
214
157
|
// Store original params for efficient cleanup
|
|
215
158
|
const originalParams = httpReq.params;
|
|
216
159
|
try {
|
|
217
|
-
// Optimized URL and query parsing
|
|
160
|
+
// Optimized URL and query parsing with object pooling
|
|
218
161
|
const urlString = req.url;
|
|
219
162
|
const queryIndex = urlString.indexOf('?');
|
|
220
163
|
if (queryIndex === -1) {
|
|
221
|
-
// No query string
|
|
164
|
+
// No query string
|
|
222
165
|
httpReq.path = urlString;
|
|
223
166
|
httpReq.query = {};
|
|
224
167
|
}
|
|
225
168
|
else {
|
|
226
|
-
// Has query string - parse efficiently
|
|
169
|
+
// Has query string - parse efficiently with pooled object
|
|
227
170
|
httpReq.path = urlString.substring(0, queryIndex);
|
|
228
|
-
httpReq.query = this.
|
|
171
|
+
httpReq.query = this.parseQueryStringPooled(urlString.substring(queryIndex + 1));
|
|
229
172
|
}
|
|
230
|
-
//
|
|
173
|
+
// Method checking - avoid array includes
|
|
231
174
|
const method = req.method;
|
|
232
175
|
if (method === 'POST' || method === 'PUT' || method === 'PATCH') {
|
|
233
176
|
httpReq.body = await this.parseBody(req);
|
|
@@ -248,7 +191,7 @@ class MoroHttpServer {
|
|
|
248
191
|
// Find matching route
|
|
249
192
|
const route = this.findRoute(req.method, httpReq.path);
|
|
250
193
|
if (!route) {
|
|
251
|
-
//
|
|
194
|
+
// 404 response with pre-compiled buffer
|
|
252
195
|
httpRes.statusCode = 404;
|
|
253
196
|
httpRes.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
254
197
|
httpRes.setHeader('Content-Length', MoroHttpServer.RESPONSE_TEMPLATES.notFound.length);
|
|
@@ -271,12 +214,13 @@ class MoroHttpServer {
|
|
|
271
214
|
}
|
|
272
215
|
catch (error) {
|
|
273
216
|
// Debug: Log the actual error and where it came from
|
|
274
|
-
this.logger.debug('
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
217
|
+
this.logger.debug('Request error details', 'RequestHandler', {
|
|
218
|
+
errorType: typeof error,
|
|
219
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
220
|
+
errorStack: error instanceof Error ? error.stack : 'No stack trace',
|
|
221
|
+
requestPath: req.url,
|
|
222
|
+
requestMethod: req.method,
|
|
223
|
+
});
|
|
280
224
|
this.logger.error('Request error', 'RequestHandler', {
|
|
281
225
|
error: error instanceof Error ? error.message : String(error),
|
|
282
226
|
requestId: httpReq.requestId,
|
|
@@ -293,14 +237,14 @@ class MoroHttpServer {
|
|
|
293
237
|
});
|
|
294
238
|
}
|
|
295
239
|
else {
|
|
296
|
-
//
|
|
240
|
+
// Defensive fallback - check each method individually
|
|
297
241
|
if (typeof httpRes.setHeader === 'function') {
|
|
298
242
|
httpRes.statusCode = 500;
|
|
299
243
|
httpRes.setHeader('Content-Type', 'application/json');
|
|
300
244
|
}
|
|
301
245
|
else {
|
|
302
246
|
// Even setHeader doesn't exist - object is completely wrong
|
|
303
|
-
this.logger.error('
|
|
247
|
+
this.logger.error('Response object is not a proper ServerResponse', 'RequestHandler', {
|
|
304
248
|
responseType: typeof httpRes,
|
|
305
249
|
responseKeys: Object.keys(httpRes),
|
|
306
250
|
});
|
|
@@ -313,7 +257,7 @@ class MoroHttpServer {
|
|
|
313
257
|
}));
|
|
314
258
|
}
|
|
315
259
|
else {
|
|
316
|
-
this.logger.error('
|
|
260
|
+
this.logger.error('Cannot send error response - end() method missing', 'RequestHandler');
|
|
317
261
|
}
|
|
318
262
|
}
|
|
319
263
|
}
|
|
@@ -342,50 +286,27 @@ class MoroHttpServer {
|
|
|
342
286
|
}
|
|
343
287
|
});
|
|
344
288
|
}
|
|
345
|
-
//
|
|
289
|
+
// Use shared object pool for parameter objects
|
|
346
290
|
acquireParamObject() {
|
|
347
|
-
|
|
348
|
-
if (obj) {
|
|
349
|
-
// ES2022: Use Object.hasOwn for safer property checks and faster clearing
|
|
350
|
-
// Clear existing properties more efficiently
|
|
351
|
-
for (const key in obj) {
|
|
352
|
-
if (Object.hasOwn(obj, key)) {
|
|
353
|
-
delete obj[key];
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
return obj;
|
|
357
|
-
}
|
|
358
|
-
return {};
|
|
291
|
+
return this.poolManager.acquireParams();
|
|
359
292
|
}
|
|
360
293
|
releaseParamObject(params) {
|
|
361
|
-
|
|
362
|
-
this.paramObjectPool.push(params);
|
|
363
|
-
}
|
|
294
|
+
this.poolManager.releaseParams(params);
|
|
364
295
|
}
|
|
365
296
|
// Force cleanup of all pooled objects
|
|
366
297
|
forceCleanupPools() {
|
|
367
|
-
//
|
|
368
|
-
this.
|
|
369
|
-
this.bufferPool.splice(0);
|
|
298
|
+
// Use shared pool manager cleanup
|
|
299
|
+
this.poolManager.clearAll();
|
|
370
300
|
// Force garbage collection if available
|
|
371
|
-
// Use modern globalThis check with optional chaining
|
|
372
301
|
if (globalThis?.gc) {
|
|
373
302
|
globalThis.gc();
|
|
374
303
|
}
|
|
375
304
|
}
|
|
376
305
|
acquireBuffer(size) {
|
|
377
|
-
|
|
378
|
-
const index = this.bufferPool.findIndex(b => b.length >= size);
|
|
379
|
-
if (index !== -1) {
|
|
380
|
-
const buffer = this.bufferPool.splice(index, 1)[0];
|
|
381
|
-
return buffer.subarray(0, size);
|
|
382
|
-
}
|
|
383
|
-
return Buffer.allocUnsafe(size);
|
|
306
|
+
return this.poolManager.acquireBuffer(size);
|
|
384
307
|
}
|
|
385
308
|
releaseBuffer(buffer) {
|
|
386
|
-
|
|
387
|
-
this.bufferPool.push(buffer);
|
|
388
|
-
}
|
|
309
|
+
this.poolManager.releaseBuffer(buffer);
|
|
389
310
|
}
|
|
390
311
|
streamLargeResponse(res, data) {
|
|
391
312
|
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
@@ -404,7 +325,7 @@ class MoroHttpServer {
|
|
|
404
325
|
if (this.pathNormalizationCache.has(path)) {
|
|
405
326
|
return this.pathNormalizationCache.get(path);
|
|
406
327
|
}
|
|
407
|
-
//
|
|
328
|
+
// Normalization: remove trailing slash (except root), decode once
|
|
408
329
|
let normalized = path;
|
|
409
330
|
if (normalized.length > 1 && normalized.endsWith('/')) {
|
|
410
331
|
normalized = normalized.slice(0, -1);
|
|
@@ -422,8 +343,8 @@ class MoroHttpServer {
|
|
|
422
343
|
httpReq.body = null;
|
|
423
344
|
httpReq.path = '';
|
|
424
345
|
httpReq.ip = req.socket.remoteAddress || '';
|
|
425
|
-
//
|
|
426
|
-
httpReq.requestId =
|
|
346
|
+
// Request ID generation using pool manager (if enabled)
|
|
347
|
+
httpReq.requestId = this.requestTrackingEnabled ? this.poolManager.generateRequestId() : '';
|
|
427
348
|
httpReq.headers = req.headers;
|
|
428
349
|
// Parse cookies
|
|
429
350
|
httpReq.cookies = this.parseCookies(req.headers.cookie || '');
|
|
@@ -441,8 +362,10 @@ class MoroHttpServer {
|
|
|
441
362
|
});
|
|
442
363
|
return cookies;
|
|
443
364
|
}
|
|
444
|
-
enhanceResponse(res) {
|
|
365
|
+
enhanceResponse(res, req) {
|
|
445
366
|
const httpRes = res;
|
|
367
|
+
// Store request reference for access to headers (needed for compression, logging, etc.)
|
|
368
|
+
httpRes.req = req;
|
|
446
369
|
// BULLETPROOF status method - always works
|
|
447
370
|
httpRes.status = (code) => {
|
|
448
371
|
httpRes.statusCode = code;
|
|
@@ -451,28 +374,31 @@ class MoroHttpServer {
|
|
|
451
374
|
httpRes.json = async (data) => {
|
|
452
375
|
if (httpRes.headersSent)
|
|
453
376
|
return;
|
|
454
|
-
//
|
|
377
|
+
// JSON serialization with zero-copy buffers
|
|
455
378
|
let jsonString;
|
|
456
379
|
// Enhanced JSON optimization for common API patterns
|
|
380
|
+
// Only optimize simple patterns without extra fields
|
|
457
381
|
if (data && typeof data === 'object' && 'success' in data) {
|
|
458
|
-
|
|
459
|
-
|
|
382
|
+
const keys = Object.keys(data);
|
|
383
|
+
const keyCount = keys.length;
|
|
384
|
+
if (keyCount === 3 && 'data' in data && 'error' in data) {
|
|
385
|
+
// {success, data, error} pattern (exactly 3 keys)
|
|
460
386
|
jsonString = `{"success":${data.success},"data":${JSON.stringify(data.data)},"error":${JSON.stringify(data.error)}}`;
|
|
461
387
|
}
|
|
462
|
-
else if (
|
|
463
|
-
// {success, data, total} pattern
|
|
388
|
+
else if (keyCount === 3 && 'data' in data && 'total' in data) {
|
|
389
|
+
// {success, data, total} pattern (exactly 3 keys)
|
|
464
390
|
jsonString = `{"success":${data.success},"data":${JSON.stringify(data.data)},"total":${data.total}}`;
|
|
465
391
|
}
|
|
466
|
-
else if (
|
|
467
|
-
// {success, data} pattern
|
|
392
|
+
else if (keyCount === 2 && 'data' in data) {
|
|
393
|
+
// {success, data} pattern (exactly 2 keys)
|
|
468
394
|
jsonString = `{"success":${data.success},"data":${JSON.stringify(data.data)}}`;
|
|
469
395
|
}
|
|
470
|
-
else if (
|
|
471
|
-
// {success, error} pattern
|
|
396
|
+
else if (keyCount === 2 && 'error' in data) {
|
|
397
|
+
// {success, error} pattern (exactly 2 keys)
|
|
472
398
|
jsonString = `{"success":${data.success},"error":${JSON.stringify(data.error)}}`;
|
|
473
399
|
}
|
|
474
400
|
else {
|
|
475
|
-
// Complex object - use standard JSON.stringify
|
|
401
|
+
// Complex object or has additional fields - use standard JSON.stringify
|
|
476
402
|
jsonString = JSON.stringify(data);
|
|
477
403
|
}
|
|
478
404
|
}
|
|
@@ -555,6 +481,24 @@ class MoroHttpServer {
|
|
|
555
481
|
httpRes.end(data);
|
|
556
482
|
};
|
|
557
483
|
httpRes.cookie = (name, value, options = {}) => {
|
|
484
|
+
if (httpRes.headersSent) {
|
|
485
|
+
const isCritical = options.critical ||
|
|
486
|
+
name.includes('session') ||
|
|
487
|
+
name.includes('auth') ||
|
|
488
|
+
name.includes('csrf');
|
|
489
|
+
const message = `Cookie '${name}' could not be set - headers already sent`;
|
|
490
|
+
if (isCritical || options.throwOnLateSet) {
|
|
491
|
+
throw new Error(`${message}. This may cause authentication or security issues.`);
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
this.logger.warn(message, 'CookieWarning', {
|
|
495
|
+
cookieName: name,
|
|
496
|
+
critical: isCritical,
|
|
497
|
+
stackTrace: new Error().stack,
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
return httpRes;
|
|
501
|
+
}
|
|
558
502
|
const cookieValue = encodeURIComponent(value);
|
|
559
503
|
let cookieString = `${name}=${cookieValue}`;
|
|
560
504
|
if (options.maxAge)
|
|
@@ -594,8 +538,8 @@ class MoroHttpServer {
|
|
|
594
538
|
if (httpRes.headersSent)
|
|
595
539
|
return;
|
|
596
540
|
try {
|
|
597
|
-
const fs = await
|
|
598
|
-
const path = await
|
|
541
|
+
const fs = await import('fs/promises');
|
|
542
|
+
const path = await import('path');
|
|
599
543
|
const extension = path.extname(filePath);
|
|
600
544
|
const mime = await this.getMimeType(extension);
|
|
601
545
|
const stats = await fs.stat(filePath);
|
|
@@ -615,6 +559,52 @@ class MoroHttpServer {
|
|
|
615
559
|
httpRes.status(404).json({ success: false, error: 'File not found' });
|
|
616
560
|
}
|
|
617
561
|
};
|
|
562
|
+
// Header management utilities
|
|
563
|
+
httpRes.hasHeader = (name) => {
|
|
564
|
+
return httpRes.getHeader(name) !== undefined;
|
|
565
|
+
};
|
|
566
|
+
// Note: removeHeader is inherited from ServerResponse, we don't override it
|
|
567
|
+
httpRes.setBulkHeaders = (headers) => {
|
|
568
|
+
if (httpRes.headersSent) {
|
|
569
|
+
this.logger.warn('Cannot set headers - headers already sent', 'HeaderWarning', {
|
|
570
|
+
attemptedHeaders: Object.keys(headers),
|
|
571
|
+
});
|
|
572
|
+
return httpRes;
|
|
573
|
+
}
|
|
574
|
+
Object.entries(headers).forEach(([key, value]) => {
|
|
575
|
+
httpRes.setHeader(key, value);
|
|
576
|
+
});
|
|
577
|
+
return httpRes;
|
|
578
|
+
};
|
|
579
|
+
httpRes.appendHeader = (name, value) => {
|
|
580
|
+
if (httpRes.headersSent) {
|
|
581
|
+
this.logger.warn(`Cannot append to header '${name}' - headers already sent`, 'HeaderWarning');
|
|
582
|
+
return httpRes;
|
|
583
|
+
}
|
|
584
|
+
const existing = httpRes.getHeader(name);
|
|
585
|
+
if (existing) {
|
|
586
|
+
const values = Array.isArray(existing) ? existing : [existing.toString()];
|
|
587
|
+
const newValues = Array.isArray(value) ? value : [value];
|
|
588
|
+
httpRes.setHeader(name, [...values, ...newValues]);
|
|
589
|
+
}
|
|
590
|
+
else {
|
|
591
|
+
httpRes.setHeader(name, value);
|
|
592
|
+
}
|
|
593
|
+
return httpRes;
|
|
594
|
+
};
|
|
595
|
+
// Response state utilities
|
|
596
|
+
httpRes.canSetHeaders = () => {
|
|
597
|
+
return !httpRes.headersSent;
|
|
598
|
+
};
|
|
599
|
+
httpRes.getResponseState = () => {
|
|
600
|
+
return {
|
|
601
|
+
headersSent: httpRes.headersSent,
|
|
602
|
+
statusCode: httpRes.statusCode,
|
|
603
|
+
headers: httpRes.getHeaders ? httpRes.getHeaders() : {},
|
|
604
|
+
finished: httpRes.finished || false,
|
|
605
|
+
writable: httpRes.writable,
|
|
606
|
+
};
|
|
607
|
+
};
|
|
618
608
|
return httpRes;
|
|
619
609
|
}
|
|
620
610
|
async getMimeType(ext) {
|
|
@@ -733,12 +723,18 @@ class MoroHttpServer {
|
|
|
733
723
|
}
|
|
734
724
|
return result;
|
|
735
725
|
}
|
|
726
|
+
// Legacy method for backward compatibility
|
|
736
727
|
parseQueryString(queryString) {
|
|
737
|
-
|
|
728
|
+
return this.parseQueryStringPooled(queryString);
|
|
729
|
+
}
|
|
730
|
+
// Optimized query string parser with object pooling
|
|
731
|
+
parseQueryStringPooled(queryString) {
|
|
738
732
|
if (!queryString)
|
|
739
|
-
return
|
|
733
|
+
return {};
|
|
734
|
+
const result = this.poolManager.acquireQuery();
|
|
740
735
|
const pairs = queryString.split('&');
|
|
741
|
-
for (
|
|
736
|
+
for (let i = 0; i < pairs.length; i++) {
|
|
737
|
+
const pair = pairs[i];
|
|
742
738
|
const equalIndex = pair.indexOf('=');
|
|
743
739
|
if (equalIndex === -1) {
|
|
744
740
|
result[decodeURIComponent(pair)] = '';
|
|
@@ -757,7 +753,7 @@ class MoroHttpServer {
|
|
|
757
753
|
dynamicRoutes = [];
|
|
758
754
|
routesBySegmentCount = new Map();
|
|
759
755
|
pathNormalizationCache = new Map();
|
|
760
|
-
//
|
|
756
|
+
// CPU cache-friendly optimizations
|
|
761
757
|
routeHitCount = new Map(); // Track route popularity for cache optimization
|
|
762
758
|
static HOT_ROUTE_THRESHOLD = 100; // Routes accessed 100+ times get hot path treatment
|
|
763
759
|
findRoute(method, path) {
|
|
@@ -802,33 +798,43 @@ class MoroHttpServer {
|
|
|
802
798
|
}
|
|
803
799
|
return route;
|
|
804
800
|
}
|
|
801
|
+
// Optimized middleware execution with reduced Promise allocation
|
|
805
802
|
async executeMiddleware(middleware, req, res) {
|
|
806
|
-
for (
|
|
803
|
+
for (let i = 0; i < middleware.length; i++) {
|
|
807
804
|
// Short-circuit if response already sent
|
|
808
805
|
if (res.headersSent)
|
|
809
806
|
return;
|
|
807
|
+
const mw = middleware[i];
|
|
810
808
|
await new Promise((resolve, reject) => {
|
|
811
|
-
let
|
|
809
|
+
let resolved = false;
|
|
810
|
+
// Reuse next function to reduce allocations
|
|
812
811
|
const next = () => {
|
|
813
|
-
if (
|
|
812
|
+
if (resolved)
|
|
814
813
|
return;
|
|
815
|
-
|
|
814
|
+
resolved = true;
|
|
816
815
|
resolve();
|
|
817
816
|
};
|
|
818
817
|
try {
|
|
819
818
|
const result = mw(req, res, next);
|
|
820
819
|
// Handle async middleware
|
|
821
|
-
if (result
|
|
820
|
+
if (result && typeof result.then === 'function') {
|
|
822
821
|
result
|
|
823
822
|
.then(() => {
|
|
824
|
-
if (!
|
|
823
|
+
if (!resolved)
|
|
825
824
|
next();
|
|
826
825
|
})
|
|
827
826
|
.catch(reject);
|
|
828
827
|
}
|
|
828
|
+
else if (!resolved) {
|
|
829
|
+
// Sync middleware that didn't call next
|
|
830
|
+
next();
|
|
831
|
+
}
|
|
829
832
|
}
|
|
830
833
|
catch (error) {
|
|
831
|
-
|
|
834
|
+
if (!resolved) {
|
|
835
|
+
resolved = true;
|
|
836
|
+
reject(error);
|
|
837
|
+
}
|
|
832
838
|
}
|
|
833
839
|
});
|
|
834
840
|
}
|
|
@@ -858,10 +864,19 @@ class MoroHttpServer {
|
|
|
858
864
|
getServer() {
|
|
859
865
|
return this.server;
|
|
860
866
|
}
|
|
867
|
+
// Performance statistics
|
|
868
|
+
getPerformanceStats() {
|
|
869
|
+
const poolStats = this.poolManager.getStats();
|
|
870
|
+
return {
|
|
871
|
+
paramObjectPoolSize: poolStats.paramPool.poolSize,
|
|
872
|
+
queryObjectPoolSize: poolStats.queryPool.poolSize,
|
|
873
|
+
headerObjectPoolSize: poolStats.headerPool.poolSize,
|
|
874
|
+
poolManager: poolStats,
|
|
875
|
+
};
|
|
876
|
+
}
|
|
861
877
|
}
|
|
862
|
-
exports.MoroHttpServer = MoroHttpServer;
|
|
863
878
|
// Built-in middleware
|
|
864
|
-
|
|
879
|
+
export const middleware = {
|
|
865
880
|
cors: (options = {}) => {
|
|
866
881
|
return (req, res, next) => {
|
|
867
882
|
res.setHeader('Access-Control-Allow-Origin', options.origin || '*');
|
|
@@ -889,7 +904,6 @@ exports.middleware = {
|
|
|
889
904
|
};
|
|
890
905
|
},
|
|
891
906
|
compression: (options = {}) => {
|
|
892
|
-
const zlib = require('zlib');
|
|
893
907
|
const threshold = options.threshold || 1024;
|
|
894
908
|
const level = options.level || 6;
|
|
895
909
|
return (req, res, next) => {
|
|
@@ -904,24 +918,26 @@ exports.middleware = {
|
|
|
904
918
|
return isJson ? originalJson.call(res, data) : originalSend.call(res, data);
|
|
905
919
|
}
|
|
906
920
|
if (acceptEncoding.includes('gzip')) {
|
|
907
|
-
res.setHeader('Content-Encoding', 'gzip');
|
|
908
921
|
zlib.gzip(buffer, { level }, (err, compressed) => {
|
|
909
922
|
if (err) {
|
|
910
923
|
return isJson ? originalJson.call(res, data) : originalSend.call(res, data);
|
|
911
924
|
}
|
|
912
|
-
res.
|
|
913
|
-
|
|
925
|
+
if (!res.headersSent) {
|
|
926
|
+
res.setHeader('Content-Encoding', 'gzip');
|
|
927
|
+
res.setHeader('Content-Length', compressed.length);
|
|
928
|
+
}
|
|
914
929
|
res.end(compressed);
|
|
915
930
|
});
|
|
916
931
|
}
|
|
917
932
|
else if (acceptEncoding.includes('deflate')) {
|
|
918
|
-
res.setHeader('Content-Encoding', 'deflate');
|
|
919
933
|
zlib.deflate(buffer, { level }, (err, compressed) => {
|
|
920
934
|
if (err) {
|
|
921
935
|
return isJson ? originalJson.call(res, data) : originalSend.call(res, data);
|
|
922
936
|
}
|
|
923
|
-
res.
|
|
924
|
-
|
|
937
|
+
if (!res.headersSent) {
|
|
938
|
+
res.setHeader('Content-Encoding', 'deflate');
|
|
939
|
+
res.setHeader('Content-Length', compressed.length);
|
|
940
|
+
}
|
|
925
941
|
res.end(compressed);
|
|
926
942
|
});
|
|
927
943
|
}
|
|
@@ -976,9 +992,9 @@ exports.middleware = {
|
|
|
976
992
|
return;
|
|
977
993
|
}
|
|
978
994
|
try {
|
|
979
|
-
const fs = await
|
|
980
|
-
const path = await
|
|
981
|
-
const crypto = await
|
|
995
|
+
const fs = await import('fs/promises');
|
|
996
|
+
const path = await import('path');
|
|
997
|
+
const crypto = await import('crypto');
|
|
982
998
|
let filePath = path.join(options.root, req.path);
|
|
983
999
|
// Security: prevent directory traversal
|
|
984
1000
|
if (!filePath.startsWith(path.resolve(options.root))) {
|
|
@@ -1146,8 +1162,8 @@ exports.middleware = {
|
|
|
1146
1162
|
// Add render method to response
|
|
1147
1163
|
res.render = async (template, data = {}) => {
|
|
1148
1164
|
try {
|
|
1149
|
-
const fs = await
|
|
1150
|
-
const path = await
|
|
1165
|
+
const fs = await import('fs/promises');
|
|
1166
|
+
const path = await import('path');
|
|
1151
1167
|
const templatePath = path.join(options.views, `${template}.html`);
|
|
1152
1168
|
let templateContent;
|
|
1153
1169
|
// Check cache first
|
|
@@ -1265,13 +1281,15 @@ exports.middleware = {
|
|
|
1265
1281
|
// Only handle SSE requests
|
|
1266
1282
|
if (req.headers.accept?.includes('text/event-stream')) {
|
|
1267
1283
|
// Set SSE headers
|
|
1268
|
-
res.
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1284
|
+
if (!res.headersSent) {
|
|
1285
|
+
res.writeHead(200, {
|
|
1286
|
+
'Content-Type': 'text/event-stream',
|
|
1287
|
+
'Cache-Control': 'no-cache',
|
|
1288
|
+
Connection: 'keep-alive',
|
|
1289
|
+
'Access-Control-Allow-Origin': options.cors ? '*' : undefined,
|
|
1290
|
+
'Access-Control-Allow-Headers': options.cors ? 'Cache-Control' : undefined,
|
|
1291
|
+
});
|
|
1292
|
+
}
|
|
1275
1293
|
// Add SSE methods to response
|
|
1276
1294
|
res.sendEvent = (data, event, id) => {
|
|
1277
1295
|
if (id)
|
|
@@ -1315,8 +1333,8 @@ exports.middleware = {
|
|
|
1315
1333
|
// Add range support to response
|
|
1316
1334
|
res.sendRange = async (filePath, stats) => {
|
|
1317
1335
|
try {
|
|
1318
|
-
const fs = await
|
|
1319
|
-
const path = await
|
|
1336
|
+
const fs = await import('fs/promises');
|
|
1337
|
+
const path = await import('path');
|
|
1320
1338
|
if (!stats) {
|
|
1321
1339
|
stats = await fs.stat(filePath);
|
|
1322
1340
|
}
|
|
@@ -1352,7 +1370,8 @@ exports.middleware = {
|
|
|
1352
1370
|
const { start, end } = ranges[0];
|
|
1353
1371
|
const chunkSize = end - start + 1;
|
|
1354
1372
|
if (start >= fileSize || end >= fileSize) {
|
|
1355
|
-
res.status(416)
|
|
1373
|
+
res.status(416);
|
|
1374
|
+
res.setHeader('Content-Range', `bytes */${fileSize}`);
|
|
1356
1375
|
res.json({ success: false, error: 'Range not satisfiable' });
|
|
1357
1376
|
return;
|
|
1358
1377
|
}
|
|
@@ -1360,7 +1379,7 @@ exports.middleware = {
|
|
|
1360
1379
|
res.setHeader('Content-Range', `bytes ${start}-${end}/${fileSize}`);
|
|
1361
1380
|
res.setHeader('Content-Length', chunkSize);
|
|
1362
1381
|
// Stream the range
|
|
1363
|
-
const stream =
|
|
1382
|
+
const stream = createReadStream(filePath, {
|
|
1364
1383
|
start,
|
|
1365
1384
|
end,
|
|
1366
1385
|
});
|
|
@@ -1377,12 +1396,12 @@ exports.middleware = {
|
|
|
1377
1396
|
const chunkSize = end - start + 1;
|
|
1378
1397
|
res.write(`\r\n--${boundary}\r\n`);
|
|
1379
1398
|
res.write(`Content-Range: bytes ${start}-${end}/${fileSize}\r\n\r\n`);
|
|
1380
|
-
const stream =
|
|
1399
|
+
const stream = createReadStream(filePath, {
|
|
1381
1400
|
start,
|
|
1382
1401
|
end,
|
|
1383
1402
|
});
|
|
1384
1403
|
await new Promise(resolve => {
|
|
1385
|
-
stream.on('end', resolve);
|
|
1404
|
+
stream.on('end', () => resolve());
|
|
1386
1405
|
stream.pipe(res, { end: false });
|
|
1387
1406
|
});
|
|
1388
1407
|
}
|
|
@@ -1405,7 +1424,6 @@ exports.middleware = {
|
|
|
1405
1424
|
const headerName = options.headerName || 'x-csrf-token';
|
|
1406
1425
|
const ignoreMethods = options.ignoreMethods || ['GET', 'HEAD', 'OPTIONS'];
|
|
1407
1426
|
const generateToken = () => {
|
|
1408
|
-
const crypto = require('crypto');
|
|
1409
1427
|
return crypto.randomBytes(tokenLength).toString('hex');
|
|
1410
1428
|
};
|
|
1411
1429
|
const verifyToken = (token, sessionToken) => {
|
|
@@ -1462,7 +1480,6 @@ exports.middleware = {
|
|
|
1462
1480
|
// Generate nonce if requested
|
|
1463
1481
|
let nonce;
|
|
1464
1482
|
if (options.nonce) {
|
|
1465
|
-
const crypto = require('crypto');
|
|
1466
1483
|
nonce = crypto.randomBytes(16).toString('base64');
|
|
1467
1484
|
req.cspNonce = nonce;
|
|
1468
1485
|
}
|