@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.
Files changed (373) hide show
  1. package/README.md +70 -269
  2. package/dist/core/auth/morojs-adapter.js +5 -9
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-manager.d.ts +1 -1
  5. package/dist/core/config/config-manager.js +10 -20
  6. package/dist/core/config/config-manager.js.map +1 -1
  7. package/dist/core/config/config-sources.d.ts +2 -2
  8. package/dist/core/config/config-sources.js +17 -20
  9. package/dist/core/config/config-sources.js.map +1 -1
  10. package/dist/core/config/config-validator.d.ts +1 -1
  11. package/dist/core/config/config-validator.js +33 -10
  12. package/dist/core/config/config-validator.js.map +1 -1
  13. package/dist/core/config/file-loader.d.ts +1 -1
  14. package/dist/core/config/file-loader.js +19 -78
  15. package/dist/core/config/file-loader.js.map +1 -1
  16. package/dist/core/config/index.d.ts +8 -8
  17. package/dist/core/config/index.js +25 -51
  18. package/dist/core/config/index.js.map +1 -1
  19. package/dist/core/config/schema.d.ts +2 -2
  20. package/dist/core/config/schema.js +11 -13
  21. package/dist/core/config/schema.js.map +1 -1
  22. package/dist/core/config/utils.d.ts +1 -1
  23. package/dist/core/config/utils.js +18 -32
  24. package/dist/core/config/utils.js.map +1 -1
  25. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  26. package/dist/core/database/adapters/drizzle.js +18 -11
  27. package/dist/core/database/adapters/drizzle.js.map +1 -1
  28. package/dist/core/database/adapters/index.d.ts +7 -7
  29. package/dist/core/database/adapters/index.js +19 -29
  30. package/dist/core/database/adapters/index.js.map +1 -1
  31. package/dist/core/database/adapters/mongodb.d.ts +3 -1
  32. package/dist/core/database/adapters/mongodb.js +23 -8
  33. package/dist/core/database/adapters/mongodb.js.map +1 -1
  34. package/dist/core/database/adapters/mysql.d.ts +3 -1
  35. package/dist/core/database/adapters/mysql.js +18 -9
  36. package/dist/core/database/adapters/mysql.js.map +1 -1
  37. package/dist/core/database/adapters/postgresql.d.ts +3 -1
  38. package/dist/core/database/adapters/postgresql.js +18 -8
  39. package/dist/core/database/adapters/postgresql.js.map +1 -1
  40. package/dist/core/database/adapters/redis.d.ts +3 -1
  41. package/dist/core/database/adapters/redis.js +34 -9
  42. package/dist/core/database/adapters/redis.js.map +1 -1
  43. package/dist/core/database/adapters/sqlite.d.ts +3 -1
  44. package/dist/core/database/adapters/sqlite.js +19 -8
  45. package/dist/core/database/adapters/sqlite.js.map +1 -1
  46. package/dist/core/database/index.d.ts +2 -2
  47. package/dist/core/database/index.js +2 -18
  48. package/dist/core/database/index.js.map +1 -1
  49. package/dist/core/docs/index.d.ts +9 -9
  50. package/dist/core/docs/index.js +14 -35
  51. package/dist/core/docs/index.js.map +1 -1
  52. package/dist/core/docs/openapi-generator.d.ts +2 -2
  53. package/dist/core/docs/openapi-generator.js +11 -16
  54. package/dist/core/docs/openapi-generator.js.map +1 -1
  55. package/dist/core/docs/schema-to-openapi.d.ts +2 -2
  56. package/dist/core/docs/schema-to-openapi.js +5 -11
  57. package/dist/core/docs/schema-to-openapi.js.map +1 -1
  58. package/dist/core/docs/simple-docs.d.ts +1 -1
  59. package/dist/core/docs/simple-docs.js +4 -9
  60. package/dist/core/docs/simple-docs.js.map +1 -1
  61. package/dist/core/docs/swagger-ui.d.ts +2 -2
  62. package/dist/core/docs/swagger-ui.js +26 -29
  63. package/dist/core/docs/swagger-ui.js.map +1 -1
  64. package/dist/core/docs/zod-to-openapi.js +31 -28
  65. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  66. package/dist/core/events/event-bus.d.ts +1 -1
  67. package/dist/core/events/event-bus.js +6 -10
  68. package/dist/core/events/event-bus.js.map +1 -1
  69. package/dist/core/events/index.d.ts +2 -2
  70. package/dist/core/events/index.js +1 -5
  71. package/dist/core/events/index.js.map +1 -1
  72. package/dist/core/framework.d.ts +16 -6
  73. package/dist/core/framework.js +182 -92
  74. package/dist/core/framework.js.map +1 -1
  75. package/dist/core/http/http-server.d.ts +1 -1
  76. package/dist/core/http/http-server.js +26 -209
  77. package/dist/core/http/http-server.js.map +1 -1
  78. package/dist/core/http/index.d.ts +4 -3
  79. package/dist/core/http/index.js +3 -8
  80. package/dist/core/http/index.js.map +1 -1
  81. package/dist/core/http/router.d.ts +1 -1
  82. package/dist/core/http/router.js +3 -7
  83. package/dist/core/http/router.js.map +1 -1
  84. package/dist/core/http/uws-http-server.d.ts +64 -0
  85. package/dist/core/http/uws-http-server.js +688 -0
  86. package/dist/core/http/uws-http-server.js.map +1 -0
  87. package/dist/core/logger/filters.d.ts +1 -1
  88. package/dist/core/logger/filters.js +8 -19
  89. package/dist/core/logger/filters.js.map +1 -1
  90. package/dist/core/logger/index.d.ts +3 -3
  91. package/dist/core/logger/index.js +2 -25
  92. package/dist/core/logger/index.js.map +1 -1
  93. package/dist/core/logger/logger.d.ts +1 -1
  94. package/dist/core/logger/logger.js +21 -23
  95. package/dist/core/logger/logger.js.map +1 -1
  96. package/dist/core/logger/outputs.d.ts +1 -1
  97. package/dist/core/logger/outputs.js +8 -15
  98. package/dist/core/logger/outputs.js.map +1 -1
  99. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  100. package/dist/core/middleware/built-in/adapters/cache/file.js +10 -47
  101. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  102. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  103. package/dist/core/middleware/built-in/adapters/cache/index.js +10 -17
  104. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  105. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  106. package/dist/core/middleware/built-in/adapters/cache/memory.js +3 -7
  107. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  108. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +3 -1
  109. package/dist/core/middleware/built-in/adapters/cache/redis.js +11 -9
  110. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  111. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  112. package/dist/core/middleware/built-in/adapters/cdn/azure.js +3 -7
  113. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  114. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  115. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +3 -7
  116. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  117. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +3 -1
  118. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +12 -10
  119. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  120. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  121. package/dist/core/middleware/built-in/adapters/cdn/index.js +10 -17
  122. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
  123. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  124. package/dist/core/middleware/built-in/adapters/index.js +4 -23
  125. package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
  126. package/dist/core/middleware/built-in/auth-helpers.js +11 -22
  127. package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
  128. package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
  129. package/dist/core/middleware/built-in/auth-providers.js +4 -9
  130. package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
  131. package/dist/core/middleware/built-in/auth.d.ts +2 -2
  132. package/dist/core/middleware/built-in/auth.js +51 -44
  133. package/dist/core/middleware/built-in/auth.js.map +1 -1
  134. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  135. package/dist/core/middleware/built-in/cache.js +8 -11
  136. package/dist/core/middleware/built-in/cache.js.map +1 -1
  137. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  138. package/dist/core/middleware/built-in/cdn.js +5 -9
  139. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  140. package/dist/core/middleware/built-in/cookie.d.ts +1 -1
  141. package/dist/core/middleware/built-in/cookie.js +3 -7
  142. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  143. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  144. package/dist/core/middleware/built-in/cors.js +3 -7
  145. package/dist/core/middleware/built-in/cors.js.map +1 -1
  146. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  147. package/dist/core/middleware/built-in/csp.js +5 -8
  148. package/dist/core/middleware/built-in/csp.js.map +1 -1
  149. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  150. package/dist/core/middleware/built-in/csrf.js +5 -8
  151. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  152. package/dist/core/middleware/built-in/error-tracker.js +3 -7
  153. package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
  154. package/dist/core/middleware/built-in/index.d.ts +28 -28
  155. package/dist/core/middleware/built-in/index.js +47 -82
  156. package/dist/core/middleware/built-in/index.js.map +1 -1
  157. package/dist/core/middleware/built-in/jwt-helpers.d.ts +27 -2
  158. package/dist/core/middleware/built-in/jwt-helpers.js +32 -10
  159. package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -1
  160. package/dist/core/middleware/built-in/performance-monitor.js +3 -7
  161. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
  162. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  163. package/dist/core/middleware/built-in/rate-limit.js +3 -7
  164. package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
  165. package/dist/core/middleware/built-in/request-logger.js +3 -7
  166. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  167. package/dist/core/middleware/built-in/session.d.ts +2 -2
  168. package/dist/core/middleware/built-in/session.js +11 -15
  169. package/dist/core/middleware/built-in/session.js.map +1 -1
  170. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  171. package/dist/core/middleware/built-in/sse.js +3 -7
  172. package/dist/core/middleware/built-in/sse.js.map +1 -1
  173. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  174. package/dist/core/middleware/built-in/validation.js +3 -7
  175. package/dist/core/middleware/built-in/validation.js.map +1 -1
  176. package/dist/core/middleware/index.d.ts +4 -4
  177. package/dist/core/middleware/index.js +8 -28
  178. package/dist/core/middleware/index.js.map +1 -1
  179. package/dist/core/modules/auto-discovery.d.ts +3 -3
  180. package/dist/core/modules/auto-discovery.js +43 -81
  181. package/dist/core/modules/auto-discovery.js.map +1 -1
  182. package/dist/core/modules/index.d.ts +2 -2
  183. package/dist/core/modules/index.js +2 -9
  184. package/dist/core/modules/index.js.map +1 -1
  185. package/dist/core/modules/modules.d.ts +3 -3
  186. package/dist/core/modules/modules.js +11 -52
  187. package/dist/core/modules/modules.js.map +1 -1
  188. package/dist/core/networking/adapters/index.d.ts +4 -3
  189. package/dist/core/networking/adapters/index.js +3 -7
  190. package/dist/core/networking/adapters/index.js.map +1 -1
  191. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
  192. package/dist/core/networking/adapters/socketio-adapter.js +5 -40
  193. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  194. package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
  195. package/dist/core/networking/adapters/uws-adapter.js +513 -0
  196. package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
  197. package/dist/core/networking/adapters/ws-adapter.d.ts +1 -1
  198. package/dist/core/networking/adapters/ws-adapter.js +7 -42
  199. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  200. package/dist/core/networking/index.d.ts +3 -2
  201. package/dist/core/networking/index.js +2 -7
  202. package/dist/core/networking/index.js.map +1 -1
  203. package/dist/core/networking/service-discovery.js +3 -7
  204. package/dist/core/networking/service-discovery.js.map +1 -1
  205. package/dist/core/networking/websocket-adapter.js +1 -2
  206. package/dist/core/networking/websocket-adapter.js.map +1 -1
  207. package/dist/core/networking/websocket-manager.d.ts +3 -3
  208. package/dist/core/networking/websocket-manager.js +9 -11
  209. package/dist/core/networking/websocket-manager.js.map +1 -1
  210. package/dist/core/routing/app-integration.d.ts +2 -2
  211. package/dist/core/routing/app-integration.js +7 -12
  212. package/dist/core/routing/app-integration.js.map +1 -1
  213. package/dist/core/routing/index.d.ts +2 -2
  214. package/dist/core/routing/index.js +7 -14
  215. package/dist/core/routing/index.js.map +1 -1
  216. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  217. package/dist/core/runtime/aws-lambda-adapter.js +2 -6
  218. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  219. package/dist/core/runtime/base-adapter.d.ts +2 -2
  220. package/dist/core/runtime/base-adapter.js +3 -7
  221. package/dist/core/runtime/base-adapter.js.map +1 -1
  222. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  223. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
  224. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  225. package/dist/core/runtime/index.d.ts +12 -12
  226. package/dist/core/runtime/index.js +22 -35
  227. package/dist/core/runtime/index.js.map +1 -1
  228. package/dist/core/runtime/node-adapter.d.ts +4 -4
  229. package/dist/core/runtime/node-adapter.js +6 -43
  230. package/dist/core/runtime/node-adapter.js.map +1 -1
  231. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  232. package/dist/core/runtime/vercel-edge-adapter.js +2 -6
  233. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  234. package/dist/core/utilities/circuit-breaker.js +1 -5
  235. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  236. package/dist/core/utilities/container.js +12 -22
  237. package/dist/core/utilities/container.js.map +1 -1
  238. package/dist/core/utilities/hooks.d.ts +2 -2
  239. package/dist/core/utilities/hooks.js +7 -12
  240. package/dist/core/utilities/hooks.js.map +1 -1
  241. package/dist/core/utilities/index.d.ts +5 -4
  242. package/dist/core/utilities/index.js +5 -19
  243. package/dist/core/utilities/index.js.map +1 -1
  244. package/dist/core/utilities/package-utils.d.ts +38 -0
  245. package/dist/core/utilities/package-utils.js +57 -0
  246. package/dist/core/utilities/package-utils.js.map +1 -0
  247. package/dist/core/validation/adapters.d.ts +1 -1
  248. package/dist/core/validation/adapters.js +15 -26
  249. package/dist/core/validation/adapters.js.map +1 -1
  250. package/dist/core/validation/index.d.ts +6 -4
  251. package/dist/core/validation/index.js +57 -28
  252. package/dist/core/validation/index.js.map +1 -1
  253. package/dist/core/validation/schema-interface.js +3 -9
  254. package/dist/core/validation/schema-interface.js.map +1 -1
  255. package/dist/index.d.ts +51 -52
  256. package/dist/index.js +23 -132
  257. package/dist/index.js.map +1 -1
  258. package/dist/moro.d.ts +30 -10
  259. package/dist/moro.js +262 -126
  260. package/dist/moro.js.map +1 -1
  261. package/dist/types/auth.js +3 -9
  262. package/dist/types/auth.js.map +1 -1
  263. package/dist/types/cache.js +1 -2
  264. package/dist/types/cdn.js +1 -2
  265. package/dist/types/config.d.ts +13 -1
  266. package/dist/types/config.js +1 -2
  267. package/dist/types/config.js.map +1 -1
  268. package/dist/types/core.d.ts +3 -3
  269. package/dist/types/core.js +1 -2
  270. package/dist/types/database.js +1 -2
  271. package/dist/types/discovery.js +1 -2
  272. package/dist/types/events.js +1 -2
  273. package/dist/types/hooks.d.ts +1 -1
  274. package/dist/types/hooks.js +1 -2
  275. package/dist/types/http.js +1 -2
  276. package/dist/types/logger.js +1 -2
  277. package/dist/types/module.js +1 -2
  278. package/dist/types/runtime.d.ts +1 -1
  279. package/dist/types/runtime.js +1 -2
  280. package/dist/types/session.js +1 -2
  281. package/jest.config.mjs +41 -0
  282. package/package.json +18 -51
  283. package/src/core/auth/morojs-adapter.ts +1 -1
  284. package/src/core/config/config-manager.ts +2 -2
  285. package/src/core/config/config-sources.ts +6 -6
  286. package/src/core/config/config-validator.ts +38 -3
  287. package/src/core/config/file-loader.ts +13 -40
  288. package/src/core/config/index.ts +15 -11
  289. package/src/core/config/schema.ts +3 -2
  290. package/src/core/config/utils.ts +3 -3
  291. package/src/core/database/adapters/drizzle.ts +18 -6
  292. package/src/core/database/adapters/index.ts +13 -13
  293. package/src/core/database/adapters/mongodb.ts +23 -3
  294. package/src/core/database/adapters/mysql.ts +18 -4
  295. package/src/core/database/adapters/postgresql.ts +18 -3
  296. package/src/core/database/adapters/redis.ts +34 -4
  297. package/src/core/database/adapters/sqlite.ts +19 -3
  298. package/src/core/database/index.ts +2 -2
  299. package/src/core/docs/index.ts +8 -8
  300. package/src/core/docs/openapi-generator.ts +4 -4
  301. package/src/core/docs/schema-to-openapi.ts +3 -6
  302. package/src/core/docs/simple-docs.ts +2 -2
  303. package/src/core/docs/swagger-ui.ts +19 -16
  304. package/src/core/docs/zod-to-openapi.ts +34 -34
  305. package/src/core/events/event-bus.ts +2 -2
  306. package/src/core/events/index.ts +2 -2
  307. package/src/core/framework.ts +190 -49
  308. package/src/core/http/http-server.ts +16 -159
  309. package/src/core/http/index.ts +4 -3
  310. package/src/core/http/router.ts +2 -2
  311. package/src/core/http/uws-http-server.ts +794 -0
  312. package/src/core/logger/filters.ts +1 -1
  313. package/src/core/logger/index.ts +3 -3
  314. package/src/core/logger/logger.ts +9 -1
  315. package/src/core/logger/outputs.ts +1 -1
  316. package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
  317. package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
  318. package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
  319. package/src/core/middleware/built-in/adapters/cache/redis.ts +18 -4
  320. package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
  321. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
  322. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +16 -5
  323. package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
  324. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  325. package/src/core/middleware/built-in/auth-helpers.ts +1 -1
  326. package/src/core/middleware/built-in/auth-providers.ts +1 -1
  327. package/src/core/middleware/built-in/auth.ts +64 -41
  328. package/src/core/middleware/built-in/cache.ts +5 -5
  329. package/src/core/middleware/built-in/cdn.ts +4 -4
  330. package/src/core/middleware/built-in/cookie.ts +2 -2
  331. package/src/core/middleware/built-in/cors.ts +2 -2
  332. package/src/core/middleware/built-in/csp.ts +3 -3
  333. package/src/core/middleware/built-in/csrf.ts +3 -3
  334. package/src/core/middleware/built-in/error-tracker.ts +1 -1
  335. package/src/core/middleware/built-in/index.ts +31 -31
  336. package/src/core/middleware/built-in/jwt-helpers.ts +32 -4
  337. package/src/core/middleware/built-in/performance-monitor.ts +1 -1
  338. package/src/core/middleware/built-in/rate-limit.ts +2 -2
  339. package/src/core/middleware/built-in/request-logger.ts +1 -1
  340. package/src/core/middleware/built-in/session.ts +7 -8
  341. package/src/core/middleware/built-in/sse.ts +2 -2
  342. package/src/core/middleware/built-in/validation.ts +2 -2
  343. package/src/core/middleware/index.ts +6 -6
  344. package/src/core/modules/auto-discovery.ts +4 -4
  345. package/src/core/modules/index.ts +2 -2
  346. package/src/core/modules/modules.ts +4 -4
  347. package/src/core/networking/adapters/index.ts +4 -3
  348. package/src/core/networking/adapters/socketio-adapter.ts +5 -3
  349. package/src/core/networking/adapters/uws-adapter.ts +619 -0
  350. package/src/core/networking/adapters/ws-adapter.ts +6 -4
  351. package/src/core/networking/index.ts +3 -2
  352. package/src/core/networking/service-discovery.ts +1 -1
  353. package/src/core/networking/websocket-manager.ts +7 -7
  354. package/src/core/routing/app-integration.ts +3 -3
  355. package/src/core/routing/index.ts +3 -3
  356. package/src/core/runtime/aws-lambda-adapter.ts +3 -3
  357. package/src/core/runtime/base-adapter.ts +2 -2
  358. package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
  359. package/src/core/runtime/index.ts +13 -13
  360. package/src/core/runtime/node-adapter.ts +4 -4
  361. package/src/core/runtime/vercel-edge-adapter.ts +3 -3
  362. package/src/core/utilities/hooks.ts +3 -3
  363. package/src/core/utilities/index.ts +5 -4
  364. package/src/core/utilities/package-utils.ts +59 -0
  365. package/src/core/validation/adapters.ts +1 -1
  366. package/src/core/validation/index.ts +68 -16
  367. package/src/index.ts +73 -66
  368. package/src/moro.ts +303 -75
  369. package/src/types/config.ts +13 -1
  370. package/src/types/core.ts +3 -3
  371. package/src/types/hooks.ts +1 -1
  372. package/src/types/runtime.ts +1 -1
  373. 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 Redis = require('ioredis');
38
- this.keyPrefix = config.keyPrefix || 'moro:';
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 Database = require('better-sqlite3');
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';
@@ -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 { HttpRequest, HttpResponse } from '../http';
7
- import { OpenAPISpec } from './openapi-generator';
8
- import { createFrameworkLogger } from '../logger';
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 ZodSchema: any,
8
- ZodType: any,
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
- const logger = createFrameworkLogger('ZodToOpenAPI');
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
- if (!ZodSchema) {
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
- if (!ZodSchema) {
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();
@@ -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';