@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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Database Redis 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 RedisConfig {
|
|
6
7
|
host?: string;
|
|
@@ -31,11 +32,18 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
31
32
|
private client: any;
|
|
32
33
|
private logger = createFrameworkLogger('Redis');
|
|
33
34
|
private keyPrefix: string;
|
|
35
|
+
private initPromise: Promise<void>;
|
|
34
36
|
|
|
35
37
|
constructor(config: RedisConfig = {}) {
|
|
38
|
+
this.keyPrefix = config.keyPrefix || 'moro:';
|
|
39
|
+
this.initPromise = this.initialize(config);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private async initialize(config: RedisConfig): Promise<void> {
|
|
36
43
|
try {
|
|
37
|
-
const
|
|
38
|
-
|
|
44
|
+
const ioredisPath = resolveUserPackage('ioredis');
|
|
45
|
+
const ioredis = await import(ioredisPath);
|
|
46
|
+
const Redis = ioredis.default;
|
|
39
47
|
|
|
40
48
|
if (config.cluster) {
|
|
41
49
|
// Redis Cluster
|
|
@@ -97,6 +105,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
97
105
|
}
|
|
98
106
|
|
|
99
107
|
async connect(): Promise<void> {
|
|
108
|
+
await this.initPromise;
|
|
100
109
|
try {
|
|
101
110
|
await this.client.ping();
|
|
102
111
|
this.logger.info('Redis connection established', 'Connection');
|
|
@@ -109,11 +118,13 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
109
118
|
}
|
|
110
119
|
|
|
111
120
|
async disconnect(): Promise<void> {
|
|
121
|
+
await this.initPromise;
|
|
112
122
|
await this.client.quit();
|
|
113
123
|
}
|
|
114
124
|
|
|
115
125
|
// For Redis, we adapt the SQL-like interface to key-value operations
|
|
116
126
|
async query<T = any>(pattern: string, _params?: any[]): Promise<T[]> {
|
|
127
|
+
await this.initPromise;
|
|
117
128
|
try {
|
|
118
129
|
const keys = await this.client.keys(this.prefixKey(pattern));
|
|
119
130
|
if (keys.length === 0) return [];
|
|
@@ -133,6 +144,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
133
144
|
}
|
|
134
145
|
|
|
135
146
|
async queryOne<T = any>(key: string, _params?: any[]): Promise<T | null> {
|
|
147
|
+
await this.initPromise;
|
|
136
148
|
try {
|
|
137
149
|
const value = await this.client.get(this.prefixKey(key));
|
|
138
150
|
return value ? JSON.parse(value) : null;
|
|
@@ -146,6 +158,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
146
158
|
}
|
|
147
159
|
|
|
148
160
|
async insert<T = any>(key: string, data: Record<string, any>): Promise<T> {
|
|
161
|
+
await this.initPromise;
|
|
149
162
|
try {
|
|
150
163
|
const value = JSON.stringify(data);
|
|
151
164
|
await this.client.set(this.prefixKey(key), value);
|
|
@@ -164,6 +177,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
164
177
|
data: Record<string, any>,
|
|
165
178
|
_where?: Record<string, any>
|
|
166
179
|
): Promise<T> {
|
|
180
|
+
await this.initPromise;
|
|
167
181
|
try {
|
|
168
182
|
// For Redis, we'll merge with existing data if it exists
|
|
169
183
|
const existing = await this.queryOne(key);
|
|
@@ -181,6 +195,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
181
195
|
}
|
|
182
196
|
|
|
183
197
|
async delete(pattern: string, _where?: Record<string, any>): Promise<number> {
|
|
198
|
+
await this.initPromise;
|
|
184
199
|
try {
|
|
185
200
|
const keys = await this.client.keys(this.prefixKey(pattern));
|
|
186
201
|
if (keys.length === 0) return 0;
|
|
@@ -197,6 +212,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
197
212
|
}
|
|
198
213
|
|
|
199
214
|
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
215
|
+
await this.initPromise;
|
|
200
216
|
const multi = this.client.multi();
|
|
201
217
|
const transaction = new RedisTransaction(multi, this.keyPrefix);
|
|
202
218
|
|
|
@@ -213,6 +229,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
213
229
|
|
|
214
230
|
// Redis-specific methods
|
|
215
231
|
async set(key: string, value: any, ttl?: number): Promise<void> {
|
|
232
|
+
await this.initPromise;
|
|
216
233
|
const prefixedKey = this.prefixKey(key);
|
|
217
234
|
if (ttl) {
|
|
218
235
|
await this.client.setex(prefixedKey, ttl, JSON.stringify(value));
|
|
@@ -222,38 +239,46 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
222
239
|
}
|
|
223
240
|
|
|
224
241
|
async get(key: string): Promise<any> {
|
|
242
|
+
await this.initPromise;
|
|
225
243
|
const value = await this.client.get(this.prefixKey(key));
|
|
226
244
|
return value ? JSON.parse(value) : null;
|
|
227
245
|
}
|
|
228
246
|
|
|
229
247
|
async exists(key: string): Promise<boolean> {
|
|
248
|
+
await this.initPromise;
|
|
230
249
|
const result = await this.client.exists(this.prefixKey(key));
|
|
231
250
|
return result === 1;
|
|
232
251
|
}
|
|
233
252
|
|
|
234
253
|
async expire(key: string, ttl: number): Promise<boolean> {
|
|
254
|
+
await this.initPromise;
|
|
235
255
|
const result = await this.client.expire(this.prefixKey(key), ttl);
|
|
236
256
|
return result === 1;
|
|
237
257
|
}
|
|
238
258
|
|
|
239
259
|
async incr(key: string): Promise<number> {
|
|
260
|
+
await this.initPromise;
|
|
240
261
|
return await this.client.incr(this.prefixKey(key));
|
|
241
262
|
}
|
|
242
263
|
|
|
243
264
|
async decr(key: string): Promise<number> {
|
|
265
|
+
await this.initPromise;
|
|
244
266
|
return await this.client.decr(this.prefixKey(key));
|
|
245
267
|
}
|
|
246
268
|
|
|
247
269
|
async hset(hash: string, field: string, value: any): Promise<void> {
|
|
270
|
+
await this.initPromise;
|
|
248
271
|
await this.client.hset(this.prefixKey(hash), field, JSON.stringify(value));
|
|
249
272
|
}
|
|
250
273
|
|
|
251
274
|
async hget(hash: string, field: string): Promise<any> {
|
|
275
|
+
await this.initPromise;
|
|
252
276
|
const value = await this.client.hget(this.prefixKey(hash), field);
|
|
253
277
|
return value ? JSON.parse(value) : null;
|
|
254
278
|
}
|
|
255
279
|
|
|
256
280
|
async hgetall(hash: string): Promise<Record<string, any>> {
|
|
281
|
+
await this.initPromise;
|
|
257
282
|
const result = await this.client.hgetall(this.prefixKey(hash));
|
|
258
283
|
const parsed: Record<string, any> = {};
|
|
259
284
|
for (const [key, value] of Object.entries(result)) {
|
|
@@ -263,25 +288,30 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
263
288
|
}
|
|
264
289
|
|
|
265
290
|
async lpush(list: string, ...values: any[]): Promise<number> {
|
|
291
|
+
await this.initPromise;
|
|
266
292
|
const serialized = values.map(v => JSON.stringify(v));
|
|
267
293
|
return await this.client.lpush(this.prefixKey(list), ...serialized);
|
|
268
294
|
}
|
|
269
295
|
|
|
270
296
|
async rpop(list: string): Promise<any> {
|
|
297
|
+
await this.initPromise;
|
|
271
298
|
const value = await this.client.rpop(this.prefixKey(list));
|
|
272
299
|
return value ? JSON.parse(value) : null;
|
|
273
300
|
}
|
|
274
301
|
|
|
275
302
|
async lrange(list: string, start: number, stop: number): Promise<any[]> {
|
|
303
|
+
await this.initPromise;
|
|
276
304
|
const values = await this.client.lrange(this.prefixKey(list), start, stop);
|
|
277
305
|
return values.map((v: string) => JSON.parse(v));
|
|
278
306
|
}
|
|
279
307
|
|
|
280
308
|
async publish(channel: string, message: any): Promise<number> {
|
|
309
|
+
await this.initPromise;
|
|
281
310
|
return await this.client.publish(channel, JSON.stringify(message));
|
|
282
311
|
}
|
|
283
312
|
|
|
284
313
|
async subscribe(channel: string, callback: (message: any) => void): Promise<void> {
|
|
314
|
+
await this.initPromise;
|
|
285
315
|
const subscriber = this.client.duplicate();
|
|
286
316
|
subscriber.subscribe(channel);
|
|
287
317
|
subscriber.on('message', (_channel: string, message: string) => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Database SQLite 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 SQLiteConfig {
|
|
6
7
|
filename?: string;
|
|
@@ -14,10 +15,17 @@ interface SQLiteConfig {
|
|
|
14
15
|
export class SQLiteAdapter implements DatabaseAdapter {
|
|
15
16
|
private db: any;
|
|
16
17
|
private logger = createFrameworkLogger('SQLite');
|
|
18
|
+
private initPromise: Promise<void>;
|
|
17
19
|
|
|
18
20
|
constructor(config: SQLiteConfig = {}) {
|
|
21
|
+
this.initPromise = this.initialize(config);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private async initialize(config: SQLiteConfig): Promise<void> {
|
|
19
25
|
try {
|
|
20
|
-
const
|
|
26
|
+
const sqlite3Path = resolveUserPackage('better-sqlite3');
|
|
27
|
+
const betterSqlite3 = await import(sqlite3Path);
|
|
28
|
+
const Database = betterSqlite3.default;
|
|
21
29
|
const filename = config.memory ? ':memory:' : config.filename || 'moro_app.db';
|
|
22
30
|
this.db = new Database(filename, {
|
|
23
31
|
readonly: config.readonly || false,
|
|
@@ -40,15 +48,18 @@ export class SQLiteAdapter implements DatabaseAdapter {
|
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
async connect(): Promise<void> {
|
|
51
|
+
await this.initPromise;
|
|
43
52
|
// SQLite doesn't require explicit connection - it's handled in constructor
|
|
44
53
|
this.logger.info('SQLite adapter ready', 'Connection');
|
|
45
54
|
}
|
|
46
55
|
|
|
47
56
|
async disconnect(): Promise<void> {
|
|
57
|
+
await this.initPromise;
|
|
48
58
|
this.db.close();
|
|
49
59
|
}
|
|
50
60
|
|
|
51
61
|
async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
|
|
62
|
+
await this.initPromise;
|
|
52
63
|
try {
|
|
53
64
|
const stmt = this.db.prepare(sql);
|
|
54
65
|
const results = stmt.all(params || []);
|
|
@@ -63,6 +74,7 @@ export class SQLiteAdapter implements DatabaseAdapter {
|
|
|
63
74
|
}
|
|
64
75
|
|
|
65
76
|
async queryOne<T = any>(sql: string, params?: any[]): Promise<T | null> {
|
|
77
|
+
await this.initPromise;
|
|
66
78
|
try {
|
|
67
79
|
const stmt = this.db.prepare(sql);
|
|
68
80
|
const result = stmt.get(params || []);
|
|
@@ -77,6 +89,7 @@ export class SQLiteAdapter implements DatabaseAdapter {
|
|
|
77
89
|
}
|
|
78
90
|
|
|
79
91
|
async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
|
|
92
|
+
await this.initPromise;
|
|
80
93
|
const keys = Object.keys(data);
|
|
81
94
|
const values = Object.values(data);
|
|
82
95
|
const placeholders = keys.map(() => '?').join(', ');
|
|
@@ -107,6 +120,7 @@ export class SQLiteAdapter implements DatabaseAdapter {
|
|
|
107
120
|
data: Record<string, any>,
|
|
108
121
|
where: Record<string, any>
|
|
109
122
|
): Promise<T> {
|
|
123
|
+
await this.initPromise;
|
|
110
124
|
const setClause = Object.keys(data)
|
|
111
125
|
.map(key => `${key} = ?`)
|
|
112
126
|
.join(', ');
|
|
@@ -138,6 +152,7 @@ export class SQLiteAdapter implements DatabaseAdapter {
|
|
|
138
152
|
}
|
|
139
153
|
|
|
140
154
|
async delete(table: string, where: Record<string, any>): Promise<number> {
|
|
155
|
+
await this.initPromise;
|
|
141
156
|
const whereClause = Object.keys(where)
|
|
142
157
|
.map(key => `${key} = ?`)
|
|
143
158
|
.join(' AND ');
|
|
@@ -157,6 +172,7 @@ export class SQLiteAdapter implements DatabaseAdapter {
|
|
|
157
172
|
}
|
|
158
173
|
|
|
159
174
|
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
175
|
+
await this.initPromise;
|
|
160
176
|
const transaction = this.db.transaction(async () => {
|
|
161
177
|
const tx = new SQLiteTransaction(this.db);
|
|
162
178
|
return await callback(tx);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Database Module
|
|
2
|
-
export * from './adapters';
|
|
3
|
-
export * from '../../types/database';
|
|
2
|
+
export * from './adapters/index.js';
|
|
3
|
+
export * from '../../types/database.js';
|
package/src/core/docs/index.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
// Moro Framework Documentation System
|
|
2
2
|
// Automatic API documentation generation from intelligent routes and Validation schemas
|
|
3
3
|
|
|
4
|
-
import { CompiledRoute } from '../routing';
|
|
5
|
-
import { IntelligentRoutingManager } from '../routing/app-integration';
|
|
4
|
+
import { CompiledRoute } from '../routing/index.js';
|
|
5
|
+
import { IntelligentRoutingManager } from '../routing/app-integration.js';
|
|
6
6
|
import {
|
|
7
7
|
OpenAPIGenerator,
|
|
8
8
|
generateOpenAPIFromRoutes,
|
|
9
9
|
GenerationOptions,
|
|
10
10
|
OpenAPISpec,
|
|
11
11
|
defaultSecuritySchemes,
|
|
12
|
-
} from './openapi-generator';
|
|
13
|
-
import { SwaggerUIMiddleware, SwaggerUIOptions, createDocsMiddleware } from './swagger-ui';
|
|
14
|
-
import { createFrameworkLogger } from '../logger';
|
|
12
|
+
} from './openapi-generator.js';
|
|
13
|
+
import { SwaggerUIMiddleware, SwaggerUIOptions, createDocsMiddleware } from './swagger-ui.js';
|
|
14
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
15
15
|
|
|
16
16
|
const logger = createFrameworkLogger('DocumentationSystem');
|
|
17
17
|
|
|
@@ -226,6 +226,6 @@ export function generateDocsFromIntelligentRoutes(
|
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
// Export all types and functions
|
|
229
|
-
export * from './openapi-generator';
|
|
230
|
-
export * from './swagger-ui';
|
|
231
|
-
export * from './zod-to-openapi';
|
|
229
|
+
export * from './openapi-generator.js';
|
|
230
|
+
export * from './swagger-ui.js';
|
|
231
|
+
export * from './zod-to-openapi.js';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// OpenAPI Specification Generator for Moro Framework
|
|
2
2
|
// Extracts route information from intelligent routing and generates OpenAPI 3.0 specs
|
|
3
3
|
|
|
4
|
-
import { CompiledRoute, RouteSchema } from '../routing';
|
|
5
|
-
import { OpenAPISchema } from './zod-to-openapi';
|
|
6
|
-
import { schemaToOpenAPI, generateExampleFromValidationSchema } from './schema-to-openapi';
|
|
7
|
-
import { createFrameworkLogger } from '../logger';
|
|
4
|
+
import { CompiledRoute, RouteSchema } from '../routing/index.js';
|
|
5
|
+
import { OpenAPISchema } from './zod-to-openapi.js';
|
|
6
|
+
import { schemaToOpenAPI, generateExampleFromValidationSchema } from './schema-to-openapi.js';
|
|
7
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
8
8
|
|
|
9
9
|
const logger = createFrameworkLogger('OpenAPIGenerator');
|
|
10
10
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Universal Schema to OpenAPI Converter
|
|
2
2
|
// Converts ValidationSchema (Zod, Joi, etc.) to OpenAPI 3.0 schema definitions
|
|
3
3
|
|
|
4
|
-
import { ValidationSchema } from '../validation/schema-interface';
|
|
5
|
-
import { OpenAPISchema } from './zod-to-openapi';
|
|
6
|
-
import { createFrameworkLogger } from '../logger';
|
|
4
|
+
import { ValidationSchema } from '../validation/schema-interface.js';
|
|
5
|
+
import { OpenAPISchema, zodToOpenAPI, generateExampleFromSchema } from './zod-to-openapi.js';
|
|
6
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
7
7
|
|
|
8
8
|
const logger = createFrameworkLogger('SchemaToOpenAPI');
|
|
9
9
|
|
|
@@ -32,8 +32,6 @@ export function schemaToOpenAPI(
|
|
|
32
32
|
// If it's a Zod schema, use the existing zod converter
|
|
33
33
|
if (isZodSchema(schema)) {
|
|
34
34
|
try {
|
|
35
|
-
// Import zod converter dynamically
|
|
36
|
-
const { zodToOpenAPI } = require('./zod-to-openapi');
|
|
37
35
|
return zodToOpenAPI(schema, options);
|
|
38
36
|
} catch (error) {
|
|
39
37
|
logger.warn('Zod converter not available, using fallback', String(error));
|
|
@@ -59,7 +57,6 @@ export function generateExampleFromValidationSchema(schema: ValidationSchema): a
|
|
|
59
57
|
// If it's a Zod schema, use existing example generator
|
|
60
58
|
if (isZodSchema(schema)) {
|
|
61
59
|
try {
|
|
62
|
-
const { generateExampleFromSchema } = require('./zod-to-openapi');
|
|
63
60
|
return generateExampleFromSchema(schema);
|
|
64
61
|
} catch (error) {
|
|
65
62
|
logger.warn('Zod example generator not available', String(error));
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Simple Documentation Generator - Fallback for when Swagger UI has issues
|
|
2
2
|
// Generates clean, readable API documentation from routes
|
|
3
3
|
|
|
4
|
-
import { CompiledRoute, RouteSchema } from '../routing';
|
|
5
|
-
import { createFrameworkLogger } from '../logger';
|
|
4
|
+
import { CompiledRoute, RouteSchema } from '../routing/index.js';
|
|
5
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
6
6
|
|
|
7
7
|
const logger = createFrameworkLogger('SimpleDocs');
|
|
8
8
|
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
|
|
4
4
|
import { readFileSync } from 'fs';
|
|
5
5
|
import { join } from 'path';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { createUserRequire } from '../utilities/package-utils.js';
|
|
7
|
+
import { HttpRequest, HttpResponse } from '../http/index.js';
|
|
8
|
+
import { OpenAPISpec } from './openapi-generator.js';
|
|
9
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
9
10
|
|
|
10
11
|
const logger = createFrameworkLogger('SwaggerUI');
|
|
11
12
|
|
|
@@ -44,7 +45,9 @@ export class SwaggerUIMiddleware {
|
|
|
44
45
|
};
|
|
45
46
|
|
|
46
47
|
try {
|
|
47
|
-
// Find swagger-ui-dist assets
|
|
48
|
+
// Find swagger-ui-dist assets using ESM-compatible resolution
|
|
49
|
+
// Create a require function from the user's working directory to find their installed packages
|
|
50
|
+
const require = createUserRequire();
|
|
48
51
|
this.swaggerUIAssetPath = require
|
|
49
52
|
.resolve('swagger-ui-dist/package.json')
|
|
50
53
|
.replace('/package.json', '');
|
|
@@ -119,37 +122,37 @@ export class SwaggerUIMiddleware {
|
|
|
119
122
|
<h3>Failed to Load Swagger UI</h3>
|
|
120
123
|
<div id="error-details"></div>
|
|
121
124
|
</div>
|
|
122
|
-
|
|
125
|
+
|
|
123
126
|
<script src="${basePath}/swagger-ui-bundle.js" charset="UTF-8"></script>
|
|
124
127
|
<script src="${basePath}/swagger-ui-standalone-preset.js" charset="UTF-8"></script>
|
|
125
128
|
<script>
|
|
126
129
|
console.log('Starting Swagger UI initialization...');
|
|
127
|
-
|
|
130
|
+
|
|
128
131
|
function showError(message, details) {
|
|
129
132
|
console.error('Swagger UI Error:', message, details);
|
|
130
133
|
document.getElementById('loading-message').style.display = 'none';
|
|
131
134
|
document.getElementById('error-display').style.display = 'block';
|
|
132
|
-
document.getElementById('error-details').innerHTML =
|
|
135
|
+
document.getElementById('error-details').innerHTML =
|
|
133
136
|
'<p><strong>Error:</strong> ' + message + '</p>' +
|
|
134
137
|
(details ? '<pre>' + JSON.stringify(details, null, 2) + '</pre>' : '');
|
|
135
138
|
}
|
|
136
|
-
|
|
139
|
+
|
|
137
140
|
function initializeSwaggerUI() {
|
|
138
141
|
console.log('Initializing Swagger UI...');
|
|
139
|
-
|
|
142
|
+
|
|
140
143
|
if (typeof SwaggerUIBundle === 'undefined') {
|
|
141
144
|
showError('SwaggerUIBundle not loaded', { SwaggerUIBundle: typeof SwaggerUIBundle });
|
|
142
145
|
return;
|
|
143
146
|
}
|
|
144
|
-
|
|
147
|
+
|
|
145
148
|
if (typeof SwaggerUIStandalonePreset === 'undefined') {
|
|
146
149
|
showError('SwaggerUIStandalonePreset not loaded', { SwaggerUIStandalonePreset: typeof SwaggerUIStandalonePreset });
|
|
147
150
|
return;
|
|
148
151
|
}
|
|
149
|
-
|
|
152
|
+
|
|
150
153
|
try {
|
|
151
154
|
console.log('Creating SwaggerUIBundle...');
|
|
152
|
-
|
|
155
|
+
|
|
153
156
|
const ui = SwaggerUIBundle({
|
|
154
157
|
url: '${basePath}/openapi.json',
|
|
155
158
|
dom_id: '#swagger-ui',
|
|
@@ -173,10 +176,10 @@ export class SwaggerUIMiddleware {
|
|
|
173
176
|
showError('Swagger UI initialization failed', error);
|
|
174
177
|
}
|
|
175
178
|
});
|
|
176
|
-
|
|
179
|
+
|
|
177
180
|
window.ui = ui;
|
|
178
181
|
console.log('SwaggerUIBundle created successfully');
|
|
179
|
-
|
|
182
|
+
|
|
180
183
|
// Hide loading message after timeout if onComplete doesn't fire
|
|
181
184
|
setTimeout(function() {
|
|
182
185
|
var loadingEl = document.getElementById('loading-message');
|
|
@@ -185,7 +188,7 @@ export class SwaggerUIMiddleware {
|
|
|
185
188
|
loadingEl.style.display = 'none';
|
|
186
189
|
}
|
|
187
190
|
}, 5000);
|
|
188
|
-
|
|
191
|
+
|
|
189
192
|
} catch (error) {
|
|
190
193
|
console.error('Error creating SwaggerUIBundle:', error);
|
|
191
194
|
showError('Failed to create SwaggerUIBundle', {
|
|
@@ -194,7 +197,7 @@ export class SwaggerUIMiddleware {
|
|
|
194
197
|
});
|
|
195
198
|
}
|
|
196
199
|
}
|
|
197
|
-
|
|
200
|
+
|
|
198
201
|
// Initialize when DOM is ready and scripts are loaded
|
|
199
202
|
if (document.readyState === 'loading') {
|
|
200
203
|
document.addEventListener('DOMContentLoaded', function() {
|
|
@@ -1,41 +1,39 @@
|
|
|
1
1
|
// Zod to OpenAPI Schema Converter
|
|
2
2
|
// Transforms Zod schemas into OpenAPI 3.0 schema definitions
|
|
3
3
|
|
|
4
|
-
import { createFrameworkLogger } from '../logger';
|
|
4
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
5
|
+
import { createUserRequire, isPackageAvailable } from '../utilities/package-utils.js';
|
|
6
|
+
|
|
7
|
+
const logger = createFrameworkLogger('ZodToOpenAPI');
|
|
5
8
|
|
|
6
9
|
// Dynamic Zod imports (optional dependency)
|
|
7
|
-
let
|
|
8
|
-
|
|
9
|
-
ZodObject: any,
|
|
10
|
-
ZodArray: any,
|
|
11
|
-
ZodString: any,
|
|
12
|
-
ZodNumber: any,
|
|
13
|
-
ZodBoolean: any,
|
|
14
|
-
ZodEnum: any,
|
|
15
|
-
ZodOptional: any,
|
|
16
|
-
ZodDefault: any,
|
|
17
|
-
ZodUnion: any,
|
|
18
|
-
ZodLiteral: any;
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
const zod = require('zod');
|
|
22
|
-
ZodSchema = zod.ZodSchema;
|
|
23
|
-
ZodType = zod.ZodType;
|
|
24
|
-
ZodObject = zod.ZodObject;
|
|
25
|
-
ZodArray = zod.ZodArray;
|
|
26
|
-
ZodString = zod.ZodString;
|
|
27
|
-
ZodNumber = zod.ZodNumber;
|
|
28
|
-
ZodBoolean = zod.ZodBoolean;
|
|
29
|
-
ZodEnum = zod.ZodEnum;
|
|
30
|
-
ZodOptional = zod.ZodOptional;
|
|
31
|
-
ZodDefault = zod.ZodDefault;
|
|
32
|
-
ZodUnion = zod.ZodUnion;
|
|
33
|
-
ZodLiteral = zod.ZodLiteral;
|
|
34
|
-
} catch {
|
|
35
|
-
// Zod not available - that's fine!
|
|
36
|
-
}
|
|
10
|
+
let zodModule: any = null;
|
|
11
|
+
let zodLoadAttempted = false;
|
|
37
12
|
|
|
38
|
-
|
|
13
|
+
// Lazy synchronous initialization for Zod
|
|
14
|
+
function loadZodSync() {
|
|
15
|
+
if (zodLoadAttempted) {
|
|
16
|
+
return zodModule;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
zodLoadAttempted = true;
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
if (!isPackageAvailable('zod')) {
|
|
23
|
+
zodModule = null;
|
|
24
|
+
return zodModule;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Use synchronous require for immediate availability
|
|
28
|
+
const userRequire = createUserRequire();
|
|
29
|
+
zodModule = userRequire('zod');
|
|
30
|
+
} catch {
|
|
31
|
+
// Zod not available - that's fine!
|
|
32
|
+
zodModule = null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return zodModule;
|
|
36
|
+
}
|
|
39
37
|
|
|
40
38
|
// OpenAPI schema types
|
|
41
39
|
export interface OpenAPISchema {
|
|
@@ -72,7 +70,8 @@ export interface ConversionOptions {
|
|
|
72
70
|
// Main conversion function
|
|
73
71
|
export function zodToOpenAPI(schema: any, options: ConversionOptions = {}): OpenAPISchema {
|
|
74
72
|
// Check if Zod is available
|
|
75
|
-
|
|
73
|
+
const zod = loadZodSync();
|
|
74
|
+
if (!zod) {
|
|
76
75
|
throw new Error('Zod is not installed. Please install zod to use zodToOpenAPI function.');
|
|
77
76
|
}
|
|
78
77
|
|
|
@@ -420,7 +419,8 @@ function hasDefault(type: any): boolean {
|
|
|
420
419
|
// Generate example data from Zod schema
|
|
421
420
|
export function generateExampleFromSchema(schema: any): any {
|
|
422
421
|
// Check if Zod is available
|
|
423
|
-
|
|
422
|
+
const zod = loadZodSync();
|
|
423
|
+
if (!zod) {
|
|
424
424
|
throw new Error(
|
|
425
425
|
'Zod is not installed. Please install zod to use generateExampleFromSchema function.'
|
|
426
426
|
);
|
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
GlobalEventBus,
|
|
9
9
|
EventMetrics,
|
|
10
10
|
EventHandler,
|
|
11
|
-
} from '../../types/events';
|
|
12
|
-
import { createFrameworkLogger } from '../logger';
|
|
11
|
+
} from '../../types/events.js';
|
|
12
|
+
import { createFrameworkLogger } from '../logger/index.js';
|
|
13
13
|
|
|
14
14
|
export class MoroEventBus implements GlobalEventBus {
|
|
15
15
|
private emitter = new EventEmitter();
|
package/src/core/events/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Event System - Centralized Exports
|
|
2
|
-
export { MoroEventBus } from './event-bus';
|
|
2
|
+
export { MoroEventBus } from './event-bus.js';
|
|
3
3
|
export type {
|
|
4
4
|
EventContext,
|
|
5
5
|
EventPayload,
|
|
@@ -9,4 +9,4 @@ export type {
|
|
|
9
9
|
EventMetrics,
|
|
10
10
|
SystemEvents,
|
|
11
11
|
EventHandler,
|
|
12
|
-
} from '../../types/events';
|
|
12
|
+
} from '../../types/events.js';
|