@morojs/moro 1.6.2 → 1.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/http/http-server.js +12 -9
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/uws-http-server.js +1 -1
- package/dist/core/http/uws-http-server.js.map +1 -1
- package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
- package/dist/core/middleware/built-in/auth/core.js +358 -0
- package/dist/core/middleware/built-in/auth/core.js.map +1 -0
- package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
- package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
- package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
- package/dist/core/middleware/built-in/auth/hook.js +99 -0
- package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
- package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
- package/dist/core/middleware/built-in/auth/index.js +15 -0
- package/dist/core/middleware/built-in/auth/index.js.map +1 -0
- package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
- package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
- package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
- package/dist/core/middleware/built-in/auth/middleware.js +71 -0
- package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
- package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
- package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
- package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
- package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
- package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
- package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
- package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
- package/dist/core/middleware/built-in/cache/core.js +87 -0
- package/dist/core/middleware/built-in/cache/core.js.map +1 -0
- package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
- package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cache/index.js +9 -0
- package/dist/core/middleware/built-in/cache/index.js.map +1 -0
- package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/cache/middleware.js +44 -0
- package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
- package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
- package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
- package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
- package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
- package/dist/core/middleware/built-in/cdn/core.js +144 -0
- package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
- package/dist/core/middleware/built-in/cdn/hook.js +70 -0
- package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
- package/dist/core/middleware/built-in/cdn/index.js +11 -0
- package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
- package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
- package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
- package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
- package/dist/core/middleware/built-in/cookie/core.js +83 -0
- package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/cookie/hook.js +47 -0
- package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cookie/index.js +9 -0
- package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
- package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
- package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
- package/dist/core/middleware/built-in/cors/core.js +51 -0
- package/dist/core/middleware/built-in/cors/core.js.map +1 -0
- package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/cors/hook.js +37 -0
- package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
- package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
- package/dist/core/middleware/built-in/cors/index.js +9 -0
- package/dist/core/middleware/built-in/cors/index.js.map +1 -0
- package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/cors/middleware.js +22 -0
- package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
- package/dist/core/middleware/built-in/csp/core.js +88 -0
- package/dist/core/middleware/built-in/csp/core.js.map +1 -0
- package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
- package/dist/core/middleware/built-in/csp/hook.js +47 -0
- package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
- package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
- package/dist/core/middleware/built-in/csp/index.js +9 -0
- package/dist/core/middleware/built-in/csp/index.js.map +1 -0
- package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
- package/dist/core/middleware/built-in/csp/middleware.js +29 -0
- package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
- package/dist/core/middleware/built-in/csrf/core.js +69 -0
- package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/csrf/hook.js +45 -0
- package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
- package/dist/core/middleware/built-in/csrf/index.js +9 -0
- package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
- package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
- package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
- package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
- package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
- package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
- package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/index.d.ts +25 -59
- package/dist/core/middleware/built-in/index.js +31 -31
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
- package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
- package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
- package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
- package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
- package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
- package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
- package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
- package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
- package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
- package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
- package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
- package/dist/core/middleware/built-in/request-logger/index.js +4 -0
- package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
- package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
- package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
- package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/session/core.d.ts +73 -0
- package/dist/core/middleware/built-in/session/core.js +227 -0
- package/dist/core/middleware/built-in/session/core.js.map +1 -0
- package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
- package/dist/core/middleware/built-in/session/hook.js +53 -0
- package/dist/core/middleware/built-in/session/hook.js.map +1 -0
- package/dist/core/middleware/built-in/session/index.d.ts +3 -0
- package/dist/core/middleware/built-in/session/index.js +9 -0
- package/dist/core/middleware/built-in/session/index.js.map +1 -0
- package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
- package/dist/core/middleware/built-in/session/middleware.js +38 -0
- package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
- package/dist/core/middleware/built-in/sse/core.js +117 -0
- package/dist/core/middleware/built-in/sse/core.js.map +1 -0
- package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
- package/dist/core/middleware/built-in/sse/hook.js +60 -0
- package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
- package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
- package/dist/core/middleware/built-in/sse/index.js +9 -0
- package/dist/core/middleware/built-in/sse/index.js.map +1 -0
- package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
- package/dist/core/middleware/built-in/sse/middleware.js +43 -0
- package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
- package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
- package/dist/core/middleware/built-in/validation/core.js +93 -0
- package/dist/core/middleware/built-in/validation/core.js.map +1 -0
- package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
- package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
- package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
- package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
- package/dist/core/middleware/built-in/validation/index.js +9 -0
- package/dist/core/middleware/built-in/validation/index.js.map +1 -0
- package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
- package/dist/core/middleware/built-in/validation/middleware.js +27 -0
- package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
- package/dist/core/middleware/index.js +6 -0
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/routing/unified-router.d.ts +4 -20
- package/dist/core/routing/unified-router.js +61 -106
- package/dist/core/routing/unified-router.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/moro.js +12 -18
- package/dist/moro.js.map +1 -1
- package/dist/types/hooks.d.ts +3 -0
- package/package.json +2 -6
- package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
- package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
- package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
- package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
- package/dist/core/middleware/built-in/auth.d.ts +0 -30
- package/dist/core/middleware/built-in/auth.js +0 -348
- package/dist/core/middleware/built-in/auth.js.map +0 -1
- package/dist/core/middleware/built-in/cache.d.ts +0 -3
- package/dist/core/middleware/built-in/cache.js.map +0 -1
- package/dist/core/middleware/built-in/cdn.d.ts +0 -3
- package/dist/core/middleware/built-in/cdn.js +0 -109
- package/dist/core/middleware/built-in/cdn.js.map +0 -1
- package/dist/core/middleware/built-in/cookie.d.ts +0 -14
- package/dist/core/middleware/built-in/cookie.js +0 -64
- package/dist/core/middleware/built-in/cookie.js.map +0 -1
- package/dist/core/middleware/built-in/cors.d.ts +0 -2
- package/dist/core/middleware/built-in/cors.js +0 -25
- package/dist/core/middleware/built-in/cors.js.map +0 -1
- package/dist/core/middleware/built-in/csp.d.ts +0 -22
- package/dist/core/middleware/built-in/csp.js +0 -68
- package/dist/core/middleware/built-in/csp.js.map +0 -1
- package/dist/core/middleware/built-in/csrf.d.ts +0 -9
- package/dist/core/middleware/built-in/csrf.js +0 -60
- package/dist/core/middleware/built-in/csrf.js.map +0 -1
- package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
- package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
- package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
- package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
- package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
- package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
- package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
- package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
- package/dist/core/middleware/built-in/request-logger.js.map +0 -1
- package/dist/core/middleware/built-in/session.d.ts +0 -41
- package/dist/core/middleware/built-in/session.js +0 -205
- package/dist/core/middleware/built-in/session.js.map +0 -1
- package/dist/core/middleware/built-in/sse.d.ts +0 -6
- package/dist/core/middleware/built-in/sse.js +0 -69
- package/dist/core/middleware/built-in/sse.js.map +0 -1
- package/dist/core/middleware/built-in/validation.d.ts +0 -2
- package/dist/core/middleware/built-in/validation.js.map +0 -1
- package/jest.config.mjs +0 -41
- package/src/core/auth/README.md +0 -339
- package/src/core/auth/morojs-adapter.ts +0 -415
- package/src/core/config/config-manager.ts +0 -133
- package/src/core/config/config-sources.ts +0 -600
- package/src/core/config/config-validator.ts +0 -1116
- package/src/core/config/file-loader.ts +0 -150
- package/src/core/config/index.ts +0 -109
- package/src/core/config/schema.ts +0 -164
- package/src/core/config/utils.ts +0 -244
- package/src/core/database/README.md +0 -238
- package/src/core/database/adapters/drizzle.ts +0 -415
- package/src/core/database/adapters/index.ts +0 -42
- package/src/core/database/adapters/mongodb.ts +0 -317
- package/src/core/database/adapters/mysql.ts +0 -235
- package/src/core/database/adapters/postgresql.ts +0 -226
- package/src/core/database/adapters/redis.ts +0 -379
- package/src/core/database/adapters/sqlite.ts +0 -263
- package/src/core/database/index.ts +0 -3
- package/src/core/docs/index.ts +0 -231
- package/src/core/docs/openapi-generator.ts +0 -576
- package/src/core/docs/schema-to-openapi.ts +0 -145
- package/src/core/docs/simple-docs.ts +0 -295
- package/src/core/docs/swagger-ui.ts +0 -354
- package/src/core/docs/zod-to-openapi.ts +0 -532
- package/src/core/events/event-bus.ts +0 -231
- package/src/core/events/index.ts +0 -12
- package/src/core/framework.ts +0 -885
- package/src/core/http/http-server.ts +0 -1847
- package/src/core/http/index.ts +0 -7
- package/src/core/http/uws-http-server.ts +0 -591
- package/src/core/logger/filters.ts +0 -153
- package/src/core/logger/index.ts +0 -21
- package/src/core/logger/logger.ts +0 -1033
- package/src/core/logger/outputs.ts +0 -132
- package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
- package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
- package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
- package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
- package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
- package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
- package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
- package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
- package/src/core/middleware/built-in/auth-helpers.ts +0 -401
- package/src/core/middleware/built-in/auth-providers.ts +0 -480
- package/src/core/middleware/built-in/auth.ts +0 -410
- package/src/core/middleware/built-in/cache.ts +0 -213
- package/src/core/middleware/built-in/cdn.ts +0 -124
- package/src/core/middleware/built-in/cookie.ts +0 -85
- package/src/core/middleware/built-in/cors.ts +0 -38
- package/src/core/middleware/built-in/csp.ts +0 -101
- package/src/core/middleware/built-in/csrf.ts +0 -82
- package/src/core/middleware/built-in/error-tracker.ts +0 -16
- package/src/core/middleware/built-in/index.ts +0 -87
- package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
- package/src/core/middleware/built-in/performance-monitor.ts +0 -25
- package/src/core/middleware/built-in/rate-limit.ts +0 -60
- package/src/core/middleware/built-in/request-logger.ts +0 -16
- package/src/core/middleware/built-in/session.ts +0 -287
- package/src/core/middleware/built-in/sse.ts +0 -88
- package/src/core/middleware/built-in/validation.ts +0 -33
- package/src/core/middleware/index.ts +0 -177
- package/src/core/modules/auto-discovery.ts +0 -726
- package/src/core/modules/index.ts +0 -3
- package/src/core/modules/modules.ts +0 -135
- package/src/core/networking/adapters/index.ts +0 -17
- package/src/core/networking/adapters/socketio-adapter.ts +0 -254
- package/src/core/networking/adapters/uws-adapter.ts +0 -619
- package/src/core/networking/adapters/ws-adapter.ts +0 -429
- package/src/core/networking/index.ts +0 -4
- package/src/core/networking/service-discovery.ts +0 -303
- package/src/core/networking/websocket-adapter.ts +0 -217
- package/src/core/networking/websocket-manager.ts +0 -308
- package/src/core/pooling/object-pool-manager.ts +0 -630
- package/src/core/routing/app-integration.ts +0 -164
- package/src/core/routing/index.ts +0 -261
- package/src/core/routing/path-matcher.ts +0 -222
- package/src/core/routing/router.ts +0 -97
- package/src/core/routing/unified-router.ts +0 -870
- package/src/core/runtime/aws-lambda-adapter.ts +0 -147
- package/src/core/runtime/base-adapter.ts +0 -130
- package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
- package/src/core/runtime/index.ts +0 -62
- package/src/core/runtime/node-adapter.ts +0 -202
- package/src/core/runtime/vercel-edge-adapter.ts +0 -114
- package/src/core/utilities/circuit-breaker.ts +0 -46
- package/src/core/utilities/container.ts +0 -736
- package/src/core/utilities/hooks.ts +0 -142
- package/src/core/utilities/index.ts +0 -17
- package/src/core/utilities/package-utils.ts +0 -59
- package/src/core/validation/adapters.ts +0 -147
- package/src/core/validation/index.ts +0 -258
- package/src/core/validation/schema-interface.ts +0 -100
- package/src/index.ts +0 -233
- package/src/moro.ts +0 -1728
- package/src/types/auth.ts +0 -440
- package/src/types/cache.ts +0 -38
- package/src/types/cdn.ts +0 -22
- package/src/types/config.ts +0 -229
- package/src/types/core.ts +0 -58
- package/src/types/database.ts +0 -32
- package/src/types/discovery.ts +0 -7
- package/src/types/events.ts +0 -82
- package/src/types/hooks.ts +0 -47
- package/src/types/http.ts +0 -89
- package/src/types/logger.ts +0 -102
- package/src/types/module.ts +0 -99
- package/src/types/runtime.ts +0 -76
- package/src/types/session.ts +0 -89
- package/tsconfig.json +0 -23
- /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
- /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
- /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
- /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
// Database PostgreSQL Adapter
|
|
2
|
-
import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database.js';
|
|
3
|
-
import { createFrameworkLogger } from '../../logger/index.js';
|
|
4
|
-
import { resolveUserPackage } from '../../utilities/package-utils.js';
|
|
5
|
-
|
|
6
|
-
interface PostgreSQLConfig {
|
|
7
|
-
host?: string;
|
|
8
|
-
port?: number;
|
|
9
|
-
user?: string;
|
|
10
|
-
password?: string;
|
|
11
|
-
database?: string;
|
|
12
|
-
connectionLimit?: number;
|
|
13
|
-
ssl?:
|
|
14
|
-
| {
|
|
15
|
-
rejectUnauthorized?: boolean;
|
|
16
|
-
ca?: string;
|
|
17
|
-
cert?: string;
|
|
18
|
-
key?: string;
|
|
19
|
-
passphrase?: string;
|
|
20
|
-
servername?: string;
|
|
21
|
-
checkServerIdentity?: boolean;
|
|
22
|
-
}
|
|
23
|
-
| boolean;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
27
|
-
private pool: any;
|
|
28
|
-
private logger = createFrameworkLogger('PostgreSQL');
|
|
29
|
-
private initPromise: Promise<void>;
|
|
30
|
-
|
|
31
|
-
constructor(config: PostgreSQLConfig) {
|
|
32
|
-
this.initPromise = this.initialize(config);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
private async initialize(config: PostgreSQLConfig): Promise<void> {
|
|
36
|
-
try {
|
|
37
|
-
const pgPath = resolveUserPackage('pg');
|
|
38
|
-
const pg = await import(pgPath);
|
|
39
|
-
const { Pool } = pg.default;
|
|
40
|
-
this.pool = new Pool({
|
|
41
|
-
host: config.host || 'localhost',
|
|
42
|
-
port: config.port || 5432,
|
|
43
|
-
user: config.user || 'postgres',
|
|
44
|
-
password: config.password || '',
|
|
45
|
-
database: config.database || 'moro_app',
|
|
46
|
-
max: config.connectionLimit || 10,
|
|
47
|
-
ssl: typeof config.ssl === 'object' ? { ...config.ssl } : config.ssl || false,
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
this.pool.on('error', (err: Error) => {
|
|
51
|
-
this.logger.error('PostgreSQL pool error', 'Pool', {
|
|
52
|
-
error: err.message,
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
this.logger.info('PostgreSQL adapter initialized', 'PostgreSQL');
|
|
57
|
-
} catch (error) {
|
|
58
|
-
throw new Error(
|
|
59
|
-
'pg package is required for PostgreSQL adapter. Install it with: npm install pg'
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async connect(): Promise<void> {
|
|
65
|
-
await this.initPromise;
|
|
66
|
-
try {
|
|
67
|
-
const client = await this.pool.connect();
|
|
68
|
-
client.release();
|
|
69
|
-
this.logger.info('PostgreSQL connection established', 'Connection');
|
|
70
|
-
} catch (error) {
|
|
71
|
-
this.logger.error('PostgreSQL connection failed', 'Connection', {
|
|
72
|
-
error: error instanceof Error ? error.message : String(error),
|
|
73
|
-
});
|
|
74
|
-
throw error;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
async disconnect(): Promise<void> {
|
|
79
|
-
await this.initPromise;
|
|
80
|
-
await this.pool.end();
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
|
|
84
|
-
await this.initPromise;
|
|
85
|
-
const result = await this.pool.query(sql, params);
|
|
86
|
-
return result.rows as T[];
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
async queryOne<T = any>(sql: string, params?: any[]): Promise<T | null> {
|
|
90
|
-
const results = await this.query<T>(sql, params);
|
|
91
|
-
return results.length > 0 ? results[0] : null;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
|
|
95
|
-
await this.initPromise;
|
|
96
|
-
const keys = Object.keys(data);
|
|
97
|
-
const values = Object.values(data);
|
|
98
|
-
const placeholders = keys.map((_, index) => `$${index + 1}`).join(', ');
|
|
99
|
-
|
|
100
|
-
const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders}) RETURNING *`;
|
|
101
|
-
const result = await this.pool.query(sql, values);
|
|
102
|
-
|
|
103
|
-
return result.rows[0] as T;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
async update<T = any>(
|
|
107
|
-
table: string,
|
|
108
|
-
data: Record<string, any>,
|
|
109
|
-
where: Record<string, any>
|
|
110
|
-
): Promise<T> {
|
|
111
|
-
await this.initPromise;
|
|
112
|
-
const dataKeys = Object.keys(data);
|
|
113
|
-
const dataValues = Object.values(data);
|
|
114
|
-
const whereKeys = Object.keys(where);
|
|
115
|
-
const whereValues = Object.values(where);
|
|
116
|
-
|
|
117
|
-
const setClause = dataKeys.map((key, index) => `${key} = $${index + 1}`).join(', ');
|
|
118
|
-
const whereClause = whereKeys
|
|
119
|
-
.map((key, index) => `${key} = $${dataKeys.length + index + 1}`)
|
|
120
|
-
.join(' AND ');
|
|
121
|
-
|
|
122
|
-
const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
|
|
123
|
-
const params = [...dataValues, ...whereValues];
|
|
124
|
-
|
|
125
|
-
const result = await this.pool.query(sql, params);
|
|
126
|
-
return result.rows[0] as T;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
async delete(table: string, where: Record<string, any>): Promise<number> {
|
|
130
|
-
await this.initPromise;
|
|
131
|
-
const whereKeys = Object.keys(where);
|
|
132
|
-
const whereValues = Object.values(where);
|
|
133
|
-
const whereClause = whereKeys.map((key, index) => `${key} = $${index + 1}`).join(' AND ');
|
|
134
|
-
|
|
135
|
-
const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
|
|
136
|
-
const result = await this.pool.query(sql, whereValues);
|
|
137
|
-
|
|
138
|
-
return result.rowCount || 0;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
142
|
-
await this.initPromise;
|
|
143
|
-
const client = await this.pool.connect();
|
|
144
|
-
|
|
145
|
-
try {
|
|
146
|
-
await client.query('BEGIN');
|
|
147
|
-
|
|
148
|
-
const transaction = new PostgreSQLTransaction(client);
|
|
149
|
-
const result = await callback(transaction);
|
|
150
|
-
|
|
151
|
-
await client.query('COMMIT');
|
|
152
|
-
return result;
|
|
153
|
-
} catch (error) {
|
|
154
|
-
await client.query('ROLLBACK');
|
|
155
|
-
throw error;
|
|
156
|
-
} finally {
|
|
157
|
-
client.release();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
class PostgreSQLTransaction implements DatabaseTransaction {
|
|
163
|
-
constructor(private client: any) {}
|
|
164
|
-
|
|
165
|
-
async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
|
|
166
|
-
const result = await this.client.query(sql, params);
|
|
167
|
-
return result.rows as T[];
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
async queryOne<T = any>(sql: string, params?: any[]): Promise<T | null> {
|
|
171
|
-
const results = await this.query<T>(sql, params);
|
|
172
|
-
return results.length > 0 ? results[0] : null;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
|
|
176
|
-
const keys = Object.keys(data);
|
|
177
|
-
const values = Object.values(data);
|
|
178
|
-
const placeholders = keys.map((_, index) => `$${index + 1}`).join(', ');
|
|
179
|
-
|
|
180
|
-
const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders}) RETURNING *`;
|
|
181
|
-
const result = await this.client.query(sql, values);
|
|
182
|
-
|
|
183
|
-
return result.rows[0] as T;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
async update<T = any>(
|
|
187
|
-
table: string,
|
|
188
|
-
data: Record<string, any>,
|
|
189
|
-
where: Record<string, any>
|
|
190
|
-
): Promise<T> {
|
|
191
|
-
const dataKeys = Object.keys(data);
|
|
192
|
-
const dataValues = Object.values(data);
|
|
193
|
-
const whereKeys = Object.keys(where);
|
|
194
|
-
const whereValues = Object.values(where);
|
|
195
|
-
|
|
196
|
-
const setClause = dataKeys.map((key, index) => `${key} = $${index + 1}`).join(', ');
|
|
197
|
-
const whereClause = whereKeys
|
|
198
|
-
.map((key, index) => `${key} = $${dataKeys.length + index + 1}`)
|
|
199
|
-
.join(' AND ');
|
|
200
|
-
|
|
201
|
-
const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
|
|
202
|
-
const params = [...dataValues, ...whereValues];
|
|
203
|
-
|
|
204
|
-
const result = await this.client.query(sql, params);
|
|
205
|
-
return result.rows[0] as T;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
async delete(table: string, where: Record<string, any>): Promise<number> {
|
|
209
|
-
const whereKeys = Object.keys(where);
|
|
210
|
-
const whereValues = Object.values(where);
|
|
211
|
-
const whereClause = whereKeys.map((key, index) => `${key} = $${index + 1}`).join(' AND ');
|
|
212
|
-
|
|
213
|
-
const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
|
|
214
|
-
const result = await this.client.query(sql, whereValues);
|
|
215
|
-
|
|
216
|
-
return result.rowCount || 0;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
async commit(): Promise<void> {
|
|
220
|
-
await this.client.query('COMMIT');
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
async rollback(): Promise<void> {
|
|
224
|
-
await this.client.query('ROLLBACK');
|
|
225
|
-
}
|
|
226
|
-
}
|
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
// Database Redis Adapter
|
|
2
|
-
import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database.js';
|
|
3
|
-
import { createFrameworkLogger } from '../../logger/index.js';
|
|
4
|
-
import { resolveUserPackage } from '../../utilities/package-utils.js';
|
|
5
|
-
|
|
6
|
-
interface RedisConfig {
|
|
7
|
-
host?: string;
|
|
8
|
-
port?: number;
|
|
9
|
-
password?: string;
|
|
10
|
-
db?: number;
|
|
11
|
-
keyPrefix?: string;
|
|
12
|
-
maxRetriesPerRequest?: number;
|
|
13
|
-
retryDelayOnFailover?: number;
|
|
14
|
-
lazyConnect?: boolean;
|
|
15
|
-
tls?: {
|
|
16
|
-
rejectUnauthorized?: boolean;
|
|
17
|
-
ca?: string;
|
|
18
|
-
cert?: string;
|
|
19
|
-
key?: string;
|
|
20
|
-
passphrase?: string;
|
|
21
|
-
servername?: string;
|
|
22
|
-
checkServerIdentity?: boolean;
|
|
23
|
-
};
|
|
24
|
-
cluster?: {
|
|
25
|
-
enableReadyCheck?: boolean;
|
|
26
|
-
redisOptions?: any;
|
|
27
|
-
nodes: Array<{ host: string; port: number }>;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export class RedisAdapter implements DatabaseAdapter {
|
|
32
|
-
private client: any;
|
|
33
|
-
private logger = createFrameworkLogger('Redis');
|
|
34
|
-
private keyPrefix: string;
|
|
35
|
-
private initPromise: Promise<void>;
|
|
36
|
-
|
|
37
|
-
constructor(config: RedisConfig = {}) {
|
|
38
|
-
this.keyPrefix = config.keyPrefix || 'moro:';
|
|
39
|
-
this.initPromise = this.initialize(config);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
private async initialize(config: RedisConfig): Promise<void> {
|
|
43
|
-
try {
|
|
44
|
-
const ioredisPath = resolveUserPackage('ioredis');
|
|
45
|
-
const ioredis = await import(ioredisPath);
|
|
46
|
-
const Redis = ioredis.default;
|
|
47
|
-
|
|
48
|
-
if (config.cluster) {
|
|
49
|
-
// Redis Cluster
|
|
50
|
-
const clusterOptions: any = {
|
|
51
|
-
enableReadyCheck: config.cluster.enableReadyCheck || false,
|
|
52
|
-
redisOptions: config.cluster.redisOptions || {},
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
// Add TLS options to cluster configuration
|
|
56
|
-
if (config.tls) {
|
|
57
|
-
clusterOptions.redisOptions.tls = { ...config.tls };
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
this.client = new Redis.Cluster(config.cluster.nodes, clusterOptions);
|
|
61
|
-
} else {
|
|
62
|
-
// Single Redis instance
|
|
63
|
-
const redisOptions: any = {
|
|
64
|
-
host: config.host || 'localhost',
|
|
65
|
-
port: config.port || 6379,
|
|
66
|
-
password: config.password,
|
|
67
|
-
db: config.db || 0,
|
|
68
|
-
maxRetriesPerRequest: config.maxRetriesPerRequest || 3,
|
|
69
|
-
retryDelayOnFailover: config.retryDelayOnFailover || 100,
|
|
70
|
-
lazyConnect: config.lazyConnect || true,
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
// Add TLS options if provided
|
|
74
|
-
if (config.tls) {
|
|
75
|
-
redisOptions.tls = { ...config.tls };
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
this.client = new Redis(redisOptions);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
this.client.on('error', (err: Error) => {
|
|
82
|
-
this.logger.error('Redis client error', 'Redis', {
|
|
83
|
-
error: err.message,
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
this.client.on('connect', () => {
|
|
88
|
-
this.logger.info('Redis connected', 'Connection');
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
this.client.on('disconnect', () => {
|
|
92
|
-
this.logger.warn('Redis disconnected', 'Connection');
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
this.logger.info('Redis adapter initialized', 'Redis');
|
|
96
|
-
} catch (error) {
|
|
97
|
-
throw new Error(
|
|
98
|
-
'ioredis package is required for Redis adapter. Install it with: npm install ioredis'
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
private prefixKey(key: string): string {
|
|
104
|
-
return `${this.keyPrefix}${key}`;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
async connect(): Promise<void> {
|
|
108
|
-
await this.initPromise;
|
|
109
|
-
try {
|
|
110
|
-
await this.client.ping();
|
|
111
|
-
this.logger.info('Redis connection established', 'Connection');
|
|
112
|
-
} catch (error) {
|
|
113
|
-
this.logger.error('Redis connection failed', 'Connection', {
|
|
114
|
-
error: error instanceof Error ? error.message : String(error),
|
|
115
|
-
});
|
|
116
|
-
throw error;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
async disconnect(): Promise<void> {
|
|
121
|
-
await this.initPromise;
|
|
122
|
-
await this.client.quit();
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// For Redis, we adapt the SQL-like interface to key-value operations
|
|
126
|
-
async query<T = any>(pattern: string, _params?: any[]): Promise<T[]> {
|
|
127
|
-
await this.initPromise;
|
|
128
|
-
try {
|
|
129
|
-
const keys = await this.client.keys(this.prefixKey(pattern));
|
|
130
|
-
if (keys.length === 0) return [];
|
|
131
|
-
|
|
132
|
-
const values = await this.client.mget(keys);
|
|
133
|
-
return values.map((value: string, index: number) => ({
|
|
134
|
-
key: keys[index].replace(this.keyPrefix, ''),
|
|
135
|
-
value: value ? JSON.parse(value) : null,
|
|
136
|
-
}));
|
|
137
|
-
} catch (error) {
|
|
138
|
-
this.logger.error('Redis query failed', 'Query', {
|
|
139
|
-
pattern,
|
|
140
|
-
error: error instanceof Error ? error.message : String(error),
|
|
141
|
-
});
|
|
142
|
-
throw error;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
async queryOne<T = any>(key: string, _params?: any[]): Promise<T | null> {
|
|
147
|
-
await this.initPromise;
|
|
148
|
-
try {
|
|
149
|
-
const value = await this.client.get(this.prefixKey(key));
|
|
150
|
-
return value ? JSON.parse(value) : null;
|
|
151
|
-
} catch (error) {
|
|
152
|
-
this.logger.error('Redis queryOne failed', 'Query', {
|
|
153
|
-
key,
|
|
154
|
-
error: error instanceof Error ? error.message : String(error),
|
|
155
|
-
});
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
async insert<T = any>(key: string, data: Record<string, any>): Promise<T> {
|
|
161
|
-
await this.initPromise;
|
|
162
|
-
try {
|
|
163
|
-
const value = JSON.stringify(data);
|
|
164
|
-
await this.client.set(this.prefixKey(key), value);
|
|
165
|
-
return data as T;
|
|
166
|
-
} catch (error) {
|
|
167
|
-
this.logger.error('Redis insert failed', 'Insert', {
|
|
168
|
-
key,
|
|
169
|
-
error: error instanceof Error ? error.message : String(error),
|
|
170
|
-
});
|
|
171
|
-
throw error;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
async update<T = any>(
|
|
176
|
-
key: string,
|
|
177
|
-
data: Record<string, any>,
|
|
178
|
-
_where?: Record<string, any>
|
|
179
|
-
): Promise<T> {
|
|
180
|
-
await this.initPromise;
|
|
181
|
-
try {
|
|
182
|
-
// For Redis, we'll merge with existing data if it exists
|
|
183
|
-
const existing = await this.queryOne(key);
|
|
184
|
-
const merged = existing ? { ...existing, ...data } : data;
|
|
185
|
-
const value = JSON.stringify(merged);
|
|
186
|
-
await this.client.set(this.prefixKey(key), value);
|
|
187
|
-
return merged as T;
|
|
188
|
-
} catch (error) {
|
|
189
|
-
this.logger.error('Redis update failed', 'Update', {
|
|
190
|
-
key,
|
|
191
|
-
error: error instanceof Error ? error.message : String(error),
|
|
192
|
-
});
|
|
193
|
-
throw error;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
async delete(pattern: string, _where?: Record<string, any>): Promise<number> {
|
|
198
|
-
await this.initPromise;
|
|
199
|
-
try {
|
|
200
|
-
const keys = await this.client.keys(this.prefixKey(pattern));
|
|
201
|
-
if (keys.length === 0) return 0;
|
|
202
|
-
|
|
203
|
-
const deletedCount = await this.client.del(...keys);
|
|
204
|
-
return deletedCount;
|
|
205
|
-
} catch (error) {
|
|
206
|
-
this.logger.error('Redis delete failed', 'Delete', {
|
|
207
|
-
pattern,
|
|
208
|
-
error: error instanceof Error ? error.message : String(error),
|
|
209
|
-
});
|
|
210
|
-
throw error;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
215
|
-
await this.initPromise;
|
|
216
|
-
const multi = this.client.multi();
|
|
217
|
-
const transaction = new RedisTransaction(multi, this.keyPrefix);
|
|
218
|
-
|
|
219
|
-
try {
|
|
220
|
-
const result = await callback(transaction);
|
|
221
|
-
await multi.exec();
|
|
222
|
-
return result;
|
|
223
|
-
} catch (error) {
|
|
224
|
-
// Redis doesn't have rollback, but we can discard the multi
|
|
225
|
-
multi.discard();
|
|
226
|
-
throw error;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// Redis-specific methods
|
|
231
|
-
async set(key: string, value: any, ttl?: number): Promise<void> {
|
|
232
|
-
await this.initPromise;
|
|
233
|
-
const prefixedKey = this.prefixKey(key);
|
|
234
|
-
if (ttl) {
|
|
235
|
-
await this.client.setex(prefixedKey, ttl, JSON.stringify(value));
|
|
236
|
-
} else {
|
|
237
|
-
await this.client.set(prefixedKey, JSON.stringify(value));
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
async get(key: string): Promise<any> {
|
|
242
|
-
await this.initPromise;
|
|
243
|
-
const value = await this.client.get(this.prefixKey(key));
|
|
244
|
-
return value ? JSON.parse(value) : null;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
async exists(key: string): Promise<boolean> {
|
|
248
|
-
await this.initPromise;
|
|
249
|
-
const result = await this.client.exists(this.prefixKey(key));
|
|
250
|
-
return result === 1;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
async expire(key: string, ttl: number): Promise<boolean> {
|
|
254
|
-
await this.initPromise;
|
|
255
|
-
const result = await this.client.expire(this.prefixKey(key), ttl);
|
|
256
|
-
return result === 1;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
async incr(key: string): Promise<number> {
|
|
260
|
-
await this.initPromise;
|
|
261
|
-
return await this.client.incr(this.prefixKey(key));
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
async decr(key: string): Promise<number> {
|
|
265
|
-
await this.initPromise;
|
|
266
|
-
return await this.client.decr(this.prefixKey(key));
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
async hset(hash: string, field: string, value: any): Promise<void> {
|
|
270
|
-
await this.initPromise;
|
|
271
|
-
await this.client.hset(this.prefixKey(hash), field, JSON.stringify(value));
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
async hget(hash: string, field: string): Promise<any> {
|
|
275
|
-
await this.initPromise;
|
|
276
|
-
const value = await this.client.hget(this.prefixKey(hash), field);
|
|
277
|
-
return value ? JSON.parse(value) : null;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
async hgetall(hash: string): Promise<Record<string, any>> {
|
|
281
|
-
await this.initPromise;
|
|
282
|
-
const result = await this.client.hgetall(this.prefixKey(hash));
|
|
283
|
-
const parsed: Record<string, any> = {};
|
|
284
|
-
for (const [key, value] of Object.entries(result)) {
|
|
285
|
-
parsed[key] = JSON.parse(value as string);
|
|
286
|
-
}
|
|
287
|
-
return parsed;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
async lpush(list: string, ...values: any[]): Promise<number> {
|
|
291
|
-
await this.initPromise;
|
|
292
|
-
const serialized = values.map(v => JSON.stringify(v));
|
|
293
|
-
return await this.client.lpush(this.prefixKey(list), ...serialized);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
async rpop(list: string): Promise<any> {
|
|
297
|
-
await this.initPromise;
|
|
298
|
-
const value = await this.client.rpop(this.prefixKey(list));
|
|
299
|
-
return value ? JSON.parse(value) : null;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
async lrange(list: string, start: number, stop: number): Promise<any[]> {
|
|
303
|
-
await this.initPromise;
|
|
304
|
-
const values = await this.client.lrange(this.prefixKey(list), start, stop);
|
|
305
|
-
return values.map((v: string) => JSON.parse(v));
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
async publish(channel: string, message: any): Promise<number> {
|
|
309
|
-
await this.initPromise;
|
|
310
|
-
return await this.client.publish(channel, JSON.stringify(message));
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
async subscribe(channel: string, callback: (message: any) => void): Promise<void> {
|
|
314
|
-
await this.initPromise;
|
|
315
|
-
const subscriber = this.client.duplicate();
|
|
316
|
-
subscriber.subscribe(channel);
|
|
317
|
-
subscriber.on('message', (_channel: string, message: string) => {
|
|
318
|
-
callback(JSON.parse(message));
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
getClient() {
|
|
323
|
-
return this.client;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
class RedisTransaction implements DatabaseTransaction {
|
|
328
|
-
constructor(
|
|
329
|
-
private multi: any,
|
|
330
|
-
private keyPrefix: string
|
|
331
|
-
) {}
|
|
332
|
-
|
|
333
|
-
private prefixKey(key: string): string {
|
|
334
|
-
return `${this.keyPrefix}${key}`;
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
async query<T = any>(pattern: string, _params?: any[]): Promise<T[]> {
|
|
338
|
-
// Note: Redis transactions can't perform read operations during MULTI
|
|
339
|
-
// This is a limitation of Redis transactions
|
|
340
|
-
throw new Error(
|
|
341
|
-
'Redis transactions cannot perform read operations. Use regular operations instead.'
|
|
342
|
-
);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
async queryOne<T = any>(_key: string, _params?: any[]): Promise<T | null> {
|
|
346
|
-
throw new Error(
|
|
347
|
-
'Redis transactions cannot perform read operations. Use regular operations instead.'
|
|
348
|
-
);
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
async insert<T = any>(key: string, data: Record<string, any>): Promise<T> {
|
|
352
|
-
const value = JSON.stringify(data);
|
|
353
|
-
this.multi.set(this.prefixKey(key), value);
|
|
354
|
-
return data as T;
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
async update<T = any>(
|
|
358
|
-
key: string,
|
|
359
|
-
data: Record<string, any>,
|
|
360
|
-
_where?: Record<string, any>
|
|
361
|
-
): Promise<T> {
|
|
362
|
-
const value = JSON.stringify(data);
|
|
363
|
-
this.multi.set(this.prefixKey(key), value);
|
|
364
|
-
return data as T;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
async delete(pattern: string, _where?: Record<string, any>): Promise<number> {
|
|
368
|
-
this.multi.del(this.prefixKey(pattern));
|
|
369
|
-
return 1; // We can't know the actual count in a transaction
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
async commit(): Promise<void> {
|
|
373
|
-
await this.multi.exec();
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
async rollback(): Promise<void> {
|
|
377
|
-
this.multi.discard();
|
|
378
|
-
}
|
|
379
|
-
}
|