@morojs/moro 1.8.0 → 1.8.1
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 +44 -21
- 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 +1 -1
- 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
|
@@ -5,6 +5,9 @@ export class CircuitBreaker extends EventEmitter {
|
|
|
5
5
|
failures = 0;
|
|
6
6
|
lastFailTime = 0;
|
|
7
7
|
state = 'CLOSED';
|
|
8
|
+
// Failure timestamps for the sliding monitoring window (only used when
|
|
9
|
+
// options.monitoringPeriod is set).
|
|
10
|
+
failureTimestamps = [];
|
|
8
11
|
constructor(options) {
|
|
9
12
|
super();
|
|
10
13
|
this.options = options;
|
|
@@ -30,14 +33,33 @@ export class CircuitBreaker extends EventEmitter {
|
|
|
30
33
|
onSuccess() {
|
|
31
34
|
const wasOpen = this.state === 'OPEN' || this.state === 'HALF_OPEN';
|
|
32
35
|
this.failures = 0;
|
|
36
|
+
this.failureTimestamps = [];
|
|
33
37
|
this.state = 'CLOSED';
|
|
34
38
|
if (wasOpen) {
|
|
35
39
|
this.emit('closed');
|
|
36
40
|
}
|
|
37
41
|
}
|
|
38
42
|
onFailure() {
|
|
39
|
-
|
|
40
|
-
this.lastFailTime =
|
|
43
|
+
const now = Date.now();
|
|
44
|
+
this.lastFailTime = now;
|
|
45
|
+
const period = this.options.monitoringPeriod;
|
|
46
|
+
if (period && period > 0) {
|
|
47
|
+
// Sliding window: only failures within the last `monitoringPeriod` ms
|
|
48
|
+
// count toward the threshold, so isolated failures spread over time don't
|
|
49
|
+
// eventually trip the breaker.
|
|
50
|
+
this.failureTimestamps.push(now);
|
|
51
|
+
const cutoff = now - period;
|
|
52
|
+
while (this.failureTimestamps.length > 0) {
|
|
53
|
+
const oldest = this.failureTimestamps[0];
|
|
54
|
+
if (oldest === undefined || oldest >= cutoff)
|
|
55
|
+
break;
|
|
56
|
+
this.failureTimestamps.shift();
|
|
57
|
+
}
|
|
58
|
+
this.failures = this.failureTimestamps.length;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.failures++;
|
|
62
|
+
}
|
|
41
63
|
if (this.failures >= this.options.failureThreshold && this.state !== 'OPEN') {
|
|
42
64
|
this.state = 'OPEN';
|
|
43
65
|
this.emit('open');
|
|
@@ -54,6 +76,7 @@ export class CircuitBreaker extends EventEmitter {
|
|
|
54
76
|
}
|
|
55
77
|
reset() {
|
|
56
78
|
this.failures = 0;
|
|
79
|
+
this.failureTimestamps = [];
|
|
57
80
|
this.state = 'CLOSED';
|
|
58
81
|
this.emit('reset');
|
|
59
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../../src/core/utilities/circuit-breaker.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,OAAO,cAAe,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../../src/core/utilities/circuit-breaker.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,OAAO,cAAe,SAAQ,YAAY;IASpC;IARF,QAAQ,GAAG,CAAC,CAAC;IACb,YAAY,GAAG,CAAC,CAAC;IACjB,KAAK,GAAoC,QAAQ,CAAC;IAC1D,uEAAuE;IACvE,oCAAoC;IAC5B,iBAAiB,GAAa,EAAE,CAAC;IAEzC,YACU,OAIP;QAED,KAAK,EAAE,CAAC;QANA,YAAO,GAAP,OAAO,CAId;IAGH,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,EAAoB;QACnC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;gBAC/D,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,SAAS;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC;QACpE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAEtB,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,SAAS;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC7C,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,sEAAsE;YACtE,0EAA0E;YAC1E,+BAA+B;YAC/B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;YAC5B,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,MAAM;oBAAE,MAAM;gBACpD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC5E,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC;IAC/B,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,mDAAmD;IAC5C,aAAa;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEM,aAAa;QAClB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;CACF","sourcesContent":["// Circuit Breaker Pattern Implementation\nimport { EventEmitter } from 'events';\n\nexport class CircuitBreaker extends EventEmitter {\n private failures = 0;\n private lastFailTime = 0;\n private state: 'CLOSED' | 'OPEN' | 'HALF_OPEN' = 'CLOSED';\n // Failure timestamps for the sliding monitoring window (only used when\n // options.monitoringPeriod is set).\n private failureTimestamps: number[] = [];\n\n constructor(\n private options: {\n failureThreshold: number;\n resetTimeout: number;\n monitoringPeriod?: number;\n }\n ) {\n super();\n }\n\n async execute<T>(fn: () => Promise<T>): Promise<T> {\n if (this.state === 'OPEN') {\n if (Date.now() - this.lastFailTime < this.options.resetTimeout) {\n throw new Error('Circuit breaker is OPEN');\n }\n this.state = 'HALF_OPEN';\n this.emit('halfOpen');\n }\n\n try {\n const result = await fn();\n this.onSuccess();\n return result;\n } catch (error) {\n this.onFailure();\n throw error;\n }\n }\n\n private onSuccess() {\n const wasOpen = this.state === 'OPEN' || this.state === 'HALF_OPEN';\n this.failures = 0;\n this.failureTimestamps = [];\n this.state = 'CLOSED';\n\n if (wasOpen) {\n this.emit('closed');\n }\n }\n\n private onFailure() {\n const now = Date.now();\n this.lastFailTime = now;\n\n const period = this.options.monitoringPeriod;\n if (period && period > 0) {\n // Sliding window: only failures within the last `monitoringPeriod` ms\n // count toward the threshold, so isolated failures spread over time don't\n // eventually trip the breaker.\n this.failureTimestamps.push(now);\n const cutoff = now - period;\n while (this.failureTimestamps.length > 0) {\n const oldest = this.failureTimestamps[0];\n if (oldest === undefined || oldest >= cutoff) break;\n this.failureTimestamps.shift();\n }\n this.failures = this.failureTimestamps.length;\n } else {\n this.failures++;\n }\n\n if (this.failures >= this.options.failureThreshold && this.state !== 'OPEN') {\n this.state = 'OPEN';\n this.emit('open');\n }\n }\n\n public isOpen(): boolean {\n return this.state === 'OPEN';\n }\n\n public getState(): 'CLOSED' | 'OPEN' | 'HALF_OPEN' {\n return this.state;\n }\n\n public getFailures(): number {\n return this.failures;\n }\n\n public reset(): void {\n this.failures = 0;\n this.failureTimestamps = [];\n this.state = 'CLOSED';\n this.emit('reset');\n }\n\n // Methods used in tests for backward compatibility\n public recordSuccess(): void {\n this.onSuccess();\n }\n\n public recordFailure(): void {\n this.onFailure();\n }\n}\n"]}
|
|
@@ -154,7 +154,7 @@ export class FunctionalContainer extends EventEmitter {
|
|
|
154
154
|
lifecycle: ServiceLifecycle.INITIALIZED,
|
|
155
155
|
lastAccessed: Date.now(),
|
|
156
156
|
accessCount: 1,
|
|
157
|
-
context,
|
|
157
|
+
...(context !== undefined ? { context } : {}),
|
|
158
158
|
};
|
|
159
159
|
instanceMap.set(scopeKey, instance);
|
|
160
160
|
}
|
|
@@ -258,7 +258,7 @@ export class FunctionalContainer extends EventEmitter {
|
|
|
258
258
|
lifecycle: ServiceLifecycle.INITIALIZING,
|
|
259
259
|
lastAccessed: Date.now(),
|
|
260
260
|
accessCount: 0,
|
|
261
|
-
context,
|
|
261
|
+
...(context !== undefined ? { context } : {}),
|
|
262
262
|
};
|
|
263
263
|
try {
|
|
264
264
|
// Resolve dependencies
|
|
@@ -357,12 +357,12 @@ export class FunctionalContainer extends EventEmitter {
|
|
|
357
357
|
const paramNames = interceptor
|
|
358
358
|
.toString()
|
|
359
359
|
.match(/\(([^)]*)\)/)?.[1]
|
|
360
|
-
|
|
360
|
+
?.split(',')
|
|
361
361
|
.map(p => p.trim()) || [];
|
|
362
|
+
const secondParam = paramNames[1];
|
|
362
363
|
const isFactoryPattern = paramNames.length >= 2 &&
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
paramNames[1] === 'f');
|
|
364
|
+
secondParam !== undefined &&
|
|
365
|
+
(secondParam.includes('factory') || secondParam.includes('fn') || secondParam === 'f');
|
|
366
366
|
if (isFactoryPattern || paramNames.length !== 4) {
|
|
367
367
|
// Pattern 1: (name, factory, deps, context) => wrappedFactory
|
|
368
368
|
return interceptor(name, wrappedFactory, dependencies, context || this.createDefaultContext());
|
|
@@ -583,9 +583,9 @@ export class ServiceRegistrationBuilder {
|
|
|
583
583
|
dependencies: this.metadata.dependencies,
|
|
584
584
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
585
585
|
optional: this.metadata.optional,
|
|
586
|
-
lifecycle: this.metadata.lifecycle,
|
|
587
|
-
fallback: this.metadata.fallback,
|
|
588
|
-
timeout: this.metadata.timeout,
|
|
586
|
+
...(this.metadata.lifecycle !== undefined ? { lifecycle: this.metadata.lifecycle } : {}),
|
|
587
|
+
...(this.metadata.fallback !== undefined ? { fallback: this.metadata.fallback } : {}),
|
|
588
|
+
...(this.metadata.timeout !== undefined ? { timeout: this.metadata.timeout } : {}),
|
|
589
589
|
},
|
|
590
590
|
interceptors: this.interceptors,
|
|
591
591
|
decorators: this.decorators,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/core/utilities/container.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/core/utilities/container.ts"],"names":[],"mappings":"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","sourcesContent":["// Enhanced Functional Dependency Injection Container\nimport { EventEmitter } from 'events';\n\n// Service lifecycle states\nexport enum ServiceLifecycle {\n UNINITIALIZED = 'uninitialized',\n INITIALIZING = 'initializing',\n INITIALIZED = 'initialized',\n DISPOSING = 'disposing',\n DISPOSED = 'disposed',\n ERROR = 'error',\n}\n\n// Service scopes\nexport enum ServiceScope {\n SINGLETON = 'singleton', // One instance per container\n TRANSIENT = 'transient', // New instance every time\n REQUEST = 'request', // One instance per request context\n MODULE = 'module', // One instance per module\n}\n\n// Service metadata and configuration\nexport interface ServiceMetadata {\n name: string;\n scope: ServiceScope;\n tags: string[];\n dependencies: string[];\n optional: string[];\n lifecycle?: {\n init?: () => Promise<void> | void;\n dispose?: () => Promise<void> | void;\n healthCheck?: () => Promise<boolean> | boolean;\n };\n fallback?: () => any;\n timeout?: number;\n}\n\n// Service definition with functional patterns\nexport interface ServiceDefinition<T = any> {\n factory: ServiceFactory<T>;\n metadata: ServiceMetadata;\n interceptors: ServiceInterceptor[];\n decorators: ServiceDecorator<T>[];\n}\n\n// Functional factory type\nexport type ServiceFactory<T> = (\n dependencies: Record<string, any>,\n context?: ServiceContext\n) => T | Promise<T>;\n\n// Service interceptor for AOP patterns\n// Interceptor can return either a wrapped factory or call next()\nexport type ServiceInterceptor =\n // Pattern 1: Return a wrapped factory (as shown in docs)\n | ((\n serviceName: string,\n factory: () => any | Promise<any>,\n dependencies: Record<string, any>,\n context: ServiceContext\n ) => () => any | Promise<any>)\n // Pattern 2: Use next() callback pattern (middleware-style)\n | ((\n serviceName: string,\n dependencies: Record<string, any>,\n context: ServiceContext,\n next: () => any | Promise<any>\n ) => any | Promise<any>);\n\n// Service decorator for functional composition\nexport type ServiceDecorator<T> = (instance: T, context: ServiceContext) => T | Promise<T>;\n\n// Service context for request-scoped services\nexport interface ServiceContext {\n requestId?: string;\n moduleId?: string;\n metadata: Record<string, any>;\n timestamp: number;\n}\n\n// Service instance wrapper\ninterface ServiceInstance<T = any> {\n value: T;\n metadata: ServiceMetadata;\n lifecycle: ServiceLifecycle;\n lastAccessed: number;\n accessCount: number;\n context?: ServiceContext;\n}\n\n// Higher-order functions for service composition\nexport const withLogging =\n <T>(logger: any) =>\n (factory: ServiceFactory<T>): ServiceFactory<T> =>\n (deps, ctx) => {\n logger.debug(`Creating service with dependencies: ${Object.keys(deps).join(', ')}`);\n const start = Date.now();\n const result = factory(deps, ctx);\n logger.debug(`Service created in ${Date.now() - start}ms`);\n return result;\n };\n\nexport const withCaching =\n <T>(ttl = 300000) =>\n (factory: ServiceFactory<T>): ServiceFactory<T> => {\n const cache = new Map<string, { value: T; expires: number }>();\n return async (deps, ctx) => {\n // Use stable key without JSON.stringify\n const depsKeys = Object.keys(deps).sort();\n const key = `${ctx?.requestId || 'global'}_${depsKeys.join('_')}`;\n const cached = cache.get(key);\n if (cached && cached.expires > Date.now()) {\n return cached.value;\n }\n const result = await factory(deps, ctx);\n cache.set(key, { value: result, expires: Date.now() + ttl });\n return result;\n };\n };\n\nexport const withRetry =\n <T>(maxRetries = 3, delay = 1000) =>\n (factory: ServiceFactory<T>): ServiceFactory<T> =>\n async (deps, ctx) => {\n let lastError: Error | null = null;\n for (let i = 0; i <= maxRetries; i++) {\n try {\n return await factory(deps, ctx);\n } catch (error) {\n lastError = error as Error;\n if (i < maxRetries) {\n await new Promise(resolve => setTimeout(resolve, delay * Math.pow(2, i)));\n }\n }\n }\n throw lastError;\n };\n\nexport const withTimeout =\n <T>(timeoutMs = 5000) =>\n (factory: ServiceFactory<T>): ServiceFactory<T> =>\n async (deps, ctx) => {\n return Promise.race([\n factory(deps, ctx),\n new Promise<never>((_, reject) =>\n setTimeout(\n () => reject(new Error(`Service creation timeout after ${timeoutMs}ms`)),\n timeoutMs\n )\n ),\n ]);\n };\n\n// Typed service reference - holds the service name and type information\nexport class TypedServiceReference<T> {\n constructor(\n private container: FunctionalContainer,\n private serviceName: string\n ) {}\n\n // Resolve the service with full type safety\n async resolve(contextOrOptions?: ServiceContext | { context?: ServiceContext }): Promise<T> {\n return this.container.resolve<T>(this.serviceName, contextOrOptions);\n }\n\n // Synchronous resolution\n resolveSync(contextOrOptions?: ServiceContext | { context?: ServiceContext }): T {\n return this.container.resolveSync<T>(this.serviceName, contextOrOptions);\n }\n\n // Get the service name\n getName(): string {\n return this.serviceName;\n }\n}\n\n// Enhanced Functional Container\nexport class FunctionalContainer extends EventEmitter {\n private services = new Map<string, ServiceDefinition>();\n private instances = new Map<string, ServiceInstance>();\n private requestScopes = new Map<string, Map<string, ServiceInstance>>();\n private moduleScopes = new Map<string, Map<string, ServiceInstance>>();\n private globalInterceptors: ServiceInterceptor[] = [];\n private cleanupInterval?: NodeJS.Timeout | undefined;\n\n constructor() {\n super();\n this.setupCleanup();\n }\n\n // Fluent registration API - returns a builder that captures the type\n register<T = any>(name: string): ServiceRegistrationBuilder<T> {\n return new ServiceRegistrationBuilder<T>(this, name);\n }\n\n // Direct registration for simple cases\n singleton<T>(name: string, factory: ServiceFactory<T>): TypedServiceReference<T> {\n this.register<T>(name).singleton().factory(factory).build();\n return new TypedServiceReference<T>(this, name);\n }\n\n transient<T>(name: string, factory: ServiceFactory<T>): TypedServiceReference<T> {\n this.register<T>(name).transient().factory(factory).build();\n return new TypedServiceReference<T>(this, name);\n }\n\n // Functional service registration with HOFs\n compose<T>(\n name: string,\n ...compositionFns: Array<(factory: ServiceFactory<T>) => ServiceFactory<T>>\n ): ServiceRegistrationBuilder<T> {\n const builder = this.register<T>(name);\n return builder.compose(...compositionFns);\n }\n\n // Enhanced resolution with context\n async resolve<T = any>(\n name: string,\n optionsOrContext?: ServiceContext | { context?: ServiceContext }\n ): Promise<T> {\n const service = this.services.get(name);\n if (!service) {\n throw new Error(`Service '${name}' not registered`);\n }\n\n // Support both direct context and options object with context\n const context: ServiceContext | undefined =\n optionsOrContext && typeof optionsOrContext === 'object' && 'context' in optionsOrContext\n ? optionsOrContext.context\n : (optionsOrContext as ServiceContext | undefined);\n\n const scopeKey = this.getScopeKey(name, service.metadata.scope, context);\n const instanceMap = this.getInstanceMap(service.metadata.scope, context);\n\n let instance = instanceMap.get(scopeKey);\n\n if (!instance || this.shouldRecreate(instance, service.metadata)) {\n instance = await this.createInstance(name, service, context, instanceMap, scopeKey);\n }\n\n instance.lastAccessed = Date.now();\n instance.accessCount++;\n\n return instance.value;\n }\n\n // Synchronous resolution for non-async services\n resolveSync<T = any>(\n name: string,\n optionsOrContext?: ServiceContext | { context?: ServiceContext }\n ): T {\n const service = this.services.get(name);\n if (!service) {\n throw new Error(`Service '${name}' not registered`);\n }\n\n // Support both direct context and options object with context\n const context: ServiceContext | undefined =\n optionsOrContext && typeof optionsOrContext === 'object' && 'context' in optionsOrContext\n ? optionsOrContext.context\n : (optionsOrContext as ServiceContext | undefined);\n\n const scopeKey = this.getScopeKey(name, service.metadata.scope, context);\n const instanceMap = this.getInstanceMap(service.metadata.scope, context);\n\n let instance = instanceMap.get(scopeKey);\n\n if (!instance || this.shouldRecreate(instance, service.metadata)) {\n const result = this.createInstanceSync(name, service, context);\n instance = {\n value: result,\n metadata: service.metadata,\n lifecycle: ServiceLifecycle.INITIALIZED,\n lastAccessed: Date.now(),\n accessCount: 1,\n ...(context !== undefined ? { context } : {}),\n };\n instanceMap.set(scopeKey, instance);\n }\n\n instance.lastAccessed = Date.now();\n instance.accessCount++;\n\n return instance.value;\n }\n\n // Resolve all services with a specific tag\n async resolveByTag(tag: string): Promise<any[]> {\n const services: any[] = [];\n\n for (const [name, service] of this.services) {\n if (service.metadata.tags?.includes(tag)) {\n const resolved = await this.resolve(name);\n services.push(resolved);\n }\n }\n\n return services;\n }\n\n // Add global interceptors\n addInterceptor(interceptor: ServiceInterceptor): this {\n this.globalInterceptors.push(interceptor);\n return this;\n }\n\n // Service health checks\n async healthCheck(): Promise<Record<string, boolean>> {\n const results: Record<string, boolean> = {};\n\n for (const [name, instance] of this.instances) {\n const service = this.services.get(name);\n if (service?.metadata.lifecycle?.healthCheck) {\n try {\n results[name] = await service.metadata.lifecycle.healthCheck();\n } catch {\n results[name] = false;\n }\n } else {\n results[name] = instance.lifecycle === ServiceLifecycle.INITIALIZED;\n }\n }\n\n return results;\n }\n\n // Clear request-scoped services\n clearRequestScope(requestId: string): void {\n const requestScope = this.requestScopes.get(requestId);\n if (requestScope) {\n requestScope.clear();\n this.requestScopes.delete(requestId);\n }\n }\n\n // Clear module-scoped services\n clearModuleScope(moduleId: string): void {\n const moduleScope = this.moduleScopes.get(moduleId);\n if (moduleScope) {\n moduleScope.clear();\n this.moduleScopes.delete(moduleId);\n }\n }\n\n // Service introspection\n getServiceInfo(): Record<string, any> {\n const info: Record<string, any> = {};\n\n for (const [name, service] of this.services) {\n const instance = this.instances.get(name);\n info[name] = {\n scope: service.metadata.scope,\n dependencies: service.metadata.dependencies,\n tags: service.metadata.tags,\n lifecycle: instance?.lifecycle || ServiceLifecycle.UNINITIALIZED,\n accessCount: instance?.accessCount || 0,\n lastAccessed: instance?.lastAccessed ? new Date(instance.lastAccessed).toISOString() : null,\n };\n }\n\n return info;\n }\n\n // Dispose all services\n async dispose(): Promise<void> {\n for (const [name, instance] of this.instances) {\n const service = this.services.get(name);\n if (\n service?.metadata.lifecycle?.dispose &&\n instance.lifecycle === ServiceLifecycle.INITIALIZED\n ) {\n try {\n instance.lifecycle = ServiceLifecycle.DISPOSING;\n await service.metadata.lifecycle.dispose();\n instance.lifecycle = ServiceLifecycle.DISPOSED;\n } catch (error) {\n instance.lifecycle = ServiceLifecycle.ERROR;\n this.emit('disposeError', { name, error });\n }\n }\n }\n\n this.instances.clear();\n this.requestScopes.clear();\n this.moduleScopes.clear();\n }\n\n // Internal implementation methods\n private async createInstance<T>(\n name: string,\n service: ServiceDefinition<T>,\n context?: ServiceContext,\n instanceMap?: Map<string, ServiceInstance>,\n scopeKey?: string\n ): Promise<ServiceInstance<T>> {\n const instance: ServiceInstance<T> = {\n value: undefined as any,\n metadata: service.metadata,\n lifecycle: ServiceLifecycle.INITIALIZING,\n lastAccessed: Date.now(),\n accessCount: 0,\n ...(context !== undefined ? { context } : {}),\n };\n\n try {\n // Resolve dependencies\n const dependencies = await this.resolveDependencies(service.metadata, context);\n\n // Apply interceptors (global + service-specific)\n const interceptedFactory = this.applyInterceptors(\n name,\n service.factory,\n service.interceptors || [],\n dependencies,\n context\n );\n\n // Create instance by calling the intercepted factory (no params needed, already bound)\n instance.value = await interceptedFactory();\n\n // Apply decorators\n instance.value = await this.applyDecorators(instance.value, service.decorators, context);\n\n // Mark as initialized and store in map BEFORE running lifecycle hooks\n // This prevents infinite loops when init callbacks resolve the same service\n instance.lifecycle = ServiceLifecycle.INITIALIZED;\n\n if (instanceMap && scopeKey) {\n instanceMap.set(scopeKey, instance);\n }\n\n // Run initialization lifecycle\n if (service.metadata.lifecycle?.init) {\n await service.metadata.lifecycle.init();\n }\n\n this.emit('serviceCreated', { name, instance });\n } catch (error) {\n instance.lifecycle = ServiceLifecycle.ERROR;\n this.emit('serviceError', { name, error });\n\n // Try fallback if available\n if (service.metadata.fallback) {\n instance.value = service.metadata.fallback();\n instance.lifecycle = ServiceLifecycle.INITIALIZED;\n } else {\n throw error;\n }\n }\n\n return instance;\n }\n\n private createInstanceSync<T>(\n name: string,\n service: ServiceDefinition<T>,\n context?: ServiceContext\n ): T {\n // Resolve dependencies synchronously\n const dependencies = this.resolveDependenciesSync(service.metadata, context);\n\n // Apply interceptors (global + service-specific)\n const interceptedFactory = this.applyInterceptors(\n name,\n service.factory,\n service.interceptors || [],\n dependencies,\n context\n );\n\n // Create instance (note: interceptors must be sync or this will fail)\n let instance = interceptedFactory() as T;\n\n // Apply decorators synchronously\n for (const decorator of service.decorators) {\n const result = decorator(instance, context || this.createDefaultContext());\n // If decorator returns a promise, we can't handle it in sync mode\n if (result && typeof (result as any).then === 'function') {\n throw new Error(\n `Cannot use async decorator with synchronous resolution for service '${name}'`\n );\n }\n instance = result as T;\n }\n\n return instance;\n }\n\n private async resolveDependencies(\n metadata: ServiceMetadata,\n context?: ServiceContext\n ): Promise<Record<string, any>> {\n const dependencies: Record<string, any> = {};\n\n for (const dep of metadata.dependencies) {\n dependencies[dep] = await this.resolve(dep, context);\n }\n\n for (const optDep of metadata.optional) {\n try {\n dependencies[optDep] = await this.resolve(optDep, context);\n } catch {\n // Optional dependency - continue without it\n }\n }\n\n return dependencies;\n }\n\n private resolveDependenciesSync(\n metadata: ServiceMetadata,\n context?: ServiceContext\n ): Record<string, any> {\n const dependencies: Record<string, any> = {};\n\n for (const dep of metadata.dependencies) {\n dependencies[dep] = this.resolveSync(dep, context);\n }\n\n for (const optDep of metadata.optional) {\n try {\n dependencies[optDep] = this.resolveSync(optDep, context);\n } catch {\n // Optional dependency - continue without it\n }\n }\n\n return dependencies;\n }\n\n private applyInterceptors(\n name: string,\n factory: ServiceFactory<any>,\n serviceInterceptors: ServiceInterceptor[],\n dependencies: Record<string, any>,\n context?: ServiceContext\n ): () => any | Promise<any> {\n // Combine global interceptors with service-specific interceptors\n const allInterceptors = [...this.globalInterceptors, ...serviceInterceptors];\n\n // Create a parameterless factory by binding deps and context\n const boundFactory = () => factory(dependencies, context);\n\n // Apply interceptors in order, each wrapping the previous factory\n return allInterceptors.reduce((wrappedFactory: () => any, interceptor: ServiceInterceptor) => {\n // Check the number of parameters to determine pattern\n // Pattern 1: (name, factory, deps, context) - 4 params, expects factory returned\n // Pattern 2: (name, deps, context, next) - 4 params, calls next and returns result\n // We check if the 2nd parameter name suggests it's a factory or not\n const paramNames =\n interceptor\n .toString()\n .match(/\\(([^)]*)\\)/)?.[1]\n ?.split(',')\n .map(p => p.trim()) || [];\n const secondParam = paramNames[1];\n const isFactoryPattern =\n paramNames.length >= 2 &&\n secondParam !== undefined &&\n (secondParam.includes('factory') || secondParam.includes('fn') || secondParam === 'f');\n\n if (isFactoryPattern || paramNames.length !== 4) {\n // Pattern 1: (name, factory, deps, context) => wrappedFactory\n return (interceptor as any)(\n name,\n wrappedFactory,\n dependencies,\n context || this.createDefaultContext()\n );\n } else {\n // Pattern 2: (name, deps, context, next) => result (middleware-style)\n return () =>\n (interceptor as any)(\n name,\n dependencies,\n context || this.createDefaultContext(),\n wrappedFactory\n );\n }\n }, boundFactory);\n }\n\n private async applyDecorators<T>(\n instance: T,\n decorators: ServiceDecorator<T>[],\n context?: ServiceContext\n ): Promise<T> {\n let result = instance;\n for (const decorator of decorators) {\n result = await decorator(result, context || this.createDefaultContext());\n }\n return result;\n }\n\n private getScopeKey(serviceName: string, scope: ServiceScope, context?: ServiceContext): string {\n switch (scope) {\n case ServiceScope.REQUEST:\n return `${serviceName}:${context?.requestId || 'default-request'}`;\n case ServiceScope.MODULE:\n return `${serviceName}:${context?.moduleId || 'default-module'}`;\n default:\n return serviceName; // Each singleton service gets its own key\n }\n }\n\n private getInstanceMap(\n scope: ServiceScope,\n context?: ServiceContext\n ): Map<string, ServiceInstance> {\n switch (scope) {\n case ServiceScope.REQUEST: {\n const requestId = context?.requestId || 'default-request';\n if (!this.requestScopes.has(requestId)) {\n this.requestScopes.set(requestId, new Map());\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.requestScopes.get(requestId)!;\n }\n\n case ServiceScope.MODULE: {\n const moduleId = context?.moduleId || 'default-module';\n if (!this.moduleScopes.has(moduleId)) {\n this.moduleScopes.set(moduleId, new Map());\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.moduleScopes.get(moduleId)!;\n }\n\n default:\n return this.instances;\n }\n }\n\n private shouldRecreate(instance: ServiceInstance, metadata: ServiceMetadata): boolean {\n return (\n metadata.scope === ServiceScope.TRANSIENT ||\n instance.lifecycle === ServiceLifecycle.ERROR ||\n instance.lifecycle === ServiceLifecycle.DISPOSED\n );\n }\n\n private createDefaultContext(): ServiceContext {\n return {\n metadata: {},\n timestamp: Date.now(),\n };\n }\n\n private setupCleanup(): void {\n // Cleanup request scopes after timeout\n this.cleanupInterval = setInterval(\n () => {\n const now = Date.now();\n const timeout = 30 * 60 * 1000; // 30 minutes\n\n for (const [requestId, scope] of this.requestScopes) {\n const hasRecentActivity = Array.from(scope.values()).some(\n instance => now - instance.lastAccessed < timeout\n );\n\n if (!hasRecentActivity) {\n this.clearRequestScope(requestId);\n }\n }\n },\n 5 * 60 * 1000\n ); // Check every 5 minutes\n\n // Unref the interval so it doesn't keep the process alive during testing\n this.cleanupInterval.unref();\n }\n\n // Cleanup and destroy the container\n destroy(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = undefined;\n }\n\n // Clear all scopes\n this.requestScopes.clear();\n this.moduleScopes.clear();\n this.instances.clear();\n this.services.clear();\n\n this.emit('containerDestroyed');\n }\n\n // Internal registration method\n _registerService<T>(name: string, definition: ServiceDefinition<T>): this {\n this.services.set(name, definition);\n this.emit('serviceRegistered', { name, metadata: definition.metadata });\n return this;\n }\n\n // Check if service exists\n has(name: string): boolean {\n return this.services.has(name);\n }\n}\n\n// Fluent registration builder with type safety\nexport class ServiceRegistrationBuilder<T> {\n private metadata: Partial<ServiceMetadata> = {\n scope: ServiceScope.SINGLETON,\n tags: [],\n dependencies: [],\n optional: [],\n };\n private _factory?: ServiceFactory<T>;\n private interceptors: ServiceInterceptor[] = [];\n private decorators: ServiceDecorator<T>[] = [];\n\n constructor(\n private container: FunctionalContainer,\n private name: string\n ) {}\n\n // Scope configuration\n singleton(): this {\n this.metadata.scope = ServiceScope.SINGLETON;\n return this;\n }\n\n transient(): this {\n this.metadata.scope = ServiceScope.TRANSIENT;\n return this;\n }\n\n requestScoped(): this {\n this.metadata.scope = ServiceScope.REQUEST;\n return this;\n }\n\n moduleScoped(): this {\n this.metadata.scope = ServiceScope.MODULE;\n return this;\n }\n\n // Dependencies\n dependsOn(...deps: string[]): this {\n this.metadata.dependencies = [...(this.metadata.dependencies || []), ...deps];\n return this;\n }\n\n optionalDependsOn(...deps: string[]): this {\n this.metadata.optional = [...(this.metadata.optional || []), ...deps];\n return this;\n }\n\n // Metadata\n tags(...tags: string[]): this {\n this.metadata.tags = [...(this.metadata.tags || []), ...tags];\n return this;\n }\n\n // Lifecycle\n onInit(initFn: () => Promise<void> | void): this {\n this.metadata.lifecycle = { ...this.metadata.lifecycle, init: initFn };\n return this;\n }\n\n onDispose(disposeFn: () => Promise<void> | void): this {\n this.metadata.lifecycle = {\n ...this.metadata.lifecycle,\n dispose: disposeFn,\n };\n return this;\n }\n\n healthCheck(healthFn: () => Promise<boolean> | boolean): this {\n this.metadata.lifecycle = {\n ...this.metadata.lifecycle,\n healthCheck: healthFn,\n };\n return this;\n }\n\n fallback(fallbackFn: () => T): this {\n this.metadata.fallback = fallbackFn;\n return this;\n }\n\n timeout(ms: number): this {\n this.metadata.timeout = ms;\n return this;\n }\n\n // Factory and composition\n factory(factory: ServiceFactory<T>): this {\n this._factory = factory;\n return this;\n }\n\n compose(...compositionFns: Array<(factory: ServiceFactory<T>) => ServiceFactory<T>>): this {\n if (!this._factory) {\n throw new Error('Factory must be set before composition');\n }\n\n this._factory = compositionFns.reduce((acc, fn) => fn(acc), this._factory);\n return this;\n }\n\n // Interceptors and decorators\n intercept(interceptor: ServiceInterceptor): this {\n this.interceptors.push(interceptor);\n return this;\n }\n\n // Alias for intercept() to match documentation\n interceptor(interceptor: ServiceInterceptor): this {\n return this.intercept(interceptor);\n }\n\n decorate(decorator: ServiceDecorator<T>): this {\n this.decorators.push(decorator);\n return this;\n }\n\n // Alias for decorate() to match documentation\n decorator(decorator: ServiceDecorator<T>): this {\n return this.decorate(decorator);\n }\n\n // Build and register - returns a typed reference\n build(): TypedServiceReference<T> {\n if (!this._factory) {\n throw new Error(`Factory not provided for service '${String(this.name)}'`);\n }\n\n const definition: ServiceDefinition<T> = {\n factory: this._factory,\n metadata: {\n name: this.name as string,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n scope: this.metadata.scope!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tags: this.metadata.tags!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n dependencies: this.metadata.dependencies!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n optional: this.metadata.optional!,\n ...(this.metadata.lifecycle !== undefined ? { lifecycle: this.metadata.lifecycle } : {}),\n ...(this.metadata.fallback !== undefined ? { fallback: this.metadata.fallback } : {}),\n ...(this.metadata.timeout !== undefined ? { timeout: this.metadata.timeout } : {}),\n },\n interceptors: this.interceptors,\n decorators: this.decorators,\n };\n\n this.container._registerService(this.name as string, definition);\n return new TypedServiceReference<T>(this.container, this.name);\n }\n}\n\n// Standard Container class\nexport class Container {\n private functionalContainer = new FunctionalContainer();\n private resolutionCache = new Map<string, any>();\n\n register<T>(name: string, factory: () => T, singleton = false): void {\n this.functionalContainer\n .register<T>(name)\n .factory(() => factory())\n [singleton ? 'singleton' : 'transient']()\n .build();\n }\n\n resolve<T>(name: string): T {\n // Fast path for cached resolutions\n if (this.resolutionCache.has(name)) {\n return this.resolutionCache.get(name);\n }\n\n const resolved = this.functionalContainer.resolveSync<T>(name);\n\n // Cache result (limit cache size)\n if (this.resolutionCache.size < 50) {\n this.resolutionCache.set(name, resolved);\n }\n\n return resolved;\n }\n\n has(name: string): boolean {\n return this.functionalContainer.has(name);\n }\n\n // Expose enhanced container for migration\n getEnhanced(): FunctionalContainer {\n return this.functionalContainer;\n }\n}\n"]}
|
|
@@ -28,6 +28,8 @@ export class HookManager extends EventEmitter {
|
|
|
28
28
|
const hookEventLen = hookEventValues.length;
|
|
29
29
|
for (let i = 0; i < hookEventLen; i++) {
|
|
30
30
|
const event = hookEventValues[i];
|
|
31
|
+
if (event === undefined)
|
|
32
|
+
continue;
|
|
31
33
|
this.hooks.set(event, []);
|
|
32
34
|
this.beforeHooks.set(event, []);
|
|
33
35
|
this.afterHooks.set(event, []);
|
|
@@ -59,7 +61,10 @@ export class HookManager extends EventEmitter {
|
|
|
59
61
|
const beforeLen = beforeHooks.length;
|
|
60
62
|
for (let i = 0; i < beforeLen; i++) {
|
|
61
63
|
try {
|
|
62
|
-
beforeHooks[i]
|
|
64
|
+
const hook = beforeHooks[i];
|
|
65
|
+
if (hook !== undefined) {
|
|
66
|
+
hook(context);
|
|
67
|
+
}
|
|
63
68
|
}
|
|
64
69
|
catch (error) {
|
|
65
70
|
// Check if this is a known/expected error that should not halt execution
|
|
@@ -84,7 +89,10 @@ export class HookManager extends EventEmitter {
|
|
|
84
89
|
const hooksLen = hooks.length;
|
|
85
90
|
for (let i = 0; i < hooksLen; i++) {
|
|
86
91
|
try {
|
|
87
|
-
hooks[i]
|
|
92
|
+
const hook = hooks[i];
|
|
93
|
+
if (hook !== undefined) {
|
|
94
|
+
hook(context);
|
|
95
|
+
}
|
|
88
96
|
}
|
|
89
97
|
catch (error) {
|
|
90
98
|
// Check if this is a known/expected error that should not halt execution
|
|
@@ -109,7 +117,10 @@ export class HookManager extends EventEmitter {
|
|
|
109
117
|
const afterLen = afterHooks.length;
|
|
110
118
|
for (let i = 0; i < afterLen; i++) {
|
|
111
119
|
try {
|
|
112
|
-
afterHooks[i]
|
|
120
|
+
const hook = afterHooks[i];
|
|
121
|
+
if (hook !== undefined) {
|
|
122
|
+
hook(context);
|
|
123
|
+
}
|
|
113
124
|
}
|
|
114
125
|
catch (error) {
|
|
115
126
|
// Check if this is a known/expected error that should not halt execution
|
|
@@ -141,17 +152,26 @@ export class HookManager extends EventEmitter {
|
|
|
141
152
|
// Execute before hooks
|
|
142
153
|
const beforeLen = beforeHooks.length;
|
|
143
154
|
for (let i = 0; i < beforeLen; i++) {
|
|
144
|
-
|
|
155
|
+
const hook = beforeHooks[i];
|
|
156
|
+
if (hook !== undefined) {
|
|
157
|
+
await this.executeHook(hook, context);
|
|
158
|
+
}
|
|
145
159
|
}
|
|
146
160
|
// Execute main hooks
|
|
147
161
|
const hooksLen = hooks.length;
|
|
148
162
|
for (let i = 0; i < hooksLen; i++) {
|
|
149
|
-
|
|
163
|
+
const hook = hooks[i];
|
|
164
|
+
if (hook !== undefined) {
|
|
165
|
+
await this.executeHook(hook, context);
|
|
166
|
+
}
|
|
150
167
|
}
|
|
151
168
|
// Execute after hooks
|
|
152
169
|
const afterLen = afterHooks.length;
|
|
153
170
|
for (let i = 0; i < afterLen; i++) {
|
|
154
|
-
|
|
171
|
+
const hook = afterHooks[i];
|
|
172
|
+
if (hook !== undefined) {
|
|
173
|
+
await this.executeHook(hook, context);
|
|
174
|
+
}
|
|
155
175
|
}
|
|
156
176
|
// Emit event for listeners
|
|
157
177
|
this.emit(event, context);
|
|
@@ -261,6 +281,8 @@ export class HookManager extends EventEmitter {
|
|
|
261
281
|
const mapsLen = maps.length;
|
|
262
282
|
for (let i = 0; i < mapsLen; i++) {
|
|
263
283
|
const map = maps[i];
|
|
284
|
+
if (map === undefined)
|
|
285
|
+
continue;
|
|
264
286
|
const hooks = map.get(event);
|
|
265
287
|
if (hooks) {
|
|
266
288
|
const index = hooks.indexOf(fn);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/core/utilities/hooks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/core/utilities/hooks.ts"],"names":[],"mappings":"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","sourcesContent":["// Hook System for Moro\nimport { EventEmitter } from 'events';\nimport { HookFunction, HookContext } from '../../types/hooks.js';\nimport { createFrameworkLogger } from '../logger/index.js';\n\nexport const HOOK_EVENTS = {\n BEFORE_REQUEST: 'before:request',\n AFTER_REQUEST: 'after:request',\n BEFORE_RESPONSE: 'before:response',\n AFTER_RESPONSE: 'after:response',\n ERROR: 'error',\n} as const;\n\nexport class HookManager extends EventEmitter {\n private hooks = new Map<string, HookFunction[]>();\n private beforeHooks = new Map<string, HookFunction[]>();\n private afterHooks = new Map<string, HookFunction[]>();\n private logger = createFrameworkLogger('Hooks');\n\n // Cached execute functions\n // When no hooks are registered, replace execute() with noop\n private executeCache = new Map<string, (context: HookContext) => Promise<HookContext>>();\n\n // Track if hooks are synchronous to avoid Promise overhead\n private hookSyncStatus = new Map<string, boolean>();\n\n // Events that currently have at least one hook registered - lets callers skip\n // execute() entirely (no context object, no promise) when nothing is registered\n private activeEvents = new Set<string>();\n\n constructor() {\n super();\n // Initialize hook arrays\n const hookEventValues = Object.values(HOOK_EVENTS);\n const hookEventLen = hookEventValues.length;\n for (let i = 0; i < hookEventLen; i++) {\n const event = hookEventValues[i];\n if (event === undefined) continue;\n this.hooks.set(event, []);\n this.beforeHooks.set(event, []);\n this.afterHooks.set(event, []);\n // Initialize with noop functions\n this.updateExecuteCache(event);\n }\n }\n\n // Update cached execute function for an event\n private updateExecuteCache(event: string): void {\n const beforeHooks = this.beforeHooks.get(event) || [];\n const hooks = this.hooks.get(event) || [];\n const afterHooks = this.afterHooks.get(event) || [];\n\n // If no hooks registered, use noop for zero overhead\n if (beforeHooks.length === 0 && hooks.length === 0 && afterHooks.length === 0) {\n this.executeCache.set(event, async (context: HookContext) => context);\n this.hookSyncStatus.set(event, true); // Mark as sync (noop)\n this.activeEvents.delete(event);\n return;\n }\n\n this.activeEvents.add(event);\n\n // Detect if all hooks are synchronous\n const allSync = this.areHooksSynchronous(beforeHooks, hooks, afterHooks);\n this.hookSyncStatus.set(event, allSync);\n\n if (allSync) {\n // FAST PATH: Create synchronous version (no Promise overhead)\n // Cast to Promise return type to satisfy interface\n this.executeCache.set(event, ((context: HookContext) => {\n // Execute before hooks synchronously\n const beforeLen = beforeHooks.length;\n for (let i = 0; i < beforeLen; i++) {\n try {\n const hook = beforeHooks[i];\n if (hook !== undefined) {\n hook(context);\n }\n } catch (error) {\n // Check if this is a known/expected error that should not halt execution\n const errorMessage = error instanceof Error ? error.message : String(error);\n const isHeadersError =\n errorMessage.includes('headersSent') && errorMessage.includes('getter');\n\n if (isHeadersError) {\n // This is an expected error when trying to set read-only headersSent property\n // Log as debug instead of error, and don't re-throw\n this.logger.debug(\n 'Hook attempted to set read-only headersSent property',\n 'HookExecution',\n {\n error: errorMessage,\n context: context.request?.method || 'unknown',\n }\n );\n continue;\n }\n\n this.logger.error('Hook execution error', 'HookExecution', {\n error: errorMessage,\n });\n throw error;\n }\n }\n\n // Execute main hooks synchronously\n const hooksLen = hooks.length;\n for (let i = 0; i < hooksLen; i++) {\n try {\n const hook = hooks[i];\n if (hook !== undefined) {\n hook(context);\n }\n } catch (error) {\n // Check if this is a known/expected error that should not halt execution\n const errorMessage = error instanceof Error ? error.message : String(error);\n const isHeadersError =\n errorMessage.includes('headersSent') && errorMessage.includes('getter');\n\n if (isHeadersError) {\n // This is an expected error when trying to set read-only headersSent property\n // Log as debug instead of error, and don't re-throw\n this.logger.debug(\n 'Hook attempted to set read-only headersSent property',\n 'HookExecution',\n {\n error: errorMessage,\n context: context.request?.method || 'unknown',\n }\n );\n continue;\n }\n\n this.logger.error('Hook execution error', 'HookExecution', {\n error: errorMessage,\n });\n throw error;\n }\n }\n\n // Execute after hooks synchronously\n const afterLen = afterHooks.length;\n for (let i = 0; i < afterLen; i++) {\n try {\n const hook = afterHooks[i];\n if (hook !== undefined) {\n hook(context);\n }\n } catch (error) {\n // Check if this is a known/expected error that should not halt execution\n const errorMessage = error instanceof Error ? error.message : String(error);\n const isHeadersError =\n errorMessage.includes('headersSent') && errorMessage.includes('getter');\n\n if (isHeadersError) {\n // This is an expected error when trying to set read-only headersSent property\n // Log as debug instead of error, and don't re-throw\n this.logger.debug(\n 'Hook attempted to set read-only headersSent property',\n 'HookExecution',\n {\n error: errorMessage,\n context: context.request?.method || 'unknown',\n }\n );\n continue;\n }\n\n this.logger.error('Hook execution error', 'HookExecution', {\n error: errorMessage,\n });\n throw error;\n }\n }\n\n // Emit event for listeners\n this.emit(event, context);\n\n return context as any; // Cast to satisfy Promise return\n }) as any);\n } else {\n // SLOW PATH: Use async version only when needed\n this.executeCache.set(event, async (context: HookContext) => {\n // Execute before hooks\n const beforeLen = beforeHooks.length;\n for (let i = 0; i < beforeLen; i++) {\n const hook = beforeHooks[i];\n if (hook !== undefined) {\n await this.executeHook(hook, context);\n }\n }\n\n // Execute main hooks\n const hooksLen = hooks.length;\n for (let i = 0; i < hooksLen; i++) {\n const hook = hooks[i];\n if (hook !== undefined) {\n await this.executeHook(hook, context);\n }\n }\n\n // Execute after hooks\n const afterLen = afterHooks.length;\n for (let i = 0; i < afterLen; i++) {\n const hook = afterHooks[i];\n if (hook !== undefined) {\n await this.executeHook(hook, context);\n }\n }\n\n // Emit event for listeners\n this.emit(event, context);\n\n return context;\n });\n }\n }\n\n // Detect if hooks are synchronous by checking function signatures\n private areHooksSynchronous(...hookArrays: HookFunction[][]): boolean {\n for (const hooks of hookArrays) {\n for (const hook of hooks) {\n // Check if function is async or returns a Promise\n if (hook.constructor.name === 'AsyncFunction') {\n return false;\n }\n // Additional heuristic: check if function name suggests async\n if (hook.name && (hook.name.includes('async') || hook.name.includes('Async'))) {\n return false;\n }\n }\n }\n return true; // Assume synchronous by default\n }\n\n // Register a hook for a specific event\n hook(event: string, fn: HookFunction): this {\n if (!this.hooks.has(event)) {\n this.hooks.set(event, []);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.hooks.get(event)!.push(fn);\n this.updateExecuteCache(event); // Update cache\n return this;\n }\n\n // Register a before hook\n before(event: string, fn: HookFunction): this {\n if (!this.beforeHooks.has(event)) {\n this.beforeHooks.set(event, []);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.beforeHooks.get(event)!.push(fn);\n this.updateExecuteCache(event); // Update cache\n return this;\n }\n\n // Register an after hook\n after(event: string, fn: HookFunction): this {\n if (!this.afterHooks.has(event)) {\n this.afterHooks.set(event, []);\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.afterHooks.get(event)!.push(fn);\n this.updateExecuteCache(event); // Update cache\n return this;\n }\n\n // O(1) check that lets hot paths skip execute() (and its context/promise\n // allocation) entirely when no hooks are registered for an event.\n // Note: EventEmitter listeners attached via .on(event) also count, since the\n // cached executors emit the event after running hooks.\n hasHooks(event: string): boolean {\n return this.activeEvents.has(event) || this.listenerCount(event) > 0;\n }\n\n // Execute hooks for an event - optimized with cached functions\n async execute(event: string, context: HookContext = {}): Promise<HookContext> {\n const executeFn = this.executeCache.get(event);\n if (executeFn) {\n return executeFn(context);\n }\n\n // Fallback for events not in cache (shouldn't happen in normal operation)\n this.updateExecuteCache(event);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.executeCache.get(event)!(context);\n }\n\n // Execute a single hook with error handling\n private async executeHook(hook: HookFunction, context: HookContext): Promise<void> {\n try {\n await hook(context);\n } catch (error) {\n // Check if this is a known/expected error that should not halt execution\n const errorMessage = error instanceof Error ? error.message : String(error);\n const isHeadersError =\n errorMessage.includes('headersSent') && errorMessage.includes('getter');\n\n if (isHeadersError) {\n // This is an expected error when trying to set read-only headersSent property\n // Log as debug instead of error, and don't re-throw\n this.logger.debug('Hook attempted to set read-only headersSent property', 'HookExecution', {\n error: errorMessage,\n context: context.request?.method || 'unknown',\n });\n return;\n }\n\n // For other errors, log and re-throw as before\n this.logger.error('Hook execution error', 'HookExecution', {\n error: errorMessage,\n context: context.request?.method || 'unknown',\n });\n throw error;\n }\n }\n\n // Remove hooks\n removeHook(event: string, fn?: HookFunction): this {\n if (!fn) {\n this.hooks.delete(event);\n this.beforeHooks.delete(event);\n this.afterHooks.delete(event);\n } else {\n const maps = [this.hooks, this.beforeHooks, this.afterHooks];\n const mapsLen = maps.length;\n for (let i = 0; i < mapsLen; i++) {\n const map = maps[i];\n if (map === undefined) continue;\n const hooks = map.get(event);\n if (hooks) {\n const index = hooks.indexOf(fn);\n if (index !== -1) {\n hooks.splice(index, 1);\n }\n }\n }\n }\n this.updateExecuteCache(event); // Update cache\n return this;\n }\n\n // Get all registered hooks for debugging\n getHooks(event?: string): Record<string, any> {\n if (event) {\n return {\n before: this.beforeHooks.get(event) || [],\n main: this.hooks.get(event) || [],\n after: this.afterHooks.get(event) || [],\n };\n }\n\n const allHooks: Record<string, any> = {};\n const allEvents = new Set([\n ...this.hooks.keys(),\n ...this.beforeHooks.keys(),\n ...this.afterHooks.keys(),\n ]);\n\n allEvents.forEach(event => {\n allHooks[event] = this.getHooks(event);\n });\n\n return allHooks;\n }\n}\n\n// Built-in middleware - now organized in individual files\nexport { simpleMiddleware as middleware } from '../middleware/index.js';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/utilities/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,SAAS,EACT,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kCAAkC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,0FAA0F;AAC1F,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/utilities/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,SAAS,EACT,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kCAAkC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,0FAA0F;AAC1F,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["// Core Utilities - Centralized Exports\nexport {\n Container,\n FunctionalContainer,\n TypedServiceReference,\n ServiceScope,\n ServiceLifecycle,\n withLogging,\n withCaching,\n withRetry,\n withTimeout,\n} from './container.js';\nexport { CircuitBreaker } from './circuit-breaker.js';\nexport { HookManager, HOOK_EVENTS } from './hooks.js';\nexport { isPackageAvailable, resolveUserPackage, createUserRequire } from './package-utils.js';\nexport { buildModuleBasePath } from './module-path.js';\n\n// Re-export middleware from hooks\nexport { middleware } from './hooks.js';\n\n// Standardized Response Helpers (namespace object only to avoid polluting global exports)\nexport { response, ResponseBuilder } from './response-helpers.js';\n\nexport type {\n ApiSuccessResponse,\n ApiErrorResponse,\n ApiResponse,\n ValidationErrorDetail as ResponseValidationErrorDetail,\n} from './response-helpers.js';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-path.js","sourceRoot":"","sources":["../../../src/core/utilities/module-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAA6B,EAC7B,OAAe,EACf,UAAkB;IAElB,uCAAuC;IACvC,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAE7D,sDAAsD;IACtD,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7F,sBAAsB;IACtB,OAAO,GAAG,gBAAgB,KAAK,OAAO,IAAI,UAAU,EAAE,CAAC;AACzD,CAAC"}
|
|
1
|
+
{"version":3,"file":"module-path.js","sourceRoot":"","sources":["../../../src/core/utilities/module-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAA6B,EAC7B,OAAe,EACf,UAAkB;IAElB,uCAAuC;IACvC,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAE7D,sDAAsD;IACtD,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7F,sBAAsB;IACtB,OAAO,GAAG,gBAAgB,KAAK,OAAO,IAAI,UAAU,EAAE,CAAC;AACzD,CAAC","sourcesContent":["/**\n * Module Path Utilities\n *\n * Helper functions for constructing module routes with configurable prefixes\n */\n\n/**\n * Build the base path for a module route\n *\n * @param apiPrefix - The API prefix from config (e.g., '/api/', '', '/services/')\n * @param version - Module version (e.g., '1.0.0')\n * @param moduleName - Module name (e.g., 'user')\n * @returns The complete base path (e.g., '/api/v1.0.0/user')\n */\nexport function buildModuleBasePath(\n apiPrefix: string | undefined,\n version: string,\n moduleName: string\n): string {\n // Use default '/api/' if not specified\n const prefix = apiPrefix !== undefined ? apiPrefix : '/api/';\n\n // Normalize prefix - remove trailing slash if present\n const normalizedPrefix = prefix ? (prefix.endsWith('/') ? prefix.slice(0, -1) : prefix) : '';\n\n // Build complete path\n return `${normalizedPrefix}/v${version}/${moduleName}`;\n}\n"]}
|
|
@@ -211,7 +211,7 @@ export function loadNativeEngine(options) {
|
|
|
211
211
|
result = {
|
|
212
212
|
module,
|
|
213
213
|
source: candidate,
|
|
214
|
-
version,
|
|
214
|
+
...(version !== undefined ? { version } : {}),
|
|
215
215
|
capabilities: moroStyle ? getEngineCapabilities(module) : NO_CAPABILITIES,
|
|
216
216
|
};
|
|
217
217
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-utils.js","sourceRoot":"","sources":["../../../src/core/utilities/package-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"package-utils.js","sourceRoot":"","sources":["../../../src/core/utilities/package-utils.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2EAA2E;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACvE,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACvE,OAAO,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAU,CAAC;AAEpF,MAAM,sBAAsB,GAAG,cAAc,CAAC;AA4B9C,MAAM,eAAe,GAAuB;IAC1C,MAAM,EAAE,KAAK;IACb,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAA8B,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAW;IAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC;IAC1C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC;IACpE,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,IAAI,IAAI,GAAuB,eAAe,CAAC;IAC/C,IAAI,CAAC;QACH,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,KAAK,EAAE,YAAY,CAAC;YAC9B,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC/B,IAAI,GAAG;oBACL,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI;oBACzB,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI;oBACnB,KAAK,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI;oBACvB,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,IAAI;iBAChC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,eAAe,CAAC;IACzB,CAAC;IACD,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2DAA2D;AAC3D,IAAI,YAAuD,CAAC;AAC5D,IAAI,gBAAgB,GAAa,EAAE,CAAC;AAEpC;;;;;;GAMG;AACH,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;YAC3C,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;IAED,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,SAAS,CAAC;QACR,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QACjF,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5B,OAAO,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAMhC;IACC,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC;IACtC,IAAI,QAAQ,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC3C,IAAI,OAAO,EAAE,aAAa,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,sBAAsB,CAAC;IACjE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAkC,IAAI,CAAC;IAEjD,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;IAExC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,OAAO,GACX,SAAS,KAAK,gBAAgB;YAC5B,CAAC,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC;YACjC,CAAC,CAAC,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAEtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;gBACjC,mEAAmE;gBACnE,iEAAiE;gBACjE,qEAAqE;gBACrE,mEAAmE;gBACnE,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC;gBAC1C,MAAM,QAAQ,GAAG,OAAO,OAAO,EAAE,GAAG,KAAK,UAAU,CAAC;gBACpD,MAAM,SAAS,GACb,CAAC,QAAQ;oBACT,OAAO,OAAO,EAAE,KAAK,KAAK,UAAU;oBACpC,OAAO,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC;gBACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CACT,GAAG,SAAS,sFAAsF,CACnG,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,IAAI,OAA2B,CAAC;gBAChC,IAAI,CAAC;oBACH,oEAAoE;oBACpE,OAAO,GAAG,MAAM,CAAC,GAAG,SAAS,eAAe,CAAC,EAAE,OAAO,CAAC;gBACzD,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,GAAG,SAAS,CAAC;gBACtB,CAAC;gBACD,MAAM,GAAG;oBACP,MAAM;oBACN,MAAM,EAAE,SAAS;oBACjB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe;iBAC1E,CAAC;gBACF,MAAM;YACR,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtF,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,IAAI,MAAM;YAAE,MAAM;IACpB,CAAC;IAED,0EAA0E;IAC1E,mEAAmE;IACnE,mEAAmE;IACnE,IAAI,QAAQ,EAAE,CAAC;QACb,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,YAAY,GAAG,MAAM,CAAC;IACxB,CAAC;IACD,+EAA+E;IAC/E,wEAAwE;IACxE,IAAI,OAAO,EAAE,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC;IAC/C,YAAY,GAAG,SAAS,CAAC;IACzB,gBAAgB,GAAG,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0EAA0E;IAC1E,IACE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;QAC9B,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;QAC9B,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAC/B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,qDAAqD;IACrD,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;IACpD,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAElE,qDAAqD;IACrD,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAEhD,oDAAoD;IACpD,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjD,sCAAsC;IACtC,IAAI,iBAAiB,IAAI,cAAc,IAAI,YAAY,EAAE,CAAC;QACxD,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;IACtC,CAAC;IAED,2DAA2D;IAC3D,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["// Package and Module Resolution Utilities\n// ESM-compatible helpers for detecting and resolving optional dependencies\n\nimport { createRequire } from 'module';\nimport { dirname, join } from 'path';\nimport { existsSync, realpathSync } from 'fs';\nimport { pathToFileURL } from 'url';\n\n/**\n * Check if a package is available in the user's node_modules\n * Uses ESM-compatible module resolution from the user's working directory\n *\n * @param packageName - The name of the package to check (e.g., 'socket.io', 'zod')\n * @returns true if the package is installed, false otherwise\n *\n * @example\n * if (isPackageAvailable('socket.io')) {\n * // socket.io is installed, safe to import\n * const { Server } = await import('socket.io');\n * }\n */\nexport function isPackageAvailable(packageName: string): boolean {\n try {\n const userRequire = createRequire(join(process.cwd(), 'package.json'));\n userRequire.resolve(packageName);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Resolve a package path from the user's node_modules\n * Uses ESM-compatible module resolution from the user's working directory\n *\n * @param packageName - The name of the package to resolve\n * @returns The resolved package path\n * @throws Error if the package is not found\n *\n * @example\n * const socketIOPath = resolveUserPackage('socket.io');\n * const { Server } = await import(socketIOPath);\n */\nexport function resolveUserPackage(packageName: string): string {\n const userRequire = createRequire(join(process.cwd(), 'package.json'));\n return userRequire.resolve(packageName);\n}\n\n/**\n * Create a require function for the user's working directory\n * Useful for resolving packages installed by the user, not in Moro's dependencies\n *\n * @returns A require function scoped to the user's working directory\n *\n * @example\n * const userRequire = createUserRequire();\n * const packagePath = userRequire.resolve('some-package');\n */\nexport function createUserRequire() {\n return createRequire(join(process.cwd(), 'package.json'));\n}\n\n// ---------------------------------------------------------------------------\n// Native HTTP engine loading\n// ---------------------------------------------------------------------------\n\n/**\n * Package names probed for the native HTTP engine, in priority order.\n * '@morojs/engine' is Moro's own engine (installed as an optionalDependency of\n * the framework); 'uWebSockets.js' is honored as a legacy user-installed peer.\n */\nexport const NATIVE_ENGINE_PACKAGES = ['@morojs/engine', 'uWebSockets.js'] as const;\n\nconst FRAMEWORK_PACKAGE_NAME = '@morojs/moro';\n\n/** Feature flags the framework gates option-passing on, so it never hands a\n * serve() option to an engine build that predates it. Everything defaults\n * false, so an older engine behaves exactly as it did before these existed. */\nexport interface EngineCapabilities {\n /** The full serve() limit surface is parsed (engine >= 1.1.0). */\n limits: boolean;\n /** In-process TLS termination via options.ssl (engine >= 1.2.0). */\n tls: boolean;\n /** ALPN HTTP/2 via options.http2 (engine >= 1.4.0). */\n http2: boolean;\n /** WebSocket permessage-deflate via options.wsDeflate (engine >= 1.5.0). */\n wsDeflate: boolean;\n}\n\nexport interface NativeEngineLoadResult {\n /** The loaded engine module (CJS namespace: App, SSLApp, ...) */\n module: any;\n /** Which package satisfied the load */\n source: string;\n /** The engine package's version, when its package.json is resolvable */\n version?: string;\n /** Feature flags (Moro-shaped engine only; all-false for uWS or an\n * engine too old to advertise them). */\n capabilities?: EngineCapabilities;\n}\n\nconst NO_CAPABILITIES: EngineCapabilities = {\n limits: false,\n tls: false,\n http2: false,\n wsDeflate: false,\n};\n\nconst capabilitiesCache = new WeakMap<object, EngineCapabilities>();\n\n/**\n * Feature-detect a loaded engine module. Reads probe().capabilities when the\n * engine exposes it (>= 1.1.0); otherwise everything is false so the framework\n * passes only the options an older engine understood. uWS-style modules (no\n * probe/serve) report all-false — their SSL/limits go through the uWS-specific\n * paths, not these flags.\n */\nexport function getEngineCapabilities(module: any): EngineCapabilities {\n const surface = module?.default || module;\n if (!surface || typeof surface !== 'object') return NO_CAPABILITIES;\n const cached = capabilitiesCache.get(surface);\n if (cached) return cached;\n\n let caps: EngineCapabilities = NO_CAPABILITIES;\n try {\n if (typeof surface.probe === 'function') {\n const probe = surface.probe();\n const c = probe?.capabilities;\n if (c && typeof c === 'object') {\n caps = {\n limits: c.limits === true,\n tls: c.tls === true,\n http2: c.http2 === true,\n wsDeflate: c.wsDeflate === true,\n };\n }\n }\n } catch {\n caps = NO_CAPABILITIES;\n }\n capabilitiesCache.set(surface, caps);\n return caps;\n}\n\n// undefined = never attempted, null = attempted and failed\nlet cachedEngine: NativeEngineLoadResult | null | undefined;\nlet engineLoadErrors: string[] = [];\n\n/**\n * Locate the installed framework package directory so the engine (a dependency\n * of moro, not of the user's app) resolves under strict layouts like pnpm's.\n * Walks up from cwd looking for node_modules/@morojs/moro, resolving symlinks\n * so pnpm's store-linked layout anchors requires next to moro's own deps.\n * Inside the framework repo itself (tests, examples) cwd is the framework dir.\n */\nfunction findFrameworkAnchor(): ReturnType<typeof createRequire> | null {\n try {\n const cwdPackageJson = join(process.cwd(), 'package.json');\n if (existsSync(cwdPackageJson)) {\n const require = createRequire(cwdPackageJson);\n const name = require(cwdPackageJson)?.name;\n if (name === FRAMEWORK_PACKAGE_NAME) {\n return require;\n }\n }\n } catch {\n // fall through to the node_modules walk\n }\n\n let dir = process.cwd();\n for (;;) {\n const packageJson = join(dir, 'node_modules', '@morojs', 'moro', 'package.json');\n try {\n if (existsSync(packageJson)) {\n return createRequire(join(realpathSync(dirname(packageJson)), 'package.json'));\n }\n } catch {\n // unreadable/broken link - keep walking up\n }\n const parent = dirname(dir);\n if (parent === dir) return null;\n dir = parent;\n }\n}\n\n/**\n * Synchronously load the native HTTP engine, trying '@morojs/engine' first and\n * falling back to a user-installed 'uWebSockets.js'. Loading is require-based\n * (both packages are CJS at their core - .node addon loading is require-based),\n * so the instance is shared with any later import() via the CJS module cache.\n *\n * The default call is memoized: the engine either loads once per process or it\n * doesn't. Failure details are retained for logging via\n * getNativeEngineLoadErrors().\n *\n * @param options.candidates - Override the probed package names (testing).\n * When provided, the call bypasses the cache.\n * @returns The loaded engine and its source package, or null if none loads\n */\nexport function loadNativeEngine(options?: {\n candidates?: readonly string[];\n /** When provided, every per-attempt failure message is appended here, so a\n * candidate-override caller (which bypasses the memoized diagnostics) can\n * still report exactly WHY the engine didn't load — not just \"not installed\". */\n collectErrors?: string[];\n}): NativeEngineLoadResult | null {\n const useCache = !options?.candidates;\n if (useCache && cachedEngine !== undefined) {\n if (options?.collectErrors && !cachedEngine) {\n options.collectErrors.push(...engineLoadErrors);\n }\n return cachedEngine;\n }\n\n const candidates = options?.candidates ?? NATIVE_ENGINE_PACKAGES;\n const errors: string[] = [];\n let result: NativeEngineLoadResult | null = null;\n\n const frameworkRequire = findFrameworkAnchor();\n const userRequire = createUserRequire();\n\n for (const candidate of candidates) {\n // Moro's own engine lives in moro's dependencies (framework anchor first);\n // the legacy uWS peer dep lives in the user's node_modules (cwd first).\n const anchors =\n candidate === 'uWebSockets.js'\n ? [userRequire, frameworkRequire]\n : [frameworkRequire, userRequire];\n\n for (const anchor of anchors) {\n if (!anchor) continue;\n try {\n const module = anchor(candidate);\n // Capability check: the HTTP server needs either a uWS-style App()\n // factory or the Moro-shaped engine surface (serve()/respond()).\n // A package that loads but can't serve (e.g. a pre-M1 @morojs/engine\n // that only exposes probe()) must not shadow a usable alternative.\n const surface = module?.default || module;\n const uwsStyle = typeof surface?.App === 'function';\n const moroStyle =\n !uwsStyle &&\n typeof surface?.serve === 'function' &&\n typeof surface?.respond === 'function';\n if (!uwsStyle && !moroStyle) {\n errors.push(\n `${candidate}: loaded but provides neither App() nor serve()/respond() - not a usable HTTP engine`\n );\n continue;\n }\n let version: string | undefined;\n try {\n // May be blocked by the package's exports map - version is optional\n version = anchor(`${candidate}/package.json`)?.version;\n } catch {\n version = undefined;\n }\n result = {\n module,\n source: candidate,\n ...(version !== undefined ? { version } : {}),\n capabilities: moroStyle ? getEngineCapabilities(module) : NO_CAPABILITIES,\n };\n break;\n } catch (error) {\n const message = error instanceof Error ? error.message.split('\\n')[0] : String(error);\n errors.push(`${candidate}: ${message}`);\n }\n }\n if (result) break;\n }\n\n // Candidate-override probes (e.g. the clustering worker's uWS-only check)\n // must not clobber the diagnostics of the real default load, which\n // framework startup logging reads via getNativeEngineLoadErrors().\n if (useCache) {\n engineLoadErrors = result ? [] : [...new Set(errors)];\n cachedEngine = result;\n }\n // Hand this specific call's failure detail back to a caller that asked for it,\n // regardless of caching (so 'moro'/'uws' fallback reasons are precise).\n if (options?.collectErrors && !result) {\n options.collectErrors.push(...new Set(errors));\n }\n return result;\n}\n\n/**\n * Failure details from the most recent unsuccessful loadNativeEngine() call,\n * one entry per package/anchor attempt. Empty after a successful load.\n */\nexport function getNativeEngineLoadErrors(): readonly string[] {\n return engineLoadErrors;\n}\n\n/**\n * Clear the memoized engine load result. Testing only.\n */\nexport function resetNativeEngineLoaderForTesting(): void {\n cachedEngine = undefined;\n engineLoadErrors = [];\n}\n\n/**\n * Convert a file path to a file URL for ESM dynamic imports\n * This is required on Windows where absolute paths like C:\\path\\to\\module\n * need to be converted to file:/// URLs for dynamic import() to work\n *\n * @param filePath - The file path to convert (absolute or relative)\n * @returns A proper URL string for ESM import() that works cross-platform\n *\n * @example\n * const modulePath = 'C:\\\\Users\\\\project\\\\module.js';\n * const module = await import(filePathToImportURL(modulePath));\n */\nexport function filePathToImportURL(filePath: string): string {\n if (!filePath) {\n return filePath;\n }\n\n // If it's already a URL (starts with file:// or http(s)://), return as-is\n if (\n filePath.startsWith('file://') ||\n filePath.startsWith('http://') ||\n filePath.startsWith('https://')\n ) {\n return filePath;\n }\n\n // Check if it's a Windows absolute path (C:\\ or C:/)\n const windowsAbsolutePathRegex = /^[A-Za-z]:[\\\\//]/;\n const isWindowsAbsolute = windowsAbsolutePathRegex.test(filePath);\n\n // Check if it's a Unix absolute path (starts with /)\n const isUnixAbsolute = filePath.startsWith('/');\n\n // Check if it's a Windows UNC path (\\\\server\\share)\n const isWindowsUNC = filePath.startsWith('\\\\\\\\');\n\n // Convert absolute paths to file URLs\n if (isWindowsAbsolute || isUnixAbsolute || isWindowsUNC) {\n return pathToFileURL(filePath).href;\n }\n\n // For relative paths, return as-is (they work in import())\n return filePath;\n}\n"]}
|