@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,238 +0,0 @@
|
|
|
1
|
-
# Database Adapters
|
|
2
|
-
|
|
3
|
-
The MoroJS database module provides a pluggable adapter system for different database backends, similar to the middleware adapter pattern.
|
|
4
|
-
|
|
5
|
-
## Available Adapters
|
|
6
|
-
|
|
7
|
-
### SQL Databases
|
|
8
|
-
|
|
9
|
-
#### MySQL Adapter
|
|
10
|
-
|
|
11
|
-
- **Package Required**: `mysql2`
|
|
12
|
-
- **Usage**: Production-ready with connection pooling
|
|
13
|
-
- **Type**: `mysql`
|
|
14
|
-
|
|
15
|
-
#### PostgreSQL Adapter
|
|
16
|
-
|
|
17
|
-
- **Package Required**: `pg` and `@types/pg`
|
|
18
|
-
- **Usage**: Full PostgreSQL feature support
|
|
19
|
-
- **Type**: `postgresql`, `postgres`, or `pg`
|
|
20
|
-
|
|
21
|
-
#### SQLite Adapter
|
|
22
|
-
|
|
23
|
-
- **Package Required**: `better-sqlite3`
|
|
24
|
-
- **Usage**: Lightweight, file-based database
|
|
25
|
-
- **Type**: `sqlite` or `sqlite3`
|
|
26
|
-
|
|
27
|
-
### NoSQL Databases
|
|
28
|
-
|
|
29
|
-
#### MongoDB Adapter
|
|
30
|
-
|
|
31
|
-
- **Package Required**: `mongodb`
|
|
32
|
-
- **Usage**: Document database with aggregation support
|
|
33
|
-
- **Type**: `mongodb` or `mongo`
|
|
34
|
-
|
|
35
|
-
#### Redis Adapter
|
|
36
|
-
|
|
37
|
-
- **Package Required**: `ioredis`
|
|
38
|
-
- **Usage**: In-memory key-value store with pub/sub
|
|
39
|
-
- **Type**: `redis`
|
|
40
|
-
|
|
41
|
-
### ORM
|
|
42
|
-
|
|
43
|
-
#### Drizzle Adapter
|
|
44
|
-
|
|
45
|
-
- **Package Required**: `drizzle-orm` + database driver
|
|
46
|
-
- **Usage**: Type-safe ORM with schema validation
|
|
47
|
-
- **Type**: `drizzle` or `orm`
|
|
48
|
-
|
|
49
|
-
## Factory Pattern (Recommended)
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
import { createDatabaseAdapter } from '@morojs/moro';
|
|
53
|
-
|
|
54
|
-
// SQL Databases
|
|
55
|
-
const mysql = createDatabaseAdapter('mysql', {
|
|
56
|
-
host: 'localhost',
|
|
57
|
-
port: 3306,
|
|
58
|
-
user: 'root',
|
|
59
|
-
password: 'password',
|
|
60
|
-
database: 'my_app',
|
|
61
|
-
connectionLimit: 10,
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
const postgres = createDatabaseAdapter('postgresql', {
|
|
65
|
-
host: 'localhost',
|
|
66
|
-
port: 5432,
|
|
67
|
-
user: 'postgres',
|
|
68
|
-
password: 'password',
|
|
69
|
-
database: 'my_app',
|
|
70
|
-
connectionLimit: 10,
|
|
71
|
-
ssl: false,
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
const sqlite = createDatabaseAdapter('sqlite', {
|
|
75
|
-
filename: 'app.db',
|
|
76
|
-
memory: false,
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
// NoSQL Databases
|
|
80
|
-
const mongodb = createDatabaseAdapter('mongodb', {
|
|
81
|
-
host: 'localhost',
|
|
82
|
-
port: 27017,
|
|
83
|
-
database: 'my_app',
|
|
84
|
-
username: 'user',
|
|
85
|
-
password: 'password',
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
const redis = createDatabaseAdapter('redis', {
|
|
89
|
-
host: 'localhost',
|
|
90
|
-
port: 6379,
|
|
91
|
-
password: 'password',
|
|
92
|
-
keyPrefix: 'myapp:',
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
// ORM
|
|
96
|
-
const drizzle = createDatabaseAdapter('drizzle', {
|
|
97
|
-
database: drizzleInstance,
|
|
98
|
-
schema: schemaObject,
|
|
99
|
-
});
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## Direct Instantiation
|
|
103
|
-
|
|
104
|
-
```typescript
|
|
105
|
-
import {
|
|
106
|
-
MySQLAdapter,
|
|
107
|
-
PostgreSQLAdapter,
|
|
108
|
-
SQLiteAdapter,
|
|
109
|
-
MongoDBAdapter,
|
|
110
|
-
RedisAdapter,
|
|
111
|
-
DrizzleAdapter
|
|
112
|
-
} from '@morojs/moro';
|
|
113
|
-
|
|
114
|
-
// SQL
|
|
115
|
-
const mysql = new MySQLAdapter({ host: 'localhost', ... });
|
|
116
|
-
const postgres = new PostgreSQLAdapter({ host: 'localhost', ... });
|
|
117
|
-
const sqlite = new SQLiteAdapter({ filename: 'app.db' });
|
|
118
|
-
|
|
119
|
-
// NoSQL
|
|
120
|
-
const mongodb = new MongoDBAdapter({ host: 'localhost', ... });
|
|
121
|
-
const redis = new RedisAdapter({ host: 'localhost', ... });
|
|
122
|
-
|
|
123
|
-
// ORM
|
|
124
|
-
const drizzle = new DrizzleAdapter({ database: drizzleInstance, schema });
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
## Common Interface
|
|
128
|
-
|
|
129
|
-
All adapters implement the same `DatabaseAdapter` interface:
|
|
130
|
-
|
|
131
|
-
```typescript
|
|
132
|
-
interface DatabaseAdapter {
|
|
133
|
-
connect(): Promise<void>;
|
|
134
|
-
disconnect(): Promise<void>;
|
|
135
|
-
query<T>(sql: string, params?: any[]): Promise<T[]>;
|
|
136
|
-
queryOne<T>(sql: string, params?: any[]): Promise<T | null>;
|
|
137
|
-
insert<T>(table: string, data: Record<string, any>): Promise<T>;
|
|
138
|
-
update<T>(table: string, data: Record<string, any>, where: Record<string, any>): Promise<T>;
|
|
139
|
-
delete(table: string, where: Record<string, any>): Promise<number>;
|
|
140
|
-
transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T>;
|
|
141
|
-
}
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## Usage Example
|
|
145
|
-
|
|
146
|
-
```typescript
|
|
147
|
-
// Initialize
|
|
148
|
-
await db.connect();
|
|
149
|
-
|
|
150
|
-
// Basic operations
|
|
151
|
-
const users = await db.query('SELECT * FROM users');
|
|
152
|
-
const user = await db.queryOne('SELECT * FROM users WHERE id = ?', [1]);
|
|
153
|
-
|
|
154
|
-
// ORM-like helpers
|
|
155
|
-
const newUser = await db.insert('users', { name: 'John', email: 'john@example.com' });
|
|
156
|
-
const updated = await db.update('users', { name: 'Jane' }, { id: 1 });
|
|
157
|
-
const deleted = await db.delete('users', { id: 1 });
|
|
158
|
-
|
|
159
|
-
// Transactions
|
|
160
|
-
const result = await db.transaction(async tx => {
|
|
161
|
-
const user = await tx.insert('users', userData);
|
|
162
|
-
await tx.insert('profiles', { user_id: user.id, ...profileData });
|
|
163
|
-
return user;
|
|
164
|
-
});
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
## Usage Examples
|
|
168
|
-
|
|
169
|
-
### SQL Operations
|
|
170
|
-
|
|
171
|
-
```typescript
|
|
172
|
-
// Standard CRUD operations work across all SQL adapters
|
|
173
|
-
const users = await db.query('SELECT * FROM users WHERE age > ?', [18]);
|
|
174
|
-
const user = await db.queryOne('SELECT * FROM users WHERE id = ?', [1]);
|
|
175
|
-
const newUser = await db.insert('users', { name: 'John', email: 'john@example.com' });
|
|
176
|
-
const updated = await db.update('users', { name: 'Jane' }, { id: 1 });
|
|
177
|
-
const deleted = await db.delete('users', { id: 1 });
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### MongoDB Operations
|
|
181
|
-
|
|
182
|
-
```typescript
|
|
183
|
-
// MongoDB uses collections instead of tables
|
|
184
|
-
const users = await mongoDb.query('users'); // Get all
|
|
185
|
-
const users = await mongoDb.query('users', { age: { $gte: 18 } }); // Query
|
|
186
|
-
const user = await mongoDb.queryOne('users', { email: 'john@example.com' });
|
|
187
|
-
|
|
188
|
-
// MongoDB-specific methods
|
|
189
|
-
const stats = await mongoDb.aggregate('users', [
|
|
190
|
-
{ $group: { _id: null, avgAge: { $avg: '$age' } } },
|
|
191
|
-
]);
|
|
192
|
-
await mongoDb.createIndex('users', { email: 1 }, { unique: true });
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
### Redis Operations
|
|
196
|
-
|
|
197
|
-
```typescript
|
|
198
|
-
// Key-value operations
|
|
199
|
-
await redisDb.set('user:123', userData, 3600); // with TTL
|
|
200
|
-
const user = await redisDb.get('user:123');
|
|
201
|
-
|
|
202
|
-
// Redis-specific methods
|
|
203
|
-
await redisDb.incr('page:views');
|
|
204
|
-
await redisDb.lpush('tasks', taskData);
|
|
205
|
-
await redisDb.publish('notifications', message);
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Drizzle ORM Operations
|
|
209
|
-
|
|
210
|
-
```typescript
|
|
211
|
-
// Type-safe queries (requires schema setup)
|
|
212
|
-
const users = await drizzleDb.select('users').where(eq(schema.users.age, 25));
|
|
213
|
-
const newUser = await drizzleDb.insertInto('users').values(userData).returning();
|
|
214
|
-
|
|
215
|
-
// Raw SQL fallback
|
|
216
|
-
const users = await drizzleDb.query('SELECT * FROM users WHERE age > ?', [18]);
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
## Installation
|
|
220
|
-
|
|
221
|
-
Choose and install the appropriate database package:
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
# SQL Databases
|
|
225
|
-
npm install mysql2 # MySQL
|
|
226
|
-
npm install pg @types/pg # PostgreSQL
|
|
227
|
-
npm install better-sqlite3 # SQLite
|
|
228
|
-
|
|
229
|
-
# NoSQL Databases
|
|
230
|
-
npm install mongodb # MongoDB
|
|
231
|
-
npm install ioredis # Redis
|
|
232
|
-
|
|
233
|
-
# ORM
|
|
234
|
-
npm install drizzle-orm # Drizzle ORM
|
|
235
|
-
# Plus the appropriate driver (mysql2, pg, better-sqlite3, etc.)
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
The adapters will gracefully handle missing packages with helpful error messages.
|
|
@@ -1,415 +0,0 @@
|
|
|
1
|
-
// Database Drizzle ORM 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
|
-
// Cache the drizzle-orm module
|
|
7
|
-
let drizzleOrm: any = null;
|
|
8
|
-
async function getDrizzleOrm() {
|
|
9
|
-
if (!drizzleOrm) {
|
|
10
|
-
const drizzlePath = resolveUserPackage('drizzle-orm');
|
|
11
|
-
const module = await import(drizzlePath);
|
|
12
|
-
drizzleOrm = module;
|
|
13
|
-
}
|
|
14
|
-
return drizzleOrm;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
interface DrizzleConfig {
|
|
18
|
-
database: any; // Drizzle database instance
|
|
19
|
-
schema?: any; // Optional schema for additional type safety
|
|
20
|
-
logger?: boolean;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export class DrizzleAdapter implements DatabaseAdapter {
|
|
24
|
-
private db: any;
|
|
25
|
-
private schema: any;
|
|
26
|
-
private logger = createFrameworkLogger('Drizzle');
|
|
27
|
-
|
|
28
|
-
constructor(config: DrizzleConfig) {
|
|
29
|
-
try {
|
|
30
|
-
if (!config.database) {
|
|
31
|
-
throw new Error('Drizzle database instance is required');
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
this.db = config.database;
|
|
35
|
-
this.schema = config.schema;
|
|
36
|
-
|
|
37
|
-
this.logger.info('Drizzle ORM adapter initialized', 'Drizzle');
|
|
38
|
-
} catch (error) {
|
|
39
|
-
this.logger.error('Drizzle ORM initialization failed', 'Drizzle');
|
|
40
|
-
throw new Error(
|
|
41
|
-
'Drizzle ORM configuration error. Ensure you have a valid Drizzle database instance.'
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async connect(): Promise<void> {
|
|
47
|
-
// Drizzle doesn't have an explicit connect method
|
|
48
|
-
// Connection is handled by the underlying driver
|
|
49
|
-
this.logger.info('Drizzle ORM adapter ready', 'Connection');
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async disconnect(): Promise<void> {
|
|
53
|
-
// Drizzle doesn't have an explicit disconnect method
|
|
54
|
-
// This would be handled by the underlying driver
|
|
55
|
-
this.logger.info('Drizzle ORM adapter disconnected', 'Connection');
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Raw SQL query support
|
|
59
|
-
async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
|
|
60
|
-
try {
|
|
61
|
-
// Using Drizzle's execute method for raw SQL
|
|
62
|
-
const result = await this.db.execute(sql, params);
|
|
63
|
-
|
|
64
|
-
// Handle different result formats from different drivers
|
|
65
|
-
if (Array.isArray(result)) {
|
|
66
|
-
return result;
|
|
67
|
-
} else if (result.rows) {
|
|
68
|
-
return result.rows;
|
|
69
|
-
} else if (result.recordset) {
|
|
70
|
-
return result.recordset;
|
|
71
|
-
} else {
|
|
72
|
-
return [result];
|
|
73
|
-
}
|
|
74
|
-
} catch (error) {
|
|
75
|
-
this.logger.error('Drizzle query failed', 'Query', {
|
|
76
|
-
sql,
|
|
77
|
-
error: error instanceof Error ? error.message : String(error),
|
|
78
|
-
});
|
|
79
|
-
throw error;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
async queryOne<T = any>(sql: string, params?: any[]): Promise<T | null> {
|
|
84
|
-
const results = await this.query<T>(sql, params);
|
|
85
|
-
return results.length > 0 ? results[0] : null;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// ORM-style operations (requires schema)
|
|
89
|
-
async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
|
|
90
|
-
try {
|
|
91
|
-
if (this.schema && this.schema[table]) {
|
|
92
|
-
// Use schema-based insert
|
|
93
|
-
const result = await this.db.insert(this.schema[table]).values(data).returning();
|
|
94
|
-
return result[0] as T;
|
|
95
|
-
} else {
|
|
96
|
-
// Fallback to raw SQL
|
|
97
|
-
const keys = Object.keys(data);
|
|
98
|
-
const values = Object.values(data);
|
|
99
|
-
const placeholders = keys.map((_, i) => `$${i + 1}`).join(', ');
|
|
100
|
-
|
|
101
|
-
const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders}) RETURNING *`;
|
|
102
|
-
const result = await this.query<T>(sql, values);
|
|
103
|
-
return result[0];
|
|
104
|
-
}
|
|
105
|
-
} catch (error) {
|
|
106
|
-
this.logger.error('Drizzle insert failed', 'Insert', {
|
|
107
|
-
table,
|
|
108
|
-
error: error instanceof Error ? error.message : String(error),
|
|
109
|
-
});
|
|
110
|
-
throw error;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
async update<T = any>(
|
|
115
|
-
table: string,
|
|
116
|
-
data: Record<string, any>,
|
|
117
|
-
where: Record<string, any>
|
|
118
|
-
): Promise<T> {
|
|
119
|
-
try {
|
|
120
|
-
if (this.schema && this.schema[table]) {
|
|
121
|
-
// Use schema-based update
|
|
122
|
-
try {
|
|
123
|
-
const { eq, and } = await getDrizzleOrm();
|
|
124
|
-
|
|
125
|
-
// Build where conditions
|
|
126
|
-
const conditions = Object.entries(where).map(([key, value]) =>
|
|
127
|
-
eq(this.schema[table][key], value)
|
|
128
|
-
);
|
|
129
|
-
const whereClause = conditions.length === 1 ? conditions[0] : and(...conditions);
|
|
130
|
-
|
|
131
|
-
const result = await this.db
|
|
132
|
-
.update(this.schema[table])
|
|
133
|
-
.set(data)
|
|
134
|
-
.where(whereClause)
|
|
135
|
-
.returning();
|
|
136
|
-
|
|
137
|
-
return result[0] as T;
|
|
138
|
-
} catch (importError) {
|
|
139
|
-
// Fallback to raw SQL if drizzle-orm is not available
|
|
140
|
-
const setClause = Object.keys(data)
|
|
141
|
-
.map((key, i) => `${key} = $${i + 1}`)
|
|
142
|
-
.join(', ');
|
|
143
|
-
const whereClause = Object.keys(where)
|
|
144
|
-
.map((key, i) => `${key} = $${Object.keys(data).length + i + 1}`)
|
|
145
|
-
.join(' AND ');
|
|
146
|
-
|
|
147
|
-
const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
|
|
148
|
-
const params = [...Object.values(data), ...Object.values(where)];
|
|
149
|
-
const result = await this.query<T>(sql, params);
|
|
150
|
-
return result[0];
|
|
151
|
-
}
|
|
152
|
-
} else {
|
|
153
|
-
// Fallback to raw SQL
|
|
154
|
-
const setClause = Object.keys(data)
|
|
155
|
-
.map((key, i) => `${key} = $${i + 1}`)
|
|
156
|
-
.join(', ');
|
|
157
|
-
const whereClause = Object.keys(where)
|
|
158
|
-
.map((key, i) => `${key} = $${Object.keys(data).length + i + 1}`)
|
|
159
|
-
.join(' AND ');
|
|
160
|
-
|
|
161
|
-
const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
|
|
162
|
-
const params = [...Object.values(data), ...Object.values(where)];
|
|
163
|
-
const result = await this.query<T>(sql, params);
|
|
164
|
-
return result[0];
|
|
165
|
-
}
|
|
166
|
-
} catch (error) {
|
|
167
|
-
this.logger.error('Drizzle update failed', 'Update', {
|
|
168
|
-
table,
|
|
169
|
-
error: error instanceof Error ? error.message : String(error),
|
|
170
|
-
});
|
|
171
|
-
throw error;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
async delete(table: string, where: Record<string, any>): Promise<number> {
|
|
176
|
-
try {
|
|
177
|
-
if (this.schema && this.schema[table]) {
|
|
178
|
-
// Use schema-based delete
|
|
179
|
-
try {
|
|
180
|
-
const { eq, and } = await getDrizzleOrm();
|
|
181
|
-
|
|
182
|
-
const conditions = Object.entries(where).map(([key, value]) =>
|
|
183
|
-
eq(this.schema[table][key], value)
|
|
184
|
-
);
|
|
185
|
-
const whereClause = conditions.length === 1 ? conditions[0] : and(...conditions);
|
|
186
|
-
|
|
187
|
-
const result = await this.db.delete(this.schema[table]).where(whereClause);
|
|
188
|
-
|
|
189
|
-
return (
|
|
190
|
-
(result as any).changes || (result as any).rowCount || (result as any).affectedRows || 0
|
|
191
|
-
);
|
|
192
|
-
} catch (importError) {
|
|
193
|
-
// Fallback to raw SQL if drizzle-orm is not available
|
|
194
|
-
const whereClause = Object.keys(where)
|
|
195
|
-
.map((key, i) => `${key} = $${i + 1}`)
|
|
196
|
-
.join(' AND ');
|
|
197
|
-
const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
|
|
198
|
-
await this.query(sql, Object.values(where));
|
|
199
|
-
return 1; // Can't determine exact count without result metadata
|
|
200
|
-
}
|
|
201
|
-
} else {
|
|
202
|
-
// Fallback to raw SQL
|
|
203
|
-
const whereClause = Object.keys(where)
|
|
204
|
-
.map((key, i) => `${key} = $${i + 1}`)
|
|
205
|
-
.join(' AND ');
|
|
206
|
-
const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
|
|
207
|
-
await this.query(sql, Object.values(where));
|
|
208
|
-
return 1; // Can't determine exact count without result metadata
|
|
209
|
-
}
|
|
210
|
-
} catch (error) {
|
|
211
|
-
this.logger.error('Drizzle delete failed', 'Delete', {
|
|
212
|
-
table,
|
|
213
|
-
error: error instanceof Error ? error.message : String(error),
|
|
214
|
-
});
|
|
215
|
-
throw error;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
220
|
-
return await this.db.transaction(async (tx: any) => {
|
|
221
|
-
const transaction = new DrizzleTransaction(tx, this.schema, this.logger);
|
|
222
|
-
return await callback(transaction);
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
// Drizzle-specific methods
|
|
227
|
-
select(table?: string) {
|
|
228
|
-
if (table && this.schema && this.schema[table]) {
|
|
229
|
-
return this.db.select().from(this.schema[table]);
|
|
230
|
-
}
|
|
231
|
-
return this.db.select();
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
insertInto(table: string) {
|
|
235
|
-
if (this.schema && this.schema[table]) {
|
|
236
|
-
return this.db.insert(this.schema[table]);
|
|
237
|
-
}
|
|
238
|
-
throw new Error(`Table ${table} not found in schema`);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
updateTable(table: string) {
|
|
242
|
-
if (this.schema && this.schema[table]) {
|
|
243
|
-
return this.db.update(this.schema[table]);
|
|
244
|
-
}
|
|
245
|
-
throw new Error(`Table ${table} not found in schema`);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
deleteFrom(table: string) {
|
|
249
|
-
if (this.schema && this.schema[table]) {
|
|
250
|
-
return this.db.delete(this.schema[table]);
|
|
251
|
-
}
|
|
252
|
-
throw new Error(`Table ${table} not found in schema`);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
getSchema() {
|
|
256
|
-
return this.schema;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
getDb() {
|
|
260
|
-
return this.db;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// Schema introspection helpers
|
|
264
|
-
getTableNames(): string[] {
|
|
265
|
-
return this.schema ? Object.keys(this.schema) : [];
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
hasTable(tableName: string): boolean {
|
|
269
|
-
return this.schema ? !!this.schema[tableName] : false;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
class DrizzleTransaction implements DatabaseTransaction {
|
|
274
|
-
constructor(
|
|
275
|
-
private tx: any,
|
|
276
|
-
private schema: any,
|
|
277
|
-
private logger: any
|
|
278
|
-
) {}
|
|
279
|
-
|
|
280
|
-
async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
|
|
281
|
-
try {
|
|
282
|
-
const result = await this.tx.execute(sql, params);
|
|
283
|
-
|
|
284
|
-
if (Array.isArray(result)) {
|
|
285
|
-
return result;
|
|
286
|
-
} else if (result.rows) {
|
|
287
|
-
return result.rows;
|
|
288
|
-
} else if (result.recordset) {
|
|
289
|
-
return result.recordset;
|
|
290
|
-
} else {
|
|
291
|
-
return [result];
|
|
292
|
-
}
|
|
293
|
-
} catch (error) {
|
|
294
|
-
this.logger.error('Drizzle transaction query failed', 'Query', {
|
|
295
|
-
sql,
|
|
296
|
-
error: error instanceof Error ? error.message : String(error),
|
|
297
|
-
});
|
|
298
|
-
throw error;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
async queryOne<T = any>(sql: string, params?: any[]): Promise<T | null> {
|
|
303
|
-
const results = await this.query<T>(sql, params);
|
|
304
|
-
return results.length > 0 ? results[0] : null;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
|
|
308
|
-
if (this.schema && this.schema[table]) {
|
|
309
|
-
const result = await this.tx.insert(this.schema[table]).values(data).returning();
|
|
310
|
-
return result[0] as T;
|
|
311
|
-
} else {
|
|
312
|
-
const keys = Object.keys(data);
|
|
313
|
-
const values = Object.values(data);
|
|
314
|
-
const placeholders = keys.map((_, i) => `$${i + 1}`).join(', ');
|
|
315
|
-
|
|
316
|
-
const sql = `INSERT INTO ${table} (${keys.join(', ')}) VALUES (${placeholders}) RETURNING *`;
|
|
317
|
-
const result = await this.query<T>(sql, values);
|
|
318
|
-
return result[0];
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
async update<T = any>(
|
|
323
|
-
table: string,
|
|
324
|
-
data: Record<string, any>,
|
|
325
|
-
where: Record<string, any>
|
|
326
|
-
): Promise<T> {
|
|
327
|
-
if (this.schema && this.schema[table]) {
|
|
328
|
-
try {
|
|
329
|
-
const { eq, and } = await getDrizzleOrm();
|
|
330
|
-
|
|
331
|
-
const conditions = Object.entries(where).map(([key, value]) =>
|
|
332
|
-
eq(this.schema[table][key], value)
|
|
333
|
-
);
|
|
334
|
-
const whereClause = conditions.length === 1 ? conditions[0] : and(...conditions);
|
|
335
|
-
|
|
336
|
-
const result = await this.tx
|
|
337
|
-
.update(this.schema[table])
|
|
338
|
-
.set(data)
|
|
339
|
-
.where(whereClause)
|
|
340
|
-
.returning();
|
|
341
|
-
|
|
342
|
-
return result[0] as T;
|
|
343
|
-
} catch (importError) {
|
|
344
|
-
// Fallback to raw SQL
|
|
345
|
-
const setClause = Object.keys(data)
|
|
346
|
-
.map((key, i) => `${key} = $${i + 1}`)
|
|
347
|
-
.join(', ');
|
|
348
|
-
const whereClause = Object.keys(where)
|
|
349
|
-
.map((key, i) => `${key} = $${Object.keys(data).length + i + 1}`)
|
|
350
|
-
.join(' AND ');
|
|
351
|
-
|
|
352
|
-
const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
|
|
353
|
-
const params = [...Object.values(data), ...Object.values(where)];
|
|
354
|
-
const result = await this.query<T>(sql, params);
|
|
355
|
-
return result[0];
|
|
356
|
-
}
|
|
357
|
-
} else {
|
|
358
|
-
const setClause = Object.keys(data)
|
|
359
|
-
.map((key, i) => `${key} = $${i + 1}`)
|
|
360
|
-
.join(', ');
|
|
361
|
-
const whereClause = Object.keys(where)
|
|
362
|
-
.map((key, i) => `${key} = $${Object.keys(data).length + i + 1}`)
|
|
363
|
-
.join(' AND ');
|
|
364
|
-
|
|
365
|
-
const sql = `UPDATE ${table} SET ${setClause} WHERE ${whereClause} RETURNING *`;
|
|
366
|
-
const params = [...Object.values(data), ...Object.values(where)];
|
|
367
|
-
const result = await this.query<T>(sql, params);
|
|
368
|
-
return result[0];
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
async delete(table: string, where: Record<string, any>): Promise<number> {
|
|
373
|
-
if (this.schema && this.schema[table]) {
|
|
374
|
-
try {
|
|
375
|
-
const { eq, and } = await getDrizzleOrm();
|
|
376
|
-
|
|
377
|
-
const conditions = Object.entries(where).map(([key, value]) =>
|
|
378
|
-
eq(this.schema[table][key], value)
|
|
379
|
-
);
|
|
380
|
-
const whereClause = conditions.length === 1 ? conditions[0] : and(...conditions);
|
|
381
|
-
|
|
382
|
-
const result = await this.tx.delete(this.schema[table]).where(whereClause);
|
|
383
|
-
|
|
384
|
-
return (
|
|
385
|
-
(result as any).changes || (result as any).rowCount || (result as any).affectedRows || 0
|
|
386
|
-
);
|
|
387
|
-
} catch (importError) {
|
|
388
|
-
// Fallback to raw SQL
|
|
389
|
-
const whereClause = Object.keys(where)
|
|
390
|
-
.map((key, i) => `${key} = $${i + 1}`)
|
|
391
|
-
.join(' AND ');
|
|
392
|
-
const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
|
|
393
|
-
await this.query(sql, Object.values(where));
|
|
394
|
-
return 1; // Can't determine exact count
|
|
395
|
-
}
|
|
396
|
-
} else {
|
|
397
|
-
const whereClause = Object.keys(where)
|
|
398
|
-
.map((key, i) => `${key} = $${i + 1}`)
|
|
399
|
-
.join(' AND ');
|
|
400
|
-
const sql = `DELETE FROM ${table} WHERE ${whereClause}`;
|
|
401
|
-
await this.query(sql, Object.values(where));
|
|
402
|
-
return 1; // Can't determine exact count
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
async commit(): Promise<void> {
|
|
407
|
-
// Drizzle transactions are auto-committed
|
|
408
|
-
// This is just for interface compatibility
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
async rollback(): Promise<void> {
|
|
412
|
-
// Drizzle transactions will auto-rollback on error
|
|
413
|
-
throw new Error('Transaction rollback');
|
|
414
|
-
}
|
|
415
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// Database Adapters
|
|
2
|
-
export { MySQLAdapter } from './mysql.js';
|
|
3
|
-
export { PostgreSQLAdapter } from './postgresql.js';
|
|
4
|
-
export { SQLiteAdapter } from './sqlite.js';
|
|
5
|
-
export { MongoDBAdapter } from './mongodb.js';
|
|
6
|
-
export { RedisAdapter } from './redis.js';
|
|
7
|
-
export { DrizzleAdapter } from './drizzle.js';
|
|
8
|
-
|
|
9
|
-
import { MySQLAdapter } from './mysql.js';
|
|
10
|
-
import { PostgreSQLAdapter } from './postgresql.js';
|
|
11
|
-
import { SQLiteAdapter } from './sqlite.js';
|
|
12
|
-
import { MongoDBAdapter } from './mongodb.js';
|
|
13
|
-
import { RedisAdapter } from './redis.js';
|
|
14
|
-
import { DrizzleAdapter } from './drizzle.js';
|
|
15
|
-
import { DatabaseAdapter } from '../../../types/database.js';
|
|
16
|
-
|
|
17
|
-
// Adapter factory function for auto-loading
|
|
18
|
-
export function createDatabaseAdapter(type: string, options: any = {}): DatabaseAdapter {
|
|
19
|
-
switch (type.toLowerCase()) {
|
|
20
|
-
case 'mysql':
|
|
21
|
-
return new MySQLAdapter(options);
|
|
22
|
-
case 'postgresql':
|
|
23
|
-
case 'postgres':
|
|
24
|
-
case 'pg':
|
|
25
|
-
return new PostgreSQLAdapter(options);
|
|
26
|
-
case 'sqlite':
|
|
27
|
-
case 'sqlite3':
|
|
28
|
-
return new SQLiteAdapter(options);
|
|
29
|
-
case 'mongodb':
|
|
30
|
-
case 'mongo':
|
|
31
|
-
return new MongoDBAdapter(options);
|
|
32
|
-
case 'redis':
|
|
33
|
-
return new RedisAdapter(options);
|
|
34
|
-
case 'drizzle':
|
|
35
|
-
case 'orm':
|
|
36
|
-
return new DrizzleAdapter(options);
|
|
37
|
-
default:
|
|
38
|
-
throw new Error(
|
|
39
|
-
`Unknown database adapter type: ${type}. Available types: mysql, postgresql, sqlite, mongodb, redis, drizzle`
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
}
|