@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
package/src/moro.ts CHANGED
@@ -1,34 +1,40 @@
1
1
  // Moro Framework - Modern TypeScript API Framework
2
2
  // Built for developers who demand performance, elegance, and zero compromises
3
3
  // Event-driven • Modular • Enterprise-ready • Developer-first
4
- import { Moro as MoroCore } from './core/framework';
5
- import { HttpRequest, HttpResponse, middleware } from './core/http';
6
- import { ModuleConfig, InternalRouteDefinition } from './types/module';
7
- import { MoroOptions } from './types/core';
8
- import { ModuleDefaultsConfig } from './types/config';
9
- import { MoroEventBus } from './core/events';
10
- import { createFrameworkLogger, applyLoggingConfiguration } from './core/logger';
11
- import { Logger } from './types/logger';
12
- import { MiddlewareManager } from './core/middleware';
13
- import { IntelligentRoutingManager } from './core/routing/app-integration';
14
- import { RouteBuilder, RouteSchema, CompiledRoute } from './core/routing';
15
- import { AppDocumentationManager, DocsConfig } from './core/docs';
4
+ import { Moro as MoroCore } from './core/framework.js';
5
+ import { HttpRequest, HttpResponse, middleware } from './core/http/index.js';
6
+ import { ModuleConfig, InternalRouteDefinition } from './types/module.js';
7
+ import { MoroOptions } from './types/core.js';
8
+ import { ModuleDefaultsConfig } from './types/config.js';
9
+ import { MoroEventBus } from './core/events/index.js';
10
+ import { createFrameworkLogger, applyLoggingConfiguration } from './core/logger/index.js';
11
+ import { Logger } from './types/logger.js';
12
+ import { MiddlewareManager } from './core/middleware/index.js';
13
+ import { IntelligentRoutingManager } from './core/routing/app-integration.js';
14
+ import { RouteBuilder, RouteSchema, CompiledRoute } from './core/routing/index.js';
15
+ import { AppDocumentationManager, DocsConfig } from './core/docs/index.js';
16
16
  import { EventEmitter } from 'events';
17
+ import cluster from 'cluster';
18
+ import os from 'os';
19
+ import { normalizeValidationError } from './core/validation/schema-interface.js';
17
20
  // Configuration System Integration
18
- import { initializeConfig, type AppConfig } from './core/config';
21
+ import { initializeConfig, type AppConfig } from './core/config/index.js';
19
22
  // Runtime System Integration
20
- import { RuntimeAdapter, RuntimeType, createRuntimeAdapter } from './core/runtime';
23
+ import { RuntimeAdapter, RuntimeType, createRuntimeAdapter } from './core/runtime/index.js';
21
24
 
22
25
  export class Moro extends EventEmitter {
23
- private coreFramework: MoroCore;
26
+ private coreFramework!: MoroCore;
24
27
  private routes: InternalRouteDefinition[] = [];
25
28
  private moduleCounter = 0;
26
29
  private loadedModules = new Set<string>();
27
30
  private lazyModules = new Map<string, ModuleConfig>();
28
31
  private routeHandlers: Record<string, Function> = {};
29
32
  private moduleDiscovery?: any; // Store for cleanup
33
+ private autoDiscoveryOptions: MoroOptions | null = null;
34
+ private autoDiscoveryInitialized = false;
35
+ private autoDiscoveryPromise: Promise<void> | null = null;
30
36
  // Enterprise event system integration
31
- private eventBus: MoroEventBus;
37
+ private eventBus!: MoroEventBus;
32
38
  // Application logger
33
39
  private logger!: Logger;
34
40
  // Intelligent routing system
@@ -36,12 +42,18 @@ export class Moro extends EventEmitter {
36
42
  // Documentation system
37
43
  private documentation = new AppDocumentationManager();
38
44
  // Configuration system
39
- private config: AppConfig;
45
+ private config!: AppConfig;
40
46
  // Runtime system
41
- private runtimeAdapter: RuntimeAdapter;
42
- private runtimeType: RuntimeType;
47
+ private runtimeAdapter!: RuntimeAdapter;
48
+ private runtimeType!: RuntimeType;
43
49
  // Middleware system
44
- private middlewareManager: MiddlewareManager;
50
+ private middlewareManager!: MiddlewareManager;
51
+ // Queued WebSocket registrations (for async adapter detection)
52
+ private queuedWebSocketRegistrations: Array<{
53
+ namespace: string;
54
+ handlers: Record<string, Function>;
55
+ processed: boolean;
56
+ }> = [];
45
57
 
46
58
  constructor(options: MoroOptions = {}) {
47
59
  super(); // Call EventEmitter constructor
@@ -85,7 +97,11 @@ export class Moro extends EventEmitter {
85
97
  const frameworkOptions: any = {
86
98
  ...options,
87
99
  logger: this.config.logging,
88
- websocket: this.config.websocket.enabled ? options.websocket || {} : false,
100
+ // Enable websockets if either config has it enabled OR user passed websocket options
101
+ websocket:
102
+ this.config.websocket.enabled || options.websocket
103
+ ? options.websocket || this.config.websocket || {}
104
+ : false,
89
105
  config: this.config,
90
106
  };
91
107
 
@@ -118,15 +134,10 @@ export class Moro extends EventEmitter {
118
134
  ...options,
119
135
  });
120
136
 
121
- // Auto-discover modules if enabled
122
- if (options.autoDiscover !== false) {
123
- // Initialize auto-discovery asynchronously
124
- this.initializeAutoDiscovery(options).catch(error => {
125
- this.logger.error('Auto-discovery initialization failed', 'Framework', {
126
- error: error instanceof Error ? error.message : String(error),
127
- });
128
- });
129
- }
137
+ // Store auto-discovery options for later initialization
138
+ // IMPORTANT: Auto-discovery is deferred to ensure user middleware (like auth)
139
+ // is registered before module middleware that might bypass it
140
+ this.autoDiscoveryOptions = options.autoDiscover !== false ? options : null;
130
141
 
131
142
  // Emit initialization event through enterprise event bus
132
143
  this.eventBus.emit('framework:initialized', {
@@ -355,6 +366,13 @@ export class Moro extends EventEmitter {
355
366
  version: moduleOrPath.version || '1.0.0',
356
367
  });
357
368
  }
369
+
370
+ // IMPORTANT: If modules are loaded manually after auto-discovery,
371
+ // ensure the final module handler is set up to maintain middleware order
372
+ if (this.autoDiscoveryInitialized) {
373
+ this.coreFramework.setupFinalModuleHandler();
374
+ }
375
+
358
376
  return this;
359
377
  }
360
378
 
@@ -370,34 +388,45 @@ export class Moro extends EventEmitter {
370
388
 
371
389
  // WebSocket helper with events
372
390
  websocket(namespace: string, handlers: Record<string, Function>) {
391
+ // Queue the registration to be processed after adapter initialization
392
+ const registration = { namespace, handlers, processed: false };
393
+ this.queuedWebSocketRegistrations.push(registration);
394
+
395
+ // Try to process immediately if adapter is already ready
373
396
  const adapter = this.coreFramework.getWebSocketAdapter();
374
- if (!adapter) {
375
- throw new Error(
376
- 'WebSocket features require a WebSocket adapter. Install socket.io or configure an adapter:\n' +
377
- 'npm install socket.io\n' +
378
- 'or\n' +
379
- 'new Moro({ websocket: { adapter: new SocketIOAdapter() } })'
380
- );
397
+ if (adapter && !registration.processed) {
398
+ // Adapter is ready, process immediately
399
+ this.processWebSocketRegistration(namespace, handlers, adapter);
400
+ registration.processed = true;
381
401
  }
402
+ // Otherwise, it will be processed when the server starts
382
403
 
404
+ return this;
405
+ }
406
+
407
+ private processWebSocketRegistration(
408
+ namespace: string,
409
+ handlers: Record<string, Function>,
410
+ adapter: any
411
+ ) {
383
412
  this.emit('websocket:registering', { namespace, handlers });
384
413
 
385
414
  const ns = adapter.createNamespace(namespace);
386
415
 
387
416
  Object.entries(handlers).forEach(([event, handler]) => {
388
- ns.on('connection', socket => {
417
+ ns.on('connection', (socket: any) => {
389
418
  this.emit('websocket:connection', { namespace, event, socket });
390
419
 
391
- socket.on(event, (data, callback) => {
420
+ socket.on(event, (data: any, callback: any) => {
392
421
  this.emit('websocket:event', { namespace, event, data });
393
422
 
394
423
  Promise.resolve(handler(socket, data))
395
- .then(result => {
424
+ .then((result: any) => {
396
425
  this.emit('websocket:response', { namespace, event, result });
397
426
  if (callback) callback(result);
398
427
  else if (result) socket.emit(`${event}:response`, result);
399
428
  })
400
- .catch(error => {
429
+ .catch((error: any) => {
401
430
  this.emit('websocket:error', { namespace, event, error });
402
431
  const errorResponse = { success: false, error: error.message };
403
432
  if (callback) callback(errorResponse);
@@ -408,7 +437,40 @@ export class Moro extends EventEmitter {
408
437
  });
409
438
 
410
439
  this.emit('websocket:registered', { namespace, handlers });
411
- return this;
440
+ }
441
+
442
+ private async processQueuedWebSocketRegistrations() {
443
+ // Wait for WebSocket adapter to be ready
444
+ await this.coreFramework.ensureWebSocketReady();
445
+
446
+ const adapter = this.coreFramework.getWebSocketAdapter();
447
+
448
+ // Check if any unprocessed registrations exist
449
+ const unprocessedRegistrations = this.queuedWebSocketRegistrations.filter(r => !r.processed);
450
+
451
+ if (!adapter && unprocessedRegistrations.length > 0) {
452
+ throw new Error(
453
+ 'WebSocket features require a WebSocket adapter.\n\n' +
454
+ 'Option 1: Install socket.io (auto-detected):\n' +
455
+ ' npm install socket.io\n' +
456
+ ' const app = new Moro({ websocket: {} });\n\n' +
457
+ 'Option 2: Configure a specific adapter:\n' +
458
+ " import { SocketIOAdapter } from '@morojs/moro';\n" +
459
+ ' const app = new Moro({ websocket: { adapter: new SocketIOAdapter() } });\n\n' +
460
+ 'Option 3: Enable in config file (moro.config.js):\n' +
461
+ ' export default { websocket: { enabled: true } };'
462
+ );
463
+ }
464
+
465
+ if (adapter) {
466
+ // Process all unprocessed registrations
467
+ for (const registration of this.queuedWebSocketRegistrations) {
468
+ if (!registration.processed) {
469
+ this.processWebSocketRegistration(registration.namespace, registration.handlers, adapter);
470
+ registration.processed = true;
471
+ }
472
+ }
473
+ }
412
474
  }
413
475
 
414
476
  // Start server with events (Node.js only)
@@ -464,9 +526,21 @@ export class Moro extends EventEmitter {
464
526
  }
465
527
 
466
528
  // Check if clustering is enabled for massive performance gains
529
+ // NOTE: uWebSockets.js does NOT support Node.js clustering - it's single-threaded only
530
+ const usingUWebSockets = this.config.server?.useUWebSockets || false;
531
+
467
532
  if (this.config.performance?.clustering?.enabled) {
468
- this.startWithClustering(port, host as string, callback);
469
- return;
533
+ if (usingUWebSockets) {
534
+ this.logger.warn(
535
+ 'Clustering is not supported with uWebSockets.js - running in single-threaded mode. ' +
536
+ 'uWebSockets is so fast that single-threaded performance often exceeds multi-threaded Node.js!',
537
+ 'Cluster'
538
+ );
539
+ // Continue without clustering
540
+ } else {
541
+ this.startWithClustering(port, host as string, callback);
542
+ return;
543
+ }
470
544
  }
471
545
  this.eventBus.emit('server:starting', { port, runtime: this.runtimeType });
472
546
 
@@ -496,35 +570,169 @@ export class Moro extends EventEmitter {
496
570
  this.registerDirectRoutes();
497
571
  }
498
572
 
499
- const actualCallback = () => {
500
- const displayHost = host || 'localhost';
501
- this.logger.info('Moro Server Started', 'Server');
502
- this.logger.info(`Runtime: ${this.runtimeType}`, 'Server');
503
- this.logger.info(`HTTP API: http://${displayHost}:${port}`, 'Server');
504
- if (this.config.websocket.enabled) {
505
- this.logger.info(`WebSocket: ws://${displayHost}:${port}`, 'Server');
506
- }
507
- this.logger.info('Learn more at https://morojs.com', 'Server');
573
+ const startServer = () => {
574
+ const actualCallback = () => {
575
+ const displayHost = host || 'localhost';
576
+ this.logger.info('Moro Server Started', 'Server');
577
+ this.logger.info(`Runtime: ${this.runtimeType}`, 'Server');
578
+ this.logger.info(`HTTP API: http://${displayHost}:${port}`, 'Server');
579
+ if (this.config.websocket.enabled) {
580
+ this.logger.info(`WebSocket: ws://${displayHost}:${port}`, 'Server');
581
+ }
582
+ this.logger.info('Learn more at https://morojs.com', 'Server');
583
+
584
+ // Log intelligent routes info
585
+ const intelligentRoutes = this.intelligentRouting.getIntelligentRoutes();
586
+ if (intelligentRoutes.length > 0) {
587
+ this.logger.info(`Intelligent Routes: ${intelligentRoutes.length} registered`, 'Server');
588
+ }
589
+
590
+ this.eventBus.emit('server:started', { port, runtime: this.runtimeType });
591
+ if (callback) callback();
592
+ };
508
593
 
509
- // Log intelligent routes info
510
- const intelligentRoutes = this.intelligentRouting.getIntelligentRoutes();
511
- if (intelligentRoutes.length > 0) {
512
- this.logger.info(`Intelligent Routes: ${intelligentRoutes.length} registered`, 'Server');
594
+ if (host && typeof host === 'string') {
595
+ this.coreFramework.listen(port, host, actualCallback);
596
+ } else {
597
+ this.coreFramework.listen(port, actualCallback);
513
598
  }
599
+ };
514
600
 
515
- this.eventBus.emit('server:started', { port, runtime: this.runtimeType });
516
- if (callback) callback();
601
+ // Ensure auto-discovery and WebSocket setup is complete before starting server
602
+ Promise.all([this.ensureAutoDiscoveryComplete(), this.processQueuedWebSocketRegistrations()])
603
+ .then(() => {
604
+ startServer();
605
+ })
606
+ .catch(error => {
607
+ this.logger.error('Initialization failed during server start', 'Framework', {
608
+ error: error instanceof Error ? error.message : String(error),
609
+ });
610
+ // For auto-discovery failures, start server anyway
611
+ // For WebSocket failures with queued registrations, error will propagate
612
+ if (
613
+ error instanceof Error &&
614
+ error.message.includes('WebSocket features require a WebSocket adapter')
615
+ ) {
616
+ throw error;
617
+ }
618
+ startServer();
619
+ });
620
+ }
621
+
622
+ // Public method to manually initialize auto-discovery
623
+ // Useful for ensuring auth middleware is registered before auto-discovery
624
+ async initializeAutoDiscoveryNow(): Promise<void> {
625
+ return this.ensureAutoDiscoveryComplete();
626
+ }
627
+
628
+ // Public API: Initialize modules explicitly after middleware setup
629
+ // This provides users with explicit control over module loading timing
630
+ // IMPORTANT: This forces module loading even if autoDiscovery.enabled is false
631
+ // Usage: app.initModules() or app.initModules({ paths: ['./my-modules'] })
632
+ initModules(options?: {
633
+ paths?: string[];
634
+ patterns?: string[];
635
+ recursive?: boolean;
636
+ loadingStrategy?: 'eager' | 'lazy' | 'conditional';
637
+ watchForChanges?: boolean;
638
+ ignorePatterns?: string[];
639
+ loadOrder?: 'alphabetical' | 'dependency' | 'custom';
640
+ failOnError?: boolean;
641
+ maxDepth?: number;
642
+ }): void {
643
+ this.logger.info('User-requested module initialization', 'ModuleSystem');
644
+
645
+ // If already initialized, do nothing
646
+ if (this.autoDiscoveryInitialized) {
647
+ this.logger.debug('Auto-discovery already completed, skipping', 'ModuleSystem');
648
+ return;
649
+ }
650
+
651
+ // Store the options and mark that we want to force initialization
652
+ this.autoDiscoveryOptions = {
653
+ autoDiscover: {
654
+ enabled: true, // Force enabled regardless of original config
655
+ paths: options?.paths || ['./modules', './src/modules'],
656
+ patterns: options?.patterns || [
657
+ '**/*.module.{ts,js}',
658
+ '**/index.{ts,js}',
659
+ '**/*.config.{ts,js}',
660
+ ],
661
+ recursive: options?.recursive ?? true,
662
+ loadingStrategy: options?.loadingStrategy || ('eager' as const),
663
+ watchForChanges: options?.watchForChanges ?? false,
664
+ ignorePatterns: options?.ignorePatterns || [
665
+ '**/*.test.{ts,js}',
666
+ '**/*.spec.{ts,js}',
667
+ '**/node_modules/**',
668
+ ],
669
+ loadOrder: options?.loadOrder || ('dependency' as const),
670
+ failOnError: options?.failOnError ?? false,
671
+ maxDepth: options?.maxDepth ?? 5,
672
+ },
517
673
  };
518
674
 
519
- if (host && typeof host === 'string') {
520
- this.coreFramework.listen(port, host, actualCallback);
521
- } else {
522
- this.coreFramework.listen(port, actualCallback);
675
+ this.logger.debug(
676
+ 'Module initialization options stored, will execute on next listen/getHandler call',
677
+ 'ModuleSystem'
678
+ );
679
+ }
680
+
681
+ // Robust method to ensure auto-discovery is complete, handling race conditions
682
+ private async ensureAutoDiscoveryComplete(): Promise<void> {
683
+ // If already initialized, nothing to do
684
+ if (this.autoDiscoveryInitialized) {
685
+ return;
686
+ }
687
+
688
+ // If auto-discovery is disabled, mark as initialized
689
+ if (!this.autoDiscoveryOptions) {
690
+ this.autoDiscoveryInitialized = true;
691
+ return;
692
+ }
693
+
694
+ // If already in progress, wait for it to complete
695
+ if (this.autoDiscoveryPromise) {
696
+ return this.autoDiscoveryPromise;
697
+ }
698
+
699
+ // Start auto-discovery
700
+ this.autoDiscoveryPromise = this.performAutoDiscovery();
701
+
702
+ try {
703
+ await this.autoDiscoveryPromise;
704
+ this.autoDiscoveryInitialized = true;
705
+ } catch (error) {
706
+ // Reset promise on error so it can be retried
707
+ this.autoDiscoveryPromise = null;
708
+ throw error;
709
+ } finally {
710
+ this.autoDiscoveryOptions = null; // Clear after attempt
523
711
  }
524
712
  }
525
713
 
714
+ // Perform the actual auto-discovery work
715
+ private async performAutoDiscovery(optionsOverride?: MoroOptions): Promise<void> {
716
+ const optionsToUse = optionsOverride || this.autoDiscoveryOptions;
717
+ if (!optionsToUse) return;
718
+
719
+ this.logger.debug('Starting auto-discovery initialization', 'AutoDiscovery');
720
+
721
+ await this.initializeAutoDiscovery(optionsToUse);
722
+
723
+ this.logger.debug('Auto-discovery initialization completed', 'AutoDiscovery');
724
+ }
725
+
526
726
  // Get handler for non-Node.js runtimes
527
727
  getHandler() {
728
+ // Ensure auto-discovery is complete for non-Node.js runtimes
729
+ // This handles the case where users call getHandler() immediately after createApp()
730
+ this.ensureAutoDiscoveryComplete().catch(error => {
731
+ this.logger.error('Auto-discovery initialization failed for runtime handler', 'Framework', {
732
+ error: error instanceof Error ? error.message : String(error),
733
+ });
734
+ });
735
+
528
736
  // Create a unified request handler that works with the runtime adapter
529
737
  const handler = async (req: HttpRequest, res: HttpResponse) => {
530
738
  // Add documentation middleware first (if enabled)
@@ -769,7 +977,6 @@ export class Moro extends EventEmitter {
769
977
  req.body = validated;
770
978
  } catch (error: any) {
771
979
  // Handle universal validation errors
772
- const { normalizeValidationError } = require('./core/validation/schema-interface');
773
980
  const normalizedError = normalizeValidationError(error);
774
981
  res.status(400).json({
775
982
  success: false,
@@ -884,7 +1091,7 @@ export class Moro extends EventEmitter {
884
1091
 
885
1092
  // Enhanced auto-discovery initialization
886
1093
  private async initializeAutoDiscovery(options: MoroOptions): Promise<void> {
887
- const { ModuleDiscovery } = await import('./core/modules/auto-discovery');
1094
+ const { ModuleDiscovery } = await import('./core/modules/auto-discovery.js');
888
1095
 
889
1096
  // Merge auto-discovery configuration
890
1097
  const autoDiscoveryConfig = this.mergeAutoDiscoveryConfig(options);
@@ -902,6 +1109,9 @@ export class Moro extends EventEmitter {
902
1109
  // Load modules based on strategy
903
1110
  await this.loadDiscoveredModules(modules, autoDiscoveryConfig);
904
1111
 
1112
+ // Setup final module handler to run after user middleware (like auth)
1113
+ this.coreFramework.setupFinalModuleHandler();
1114
+
905
1115
  // Setup file watching if enabled
906
1116
  if (autoDiscoveryConfig.watchForChanges) {
907
1117
  this.moduleDiscovery.watchModulesAdvanced(
@@ -1116,9 +1326,6 @@ export class Moro extends EventEmitter {
1116
1326
  private clusterWorkers = new Map<number, any>();
1117
1327
 
1118
1328
  private startWithClustering(port: number, host?: string, callback?: () => void): void {
1119
- const cluster = require('cluster');
1120
- const os = require('os');
1121
-
1122
1329
  // Worker count calculation - respect user choice
1123
1330
  let workerCount = this.config.performance?.clustering?.workers || os.cpus().length;
1124
1331
 
@@ -1239,9 +1446,8 @@ export class Moro extends EventEmitter {
1239
1446
  }
1240
1447
 
1241
1448
  // Research-based memory optimization for workers
1242
- const os = require('os');
1243
1449
  const totalMemoryGB = os.totalmem() / (1024 * 1024 * 1024);
1244
- const workerCount = Object.keys(require('cluster').workers || {}).length || 1;
1450
+ const workerCount = Object.keys(cluster.workers || {}).length || 1;
1245
1451
 
1246
1452
  // Conservative memory allocation
1247
1453
  const heapSizePerWorkerMB = Math.min(
@@ -1342,11 +1548,33 @@ export class Moro extends EventEmitter {
1342
1548
  });
1343
1549
  };
1344
1550
 
1345
- if (host) {
1346
- this.coreFramework.listen(port, host, workerCallback);
1347
- } else {
1348
- this.coreFramework.listen(port, workerCallback);
1349
- }
1551
+ // Ensure WebSocket setup is complete before starting worker
1552
+ this.processQueuedWebSocketRegistrations()
1553
+ .then(() => {
1554
+ if (host) {
1555
+ this.coreFramework.listen(port, host, workerCallback);
1556
+ } else {
1557
+ this.coreFramework.listen(port, workerCallback);
1558
+ }
1559
+ })
1560
+ .catch(error => {
1561
+ this.logger.error('WebSocket initialization failed in worker', 'Worker', {
1562
+ error: error instanceof Error ? error.message : String(error),
1563
+ });
1564
+ // For WebSocket failures with queued registrations, error will propagate
1565
+ if (
1566
+ error instanceof Error &&
1567
+ error.message.includes('WebSocket features require a WebSocket adapter')
1568
+ ) {
1569
+ throw error;
1570
+ }
1571
+ // Start anyway for other errors
1572
+ if (host) {
1573
+ this.coreFramework.listen(port, host, workerCallback);
1574
+ } else {
1575
+ this.coreFramework.listen(port, workerCallback);
1576
+ }
1577
+ });
1350
1578
  }
1351
1579
  }
1352
1580
 
@@ -12,6 +12,12 @@ export interface ServerConfig {
12
12
  errorBoundary: {
13
13
  enabled: boolean;
14
14
  };
15
+ useUWebSockets?: boolean; // Enable uWebSockets for both HTTP and WebSocket
16
+ ssl?: {
17
+ key_file_name?: string;
18
+ cert_file_name?: string;
19
+ passphrase?: string;
20
+ };
15
21
  }
16
22
 
17
23
  export interface ServiceDiscoveryConfig {
@@ -187,7 +193,7 @@ export interface PerformanceConfig {
187
193
 
188
194
  export interface WebSocketConfig {
189
195
  enabled: boolean;
190
- adapter?: string | 'socket.io' | 'ws';
196
+ adapter?: string | 'socket.io' | 'ws' | 'uws';
191
197
  compression?: boolean;
192
198
  customIdGenerator?: () => string;
193
199
  options?: {
@@ -197,6 +203,12 @@ export interface WebSocketConfig {
197
203
  };
198
204
  path?: string;
199
205
  maxPayloadLength?: number;
206
+ idleTimeout?: number;
207
+ ssl?: {
208
+ key_file_name?: string;
209
+ cert_file_name?: string;
210
+ passphrase?: string;
211
+ };
200
212
  };
201
213
  }
202
214
 
package/src/types/core.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  // Core Framework Types
2
- import { RuntimeConfig } from './runtime';
3
- import { LogLevel, LoggerOptions } from './logger';
4
- import { AppConfig } from './config';
2
+ import { RuntimeConfig } from './runtime.js';
3
+ import { LogLevel, LoggerOptions } from './logger.js';
4
+ import { AppConfig } from './config.js';
5
5
 
6
6
  export interface MoroOptions {
7
7
  autoDiscover?:
@@ -1,5 +1,5 @@
1
1
  // Hooks and Middleware Types
2
- import { HttpRequest, HttpResponse } from './http';
2
+ import { HttpRequest, HttpResponse } from '../core/http/index.js';
3
3
 
4
4
  export type HookFunction = (...args: any[]) => Promise<any> | any;
5
5
 
@@ -1,5 +1,5 @@
1
1
  // Runtime abstraction types for multi-environment support
2
- import { HttpRequest, HttpResponse } from './http';
2
+ import { HttpRequest, HttpResponse } from '../core/http/index.js';
3
3
 
4
4
  export type RuntimeType = 'node' | 'vercel-edge' | 'aws-lambda' | 'cloudflare-workers';
5
5
 
package/tsconfig.json CHANGED
@@ -2,7 +2,8 @@
2
2
  {
3
3
  "compilerOptions": {
4
4
  "target": "ES2022",
5
- "module": "commonjs",
5
+ "module": "NodeNext",
6
+ "moduleResolution": "NodeNext",
6
7
  "lib": ["ES2022"],
7
8
  "outDir": "./dist",
8
9
  "rootDir": "./src",
@@ -14,7 +15,8 @@
14
15
  "emitDecoratorMetadata": true,
15
16
  "resolveJsonModule": true,
16
17
  "declaration": true,
17
- "sourceMap": true
18
+ "sourceMap": true,
19
+ "isolatedModules": true
18
20
  },
19
21
  "include": ["src/**/*"],
20
22
  "exclude": ["node_modules", "dist"]