@morojs/moro 1.7.30 → 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 +89 -46
- 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 +119 -48
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/config/config-validator.js +189 -8
- 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 +35 -4
- 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 +41 -3
- package/dist/core/framework.js +342 -95
- 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 +17 -23
- package/dist/core/http/http-server.js +109 -249
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/http2-server.d.ts +6 -16
- package/dist/core/http/http2-server.js +40 -83
- package/dist/core/http/http2-server.js.map +1 -1
- package/dist/core/http/index.d.ts +1 -0
- package/dist/core/http/index.js +3 -0
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/moro-engine-server.d.ts +263 -0
- package/dist/core/http/moro-engine-server.js +1962 -0
- package/dist/core/http/moro-engine-server.js.map +1 -0
- package/dist/core/http/utils/compression.d.ts +47 -0
- package/dist/core/http/utils/compression.js +132 -0
- package/dist/core/http/utils/compression.js.map +1 -0
- package/dist/core/http/utils/lazy-event-emitter.d.ts +11 -0
- package/dist/core/http/utils/lazy-event-emitter.js +69 -0
- package/dist/core/http/utils/lazy-event-emitter.js.map +1 -0
- package/dist/core/http/utils/multipart-parser.d.ts +32 -0
- package/dist/core/http/utils/multipart-parser.js +215 -0
- package/dist/core/http/utils/multipart-parser.js.map +1 -0
- package/dist/core/http/utils/query-parser.d.ts +1 -0
- package/dist/core/http/utils/query-parser.js +44 -0
- package/dist/core/http/utils/query-parser.js.map +1 -0
- package/dist/core/http/utils/size.d.ts +33 -0
- package/dist/core/http/utils/size.js +37 -0
- package/dist/core/http/utils/size.js.map +1 -0
- package/dist/core/http/utils/ssl-config.d.ts +69 -0
- package/dist/core/http/utils/ssl-config.js +116 -0
- package/dist/core/http/utils/ssl-config.js.map +1 -0
- package/dist/core/http/utils/uws-worker-clustering.js +45 -32
- package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
- package/dist/core/http/uws-http-server.d.ts +25 -3
- package/dist/core/http/uws-http-server.js +465 -86
- 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.d.ts +3 -0
- package/dist/core/middleware/built-in/compression/core.js +28 -34
- 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.d.ts +23 -0
- package/dist/core/networking/adapters/engine-adapter.js +365 -0
- package/dist/core/networking/adapters/engine-adapter.js.map +1 -0
- package/dist/core/networking/adapters/index.d.ts +1 -0
- package/dist/core/networking/adapters/index.js +1 -0
- 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 +27 -16
- 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.d.ts +68 -0
- package/dist/core/utilities/package-utils.js +198 -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 +2 -2
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +20 -1
- package/dist/moro.js +230 -70
- 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 +100 -15
- 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 +32 -17
package/dist/types/auth.d.ts
CHANGED
|
@@ -343,21 +343,21 @@ export type SignOutOptions = {
|
|
|
343
343
|
};
|
|
344
344
|
export interface AuthError extends Error {
|
|
345
345
|
type: string;
|
|
346
|
-
code?: string;
|
|
346
|
+
code?: string | undefined;
|
|
347
347
|
}
|
|
348
348
|
export declare class SignInError extends Error implements AuthError {
|
|
349
349
|
type: string;
|
|
350
|
-
code?: string;
|
|
350
|
+
code?: string | undefined;
|
|
351
351
|
constructor(message: string, code?: string);
|
|
352
352
|
}
|
|
353
353
|
export declare class CallbackError extends Error implements AuthError {
|
|
354
354
|
type: string;
|
|
355
|
-
code?: string;
|
|
355
|
+
code?: string | undefined;
|
|
356
356
|
constructor(message: string, code?: string);
|
|
357
357
|
}
|
|
358
358
|
export declare class SessionError extends Error implements AuthError {
|
|
359
359
|
type: string;
|
|
360
|
-
code?: string;
|
|
360
|
+
code?: string | undefined;
|
|
361
361
|
constructor(message: string, code?: string);
|
|
362
362
|
}
|
|
363
363
|
export type { AuthProvider as Provider };
|
package/dist/types/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAoZA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,IAAI,GAAG,aAAa,CAAC;IACrB,IAAI,CAAU;IAEd,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,IAAI,GAAG,eAAe,CAAC;IACvB,IAAI,CAAU;IAEd,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,GAAG,cAAc,CAAC;IACtB,IAAI,CAAU;IAEd,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAoZA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,IAAI,GAAG,aAAa,CAAC;IACrB,IAAI,CAAsB;IAE1B,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,IAAI,GAAG,eAAe,CAAC;IACvB,IAAI,CAAsB;IAE1B,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,GAAG,cAAc,CAAC;IACtB,IAAI,CAAsB;IAE1B,YAAY,OAAe,EAAE,IAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF","sourcesContent":["// Auth Types for MoroJS (Better Auth Compatible)\nexport interface AuthProvider {\n id: string;\n name: string;\n type: 'oauth' | 'oidc' | 'credentials' | 'email';\n\n // OAuth/OIDC specific\n authorization?: string | { url: string; params?: Record<string, any> };\n token?: string | { url: string; params?: Record<string, any> };\n userinfo?: string | { url: string; params?: Record<string, any> };\n issuer?: string;\n wellKnown?: string;\n\n // Client configuration\n clientId?: string;\n clientSecret?: string;\n\n // Scope and claims\n scope?: string;\n claims?: Record<string, any>;\n\n // Profile mapping\n profile?: (profile: any, tokens: any) => Promise<any> | any;\n\n // Custom authorization parameters\n authorization_params?: Record<string, any>;\n\n // Token handling\n token_endpoint_auth_method?: 'client_secret_post' | 'client_secret_basic';\n\n // Additional provider-specific options\n [key: string]: any;\n}\n\nexport interface OAuthProvider extends AuthProvider {\n type: 'oauth';\n authorization: string | { url: string; params?: Record<string, any> };\n token: string | { url: string; params?: Record<string, any> };\n userinfo?: string | { url: string; params?: Record<string, any> };\n}\n\nexport interface OIDCProvider extends AuthProvider {\n type: 'oidc';\n issuer: string;\n wellKnown?: string;\n}\n\nexport interface CredentialsProvider extends AuthProvider {\n type: 'credentials';\n credentials: Record<\n string,\n {\n label?: string;\n type?: string;\n placeholder?: string;\n [key: string]: any;\n }\n >;\n authorize: (credentials: Record<string, any>, req: any) => Promise<any> | any;\n}\n\nexport interface EmailProvider extends AuthProvider {\n type: 'email';\n server:\n | string\n | {\n host: string;\n port: number;\n auth: {\n user: string;\n pass: string;\n };\n secure?: boolean;\n tls?: any;\n };\n from: string;\n sendVerificationRequest?: (params: {\n identifier: string;\n url: string;\n expires: Date;\n provider: EmailProvider;\n token: string;\n theme: any;\n request: any;\n }) => Promise<void>;\n}\n\nexport interface AuthUser {\n id: string;\n name?: string | null;\n email?: string | null;\n image?: string | null;\n emailVerified?: Date | null;\n [key: string]: any;\n}\n\nexport interface AuthAccount {\n userId: string;\n type: 'oauth' | 'oidc' | 'email' | 'credentials';\n provider: string;\n providerAccountId: string;\n access_token?: string;\n expires_at?: number;\n id_token?: string;\n refresh_token?: string;\n refresh_token_expires_in?: number;\n scope?: string;\n token_type?: string;\n session_state?: string;\n [key: string]: any;\n}\n\nexport interface AuthSession {\n sessionToken: string;\n userId: string;\n expires: Date;\n user: AuthUser;\n [key: string]: any;\n}\n\nexport interface VerificationToken {\n identifier: string;\n token: string;\n expires: Date;\n}\n\nexport interface AuthJWT {\n name?: string | null;\n email?: string | null;\n picture?: string | null;\n sub?: string;\n iat?: number;\n exp?: number;\n jti?: string;\n [key: string]: any;\n}\n\nexport interface AuthCallbacks {\n signIn?: (params: {\n user: AuthUser;\n account: AuthAccount | null;\n profile?: any;\n email?: { verificationRequest?: boolean };\n credentials?: Record<string, any>;\n }) => Awaitable<boolean | string>;\n\n redirect?: (params: { url: string; baseUrl: string }) => Awaitable<string>;\n\n session?: (params: {\n session: AuthSession;\n user: AuthUser;\n token: AuthJWT;\n }) => Awaitable<AuthSession>;\n\n jwt?: (params: {\n token: AuthJWT;\n user?: AuthUser;\n account?: AuthAccount;\n profile?: any;\n trigger?: 'signIn' | 'signUp' | 'update';\n isNewUser?: boolean;\n session?: any;\n }) => Awaitable<AuthJWT>;\n}\n\nexport interface AuthPages {\n signIn?: string;\n signOut?: string;\n error?: string;\n verifyRequest?: string;\n newUser?: string;\n}\n\nexport interface AuthEvents {\n signIn?: (message: {\n user: AuthUser;\n account: AuthAccount | null;\n profile?: any;\n isNewUser?: boolean;\n }) => Awaitable<void>;\n signOut?: (message: { session: AuthSession; token: AuthJWT }) => Awaitable<void>;\n createUser?: (message: { user: AuthUser }) => Awaitable<void>;\n updateUser?: (message: { user: AuthUser }) => Awaitable<void>;\n linkAccount?: (message: {\n user: AuthUser;\n account: AuthAccount;\n profile: any;\n }) => Awaitable<void>;\n session?: (message: { session: AuthSession; token: AuthJWT }) => Awaitable<void>;\n}\n\nexport interface AuthCookies {\n sessionToken: {\n name: string;\n options?: CookieOptions;\n };\n callbackUrl: {\n name: string;\n options?: CookieOptions;\n };\n csrfToken: {\n name: string;\n options?: CookieOptions;\n };\n pkceCodeVerifier: {\n name: string;\n options?: CookieOptions;\n };\n state: {\n name: string;\n options?: CookieOptions;\n };\n nonce: {\n name: string;\n options?: CookieOptions;\n };\n}\n\nexport interface CookieOptions {\n domain?: string;\n expires?: Date;\n httpOnly?: boolean;\n maxAge?: number;\n path?: string;\n sameSite?: 'strict' | 'lax' | 'none';\n secure?: boolean;\n}\n\nexport interface AuthTheme {\n colorScheme?: 'light' | 'dark' | 'auto';\n logo?: string;\n brandColor?: string;\n buttonText?: string;\n [key: string]: any;\n}\n\nexport interface AuthLogger {\n error: (code: string, metadata?: any) => void;\n warn: (code: string) => void;\n debug: (code: string, metadata?: any) => void;\n}\n\nexport interface AuthAdapter {\n createUser?: (user: Omit<AuthUser, 'id'>) => Awaitable<AuthUser>;\n getUser?: (id: string) => Awaitable<AuthUser | null>;\n getUserByEmail?: (email: string) => Awaitable<AuthUser | null>;\n getUserByAccount?: (\n providerAccountId: Pick<AuthAccount, 'provider' | 'providerAccountId'>\n ) => Awaitable<AuthUser | null>;\n updateUser?: (user: Partial<AuthUser> & Pick<AuthUser, 'id'>) => Awaitable<AuthUser>;\n deleteUser?: (userId: string) => Awaitable<void>;\n linkAccount?: (account: AuthAccount) => Awaitable<void>;\n unlinkAccount?: (\n providerAccountId: Pick<AuthAccount, 'provider' | 'providerAccountId'>\n ) => Awaitable<void>;\n createSession?: (session: {\n sessionToken: string;\n userId: string;\n expires: Date;\n }) => Awaitable<AuthSession>;\n getSessionAndUser?: (\n sessionToken: string\n ) => Awaitable<{ session: AuthSession; user: AuthUser } | null>;\n updateSession?: (\n session: Partial<AuthSession> & Pick<AuthSession, 'sessionToken'>\n ) => Awaitable<AuthSession | null | undefined>;\n deleteSession?: (sessionToken: string) => Awaitable<void>;\n createVerificationToken?: (\n verificationToken: VerificationToken\n ) => Awaitable<VerificationToken | null | undefined>;\n useVerificationToken?: (params: {\n identifier: string;\n token: string;\n }) => Awaitable<VerificationToken | null>;\n}\n\nexport interface AuthOptions {\n // Core configuration\n providers: AuthProvider[];\n secret?: string;\n\n // Session configuration\n session?: {\n strategy?: 'jwt' | 'database';\n maxAge?: number; // in seconds\n updateAge?: number; // in seconds\n generateSessionToken?: () => string;\n };\n\n // JWT configuration\n jwt?: {\n secret?: string;\n maxAge?: number;\n encode?: (params: { token?: AuthJWT; secret: string; maxAge?: number }) => Awaitable<string>;\n decode?: (params: { token?: string; secret: string }) => Awaitable<AuthJWT | null>;\n };\n\n // Callbacks\n callbacks?: AuthCallbacks;\n\n // Events\n events?: AuthEvents;\n\n // Adapter\n adapter?: AuthAdapter;\n\n // Pages\n pages?: AuthPages;\n\n // Cookies\n cookies?: Partial<AuthCookies>;\n\n // Theme\n theme?: AuthTheme;\n\n // Logger\n logger?: AuthLogger;\n\n // Configuration\n debug?: boolean;\n basePath?: string;\n useSecureCookies?: boolean;\n trustHost?: boolean;\n\n // CSRF\n skipCSRFCheck?: string[];\n\n // Experimental features\n experimental?: {\n enableWebAuthn?: boolean;\n [key: string]: any;\n };\n}\n\nexport interface AuthRequest {\n user?: AuthUser;\n session?: AuthSession;\n token?: string;\n isAuthenticated: boolean;\n\n // Auth methods\n signIn: (\n provider?: string,\n options?: {\n callbackUrl?: string;\n redirect?: boolean;\n [key: string]: any;\n }\n ) => Promise<any>;\n\n signOut: (options?: { callbackUrl?: string; redirect?: boolean }) => Promise<any>;\n\n getSession: () => Promise<AuthSession | null>;\n getToken: () => Promise<AuthJWT | null>;\n\n // CSRF protection\n getCsrfToken: () => Promise<string>;\n\n // Providers\n getProviders: () => Promise<Record<string, AuthProvider>>;\n}\n\nexport interface AuthResponse {\n status: number;\n headers?: Record<string, string>;\n body?: any;\n redirect?: string;\n}\n\nexport interface AuthConfig extends AuthOptions {\n // Runtime configuration\n basePath: string;\n baseUrl: string;\n\n // Internal state\n providers: AuthProvider[];\n\n // Computed values\n skipCSRFCheck: string[];\n useSecureCookies: boolean;\n}\n\n// Utility types\nexport type Awaitable<T> = T | Promise<T>;\n\nexport type ProviderType = 'oauth' | 'oidc' | 'credentials' | 'email';\n\nexport type SignInOptions = {\n callbackUrl?: string;\n redirect?: boolean;\n [key: string]: any;\n};\n\nexport type SignOutOptions = {\n callbackUrl?: string;\n redirect?: boolean;\n};\n\n// Error types\nexport interface AuthError extends Error {\n type: string;\n code?: string | undefined;\n}\n\nexport class SignInError extends Error implements AuthError {\n type = 'SignInError';\n code?: string | undefined;\n\n constructor(message: string, code?: string) {\n super(message);\n this.code = code;\n }\n}\n\nexport class CallbackError extends Error implements AuthError {\n type = 'CallbackError';\n code?: string | undefined;\n\n constructor(message: string, code?: string) {\n super(message);\n this.code = code;\n }\n}\n\nexport class SessionError extends Error implements AuthError {\n type = 'SessionError';\n code?: string | undefined;\n\n constructor(message: string, code?: string) {\n super(message);\n this.code = code;\n }\n}\n\n// Re-export for convenience\nexport type { AuthProvider as Provider };\nexport type { AuthUser as User };\nexport type { AuthSession as Session };\nexport type { AuthAccount as Account };\nexport type { AuthJWT as JWT };\n"]}
|
package/dist/types/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/types/cache.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/types/cache.ts"],"names":[],"mappings":"","sourcesContent":["// Cache Types and Interfaces\nexport interface CacheAdapter {\n get(key: string): Promise<any>;\n set(key: string, value: any, ttl?: number): Promise<void>;\n del(key: string): Promise<void>;\n clear(): Promise<void>;\n exists(key: string): Promise<boolean>;\n ttl(key: string): Promise<number>;\n}\n\nexport interface CacheStrategy {\n key: (req: any) => string;\n ttl: number;\n condition?: (req: any, res: any) => boolean;\n invalidateOn?: string[];\n}\n\nexport interface CacheOptions {\n adapter?: string | CacheAdapter;\n adapterOptions?: any;\n strategies?: {\n [pattern: string]: CacheStrategy;\n };\n defaultTtl?: number;\n keyPrefix?: string;\n\n // HTTP Caching Options\n httpCaching?: boolean;\n maxAge?: number;\n cacheControl?: string;\n staleWhileRevalidate?: number;\n vary?: string[];\n etag?: boolean | 'weak' | 'strong';\n conditionalRequests?: boolean;\n generateETag?: (content: string, type?: string) => string;\n}\n\nexport interface CachedResponse {\n body: any;\n status: number;\n headers: Record<string, any>;\n contentType?: string;\n timestamp: number;\n}\n"]}
|
package/dist/types/cdn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdn.js","sourceRoot":"","sources":["../../src/types/cdn.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"cdn.js","sourceRoot":"","sources":["../../src/types/cdn.ts"],"names":[],"mappings":"","sourcesContent":["// CDN Types and Interfaces\nexport interface CDNAdapter {\n purge(urls: string[]): Promise<void>;\n prefetch?(urls: string[]): Promise<void>;\n getStats?(): Promise<any>;\n setHeaders(response: any): void;\n}\n\nexport interface CDNOptions {\n adapter?: string | CDNAdapter;\n adapterOptions?: any;\n autoInvalidate?: boolean;\n invalidationPatterns?: string[];\n}\n\nexport interface CDNStats {\n provider: string;\n status: string;\n lastPurge?: Date;\n hitRate?: string;\n bandwidth?: string;\n}\n"]}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -9,13 +9,88 @@ export type OriginFunction = (origin: string | undefined, req: any) => string |
|
|
|
9
9
|
export type DeepPartial<T> = T extends object ? T extends Array<infer U> ? Array<DeepPartial<U>> : T extends (...args: any[]) => any ? T : {
|
|
10
10
|
[P in keyof T]?: DeepPartial<T[P]>;
|
|
11
11
|
} : T;
|
|
12
|
+
/** Unified SSL/TLS config (superset of both historical shapes). */
|
|
13
|
+
export interface SSLConfig {
|
|
14
|
+
/** File-path shape (uWS-style; keyFile/certFile also accepted) */
|
|
15
|
+
key_file_name?: string;
|
|
16
|
+
cert_file_name?: string;
|
|
17
|
+
ca_file_name?: string | string[];
|
|
18
|
+
keyFile?: string;
|
|
19
|
+
certFile?: string;
|
|
20
|
+
caFile?: string | string[];
|
|
21
|
+
/** Inline-PEM shape (node-style) */
|
|
22
|
+
key?: string | Buffer;
|
|
23
|
+
cert?: string | Buffer;
|
|
24
|
+
ca?: string | Buffer | Array<string | Buffer>;
|
|
25
|
+
passphrase?: string;
|
|
26
|
+
minVersion?: 'TLSv1.2' | 'TLSv1.3';
|
|
27
|
+
requestCert?: boolean;
|
|
28
|
+
rejectUnauthorized?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/** Per-phase receive timeouts. 0 = use the per-server default / disabled. */
|
|
31
|
+
export interface ServerTimeoutsConfig {
|
|
32
|
+
/** Full-request receive budget (ms); does NOT reset on activity. */
|
|
33
|
+
request?: number;
|
|
34
|
+
/** Socket inactivity timeout (ms). */
|
|
35
|
+
idle?: number;
|
|
36
|
+
/** Node keep-alive socket timeout (ms). Default 5000. */
|
|
37
|
+
keepAlive?: number;
|
|
38
|
+
/** Node headers-received timeout (ms). Default 6000. */
|
|
39
|
+
headers?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface MultipartLimitsConfig {
|
|
42
|
+
maxParts?: number;
|
|
43
|
+
maxPartHeaderBytes?: number | string;
|
|
44
|
+
maxFiles?: number;
|
|
45
|
+
maxFileSize?: number | string;
|
|
46
|
+
}
|
|
47
|
+
/** Fine-grained limits; every value is a documented default, not a hard cap. */
|
|
48
|
+
export interface ServerLimitsConfig {
|
|
49
|
+
/** Max request head (request line + headers) size. Node maxHeaderSize / engine maxHeadSize. */
|
|
50
|
+
maxHeaderSize?: number | string;
|
|
51
|
+
/** Max header count. Node maxHeadersCount / engine maxHeaders. */
|
|
52
|
+
maxHeaders?: number;
|
|
53
|
+
multipart?: MultipartLimitsConfig;
|
|
54
|
+
/** Reassembled WebSocket message cap (engine wsMaxMessageSize). */
|
|
55
|
+
wsMaxMessageSize?: number | string;
|
|
56
|
+
/** WebSocket send backpressure cap (engine wsBackpressureLimit). 0 = unlimited. */
|
|
57
|
+
wsBackpressureLimit?: number | string;
|
|
58
|
+
/** Write-queue high-water mark (engine writeHighWaterMark). */
|
|
59
|
+
writeHighWaterMark?: number | string;
|
|
60
|
+
/** Per-connection not-yet-parsed backlog cap (engine maxPendingBytes). */
|
|
61
|
+
maxPendingBytes?: number | string;
|
|
62
|
+
}
|
|
63
|
+
export interface Http2SettingsConfig {
|
|
64
|
+
maxConcurrentStreams?: number;
|
|
65
|
+
initialWindowSize?: number;
|
|
66
|
+
maxFrameSize?: number;
|
|
67
|
+
maxHeaderListSize?: number;
|
|
68
|
+
headerTableSize?: number;
|
|
69
|
+
enablePush?: boolean;
|
|
70
|
+
enableConnectProtocol?: boolean;
|
|
71
|
+
maxHeaderSize?: number;
|
|
72
|
+
}
|
|
12
73
|
export interface ServerConfig {
|
|
13
74
|
port: number;
|
|
14
75
|
host: string;
|
|
15
76
|
maxConnections: number;
|
|
77
|
+
/** @deprecated Use timeouts.request. Kept as an alias; still honored. */
|
|
16
78
|
timeout: number;
|
|
17
79
|
bodySizeLimit: string;
|
|
18
80
|
maxUploadSize: string;
|
|
81
|
+
/** Per-phase receive timeouts (finally applied to every runtime). */
|
|
82
|
+
timeouts?: ServerTimeoutsConfig;
|
|
83
|
+
/** Fine-grained size/count limits, passed through to whichever runtime serves. */
|
|
84
|
+
limits?: ServerLimitsConfig;
|
|
85
|
+
/** TCP listen backlog. */
|
|
86
|
+
backlog?: number;
|
|
87
|
+
/** HTTP/2: true, or an options object. Served natively by the engine when
|
|
88
|
+
* it supports h2 (feature-detected), else by the Node http2 server. */
|
|
89
|
+
http2?: boolean | {
|
|
90
|
+
allowHTTP1?: boolean;
|
|
91
|
+
maxSessionMemory?: number;
|
|
92
|
+
settings?: Http2SettingsConfig;
|
|
93
|
+
};
|
|
19
94
|
requestTracking: {
|
|
20
95
|
enabled: boolean;
|
|
21
96
|
};
|
|
@@ -25,12 +100,20 @@ export interface ServerConfig {
|
|
|
25
100
|
errorBoundary: {
|
|
26
101
|
enabled: boolean;
|
|
27
102
|
};
|
|
103
|
+
/**
|
|
104
|
+
* HTTP engine selection. Default: 'moro'.
|
|
105
|
+
* - 'moro' (default): Moro's own native engine (@morojs/engine), falling back
|
|
106
|
+
* to the Node.js http server if it cannot load on this platform/Node ABI
|
|
107
|
+
* - 'node': the Node.js http server (no native engine)
|
|
108
|
+
* - 'uws': opt in to uWebSockets.js, falling back to Node.js if it cannot load
|
|
109
|
+
* Any chosen engine that cannot load degrades to Node.js and logs why; the app
|
|
110
|
+
* never fails to boot. Inspect what actually booted via app.engine.
|
|
111
|
+
*/
|
|
112
|
+
engine?: 'moro' | 'node' | 'uws';
|
|
113
|
+
/** @deprecated Use engine: 'uws' instead. Enable uWebSockets for both HTTP and WebSocket */
|
|
28
114
|
useUWebSockets?: boolean;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
cert_file_name?: string;
|
|
32
|
-
passphrase?: string;
|
|
33
|
-
};
|
|
115
|
+
/** Unified SSL/TLS config; flows to whichever runtime serves. */
|
|
116
|
+
ssl?: SSLConfig;
|
|
34
117
|
}
|
|
35
118
|
export interface ServiceDiscoveryConfig {
|
|
36
119
|
enabled: boolean;
|
|
@@ -261,23 +344,23 @@ export interface SecurityConfig {
|
|
|
261
344
|
}
|
|
262
345
|
export interface ExternalServicesConfig {
|
|
263
346
|
stripe?: {
|
|
264
|
-
secretKey?: string;
|
|
265
|
-
publishableKey?: string;
|
|
266
|
-
webhookSecret?: string;
|
|
347
|
+
secretKey?: string | undefined;
|
|
348
|
+
publishableKey?: string | undefined;
|
|
349
|
+
webhookSecret?: string | undefined;
|
|
267
350
|
apiVersion: string;
|
|
268
351
|
};
|
|
269
352
|
paypal?: {
|
|
270
|
-
clientId?: string;
|
|
271
|
-
clientSecret?: string;
|
|
272
|
-
webhookId?: string;
|
|
353
|
+
clientId?: string | undefined;
|
|
354
|
+
clientSecret?: string | undefined;
|
|
355
|
+
webhookId?: string | undefined;
|
|
273
356
|
environment: 'sandbox' | 'production';
|
|
274
357
|
};
|
|
275
358
|
smtp?: {
|
|
276
|
-
host?: string;
|
|
359
|
+
host?: string | undefined;
|
|
277
360
|
port: number;
|
|
278
361
|
secure: boolean;
|
|
279
|
-
username?: string;
|
|
280
|
-
password?: string;
|
|
362
|
+
username?: string | undefined;
|
|
363
|
+
password?: string | undefined;
|
|
281
364
|
};
|
|
282
365
|
}
|
|
283
366
|
export interface PerformanceConfig {
|
|
@@ -285,6 +368,8 @@ export interface PerformanceConfig {
|
|
|
285
368
|
enabled: boolean;
|
|
286
369
|
level: number;
|
|
287
370
|
threshold: number;
|
|
371
|
+
/** Encoding preference order (default ['br','gzip','deflate']). */
|
|
372
|
+
encodings?: Array<'br' | 'gzip' | 'deflate'>;
|
|
288
373
|
};
|
|
289
374
|
circuitBreaker: {
|
|
290
375
|
enabled: boolean;
|
|
@@ -295,7 +380,7 @@ export interface PerformanceConfig {
|
|
|
295
380
|
clustering: {
|
|
296
381
|
enabled: boolean;
|
|
297
382
|
workers: number | 'auto';
|
|
298
|
-
memoryPerWorkerGB?: number;
|
|
383
|
+
memoryPerWorkerGB?: number | undefined;
|
|
299
384
|
};
|
|
300
385
|
}
|
|
301
386
|
export interface WebSocketConfig {
|
package/dist/types/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,0DAA0D"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,0DAA0D","sourcesContent":["// TypeScript-based Configuration Types for Moro Framework\n\n/**\n * CORS origin function type for dynamic origin validation\n */\nexport type OriginFunction = (\n origin: string | undefined,\n req: any\n) => string | string[] | boolean | Promise<string | string[] | boolean>;\n\n/**\n * Deep partial type that makes all properties and nested properties optional\n * Used for user-provided configuration where only partial overrides are needed\n */\nexport type DeepPartial<T> = T extends object\n ? T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends (...args: any[]) => any\n ? T\n : { [P in keyof T]?: DeepPartial<T[P]> }\n : T;\n\n/** Unified SSL/TLS config (superset of both historical shapes). */\nexport interface SSLConfig {\n /** File-path shape (uWS-style; keyFile/certFile also accepted) */\n key_file_name?: string;\n cert_file_name?: string;\n ca_file_name?: string | string[];\n keyFile?: string;\n certFile?: string;\n caFile?: string | string[];\n /** Inline-PEM shape (node-style) */\n key?: string | Buffer;\n cert?: string | Buffer;\n ca?: string | Buffer | Array<string | Buffer>;\n passphrase?: string;\n minVersion?: 'TLSv1.2' | 'TLSv1.3';\n requestCert?: boolean;\n rejectUnauthorized?: boolean;\n}\n\n/** Per-phase receive timeouts. 0 = use the per-server default / disabled. */\nexport interface ServerTimeoutsConfig {\n /** Full-request receive budget (ms); does NOT reset on activity. */\n request?: number;\n /** Socket inactivity timeout (ms). */\n idle?: number;\n /** Node keep-alive socket timeout (ms). Default 5000. */\n keepAlive?: number;\n /** Node headers-received timeout (ms). Default 6000. */\n headers?: number;\n}\n\nexport interface MultipartLimitsConfig {\n maxParts?: number;\n maxPartHeaderBytes?: number | string;\n maxFiles?: number;\n maxFileSize?: number | string;\n}\n\n/** Fine-grained limits; every value is a documented default, not a hard cap. */\nexport interface ServerLimitsConfig {\n /** Max request head (request line + headers) size. Node maxHeaderSize / engine maxHeadSize. */\n maxHeaderSize?: number | string;\n /** Max header count. Node maxHeadersCount / engine maxHeaders. */\n maxHeaders?: number;\n multipart?: MultipartLimitsConfig;\n /** Reassembled WebSocket message cap (engine wsMaxMessageSize). */\n wsMaxMessageSize?: number | string;\n /** WebSocket send backpressure cap (engine wsBackpressureLimit). 0 = unlimited. */\n wsBackpressureLimit?: number | string;\n /** Write-queue high-water mark (engine writeHighWaterMark). */\n writeHighWaterMark?: number | string;\n /** Per-connection not-yet-parsed backlog cap (engine maxPendingBytes). */\n maxPendingBytes?: number | string;\n}\n\nexport interface Http2SettingsConfig {\n maxConcurrentStreams?: number;\n initialWindowSize?: number;\n maxFrameSize?: number;\n maxHeaderListSize?: number;\n headerTableSize?: number;\n enablePush?: boolean;\n enableConnectProtocol?: boolean;\n maxHeaderSize?: number;\n}\n\nexport interface ServerConfig {\n port: number;\n host: string;\n maxConnections: number;\n /** @deprecated Use timeouts.request. Kept as an alias; still honored. */\n timeout: number;\n bodySizeLimit: string;\n maxUploadSize: string; // Maximum size for file uploads (multipart/form-data)\n /** Per-phase receive timeouts (finally applied to every runtime). */\n timeouts?: ServerTimeoutsConfig;\n /** Fine-grained size/count limits, passed through to whichever runtime serves. */\n limits?: ServerLimitsConfig;\n /** TCP listen backlog. */\n backlog?: number;\n /** HTTP/2: true, or an options object. Served natively by the engine when\n * it supports h2 (feature-detected), else by the Node http2 server. */\n http2?:\n | boolean\n | { allowHTTP1?: boolean; maxSessionMemory?: number; settings?: Http2SettingsConfig };\n requestTracking: {\n enabled: boolean;\n };\n requestLogging: {\n enabled: boolean;\n };\n errorBoundary: {\n enabled: boolean;\n };\n /**\n * HTTP engine selection. Default: 'moro'.\n * - 'moro' (default): Moro's own native engine (@morojs/engine), falling back\n * to the Node.js http server if it cannot load on this platform/Node ABI\n * - 'node': the Node.js http server (no native engine)\n * - 'uws': opt in to uWebSockets.js, falling back to Node.js if it cannot load\n * Any chosen engine that cannot load degrades to Node.js and logs why; the app\n * never fails to boot. Inspect what actually booted via app.engine.\n */\n engine?: 'moro' | 'node' | 'uws';\n /** @deprecated Use engine: 'uws' instead. Enable uWebSockets for both HTTP and WebSocket */\n useUWebSockets?: boolean;\n /** Unified SSL/TLS config; flows to whichever runtime serves. */\n ssl?: SSLConfig;\n}\n\nexport interface ServiceDiscoveryConfig {\n enabled: boolean;\n type: 'memory' | 'consul' | 'kubernetes';\n consulUrl: string;\n kubernetesNamespace: string;\n healthCheckInterval: number;\n retryAttempts: number;\n}\n\nexport interface DatabaseConfig {\n url?: string;\n redis?: {\n url: string;\n maxRetries: number;\n retryDelay: number;\n keyPrefix: string;\n };\n mysql?: {\n host: string;\n port: number;\n database?: string;\n username?: string;\n password?: string;\n connectionLimit: number;\n acquireTimeout: number;\n timeout: number;\n };\n postgresql?: {\n host: string;\n port: number;\n database?: string;\n user?: string;\n password?: string;\n connectionLimit: number;\n ssl?: boolean;\n };\n sqlite?: {\n filename: string;\n memory?: boolean;\n verbose?: boolean;\n };\n mongodb?: {\n url?: string;\n host?: string;\n port?: number;\n database?: string;\n username?: string;\n password?: string;\n };\n}\n\n// Validation error context passed to error handlers\nexport interface ValidationErrorContext {\n request: {\n method: string;\n path: string;\n url: string;\n headers: Record<string, any>;\n };\n route?: {\n path: string;\n method: string;\n };\n field: 'body' | 'query' | 'params' | 'headers';\n}\n\n// Validation error detail structure\nexport interface ValidationErrorDetail {\n field: string;\n message: string;\n code?: string;\n value?: any;\n path?: (string | number)[];\n}\n\n// Validation error response structure\nexport interface ValidationErrorResponse {\n status: number;\n body: any;\n headers?: Record<string, string>;\n}\n\n// Validation error handler function type\nexport type ValidationErrorHandler = (\n errors: ValidationErrorDetail[],\n context: ValidationErrorContext\n) => ValidationErrorResponse;\n\nexport interface ModuleDefaultsConfig {\n apiPrefix?: string; // Prefix for module routes, defaults to '/api/' - set to empty string '' to disable\n cache: {\n enabled: boolean;\n defaultTtl: number;\n maxSize: number;\n strategy: 'lru' | 'lfu' | 'fifo';\n };\n rateLimit: {\n enabled: boolean;\n defaultRequests: number;\n defaultWindow: number;\n skipSuccessfulRequests: boolean;\n skipFailedRequests: boolean;\n };\n validation: {\n enabled: boolean;\n stripUnknown: boolean;\n abortEarly: boolean;\n allowUnknown?: boolean;\n onError?: ValidationErrorHandler;\n };\n session?: {\n enabled: boolean;\n store: 'memory' | 'redis' | 'file';\n storeOptions?: {\n host?: string;\n port?: number;\n password?: string;\n keyPrefix?: string;\n path?: string;\n max?: number;\n };\n secret?: string;\n name?: string;\n rolling?: boolean;\n resave?: boolean;\n saveUninitialized?: boolean;\n cookie?: {\n maxAge?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n domain?: string;\n path?: string;\n };\n proxy?: boolean;\n unset?: 'destroy' | 'keep';\n };\n autoDiscovery: {\n enabled: boolean;\n paths: string[];\n patterns: string[];\n recursive: boolean;\n loadingStrategy: 'eager' | 'lazy' | 'conditional';\n watchForChanges: boolean;\n ignorePatterns: string[];\n loadOrder: 'alphabetical' | 'dependency' | 'custom';\n failOnError: boolean;\n maxDepth: number;\n };\n}\n\nexport interface LoggingConfig {\n level: 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n format: 'pretty' | 'json' | 'compact';\n enableColors: boolean;\n enableTimestamp: boolean;\n enableContext: boolean;\n // Opt-in: appends a JSON metadata object (e.g. {\"framework\":\"moro\",...}) to pretty log lines.\n // Has no effect on 'json' format - structured output always includes metadata.\n enableMetadata: boolean;\n // Opt-in: collects and renders per-log performance data such as memory usage (e.g. \"(210MB)\").\n // Disabling skips the process.memoryUsage() call on every log line.\n enablePerformance: boolean;\n outputs: {\n console: boolean;\n file: {\n enabled: boolean;\n path: string;\n maxSize: string;\n maxFiles: number;\n };\n webhook: {\n enabled: boolean;\n url?: string;\n headers: Record<string, string>;\n };\n };\n}\n\nexport interface SecurityConfig {\n cors: {\n enabled: boolean;\n origin: string | string[] | boolean | OriginFunction;\n methods: string[];\n allowedHeaders: string[];\n exposedHeaders?: string[];\n credentials: boolean;\n maxAge?: number;\n preflightContinue?: boolean;\n };\n helmet: {\n enabled: boolean;\n // Simplified options (backward compatible)\n contentSecurityPolicy?: boolean;\n hsts?: boolean;\n noSniff?: boolean;\n frameguard?: boolean;\n // Detailed options (for advanced configuration)\n xFrameOptions?: 'DENY' | 'SAMEORIGIN';\n xContentTypeOptions?: boolean;\n xXssProtection?: boolean;\n referrerPolicy?: string;\n strictTransportSecurity?: { maxAge?: number; includeSubDomains?: boolean };\n xDownloadOptions?: boolean;\n xPermittedCrossDomainPolicies?: boolean;\n };\n csrf?: {\n enabled: boolean;\n secret?: string;\n tokenLength?: number;\n cookieName?: string;\n headerName?: string;\n ignoreMethods?: string[];\n sameSite?: boolean;\n };\n csp?: {\n enabled: boolean;\n directives?: {\n defaultSrc?: string[];\n scriptSrc?: string[];\n styleSrc?: string[];\n imgSrc?: string[];\n connectSrc?: string[];\n fontSrc?: string[];\n objectSrc?: string[];\n mediaSrc?: string[];\n frameSrc?: string[];\n childSrc?: string[];\n workerSrc?: string[];\n formAction?: string[];\n upgradeInsecureRequests?: boolean;\n blockAllMixedContent?: boolean;\n };\n reportOnly?: boolean;\n reportUri?: string;\n nonce?: boolean;\n };\n rateLimit: {\n global: {\n enabled: boolean;\n requests: number;\n window: number;\n };\n };\n}\n\nexport interface ExternalServicesConfig {\n stripe?: {\n secretKey?: string | undefined;\n publishableKey?: string | undefined;\n webhookSecret?: string | undefined;\n apiVersion: string;\n };\n paypal?: {\n clientId?: string | undefined;\n clientSecret?: string | undefined;\n webhookId?: string | undefined;\n environment: 'sandbox' | 'production';\n };\n smtp?: {\n host?: string | undefined;\n port: number;\n secure: boolean;\n username?: string | undefined;\n password?: string | undefined;\n };\n}\n\nexport interface PerformanceConfig {\n compression: {\n enabled: boolean;\n level: number;\n threshold: number;\n /** Encoding preference order (default ['br','gzip','deflate']). */\n encodings?: Array<'br' | 'gzip' | 'deflate'>;\n };\n circuitBreaker: {\n enabled: boolean;\n failureThreshold: number;\n resetTimeout: number;\n monitoringPeriod: number;\n };\n clustering: {\n enabled: boolean;\n workers: number | 'auto';\n memoryPerWorkerGB?: number | undefined;\n };\n}\n\nexport interface WebSocketConfig {\n enabled: boolean;\n adapter?: string | 'socket.io' | 'ws' | 'uws';\n compression?: boolean;\n customIdGenerator?: () => string;\n options?: {\n cors?: {\n origin?: string | string[];\n credentials?: boolean;\n };\n path?: string;\n maxPayloadLength?: number;\n idleTimeout?: number;\n ssl?: {\n key_file_name?: string;\n cert_file_name?: string;\n passphrase?: string;\n };\n };\n}\n\nexport interface JobsConfig {\n enabled?: boolean;\n maxConcurrentJobs?: number;\n gracefulShutdownTimeout?: number;\n leaderElection?: {\n enabled?: boolean;\n strategy?: 'file' | 'redis' | 'none';\n lockPath?: string;\n lockTimeout?: number;\n heartbeatInterval?: number;\n };\n executor?: {\n maxRetries?: number;\n retryDelay?: number;\n retryBackoff?: 'linear' | 'exponential';\n retryBackoffMultiplier?: number;\n maxRetryDelay?: number;\n timeout?: number;\n enableCircuitBreaker?: boolean;\n circuitBreakerThreshold?: number;\n circuitBreakerResetTimeout?: number;\n enableMemoryMonitoring?: boolean;\n memoryThreshold?: number;\n };\n stateManager?: {\n persistPath?: string;\n historySize?: number;\n persistInterval?: number;\n enableAutoPersist?: boolean;\n enableRecovery?: boolean;\n };\n}\n\n// File-based routing configuration. When enabled, route files under the\n// configured directories are imported during startup (after module discovery)\n// so their `getApp().get(...)` registrations execute automatically.\nexport interface RoutingConfig {\n enabled: boolean;\n // Directories scanned via loadRoutes(). Defaults to ./src/routes in\n // development and ./dist/(src/)routes in production when omitted.\n paths?: string[];\n}\n\n// Main configuration interface\nexport interface AppConfig {\n server: ServerConfig;\n serviceDiscovery: ServiceDiscoveryConfig;\n database: DatabaseConfig;\n modules: ModuleDefaultsConfig;\n // Enable file-based auto routing (./src/routes). Defaults to true.\n routing: boolean | RoutingConfig;\n logging: LoggingConfig;\n security: SecurityConfig;\n external: ExternalServicesConfig;\n performance: PerformanceConfig;\n websocket: WebSocketConfig;\n jobs?: JobsConfig;\n queue?: QueueConfig;\n}\n\n// Queue Configuration\nexport interface QueueConfig {\n adapter?: 'bull' | 'rabbitmq' | 'sqs' | 'kafka' | 'memory';\n connection?: {\n host?: string;\n port?: number;\n username?: string;\n password?: string;\n database?: number;\n brokers?: string[];\n groupId?: string;\n region?: string;\n queueUrl?: string;\n [key: string]: any;\n };\n concurrency?: number;\n retry?: {\n maxAttempts: number;\n backoff: 'fixed' | 'exponential' | 'linear';\n initialDelay: number;\n maxDelay?: number;\n };\n deadLetterQueue?: {\n enabled: boolean;\n maxRetries: number;\n queueName?: string;\n };\n defaultJobOptions?: {\n removeOnComplete?: boolean | number;\n removeOnFail?: boolean | number;\n attempts?: number;\n backoff?: {\n type: 'fixed' | 'exponential' | 'linear';\n delay: number;\n };\n };\n prefix?: string;\n limiter?: {\n max: number;\n duration: number;\n };\n}\n"]}
|
package/dist/types/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/types/core.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/types/core.ts"],"names":[],"mappings":"","sourcesContent":["// Core Framework Types\nimport { RuntimeConfig } from './runtime.js';\nimport { LoggerOptions } from './logger.js';\nimport { AppConfig, ValidationErrorHandler } from './config.js';\n\nexport interface MoroOptions {\n autoDiscover?:\n | boolean\n | {\n enabled?: boolean;\n paths?: string[];\n patterns?: string[];\n recursive?: boolean;\n loadingStrategy?: 'eager' | 'lazy' | 'conditional';\n watchForChanges?: boolean;\n ignorePatterns?: string[];\n loadOrder?: 'alphabetical' | 'dependency' | 'custom';\n failOnError?: boolean;\n maxDepth?: number;\n };\n modulesPath?: string; // Deprecated: use autoDiscover.paths instead\n middleware?: any[];\n\n // Runtime configuration\n runtime?: RuntimeConfig;\n\n // HTTP/WebSocket options\n http2?:\n | boolean\n | {\n allowHTTP1?: boolean;\n maxSessionMemory?: number;\n settings?: {\n headerTableSize?: number;\n enablePush?: boolean;\n initialWindowSize?: number;\n maxFrameSize?: number;\n maxConcurrentStreams?: number;\n maxHeaderListSize?: number;\n maxHeaderSize?: number;\n enableConnectProtocol?: boolean;\n };\n };\n https?: {\n key: string | Buffer;\n cert: string | Buffer;\n ca?: string | Buffer;\n };\n websocket?:\n | {\n enabled?: boolean;\n adapter?: any;\n compression?: boolean;\n customIdGenerator?: () => string;\n options?: any;\n }\n | false;\n\n // Simplified config options (these map to the full config)\n cors?: boolean | object;\n compression?: boolean | object;\n helmet?: boolean | object;\n logger?: LoggerOptions | boolean;\n\n // Worker threads configuration\n workers?: {\n count?: number;\n maxQueueSize?: number;\n };\n\n // Validation configuration (top-level for convenience, maps to modules.validation)\n validation?: {\n enabled?: boolean;\n stripUnknown?: boolean;\n abortEarly?: boolean;\n allowUnknown?: boolean;\n onError?: ValidationErrorHandler;\n };\n\n // Direct config overrides (partial)\n server?: Partial<AppConfig['server']>;\n database?: Partial<AppConfig['database']>;\n modules?: Partial<AppConfig['modules']>;\n logging?: Partial<AppConfig['logging']>;\n security?: Partial<AppConfig['security']>;\n external?: Partial<AppConfig['external']>;\n performance?: Partial<AppConfig['performance']>;\n jobs?: Partial<AppConfig['jobs']>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/types/database.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/types/database.ts"],"names":[],"mappings":"","sourcesContent":["// src/types/database.ts\nexport interface DatabaseAdapter {\n connect(): Promise<void>;\n disconnect(): Promise<void>;\n query<T = any>(sql: string, params?: any[]): Promise<T[]>;\n queryOne<T = any>(sql: string, params?: any[]): Promise<T | null>;\n insert<T = any>(table: string, data: Record<string, any>): Promise<T>;\n update<T = any>(table: string, data: Record<string, any>, where: Record<string, any>): Promise<T>;\n delete(table: string, where: Record<string, any>): Promise<number>;\n transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T>;\n}\n\nexport interface DatabaseTransaction {\n query<T = any>(sql: string, params?: any[]): Promise<T[]>;\n queryOne<T = any>(sql: string, params?: any[]): Promise<T | null>;\n insert<T = any>(table: string, data: Record<string, any>): Promise<T>;\n update<T = any>(table: string, data: Record<string, any>, where: Record<string, any>): Promise<T>;\n delete(table: string, where: Record<string, any>): Promise<number>;\n commit(): Promise<void>;\n rollback(): Promise<void>;\n}\n\nexport interface DatabaseConfig {\n host: string;\n port: number;\n user: string;\n password: string;\n database: string;\n connectionLimit?: number;\n acquireTimeout?: number;\n timeout?: number;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/types/discovery.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/types/discovery.ts"],"names":[],"mappings":"","sourcesContent":["// Auto-Discovery Types\nexport interface DiscoveryOptions {\n baseDir?: string;\n pattern?: RegExp;\n recursive?: boolean;\n extensions?: string[];\n}\n"]}
|
package/dist/types/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,gCAAgC"}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,gCAAgC","sourcesContent":["// Enterprise Event System Types\n\nexport interface EventContext {\n timestamp: Date;\n source: string;\n moduleId?: string;\n requestId?: string;\n userId?: string;\n sessionId?: string;\n metadata?: Record<string, any>;\n}\n\nexport interface EventPayload<T = any> {\n context: EventContext;\n data: T;\n}\n\nexport interface EventBusOptions {\n maxListeners?: number;\n enablePersistence?: boolean;\n enableMetrics?: boolean;\n isolation?: 'none' | 'module' | 'strict';\n}\n\nexport interface ModuleEventBus {\n emit<T = any>(event: string, data: T): Promise<boolean>;\n on<T = any>(event: string, listener: (payload: EventPayload<T>) => void | Promise<void>): this;\n once<T = any>(event: string, listener: (payload: EventPayload<T>) => void | Promise<void>): this;\n off(event: string, listener: CallableFunction): this;\n removeAllListeners(event?: string): this;\n listenerCount(event: string): number;\n}\n\nexport interface GlobalEventBus extends ModuleEventBus {\n createModuleBus(moduleId: string): ModuleEventBus;\n destroyModuleBus(moduleId: string): void;\n getMetrics(): EventMetrics;\n enableAuditLog(): void;\n disableAuditLog(): void;\n}\n\nexport interface EventMetrics {\n totalEvents: number;\n eventsByType: Record<string, number>;\n eventsByModule: Record<string, number>;\n averageLatency: number;\n errorRate: number;\n}\n\nexport type SystemEvents = {\n 'framework:initialized': { options: any };\n 'framework:shutdown': { graceful: boolean };\n 'module:loading': { moduleId: string; path?: string };\n 'module:loaded': { moduleId: string; version: string };\n 'module:unloaded': { moduleId: string };\n 'middleware:registered': { name: string; type: string };\n 'middleware:installed': { name: string; options?: any };\n 'database:connected': { adapter: string; config: any };\n 'database:disconnected': { adapter: string };\n 'server:starting': { port: number };\n 'server:started': { port: number; pid: number };\n 'server:stopping': { graceful: boolean };\n 'request:start': { method: string; path: string; requestId: string };\n 'request:end': {\n method: string;\n path: string;\n requestId: string;\n statusCode: number;\n duration: number;\n };\n 'websocket:connected': { namespace: string; socketId: string };\n 'websocket:disconnected': {\n namespace: string;\n socketId: string;\n reason: string;\n };\n 'error:handled': { error: Error; context: string; requestId?: string };\n 'error:unhandled': { error: Error; context: string };\n};\n\nexport type EventHandler<T = any> = (payload: EventPayload<T>) => void | Promise<void>;\n"]}
|
package/dist/types/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/types/hooks.ts"],"names":[],"mappings":"","sourcesContent":["// Hooks and Middleware Types\nimport { HttpRequest, HttpResponse } from '../core/http/index.js';\n\nexport type HookFunction = (...args: any[]) => Promise<any> | any;\n\nexport interface StandardMiddleware {\n (req: HttpRequest, res: HttpResponse, next: () => Promise<void>): Promise<void> | void;\n}\n\nexport interface HookContext {\n request?: HttpRequest;\n response?: HttpResponse;\n data?: any;\n metadata?: Record<string, any>;\n}\n\nexport interface MoroMiddleware {\n name: string;\n version?: string;\n install: (hooks: any, options?: any) => Promise<void> | void;\n uninstall?: (hooks: any) => Promise<void> | void;\n}\n\n// Advanced middleware types\nexport interface MiddlewareMetadata {\n name: string;\n version?: string;\n description?: string;\n author?: string;\n dependencies?: string[];\n tags?: string[];\n}\n\nexport interface MiddlewareContext {\n app: any;\n hooks: any; // HookManager\n config: any;\n logger?: any;\n}\n\nexport interface MiddlewareInterface extends MoroMiddleware {\n metadata?: MiddlewareMetadata;\n dependencies?: string[];\n configure?: (config: any) => void;\n beforeInstall?: (context: MiddlewareContext) => Promise<void> | void;\n afterInstall?: (context: MiddlewareContext) => Promise<void> | void;\n beforeUninstall?: (context: MiddlewareContext) => Promise<void> | void;\n afterUninstall?: (context: MiddlewareContext) => Promise<void> | void;\n}\n\nexport type SimpleMiddlewareFunction = (app: any) => Promise<void> | void;\n"]}
|
package/dist/types/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/types/http.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/types/http.ts"],"names":[],"mappings":"","sourcesContent":["// HTTP Server Types\nimport { IncomingMessage, ServerResponse } from 'http';\n\nexport interface HttpRequest extends IncomingMessage {\n params: Record<string, string>;\n query: Record<string, string>;\n body: any;\n path: string;\n headers: Record<string, string>;\n ip: string;\n requestId: string;\n cookies?: Record<string, string>;\n files?: Record<string, any>;\n\n // Per-request typed context (pass data between middlewares without monkey-patching req)\n context: Record<string, any>;\n\n // Express-compatible helpers\n get(name: string): string | undefined;\n header(name: string): string | undefined;\n is(type: string): boolean;\n accepts(types?: string | string[]): string | false;\n acceptsLanguages(langs?: string | string[]): string | false;\n hostname: string;\n protocol: string;\n secure: boolean;\n xhr: boolean;\n originalUrl: string;\n ips: string[];\n subdomains: string[];\n\n [key: string]: any;\n}\n\nexport interface CookieOptions {\n maxAge?: number;\n expires?: Date;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n domain?: string;\n path?: string;\n // Security options\n critical?: boolean; // Mark as critical for security (throws on late set)\n throwOnLateSet?: boolean; // Force throw if headers already sent\n}\n\nexport interface ResponseState {\n headersSent: boolean;\n statusCode: number;\n headers: Record<string, any>;\n finished: boolean;\n writable: boolean;\n}\n\nexport interface MoroResponseMethods {\n json(data: any): void;\n status(code: number): HttpResponse;\n send(data: string | Buffer): void;\n cookie(name: string, value: string, options?: CookieOptions): HttpResponse;\n clearCookie(name: string, options?: CookieOptions): HttpResponse;\n redirect(url: string, status?: number): void;\n sendFile(filePath: string): Promise<void>;\n render?(template: string, data?: any): Promise<void>;\n\n // Per-response typed state bag (Express-compatible res.locals)\n locals: Record<string, any>;\n\n // Express-compatible response helpers\n set(\n field: string | Record<string, string | string[] | number>,\n value?: string | string[] | number\n ): HttpResponse;\n get(field: string): string | number | string[] | undefined;\n append(field: string, value: string | string[]): HttpResponse;\n type(contentType: string): HttpResponse;\n sendStatus(code: number): void;\n location(url: string): HttpResponse;\n vary(field: string | string[]): HttpResponse;\n links(links: Record<string, string>): HttpResponse;\n attachment(filename?: string): HttpResponse;\n download(filePath: string, filename?: string): Promise<void>;\n format(handlers: Record<string, () => any | Promise<any>>): void;\n\n // Header management utilities\n hasHeader(name: string): boolean;\n setBulkHeaders(headers: Record<string, string | number>): HttpResponse;\n appendHeader(name: string, value: string | string[]): HttpResponse;\n\n // Response state utilities\n canSetHeaders(): boolean;\n getResponseState(): ResponseState;\n\n // Standardized response helpers\n success<T = any>(data: T, message?: string): void;\n error(error: string, code?: string, message?: string): void;\n\n // Common HTTP error helpers (automatically set status code)\n unauthorized(message?: string): void;\n forbidden(message?: string): void;\n notFound(resource?: string): void;\n badRequest(message?: string): void;\n conflict(message: string): void;\n internalError(message?: string): void;\n validationError(errors: Array<{ field: string; message: string; code?: string }>): void;\n rateLimited(retryAfter?: number): void;\n\n // Common success patterns\n created<T = any>(data: T, location?: string): void;\n noContent(): void;\n paginated<T = any>(\n data: T[],\n pagination: {\n page: number;\n limit: number;\n total: number;\n }\n ): void;\n}\n\nexport type HttpResponse = ServerResponse & MoroResponseMethods;\n\nexport type HttpHandler = (req: HttpRequest, res: HttpResponse) => Promise<void> | void;\nexport type Middleware = (\n req: HttpRequest,\n res: HttpResponse,\n next: () => void\n) => Promise<void> | void;\nexport type MiddlewareFunction = (\n req: HttpRequest,\n res: HttpResponse,\n next: () => void\n) => void | Promise<void>;\n\n// Internal router types\nexport interface RouteEntry {\n method: string;\n path: string;\n pattern: RegExp;\n paramNames: string[];\n handler: HttpHandler;\n middleware: Middleware[];\n}\n\nexport interface RouteDefinition {\n method: string;\n path: string;\n pattern: RegExp;\n paramNames: string[];\n handler: HttpHandler;\n middleware: Middleware[];\n}\n"]}
|
package/dist/types/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/types/logger.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/types/logger.ts"],"names":[],"mappings":"","sourcesContent":["// Enterprise Logger Types\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nexport interface LogEntry {\n timestamp: Date;\n level: LogLevel;\n message: string;\n context?: string;\n metadata?: Record<string, any>;\n requestId?: string;\n moduleId?: string;\n userId?: string;\n sessionId?: string;\n performance?: {\n duration?: number;\n memory?: number;\n cpu?: number;\n };\n stack?: string;\n}\n\nexport interface LoggerOptions {\n level?: LogLevel;\n enableColors?: boolean;\n enableTimestamp?: boolean;\n enableContext?: boolean;\n enableMetadata?: boolean;\n enablePerformance?: boolean;\n enableMetrics?: boolean;\n format?: 'pretty' | 'json' | 'compact';\n outputs?: LogOutput[];\n filters?: LogFilter[];\n maxEntries?: number;\n maxBufferSize?: number;\n}\n\nexport interface LogOutput {\n name: string;\n write: (entry: LogEntry) => Promise<void> | void;\n level?: LogLevel;\n format?: 'pretty' | 'json' | 'compact';\n}\n\nexport interface LogFilter {\n name: string;\n filter: (entry: LogEntry) => boolean;\n}\n\nexport interface Logger {\n debug(message: string, context?: string, metadata?: Record<string, any>): void;\n info(message: string, context?: string, metadata?: Record<string, any>): void;\n warn(message: string, context?: string, metadata?: Record<string, any>): void;\n error(message: string | Error, context?: string, metadata?: Record<string, any>): void;\n fatal(message: string | Error, context?: string, metadata?: Record<string, any>): void;\n\n // Performance logging\n time(label: string): void;\n timeEnd(label: string, context?: string, metadata?: Record<string, any>): void;\n\n // Structured logging\n child(context: string, metadata?: Record<string, any>): Logger;\n\n // Configuration\n setLevel(level: LogLevel): void;\n getLevel(): LogLevel;\n addOutput(output: LogOutput): void;\n removeOutput(name: string): void;\n addFilter(filter: LogFilter): void;\n removeFilter(name: string): void;\n\n // Cleanup\n flush(): void;\n flushBuffer(): void;\n destroy(): void;\n\n // Metrics and history\n getHistory(count?: number): LogEntry[];\n getMetrics(): LogMetrics;\n clear(): void;\n}\n\nexport interface LogMetrics {\n totalLogs: number;\n logsByLevel: Record<LogLevel, number>;\n logsByContext: Record<string, number>;\n averageLogRate: number;\n errorRate: number;\n memoryUsage: number;\n outputErrors?: Record<string, number>;\n}\n\nexport interface ColorScheme {\n debug: string;\n info: string;\n warn: string;\n error: string;\n fatal: string;\n timestamp: string;\n context: string;\n metadata: string;\n performance: string;\n reset: string;\n}\n"]}
|
package/dist/types/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/types/module.ts"],"names":[],"mappings":"AAAA,0BAA0B"}
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/types/module.ts"],"names":[],"mappings":"AAAA,0BAA0B","sourcesContent":["// Module Definition Types\n\nimport type { ValidationErrorHandler } from './config.js';\nimport type { CompiledRoute } from '../core/routing/index.js';\n\n// Middleware can be a string name (resolved from built-in) or actual function\nexport type ModuleMiddleware =\n | string\n | ((req: any, res: any, next: () => void) => void | Promise<void>);\n\nexport interface ModuleRoute {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n path: string;\n handler: (req: any, res: any) => any | Promise<any>;\n validation?: any;\n onValidationError?: ValidationErrorHandler;\n cache?: { ttl: number; key?: string };\n rateLimit?: { requests: number; window: number };\n middleware?: ModuleMiddleware[]; // Support both strings and functions\n auth?: {\n roles?: string[];\n permissions?: string[];\n optional?: boolean;\n };\n}\n\nexport interface ModuleSocket {\n event: string;\n handler: (socket: any, data: any) => any | Promise<any>;\n validation?: any;\n rateLimit?: { requests: number; window: number };\n rooms?: string[];\n broadcast?: boolean;\n}\n\nexport interface ModuleDefinition {\n name: string;\n version: string;\n config?: {\n cache?: { ttl: number };\n rateLimit?: { requests: number; window: number };\n database?: {\n path?: string;\n };\n [key: string]: any;\n };\n routes?: (ModuleRoute | CompiledRoute)[];\n sockets?: ModuleSocket[];\n dependencies?: string[];\n middleware?: ModuleMiddleware[]; // Module-level middleware (applied to all routes)\n}\n\n// Internal Module Configuration (used by framework)\nexport interface ModuleConfig {\n name: string;\n version: string;\n routes?: InternalRouteDefinition[];\n websockets?: WebSocketDefinition[];\n sockets?: WebSocketDefinition[];\n dependencies?: string[];\n middleware?: any[]; // MiddlewareFunction from http types\n services?: ServiceDefinition[];\n config?: any; // Module-specific configuration\n routeHandlers?: Record<string, CallableFunction>;\n socketHandlers?: Record<string, CallableFunction>;\n}\n\nexport interface InternalRouteDefinition {\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n path: string;\n handler: string;\n middleware?: ModuleMiddleware[]; // Support both strings and functions\n validation?: any;\n onValidationError?: ValidationErrorHandler;\n cache?: CacheConfig;\n rateLimit?: RateLimitConfig;\n auth?: {\n roles?: string[];\n permissions?: string[];\n optional?: boolean;\n };\n // Allow additional properties for extensibility\n [key: string]: any;\n}\n\nexport interface WebSocketDefinition {\n event: string;\n handler: string;\n middleware?: string[];\n validation?: any;\n rateLimit?: RateLimitConfig;\n rooms?: string[];\n broadcast?: boolean;\n}\n\nexport interface ServiceDefinition {\n name: string;\n implementation: new (...args: any[]) => any;\n singleton?: boolean;\n dependencies?: string[];\n}\n\nexport interface CacheConfig {\n ttl: number;\n key?: string;\n}\n\nexport interface RateLimitConfig {\n requests: number;\n window: number;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":"","sourcesContent":["// Runtime abstraction types for multi-environment support\nimport { HttpRequest, HttpResponse } from '../core/http/index.js';\n\nexport type RuntimeType = 'node' | 'vercel-edge' | 'aws-lambda' | 'cloudflare-workers';\n\n// Generic runtime request/response interfaces\nexport interface RuntimeRequest {\n method: string;\n url: string;\n headers: Record<string, string>;\n body?: any;\n query?: Record<string, string>;\n params?: Record<string, string>;\n [key: string]: any;\n}\n\nexport interface RuntimeResponse {\n status: number;\n headers: Record<string, string>;\n body: any;\n}\n\n// Runtime-specific response interface for adapters\nexport interface RuntimeHttpResponse {\n statusCode: number;\n headers: Record<string, string>;\n body: any;\n headersSent: boolean;\n\n status(code: number): RuntimeHttpResponse;\n json(data: any): void;\n send(data: string | Buffer): void;\n cookie(name: string, value: string, options?: any): RuntimeHttpResponse;\n clearCookie(name: string, options?: any): RuntimeHttpResponse;\n redirect(url: string, status?: number): void;\n sendFile?(filePath: string): Promise<void>;\n}\n\n// Runtime-specific handler types\nexport type NodeHandler = (req: any, res: any) => Promise<void> | void;\nexport type EdgeHandler = (request: Request) => Promise<Response>;\nexport type LambdaHandler = (event: any, context: any) => Promise<any>;\nexport type WorkerHandler = (request: Request, env: any, ctx: any) => Promise<Response>;\n\n// Runtime adapter interface\nexport interface RuntimeAdapter {\n readonly type: RuntimeType;\n\n // Convert runtime-specific request to MoroJS HttpRequest\n adaptRequest(runtimeRequest: any, ...args: any[]): Promise<HttpRequest>;\n\n // Convert MoroJS HttpResponse to runtime-specific response\n adaptResponse(\n moroResponse: HttpResponse | RuntimeHttpResponse,\n runtimeRequest: any\n ): Promise<any>;\n\n // Create the appropriate server/handler for the runtime\n createServer(handler: (req: HttpRequest, res: HttpResponse) => Promise<void>): any;\n\n // Start listening (for runtimes that support it)\n listen?(server: any, port: number, host?: string, callback?: () => void): void;\n}\n\n// Runtime configuration\nexport interface RuntimeConfig {\n type: RuntimeType;\n adapter?: RuntimeAdapter;\n options?: any;\n}\n\n// Extended MoroOptions to include runtime configuration\nexport interface RuntimeMoroOptions {\n runtime?: RuntimeConfig;\n // ... existing options\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/types/session.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/types/session.ts"],"names":[],"mappings":"","sourcesContent":["// Session Types\nexport interface SessionData {\n [key: string]: any;\n cookie?: {\n originalMaxAge?: number;\n expires?: Date;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: string;\n };\n}\n\nexport interface SessionInstance {\n // Session data proxy\n [key: string]: any;\n\n // Session methods\n save(): Promise<void>;\n destroy(): Promise<void>;\n regenerate(): Promise<string>;\n touch(): Promise<void>;\n\n // Session properties\n readonly sessionID: string;\n readonly cookie?: SessionData['cookie'];\n readonly isNew?: boolean;\n readonly isModified?: boolean;\n}\n\nexport interface SessionOptions {\n // Store configuration\n store?: 'memory' | 'redis' | 'file' | any;\n storeOptions?: {\n // Redis options\n host?: string;\n port?: number;\n password?: string;\n keyPrefix?: string;\n // File options\n path?: string;\n // Memory options\n max?: number;\n };\n\n // Session configuration\n secret?: string;\n name?: string; // Session cookie name\n genid?: () => string; // Session ID generator\n rolling?: boolean; // Reset expiry on each request\n resave?: boolean; // Save session even if not modified\n saveUninitialized?: boolean; // Save new but not modified sessions\n\n // Cookie configuration\n cookie?: {\n maxAge?: number; // Session timeout in ms\n expires?: Date; // Absolute expiry\n httpOnly?: boolean; // Prevent XSS access\n secure?: boolean; // HTTPS only\n sameSite?: 'strict' | 'lax' | 'none';\n domain?: string;\n path?: string;\n };\n\n // Security\n proxy?: boolean; // Trust proxy for secure cookies\n unset?: 'destroy' | 'keep'; // What to do when session is unset\n}\n\n// Extend the HTTP request type to include session\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Express {\n interface Request {\n session: SessionInstance;\n }\n }\n}\n\n// For non-Express environments\nexport interface RequestWithSession {\n session: SessionInstance;\n}\n\nexport interface SessionStore {\n get(key: string): Promise<SessionData | null>;\n set(key: string, data: SessionData, ttl?: number): Promise<void>;\n del(key: string): Promise<void>;\n clear?(): Promise<void>;\n touch?(key: string): Promise<void>;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@morojs/moro",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "High-performance Node.js framework with intelligent routing, automatic middleware ordering, enterprise authentication (Auth
|
|
3
|
+
"version": "1.8.1",
|
|
4
|
+
"description": "High-performance Node.js framework with intelligent routing, automatic middleware ordering, enterprise authentication (Better Auth), type-safe validation, and functional architecture",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
-
"
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
11
|
"import": "./dist/index.js",
|
|
12
|
-
"
|
|
13
|
-
}
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./package.json": "./package.json"
|
|
14
15
|
},
|
|
16
|
+
"sideEffects": [
|
|
17
|
+
"**/logger/logger.js"
|
|
18
|
+
],
|
|
15
19
|
"scripts": {
|
|
16
20
|
"build": "tsc",
|
|
17
21
|
"dev": "tsx watch src/index.ts",
|
|
18
22
|
"dev:watch": "tsc --watch",
|
|
19
23
|
"clean": "rm -rf dist",
|
|
20
|
-
"prepare": "husky",
|
|
21
|
-
"
|
|
24
|
+
"prepare": "husky || true",
|
|
25
|
+
"prepublishOnly": "npm run clean && npm run build && node scripts/validate-package.mjs",
|
|
22
26
|
"test": "jest --detectOpenHandles",
|
|
23
27
|
"test:watch": "jest --watch",
|
|
24
28
|
"test:coverage": "jest --coverage --detectOpenHandles",
|
|
@@ -26,13 +30,14 @@
|
|
|
26
30
|
"test:integration": "jest --testPathPatterns=integration --detectOpenHandles",
|
|
27
31
|
"test:e2e": "jest --testPathPatterns=e2e --detectOpenHandles --testTimeout=30000",
|
|
28
32
|
"test:debug": "jest --detectOpenHandles --verbose",
|
|
29
|
-
"test:ci": "jest --coverage --watchAll=false --ci
|
|
33
|
+
"test:ci": "jest --coverage --watchAll=false --ci",
|
|
30
34
|
"test:force": "jest --forceExit",
|
|
31
35
|
"test:all": "npm run test:unit && npm run test:integration && npm run test:e2e",
|
|
32
36
|
"test:dist": "npm run build && node scripts/validate-dist.mjs",
|
|
33
37
|
"test:package": "npm run build && node scripts/validate-package.mjs",
|
|
34
|
-
"lint": "eslint src --ext .ts",
|
|
38
|
+
"lint": "eslint src --ext .ts --max-warnings 0",
|
|
35
39
|
"lint:fix": "eslint src --ext .ts --fix",
|
|
40
|
+
"typecheck:tests": "tsc -p tsconfig.test.json",
|
|
36
41
|
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
37
42
|
"format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
38
43
|
"lint-staged": "lint-staged",
|
|
@@ -108,7 +113,10 @@
|
|
|
108
113
|
"url": "https://github.com/Moro-JS/moro/issues"
|
|
109
114
|
},
|
|
110
115
|
"engines": {
|
|
111
|
-
"node": ">=
|
|
116
|
+
"node": ">=20.0.0"
|
|
117
|
+
},
|
|
118
|
+
"dependencies": {
|
|
119
|
+
"@morojs/engine": "^1.1.0"
|
|
112
120
|
},
|
|
113
121
|
"peerDependencies": {
|
|
114
122
|
"@aws-sdk/client-ses": ">=3.927.0",
|
|
@@ -140,7 +148,8 @@
|
|
|
140
148
|
"swagger-ui-dist": ">=5.28.1",
|
|
141
149
|
"uWebSockets.js": "github:uNetworking/uWebSockets.js#semver:^v20.52.0",
|
|
142
150
|
"ws": ">=8.18.0",
|
|
143
|
-
"yup": ">=1.7.1"
|
|
151
|
+
"yup": ">=1.7.1",
|
|
152
|
+
"zod": ">=3.22.0"
|
|
144
153
|
},
|
|
145
154
|
"peerDependenciesMeta": {
|
|
146
155
|
"@aws-sdk/client-ses": {
|
|
@@ -232,24 +241,27 @@
|
|
|
232
241
|
},
|
|
233
242
|
"yup": {
|
|
234
243
|
"optional": true
|
|
244
|
+
},
|
|
245
|
+
"zod": {
|
|
246
|
+
"optional": true
|
|
235
247
|
}
|
|
236
248
|
},
|
|
237
249
|
"devDependencies": {
|
|
238
250
|
"@eslint/js": "^9.18.0",
|
|
239
251
|
"@jest/globals": "^30.1.2",
|
|
240
|
-
"@pothos/core": "^4.
|
|
252
|
+
"@pothos/core": "^4.13.1",
|
|
241
253
|
"@types/jest": "^30.0.0",
|
|
242
254
|
"@types/node": "^24.3.1",
|
|
243
255
|
"@types/supertest": "^6.0.2",
|
|
244
256
|
"@types/ws": "^8.18.1",
|
|
245
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
257
|
+
"@typescript-eslint/eslint-plugin": "^8.64.0",
|
|
246
258
|
"@typescript-eslint/parser": "^8.18.2",
|
|
247
259
|
"dataloader": "^2.2.3",
|
|
248
260
|
"depcheck": "^1.4.7",
|
|
249
261
|
"eslint": "^9.35.0",
|
|
250
262
|
"eslint-config-prettier": "^10.1.8",
|
|
251
263
|
"eslint-plugin-prettier": "^5.2.1",
|
|
252
|
-
"graphql": "^
|
|
264
|
+
"graphql": "^17.0.2",
|
|
253
265
|
"graphql-jit": "^0.8.7",
|
|
254
266
|
"http-server": "^14.1.1",
|
|
255
267
|
"husky": "^9.1.7",
|
|
@@ -261,16 +273,19 @@
|
|
|
261
273
|
"ts-jest": "^29.4.1",
|
|
262
274
|
"tsx": "^4.7.0",
|
|
263
275
|
"typedoc": "^0.28.12",
|
|
264
|
-
"typedoc-github-theme": "^0.
|
|
265
|
-
"typedoc-material-theme": "^1.4.
|
|
276
|
+
"typedoc-github-theme": "^0.4.0",
|
|
277
|
+
"typedoc-material-theme": "^1.4.1",
|
|
266
278
|
"typedoc-plugin-extras": "^4.0.1",
|
|
267
279
|
"typedoc-plugin-markdown": "^4.8.1",
|
|
268
280
|
"typedoc-theme-hierarchy": "^6.0.0",
|
|
269
281
|
"typescript": "^5.9.2",
|
|
270
282
|
"uWebSockets.js": "github:uNetworking/uWebSockets.js#semver:^v20.52.0",
|
|
271
|
-
"ws": "^8.
|
|
283
|
+
"ws": "^8.21.0",
|
|
272
284
|
"zod": "^4.1.8"
|
|
273
285
|
},
|
|
286
|
+
"overrides": {
|
|
287
|
+
"fast-uri": "^3.1.3"
|
|
288
|
+
},
|
|
274
289
|
"files": [
|
|
275
290
|
"dist/**/*",
|
|
276
291
|
"README.md",
|