@morojs/moro 1.8.0 → 1.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -38
- package/dist/core/auth/morojs-adapter.js +95 -45
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/config-manager.js.map +1 -1
- package/dist/core/config/config-sources.js +8 -49
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/config/config-validator.js +2 -3
- package/dist/core/config/config-validator.js.map +1 -1
- package/dist/core/config/file-loader.js.map +1 -1
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/schema.js +4 -1
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/utils.js.map +1 -1
- package/dist/core/database/adapters/drizzle.js +2 -2
- package/dist/core/database/adapters/drizzle.js.map +1 -1
- package/dist/core/database/adapters/index.js.map +1 -1
- package/dist/core/database/adapters/mongodb.d.ts +1 -0
- package/dist/core/database/adapters/mongodb.js +16 -0
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.d.ts +1 -0
- package/dist/core/database/adapters/mysql.js +13 -2
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.js +2 -2
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.js.map +1 -1
- package/dist/core/database/adapters/sql-safety.js +5 -4
- package/dist/core/database/adapters/sql-safety.js.map +1 -1
- package/dist/core/database/adapters/sqlite.js.map +1 -1
- package/dist/core/database/index.js.map +1 -1
- package/dist/core/docs/index.js +11 -7
- package/dist/core/docs/index.js.map +1 -1
- package/dist/core/docs/openapi-generator.js +8 -6
- package/dist/core/docs/openapi-generator.js.map +1 -1
- package/dist/core/docs/schema-to-openapi.js +3 -3
- package/dist/core/docs/schema-to-openapi.js.map +1 -1
- package/dist/core/docs/simple-docs.js.map +1 -1
- package/dist/core/docs/swagger-ui.js.map +1 -1
- package/dist/core/docs/zod-to-openapi.js +2 -2
- package/dist/core/docs/zod-to-openapi.js.map +1 -1
- package/dist/core/events/event-bus.js +14 -5
- package/dist/core/events/event-bus.js.map +1 -1
- package/dist/core/events/index.js.map +1 -1
- package/dist/core/framework.d.ts +2 -2
- package/dist/core/framework.js +21 -14
- package/dist/core/framework.js.map +1 -1
- package/dist/core/graphql/adapter.js.map +1 -1
- package/dist/core/graphql/adapters/graphql-js-adapter.js.map +1 -1
- package/dist/core/graphql/core.js.map +1 -1
- package/dist/core/graphql/index.js.map +1 -1
- package/dist/core/graphql/loader.js.map +1 -1
- package/dist/core/graphql/types.js.map +1 -1
- package/dist/core/grpc/adapters/grpc-js-adapter.js +4 -0
- package/dist/core/grpc/adapters/grpc-js-adapter.js.map +1 -1
- package/dist/core/grpc/adapters/index.js.map +1 -1
- package/dist/core/grpc/grpc-adapter.js.map +1 -1
- package/dist/core/grpc/grpc-manager.js.map +1 -1
- package/dist/core/grpc/index.js.map +1 -1
- package/dist/core/grpc/middleware/auth.js +1 -1
- package/dist/core/grpc/middleware/auth.js.map +1 -1
- package/dist/core/grpc/middleware/logging.js.map +1 -1
- package/dist/core/grpc/middleware/validation.js +1 -1
- package/dist/core/grpc/middleware/validation.js.map +1 -1
- package/dist/core/grpc/types.d.ts +7 -7
- package/dist/core/grpc/types.js.map +1 -1
- package/dist/core/http/http-server.d.ts +0 -13
- package/dist/core/http/http-server.js +34 -141
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/http2-server.js +27 -5
- package/dist/core/http/http2-server.js.map +1 -1
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/moro-engine-server.d.ts +2 -2
- package/dist/core/http/moro-engine-server.js +48 -22
- package/dist/core/http/moro-engine-server.js.map +1 -1
- package/dist/core/http/utils/compression.js +3 -3
- package/dist/core/http/utils/compression.js.map +1 -1
- package/dist/core/http/utils/lazy-event-emitter.js.map +1 -1
- package/dist/core/http/utils/multipart-parser.js +7 -3
- package/dist/core/http/utils/multipart-parser.js.map +1 -1
- package/dist/core/http/utils/query-parser.js.map +1 -1
- package/dist/core/http/utils/size.js +2 -2
- package/dist/core/http/utils/size.js.map +1 -1
- package/dist/core/http/utils/ssl-config.d.ts +10 -10
- package/dist/core/http/utils/ssl-config.js.map +1 -1
- package/dist/core/http/utils/uws-worker-clustering.js +37 -30
- package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
- package/dist/core/http/uws-http-server.d.ts +1 -0
- package/dist/core/http/uws-http-server.js +80 -22
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/jobs/cron-parser.js +7 -5
- package/dist/core/jobs/cron-parser.js.map +1 -1
- package/dist/core/jobs/index.js.map +1 -1
- package/dist/core/jobs/job-executor.d.ts +1 -1
- package/dist/core/jobs/job-executor.js.map +1 -1
- package/dist/core/jobs/job-scheduler.d.ts +3 -3
- package/dist/core/jobs/job-scheduler.js.map +1 -1
- package/dist/core/jobs/job-state-manager.d.ts +3 -3
- package/dist/core/jobs/job-state-manager.js +25 -4
- package/dist/core/jobs/job-state-manager.js.map +1 -1
- package/dist/core/jobs/leader-election.d.ts +15 -0
- package/dist/core/jobs/leader-election.js +158 -69
- package/dist/core/jobs/leader-election.js.map +1 -1
- package/dist/core/jobs/types.d.ts +4 -4
- package/dist/core/jobs/types.js.map +1 -1
- package/dist/core/jobs/utils.d.ts +1 -1
- package/dist/core/jobs/utils.js +7 -3
- package/dist/core/jobs/utils.js.map +1 -1
- package/dist/core/logger/filters.js +3 -2
- package/dist/core/logger/filters.js.map +1 -1
- package/dist/core/logger/index.js.map +1 -1
- package/dist/core/logger/logger.js +56 -25
- package/dist/core/logger/logger.js.map +1 -1
- package/dist/core/logger/outputs.js.map +1 -1
- package/dist/core/mail/adapters/console-adapter.js.map +1 -1
- package/dist/core/mail/adapters/index.js.map +1 -1
- package/dist/core/mail/adapters/nodemailer-adapter.js.map +1 -1
- package/dist/core/mail/adapters/resend-adapter.js.map +1 -1
- package/dist/core/mail/adapters/sendgrid-adapter.js.map +1 -1
- package/dist/core/mail/adapters/ses-adapter.js.map +1 -1
- package/dist/core/mail/index.js.map +1 -1
- package/dist/core/mail/mail-adapter.js.map +1 -1
- package/dist/core/mail/mail-manager.d.ts +10 -0
- package/dist/core/mail/mail-manager.js +21 -5
- package/dist/core/mail/mail-manager.js.map +1 -1
- package/dist/core/mail/template-engine.js.map +1 -1
- package/dist/core/mail/types.js.map +1 -1
- package/dist/core/middleware/built-in/auth/core.js +3 -3
- package/dist/core/middleware/built-in/auth/core.js.map +1 -1
- package/dist/core/middleware/built-in/auth/helpers.js +4 -4
- package/dist/core/middleware/built-in/auth/helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth/hook.js.map +1 -1
- package/dist/core/middleware/built-in/auth/index.js.map +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.d.ts +4 -4
- package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/auth/providers.js.map +1 -1
- package/dist/core/middleware/built-in/body-parsers/index.js.map +1 -1
- package/dist/core/middleware/built-in/body-size/core.js +2 -2
- package/dist/core/middleware/built-in/body-size/core.js.map +1 -1
- package/dist/core/middleware/built-in/body-size/hook.js.map +1 -1
- package/dist/core/middleware/built-in/body-size/index.js.map +1 -1
- package/dist/core/middleware/built-in/body-size/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js +3 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -1
- package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -1
- package/dist/core/middleware/built-in/cache/core.js.map +1 -1
- package/dist/core/middleware/built-in/cache/hook.js +3 -3
- package/dist/core/middleware/built-in/cache/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cache/index.js.map +1 -1
- package/dist/core/middleware/built-in/cache/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/core.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/index.js.map +1 -1
- package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/compression/core.js.map +1 -1
- package/dist/core/middleware/built-in/compression/hook.js.map +1 -1
- package/dist/core/middleware/built-in/compression/index.js.map +1 -1
- package/dist/core/middleware/built-in/compression/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/core.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/index.js.map +1 -1
- package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/cors/core.js.map +1 -1
- package/dist/core/middleware/built-in/cors/hook.js.map +1 -1
- package/dist/core/middleware/built-in/cors/index.js.map +1 -1
- package/dist/core/middleware/built-in/cors/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/csp/core.js.map +1 -1
- package/dist/core/middleware/built-in/csp/hook.js.map +1 -1
- package/dist/core/middleware/built-in/csp/index.js.map +1 -1
- package/dist/core/middleware/built-in/csp/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/core.js +1 -1
- package/dist/core/middleware/built-in/csrf/core.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/hook.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/index.js.map +1 -1
- package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -1
- package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/core.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/helpers.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/hook.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/index.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/graphql/subscriptions.js.map +1 -1
- package/dist/core/middleware/built-in/helmet/core.js.map +1 -1
- package/dist/core/middleware/built-in/helmet/hook.js.map +1 -1
- package/dist/core/middleware/built-in/helmet/index.js.map +1 -1
- package/dist/core/middleware/built-in/helmet/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/http2/core.js.map +1 -1
- package/dist/core/middleware/built-in/http2/hook.js.map +1 -1
- package/dist/core/middleware/built-in/http2/index.js.map +1 -1
- package/dist/core/middleware/built-in/http2/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/range/core.js +4 -1
- package/dist/core/middleware/built-in/range/core.js.map +1 -1
- package/dist/core/middleware/built-in/range/hook.js.map +1 -1
- package/dist/core/middleware/built-in/range/index.js.map +1 -1
- package/dist/core/middleware/built-in/range/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/request-logger/index.js.map +1 -1
- package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/session/core.js +4 -4
- package/dist/core/middleware/built-in/session/core.js.map +1 -1
- package/dist/core/middleware/built-in/session/hook.js.map +1 -1
- package/dist/core/middleware/built-in/session/index.js.map +1 -1
- package/dist/core/middleware/built-in/session/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/sse/core.js.map +1 -1
- package/dist/core/middleware/built-in/sse/hook.js.map +1 -1
- package/dist/core/middleware/built-in/sse/index.js.map +1 -1
- package/dist/core/middleware/built-in/sse/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/static/core.js.map +1 -1
- package/dist/core/middleware/built-in/static/hook.js.map +1 -1
- package/dist/core/middleware/built-in/static/index.js.map +1 -1
- package/dist/core/middleware/built-in/static/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/template/core.js +1 -1
- package/dist/core/middleware/built-in/template/core.js.map +1 -1
- package/dist/core/middleware/built-in/template/hook.js.map +1 -1
- package/dist/core/middleware/built-in/template/index.js.map +1 -1
- package/dist/core/middleware/built-in/template/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/upload/core.js.map +1 -1
- package/dist/core/middleware/built-in/upload/hook.js.map +1 -1
- package/dist/core/middleware/built-in/upload/index.js.map +1 -1
- package/dist/core/middleware/built-in/upload/middleware.js.map +1 -1
- package/dist/core/middleware/built-in/validation/core.js.map +1 -1
- package/dist/core/middleware/built-in/validation/hook.js.map +1 -1
- package/dist/core/middleware/built-in/validation/index.js.map +1 -1
- package/dist/core/middleware/built-in/validation/middleware.js.map +1 -1
- package/dist/core/middleware/index.js +2 -2
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/modules/auto-discovery.js +11 -7
- package/dist/core/modules/auto-discovery.js.map +1 -1
- package/dist/core/modules/index.js.map +1 -1
- package/dist/core/modules/modules.js +18 -13
- package/dist/core/modules/modules.js.map +1 -1
- package/dist/core/networking/adapters/engine-adapter.js +30 -2
- package/dist/core/networking/adapters/engine-adapter.js.map +1 -1
- package/dist/core/networking/adapters/index.js.map +1 -1
- package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -0
- package/dist/core/networking/adapters/socketio-adapter.js +12 -1
- package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
- package/dist/core/networking/adapters/uws-adapter.js +1 -1
- package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
- package/dist/core/networking/adapters/ws-adapter.d.ts +15 -0
- package/dist/core/networking/adapters/ws-adapter.js +120 -6
- package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
- package/dist/core/networking/index.js.map +1 -1
- package/dist/core/networking/service-discovery.js +7 -5
- package/dist/core/networking/service-discovery.js.map +1 -1
- package/dist/core/networking/websocket-adapter.d.ts +22 -3
- package/dist/core/networking/websocket-adapter.js.map +1 -1
- package/dist/core/networking/websocket-manager.js +70 -67
- package/dist/core/networking/websocket-manager.js.map +1 -1
- package/dist/core/pooling/object-pool-manager.js +6 -0
- package/dist/core/pooling/object-pool-manager.js.map +1 -1
- package/dist/core/queue/adapters/bull-adapter.js.map +1 -1
- package/dist/core/queue/adapters/index.js.map +1 -1
- package/dist/core/queue/adapters/kafka-adapter.js +2 -2
- package/dist/core/queue/adapters/kafka-adapter.js.map +1 -1
- package/dist/core/queue/adapters/memory-adapter.js +6 -6
- package/dist/core/queue/adapters/memory-adapter.js.map +1 -1
- package/dist/core/queue/adapters/rabbitmq-adapter.d.ts +50 -0
- package/dist/core/queue/adapters/rabbitmq-adapter.js +176 -20
- package/dist/core/queue/adapters/rabbitmq-adapter.js.map +1 -1
- package/dist/core/queue/adapters/sqs-adapter.d.ts +12 -2
- package/dist/core/queue/adapters/sqs-adapter.js +75 -24
- package/dist/core/queue/adapters/sqs-adapter.js.map +1 -1
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/queue/middleware/index.js.map +1 -1
- package/dist/core/queue/middleware/monitoring.d.ts +1 -1
- package/dist/core/queue/middleware/monitoring.js.map +1 -1
- package/dist/core/queue/middleware/priority.js +2 -1
- package/dist/core/queue/middleware/priority.js.map +1 -1
- package/dist/core/queue/middleware/rate-limit.js.map +1 -1
- package/dist/core/queue/queue-adapter.js.map +1 -1
- package/dist/core/queue/queue-manager.js.map +1 -1
- package/dist/core/queue/types.d.ts +8 -8
- package/dist/core/queue/types.js.map +1 -1
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/create-router.js.map +1 -1
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/routing/path-matcher.js.map +1 -1
- package/dist/core/routing/radix-tree.js.map +1 -1
- package/dist/core/routing/router.js.map +1 -1
- package/dist/core/routing/unified-router.js +12 -4
- package/dist/core/routing/unified-router.js.map +1 -1
- package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
- package/dist/core/runtime/base-adapter.js +2 -2
- package/dist/core/runtime/base-adapter.js.map +1 -1
- package/dist/core/runtime/cloudflare-workers-adapter.js +2 -0
- package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
- package/dist/core/runtime/index.js.map +1 -1
- package/dist/core/runtime/node-adapter.js +19 -17
- package/dist/core/runtime/node-adapter.js.map +1 -1
- package/dist/core/runtime/vercel-edge-adapter.js +2 -0
- package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
- package/dist/core/utilities/circuit-breaker.d.ts +1 -0
- package/dist/core/utilities/circuit-breaker.js +25 -2
- package/dist/core/utilities/circuit-breaker.js.map +1 -1
- package/dist/core/utilities/container.js +9 -9
- package/dist/core/utilities/container.js.map +1 -1
- package/dist/core/utilities/hooks.js +28 -6
- package/dist/core/utilities/hooks.js.map +1 -1
- package/dist/core/utilities/index.js.map +1 -1
- package/dist/core/utilities/module-path.js.map +1 -1
- package/dist/core/utilities/package-utils.js +1 -1
- package/dist/core/utilities/package-utils.js.map +1 -1
- package/dist/core/utilities/response-helpers.js +1 -1
- package/dist/core/utilities/response-helpers.js.map +1 -1
- package/dist/core/validation/adapters.js.map +1 -1
- package/dist/core/validation/error-handler.js.map +1 -1
- package/dist/core/validation/index.js.map +1 -1
- package/dist/core/validation/schema-interface.js.map +1 -1
- package/dist/core/workers/facade.js.map +1 -1
- package/dist/core/workers/index.js.map +1 -1
- package/dist/core/workers/worker-entry.d.ts +1 -0
- package/dist/core/workers/worker-entry.js +12 -0
- package/dist/core/workers/worker-entry.js.map +1 -0
- package/dist/core/workers/worker-manager.d.ts +23 -2
- package/dist/core/workers/worker-manager.js +117 -17
- package/dist/core/workers/worker-manager.js.map +1 -1
- package/dist/core/workers/worker.js +8 -6
- package/dist/core/workers/worker.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +18 -1
- package/dist/moro.js +168 -50
- package/dist/moro.js.map +1 -1
- package/dist/types/auth.d.ts +4 -4
- package/dist/types/auth.js.map +1 -1
- package/dist/types/cache.js.map +1 -1
- package/dist/types/cdn.js.map +1 -1
- package/dist/types/config.d.ts +10 -10
- package/dist/types/config.js.map +1 -1
- package/dist/types/core.js.map +1 -1
- package/dist/types/database.js.map +1 -1
- package/dist/types/discovery.js.map +1 -1
- package/dist/types/events.js.map +1 -1
- package/dist/types/hooks.js.map +1 -1
- package/dist/types/http.js.map +1 -1
- package/dist/types/logger.js.map +1 -1
- package/dist/types/module.js.map +1 -1
- package/dist/types/runtime.js.map +1 -1
- package/dist/types/session.js.map +1 -1
- package/package.json +29 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http2-server.js","sourceRoot":"","sources":["../../../src/core/http/http2-server.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EACL,kBAAkB,IAAI,uBAAuB,EAC7C,YAAY,IAAI,iBAAiB,GAMlC,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAQ3D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EACL,cAAc,IAAI,oBAAoB,GAEvC,MAAM,6BAA6B,CAAC;AAGrC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAwBxC,MAAM,OAAO,eAAe;IAClB,MAAM,CAAkC;IACxC,MAAM,GAAiB,EAAE,CAAC;IAC1B,gBAAgB,GAAiB,EAAE,CAAC;IACpC,kBAAkB,GAAG,IAAI,CAAC;IAC1B,oBAAoB,GAAG,IAAI,CAAC;IAC5B,sBAAsB,GAAG,IAAI,CAAC;IAC9B,eAAe,CAAmB;IAClC,OAAO,CAAqB;IAC5B,MAAM,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC9C,WAAW,CAAM;IACjB,cAAc,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAU;IAE1B,kEAAkE;IAC1D,WAAW,GAAW,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,2DAA2D;IACnG,aAAa,GAAW,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,iCAAiC;IAEpF,iCAAiC;IACzB,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;IAEtD,8CAA8C;IACtC,MAAM,CAAU,WAAW,GAAG,MAAM,CAAC;IACrC,MAAM,CAAU,UAAU,GAAG,KAAK,CAAC;IACnC,MAAM,CAAU,YAAY,GAAG,OAAO,CAAC;IACvC,MAAM,CAAU,UAAU,GAAG,KAAK,CAAC;IACnC,MAAM,CAAU,aAAa,GAAG,QAAQ,CAAC;IACzC,MAAM,CAAU,WAAW,GAAG,MAAM,CAAC;IACrC,MAAM,CAAU,cAAc,GAAG,SAAS,CAAC;IAEnD,kCAAkC;IAC1B,MAAM,CAAU,kBAAkB,GAAG;QAC3C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC;QAC9D,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC;QACrE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC;QAC/D,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC;QAC/E,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC;QAC/E,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC;KAC5E,CAAC;IAEF,gCAAgC;IACxB,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;IAClD,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,aAAa,GAAiB,EAAE,CAAC;IACjC,oBAAoB,GAAG,IAAI,GAAG,EAAwB,CAAC;IACvD,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3D,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAEhD,0CAA0C;QAC1C,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC7C,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,SAAS;YAAE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QAC/E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,MAAM,aAAa,GAAQ;YACzB,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,KAAK;YACxC,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC;SAChF,CAAC;QAEF,4BAA4B;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;YAChC,aAAa,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAClC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;gBACf,aAAa,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;YAChC,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,aAAa,CAAC,QAAQ,GAAG;gBACvB,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe;gBACjD,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,KAAK;gBACjD,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,IAAI,KAAK;gBAC9D,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,KAAK;gBACpD,oBAAoB,EAAE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,IAAI,GAAG;gBAClE,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBACrD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAC7C,qBAAqB,EAAE,OAAO,CAAC,QAAQ,CAAC,qBAAqB;aAC9D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,QAAQ,GAAG;gBACvB,UAAU,EAAE,IAAI;gBAChB,iBAAiB,EAAE,KAAK;gBACxB,YAAY,EAAE,KAAK;gBACnB,oBAAoB,EAAE,GAAG;aAC1B,CAAC;QACJ,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,YAAY,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,YAAY,CAAC,CAAC;QAC1D,CAAC;QAED,sEAAsE;QACtE,iEAAiE;QACjE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,MAAM,EAAE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,MAAc,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QACtE,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvD,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;YAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;YAEvD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2CAA2C;IAC3C,oBAAoB,CAClB,SAAwF,EAAE;QAE1F,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;YACrD,IAAI,MAAM,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC/C,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;QACvC,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,kBAAkB,CAAC,OAAgB;QACjC,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC;IACxC,CAAC;IAED,wBAAwB;IACxB,GAAG,CAAC,UAAsB;QACxB,6EAA6E;QAC7E,0EAA0E;QAC1E,IACE,UAAU;YACV,OAAO,UAAU,KAAK,QAAQ;YAC7B,UAAkB,CAAC,OAAO;YAC1B,UAAkB,CAAC,QAAQ,EAC5B,CAAC;YACD,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACjB,yCAA0C,UAAkB,CAAC,QAAQ,EAAE,IAAI,qCAAqC;gBAC9G,gEAAgE,EAClE,YAAY,CACb,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,oBAAoB;IACpB,cAAc,CAAC,WAAgB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,kBAAkB;IAClB,GAAG,CAAC,IAAY,EAAE,GAAG,QAAsC;QACzD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,GAAG,QAAsC;QAC1D,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,GAAG,QAAsC;QACzD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,GAAG,QAAsC;QAC5D,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,GAAG,QAAsC;QAC3D,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEO,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAE,QAAsC;QACnF,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAiB,CAAC;QAC9C,MAAM,UAAU,GAAG,QAAwB,CAAC;QAE5C,MAAM,KAAK,GAAG;YACZ,MAAM;YACN,IAAI;YACJ,OAAO;YACP,UAAU;YACV,OAAO;YACP,UAAU;SACX,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,qCAAqC;QACrC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAClD,CAAC;YACD,oEAAoE;YACpE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;YAC1E,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,MAAyB,EACzB,OAA4B;QAE5B,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE/D,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,GAAG,GAAI,OAAO,CAAC,OAAO,CAAY,IAAI,GAAG,CAAC;YAChD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEpC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;gBACnB,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC5C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YAED,gCAAgC;YAChC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,IACE,MAAM,KAAK,eAAe,CAAC,WAAW;gBACtC,MAAM,KAAK,eAAe,CAAC,UAAU;gBACrC,MAAM,KAAK,eAAe,CAAC,YAAY,EACvC,CAAC;gBACD,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;YAED,gBAAgB;YAChB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE;oBACxC,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;YACL,CAAC;YAED,4BAA4B;YAC5B,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACxE,CAAC;YAED,oDAAoD;YACpD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,6DAA6D;YAC7D,oEAAoE;YACpE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,IAAK,CAAC,CAAC;YAClF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;gBACzB,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;gBACrE,OAAO,CAAC,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACxF,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YAED,0BAA0B;YAC1B,oEAAoE;YACpE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;gBAClD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;gBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3C,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACnE,CAAC;YAED,kBAAkB;YAClB,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,aAAa,IAAI,OAAO,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC9D,MAAM,aAAa,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,aAAa,EAAE;gBACtD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACvB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,uBAAuB;oBAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;iBAC7B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,yBAAyB;YACzB,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7D,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,uBAAuB,CAC7B,MAAyB,EACzB,OAA4B;QAE5B,oCAAoC;QACpC,MAAM,SAAS,GAAG,CAAE,OAAO,CAAC,SAAS,CAAY,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAE1E,2CAA2C;QAC3C,IAAI,MAAc,CAAC;QACnB,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,MAAM;gBACT,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC;gBACrC,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC;gBACpC,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC;gBACtC,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC;gBACpC,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,GAAG,eAAe,CAAC,aAAa,CAAC;gBACvC,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC;gBACrC,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC;gBACxC,MAAM;YACR;gBACE,MAAM,GAAG,SAAS,CAAC;QACvB,CAAC;QAED,qEAAqE;QACrE,MAAM,eAAe,GAA2B,EAAE,CAAC;QACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,KAAgB,CAAC;YACrF,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;oBACpD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;oBAC/C,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;wBAClB,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAgB;YAC3B,MAAM;YACN,IAAI,EAAE,EAAE;YACR,GAAG,EAAG,OAAO,CAAC,OAAO,CAAY,IAAI,GAAG;YACxC,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,IAAI;YACV,OAAO;YACP,EAAE,EAAG,MAAM,CAAC,OAAO,EAAE,MAAc,EAAE,aAAa,IAAI,EAAE;YACxD,SAAS,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE;YAClF,WAAW,EAAE,KAAK;SACJ,CAAC;QAEjB,6CAA6C;QAC5C,OAAe,CAAC,YAAY,GAAG,MAAM,CAAC;QACtC,OAAe,CAAC,aAAa,GAAG,OAAO,CAAC;QAEzC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,wBAAwB,CAAC,MAAyB,EAAE,GAAgB;QAC1E,MAAM,OAAO,GAAQ;YACnB,UAAU,EAAE,GAAG;YACf,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,EAAyB;YACnC,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,mBAAmB,EAAE,IAAI,CAAC,kBAAkB;YAC5C,qBAAqB,EAAE,IAAI,CAAC,oBAAoB;SACjD,CAAC;QAEF,gBAAgB;QAChB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAChC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,aAAa;QACb,OAAO,CAAC,SAAS,GAAG,CAAC,IAAY,EAAE,KAAwB,EAAE,EAAE;YAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC;YAC7C,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,aAAa;QACb,OAAO,CAAC,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;YACnC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,gBAAgB;QAChB,OAAO,CAAC,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;YACtC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,aAAa;QACb,OAAO,CAAC,SAAS,GAAG,CAAC,IAAY,EAAW,EAAE;YAC5C,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,SAAS,CAAC;QAC5D,CAAC,CAAC;QAEF,cAAc;QACd,OAAO,CAAC,UAAU,GAAG,GAAG,EAAE;YACxB,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC;QAEF,gBAAgB;QAChB,OAAO,CAAC,IAAI,GAAG,KAAK,EAAE,IAAS,EAAE,EAAE;YACjC,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS;gBAAE,OAAO;YAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAEpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,iCAAiC,CAAC;YAErE,cAAc;YACd,IAAI,OAAO,CAAC,mBAAmB,IAAI,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBACtF,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAEtD,IAAI,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC;oBAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;oBAEvD,MAAM,CAAC,OAAO,CAAC;wBACb,SAAS,EAAE,OAAO,CAAC,UAAU;wBAC7B,GAAG,OAAO,CAAC,QAAQ;qBACpB,CAAC,CAAC;oBACH,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBACvB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC3B,OAAO;gBACT,CAAC;qBAAM,IAAI,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;oBAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;oBACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;oBAEvD,MAAM,CAAC,OAAO,CAAC;wBACb,SAAS,EAAE,OAAO,CAAC,UAAU;wBAC7B,GAAG,OAAO,CAAC,QAAQ;qBACpB,CAAC,CAAC;oBACH,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBACvB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC3B,OAAO;gBACT,CAAC;YACH,CAAC;YAED,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;YAExD,MAAM,CAAC,OAAO,CAAC;gBACb,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,GAAG,OAAO,CAAC,QAAQ;aACpB,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACxB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC;QAEF,gBAAgB;QAChB,OAAO,CAAC,IAAI,GAAG,CAAC,IAAqB,EAAE,EAAE;YACvC,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS;gBAAE,OAAO;YAEpD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACjB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,iCAAiC,CAAC;oBACvE,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,2BAA2B,CAAC;oBACjE,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,0BAA0B,CAAC;gBAChE,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACnE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YAEnD,MAAM,CAAC,OAAO,CAAC;gBACb,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,GAAG,OAAO,CAAC,QAAQ;aACpB,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC;QAEF,eAAe;QACf,OAAO,CAAC,GAAG,GAAG,CAAC,IAAU,EAAE,EAAE;YAC3B,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS;gBAAE,OAAO,OAAO,CAAC;YAE5D,MAAM,CAAC,OAAO,CAAC;gBACb,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,GAAG,OAAO,CAAC,QAAQ;aACpB,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACvB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;YAC3B,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,gCAAgC;QAChC,OAAO,CAAC,OAAO,GAAG,CAAU,IAAO,EAAE,OAAgB,EAAE,EAAE;YACvD,MAAM,QAAQ,GAAQ;gBACpB,OAAO,EAAE,IAAI;gBACb,IAAI;aACL,CAAC;YACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;YAC7B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,GAAG,CAAC,KAAa,EAAE,IAAa,EAAE,OAAgB,EAAE,EAAE;YACjE,MAAM,QAAQ,GAAQ;gBACpB,OAAO,EAAE,KAAK;gBACd,KAAK;aACN,CAAC;YACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;YAC7B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,4DAA4D;QAC5D,OAAO,CAAC,YAAY,GAAG,CAAC,UAAkB,yBAAyB,EAAE,EAAE;YACrE,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,cAAc;gBACpB,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,SAAS,GAAG,CAAC,UAAkB,0BAA0B,EAAE,EAAE;YACnE,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,WAAW;gBACjB,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,QAAQ,GAAG,CAAC,WAAmB,UAAU,EAAE,EAAE;YACnD,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,GAAG,QAAQ,YAAY;aACjC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,UAAU,GAAG,CAAC,UAAkB,iBAAiB,EAAE,EAAE;YAC3D,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,aAAa;gBACnB,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,QAAQ,GAAG,CAAC,OAAe,EAAE,EAAE;YACrC,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,UAAU;gBAChB,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,aAAa,GAAG,CAAC,UAAkB,uBAAuB,EAAE,EAAE;YACpE,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,uBAAuB;gBAC9B,IAAI,EAAE,gBAAgB;gBACtB,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,eAAe,GAAG,CACxB,MAAgE,EAChE,EAAE;YACF,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,kBAAkB;gBACxB,MAAM;aACP,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,WAAW,GAAG,CAAC,UAAmB,EAAE,EAAE;YAC5C,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,UAAU;oBACjB,CAAC,CAAC,kCAAkC,UAAU,WAAW;oBACzD,CAAC,CAAC,mBAAmB;gBACvB,UAAU;aACX,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,0BAA0B;QAC1B,OAAO,CAAC,OAAO,GAAG,CAAU,IAAO,EAAE,QAAiB,EAAE,EAAE;YACxD,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,IAAI;gBACb,IAAI;aACL,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE;YACvB,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC,CAAC;QAEF,OAAO,CAAC,SAAS,GAAG,CAClB,IAAS,EACT,UAA0D,EAC1D,EAAE;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,UAAU,EAAE;oBACV,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,UAAU;oBACV,OAAO,EAAE,UAAU,CAAC,IAAI,GAAG,UAAU;oBACrC,OAAO,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC;iBAC7B;aACF,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,kBAAkB;QAClB,OAAO,CAAC,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,UAAe,EAAE,EAAE,EAAE;YAClE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACzF,MAAM,OAAO,GAAG,WAAW,IAAI,2CAA2C,CAAC;gBAE3E,IAAI,UAAU,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;oBACzC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,qDAAqD,CAAC,CAAC;gBACnF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvE,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,YAAY,GAAG,GAAG,IAAI,IAAI,WAAW,EAAE,CAAC;YAE5C,IAAI,OAAO,CAAC,MAAM;gBAAE,YAAY,IAAI,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC;YAClE,IAAI,OAAO,CAAC,OAAO;gBAAE,YAAY,IAAI,aAAa,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAClF,IAAI,OAAO,CAAC,QAAQ;gBAAE,YAAY,IAAI,YAAY,CAAC;YACnD,IAAI,OAAO,CAAC,MAAM;gBAAE,YAAY,IAAI,UAAU,CAAC;YAC/C,IAAI,OAAO,CAAC,QAAQ;gBAAE,YAAY,IAAI,cAAc,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvE,IAAI,OAAO,CAAC,MAAM;gBAAE,YAAY,IAAI,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC;YACjE,IAAI,OAAO,CAAC,IAAI;gBAAE,YAAY,IAAI,UAAU,OAAO,CAAC,IAAI,EAAE,CAAC;YAE3D,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;gBAC5C,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,CAAC,eAAyB,CAAC,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC;YAEzC,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,eAAe;QACf,OAAO,CAAC,WAAW,GAAG,CAAC,IAAY,EAAE,UAAe,EAAE,EAAE,EAAE;YACxD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE;gBAC9B,OAAO,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;gBACpB,MAAM,EAAE,CAAC;gBACT,GAAG,OAAO;aACX,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,WAAW;QACX,OAAO,CAAC,QAAQ,GAAG,CAAC,GAAW,EAAE,SAAiB,GAAG,EAAE,EAAE;YACvD,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS;gBAAE,OAAO;YAEpD,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC;YAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;YAEnC,MAAM,CAAC,OAAO,CAAC;gBACb,SAAS,EAAE,MAAM;gBACjB,GAAG,OAAO,CAAC,QAAQ;aACpB,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC;QAEF,qBAAqB;QACrB,OAAO,CAAC,IAAI,GAAG,CACb,IAAY,EACZ,UAAgE,EAAE,EAClE,EAAE;YACF,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACnE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,WAAW,GAAQ;oBACvB,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,KAAK;oBAChB,GAAG,OAAO,CAAC,OAAO;iBACnB,CAAC;gBAEF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE;oBACtD,IAAI,GAAG,EAAE,CAAC;wBACR,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,YAAY,EAAE;4BACxD,IAAI;4BACJ,KAAK,EAAE,GAAG,CAAC,OAAO;yBACnB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,mCAAmC;gBACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC;oBACjD,IAAI,CAAC;wBACH,sCAAsC;wBACtC,kCAAkC;wBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAC3D,UAAkB,CAAC,QAAQ,CAAC;4BAC3B,MAAM,EAAE,CAAC;4BACT,MAAM;4BACN,SAAS,EAAE,KAAK;yBACjB,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,gBAAgB,EAAE;4BACvE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC9D,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,OAAO,UAAU,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,YAAY,EAAE;oBACvD,IAAI;oBACJ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QAEF,2CAA2C;QAC3C,OAAO,CAAC,WAAW,GAAG,CACpB,UAAqE,EAAE,EACvE,EAAE;YACF,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC5C,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,CAAC,QAAQ,CAAC;oBACd,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;oBAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBACxE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;iBACtC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,gBAAgB,EAAE;oBACvE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,mBAAmB;QACnB,OAAO,CAAC,cAAc,GAAG,CAAC,OAAwC,EAAE,EAAE;YACpE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,eAAe,CAAC,CAAC;gBACnF,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,iBAAiB;QACjB,OAAO,CAAC,aAAa,GAAG,GAAY,EAAE;YACpC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QAC9B,CAAC,CAAC;QAEF,OAAO,CAAC,gBAAgB,GAAG,GAAG,EAAE;YAC9B,OAAO;gBACL,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE;gBAC7B,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,QAAQ,EAAE,CAAC,MAAM,CAAC,SAAS;aAC5B,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,OAAuB,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,MAAyB,EAAE,OAA4B;QAC7E,MAAM,WAAW,GAAI,OAAO,CAAC,cAAc,CAAY,IAAI,EAAE,CAAC;QAC9D,6DAA6D;QAC7D,MAAM,aAAa,GAAG,QAAQ,CAAE,OAAO,CAAC,gBAAgB,CAAY,IAAI,GAAG,CAAC,CAAC;QAE7E,6CAA6C;QAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,WAAW;YACzB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,iDAAiD;YACtE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,gFAAgF;QAEtG,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,WAAW,GAAG,CAAC,CAAC;YAEpB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAClC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC5B,IAAI,WAAW,GAAG,OAAO,EAAE,CAAC;oBAC1B,MAAM,YAAY,GAAG,WAAW;wBAC9B,CAAC,CAAC,kCAAkC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,aAAa;wBACpF,CAAC,CAAC,wBAAwB,CAAC;oBAC7B,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;oBAChC,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACpB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAEnC,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;wBAC7C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACvC,CAAC;yBAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;wBACrE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACjD,CAAC;yBAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;wBACvD,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;oBACzE,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB,CAAC,WAAmB;QAC1C,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC9D,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,oEAAoE;YACpE,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;QAChD,CAAC;QAED,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtD,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;YAC3C,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,SAAS,CAAC,MAAc,EAAE,IAAwB;QACxD,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAI,IAAI,GAAG,CAAC;QAC/B,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;QAE3C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,oEAAoE;YACpE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;QACxC,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,kBAAkB,GACtB,cAAc,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAE3E,IAAI,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACvE,oEAAoE;YACpE,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAE,CAAC;QAClD,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC9D,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;YACrD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,IAAI,KAAK,GAAsB,IAAI,CAAC;QACpC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC;YAE1F,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;gBAC7C,IAAI,cAAc,CAAC,MAAM,KAAK,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;oBACpF,KAAK,GAAG,cAAc,CAAC;oBACvB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;gBAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,UAAwB,EACxB,GAAgB,EAChB,GAAiB;QAEjB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,WAAW;gBAAE,OAAO;YAE5B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,IAAI,QAAQ,GAAG,KAAK,CAAC;gBAErB,MAAM,IAAI,GAAG,GAAG,EAAE;oBAChB,IAAI,QAAQ;wBAAE,OAAO;oBACrB,QAAQ,GAAG,IAAI,CAAC;oBAChB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBAEF,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBAElC,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC/C,MAAwB;6BACtB,IAAI,CAAC,GAAG,EAAE;4BACT,IAAI,CAAC,QAAQ;gCAAE,IAAI,EAAE,CAAC;wBACxB,CAAC,CAAC;6BACD,KAAK,CAAC,MAAM,CAAC,CAAC;oBACnB,CAAC;yBAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACrB,IAAI,EAAE,CAAC;oBACT,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAID,MAAM,CAAC,IAAY,EAAE,IAA4B,EAAE,QAAqB;QACtE,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,KAAK;QACH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY;QACV,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,UAAU,EAAE,EAAE,EAAE,CAAC;YACnB,UAAU,CAAC,EAAE,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mBAAmB;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC9C,OAAO;YACL,mBAAmB,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ;YACjD,mBAAmB,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ;YACjD,oBAAoB,EAAE,SAAS,CAAC,UAAU,CAAC,QAAQ;YACnD,WAAW,EAAE,SAAS;SACvB,CAAC;IACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"http2-server.js","sourceRoot":"","sources":["../../../src/core/http/http2-server.ts"],"names":[],"mappings":"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","sourcesContent":["// HTTP/2 Server Implementation for Moro Framework\nimport {\n createSecureServer as createHttp2SecureServer,\n createServer as createHttp2Server,\n Http2Server,\n Http2SecureServer,\n ServerHttp2Stream,\n IncomingHttpHeaders,\n OutgoingHttpHeaders,\n} from 'http2';\nimport * as zlib from 'zlib';\nimport { promisify } from 'util';\nimport { createFrameworkLogger } from '../logger/index.js';\nimport {\n HttpRequest,\n HttpResponse,\n Middleware,\n HttpHandler,\n RouteEntry,\n} from '../../types/http.js';\nimport { PathMatcher } from '../routing/path-matcher.js';\nimport { ObjectPoolManager } from '../pooling/object-pool-manager.js';\nimport {\n parseMultipart as parseMultipartBuffer,\n type MultipartLimits,\n} from './utils/multipart-parser.js';\nimport type { HttpRuntimeLimits } from './utils/size.js';\n\nconst gzip = promisify(zlib.gzip);\nconst deflate = promisify(zlib.deflate);\n\nexport interface Http2ServerOptions {\n key?: string | Buffer;\n cert?: string | Buffer;\n ca?: string | Buffer | Array<string | Buffer>;\n allowHTTP1?: boolean;\n maxSessionMemory?: number;\n maxBodySize?: number; // Maximum body size for JSON/form data\n maxUploadSize?: number; // Maximum size for file uploads\n /** Flattened runtime limits (timeouts, maxConnections, multipart, ...). */\n limits?: HttpRuntimeLimits;\n settings?: {\n headerTableSize?: number;\n enablePush?: boolean;\n initialWindowSize?: number;\n maxFrameSize?: number;\n maxConcurrentStreams?: number;\n maxHeaderListSize?: number;\n maxHeaderSize?: number;\n enableConnectProtocol?: boolean;\n };\n}\n\nexport class MoroHttp2Server {\n private server: Http2Server | Http2SecureServer;\n private routes: RouteEntry[] = [];\n private globalMiddleware: Middleware[] = [];\n private compressionEnabled = true;\n private compressionThreshold = 1024;\n private requestTrackingEnabled = true;\n private multipartLimits?: MultipartLimits;\n private _limits?: HttpRuntimeLimits;\n private logger = createFrameworkLogger('Http2Server');\n private hookManager: any;\n private requestCounter = 0;\n private isSecure: boolean;\n\n // Body size limits - defaults overridden by config in constructor\n private maxBodySize: number = 10 * 1024 * 1024; // Default 10MB (overridden by server.bodySizeLimit config)\n private maxUploadSize: number = 100 * 1024 * 1024; // Default 100MB for file uploads\n\n // Use shared object pool manager\n private poolManager = ObjectPoolManager.getInstance();\n\n // Interned method strings for fast comparison\n private static readonly METHOD_POST = 'POST';\n private static readonly METHOD_PUT = 'PUT';\n private static readonly METHOD_PATCH = 'PATCH';\n private static readonly METHOD_GET = 'GET';\n private static readonly METHOD_DELETE = 'DELETE';\n private static readonly METHOD_HEAD = 'HEAD';\n private static readonly METHOD_OPTIONS = 'OPTIONS';\n\n // Pre-compiled response templates\n private static readonly RESPONSE_TEMPLATES = {\n notFound: Buffer.from('{\"success\":false,\"error\":\"Not found\"}'),\n unauthorized: Buffer.from('{\"success\":false,\"error\":\"Unauthorized\"}'),\n forbidden: Buffer.from('{\"success\":false,\"error\":\"Forbidden\"}'),\n internalError: Buffer.from('{\"success\":false,\"error\":\"Internal server error\"}'),\n methodNotAllowed: Buffer.from('{\"success\":false,\"error\":\"Method not allowed\"}'),\n rateLimited: Buffer.from('{\"success\":false,\"error\":\"Rate limit exceeded\"}'),\n };\n\n // Route optimization structures\n private routeCache = new Map<string, RouteEntry | null>();\n private staticRoutes = new Map<string, RouteEntry>();\n private dynamicRoutes: RouteEntry[] = [];\n private routesBySegmentCount = new Map<number, RouteEntry[]>();\n private pathNormalizationCache = new Map<string, string>();\n\n constructor(options: Http2ServerOptions = {}) {\n this.isSecure = !!(options.key && options.cert);\n\n // Configure body size limits from options\n if (options.maxBodySize) {\n this.maxBodySize = options.maxBodySize;\n }\n if (options.maxUploadSize) {\n this.maxUploadSize = options.maxUploadSize;\n }\n if (options.limits?.multipart) this.multipartLimits = options.limits.multipart;\n if (options.limits) this._limits = options.limits;\n\n const serverOptions: any = {\n allowHTTP1: options.allowHTTP1 !== false,\n ...(options.maxSessionMemory && { maxSessionMemory: options.maxSessionMemory }),\n };\n\n // Add SSL options if secure\n if (this.isSecure) {\n serverOptions.key = options.key;\n serverOptions.cert = options.cert;\n if (options.ca) {\n serverOptions.ca = options.ca;\n }\n }\n\n // Add HTTP/2 settings\n if (options.settings) {\n serverOptions.settings = {\n headerTableSize: options.settings.headerTableSize,\n enablePush: options.settings.enablePush !== false,\n initialWindowSize: options.settings.initialWindowSize || 65535,\n maxFrameSize: options.settings.maxFrameSize || 16384,\n maxConcurrentStreams: options.settings.maxConcurrentStreams || 100,\n maxHeaderListSize: options.settings.maxHeaderListSize,\n maxHeaderSize: options.settings.maxHeaderSize,\n enableConnectProtocol: options.settings.enableConnectProtocol,\n };\n } else {\n serverOptions.settings = {\n enablePush: true,\n initialWindowSize: 65535,\n maxFrameSize: 16384,\n maxConcurrentStreams: 100,\n };\n }\n\n // Create server\n if (this.isSecure) {\n this.server = createHttp2SecureServer(serverOptions);\n this.logger.info('HTTP/2 secure server created', 'ServerInit');\n } else {\n this.server = createHttp2Server(serverOptions);\n this.logger.info('HTTP/2 server created', 'ServerInit');\n }\n\n // Configure server settings. Socket idle timeout defaults to 30s (its\n // historical hardcode) unless timeouts.idle is set (0 disables).\n this.server.setTimeout(options.limits?.timeouts?.idle ?? 30000);\n if (options.limits?.maxConnections && options.limits.maxConnections > 0) {\n (this.server as any).maxConnections = options.limits.maxConnections;\n }\n\n // Handle streams (HTTP/2 requests). Wrap so the async handler's promise is\n // always caught - a rejection escaping here becomes an unhandled rejection\n // that can crash the process.\n this.server.on('stream', (stream: ServerHttp2Stream, headers: IncomingHttpHeaders) => {\n void this.handleStream(stream, headers).catch(error => {\n this.logger.error('Unhandled HTTP/2 stream error', 'StreamError', {\n error: error instanceof Error ? error.message : String(error),\n });\n });\n });\n\n // Handle session events\n this.server.on('session', session => {\n this.logger.debug('HTTP/2 session created', 'Session');\n\n session.on('error', err => {\n this.logger.error('HTTP/2 session error', 'Session', { error: err.message });\n });\n });\n\n // Handle server errors\n this.server.on('error', err => {\n this.logger.error('HTTP/2 server error', 'ServerError', { error: err.message });\n });\n }\n\n // Configure server for maximum performance\n configurePerformance(\n config: { compression?: { enabled: boolean; threshold?: number }; minimal?: boolean } = {}\n ) {\n if (config.compression !== undefined) {\n this.compressionEnabled = config.compression.enabled;\n if (config.compression.threshold !== undefined) {\n this.compressionThreshold = config.compression.threshold;\n }\n }\n\n if (config.minimal) {\n this.compressionEnabled = false;\n this.compressionThreshold = Infinity;\n }\n }\n\n // Configure request tracking\n setRequestTracking(enabled: boolean): void {\n this.requestTrackingEnabled = enabled;\n }\n\n // Middleware management\n use(middleware: Middleware): void {\n // Defensive check: Don't add MiddlewareInterface objects to globalMiddleware\n // MiddlewareInterface objects should only be handled by MiddlewareManager\n if (\n middleware &&\n typeof middleware === 'object' &&\n (middleware as any).install &&\n (middleware as any).metadata\n ) {\n this.logger?.warn?.(\n `Attempted to add MiddlewareInterface \"${(middleware as any).metadata?.name}\" to HTTP server globalMiddleware. ` +\n `This should be handled by MiddlewareManager instead. Skipping.`,\n 'Middleware'\n );\n return;\n }\n\n this.globalMiddleware.push(middleware);\n }\n\n // Set hooks manager\n setHookManager(hookManager: any): void {\n this.hookManager = hookManager;\n }\n\n // Routing methods\n get(path: string, ...handlers: (Middleware | HttpHandler)[]): void {\n this.addRoute('GET', path, handlers);\n }\n\n post(path: string, ...handlers: (Middleware | HttpHandler)[]): void {\n this.addRoute('POST', path, handlers);\n }\n\n put(path: string, ...handlers: (Middleware | HttpHandler)[]): void {\n this.addRoute('PUT', path, handlers);\n }\n\n delete(path: string, ...handlers: (Middleware | HttpHandler)[]): void {\n this.addRoute('DELETE', path, handlers);\n }\n\n patch(path: string, ...handlers: (Middleware | HttpHandler)[]): void {\n this.addRoute('PATCH', path, handlers);\n }\n\n private addRoute(method: string, path: string, handlers: (Middleware | HttpHandler)[]): void {\n const { pattern, paramNames } = this.pathToRegex(path);\n const handler = handlers.pop() as HttpHandler;\n const middleware = handlers as Middleware[];\n\n const route = {\n method,\n path,\n pattern,\n paramNames,\n handler,\n middleware,\n };\n\n this.routes.push(route);\n\n // Organize routes for optimal lookup\n if (paramNames.length === 0) {\n const staticKey = `${method}:${path}`;\n this.staticRoutes.set(staticKey, route);\n } else {\n this.dynamicRoutes.push(route);\n const segmentCount = PathMatcher.countSegments(path);\n if (!this.routesBySegmentCount.has(segmentCount)) {\n this.routesBySegmentCount.set(segmentCount, []);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.routesBySegmentCount.get(segmentCount)!.push(route);\n }\n }\n\n private pathToRegex(path: string): { pattern: RegExp; paramNames: string[] } {\n const compiled = PathMatcher.compile(path);\n return {\n pattern: compiled.pattern || new RegExp(`^${path.replace(/\\//g, '\\\\/')}$`),\n paramNames: compiled.paramNames,\n };\n }\n\n private async handleStream(\n stream: ServerHttp2Stream,\n headers: IncomingHttpHeaders\n ): Promise<void> {\n this.requestCounter++;\n\n const httpReq = this.createRequestFromStream(stream, headers);\n const httpRes = this.createResponseFromStream(stream, httpReq);\n\n try {\n // Parse URL and query\n const url = (headers[':path'] as string) || '/';\n const queryIndex = url.indexOf('?');\n\n if (queryIndex === -1) {\n httpReq.path = url;\n httpReq.query = {};\n } else {\n httpReq.path = url.substring(0, queryIndex);\n httpReq.query = this.parseQueryString(url.substring(queryIndex + 1));\n }\n\n // Parse body for POST/PUT/PATCH\n const method = httpReq.method;\n if (\n method === MoroHttp2Server.METHOD_POST ||\n method === MoroHttp2Server.METHOD_PUT ||\n method === MoroHttp2Server.METHOD_PATCH\n ) {\n httpReq.body = await this.parseBody(stream, headers);\n }\n\n // Execute hooks\n if (this.hookManager) {\n await this.hookManager.execute('request', {\n request: httpReq,\n response: httpRes,\n });\n }\n\n // Execute global middleware\n if (this.globalMiddleware.length > 0) {\n await this.executeMiddleware(this.globalMiddleware, httpReq, httpRes);\n }\n\n // If middleware handled the request, don't continue\n if (httpRes.headersSent) {\n return;\n }\n\n // Find matching route (path is always set after URL parsing)\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const route = this.findRoute(method || MoroHttp2Server.METHOD_GET, httpReq.path!);\n if (!route) {\n httpRes.statusCode = 404;\n httpRes.setHeader('Content-Type', 'application/json; charset=utf-8');\n httpRes.setHeader('Content-Length', MoroHttp2Server.RESPONSE_TEMPLATES.notFound.length);\n httpRes.end(MoroHttp2Server.RESPONSE_TEMPLATES.notFound);\n return;\n }\n\n // Extract path parameters\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const matches = httpReq.path!.match(route.pattern);\n if (matches) {\n httpReq.params = this.poolManager.acquireParams();\n const paramNames = route.paramNames;\n for (let i = 0; i < paramNames.length; i++) {\n const paramName = paramNames[i];\n const value = matches[i + 1];\n if (paramName !== undefined && value !== undefined) {\n httpReq.params[paramName] = value;\n }\n }\n }\n\n // Execute route middleware\n if (route.middleware.length > 0) {\n await this.executeMiddleware(route.middleware, httpReq, httpRes);\n }\n\n // Execute handler\n const handlerResult = route.handler(httpReq, httpRes);\n if (handlerResult && typeof handlerResult.then === 'function') {\n await handlerResult;\n }\n } catch (error) {\n this.logger.error('HTTP/2 stream error', 'StreamError', {\n error: error instanceof Error ? error.message : String(error),\n requestId: httpReq.requestId,\n path: httpReq.path,\n });\n\n if (!httpRes.headersSent) {\n httpRes.status(500).json({\n success: false,\n error: 'Internal server error',\n requestId: httpReq.requestId,\n });\n }\n } finally {\n // Release pooled objects\n if (httpReq.params && Object.keys(httpReq.params).length === 0) {\n this.poolManager.releaseParams(httpReq.params);\n }\n if (httpReq.query && Object.keys(httpReq.query).length === 0) {\n this.poolManager.releaseQuery(httpReq.query);\n }\n }\n }\n\n private createRequestFromStream(\n stream: ServerHttp2Stream,\n headers: IncomingHttpHeaders\n ): HttpRequest {\n // Extract method from pseudo-header\n const methodRaw = ((headers[':method'] as string) || 'GET').toUpperCase();\n\n // Intern method string for fast comparison\n let method: string;\n switch (methodRaw) {\n case 'POST':\n method = MoroHttp2Server.METHOD_POST;\n break;\n case 'PUT':\n method = MoroHttp2Server.METHOD_PUT;\n break;\n case 'PATCH':\n method = MoroHttp2Server.METHOD_PATCH;\n break;\n case 'GET':\n method = MoroHttp2Server.METHOD_GET;\n break;\n case 'DELETE':\n method = MoroHttp2Server.METHOD_DELETE;\n break;\n case 'HEAD':\n method = MoroHttp2Server.METHOD_HEAD;\n break;\n case 'OPTIONS':\n method = MoroHttp2Server.METHOD_OPTIONS;\n break;\n default:\n method = methodRaw;\n }\n\n // Convert HTTP/2 headers to standard headers (remove pseudo-headers)\n const standardHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (!key.startsWith(':')) {\n standardHeaders[key] = Array.isArray(value) ? value.join(', ') : (value as string);\n }\n }\n\n // Parse cookies\n const cookieHeader = standardHeaders['cookie'];\n const cookies: Record<string, string> = {};\n if (cookieHeader) {\n const cookieParts = cookieHeader.split(';');\n for (const cookie of cookieParts) {\n const equalIndex = cookie.indexOf('=');\n if (equalIndex > 0) {\n const name = cookie.substring(0, equalIndex).trim();\n const value = cookie.substring(equalIndex + 1);\n if (name && value) {\n try {\n cookies[name] = decodeURIComponent(value);\n } catch {\n // Malformed percent-encoding: keep the raw value rather than\n // throwing a URIError. createRequestFromStream runs before\n // handleStream's try block, so an escape here would surface as\n // an unhandled rejection and crash the process.\n cookies[name] = value;\n }\n }\n }\n }\n }\n\n const httpReq: HttpRequest = {\n method,\n path: '',\n url: (headers[':path'] as string) || '/',\n query: {},\n params: {},\n headers: standardHeaders,\n body: null,\n cookies,\n ip: (stream.session?.socket as any)?.remoteAddress || '',\n requestId: this.requestTrackingEnabled ? this.poolManager.generateRequestId() : '',\n httpVersion: '2.0',\n } as HttpRequest;\n\n // Store stream reference for push capability\n (httpReq as any)._http2Stream = stream;\n (httpReq as any)._http2Headers = headers;\n\n return httpReq;\n }\n\n private createResponseFromStream(stream: ServerHttp2Stream, req: HttpRequest): HttpResponse {\n const httpRes: any = {\n statusCode: 200,\n headersSent: false,\n _headers: {} as OutgoingHttpHeaders,\n _stream: stream,\n _req: req,\n _logger: this.logger,\n _poolManager: this.poolManager,\n _compressionEnabled: this.compressionEnabled,\n _compressionThreshold: this.compressionThreshold,\n };\n\n // Status method\n httpRes.status = (code: number) => {\n httpRes.statusCode = code;\n return httpRes;\n };\n\n // Set header\n httpRes.setHeader = (name: string, value: string | string[]) => {\n httpRes._headers[name.toLowerCase()] = value;\n return httpRes;\n };\n\n // Get header\n httpRes.getHeader = (name: string) => {\n return httpRes._headers[name.toLowerCase()];\n };\n\n // Remove header\n httpRes.removeHeader = (name: string) => {\n delete httpRes._headers[name.toLowerCase()];\n return httpRes;\n };\n\n // Has header\n httpRes.hasHeader = (name: string): boolean => {\n return httpRes._headers[name.toLowerCase()] !== undefined;\n };\n\n // Get headers\n httpRes.getHeaders = () => {\n return { ...httpRes._headers };\n };\n\n // JSON response\n httpRes.json = async (data: any) => {\n if (httpRes.headersSent || stream.destroyed) return;\n\n const jsonString = JSON.stringify(data);\n const finalBuffer = Buffer.from(jsonString, 'utf8');\n\n httpRes._headers['content-type'] = 'application/json; charset=utf-8';\n\n // Compression\n if (httpRes._compressionEnabled && finalBuffer.length > httpRes._compressionThreshold) {\n const acceptEncoding = req.headers['accept-encoding'];\n\n if (acceptEncoding && acceptEncoding.includes('gzip')) {\n const compressed = await gzip(finalBuffer);\n httpRes._headers['content-encoding'] = 'gzip';\n httpRes._headers['content-length'] = compressed.length;\n\n stream.respond({\n ':status': httpRes.statusCode,\n ...httpRes._headers,\n });\n stream.end(compressed);\n httpRes.headersSent = true;\n return;\n } else if (acceptEncoding && acceptEncoding.includes('deflate')) {\n const compressed = await deflate(finalBuffer);\n httpRes._headers['content-encoding'] = 'deflate';\n httpRes._headers['content-length'] = compressed.length;\n\n stream.respond({\n ':status': httpRes.statusCode,\n ...httpRes._headers,\n });\n stream.end(compressed);\n httpRes.headersSent = true;\n return;\n }\n }\n\n httpRes._headers['content-length'] = finalBuffer.length;\n\n stream.respond({\n ':status': httpRes.statusCode,\n ...httpRes._headers,\n });\n stream.end(finalBuffer);\n httpRes.headersSent = true;\n };\n\n // Send response\n httpRes.send = (data: string | Buffer) => {\n if (httpRes.headersSent || stream.destroyed) return;\n\n if (!httpRes._headers['content-type']) {\n if (typeof data === 'string') {\n try {\n JSON.parse(data);\n httpRes._headers['content-type'] = 'application/json; charset=utf-8';\n } catch {\n httpRes._headers['content-type'] = 'text/plain; charset=utf-8';\n }\n } else {\n httpRes._headers['content-type'] = 'application/octet-stream';\n }\n }\n\n const buffer = typeof data === 'string' ? Buffer.from(data) : data;\n httpRes._headers['content-length'] = buffer.length;\n\n stream.respond({\n ':status': httpRes.statusCode,\n ...httpRes._headers,\n });\n stream.end(buffer);\n httpRes.headersSent = true;\n };\n\n // End response\n httpRes.end = (data?: any) => {\n if (httpRes.headersSent || stream.destroyed) return httpRes;\n\n stream.respond({\n ':status': httpRes.statusCode,\n ...httpRes._headers,\n });\n stream.end(data || '');\n httpRes.headersSent = true;\n return httpRes;\n };\n\n // Standardized response helpers\n httpRes.success = <T = any>(data: T, message?: string) => {\n const response: any = {\n success: true,\n data,\n };\n if (message !== undefined) {\n response.message = message;\n }\n httpRes.json(response);\n };\n\n httpRes.error = (error: string, code?: string, message?: string) => {\n const response: any = {\n success: false,\n error,\n };\n if (code !== undefined) {\n response.code = code;\n }\n if (message !== undefined) {\n response.message = message;\n }\n httpRes.json(response);\n };\n\n // Common HTTP error helpers (automatically set status code)\n httpRes.unauthorized = (message: string = 'Authentication required') => {\n httpRes.statusCode = 401;\n httpRes.json({\n success: false,\n error: 'Unauthorized',\n code: 'UNAUTHORIZED',\n message,\n });\n };\n\n httpRes.forbidden = (message: string = 'Insufficient permissions') => {\n httpRes.statusCode = 403;\n httpRes.json({\n success: false,\n error: 'Forbidden',\n code: 'FORBIDDEN',\n message,\n });\n };\n\n httpRes.notFound = (resource: string = 'Resource') => {\n httpRes.statusCode = 404;\n httpRes.json({\n success: false,\n error: 'Not Found',\n code: 'NOT_FOUND',\n message: `${resource} not found`,\n });\n };\n\n httpRes.badRequest = (message: string = 'Invalid request') => {\n httpRes.statusCode = 400;\n httpRes.json({\n success: false,\n error: 'Bad Request',\n code: 'BAD_REQUEST',\n message,\n });\n };\n\n httpRes.conflict = (message: string) => {\n httpRes.statusCode = 409;\n httpRes.json({\n success: false,\n error: 'Conflict',\n code: 'CONFLICT',\n message,\n });\n };\n\n httpRes.internalError = (message: string = 'Internal server error') => {\n httpRes.statusCode = 500;\n httpRes.json({\n success: false,\n error: 'Internal Server Error',\n code: 'INTERNAL_ERROR',\n message,\n });\n };\n\n httpRes.validationError = (\n errors: Array<{ field: string; message: string; code?: string }>\n ) => {\n httpRes.statusCode = 422;\n httpRes.json({\n success: false,\n error: 'Validation Failed',\n code: 'VALIDATION_ERROR',\n errors,\n });\n };\n\n httpRes.rateLimited = (retryAfter?: number) => {\n httpRes.statusCode = 429;\n if (retryAfter) {\n httpRes.setHeader('Retry-After', retryAfter.toString());\n }\n httpRes.json({\n success: false,\n error: 'Rate Limit Exceeded',\n code: 'RATE_LIMITED',\n message: retryAfter\n ? `Too many requests. Retry after ${retryAfter} seconds.`\n : 'Too many requests',\n retryAfter,\n });\n };\n\n // Common success patterns\n httpRes.created = <T = any>(data: T, location?: string) => {\n httpRes.statusCode = 201;\n if (location) {\n httpRes.setHeader('Location', location);\n }\n httpRes.json({\n success: true,\n data,\n });\n };\n\n httpRes.noContent = () => {\n httpRes.statusCode = 204;\n httpRes.end();\n };\n\n httpRes.paginated = <T = any>(\n data: T[],\n pagination: { page: number; limit: number; total: number }\n ) => {\n const totalPages = Math.ceil(pagination.total / pagination.limit);\n httpRes.json({\n success: true,\n data,\n pagination: {\n page: pagination.page,\n limit: pagination.limit,\n total: pagination.total,\n totalPages,\n hasNext: pagination.page < totalPages,\n hasPrev: pagination.page > 1,\n },\n });\n };\n\n // Cookie handling\n httpRes.cookie = (name: string, value: string, options: any = {}) => {\n if (httpRes.headersSent) {\n const isCritical = options.critical || name.includes('session') || name.includes('auth');\n const message = `Cookie '${name}' could not be set - headers already sent`;\n\n if (isCritical || options.throwOnLateSet) {\n throw new Error(`${message}. This may cause authentication or security issues.`);\n } else {\n httpRes._logger.warn(message, 'CookieWarning', { cookieName: name });\n }\n return httpRes;\n }\n\n const cookieValue = encodeURIComponent(value);\n let cookieString = `${name}=${cookieValue}`;\n\n if (options.maxAge) cookieString += `; Max-Age=${options.maxAge}`;\n if (options.expires) cookieString += `; Expires=${options.expires.toUTCString()}`;\n if (options.httpOnly) cookieString += '; HttpOnly';\n if (options.secure) cookieString += '; Secure';\n if (options.sameSite) cookieString += `; SameSite=${options.sameSite}`;\n if (options.domain) cookieString += `; Domain=${options.domain}`;\n if (options.path) cookieString += `; Path=${options.path}`;\n\n const existingCookies = httpRes._headers['set-cookie'] || [];\n const cookies = Array.isArray(existingCookies)\n ? existingCookies\n : [existingCookies as string];\n cookies.push(cookieString);\n httpRes._headers['set-cookie'] = cookies;\n\n return httpRes;\n };\n\n // Clear cookie\n httpRes.clearCookie = (name: string, options: any = {}) => {\n return httpRes.cookie(name, '', {\n expires: new Date(0),\n maxAge: 0,\n ...options,\n });\n };\n\n // Redirect\n httpRes.redirect = (url: string, status: number = 302) => {\n if (httpRes.headersSent || stream.destroyed) return;\n\n httpRes.statusCode = status;\n httpRes._headers['location'] = url;\n\n stream.respond({\n ':status': status,\n ...httpRes._headers,\n });\n stream.end();\n httpRes.headersSent = true;\n };\n\n // HTTP/2 Server Push\n httpRes.push = (\n path: string,\n options: { headers?: OutgoingHttpHeaders; priority?: number } = {}\n ) => {\n if (httpRes.headersSent || stream.destroyed || !stream.pushAllowed) {\n return null;\n }\n\n try {\n const pushHeaders: any = {\n ':path': path,\n ':method': 'GET',\n ...options.headers,\n };\n\n const pushStream = stream.pushStream(pushHeaders, err => {\n if (err) {\n httpRes._logger.debug('Server push failed', 'ServerPush', {\n path,\n error: err.message,\n });\n }\n });\n\n // Set stream priority if specified\n if (options.priority !== undefined && pushStream) {\n try {\n // Priority weight: 1-256 (default 16)\n // Higher values = higher priority\n const weight = Math.max(1, Math.min(256, options.priority));\n (pushStream as any).priority({\n parent: 0,\n weight,\n exclusive: false,\n });\n } catch (error) {\n httpRes._logger.debug('Failed to set stream priority', 'StreamPriority', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return pushStream;\n } catch (error) {\n httpRes._logger.debug('Server push error', 'ServerPush', {\n path,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n };\n\n // Set stream priority for current response\n httpRes.setPriority = (\n options: { parent?: number; weight?: number; exclusive?: boolean } = {}\n ) => {\n if (httpRes.headersSent || stream.destroyed) {\n return httpRes;\n }\n\n try {\n stream.priority({\n parent: options.parent || 0,\n weight: options.weight ? Math.max(1, Math.min(256, options.weight)) : 16,\n exclusive: options.exclusive || false,\n });\n } catch (error) {\n httpRes._logger.debug('Failed to set stream priority', 'StreamPriority', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n return httpRes;\n };\n\n // Set bulk headers\n httpRes.setBulkHeaders = (headers: Record<string, string | number>) => {\n if (httpRes.headersSent) {\n httpRes._logger.warn('Cannot set headers - headers already sent', 'HeaderWarning');\n return httpRes;\n }\n\n for (const key in headers) {\n httpRes._headers[key.toLowerCase()] = String(headers[key]);\n }\n return httpRes;\n };\n\n // Response state\n httpRes.canSetHeaders = (): boolean => {\n return !httpRes.headersSent;\n };\n\n httpRes.getResponseState = () => {\n return {\n headersSent: httpRes.headersSent,\n statusCode: httpRes.statusCode,\n headers: httpRes.getHeaders(),\n finished: stream.destroyed,\n writable: !stream.destroyed,\n };\n };\n\n return httpRes as HttpResponse;\n }\n\n private async parseBody(stream: ServerHttp2Stream, headers: IncomingHttpHeaders): Promise<any> {\n const contentType = (headers['content-type'] as string) || '';\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const contentLength = parseInt((headers['content-length'] as string) || '0');\n\n // Use different limits based on content type\n const isMultipart = contentType.includes('multipart/form-data');\n const maxSize = isMultipart\n ? this.maxUploadSize // Configurable file upload limit (default 100MB)\n : this.maxBodySize; // Configurable body size limit (default 10MB, from server.bodySizeLimit config)\n\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let totalLength = 0;\n\n stream.on('data', (chunk: Buffer) => {\n totalLength += chunk.length;\n if (totalLength > maxSize) {\n const errorMessage = isMultipart\n ? `File upload too large. Maximum ${Math.floor(maxSize / (1024 * 1024))}MB allowed.`\n : 'Request body too large';\n reject(new Error(errorMessage));\n return;\n }\n chunks.push(chunk);\n });\n\n stream.on('end', () => {\n try {\n const body = Buffer.concat(chunks);\n\n if (contentType.includes('application/json')) {\n resolve(JSON.parse(body.toString()));\n } else if (contentType.includes('application/x-www-form-urlencoded')) {\n resolve(this.parseUrlEncoded(body.toString()));\n } else if (contentType.includes('multipart/form-data')) {\n resolve(parseMultipartBuffer(body, contentType, this.multipartLimits));\n } else {\n resolve(body.toString());\n }\n } catch (error) {\n reject(error);\n }\n });\n\n stream.on('error', reject);\n });\n }\n\n private parseUrlEncoded(body: string): Record<string, string> {\n const params = new URLSearchParams(body);\n const result: Record<string, string> = {};\n for (const [key, value] of params) {\n result[key] = value;\n }\n return result;\n }\n\n private parseQueryString(queryString: string): Record<string, string> {\n if (!queryString) return {};\n\n const result = this.poolManager.acquireQuery();\n const pairs = queryString.split('&');\n\n for (const pair of pairs) {\n const equalIndex = pair.indexOf('=');\n if (equalIndex === -1) {\n result[decodeURIComponent(pair)] = '';\n } else {\n const key = decodeURIComponent(pair.substring(0, equalIndex));\n const value = decodeURIComponent(pair.substring(equalIndex + 1));\n result[key] = value;\n }\n }\n return result;\n }\n\n private normalizePath(path: string): string {\n if (this.pathNormalizationCache.has(path)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.pathNormalizationCache.get(path)!;\n }\n\n let normalized = path;\n if (normalized.length > 1 && normalized.endsWith('/')) {\n normalized = normalized.slice(0, -1);\n }\n\n if (this.pathNormalizationCache.size < 200) {\n this.pathNormalizationCache.set(path, normalized);\n }\n\n return normalized;\n }\n\n private findRoute(method: string, path: string | undefined): RouteEntry | null {\n // Default to '/' if path is undefined\n const searchPath = path || '/';\n const cacheKey = `${method}:${searchPath}`;\n\n if (this.routeCache.has(cacheKey)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.routeCache.get(cacheKey)!;\n }\n\n const normalizedPath = this.normalizePath(searchPath);\n const normalizedCacheKey =\n normalizedPath !== searchPath ? `${method}:${normalizedPath}` : cacheKey;\n\n if (normalizedPath !== path && this.routeCache.has(normalizedCacheKey)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.routeCache.get(normalizedCacheKey)!;\n }\n\n const staticRoute = this.staticRoutes.get(normalizedCacheKey);\n if (staticRoute) {\n this.routeCache.set(normalizedCacheKey, staticRoute);\n if (normalizedPath !== path) {\n this.routeCache.set(cacheKey, staticRoute);\n }\n return staticRoute;\n }\n\n let route: RouteEntry | null = null;\n if (this.dynamicRoutes.length > 0) {\n const segmentCount = PathMatcher.countSegments(normalizedPath);\n const candidateRoutes = this.routesBySegmentCount.get(segmentCount) || this.dynamicRoutes;\n\n for (const candidateRoute of candidateRoutes) {\n if (candidateRoute.method === method && candidateRoute.pattern.test(normalizedPath)) {\n route = candidateRoute;\n break;\n }\n }\n }\n\n if (this.routeCache.size < 500) {\n this.routeCache.set(normalizedCacheKey, route);\n if (normalizedPath !== path) {\n this.routeCache.set(cacheKey, route);\n }\n }\n\n return route;\n }\n\n private async executeMiddleware(\n middleware: Middleware[],\n req: HttpRequest,\n res: HttpResponse\n ): Promise<void> {\n for (const mw of middleware) {\n if (res.headersSent) return;\n\n await new Promise<void>((resolve, reject) => {\n let resolved = false;\n\n const next = () => {\n if (resolved) return;\n resolved = true;\n resolve();\n };\n\n try {\n const result = mw(req, res, next);\n\n if (result && typeof result.then === 'function') {\n (result as Promise<void>)\n .then(() => {\n if (!resolved) next();\n })\n .catch(reject);\n } else if (!resolved) {\n next();\n }\n } catch (error) {\n if (!resolved) {\n resolved = true;\n reject(error);\n }\n }\n });\n }\n }\n\n listen(port: number, callback?: () => void): void;\n listen(port: number, host: string, callback?: () => void): void;\n listen(port: number, host?: string | (() => void), callback?: () => void): void {\n if (typeof host === 'function') {\n callback = host;\n host = undefined;\n }\n\n if (host) {\n this.server.listen(port, host, callback);\n } else {\n this.server.listen(port, callback);\n }\n }\n\n close(): Promise<void> {\n return new Promise(resolve => {\n this.server.close(() => resolve());\n });\n }\n\n forceCleanup(): void {\n this.poolManager.clearAll();\n if (globalThis?.gc) {\n globalThis.gc();\n }\n }\n\n getServer(): Http2Server | Http2SecureServer {\n return this.server;\n }\n\n getPerformanceStats() {\n const poolStats = this.poolManager.getStats();\n return {\n paramObjectPoolSize: poolStats.paramPool.poolSize,\n queryObjectPoolSize: poolStats.queryPool.poolSize,\n headerObjectPoolSize: poolStats.headerPool.poolSize,\n poolManager: poolStats,\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/http/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sEAAsE;AACtE,oFAAoF;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/http/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sEAAsE;AACtE,oFAAoF;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC","sourcesContent":["// HTTP System - Centralized Exports\n// Three separate HTTP backends: Node (MoroHttpServer), uWebSockets.js\n// (UWebSocketsHttpServer, opt-in), and Moro's own native engine (MoroEngineServer).\nexport { MoroHttpServer } from './http-server.js';\nexport { UWebSocketsHttpServer } from './uws-http-server.js';\nexport { MoroEngineServer } from './moro-engine-server.js';\nexport { MoroHttp2Server } from './http2-server.js';\nexport type { Http2ServerOptions } from './http2-server.js';\nexport { Router } from '../routing/router.js';\n\n// Type exports\nexport type { HttpRequest, HttpResponse, HttpHandler, Middleware } from '../../types/http.js';\n"]}
|
|
@@ -96,7 +96,7 @@ export declare class EngineResponse extends LazyEventEmitter {
|
|
|
96
96
|
private _headersFlat;
|
|
97
97
|
status(code: number): this;
|
|
98
98
|
setHeader(name: string, value: string | string[]): this;
|
|
99
|
-
getHeader(name: string): string | string[];
|
|
99
|
+
getHeader(name: string): string | string[] | undefined;
|
|
100
100
|
removeHeader(name: string): this;
|
|
101
101
|
json(data: any): void;
|
|
102
102
|
private _respondMaybeCompressed;
|
|
@@ -134,7 +134,7 @@ export declare class EngineResponse extends LazyEventEmitter {
|
|
|
134
134
|
download(filePath: string, filename?: string): Promise<void>;
|
|
135
135
|
format(handlers: Record<string, () => any | Promise<any>>): void;
|
|
136
136
|
set(field: string | Record<string, any>, value?: any): this;
|
|
137
|
-
get(field: string): string | string[];
|
|
137
|
+
get(field: string): string | string[] | undefined;
|
|
138
138
|
hasHeader(name: string): boolean;
|
|
139
139
|
setBulkHeaders(headers: Record<string, string | number>): this;
|
|
140
140
|
appendHeader(name: string, value: string | string[]): this;
|
|
@@ -155,12 +155,15 @@ export class EngineRequest extends LazyEventEmitter {
|
|
|
155
155
|
if (flat) {
|
|
156
156
|
for (let i = 0; i + 1 < flat.length; i += 2) {
|
|
157
157
|
const key = flat[i];
|
|
158
|
+
const val = flat[i + 1];
|
|
159
|
+
if (key === undefined || val === undefined)
|
|
160
|
+
continue;
|
|
158
161
|
const existing = h[key];
|
|
159
162
|
if (existing === undefined) {
|
|
160
|
-
h[key] =
|
|
163
|
+
h[key] = val;
|
|
161
164
|
}
|
|
162
165
|
else {
|
|
163
|
-
h[key] = existing + (key === 'cookie' ? '; ' : ', ') +
|
|
166
|
+
h[key] = existing + (key === 'cookie' ? '; ' : ', ') + val;
|
|
164
167
|
}
|
|
165
168
|
}
|
|
166
169
|
}
|
|
@@ -180,6 +183,8 @@ export class EngineRequest extends LazyEventEmitter {
|
|
|
180
183
|
const parts = header.split(';');
|
|
181
184
|
for (let i = 0; i < parts.length; i++) {
|
|
182
185
|
const part = parts[i];
|
|
186
|
+
if (part === undefined)
|
|
187
|
+
continue;
|
|
183
188
|
const eq = part.indexOf('=');
|
|
184
189
|
if (eq > 0) {
|
|
185
190
|
const name = part.substring(0, eq).trim();
|
|
@@ -271,12 +276,12 @@ export class EngineRequest extends LazyEventEmitter {
|
|
|
271
276
|
// ==== Express-compatible request helpers (parity with the uWS adapter) ====
|
|
272
277
|
get hostname() {
|
|
273
278
|
const host = this.headers.host || '';
|
|
274
|
-
return host ? host.split(':')[0] : '';
|
|
279
|
+
return host ? (host.split(':')[0] ?? '') : '';
|
|
275
280
|
}
|
|
276
281
|
get protocol() {
|
|
277
282
|
const forwardedProto = this.headers['x-forwarded-proto'];
|
|
278
283
|
if (forwardedProto)
|
|
279
|
-
return forwardedProto.split(',')[0].trim();
|
|
284
|
+
return (forwardedProto.split(',')[0] ?? '').trim();
|
|
280
285
|
return this._server && this._server.isSsl ? 'https' : 'http';
|
|
281
286
|
}
|
|
282
287
|
get secure() {
|
|
@@ -316,7 +321,7 @@ export class EngineRequest extends LazyEventEmitter {
|
|
|
316
321
|
const ct = this.headers['content-type'] || '';
|
|
317
322
|
if (!ct)
|
|
318
323
|
return false;
|
|
319
|
-
const mime = ct.split(';')[0].trim().toLowerCase();
|
|
324
|
+
const mime = (ct.split(';')[0] ?? '').trim().toLowerCase();
|
|
320
325
|
const t = type.toLowerCase();
|
|
321
326
|
if (t.indexOf('/') === -1) {
|
|
322
327
|
return mime.endsWith(`/${t}`) || mime.endsWith(`+${t}`);
|
|
@@ -333,7 +338,7 @@ export class EngineRequest extends LazyEventEmitter {
|
|
|
333
338
|
const wanted = Array.isArray(types) ? types : [types];
|
|
334
339
|
if (accept === '*/*' || accept === '')
|
|
335
340
|
return wanted[0] || false;
|
|
336
|
-
const acceptTypes = accept.split(',').map(s => s.split(';')[0].trim().toLowerCase());
|
|
341
|
+
const acceptTypes = accept.split(',').map(s => (s.split(';')[0] ?? '').trim().toLowerCase());
|
|
337
342
|
for (const w of wanted) {
|
|
338
343
|
const wl = w.toLowerCase();
|
|
339
344
|
const wMime = wl.indexOf('/') === -1 ? `application/${wl}` : wl;
|
|
@@ -359,7 +364,7 @@ export class EngineRequest extends LazyEventEmitter {
|
|
|
359
364
|
.split(',')
|
|
360
365
|
.map(s => {
|
|
361
366
|
const parts = s.trim().split(';');
|
|
362
|
-
const tag = parts[0].toLowerCase();
|
|
367
|
+
const tag = (parts[0] ?? '').toLowerCase();
|
|
363
368
|
const qPart = parts.find(p => p.trim().startsWith('q='));
|
|
364
369
|
const q = qPart ? parseFloat(qPart.trim().slice(2)) : 1;
|
|
365
370
|
return { tag, q: isNaN(q) ? 0 : q };
|
|
@@ -1280,10 +1285,14 @@ export class MoroEngineServer {
|
|
|
1280
1285
|
if (options.maxUploadSize)
|
|
1281
1286
|
this.maxUploadSize = options.maxUploadSize;
|
|
1282
1287
|
this.reusePort = options.reusePort === true;
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1288
|
+
if (options.capabilities)
|
|
1289
|
+
this._capabilities = options.capabilities;
|
|
1290
|
+
if (options.limits)
|
|
1291
|
+
this._limits = options.limits;
|
|
1292
|
+
if (options.ssl)
|
|
1293
|
+
this._ssl = options.ssl;
|
|
1294
|
+
if (options.http2Settings)
|
|
1295
|
+
this._http2Settings = options.http2Settings;
|
|
1287
1296
|
if (options.limits?.multipart)
|
|
1288
1297
|
this.multipartLimits = options.limits.multipart;
|
|
1289
1298
|
// The framework preloads the engine synchronously (loadNativeEngine) and
|
|
@@ -1378,11 +1387,13 @@ export class MoroEngineServer {
|
|
|
1378
1387
|
if (limits?.backlog !== undefined)
|
|
1379
1388
|
serveOptions.backlog = limits.backlog;
|
|
1380
1389
|
}
|
|
1381
|
-
// TLS
|
|
1390
|
+
// TLS: gated on the engine's own capability flag (caps.tls), not a version
|
|
1391
|
+
// number, so a mismatched engine build is never handed an ssl option it
|
|
1392
|
+
// can't parse.
|
|
1382
1393
|
if (caps?.tls && this._ssl) {
|
|
1383
1394
|
serveOptions.ssl = this._ssl;
|
|
1384
1395
|
}
|
|
1385
|
-
// HTTP/2
|
|
1396
|
+
// HTTP/2: likewise gated on caps.http2.
|
|
1386
1397
|
if (caps?.http2 && this._http2Settings) {
|
|
1387
1398
|
serveOptions.http2 = {
|
|
1388
1399
|
...(this._http2Settings.settings ?? {}),
|
|
@@ -1439,7 +1450,7 @@ export class MoroEngineServer {
|
|
|
1439
1450
|
// registerDirectRoutes() invokes these as httpServer[method](path, handler).
|
|
1440
1451
|
addDirectRoute(method, path, handlers) {
|
|
1441
1452
|
const compiled = PathMatcher.compile(path);
|
|
1442
|
-
const pattern = compiled.pattern || new RegExp(`^${path.split('?')[0].replace(/\//g, '\\/')}$`);
|
|
1453
|
+
const pattern = compiled.pattern || new RegExp(`^${(path.split('?')[0] ?? '').replace(/\//g, '\\/')}$`);
|
|
1443
1454
|
this.directRoutes.push({ method, pattern, paramNames: compiled.paramNames, handlers });
|
|
1444
1455
|
}
|
|
1445
1456
|
get(path, ...handlers) {
|
|
@@ -1478,18 +1489,21 @@ export class MoroEngineServer {
|
|
|
1478
1489
|
if (route.paramNames.length > 0) {
|
|
1479
1490
|
const params = {};
|
|
1480
1491
|
for (let i = 0; i < route.paramNames.length; i++) {
|
|
1492
|
+
const paramName = route.paramNames[i];
|
|
1493
|
+
if (paramName === undefined)
|
|
1494
|
+
continue;
|
|
1481
1495
|
const raw = matches[i + 1];
|
|
1482
1496
|
if (raw === undefined) {
|
|
1483
|
-
params[
|
|
1497
|
+
params[paramName] = '';
|
|
1484
1498
|
}
|
|
1485
1499
|
else {
|
|
1486
1500
|
// Malformed escapes (e.g. /users/%zz) keep the raw text - a
|
|
1487
1501
|
// URIError here would turn an odd URL into a 500
|
|
1488
1502
|
try {
|
|
1489
|
-
params[
|
|
1503
|
+
params[paramName] = decodeURIComponent(raw);
|
|
1490
1504
|
}
|
|
1491
1505
|
catch {
|
|
1492
|
-
params[
|
|
1506
|
+
params[paramName] = raw;
|
|
1493
1507
|
}
|
|
1494
1508
|
}
|
|
1495
1509
|
}
|
|
@@ -1569,14 +1583,18 @@ export class MoroEngineServer {
|
|
|
1569
1583
|
// hide the earlier one from IP-based WS auth / rate-limiting.
|
|
1570
1584
|
for (let i = 0; i + 1 < flat.length; i += 2) {
|
|
1571
1585
|
const key = flat[i];
|
|
1586
|
+
const val = flat[i + 1];
|
|
1587
|
+
if (key === undefined || val === undefined)
|
|
1588
|
+
continue;
|
|
1572
1589
|
const existing = headers[key];
|
|
1573
1590
|
headers[key] =
|
|
1574
|
-
existing === undefined
|
|
1575
|
-
? flat[i + 1]
|
|
1576
|
-
: existing + (key === 'cookie' ? '; ' : ', ') + flat[i + 1];
|
|
1591
|
+
existing === undefined ? val : existing + (key === 'cookie' ? '; ' : ', ') + val;
|
|
1577
1592
|
}
|
|
1578
1593
|
}
|
|
1579
|
-
|
|
1594
|
+
// Capture the query string too (invalidated by the upgrade like the
|
|
1595
|
+
// rest), so handlers can read handshake query params (e.g. orgId).
|
|
1596
|
+
const query = this._engine.getQuery(reqId) || '';
|
|
1597
|
+
this._pendingWsInfo = { ip, headers, query };
|
|
1580
1598
|
const wsId = this._engine.upgradeToWebSocket(reqId);
|
|
1581
1599
|
this._pendingWsInfo = undefined;
|
|
1582
1600
|
if (wsId !== -1)
|
|
@@ -1590,7 +1608,6 @@ export class MoroEngineServer {
|
|
|
1590
1608
|
const httpReq = new EngineRequest(this, reqId, method, path);
|
|
1591
1609
|
const httpRes = new EngineResponse(this, reqId, this.logger);
|
|
1592
1610
|
httpRes._moroReq = httpReq;
|
|
1593
|
-
this.inflight.set(reqId, httpRes);
|
|
1594
1611
|
// Apply app.decorateRequest/decorateReply values (rare; opt-in)
|
|
1595
1612
|
if (this.requestDecorationKeys.length > 0) {
|
|
1596
1613
|
for (const key of this.requestDecorationKeys) {
|
|
@@ -1603,6 +1620,15 @@ export class MoroEngineServer {
|
|
|
1603
1620
|
}
|
|
1604
1621
|
}
|
|
1605
1622
|
void this.handleRequest(httpReq, httpRes);
|
|
1623
|
+
// Register for onAborted/onWritable routing only when the response is
|
|
1624
|
+
// still in flight after the synchronous dispatch window. Sync handlers
|
|
1625
|
+
// have already ended by here, and the engine never fires those callbacks
|
|
1626
|
+
// for a completed reqId - registering every request just churns this
|
|
1627
|
+
// long-lived Map's old-space backing store, and entries alive at a
|
|
1628
|
+
// scavenge promote the whole request/response graph (at ~570k pipelined
|
|
1629
|
+
// req/s that meant full GCs every ~400ms and a ~150 MB heap vs ~30 MB).
|
|
1630
|
+
if (!httpRes.writableEnded)
|
|
1631
|
+
this.inflight.set(reqId, httpRes);
|
|
1606
1632
|
}
|
|
1607
1633
|
onAborted(reqId) {
|
|
1608
1634
|
const httpRes = this.inflight.get(reqId);
|