@morojs/moro 1.5.17 → 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 +14 -6
  73. package/dist/core/framework.js +150 -88
  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 +24 -62
  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 +10 -14
  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 +1 -1
  158. package/dist/core/middleware/built-in/jwt-helpers.js +6 -9
  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 +13 -10
  259. package/dist/moro.js +132 -102
  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 +148 -44
  308. package/src/core/http/http-server.ts +14 -9
  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 +6 -6
  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 +6 -3
  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 +144 -51
  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,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';
@@ -5,18 +5,20 @@ import {
5
5
  createServer as createHttp2Server,
6
6
  } from 'http2';
7
7
  import { EventEmitter } from 'events';
8
- import { MoroHttpServer, HttpRequest, HttpResponse, middleware } from './http';
9
- import { Router } from './http';
10
- import { Container } from './utilities';
11
- import { ModuleLoader } from './modules';
12
- import { WebSocketManager } from './networking';
13
- import { CircuitBreaker } from './utilities';
14
- import { MoroEventBus } from './events';
15
- import { createFrameworkLogger, logger as globalLogger } from './logger';
16
- import { ModuleConfig, InternalRouteDefinition } from '../types/module';
17
- import { LogLevel, LoggerOptions } from '../types/logger';
18
- import { MoroOptions as CoreMoroOptions } from '../types/core';
19
- import { WebSocketAdapter, WebSocketAdapterOptions } from './networking/websocket-adapter';
8
+ import { MoroHttpServer, HttpRequest, HttpResponse, middleware } from './http/index.js';
9
+ import { UWebSocketsHttpServer } from './http/uws-http-server.js';
10
+ import { Router } from './http/router.js';
11
+ import { Container } from './utilities/container.js';
12
+ import { ModuleLoader } from './modules/index.js';
13
+ import { WebSocketManager } from './networking/websocket-manager.js';
14
+ import { CircuitBreaker } from './utilities/circuit-breaker.js';
15
+ import { isPackageAvailable } from './utilities/package-utils.js';
16
+ import { MoroEventBus } from './events/index.js';
17
+ import { createFrameworkLogger, logger as globalLogger } from './logger/index.js';
18
+ import { ModuleConfig, InternalRouteDefinition } from '../types/module.js';
19
+ import { LogLevel, LoggerOptions } from '../types/logger.js';
20
+ import { MoroOptions as CoreMoroOptions } from '../types/core.js';
21
+ import { WebSocketAdapter, WebSocketAdapterOptions } from './networking/websocket-adapter.js';
20
22
 
21
23
  // Extended MoroOptions that includes both core options and framework-specific options
22
24
  export interface MoroOptions extends CoreMoroOptions {
@@ -39,8 +41,8 @@ export interface MoroOptions extends CoreMoroOptions {
39
41
  }
40
42
 
41
43
  export class Moro extends EventEmitter {
42
- private httpServer: MoroHttpServer;
43
- private server: Server | any; // HTTP/2 server type
44
+ private httpServer: MoroHttpServer | UWebSocketsHttpServer;
45
+ private server: Server | any; // HTTP/2 server type or uWebSockets app
44
46
  private websocketAdapter?: WebSocketAdapter;
45
47
  private container: Container;
46
48
  private moduleLoader: ModuleLoader;
@@ -53,6 +55,9 @@ export class Moro extends EventEmitter {
53
55
  private logger: any;
54
56
  private options: MoroOptions;
55
57
  private config: any;
58
+ private usingUWebSockets = false;
59
+ // WebSocket initialization promise to handle async adapter detection
60
+ private websocketSetupPromise: Promise<void> | null = null;
56
61
 
57
62
  constructor(options: MoroOptions = {}) {
58
63
  super();
@@ -77,10 +82,33 @@ export class Moro extends EventEmitter {
77
82
  // Initialize framework logger after global configuration
78
83
  this.logger = createFrameworkLogger('Core');
79
84
 
80
- this.httpServer = new MoroHttpServer();
85
+ // Check if uWebSockets should be used for HTTP and WebSocket
86
+ const useUWebSockets = this.config.server?.useUWebSockets || false;
87
+
88
+ if (useUWebSockets) {
89
+ try {
90
+ // Try to use uWebSockets for ultra-high performance HTTP and WebSocket
91
+ const sslOptions = this.config.server?.ssl || options.https;
92
+ this.httpServer = new UWebSocketsHttpServer({ ssl: sslOptions });
93
+ this.server = (this.httpServer as UWebSocketsHttpServer).getApp();
94
+ this.usingUWebSockets = true;
95
+ this.logger.info('uWebSockets HTTP+WebSocket server created', 'ServerInit');
96
+ } catch (error) {
97
+ // Fallback to standard HTTP/1.1 if uWebSockets fails to load
98
+ this.logger.warn(
99
+ 'uWebSockets failed to initialize, falling back to Node.js http.Server. ' +
100
+ 'Error: ' +
101
+ (error instanceof Error ? error.message : String(error)),
102
+ 'ServerInit'
103
+ );
104
+ this.usingUWebSockets = false;
105
+ this.httpServer = new MoroHttpServer();
106
+ this.server = (this.httpServer as MoroHttpServer).getServer();
107
+ }
108
+ } else if (options.http2) {
109
+ // Use HTTP/2
110
+ this.httpServer = new MoroHttpServer();
81
111
 
82
- // Create HTTP/2 or HTTP/1.1 server based on options
83
- if (options.http2) {
84
112
  if (options.https) {
85
113
  this.server = createHttp2SecureServer(options.https);
86
114
  } else {
@@ -95,12 +123,14 @@ export class Moro extends EventEmitter {
95
123
  req.url = headers[':path'];
96
124
  req.method = headers[':method'];
97
125
  req.headers = headers;
98
- this.httpServer['handleRequest'](req, res);
126
+ (this.httpServer as MoroHttpServer)['handleRequest'](req, res);
99
127
  });
100
128
 
101
129
  this.logger.info('HTTP/2 server created', 'ServerInit');
102
130
  } else {
103
- this.server = this.httpServer.getServer();
131
+ // Use standard HTTP/1.1
132
+ this.httpServer = new MoroHttpServer();
133
+ this.server = (this.httpServer as MoroHttpServer).getServer();
104
134
  }
105
135
 
106
136
  this.container = new Container();
@@ -111,7 +141,8 @@ export class Moro extends EventEmitter {
111
141
  this.config.websocket.enabled ||
112
142
  (options.websocket && typeof options.websocket === 'object')
113
143
  ) {
114
- this.setupWebSockets(options.websocket || {});
144
+ // Store the promise so we can await it before using websockets
145
+ this.websocketSetupPromise = this.setupWebSockets(options.websocket || {});
115
146
  }
116
147
 
117
148
  // Initialize enterprise event bus
@@ -184,29 +215,47 @@ export class Moro extends EventEmitter {
184
215
  */
185
216
  private async setupWebSockets(wsConfig: any): Promise<void> {
186
217
  try {
187
- // Use provided adapter or try to auto-detect
188
- if (wsConfig.adapter) {
189
- this.websocketAdapter = wsConfig.adapter;
218
+ // If using uWebSockets HTTP server, automatically use uWebSockets for WebSocket too
219
+ if (this.usingUWebSockets) {
220
+ const { UWebSocketsAdapter } = await import('./networking/adapters/index.js');
221
+ this.websocketAdapter = new UWebSocketsAdapter();
222
+
223
+ // For uWebSockets, we need to integrate with the existing app
224
+ const uwsHttpServer = this.httpServer as UWebSocketsHttpServer;
225
+ await this.websocketAdapter.initialize(uwsHttpServer.getApp(), wsConfig.options);
226
+
227
+ this.logger.info(
228
+ 'uWebSockets adapter initialized (integrated with HTTP server)',
229
+ 'WebSocketSetup'
230
+ );
190
231
  } else {
191
- this.websocketAdapter = (await this.detectWebSocketAdapter()) || undefined;
232
+ // Use provided adapter or try to auto-detect
233
+ if (wsConfig.adapter) {
234
+ this.websocketAdapter = wsConfig.adapter;
235
+ } else {
236
+ this.websocketAdapter = (await this.detectWebSocketAdapter()) || undefined;
237
+ }
238
+
239
+ if (this.websocketAdapter) {
240
+ await this.websocketAdapter.initialize(this.server, wsConfig.options);
241
+
242
+ this.logger.info(
243
+ `WebSocket adapter initialized: ${this.websocketAdapter.getAdapterName()}`,
244
+ 'WebSocketSetup'
245
+ );
246
+ }
192
247
  }
193
248
 
249
+ // Configure adapter features (if adapter was created)
194
250
  if (this.websocketAdapter) {
195
- await this.websocketAdapter.initialize(this.server, wsConfig.options);
196
251
  this.websocketManager = new WebSocketManager(this.websocketAdapter, this.container);
197
252
 
198
- // Configure adapter features
199
253
  if (wsConfig.compression) {
200
254
  this.websocketAdapter.setCompression(true);
201
255
  }
202
256
  if (wsConfig.customIdGenerator) {
203
257
  this.websocketAdapter.setCustomIdGenerator(wsConfig.customIdGenerator);
204
258
  }
205
-
206
- this.logger.info(
207
- `WebSocket adapter initialized: ${this.websocketAdapter.getAdapterName()}`,
208
- 'WebSocketSetup'
209
- );
210
259
  }
211
260
  } catch (error) {
212
261
  this.logger.warn(
@@ -219,26 +268,72 @@ export class Moro extends EventEmitter {
219
268
 
220
269
  /**
221
270
  * Auto-detect available WebSocket adapter
271
+ * Tests if the library is actually installed by checking require.resolve
222
272
  */
223
273
  private async detectWebSocketAdapter(): Promise<WebSocketAdapter | null> {
224
- // Try socket.io first
225
- try {
226
- const { SocketIOAdapter } = await import('./networking/adapters');
227
- return new SocketIOAdapter();
228
- } catch {
229
- // socket.io not available
274
+ // Check if adapter is specified in config
275
+ if (this.config.websocket?.adapter) {
276
+ const adapterType = this.config.websocket.adapter;
277
+
278
+ if (adapterType === 'uws' && isPackageAvailable('uWebSockets.js')) {
279
+ try {
280
+ const { UWebSocketsAdapter } = await import('./networking/adapters/index.js');
281
+ return new UWebSocketsAdapter();
282
+ } catch {
283
+ this.logger.warn('uWebSockets.js specified but failed to load', 'AdapterDetection');
284
+ }
285
+ } else if (adapterType === 'socket.io' && isPackageAvailable('socket.io')) {
286
+ try {
287
+ const { SocketIOAdapter } = await import('./networking/adapters/index.js');
288
+ return new SocketIOAdapter();
289
+ } catch {
290
+ this.logger.warn('socket.io specified but failed to load', 'AdapterDetection');
291
+ }
292
+ } else if (adapterType === 'ws' && isPackageAvailable('ws')) {
293
+ try {
294
+ const { WSAdapter } = await import('./networking/adapters/index.js');
295
+ return new WSAdapter();
296
+ } catch {
297
+ this.logger.warn('ws specified but failed to load', 'AdapterDetection');
298
+ }
299
+ }
230
300
  }
231
301
 
232
- // Try native ws library
233
- try {
234
- const { WSAdapter } = await import('./networking/adapters');
235
- return new WSAdapter();
236
- } catch {
237
- // ws not available
302
+ // Auto-detect: Try uWebSockets.js first (highest performance)
303
+ if (isPackageAvailable('uWebSockets.js')) {
304
+ try {
305
+ const { UWebSocketsAdapter } = await import('./networking/adapters/index.js');
306
+ this.logger.debug('uWebSockets.js detected and loaded', 'AdapterDetection');
307
+ return new UWebSocketsAdapter();
308
+ } catch {
309
+ // Failed to load adapter
310
+ }
311
+ }
312
+
313
+ // Try socket.io second
314
+ if (isPackageAvailable('socket.io')) {
315
+ try {
316
+ const { SocketIOAdapter } = await import('./networking/adapters/index.js');
317
+ this.logger.debug('socket.io detected and loaded', 'AdapterDetection');
318
+ return new SocketIOAdapter();
319
+ } catch {
320
+ // Failed to load adapter
321
+ }
322
+ }
323
+
324
+ // Try native ws library last
325
+ if (isPackageAvailable('ws')) {
326
+ try {
327
+ const { WSAdapter } = await import('./networking/adapters/index.js');
328
+ this.logger.debug('ws detected and loaded', 'AdapterDetection');
329
+ return new WSAdapter();
330
+ } catch {
331
+ // Failed to load adapter
332
+ }
238
333
  }
239
334
 
240
335
  this.logger.warn(
241
- 'No WebSocket adapter found. Install socket.io or ws for WebSocket support',
336
+ 'No WebSocket adapter found. Install uWebSockets.js, socket.io, or ws for WebSocket support',
242
337
  'AdapterDetection'
243
338
  );
244
339
  return null;
@@ -317,6 +412,15 @@ export class Moro extends EventEmitter {
317
412
  return this.websocketAdapter;
318
413
  }
319
414
 
415
+ /**
416
+ * Ensure WebSocket setup is complete (for async adapter detection)
417
+ */
418
+ async ensureWebSocketReady(): Promise<void> {
419
+ if (this.websocketSetupPromise) {
420
+ await this.websocketSetupPromise;
421
+ }
422
+ }
423
+
320
424
  /**
321
425
  * Get the WebSocket manager
322
426
  */
@@ -1,9 +1,17 @@
1
1
  // src/core/http-server.ts
2
2
  import { IncomingMessage, ServerResponse, createServer, Server } from 'http';
3
3
  import * as zlib from 'zlib';
4
+ import { createReadStream } from 'fs';
5
+ import * as crypto from 'crypto';
4
6
  import { promisify } from 'util';
5
- import { createFrameworkLogger } from '../logger';
6
- import { HttpRequest, HttpResponse, HttpHandler, Middleware, RouteEntry } from '../../types/http';
7
+ import { createFrameworkLogger } from '../logger/index.js';
8
+ import {
9
+ HttpRequest,
10
+ HttpResponse,
11
+ HttpHandler,
12
+ Middleware,
13
+ RouteEntry,
14
+ } from '../../types/http.js';
7
15
 
8
16
  const gzip = promisify(zlib.gzip);
9
17
  const deflate = promisify(zlib.deflate);
@@ -1133,7 +1141,6 @@ export const middleware = {
1133
1141
  },
1134
1142
 
1135
1143
  compression: (options: { threshold?: number; level?: number } = {}): Middleware => {
1136
- const zlib = require('zlib');
1137
1144
  const threshold = options.threshold || 1024;
1138
1145
  const level = options.level || 6;
1139
1146
 
@@ -1719,7 +1726,7 @@ export const middleware = {
1719
1726
  res.setHeader('Content-Length', chunkSize);
1720
1727
 
1721
1728
  // Stream the range
1722
- const stream = require('fs').createReadStream(filePath, {
1729
+ const stream = createReadStream(filePath, {
1723
1730
  start,
1724
1731
  end,
1725
1732
  });
@@ -1737,12 +1744,12 @@ export const middleware = {
1737
1744
  res.write(`\r\n--${boundary}\r\n`);
1738
1745
  res.write(`Content-Range: bytes ${start}-${end}/${fileSize}\r\n\r\n`);
1739
1746
 
1740
- const stream = require('fs').createReadStream(filePath, {
1747
+ const stream = createReadStream(filePath, {
1741
1748
  start,
1742
1749
  end,
1743
1750
  });
1744
- await new Promise(resolve => {
1745
- stream.on('end', resolve);
1751
+ await new Promise<void>(resolve => {
1752
+ stream.on('end', () => resolve());
1746
1753
  stream.pipe(res, { end: false });
1747
1754
  });
1748
1755
  }
@@ -1776,7 +1783,6 @@ export const middleware = {
1776
1783
  const ignoreMethods = options.ignoreMethods || ['GET', 'HEAD', 'OPTIONS'];
1777
1784
 
1778
1785
  const generateToken = () => {
1779
- const crypto = require('crypto');
1780
1786
  return crypto.randomBytes(tokenLength).toString('hex');
1781
1787
  };
1782
1788
 
@@ -1865,7 +1871,6 @@ export const middleware = {
1865
1871
  // Generate nonce if requested
1866
1872
  let nonce: string | undefined;
1867
1873
  if (options.nonce) {
1868
- const crypto = require('crypto');
1869
1874
  nonce = crypto.randomBytes(16).toString('base64');
1870
1875
  (req as any).cspNonce = nonce;
1871
1876
  }
@@ -1,6 +1,7 @@
1
1
  // HTTP System - Centralized Exports
2
- export { MoroHttpServer, middleware } from './http-server';
3
- export { Router } from './router';
2
+ export { MoroHttpServer, middleware } from './http-server.js';
3
+ export { UWebSocketsHttpServer } from './uws-http-server.js';
4
+ export { Router } from './router.js';
4
5
 
5
6
  // Type exports
6
- export type { HttpRequest, HttpResponse, HttpHandler, Middleware } from '../../types/http';
7
+ export type { HttpRequest, HttpResponse, HttpHandler, Middleware } from '../../types/http.js';
@@ -5,8 +5,8 @@ import {
5
5
  HttpHandler,
6
6
  Middleware,
7
7
  RouteDefinition,
8
- } from '../../types/http';
9
- import { createFrameworkLogger } from '../logger';
8
+ } from '../../types/http.js';
9
+ import { createFrameworkLogger } from '../logger/index.js';
10
10
 
11
11
  export class Router {
12
12
  private routes: RouteDefinition[] = [];