@morojs/moro 1.5.16 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -269
- package/dist/core/auth/morojs-adapter.js +5 -9
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/config-manager.d.ts +1 -1
- package/dist/core/config/config-manager.js +10 -20
- package/dist/core/config/config-manager.js.map +1 -1
- package/dist/core/config/config-sources.d.ts +2 -2
- package/dist/core/config/config-sources.js +17 -20
- package/dist/core/config/config-sources.js.map +1 -1
- package/dist/core/config/config-validator.d.ts +1 -1
- package/dist/core/config/config-validator.js +33 -10
- package/dist/core/config/config-validator.js.map +1 -1
- package/dist/core/config/file-loader.d.ts +1 -1
- package/dist/core/config/file-loader.js +19 -78
- package/dist/core/config/file-loader.js.map +1 -1
- package/dist/core/config/index.d.ts +8 -8
- package/dist/core/config/index.js +25 -51
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/schema.d.ts +2 -2
- package/dist/core/config/schema.js +11 -13
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/utils.d.ts +1 -1
- package/dist/core/config/utils.js +18 -32
- package/dist/core/config/utils.js.map +1 -1
- package/dist/core/database/adapters/drizzle.d.ts +1 -1
- package/dist/core/database/adapters/drizzle.js +18 -11
- package/dist/core/database/adapters/drizzle.js.map +1 -1
- package/dist/core/database/adapters/index.d.ts +7 -7
- package/dist/core/database/adapters/index.js +19 -29
- package/dist/core/database/adapters/index.js.map +1 -1
- package/dist/core/database/adapters/mongodb.d.ts +3 -1
- package/dist/core/database/adapters/mongodb.js +23 -8
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.d.ts +3 -1
- package/dist/core/database/adapters/mysql.js +18 -9
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.d.ts +3 -1
- package/dist/core/database/adapters/postgresql.js +18 -8
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.d.ts +3 -1
- package/dist/core/database/adapters/redis.js +34 -9
- package/dist/core/database/adapters/redis.js.map +1 -1
- package/dist/core/database/adapters/sqlite.d.ts +3 -1
- package/dist/core/database/adapters/sqlite.js +19 -8
- package/dist/core/database/adapters/sqlite.js.map +1 -1
- package/dist/core/database/index.d.ts +2 -2
- package/dist/core/database/index.js +2 -18
- package/dist/core/database/index.js.map +1 -1
- package/dist/core/docs/index.d.ts +9 -9
- package/dist/core/docs/index.js +14 -35
- package/dist/core/docs/index.js.map +1 -1
- package/dist/core/docs/openapi-generator.d.ts +2 -2
- package/dist/core/docs/openapi-generator.js +11 -16
- package/dist/core/docs/openapi-generator.js.map +1 -1
- package/dist/core/docs/schema-to-openapi.d.ts +2 -2
- package/dist/core/docs/schema-to-openapi.js +5 -11
- package/dist/core/docs/schema-to-openapi.js.map +1 -1
- package/dist/core/docs/simple-docs.d.ts +1 -1
- package/dist/core/docs/simple-docs.js +4 -9
- package/dist/core/docs/simple-docs.js.map +1 -1
- package/dist/core/docs/swagger-ui.d.ts +2 -2
- package/dist/core/docs/swagger-ui.js +26 -29
- package/dist/core/docs/swagger-ui.js.map +1 -1
- package/dist/core/docs/zod-to-openapi.js +31 -28
- package/dist/core/docs/zod-to-openapi.js.map +1 -1
- package/dist/core/events/event-bus.d.ts +1 -1
- package/dist/core/events/event-bus.js +6 -10
- package/dist/core/events/event-bus.js.map +1 -1
- package/dist/core/events/index.d.ts +2 -2
- package/dist/core/events/index.js +1 -5
- package/dist/core/events/index.js.map +1 -1
- package/dist/core/framework.d.ts +16 -6
- package/dist/core/framework.js +182 -92
- package/dist/core/framework.js.map +1 -1
- package/dist/core/http/http-server.d.ts +1 -1
- package/dist/core/http/http-server.js +26 -209
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/http/index.d.ts +4 -3
- package/dist/core/http/index.js +3 -8
- package/dist/core/http/index.js.map +1 -1
- package/dist/core/http/router.d.ts +1 -1
- package/dist/core/http/router.js +3 -7
- package/dist/core/http/router.js.map +1 -1
- package/dist/core/http/uws-http-server.d.ts +64 -0
- package/dist/core/http/uws-http-server.js +688 -0
- package/dist/core/http/uws-http-server.js.map +1 -0
- package/dist/core/logger/filters.d.ts +1 -1
- package/dist/core/logger/filters.js +8 -19
- package/dist/core/logger/filters.js.map +1 -1
- package/dist/core/logger/index.d.ts +3 -3
- package/dist/core/logger/index.js +2 -25
- package/dist/core/logger/index.js.map +1 -1
- package/dist/core/logger/logger.d.ts +1 -1
- package/dist/core/logger/logger.js +21 -23
- package/dist/core/logger/logger.js.map +1 -1
- package/dist/core/logger/outputs.d.ts +1 -1
- package/dist/core/logger/outputs.js +8 -15
- package/dist/core/logger/outputs.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cache/file.js +10 -47
- package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
- package/dist/core/middleware/built-in/adapters/cache/index.js +10 -17
- package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cache/memory.js +3 -7
- package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +3 -1
- package/dist/core/middleware/built-in/adapters/cache/redis.js +11 -9
- package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/azure.js +3 -7
- package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +3 -7
- package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +3 -1
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +12 -10
- package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
- package/dist/core/middleware/built-in/adapters/cdn/index.js +10 -17
- package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
- package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
- package/dist/core/middleware/built-in/adapters/index.js +4 -23
- package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
- package/dist/core/middleware/built-in/auth-helpers.js +11 -22
- package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
- package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
- package/dist/core/middleware/built-in/auth-providers.js +4 -9
- package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
- package/dist/core/middleware/built-in/auth.d.ts +2 -2
- package/dist/core/middleware/built-in/auth.js +51 -44
- package/dist/core/middleware/built-in/auth.js.map +1 -1
- package/dist/core/middleware/built-in/cache.d.ts +2 -2
- package/dist/core/middleware/built-in/cache.js +8 -11
- package/dist/core/middleware/built-in/cache.js.map +1 -1
- package/dist/core/middleware/built-in/cdn.d.ts +2 -2
- package/dist/core/middleware/built-in/cdn.js +5 -9
- package/dist/core/middleware/built-in/cdn.js.map +1 -1
- package/dist/core/middleware/built-in/cookie.d.ts +1 -1
- package/dist/core/middleware/built-in/cookie.js +3 -7
- package/dist/core/middleware/built-in/cookie.js.map +1 -1
- package/dist/core/middleware/built-in/cors.d.ts +1 -1
- package/dist/core/middleware/built-in/cors.js +3 -7
- package/dist/core/middleware/built-in/cors.js.map +1 -1
- package/dist/core/middleware/built-in/csp.d.ts +1 -1
- package/dist/core/middleware/built-in/csp.js +5 -8
- package/dist/core/middleware/built-in/csp.js.map +1 -1
- package/dist/core/middleware/built-in/csrf.d.ts +1 -1
- package/dist/core/middleware/built-in/csrf.js +5 -8
- package/dist/core/middleware/built-in/csrf.js.map +1 -1
- package/dist/core/middleware/built-in/error-tracker.js +3 -7
- package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
- package/dist/core/middleware/built-in/index.d.ts +28 -28
- package/dist/core/middleware/built-in/index.js +47 -82
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/jwt-helpers.d.ts +27 -2
- package/dist/core/middleware/built-in/jwt-helpers.js +32 -10
- package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -1
- package/dist/core/middleware/built-in/performance-monitor.js +3 -7
- package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
- package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
- package/dist/core/middleware/built-in/rate-limit.js +3 -7
- package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
- package/dist/core/middleware/built-in/request-logger.js +3 -7
- package/dist/core/middleware/built-in/request-logger.js.map +1 -1
- package/dist/core/middleware/built-in/session.d.ts +2 -2
- package/dist/core/middleware/built-in/session.js +11 -15
- package/dist/core/middleware/built-in/session.js.map +1 -1
- package/dist/core/middleware/built-in/sse.d.ts +1 -1
- package/dist/core/middleware/built-in/sse.js +3 -7
- package/dist/core/middleware/built-in/sse.js.map +1 -1
- package/dist/core/middleware/built-in/validation.d.ts +1 -1
- package/dist/core/middleware/built-in/validation.js +3 -7
- package/dist/core/middleware/built-in/validation.js.map +1 -1
- package/dist/core/middleware/index.d.ts +4 -4
- package/dist/core/middleware/index.js +8 -28
- package/dist/core/middleware/index.js.map +1 -1
- package/dist/core/modules/auto-discovery.d.ts +3 -3
- package/dist/core/modules/auto-discovery.js +43 -81
- package/dist/core/modules/auto-discovery.js.map +1 -1
- package/dist/core/modules/index.d.ts +2 -2
- package/dist/core/modules/index.js +2 -9
- package/dist/core/modules/index.js.map +1 -1
- package/dist/core/modules/modules.d.ts +3 -3
- package/dist/core/modules/modules.js +11 -52
- package/dist/core/modules/modules.js.map +1 -1
- package/dist/core/networking/adapters/index.d.ts +4 -3
- package/dist/core/networking/adapters/index.js +3 -7
- package/dist/core/networking/adapters/index.js.map +1 -1
- package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
- package/dist/core/networking/adapters/socketio-adapter.js +5 -40
- package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
- package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
- package/dist/core/networking/adapters/uws-adapter.js +513 -0
- package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
- package/dist/core/networking/adapters/ws-adapter.d.ts +1 -1
- package/dist/core/networking/adapters/ws-adapter.js +7 -42
- package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
- package/dist/core/networking/index.d.ts +3 -2
- package/dist/core/networking/index.js +2 -7
- package/dist/core/networking/index.js.map +1 -1
- package/dist/core/networking/service-discovery.js +3 -7
- package/dist/core/networking/service-discovery.js.map +1 -1
- package/dist/core/networking/websocket-adapter.js +1 -2
- package/dist/core/networking/websocket-adapter.js.map +1 -1
- package/dist/core/networking/websocket-manager.d.ts +3 -3
- package/dist/core/networking/websocket-manager.js +9 -11
- package/dist/core/networking/websocket-manager.js.map +1 -1
- package/dist/core/routing/app-integration.d.ts +2 -2
- package/dist/core/routing/app-integration.js +7 -12
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/index.d.ts +2 -2
- package/dist/core/routing/index.js +7 -14
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
- package/dist/core/runtime/aws-lambda-adapter.js +2 -6
- package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
- package/dist/core/runtime/base-adapter.d.ts +2 -2
- package/dist/core/runtime/base-adapter.js +3 -7
- package/dist/core/runtime/base-adapter.js.map +1 -1
- package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
- package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
- package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
- package/dist/core/runtime/index.d.ts +12 -12
- package/dist/core/runtime/index.js +22 -35
- package/dist/core/runtime/index.js.map +1 -1
- package/dist/core/runtime/node-adapter.d.ts +4 -4
- package/dist/core/runtime/node-adapter.js +6 -43
- package/dist/core/runtime/node-adapter.js.map +1 -1
- package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
- package/dist/core/runtime/vercel-edge-adapter.js +2 -6
- package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
- package/dist/core/utilities/circuit-breaker.js +1 -5
- package/dist/core/utilities/circuit-breaker.js.map +1 -1
- package/dist/core/utilities/container.js +12 -22
- package/dist/core/utilities/container.js.map +1 -1
- package/dist/core/utilities/hooks.d.ts +2 -2
- package/dist/core/utilities/hooks.js +7 -12
- package/dist/core/utilities/hooks.js.map +1 -1
- package/dist/core/utilities/index.d.ts +5 -4
- package/dist/core/utilities/index.js +5 -19
- package/dist/core/utilities/index.js.map +1 -1
- package/dist/core/utilities/package-utils.d.ts +38 -0
- package/dist/core/utilities/package-utils.js +57 -0
- package/dist/core/utilities/package-utils.js.map +1 -0
- package/dist/core/validation/adapters.d.ts +1 -1
- package/dist/core/validation/adapters.js +15 -26
- package/dist/core/validation/adapters.js.map +1 -1
- package/dist/core/validation/index.d.ts +6 -4
- package/dist/core/validation/index.js +57 -28
- package/dist/core/validation/index.js.map +1 -1
- package/dist/core/validation/schema-interface.js +3 -9
- package/dist/core/validation/schema-interface.js.map +1 -1
- package/dist/index.d.ts +51 -52
- package/dist/index.js +23 -132
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +30 -10
- package/dist/moro.js +262 -126
- package/dist/moro.js.map +1 -1
- package/dist/types/auth.js +3 -9
- package/dist/types/auth.js.map +1 -1
- package/dist/types/cache.js +1 -2
- package/dist/types/cdn.js +1 -2
- package/dist/types/config.d.ts +13 -1
- package/dist/types/config.js +1 -2
- package/dist/types/config.js.map +1 -1
- package/dist/types/core.d.ts +3 -3
- package/dist/types/core.js +1 -2
- package/dist/types/database.js +1 -2
- package/dist/types/discovery.js +1 -2
- package/dist/types/events.js +1 -2
- package/dist/types/hooks.d.ts +1 -1
- package/dist/types/hooks.js +1 -2
- package/dist/types/http.js +1 -2
- package/dist/types/logger.js +1 -2
- package/dist/types/module.js +1 -2
- package/dist/types/runtime.d.ts +1 -1
- package/dist/types/runtime.js +1 -2
- package/dist/types/session.js +1 -2
- package/jest.config.mjs +41 -0
- package/package.json +18 -51
- package/src/core/auth/morojs-adapter.ts +1 -1
- package/src/core/config/config-manager.ts +2 -2
- package/src/core/config/config-sources.ts +6 -6
- package/src/core/config/config-validator.ts +38 -3
- package/src/core/config/file-loader.ts +13 -40
- package/src/core/config/index.ts +15 -11
- package/src/core/config/schema.ts +3 -2
- package/src/core/config/utils.ts +3 -3
- package/src/core/database/adapters/drizzle.ts +18 -6
- package/src/core/database/adapters/index.ts +13 -13
- package/src/core/database/adapters/mongodb.ts +23 -3
- package/src/core/database/adapters/mysql.ts +18 -4
- package/src/core/database/adapters/postgresql.ts +18 -3
- package/src/core/database/adapters/redis.ts +34 -4
- package/src/core/database/adapters/sqlite.ts +19 -3
- package/src/core/database/index.ts +2 -2
- package/src/core/docs/index.ts +8 -8
- package/src/core/docs/openapi-generator.ts +4 -4
- package/src/core/docs/schema-to-openapi.ts +3 -6
- package/src/core/docs/simple-docs.ts +2 -2
- package/src/core/docs/swagger-ui.ts +19 -16
- package/src/core/docs/zod-to-openapi.ts +34 -34
- package/src/core/events/event-bus.ts +2 -2
- package/src/core/events/index.ts +2 -2
- package/src/core/framework.ts +190 -49
- package/src/core/http/http-server.ts +16 -159
- package/src/core/http/index.ts +4 -3
- package/src/core/http/router.ts +2 -2
- package/src/core/http/uws-http-server.ts +794 -0
- package/src/core/logger/filters.ts +1 -1
- package/src/core/logger/index.ts +3 -3
- package/src/core/logger/logger.ts +9 -1
- package/src/core/logger/outputs.ts +1 -1
- package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
- package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
- package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
- package/src/core/middleware/built-in/adapters/cache/redis.ts +18 -4
- package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
- package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
- package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +16 -5
- package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
- package/src/core/middleware/built-in/adapters/index.ts +4 -4
- package/src/core/middleware/built-in/auth-helpers.ts +1 -1
- package/src/core/middleware/built-in/auth-providers.ts +1 -1
- package/src/core/middleware/built-in/auth.ts +64 -41
- package/src/core/middleware/built-in/cache.ts +5 -5
- package/src/core/middleware/built-in/cdn.ts +4 -4
- package/src/core/middleware/built-in/cookie.ts +2 -2
- package/src/core/middleware/built-in/cors.ts +2 -2
- package/src/core/middleware/built-in/csp.ts +3 -3
- package/src/core/middleware/built-in/csrf.ts +3 -3
- package/src/core/middleware/built-in/error-tracker.ts +1 -1
- package/src/core/middleware/built-in/index.ts +31 -31
- package/src/core/middleware/built-in/jwt-helpers.ts +32 -4
- package/src/core/middleware/built-in/performance-monitor.ts +1 -1
- package/src/core/middleware/built-in/rate-limit.ts +2 -2
- package/src/core/middleware/built-in/request-logger.ts +1 -1
- package/src/core/middleware/built-in/session.ts +7 -8
- package/src/core/middleware/built-in/sse.ts +2 -2
- package/src/core/middleware/built-in/validation.ts +2 -2
- package/src/core/middleware/index.ts +6 -6
- package/src/core/modules/auto-discovery.ts +4 -4
- package/src/core/modules/index.ts +2 -2
- package/src/core/modules/modules.ts +4 -4
- package/src/core/networking/adapters/index.ts +4 -3
- package/src/core/networking/adapters/socketio-adapter.ts +5 -3
- package/src/core/networking/adapters/uws-adapter.ts +619 -0
- package/src/core/networking/adapters/ws-adapter.ts +6 -4
- package/src/core/networking/index.ts +3 -2
- package/src/core/networking/service-discovery.ts +1 -1
- package/src/core/networking/websocket-manager.ts +7 -7
- package/src/core/routing/app-integration.ts +3 -3
- package/src/core/routing/index.ts +3 -3
- package/src/core/runtime/aws-lambda-adapter.ts +3 -3
- package/src/core/runtime/base-adapter.ts +2 -2
- package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
- package/src/core/runtime/index.ts +13 -13
- package/src/core/runtime/node-adapter.ts +4 -4
- package/src/core/runtime/vercel-edge-adapter.ts +3 -3
- package/src/core/utilities/hooks.ts +3 -3
- package/src/core/utilities/index.ts +5 -4
- package/src/core/utilities/package-utils.ts +59 -0
- package/src/core/validation/adapters.ts +1 -1
- package/src/core/validation/index.ts +68 -16
- package/src/index.ts +73 -66
- package/src/moro.ts +303 -75
- package/src/types/config.ts +13 -1
- package/src/types/core.ts +3 -3
- package/src/types/hooks.ts +1 -1
- package/src/types/runtime.ts +1 -1
- package/tsconfig.json +4 -2
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* simple TypeScript functions that match the type definitions exactly.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { AppConfig } from '../../types/config';
|
|
9
|
-
import { createFrameworkLogger } from '../logger';
|
|
8
|
+
import { AppConfig } from '../../types/config.js';
|
|
9
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
10
10
|
|
|
11
11
|
const logger = createFrameworkLogger('ConfigValidator');
|
|
12
12
|
|
|
@@ -75,7 +75,7 @@ function validateServerConfig(config: any, path: string) {
|
|
|
75
75
|
);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
const result: any = {
|
|
79
79
|
port: validatePort(config.port, `${path}.port`),
|
|
80
80
|
host: validateString(config.host, `${path}.host`),
|
|
81
81
|
maxConnections: validateNumber(config.maxConnections, `${path}.maxConnections`, { min: 1 }),
|
|
@@ -88,6 +88,41 @@ function validateServerConfig(config: any, path: string) {
|
|
|
88
88
|
enabled: validateBoolean(config.errorBoundary?.enabled, `${path}.errorBoundary.enabled`),
|
|
89
89
|
},
|
|
90
90
|
};
|
|
91
|
+
|
|
92
|
+
// Optional uWebSockets configuration
|
|
93
|
+
if (config.useUWebSockets !== undefined) {
|
|
94
|
+
result.useUWebSockets = validateBoolean(config.useUWebSockets, `${path}.useUWebSockets`);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Optional SSL configuration
|
|
98
|
+
if (config.ssl !== undefined) {
|
|
99
|
+
result.ssl = validateSSLConfig(config.ssl, `${path}.ssl`);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Validate SSL configuration
|
|
107
|
+
*/
|
|
108
|
+
function validateSSLConfig(config: any, path: string) {
|
|
109
|
+
if (!config || typeof config !== 'object') {
|
|
110
|
+
throw new ConfigValidationError(path, config, 'object', 'SSL configuration must be an object');
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const result: any = {};
|
|
114
|
+
|
|
115
|
+
if (config.key_file_name !== undefined) {
|
|
116
|
+
result.key_file_name = validateString(config.key_file_name, `${path}.key_file_name`);
|
|
117
|
+
}
|
|
118
|
+
if (config.cert_file_name !== undefined) {
|
|
119
|
+
result.cert_file_name = validateString(config.cert_file_name, `${path}.cert_file_name`);
|
|
120
|
+
}
|
|
121
|
+
if (config.passphrase !== undefined) {
|
|
122
|
+
result.passphrase = validateString(config.passphrase, `${path}.passphrase`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return result;
|
|
91
126
|
}
|
|
92
127
|
|
|
93
128
|
/**
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
// Configuration File Loader - Load moro.config.js/ts files
|
|
2
2
|
import { existsSync } from 'fs';
|
|
3
3
|
import { join } from 'path';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { createRequire } from 'module';
|
|
5
|
+
import { AppConfig } from './schema.js';
|
|
6
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
6
7
|
|
|
7
8
|
const logger = createFrameworkLogger('ConfigFile');
|
|
8
9
|
|
|
10
|
+
// Create require function for ESM to enable synchronous config loading
|
|
11
|
+
// Use process.cwd() as base since we're loading with absolute paths anyway
|
|
12
|
+
const moduleRequire = createRequire(join(process.cwd(), 'index.js'));
|
|
13
|
+
|
|
9
14
|
/**
|
|
10
15
|
* Supported configuration file names in order of preference
|
|
11
16
|
*/
|
|
@@ -23,55 +28,23 @@ export function loadConfigFileSync(cwd: string = process.cwd()): Partial<AppConf
|
|
|
23
28
|
logger.debug('No configuration file found');
|
|
24
29
|
return null;
|
|
25
30
|
}
|
|
26
|
-
// Handle TypeScript files by trying dynamic import (works with tsx/ts-node runtimes)
|
|
27
|
-
if (configFile.endsWith('.ts')) {
|
|
28
|
-
logger.debug('Found TypeScript config file, attempting to load with dynamic import');
|
|
29
|
-
try {
|
|
30
|
-
// When running under tsx/ts-node, dynamic imports work synchronously for TypeScript
|
|
31
|
-
// We can use require() with the current environment that already has TypeScript support
|
|
32
|
-
const config = require(configFile);
|
|
33
|
-
const configData = config.default || config;
|
|
34
|
-
|
|
35
|
-
if (!configData || typeof configData !== 'object') {
|
|
36
|
-
logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
logger.info(`TypeScript configuration loaded from: ${configFile}`);
|
|
41
|
-
return configData;
|
|
42
|
-
} catch (error) {
|
|
43
|
-
logger.debug(
|
|
44
|
-
'TypeScript config loading failed in sync mode, this is expected if not running with tsx/ts-node'
|
|
45
|
-
);
|
|
46
|
-
logger.debug('Error details:', String(error));
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Only .js files use the standard synchronous loading
|
|
52
|
-
if (!configFile.endsWith('.js')) {
|
|
53
|
-
logger.debug(
|
|
54
|
-
'Found config file with unsupported extension. Only .js and .ts files are supported.'
|
|
55
|
-
);
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
31
|
|
|
59
32
|
logger.debug(`Loading configuration from: ${configFile}`);
|
|
60
33
|
|
|
61
34
|
try {
|
|
62
|
-
//
|
|
63
|
-
|
|
35
|
+
// Use createRequire to enable synchronous loading in ESM
|
|
36
|
+
// Clear the require cache to ensure fresh config on each load
|
|
37
|
+
delete moduleRequire.cache[moduleRequire.resolve(configFile)];
|
|
64
38
|
|
|
65
|
-
const config =
|
|
66
|
-
const configData = config.default || config;
|
|
39
|
+
const config = moduleRequire(configFile);
|
|
67
40
|
|
|
68
|
-
if (!
|
|
41
|
+
if (!config || typeof config !== 'object') {
|
|
69
42
|
logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
|
|
70
43
|
return null;
|
|
71
44
|
}
|
|
72
45
|
|
|
73
46
|
logger.info(`Configuration loaded from: ${configFile}`);
|
|
74
|
-
return
|
|
47
|
+
return config;
|
|
75
48
|
} catch (error) {
|
|
76
49
|
logger.error(`Failed to load configuration file ${configFile}:`, String(error));
|
|
77
50
|
logger.warn('Falling back to environment variable configuration');
|
package/src/core/config/index.ts
CHANGED
|
@@ -12,27 +12,31 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
// Export types and core components
|
|
15
|
-
export * from './schema';
|
|
16
|
-
export * from './config-sources';
|
|
17
|
-
export * from './config-validator';
|
|
18
|
-
export * from './file-loader';
|
|
15
|
+
export * from './schema.js';
|
|
16
|
+
export * from './config-sources.js';
|
|
17
|
+
export * from './config-validator.js';
|
|
18
|
+
export * from './file-loader.js';
|
|
19
19
|
|
|
20
20
|
// Export specific functions from config-manager to avoid conflicts
|
|
21
|
-
export {
|
|
21
|
+
export {
|
|
22
|
+
initializeAndLockConfig,
|
|
23
|
+
isConfigLocked,
|
|
24
|
+
resetConfigForTesting,
|
|
25
|
+
} from './config-manager.js';
|
|
22
26
|
|
|
23
27
|
// Export utilities for backward compatibility
|
|
24
|
-
export * from './utils';
|
|
28
|
+
export * from './utils.js';
|
|
25
29
|
|
|
26
|
-
import { MoroOptions } from '../../types/core';
|
|
27
|
-
import { AppConfig } from '../../types/config';
|
|
28
|
-
import { loadConfigFromAllSources } from './config-sources';
|
|
30
|
+
import { MoroOptions } from '../../types/core.js';
|
|
31
|
+
import { AppConfig } from '../../types/config.js';
|
|
32
|
+
import { loadConfigFromAllSources } from './config-sources.js';
|
|
29
33
|
import {
|
|
30
34
|
initializeAndLockConfig,
|
|
31
35
|
getGlobalConfig as getConfig,
|
|
32
36
|
isConfigLocked,
|
|
33
37
|
resetConfigForTesting,
|
|
34
|
-
} from './config-manager';
|
|
35
|
-
import { createFrameworkLogger } from '../logger';
|
|
38
|
+
} from './config-manager.js';
|
|
39
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
36
40
|
|
|
37
41
|
const logger = createFrameworkLogger('ConfigSystem');
|
|
38
42
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Core Configuration Schema for Moro Framework
|
|
2
2
|
|
|
3
|
-
import { AppConfig } from '../../types/config';
|
|
3
|
+
import { AppConfig } from '../../types/config.js';
|
|
4
4
|
|
|
5
5
|
// Minimal default configuration - performance-focused, most things opt-in
|
|
6
6
|
export const DEFAULT_CONFIG: AppConfig = {
|
|
@@ -10,6 +10,7 @@ export const DEFAULT_CONFIG: AppConfig = {
|
|
|
10
10
|
maxConnections: 1000,
|
|
11
11
|
timeout: 30000,
|
|
12
12
|
bodySizeLimit: '10mb',
|
|
13
|
+
useUWebSockets: false, // Opt-in for ultra-high performance
|
|
13
14
|
requestTracking: {
|
|
14
15
|
enabled: true, // Enable by default for debugging
|
|
15
16
|
},
|
|
@@ -147,7 +148,7 @@ export type {
|
|
|
147
148
|
SecurityConfig,
|
|
148
149
|
ExternalServicesConfig,
|
|
149
150
|
PerformanceConfig,
|
|
150
|
-
} from '../../types/config';
|
|
151
|
+
} from '../../types/config.js';
|
|
151
152
|
|
|
152
153
|
// For backward compatibility with modules that expect schema objects
|
|
153
154
|
export const ServerConfigSchema = { parse: (data: any) => data };
|
package/src/core/config/utils.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Configuration Utilities for Modules and Environment Handling
|
|
2
|
-
import { AppConfig } from './schema';
|
|
3
|
-
import { createFrameworkLogger } from '../logger';
|
|
4
|
-
import { getGlobalConfig } from './config-manager';
|
|
2
|
+
import { AppConfig } from './schema.js';
|
|
3
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
4
|
+
import { getGlobalConfig } from './config-manager.js';
|
|
5
5
|
|
|
6
6
|
const logger = createFrameworkLogger('ConfigUtils');
|
|
7
7
|
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
// Database Drizzle ORM Adapter
|
|
2
|
-
import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database';
|
|
3
|
-
import { createFrameworkLogger } from '../../logger';
|
|
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
|
+
}
|
|
4
16
|
|
|
5
17
|
interface DrizzleConfig {
|
|
6
18
|
database: any; // Drizzle database instance
|
|
@@ -108,7 +120,7 @@ export class DrizzleAdapter implements DatabaseAdapter {
|
|
|
108
120
|
if (this.schema && this.schema[table]) {
|
|
109
121
|
// Use schema-based update
|
|
110
122
|
try {
|
|
111
|
-
const { eq, and } =
|
|
123
|
+
const { eq, and } = await getDrizzleOrm();
|
|
112
124
|
|
|
113
125
|
// Build where conditions
|
|
114
126
|
const conditions = Object.entries(where).map(([key, value]) =>
|
|
@@ -165,7 +177,7 @@ export class DrizzleAdapter implements DatabaseAdapter {
|
|
|
165
177
|
if (this.schema && this.schema[table]) {
|
|
166
178
|
// Use schema-based delete
|
|
167
179
|
try {
|
|
168
|
-
const { eq, and } =
|
|
180
|
+
const { eq, and } = await getDrizzleOrm();
|
|
169
181
|
|
|
170
182
|
const conditions = Object.entries(where).map(([key, value]) =>
|
|
171
183
|
eq(this.schema[table][key], value)
|
|
@@ -314,7 +326,7 @@ class DrizzleTransaction implements DatabaseTransaction {
|
|
|
314
326
|
): Promise<T> {
|
|
315
327
|
if (this.schema && this.schema[table]) {
|
|
316
328
|
try {
|
|
317
|
-
const { eq, and } =
|
|
329
|
+
const { eq, and } = await getDrizzleOrm();
|
|
318
330
|
|
|
319
331
|
const conditions = Object.entries(where).map(([key, value]) =>
|
|
320
332
|
eq(this.schema[table][key], value)
|
|
@@ -360,7 +372,7 @@ class DrizzleTransaction implements DatabaseTransaction {
|
|
|
360
372
|
async delete(table: string, where: Record<string, any>): Promise<number> {
|
|
361
373
|
if (this.schema && this.schema[table]) {
|
|
362
374
|
try {
|
|
363
|
-
const { eq, and } =
|
|
375
|
+
const { eq, and } = await getDrizzleOrm();
|
|
364
376
|
|
|
365
377
|
const conditions = Object.entries(where).map(([key, value]) =>
|
|
366
378
|
eq(this.schema[table][key], value)
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
// Database Adapters
|
|
2
|
-
export { MySQLAdapter } from './mysql';
|
|
3
|
-
export { PostgreSQLAdapter } from './postgresql';
|
|
4
|
-
export { SQLiteAdapter } from './sqlite';
|
|
5
|
-
export { MongoDBAdapter } from './mongodb';
|
|
6
|
-
export { RedisAdapter } from './redis';
|
|
7
|
-
export { DrizzleAdapter } from './drizzle';
|
|
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
8
|
|
|
9
|
-
import { MySQLAdapter } from './mysql';
|
|
10
|
-
import { PostgreSQLAdapter } from './postgresql';
|
|
11
|
-
import { SQLiteAdapter } from './sqlite';
|
|
12
|
-
import { MongoDBAdapter } from './mongodb';
|
|
13
|
-
import { RedisAdapter } from './redis';
|
|
14
|
-
import { DrizzleAdapter } from './drizzle';
|
|
15
|
-
import { DatabaseAdapter } from '../../../types/database';
|
|
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
16
|
|
|
17
17
|
// Adapter factory function for auto-loading
|
|
18
18
|
export function createDatabaseAdapter(type: string, options: any = {}): DatabaseAdapter {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Database MongoDB Adapter
|
|
2
|
-
import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database';
|
|
3
|
-
import { createFrameworkLogger } from '../../logger';
|
|
2
|
+
import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database.js';
|
|
3
|
+
import { createFrameworkLogger } from '../../logger/index.js';
|
|
4
|
+
import { resolveUserPackage } from '../../utilities/package-utils.js';
|
|
4
5
|
|
|
5
6
|
interface MongoDBConfig {
|
|
6
7
|
url?: string;
|
|
@@ -35,10 +36,17 @@ export class MongoDBAdapter implements DatabaseAdapter {
|
|
|
35
36
|
private client: any;
|
|
36
37
|
private db: any;
|
|
37
38
|
private logger = createFrameworkLogger('MongoDB');
|
|
39
|
+
private initPromise: Promise<void>;
|
|
38
40
|
|
|
39
41
|
constructor(config: MongoDBConfig) {
|
|
42
|
+
this.initPromise = this.initialize(config);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private async initialize(config: MongoDBConfig): Promise<void> {
|
|
40
46
|
try {
|
|
41
|
-
const
|
|
47
|
+
const mongodbPath = resolveUserPackage('mongodb');
|
|
48
|
+
const mongodb = await import(mongodbPath);
|
|
49
|
+
const { MongoClient } = mongodb;
|
|
42
50
|
|
|
43
51
|
const url = config.url || this.buildConnectionString(config);
|
|
44
52
|
|
|
@@ -86,6 +94,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
|
|
|
86
94
|
}
|
|
87
95
|
|
|
88
96
|
async connect(): Promise<void> {
|
|
97
|
+
await this.initPromise;
|
|
89
98
|
try {
|
|
90
99
|
await this.client.connect();
|
|
91
100
|
await this.client.db('admin').command({ ping: 1 });
|
|
@@ -99,11 +108,13 @@ export class MongoDBAdapter implements DatabaseAdapter {
|
|
|
99
108
|
}
|
|
100
109
|
|
|
101
110
|
async disconnect(): Promise<void> {
|
|
111
|
+
await this.initPromise;
|
|
102
112
|
await this.client.close();
|
|
103
113
|
}
|
|
104
114
|
|
|
105
115
|
// For MongoDB, we'll treat "sql" as collection name and "params" as query/pipeline
|
|
106
116
|
async query<T = any>(collection: string, pipeline?: any[]): Promise<T[]> {
|
|
117
|
+
await this.initPromise;
|
|
107
118
|
try {
|
|
108
119
|
const coll = this.db.collection(collection);
|
|
109
120
|
|
|
@@ -130,6 +141,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
|
|
|
130
141
|
}
|
|
131
142
|
|
|
132
143
|
async queryOne<T = any>(collection: string, query?: any): Promise<T | null> {
|
|
144
|
+
await this.initPromise;
|
|
133
145
|
try {
|
|
134
146
|
const coll = this.db.collection(collection);
|
|
135
147
|
return await coll.findOne(query || {});
|
|
@@ -143,6 +155,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
|
|
|
143
155
|
}
|
|
144
156
|
|
|
145
157
|
async insert<T = any>(collection: string, data: Record<string, any>): Promise<T> {
|
|
158
|
+
await this.initPromise;
|
|
146
159
|
try {
|
|
147
160
|
const coll = this.db.collection(collection);
|
|
148
161
|
const result = await coll.insertOne(data);
|
|
@@ -163,6 +176,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
|
|
|
163
176
|
data: Record<string, any>,
|
|
164
177
|
where: Record<string, any>
|
|
165
178
|
): Promise<T> {
|
|
179
|
+
await this.initPromise;
|
|
166
180
|
try {
|
|
167
181
|
const coll = this.db.collection(collection);
|
|
168
182
|
const result = await coll.findOneAndUpdate(
|
|
@@ -182,6 +196,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
|
|
|
182
196
|
}
|
|
183
197
|
|
|
184
198
|
async delete(collection: string, where: Record<string, any>): Promise<number> {
|
|
199
|
+
await this.initPromise;
|
|
185
200
|
try {
|
|
186
201
|
const coll = this.db.collection(collection);
|
|
187
202
|
const result = await coll.deleteMany(where);
|
|
@@ -196,6 +211,7 @@ export class MongoDBAdapter implements DatabaseAdapter {
|
|
|
196
211
|
}
|
|
197
212
|
|
|
198
213
|
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
214
|
+
await this.initPromise;
|
|
199
215
|
const session = this.client.startSession();
|
|
200
216
|
|
|
201
217
|
try {
|
|
@@ -210,22 +226,26 @@ export class MongoDBAdapter implements DatabaseAdapter {
|
|
|
210
226
|
|
|
211
227
|
// MongoDB-specific methods
|
|
212
228
|
async aggregate<T = any>(collection: string, pipeline: any[]): Promise<T[]> {
|
|
229
|
+
await this.initPromise;
|
|
213
230
|
const coll = this.db.collection(collection);
|
|
214
231
|
const cursor = coll.aggregate(pipeline);
|
|
215
232
|
return await cursor.toArray();
|
|
216
233
|
}
|
|
217
234
|
|
|
218
235
|
async createIndex(collection: string, index: any, options?: any): Promise<string> {
|
|
236
|
+
await this.initPromise;
|
|
219
237
|
const coll = this.db.collection(collection);
|
|
220
238
|
return await coll.createIndex(index, options);
|
|
221
239
|
}
|
|
222
240
|
|
|
223
241
|
async dropIndex(collection: string, indexName: string): Promise<any> {
|
|
242
|
+
await this.initPromise;
|
|
224
243
|
const coll = this.db.collection(collection);
|
|
225
244
|
return await coll.dropIndex(indexName);
|
|
226
245
|
}
|
|
227
246
|
|
|
228
247
|
async count(collection: string, query?: any): Promise<number> {
|
|
248
|
+
await this.initPromise;
|
|
229
249
|
const coll = this.db.collection(collection);
|
|
230
250
|
return await coll.countDocuments(query || {});
|
|
231
251
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Database MySQL Adapter
|
|
2
|
-
import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database';
|
|
3
|
-
import { createFrameworkLogger } from '../../logger';
|
|
2
|
+
import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database.js';
|
|
3
|
+
import { createFrameworkLogger } from '../../logger/index.js';
|
|
4
|
+
import { resolveUserPackage } from '../../utilities/package-utils.js';
|
|
4
5
|
|
|
5
6
|
interface MySQLConfig {
|
|
6
7
|
host?: string;
|
|
@@ -27,11 +28,17 @@ interface MySQLConfig {
|
|
|
27
28
|
export class MySQLAdapter implements DatabaseAdapter {
|
|
28
29
|
private pool: any;
|
|
29
30
|
private logger = createFrameworkLogger('MySQL');
|
|
31
|
+
private initPromise: Promise<void>;
|
|
30
32
|
|
|
31
33
|
constructor(config: MySQLConfig) {
|
|
34
|
+
this.initPromise = this.initialize(config);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private async initialize(config: MySQLConfig): Promise<void> {
|
|
32
38
|
try {
|
|
33
|
-
const
|
|
34
|
-
|
|
39
|
+
const mysqlPath = resolveUserPackage('mysql2/promise');
|
|
40
|
+
const mysql = await import(mysqlPath);
|
|
41
|
+
this.pool = mysql.default.createPool({
|
|
35
42
|
host: config.host || 'localhost',
|
|
36
43
|
port: config.port || 3306,
|
|
37
44
|
user: config.user || 'root',
|
|
@@ -50,6 +57,7 @@ export class MySQLAdapter implements DatabaseAdapter {
|
|
|
50
57
|
}
|
|
51
58
|
|
|
52
59
|
async connect(): Promise<void> {
|
|
60
|
+
await this.initPromise;
|
|
53
61
|
try {
|
|
54
62
|
const connection = await this.pool.getConnection();
|
|
55
63
|
connection.release();
|
|
@@ -63,10 +71,12 @@ export class MySQLAdapter implements DatabaseAdapter {
|
|
|
63
71
|
}
|
|
64
72
|
|
|
65
73
|
async disconnect(): Promise<void> {
|
|
74
|
+
await this.initPromise;
|
|
66
75
|
await this.pool.end();
|
|
67
76
|
}
|
|
68
77
|
|
|
69
78
|
async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
|
|
79
|
+
await this.initPromise;
|
|
70
80
|
const [rows] = await this.pool.execute(sql, params);
|
|
71
81
|
return rows as T[];
|
|
72
82
|
}
|
|
@@ -77,6 +87,7 @@ export class MySQLAdapter implements DatabaseAdapter {
|
|
|
77
87
|
}
|
|
78
88
|
|
|
79
89
|
async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
|
|
90
|
+
await this.initPromise;
|
|
80
91
|
const keys = Object.keys(data);
|
|
81
92
|
const values = Object.values(data);
|
|
82
93
|
const placeholders = keys.map(() => '?').join(', ');
|
|
@@ -97,6 +108,7 @@ export class MySQLAdapter implements DatabaseAdapter {
|
|
|
97
108
|
data: Record<string, any>,
|
|
98
109
|
where: Record<string, any>
|
|
99
110
|
): Promise<T> {
|
|
111
|
+
await this.initPromise;
|
|
100
112
|
const setClause = Object.keys(data)
|
|
101
113
|
.map(key => `${key} = ?`)
|
|
102
114
|
.join(', ');
|
|
@@ -119,6 +131,7 @@ export class MySQLAdapter implements DatabaseAdapter {
|
|
|
119
131
|
}
|
|
120
132
|
|
|
121
133
|
async delete(table: string, where: Record<string, any>): Promise<number> {
|
|
134
|
+
await this.initPromise;
|
|
122
135
|
const whereClause = Object.keys(where)
|
|
123
136
|
.map(key => `${key} = ?`)
|
|
124
137
|
.join(' AND ');
|
|
@@ -129,6 +142,7 @@ export class MySQLAdapter implements DatabaseAdapter {
|
|
|
129
142
|
}
|
|
130
143
|
|
|
131
144
|
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
145
|
+
await this.initPromise;
|
|
132
146
|
const connection = await this.pool.getConnection();
|
|
133
147
|
|
|
134
148
|
try {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Database PostgreSQL Adapter
|
|
2
|
-
import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database';
|
|
3
|
-
import { createFrameworkLogger } from '../../logger';
|
|
2
|
+
import { DatabaseAdapter, DatabaseTransaction } from '../../../types/database.js';
|
|
3
|
+
import { createFrameworkLogger } from '../../logger/index.js';
|
|
4
|
+
import { resolveUserPackage } from '../../utilities/package-utils.js';
|
|
4
5
|
|
|
5
6
|
interface PostgreSQLConfig {
|
|
6
7
|
host?: string;
|
|
@@ -25,10 +26,17 @@ interface PostgreSQLConfig {
|
|
|
25
26
|
export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
26
27
|
private pool: any;
|
|
27
28
|
private logger = createFrameworkLogger('PostgreSQL');
|
|
29
|
+
private initPromise: Promise<void>;
|
|
28
30
|
|
|
29
31
|
constructor(config: PostgreSQLConfig) {
|
|
32
|
+
this.initPromise = this.initialize(config);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private async initialize(config: PostgreSQLConfig): Promise<void> {
|
|
30
36
|
try {
|
|
31
|
-
const
|
|
37
|
+
const pgPath = resolveUserPackage('pg');
|
|
38
|
+
const pg = await import(pgPath);
|
|
39
|
+
const { Pool } = pg.default;
|
|
32
40
|
this.pool = new Pool({
|
|
33
41
|
host: config.host || 'localhost',
|
|
34
42
|
port: config.port || 5432,
|
|
@@ -54,6 +62,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
54
62
|
}
|
|
55
63
|
|
|
56
64
|
async connect(): Promise<void> {
|
|
65
|
+
await this.initPromise;
|
|
57
66
|
try {
|
|
58
67
|
const client = await this.pool.connect();
|
|
59
68
|
client.release();
|
|
@@ -67,10 +76,12 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
67
76
|
}
|
|
68
77
|
|
|
69
78
|
async disconnect(): Promise<void> {
|
|
79
|
+
await this.initPromise;
|
|
70
80
|
await this.pool.end();
|
|
71
81
|
}
|
|
72
82
|
|
|
73
83
|
async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
|
|
84
|
+
await this.initPromise;
|
|
74
85
|
const result = await this.pool.query(sql, params);
|
|
75
86
|
return result.rows as T[];
|
|
76
87
|
}
|
|
@@ -81,6 +92,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
81
92
|
}
|
|
82
93
|
|
|
83
94
|
async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
|
|
95
|
+
await this.initPromise;
|
|
84
96
|
const keys = Object.keys(data);
|
|
85
97
|
const values = Object.values(data);
|
|
86
98
|
const placeholders = keys.map((_, index) => `$${index + 1}`).join(', ');
|
|
@@ -96,6 +108,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
96
108
|
data: Record<string, any>,
|
|
97
109
|
where: Record<string, any>
|
|
98
110
|
): Promise<T> {
|
|
111
|
+
await this.initPromise;
|
|
99
112
|
const dataKeys = Object.keys(data);
|
|
100
113
|
const dataValues = Object.values(data);
|
|
101
114
|
const whereKeys = Object.keys(where);
|
|
@@ -114,6 +127,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
114
127
|
}
|
|
115
128
|
|
|
116
129
|
async delete(table: string, where: Record<string, any>): Promise<number> {
|
|
130
|
+
await this.initPromise;
|
|
117
131
|
const whereKeys = Object.keys(where);
|
|
118
132
|
const whereValues = Object.values(where);
|
|
119
133
|
const whereClause = whereKeys.map((key, index) => `${key} = $${index + 1}`).join(' AND ');
|
|
@@ -125,6 +139,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
125
139
|
}
|
|
126
140
|
|
|
127
141
|
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
142
|
+
await this.initPromise;
|
|
128
143
|
const client = await this.pool.connect();
|
|
129
144
|
|
|
130
145
|
try {
|