@morojs/moro 1.6.1 → 1.6.2
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 +74 -256
- package/dist/core/auth/morojs-adapter.js +20 -20
- package/dist/core/auth/morojs-adapter.js.map +1 -1
- package/dist/core/config/config-manager.d.ts +44 -0
- package/dist/core/config/config-manager.js +104 -0
- package/dist/core/config/config-manager.js.map +1 -0
- package/dist/core/config/config-sources.d.ts +21 -0
- package/dist/core/config/config-sources.js +503 -0
- package/dist/core/config/config-sources.js.map +1 -0
- package/dist/core/config/config-validator.d.ts +21 -0
- package/dist/core/config/config-validator.js +791 -0
- package/dist/core/config/config-validator.js.map +1 -0
- package/dist/core/config/file-loader.d.ts +1 -6
- package/dist/core/config/file-loader.js +21 -249
- package/dist/core/config/file-loader.js.map +1 -1
- package/dist/core/config/index.d.ts +41 -12
- package/dist/core/config/index.js +65 -54
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/schema.d.ts +2 -2
- package/dist/core/config/schema.js +55 -44
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/config/utils.d.ts +10 -3
- package/dist/core/config/utils.js +31 -58
- 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 +13 -1
- package/dist/core/database/adapters/mongodb.js +46 -10
- package/dist/core/database/adapters/mongodb.js.map +1 -1
- package/dist/core/database/adapters/mysql.d.ts +14 -1
- package/dist/core/database/adapters/mysql.js +19 -9
- package/dist/core/database/adapters/mysql.js.map +1 -1
- package/dist/core/database/adapters/postgresql.d.ts +12 -2
- package/dist/core/database/adapters/postgresql.js +19 -9
- package/dist/core/database/adapters/postgresql.js.map +1 -1
- package/dist/core/database/adapters/redis.d.ts +12 -1
- package/dist/core/database/adapters/redis.js +48 -13
- 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 +7 -11
- 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 +20 -13
- package/dist/core/framework.js +285 -102
- package/dist/core/framework.js.map +1 -1
- package/dist/core/http/http-server.d.ts +59 -7
- package/dist/core/http/http-server.js +190 -176
- 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/uws-http-server.d.ts +46 -0
- package/dist/core/http/uws-http-server.js +523 -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 +20 -23
- 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 -24
- package/dist/core/logger/index.js.map +1 -1
- package/dist/core/logger/logger.d.ts +30 -14
- package/dist/core/logger/logger.js +398 -223
- 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 -17
- 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 +93 -26
- 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 +11 -12
- 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 -27
- package/dist/core/middleware/built-in/index.js +48 -78
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/core/middleware/built-in/jwt-helpers.d.ts +118 -0
- package/dist/core/middleware/built-in/jwt-helpers.js +218 -0
- package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -0
- 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 +5 -8
- 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 +12 -14
- 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 +19 -2
- package/dist/core/modules/auto-discovery.js +391 -74
- 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 +23 -54
- 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 +2 -2
- package/dist/core/networking/adapters/ws-adapter.js +8 -43
- 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 +8 -12
- 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/pooling/object-pool-manager.d.ts +140 -0
- package/dist/core/pooling/object-pool-manager.js +502 -0
- package/dist/core/pooling/object-pool-manager.js.map +1 -0
- package/dist/core/routing/app-integration.d.ts +14 -12
- package/dist/core/routing/app-integration.js +49 -85
- package/dist/core/routing/app-integration.js.map +1 -1
- package/dist/core/routing/index.d.ts +17 -11
- package/dist/core/routing/index.js +48 -237
- package/dist/core/routing/index.js.map +1 -1
- package/dist/core/routing/path-matcher.d.ts +67 -0
- package/dist/core/routing/path-matcher.js +182 -0
- package/dist/core/routing/path-matcher.js.map +1 -0
- package/dist/core/routing/router.d.ts +38 -0
- package/dist/core/routing/router.js +68 -0
- package/dist/core/routing/router.js.map +1 -0
- package/dist/core/routing/unified-router.d.ts +148 -0
- package/dist/core/routing/unified-router.js +684 -0
- package/dist/core/routing/unified-router.js.map +1 -0
- 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 +18 -49
- 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 +70 -16
- package/dist/moro.js +658 -271
- 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 +73 -2
- package/dist/types/config.js +1 -2
- package/dist/types/config.js.map +1 -1
- package/dist/types/core.d.ts +36 -42
- 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.d.ts +16 -1
- package/dist/types/http.js +1 -2
- package/dist/types/logger.d.ts +7 -0
- package/dist/types/logger.js +1 -2
- package/dist/types/module.d.ts +11 -0
- 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 +19 -52
- package/src/core/auth/morojs-adapter.ts +18 -13
- package/src/core/config/config-manager.ts +133 -0
- package/src/core/config/config-sources.ts +600 -0
- package/src/core/config/config-validator.ts +1116 -0
- package/src/core/config/file-loader.ts +16 -273
- package/src/core/config/index.ts +83 -34
- package/src/core/config/schema.ts +47 -33
- package/src/core/config/utils.ts +24 -31
- package/src/core/database/README.md +26 -16
- 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 +53 -5
- package/src/core/database/adapters/mysql.ts +32 -4
- package/src/core/database/adapters/postgresql.ts +30 -5
- package/src/core/database/adapters/redis.ts +61 -8
- 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 +3 -3
- package/src/core/events/index.ts +2 -2
- package/src/core/framework.ts +320 -71
- package/src/core/http/http-server.ts +203 -143
- package/src/core/http/index.ts +4 -3
- package/src/core/http/uws-http-server.ts +591 -0
- package/src/core/logger/filters.ts +13 -5
- package/src/core/logger/index.ts +4 -3
- package/src/core/logger/logger.ts +435 -216
- package/src/core/logger/outputs.ts +1 -3
- 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 +102 -21
- package/src/core/middleware/built-in/cache.ts +8 -6
- 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 +38 -30
- package/src/core/middleware/built-in/jwt-helpers.ts +243 -0
- 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 +3 -1
- package/src/core/middleware/built-in/session.ts +7 -8
- package/src/core/middleware/built-in/sse.ts +11 -9
- 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 +478 -15
- package/src/core/modules/index.ts +2 -2
- package/src/core/modules/modules.ts +23 -12
- 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 +8 -9
- package/src/core/networking/index.ts +3 -2
- package/src/core/networking/service-discovery.ts +6 -7
- package/src/core/networking/websocket-manager.ts +7 -7
- package/src/core/pooling/object-pool-manager.ts +630 -0
- package/src/core/routing/app-integration.ts +60 -112
- package/src/core/routing/index.ts +66 -293
- package/src/core/routing/path-matcher.ts +222 -0
- package/src/core/routing/router.ts +97 -0
- package/src/core/routing/unified-router.ts +870 -0
- 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 +16 -10
- 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 +784 -253
- package/src/types/config.ts +74 -2
- package/src/types/core.ts +49 -47
- package/src/types/hooks.ts +1 -1
- package/src/types/http.ts +23 -1
- package/src/types/logger.ts +9 -0
- package/src/types/module.ts +12 -0
- package/src/types/runtime.ts +1 -1
- package/tsconfig.json +4 -2
- package/dist/core/config/loader.d.ts +0 -7
- package/dist/core/config/loader.js +0 -269
- package/dist/core/config/loader.js.map +0 -1
- package/dist/core/config/validation.d.ts +0 -17
- package/dist/core/config/validation.js +0 -131
- package/dist/core/config/validation.js.map +0 -1
- package/dist/core/http/router.d.ts +0 -14
- package/dist/core/http/router.js +0 -109
- package/dist/core/http/router.js.map +0 -1
- package/src/core/config/loader.ts +0 -633
- package/src/core/config/validation.ts +0 -140
- package/src/core/http/router.ts +0 -141
|
@@ -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;
|
|
@@ -9,16 +10,33 @@ interface PostgreSQLConfig {
|
|
|
9
10
|
password?: string;
|
|
10
11
|
database?: string;
|
|
11
12
|
connectionLimit?: number;
|
|
12
|
-
ssl?:
|
|
13
|
+
ssl?:
|
|
14
|
+
| {
|
|
15
|
+
rejectUnauthorized?: boolean;
|
|
16
|
+
ca?: string;
|
|
17
|
+
cert?: string;
|
|
18
|
+
key?: string;
|
|
19
|
+
passphrase?: string;
|
|
20
|
+
servername?: string;
|
|
21
|
+
checkServerIdentity?: boolean;
|
|
22
|
+
}
|
|
23
|
+
| boolean;
|
|
13
24
|
}
|
|
14
25
|
|
|
15
26
|
export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
16
27
|
private pool: any;
|
|
17
28
|
private logger = createFrameworkLogger('PostgreSQL');
|
|
29
|
+
private initPromise: Promise<void>;
|
|
18
30
|
|
|
19
31
|
constructor(config: PostgreSQLConfig) {
|
|
32
|
+
this.initPromise = this.initialize(config);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private async initialize(config: PostgreSQLConfig): Promise<void> {
|
|
20
36
|
try {
|
|
21
|
-
const
|
|
37
|
+
const pgPath = resolveUserPackage('pg');
|
|
38
|
+
const pg = await import(pgPath);
|
|
39
|
+
const { Pool } = pg.default;
|
|
22
40
|
this.pool = new Pool({
|
|
23
41
|
host: config.host || 'localhost',
|
|
24
42
|
port: config.port || 5432,
|
|
@@ -26,7 +44,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
26
44
|
password: config.password || '',
|
|
27
45
|
database: config.database || 'moro_app',
|
|
28
46
|
max: config.connectionLimit || 10,
|
|
29
|
-
ssl: config.ssl || false,
|
|
47
|
+
ssl: typeof config.ssl === 'object' ? { ...config.ssl } : config.ssl || false,
|
|
30
48
|
});
|
|
31
49
|
|
|
32
50
|
this.pool.on('error', (err: Error) => {
|
|
@@ -44,6 +62,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
44
62
|
}
|
|
45
63
|
|
|
46
64
|
async connect(): Promise<void> {
|
|
65
|
+
await this.initPromise;
|
|
47
66
|
try {
|
|
48
67
|
const client = await this.pool.connect();
|
|
49
68
|
client.release();
|
|
@@ -57,10 +76,12 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
57
76
|
}
|
|
58
77
|
|
|
59
78
|
async disconnect(): Promise<void> {
|
|
79
|
+
await this.initPromise;
|
|
60
80
|
await this.pool.end();
|
|
61
81
|
}
|
|
62
82
|
|
|
63
83
|
async query<T = any>(sql: string, params?: any[]): Promise<T[]> {
|
|
84
|
+
await this.initPromise;
|
|
64
85
|
const result = await this.pool.query(sql, params);
|
|
65
86
|
return result.rows as T[];
|
|
66
87
|
}
|
|
@@ -71,6 +92,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
71
92
|
}
|
|
72
93
|
|
|
73
94
|
async insert<T = any>(table: string, data: Record<string, any>): Promise<T> {
|
|
95
|
+
await this.initPromise;
|
|
74
96
|
const keys = Object.keys(data);
|
|
75
97
|
const values = Object.values(data);
|
|
76
98
|
const placeholders = keys.map((_, index) => `$${index + 1}`).join(', ');
|
|
@@ -86,6 +108,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
86
108
|
data: Record<string, any>,
|
|
87
109
|
where: Record<string, any>
|
|
88
110
|
): Promise<T> {
|
|
111
|
+
await this.initPromise;
|
|
89
112
|
const dataKeys = Object.keys(data);
|
|
90
113
|
const dataValues = Object.values(data);
|
|
91
114
|
const whereKeys = Object.keys(where);
|
|
@@ -104,6 +127,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
104
127
|
}
|
|
105
128
|
|
|
106
129
|
async delete(table: string, where: Record<string, any>): Promise<number> {
|
|
130
|
+
await this.initPromise;
|
|
107
131
|
const whereKeys = Object.keys(where);
|
|
108
132
|
const whereValues = Object.values(where);
|
|
109
133
|
const whereClause = whereKeys.map((key, index) => `${key} = $${index + 1}`).join(' AND ');
|
|
@@ -115,6 +139,7 @@ export class PostgreSQLAdapter implements DatabaseAdapter {
|
|
|
115
139
|
}
|
|
116
140
|
|
|
117
141
|
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
142
|
+
await this.initPromise;
|
|
118
143
|
const client = await this.pool.connect();
|
|
119
144
|
|
|
120
145
|
try {
|
|
@@ -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;
|
|
@@ -11,6 +12,15 @@ interface RedisConfig {
|
|
|
11
12
|
maxRetriesPerRequest?: number;
|
|
12
13
|
retryDelayOnFailover?: number;
|
|
13
14
|
lazyConnect?: boolean;
|
|
15
|
+
tls?: {
|
|
16
|
+
rejectUnauthorized?: boolean;
|
|
17
|
+
ca?: string;
|
|
18
|
+
cert?: string;
|
|
19
|
+
key?: string;
|
|
20
|
+
passphrase?: string;
|
|
21
|
+
servername?: string;
|
|
22
|
+
checkServerIdentity?: boolean;
|
|
23
|
+
};
|
|
14
24
|
cluster?: {
|
|
15
25
|
enableReadyCheck?: boolean;
|
|
16
26
|
redisOptions?: any;
|
|
@@ -22,21 +32,35 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
22
32
|
private client: any;
|
|
23
33
|
private logger = createFrameworkLogger('Redis');
|
|
24
34
|
private keyPrefix: string;
|
|
35
|
+
private initPromise: Promise<void>;
|
|
25
36
|
|
|
26
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> {
|
|
27
43
|
try {
|
|
28
|
-
const
|
|
29
|
-
|
|
44
|
+
const ioredisPath = resolveUserPackage('ioredis');
|
|
45
|
+
const ioredis = await import(ioredisPath);
|
|
46
|
+
const Redis = ioredis.default;
|
|
30
47
|
|
|
31
48
|
if (config.cluster) {
|
|
32
49
|
// Redis Cluster
|
|
33
|
-
|
|
50
|
+
const clusterOptions: any = {
|
|
34
51
|
enableReadyCheck: config.cluster.enableReadyCheck || false,
|
|
35
52
|
redisOptions: config.cluster.redisOptions || {},
|
|
36
|
-
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// Add TLS options to cluster configuration
|
|
56
|
+
if (config.tls) {
|
|
57
|
+
clusterOptions.redisOptions.tls = { ...config.tls };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
this.client = new Redis.Cluster(config.cluster.nodes, clusterOptions);
|
|
37
61
|
} else {
|
|
38
62
|
// Single Redis instance
|
|
39
|
-
|
|
63
|
+
const redisOptions: any = {
|
|
40
64
|
host: config.host || 'localhost',
|
|
41
65
|
port: config.port || 6379,
|
|
42
66
|
password: config.password,
|
|
@@ -44,7 +68,14 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
44
68
|
maxRetriesPerRequest: config.maxRetriesPerRequest || 3,
|
|
45
69
|
retryDelayOnFailover: config.retryDelayOnFailover || 100,
|
|
46
70
|
lazyConnect: config.lazyConnect || true,
|
|
47
|
-
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// Add TLS options if provided
|
|
74
|
+
if (config.tls) {
|
|
75
|
+
redisOptions.tls = { ...config.tls };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
this.client = new Redis(redisOptions);
|
|
48
79
|
}
|
|
49
80
|
|
|
50
81
|
this.client.on('error', (err: Error) => {
|
|
@@ -74,6 +105,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
74
105
|
}
|
|
75
106
|
|
|
76
107
|
async connect(): Promise<void> {
|
|
108
|
+
await this.initPromise;
|
|
77
109
|
try {
|
|
78
110
|
await this.client.ping();
|
|
79
111
|
this.logger.info('Redis connection established', 'Connection');
|
|
@@ -86,11 +118,13 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
86
118
|
}
|
|
87
119
|
|
|
88
120
|
async disconnect(): Promise<void> {
|
|
121
|
+
await this.initPromise;
|
|
89
122
|
await this.client.quit();
|
|
90
123
|
}
|
|
91
124
|
|
|
92
125
|
// For Redis, we adapt the SQL-like interface to key-value operations
|
|
93
126
|
async query<T = any>(pattern: string, _params?: any[]): Promise<T[]> {
|
|
127
|
+
await this.initPromise;
|
|
94
128
|
try {
|
|
95
129
|
const keys = await this.client.keys(this.prefixKey(pattern));
|
|
96
130
|
if (keys.length === 0) return [];
|
|
@@ -110,6 +144,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
110
144
|
}
|
|
111
145
|
|
|
112
146
|
async queryOne<T = any>(key: string, _params?: any[]): Promise<T | null> {
|
|
147
|
+
await this.initPromise;
|
|
113
148
|
try {
|
|
114
149
|
const value = await this.client.get(this.prefixKey(key));
|
|
115
150
|
return value ? JSON.parse(value) : null;
|
|
@@ -123,6 +158,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
123
158
|
}
|
|
124
159
|
|
|
125
160
|
async insert<T = any>(key: string, data: Record<string, any>): Promise<T> {
|
|
161
|
+
await this.initPromise;
|
|
126
162
|
try {
|
|
127
163
|
const value = JSON.stringify(data);
|
|
128
164
|
await this.client.set(this.prefixKey(key), value);
|
|
@@ -141,6 +177,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
141
177
|
data: Record<string, any>,
|
|
142
178
|
_where?: Record<string, any>
|
|
143
179
|
): Promise<T> {
|
|
180
|
+
await this.initPromise;
|
|
144
181
|
try {
|
|
145
182
|
// For Redis, we'll merge with existing data if it exists
|
|
146
183
|
const existing = await this.queryOne(key);
|
|
@@ -158,6 +195,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
158
195
|
}
|
|
159
196
|
|
|
160
197
|
async delete(pattern: string, _where?: Record<string, any>): Promise<number> {
|
|
198
|
+
await this.initPromise;
|
|
161
199
|
try {
|
|
162
200
|
const keys = await this.client.keys(this.prefixKey(pattern));
|
|
163
201
|
if (keys.length === 0) return 0;
|
|
@@ -174,6 +212,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
174
212
|
}
|
|
175
213
|
|
|
176
214
|
async transaction<T>(callback: (tx: DatabaseTransaction) => Promise<T>): Promise<T> {
|
|
215
|
+
await this.initPromise;
|
|
177
216
|
const multi = this.client.multi();
|
|
178
217
|
const transaction = new RedisTransaction(multi, this.keyPrefix);
|
|
179
218
|
|
|
@@ -190,6 +229,7 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
190
229
|
|
|
191
230
|
// Redis-specific methods
|
|
192
231
|
async set(key: string, value: any, ttl?: number): Promise<void> {
|
|
232
|
+
await this.initPromise;
|
|
193
233
|
const prefixedKey = this.prefixKey(key);
|
|
194
234
|
if (ttl) {
|
|
195
235
|
await this.client.setex(prefixedKey, ttl, JSON.stringify(value));
|
|
@@ -199,38 +239,46 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
199
239
|
}
|
|
200
240
|
|
|
201
241
|
async get(key: string): Promise<any> {
|
|
242
|
+
await this.initPromise;
|
|
202
243
|
const value = await this.client.get(this.prefixKey(key));
|
|
203
244
|
return value ? JSON.parse(value) : null;
|
|
204
245
|
}
|
|
205
246
|
|
|
206
247
|
async exists(key: string): Promise<boolean> {
|
|
248
|
+
await this.initPromise;
|
|
207
249
|
const result = await this.client.exists(this.prefixKey(key));
|
|
208
250
|
return result === 1;
|
|
209
251
|
}
|
|
210
252
|
|
|
211
253
|
async expire(key: string, ttl: number): Promise<boolean> {
|
|
254
|
+
await this.initPromise;
|
|
212
255
|
const result = await this.client.expire(this.prefixKey(key), ttl);
|
|
213
256
|
return result === 1;
|
|
214
257
|
}
|
|
215
258
|
|
|
216
259
|
async incr(key: string): Promise<number> {
|
|
260
|
+
await this.initPromise;
|
|
217
261
|
return await this.client.incr(this.prefixKey(key));
|
|
218
262
|
}
|
|
219
263
|
|
|
220
264
|
async decr(key: string): Promise<number> {
|
|
265
|
+
await this.initPromise;
|
|
221
266
|
return await this.client.decr(this.prefixKey(key));
|
|
222
267
|
}
|
|
223
268
|
|
|
224
269
|
async hset(hash: string, field: string, value: any): Promise<void> {
|
|
270
|
+
await this.initPromise;
|
|
225
271
|
await this.client.hset(this.prefixKey(hash), field, JSON.stringify(value));
|
|
226
272
|
}
|
|
227
273
|
|
|
228
274
|
async hget(hash: string, field: string): Promise<any> {
|
|
275
|
+
await this.initPromise;
|
|
229
276
|
const value = await this.client.hget(this.prefixKey(hash), field);
|
|
230
277
|
return value ? JSON.parse(value) : null;
|
|
231
278
|
}
|
|
232
279
|
|
|
233
280
|
async hgetall(hash: string): Promise<Record<string, any>> {
|
|
281
|
+
await this.initPromise;
|
|
234
282
|
const result = await this.client.hgetall(this.prefixKey(hash));
|
|
235
283
|
const parsed: Record<string, any> = {};
|
|
236
284
|
for (const [key, value] of Object.entries(result)) {
|
|
@@ -240,25 +288,30 @@ export class RedisAdapter implements DatabaseAdapter {
|
|
|
240
288
|
}
|
|
241
289
|
|
|
242
290
|
async lpush(list: string, ...values: any[]): Promise<number> {
|
|
291
|
+
await this.initPromise;
|
|
243
292
|
const serialized = values.map(v => JSON.stringify(v));
|
|
244
293
|
return await this.client.lpush(this.prefixKey(list), ...serialized);
|
|
245
294
|
}
|
|
246
295
|
|
|
247
296
|
async rpop(list: string): Promise<any> {
|
|
297
|
+
await this.initPromise;
|
|
248
298
|
const value = await this.client.rpop(this.prefixKey(list));
|
|
249
299
|
return value ? JSON.parse(value) : null;
|
|
250
300
|
}
|
|
251
301
|
|
|
252
302
|
async lrange(list: string, start: number, stop: number): Promise<any[]> {
|
|
303
|
+
await this.initPromise;
|
|
253
304
|
const values = await this.client.lrange(this.prefixKey(list), start, stop);
|
|
254
305
|
return values.map((v: string) => JSON.parse(v));
|
|
255
306
|
}
|
|
256
307
|
|
|
257
308
|
async publish(channel: string, message: any): Promise<number> {
|
|
309
|
+
await this.initPromise;
|
|
258
310
|
return await this.client.publish(channel, JSON.stringify(message));
|
|
259
311
|
}
|
|
260
312
|
|
|
261
313
|
async subscribe(channel: string, callback: (message: any) => void): Promise<void> {
|
|
314
|
+
await this.initPromise;
|
|
262
315
|
const subscriber = this.client.duplicate();
|
|
263
316
|
subscriber.subscribe(channel);
|
|
264
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() {
|