@morojs/moro 1.6.0 → 1.6.1

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 (388) hide show
  1. package/README.md +256 -74
  2. package/dist/core/auth/morojs-adapter.js +20 -20
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/file-loader.d.ts +6 -1
  5. package/dist/core/config/file-loader.js +249 -19
  6. package/dist/core/config/file-loader.js.map +1 -1
  7. package/dist/core/config/index.d.ts +12 -41
  8. package/dist/core/config/index.js +54 -65
  9. package/dist/core/config/index.js.map +1 -1
  10. package/dist/core/config/loader.d.ts +7 -0
  11. package/dist/core/config/loader.js +269 -0
  12. package/dist/core/config/loader.js.map +1 -0
  13. package/dist/core/config/schema.d.ts +2 -2
  14. package/dist/core/config/schema.js +44 -52
  15. package/dist/core/config/schema.js.map +1 -1
  16. package/dist/core/config/utils.d.ts +3 -10
  17. package/dist/core/config/utils.js +58 -31
  18. package/dist/core/config/utils.js.map +1 -1
  19. package/dist/core/config/validation.d.ts +17 -0
  20. package/dist/core/config/validation.js +131 -0
  21. package/dist/core/config/validation.js.map +1 -0
  22. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  23. package/dist/core/database/adapters/drizzle.js +11 -18
  24. package/dist/core/database/adapters/drizzle.js.map +1 -1
  25. package/dist/core/database/adapters/index.d.ts +7 -7
  26. package/dist/core/database/adapters/index.js +29 -19
  27. package/dist/core/database/adapters/index.js.map +1 -1
  28. package/dist/core/database/adapters/mongodb.d.ts +1 -13
  29. package/dist/core/database/adapters/mongodb.js +10 -46
  30. package/dist/core/database/adapters/mongodb.js.map +1 -1
  31. package/dist/core/database/adapters/mysql.d.ts +1 -14
  32. package/dist/core/database/adapters/mysql.js +9 -19
  33. package/dist/core/database/adapters/mysql.js.map +1 -1
  34. package/dist/core/database/adapters/postgresql.d.ts +2 -12
  35. package/dist/core/database/adapters/postgresql.js +9 -19
  36. package/dist/core/database/adapters/postgresql.js.map +1 -1
  37. package/dist/core/database/adapters/redis.d.ts +1 -12
  38. package/dist/core/database/adapters/redis.js +13 -48
  39. package/dist/core/database/adapters/redis.js.map +1 -1
  40. package/dist/core/database/adapters/sqlite.d.ts +1 -3
  41. package/dist/core/database/adapters/sqlite.js +8 -19
  42. package/dist/core/database/adapters/sqlite.js.map +1 -1
  43. package/dist/core/database/index.d.ts +2 -2
  44. package/dist/core/database/index.js +18 -2
  45. package/dist/core/database/index.js.map +1 -1
  46. package/dist/core/docs/index.d.ts +9 -9
  47. package/dist/core/docs/index.js +35 -14
  48. package/dist/core/docs/index.js.map +1 -1
  49. package/dist/core/docs/openapi-generator.d.ts +2 -2
  50. package/dist/core/docs/openapi-generator.js +16 -11
  51. package/dist/core/docs/openapi-generator.js.map +1 -1
  52. package/dist/core/docs/schema-to-openapi.d.ts +2 -2
  53. package/dist/core/docs/schema-to-openapi.js +11 -5
  54. package/dist/core/docs/schema-to-openapi.js.map +1 -1
  55. package/dist/core/docs/simple-docs.d.ts +1 -1
  56. package/dist/core/docs/simple-docs.js +9 -4
  57. package/dist/core/docs/simple-docs.js.map +1 -1
  58. package/dist/core/docs/swagger-ui.d.ts +2 -2
  59. package/dist/core/docs/swagger-ui.js +29 -26
  60. package/dist/core/docs/swagger-ui.js.map +1 -1
  61. package/dist/core/docs/zod-to-openapi.js +28 -31
  62. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  63. package/dist/core/events/event-bus.d.ts +1 -1
  64. package/dist/core/events/event-bus.js +10 -6
  65. package/dist/core/events/event-bus.js.map +1 -1
  66. package/dist/core/events/index.d.ts +2 -2
  67. package/dist/core/events/index.js +5 -1
  68. package/dist/core/events/index.js.map +1 -1
  69. package/dist/core/framework.d.ts +12 -19
  70. package/dist/core/framework.js +100 -277
  71. package/dist/core/framework.js.map +1 -1
  72. package/dist/core/http/http-server.d.ts +1 -13
  73. package/dist/core/http/http-server.js +85 -175
  74. package/dist/core/http/http-server.js.map +1 -1
  75. package/dist/core/http/index.d.ts +3 -4
  76. package/dist/core/http/index.js +8 -3
  77. package/dist/core/http/index.js.map +1 -1
  78. package/dist/core/http/router.d.ts +1 -13
  79. package/dist/core/http/router.js +43 -117
  80. package/dist/core/http/router.js.map +1 -1
  81. package/dist/core/logger/filters.d.ts +1 -1
  82. package/dist/core/logger/filters.js +23 -20
  83. package/dist/core/logger/filters.js.map +1 -1
  84. package/dist/core/logger/index.d.ts +3 -3
  85. package/dist/core/logger/index.js +24 -2
  86. package/dist/core/logger/index.js.map +1 -1
  87. package/dist/core/logger/logger.d.ts +14 -30
  88. package/dist/core/logger/logger.js +223 -398
  89. package/dist/core/logger/logger.js.map +1 -1
  90. package/dist/core/logger/outputs.d.ts +1 -1
  91. package/dist/core/logger/outputs.js +17 -8
  92. package/dist/core/logger/outputs.js.map +1 -1
  93. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  94. package/dist/core/middleware/built-in/adapters/cache/file.js +47 -10
  95. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  96. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  97. package/dist/core/middleware/built-in/adapters/cache/index.js +17 -10
  98. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  99. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  100. package/dist/core/middleware/built-in/adapters/cache/memory.js +7 -3
  101. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  102. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +1 -3
  103. package/dist/core/middleware/built-in/adapters/cache/redis.js +9 -11
  104. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  105. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  106. package/dist/core/middleware/built-in/adapters/cdn/azure.js +7 -3
  107. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  108. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  109. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +7 -3
  110. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  111. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +1 -3
  112. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +10 -12
  113. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  114. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  115. package/dist/core/middleware/built-in/adapters/cdn/index.js +17 -10
  116. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
  117. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  118. package/dist/core/middleware/built-in/adapters/index.js +23 -4
  119. package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
  120. package/dist/core/middleware/built-in/auth-helpers.js +22 -11
  121. package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
  122. package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
  123. package/dist/core/middleware/built-in/auth-providers.js +9 -4
  124. package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
  125. package/dist/core/middleware/built-in/auth.d.ts +2 -2
  126. package/dist/core/middleware/built-in/auth.js +26 -93
  127. package/dist/core/middleware/built-in/auth.js.map +1 -1
  128. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  129. package/dist/core/middleware/built-in/cache.js +12 -11
  130. package/dist/core/middleware/built-in/cache.js.map +1 -1
  131. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  132. package/dist/core/middleware/built-in/cdn.js +9 -5
  133. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  134. package/dist/core/middleware/built-in/cookie.d.ts +1 -1
  135. package/dist/core/middleware/built-in/cookie.js +7 -3
  136. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  137. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  138. package/dist/core/middleware/built-in/cors.js +7 -3
  139. package/dist/core/middleware/built-in/cors.js.map +1 -1
  140. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  141. package/dist/core/middleware/built-in/csp.js +8 -5
  142. package/dist/core/middleware/built-in/csp.js.map +1 -1
  143. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  144. package/dist/core/middleware/built-in/csrf.js +8 -5
  145. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  146. package/dist/core/middleware/built-in/error-tracker.js +7 -3
  147. package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
  148. package/dist/core/middleware/built-in/index.d.ts +27 -28
  149. package/dist/core/middleware/built-in/index.js +78 -48
  150. package/dist/core/middleware/built-in/index.js.map +1 -1
  151. package/dist/core/middleware/built-in/performance-monitor.js +7 -3
  152. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
  153. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  154. package/dist/core/middleware/built-in/rate-limit.js +7 -3
  155. package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
  156. package/dist/core/middleware/built-in/request-logger.js +8 -5
  157. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  158. package/dist/core/middleware/built-in/session.d.ts +2 -2
  159. package/dist/core/middleware/built-in/session.js +15 -11
  160. package/dist/core/middleware/built-in/session.js.map +1 -1
  161. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  162. package/dist/core/middleware/built-in/sse.js +14 -12
  163. package/dist/core/middleware/built-in/sse.js.map +1 -1
  164. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  165. package/dist/core/middleware/built-in/validation.js +7 -3
  166. package/dist/core/middleware/built-in/validation.js.map +1 -1
  167. package/dist/core/middleware/index.d.ts +4 -4
  168. package/dist/core/middleware/index.js +28 -8
  169. package/dist/core/middleware/index.js.map +1 -1
  170. package/dist/core/modules/auto-discovery.d.ts +2 -19
  171. package/dist/core/modules/auto-discovery.js +74 -391
  172. package/dist/core/modules/auto-discovery.js.map +1 -1
  173. package/dist/core/modules/index.d.ts +2 -2
  174. package/dist/core/modules/index.js +9 -2
  175. package/dist/core/modules/index.js.map +1 -1
  176. package/dist/core/modules/modules.d.ts +3 -3
  177. package/dist/core/modules/modules.js +54 -23
  178. package/dist/core/modules/modules.js.map +1 -1
  179. package/dist/core/networking/adapters/index.d.ts +3 -4
  180. package/dist/core/networking/adapters/index.js +7 -3
  181. package/dist/core/networking/adapters/index.js.map +1 -1
  182. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
  183. package/dist/core/networking/adapters/socketio-adapter.js +40 -5
  184. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  185. package/dist/core/networking/adapters/ws-adapter.d.ts +2 -2
  186. package/dist/core/networking/adapters/ws-adapter.js +43 -8
  187. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  188. package/dist/core/networking/index.d.ts +2 -3
  189. package/dist/core/networking/index.js +7 -2
  190. package/dist/core/networking/index.js.map +1 -1
  191. package/dist/core/networking/service-discovery.js +12 -8
  192. package/dist/core/networking/service-discovery.js.map +1 -1
  193. package/dist/core/networking/websocket-adapter.js +2 -1
  194. package/dist/core/networking/websocket-adapter.js.map +1 -1
  195. package/dist/core/networking/websocket-manager.d.ts +3 -3
  196. package/dist/core/networking/websocket-manager.js +11 -9
  197. package/dist/core/networking/websocket-manager.js.map +1 -1
  198. package/dist/core/routing/app-integration.d.ts +2 -2
  199. package/dist/core/routing/app-integration.js +12 -7
  200. package/dist/core/routing/app-integration.js.map +1 -1
  201. package/dist/core/routing/index.d.ts +2 -22
  202. package/dist/core/routing/index.js +27 -185
  203. package/dist/core/routing/index.js.map +1 -1
  204. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  205. package/dist/core/runtime/aws-lambda-adapter.js +6 -2
  206. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  207. package/dist/core/runtime/base-adapter.d.ts +2 -2
  208. package/dist/core/runtime/base-adapter.js +7 -3
  209. package/dist/core/runtime/base-adapter.js.map +1 -1
  210. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  211. package/dist/core/runtime/cloudflare-workers-adapter.js +6 -2
  212. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  213. package/dist/core/runtime/index.d.ts +12 -12
  214. package/dist/core/runtime/index.js +35 -22
  215. package/dist/core/runtime/index.js.map +1 -1
  216. package/dist/core/runtime/node-adapter.d.ts +4 -4
  217. package/dist/core/runtime/node-adapter.js +49 -18
  218. package/dist/core/runtime/node-adapter.js.map +1 -1
  219. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  220. package/dist/core/runtime/vercel-edge-adapter.js +6 -2
  221. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  222. package/dist/core/utilities/circuit-breaker.js +5 -1
  223. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  224. package/dist/core/utilities/container.js +22 -12
  225. package/dist/core/utilities/container.js.map +1 -1
  226. package/dist/core/utilities/hooks.d.ts +2 -2
  227. package/dist/core/utilities/hooks.js +12 -7
  228. package/dist/core/utilities/hooks.js.map +1 -1
  229. package/dist/core/utilities/index.d.ts +4 -5
  230. package/dist/core/utilities/index.js +19 -5
  231. package/dist/core/utilities/index.js.map +1 -1
  232. package/dist/core/validation/adapters.d.ts +1 -1
  233. package/dist/core/validation/adapters.js +26 -15
  234. package/dist/core/validation/adapters.js.map +1 -1
  235. package/dist/core/validation/index.d.ts +4 -6
  236. package/dist/core/validation/index.js +28 -57
  237. package/dist/core/validation/index.js.map +1 -1
  238. package/dist/core/validation/schema-interface.js +9 -3
  239. package/dist/core/validation/schema-interface.js.map +1 -1
  240. package/dist/index.d.ts +52 -51
  241. package/dist/index.js +132 -23
  242. package/dist/index.js.map +1 -1
  243. package/dist/moro.d.ts +10 -61
  244. package/dist/moro.js +237 -575
  245. package/dist/moro.js.map +1 -1
  246. package/dist/types/auth.js +9 -3
  247. package/dist/types/auth.js.map +1 -1
  248. package/dist/types/cache.js +2 -1
  249. package/dist/types/cdn.js +2 -1
  250. package/dist/types/config.d.ts +2 -70
  251. package/dist/types/config.js +2 -1
  252. package/dist/types/config.js.map +1 -1
  253. package/dist/types/core.d.ts +42 -36
  254. package/dist/types/core.js +2 -1
  255. package/dist/types/database.js +2 -1
  256. package/dist/types/discovery.js +2 -1
  257. package/dist/types/events.js +2 -1
  258. package/dist/types/hooks.d.ts +1 -1
  259. package/dist/types/hooks.js +2 -1
  260. package/dist/types/http.d.ts +1 -16
  261. package/dist/types/http.js +2 -1
  262. package/dist/types/logger.d.ts +0 -7
  263. package/dist/types/logger.js +2 -1
  264. package/dist/types/module.d.ts +0 -11
  265. package/dist/types/module.js +2 -1
  266. package/dist/types/runtime.d.ts +1 -1
  267. package/dist/types/runtime.js +2 -1
  268. package/dist/types/session.js +2 -1
  269. package/package.json +52 -19
  270. package/src/core/auth/morojs-adapter.ts +13 -18
  271. package/src/core/config/file-loader.ts +273 -13
  272. package/src/core/config/index.ts +34 -83
  273. package/src/core/config/loader.ts +633 -0
  274. package/src/core/config/schema.ts +33 -44
  275. package/src/core/config/utils.ts +31 -24
  276. package/src/core/config/validation.ts +140 -0
  277. package/src/core/database/README.md +16 -26
  278. package/src/core/database/adapters/drizzle.ts +6 -18
  279. package/src/core/database/adapters/index.ts +13 -13
  280. package/src/core/database/adapters/mongodb.ts +5 -53
  281. package/src/core/database/adapters/mysql.ts +4 -32
  282. package/src/core/database/adapters/postgresql.ts +5 -30
  283. package/src/core/database/adapters/redis.ts +8 -61
  284. package/src/core/database/adapters/sqlite.ts +3 -19
  285. package/src/core/database/index.ts +2 -2
  286. package/src/core/docs/index.ts +8 -8
  287. package/src/core/docs/openapi-generator.ts +4 -4
  288. package/src/core/docs/schema-to-openapi.ts +6 -3
  289. package/src/core/docs/simple-docs.ts +2 -2
  290. package/src/core/docs/swagger-ui.ts +16 -19
  291. package/src/core/docs/zod-to-openapi.ts +34 -34
  292. package/src/core/events/event-bus.ts +2 -2
  293. package/src/core/events/index.ts +2 -2
  294. package/src/core/framework.ts +67 -311
  295. package/src/core/http/http-server.ts +45 -190
  296. package/src/core/http/index.ts +3 -4
  297. package/src/core/http/router.ts +40 -129
  298. package/src/core/logger/filters.ts +5 -13
  299. package/src/core/logger/index.ts +3 -4
  300. package/src/core/logger/logger.ts +216 -435
  301. package/src/core/logger/outputs.ts +3 -1
  302. package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
  303. package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
  304. package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
  305. package/src/core/middleware/built-in/adapters/cache/redis.ts +4 -18
  306. package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
  307. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
  308. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +5 -16
  309. package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
  310. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  311. package/src/core/middleware/built-in/auth-helpers.ts +1 -1
  312. package/src/core/middleware/built-in/auth-providers.ts +1 -1
  313. package/src/core/middleware/built-in/auth.ts +21 -102
  314. package/src/core/middleware/built-in/cache.ts +6 -8
  315. package/src/core/middleware/built-in/cdn.ts +4 -4
  316. package/src/core/middleware/built-in/cookie.ts +2 -2
  317. package/src/core/middleware/built-in/cors.ts +2 -2
  318. package/src/core/middleware/built-in/csp.ts +3 -3
  319. package/src/core/middleware/built-in/csrf.ts +3 -3
  320. package/src/core/middleware/built-in/error-tracker.ts +1 -1
  321. package/src/core/middleware/built-in/index.ts +30 -38
  322. package/src/core/middleware/built-in/performance-monitor.ts +1 -1
  323. package/src/core/middleware/built-in/rate-limit.ts +2 -2
  324. package/src/core/middleware/built-in/request-logger.ts +1 -3
  325. package/src/core/middleware/built-in/session.ts +8 -7
  326. package/src/core/middleware/built-in/sse.ts +9 -11
  327. package/src/core/middleware/built-in/validation.ts +2 -2
  328. package/src/core/middleware/index.ts +6 -6
  329. package/src/core/modules/auto-discovery.ts +15 -478
  330. package/src/core/modules/index.ts +2 -2
  331. package/src/core/modules/modules.ts +12 -23
  332. package/src/core/networking/adapters/index.ts +3 -4
  333. package/src/core/networking/adapters/socketio-adapter.ts +3 -5
  334. package/src/core/networking/adapters/ws-adapter.ts +9 -8
  335. package/src/core/networking/index.ts +2 -3
  336. package/src/core/networking/service-discovery.ts +7 -6
  337. package/src/core/networking/websocket-manager.ts +7 -7
  338. package/src/core/routing/app-integration.ts +3 -3
  339. package/src/core/routing/index.ts +17 -201
  340. package/src/core/runtime/aws-lambda-adapter.ts +3 -3
  341. package/src/core/runtime/base-adapter.ts +2 -2
  342. package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
  343. package/src/core/runtime/index.ts +13 -13
  344. package/src/core/runtime/node-adapter.ts +10 -16
  345. package/src/core/runtime/vercel-edge-adapter.ts +3 -3
  346. package/src/core/utilities/hooks.ts +3 -3
  347. package/src/core/utilities/index.ts +4 -5
  348. package/src/core/validation/adapters.ts +1 -1
  349. package/src/core/validation/index.ts +16 -68
  350. package/src/index.ts +66 -73
  351. package/src/moro.ts +204 -685
  352. package/src/types/config.ts +2 -71
  353. package/src/types/core.ts +47 -49
  354. package/src/types/hooks.ts +1 -1
  355. package/src/types/http.ts +1 -23
  356. package/src/types/logger.ts +0 -9
  357. package/src/types/module.ts +0 -12
  358. package/src/types/runtime.ts +1 -1
  359. package/tsconfig.json +2 -4
  360. package/dist/core/config/config-manager.d.ts +0 -44
  361. package/dist/core/config/config-manager.js +0 -104
  362. package/dist/core/config/config-manager.js.map +0 -1
  363. package/dist/core/config/config-sources.d.ts +0 -21
  364. package/dist/core/config/config-sources.js +0 -499
  365. package/dist/core/config/config-sources.js.map +0 -1
  366. package/dist/core/config/config-validator.d.ts +0 -21
  367. package/dist/core/config/config-validator.js +0 -788
  368. package/dist/core/config/config-validator.js.map +0 -1
  369. package/dist/core/http/uws-http-server.d.ts +0 -64
  370. package/dist/core/http/uws-http-server.js +0 -688
  371. package/dist/core/http/uws-http-server.js.map +0 -1
  372. package/dist/core/middleware/built-in/jwt-helpers.d.ts +0 -118
  373. package/dist/core/middleware/built-in/jwt-helpers.js +0 -218
  374. package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
  375. package/dist/core/networking/adapters/uws-adapter.d.ts +0 -44
  376. package/dist/core/networking/adapters/uws-adapter.js +0 -513
  377. package/dist/core/networking/adapters/uws-adapter.js.map +0 -1
  378. package/dist/core/utilities/package-utils.d.ts +0 -38
  379. package/dist/core/utilities/package-utils.js +0 -57
  380. package/dist/core/utilities/package-utils.js.map +0 -1
  381. package/jest.config.mjs +0 -41
  382. package/src/core/config/config-manager.ts +0 -133
  383. package/src/core/config/config-sources.ts +0 -596
  384. package/src/core/config/config-validator.ts +0 -1113
  385. package/src/core/http/uws-http-server.ts +0 -794
  386. package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
  387. package/src/core/networking/adapters/uws-adapter.ts +0 -619
  388. package/src/core/utilities/package-utils.ts +0 -59
@@ -5,29 +5,29 @@ import {
5
5
  createServer as createHttp2Server,
6
6
  } from 'http2';
7
7
  import { EventEmitter } from 'events';
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';
22
-
23
- // Extended MoroOptions that includes both core options and framework-specific options
24
- export interface MoroOptions extends CoreMoroOptions {
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 { WebSocketAdapter, WebSocketAdapterOptions } from './networking/websocket-adapter';
19
+
20
+ export interface MoroOptions {
25
21
  http2?: boolean;
26
22
  https?: {
27
23
  key: string | Buffer;
28
24
  cert: string | Buffer;
29
25
  ca?: string | Buffer;
30
26
  };
27
+ compression?: {
28
+ enabled?: boolean;
29
+ threshold?: number;
30
+ };
31
31
  websocket?:
32
32
  | {
33
33
  enabled?: boolean;
@@ -37,12 +37,12 @@ export interface MoroOptions extends CoreMoroOptions {
37
37
  options?: WebSocketAdapterOptions;
38
38
  }
39
39
  | false;
40
- config?: any; // Full configuration object
40
+ logger?: LoggerOptions | boolean;
41
41
  }
42
42
 
43
43
  export class Moro extends EventEmitter {
44
- private httpServer: MoroHttpServer | UWebSocketsHttpServer;
45
- private server: Server | any; // HTTP/2 server type or uWebSockets app
44
+ private httpServer: MoroHttpServer;
45
+ private server: Server | any; // HTTP/2 server type
46
46
  private websocketAdapter?: WebSocketAdapter;
47
47
  private container: Container;
48
48
  private moduleLoader: ModuleLoader;
@@ -54,15 +54,10 @@ export class Moro extends EventEmitter {
54
54
  // Framework logger
55
55
  private logger: any;
56
56
  private options: MoroOptions;
57
- private config: any;
58
- private usingUWebSockets = false;
59
- // WebSocket initialization promise to handle async adapter detection
60
- private websocketSetupPromise: Promise<void> | null = null;
61
57
 
62
58
  constructor(options: MoroOptions = {}) {
63
59
  super();
64
60
  this.options = options;
65
- this.config = options.config || {};
66
61
 
67
62
  // Configure global logger based on options
68
63
  if (options.logger !== undefined) {
@@ -82,33 +77,10 @@ export class Moro extends EventEmitter {
82
77
  // Initialize framework logger after global configuration
83
78
  this.logger = createFrameworkLogger('Core');
84
79
 
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();
80
+ this.httpServer = new MoroHttpServer();
111
81
 
82
+ // Create HTTP/2 or HTTP/1.1 server based on options
83
+ if (options.http2) {
112
84
  if (options.https) {
113
85
  this.server = createHttp2SecureServer(options.https);
114
86
  } else {
@@ -123,26 +95,20 @@ export class Moro extends EventEmitter {
123
95
  req.url = headers[':path'];
124
96
  req.method = headers[':method'];
125
97
  req.headers = headers;
126
- (this.httpServer as MoroHttpServer)['handleRequest'](req, res);
98
+ this.httpServer['handleRequest'](req, res);
127
99
  });
128
100
 
129
101
  this.logger.info('HTTP/2 server created', 'ServerInit');
130
102
  } else {
131
- // Use standard HTTP/1.1
132
- this.httpServer = new MoroHttpServer();
133
- this.server = (this.httpServer as MoroHttpServer).getServer();
103
+ this.server = this.httpServer.getServer();
134
104
  }
135
105
 
136
106
  this.container = new Container();
137
107
  this.moduleLoader = new ModuleLoader(this.container);
138
108
 
139
- // Setup WebSocket adapter if enabled in config OR options
140
- if (
141
- this.config.websocket.enabled ||
142
- (options.websocket && typeof options.websocket === 'object')
143
- ) {
144
- // Store the promise so we can await it before using websockets
145
- this.websocketSetupPromise = this.setupWebSockets(options.websocket || {});
109
+ // Setup WebSocket adapter if enabled
110
+ if (options.websocket !== false) {
111
+ this.setupWebSockets(options.websocket || {});
146
112
  }
147
113
 
148
114
  // Initialize enterprise event bus
@@ -165,49 +131,19 @@ export class Moro extends EventEmitter {
165
131
  }
166
132
 
167
133
  private setupCore() {
168
- // PERFORMANCE FIX: Only apply middleware if enabled in config OR options
169
-
170
- // Security middleware - check config enabled property OR options.security.*.enabled === true
171
- if (this.config.security.helmet.enabled || this.options.security?.helmet?.enabled === true) {
172
- this.httpServer.use(middleware.helmet());
173
- }
174
-
175
- if (this.config.security.cors.enabled || this.options.security?.cors?.enabled === true) {
176
- const corsOptions =
177
- typeof this.options.cors === 'object'
178
- ? this.options.cors
179
- : this.config.security.cors
180
- ? this.config.security.cors
181
- : {};
182
- this.httpServer.use(middleware.cors(corsOptions));
183
- }
184
-
185
- // Performance middleware - check config enabled property OR options.performance.*.enabled === true
186
- if (
187
- this.config.performance.compression.enabled ||
188
- this.options.performance?.compression?.enabled === true
189
- ) {
190
- const compressionOptions =
191
- typeof this.options.compression === 'object'
192
- ? this.options.compression
193
- : this.config.performance.compression
194
- ? this.config.performance.compression
195
- : {};
196
- this.httpServer.use(middleware.compression(compressionOptions));
197
- }
134
+ // Security middleware
135
+ this.httpServer.use(middleware.helmet());
136
+ this.httpServer.use(middleware.cors());
198
137
 
199
- // Body size middleware - always enabled with configurable limit
200
- this.httpServer.use(middleware.bodySize({ limit: this.config.server.bodySizeLimit }));
138
+ // Performance middleware
139
+ this.httpServer.use(middleware.compression());
140
+ this.httpServer.use(middleware.bodySize({ limit: '10mb' }));
201
141
 
202
- // Request tracking middleware - configurable
203
- if (this.config.server.requestTracking.enabled) {
204
- this.httpServer.use(this.requestTrackingMiddleware());
205
- }
142
+ // Request tracking middleware
143
+ this.httpServer.use(this.requestTrackingMiddleware());
206
144
 
207
- // Error boundary middleware - configurable but recommended to keep enabled
208
- if (this.config.server.errorBoundary.enabled) {
209
- this.httpServer.use(this.errorBoundaryMiddleware());
210
- }
145
+ // Error boundary middleware
146
+ this.httpServer.use(this.errorBoundaryMiddleware());
211
147
  }
212
148
 
213
149
  /**
@@ -215,47 +151,29 @@ export class Moro extends EventEmitter {
215
151
  */
216
152
  private async setupWebSockets(wsConfig: any): Promise<void> {
217
153
  try {
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
- );
154
+ // Use provided adapter or try to auto-detect
155
+ if (wsConfig.adapter) {
156
+ this.websocketAdapter = wsConfig.adapter;
231
157
  } else {
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
- }
158
+ this.websocketAdapter = (await this.detectWebSocketAdapter()) || undefined;
247
159
  }
248
160
 
249
- // Configure adapter features (if adapter was created)
250
161
  if (this.websocketAdapter) {
162
+ await this.websocketAdapter.initialize(this.server, wsConfig.options);
251
163
  this.websocketManager = new WebSocketManager(this.websocketAdapter, this.container);
252
164
 
165
+ // Configure adapter features
253
166
  if (wsConfig.compression) {
254
167
  this.websocketAdapter.setCompression(true);
255
168
  }
256
169
  if (wsConfig.customIdGenerator) {
257
170
  this.websocketAdapter.setCustomIdGenerator(wsConfig.customIdGenerator);
258
171
  }
172
+
173
+ this.logger.info(
174
+ `WebSocket adapter initialized: ${this.websocketAdapter.getAdapterName()}`,
175
+ 'WebSocketSetup'
176
+ );
259
177
  }
260
178
  } catch (error) {
261
179
  this.logger.warn(
@@ -268,72 +186,26 @@ export class Moro extends EventEmitter {
268
186
 
269
187
  /**
270
188
  * Auto-detect available WebSocket adapter
271
- * Tests if the library is actually installed by checking require.resolve
272
189
  */
273
190
  private async detectWebSocketAdapter(): Promise<WebSocketAdapter | null> {
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
- }
300
- }
301
-
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
- }
191
+ // Try socket.io first
192
+ try {
193
+ const { SocketIOAdapter } = await import('./networking/adapters');
194
+ return new SocketIOAdapter();
195
+ } catch {
196
+ // socket.io not available
322
197
  }
323
198
 
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
- }
199
+ // Try native ws library
200
+ try {
201
+ const { WSAdapter } = await import('./networking/adapters');
202
+ return new WSAdapter();
203
+ } catch {
204
+ // ws not available
333
205
  }
334
206
 
335
207
  this.logger.warn(
336
- 'No WebSocket adapter found. Install uWebSockets.js, socket.io, or ws for WebSocket support',
208
+ 'No WebSocket adapter found. Install socket.io or ws for WebSocket support',
337
209
  'AdapterDetection'
338
210
  );
339
211
  return null;
@@ -412,15 +284,6 @@ export class Moro extends EventEmitter {
412
284
  return this.websocketAdapter;
413
285
  }
414
286
 
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
-
424
287
  /**
425
288
  * Get the WebSocket manager
426
289
  */
@@ -548,76 +411,6 @@ export class Moro extends EventEmitter {
548
411
  throw new Error(`Handler ${route.handler} is not a function`);
549
412
  }
550
413
 
551
- // Check authentication if auth configuration is provided
552
- if ((route as any).auth) {
553
- const auth = (req as any).auth;
554
- const authConfig = (route as any).auth;
555
-
556
- if (!auth) {
557
- res.status(401);
558
- res.json({
559
- success: false,
560
- error: 'Authentication required',
561
- message: 'You must be logged in to access this resource',
562
- });
563
- return;
564
- }
565
-
566
- // Check authentication requirement (default is required unless optional: true)
567
- if (!authConfig.optional && !auth.isAuthenticated) {
568
- res.status(401);
569
- res.json({
570
- success: false,
571
- error: 'Authentication required',
572
- message: 'You must be logged in to access this resource',
573
- });
574
- return;
575
- }
576
-
577
- // Skip further checks if not authenticated but optional
578
- if (!auth.isAuthenticated && authConfig.optional) {
579
- // Continue to handler
580
- } else if (auth.isAuthenticated) {
581
- const user = auth.user;
582
-
583
- // Check roles if specified
584
- if (authConfig.roles && authConfig.roles.length > 0) {
585
- const userRoles = user?.roles || [];
586
- const hasRole = authConfig.roles.some((role: string) => userRoles.includes(role));
587
-
588
- if (!hasRole) {
589
- res.status(403);
590
- res.json({
591
- success: false,
592
- error: 'Insufficient permissions',
593
- message: `Required roles: ${authConfig.roles.join(', ')}`,
594
- userRoles,
595
- });
596
- return;
597
- }
598
- }
599
-
600
- // Check permissions if specified
601
- if (authConfig.permissions && authConfig.permissions.length > 0) {
602
- const userPermissions = user?.permissions || [];
603
- const hasPermission = authConfig.permissions.every((permission: string) =>
604
- userPermissions.includes(permission)
605
- );
606
-
607
- if (!hasPermission) {
608
- res.status(403);
609
- res.json({
610
- success: false,
611
- error: 'Insufficient permissions',
612
- message: `Required permissions: ${authConfig.permissions.join(', ')}`,
613
- userPermissions,
614
- });
615
- return;
616
- }
617
- }
618
- }
619
- }
620
-
621
414
  // Validate request if validation schema is provided
622
415
  if (route.validation) {
623
416
  try {
@@ -723,61 +516,22 @@ export class Moro extends EventEmitter {
723
516
  this.logger.debug(`Mounting router for basePath: ${basePath}`, 'Router');
724
517
 
725
518
  // Enterprise-grade middleware integration with performance optimization
726
- // IMPORTANT: Module middleware runs AFTER user middleware (like auth) to ensure proper order
727
519
  this.httpServer.use(async (req: HttpRequest, res: HttpResponse, next: () => void) => {
728
520
  if (req.path.startsWith(basePath)) {
729
521
  this.logger.debug(`Module middleware handling: ${req.method} ${req.path}`, 'Middleware', {
730
522
  basePath,
731
523
  });
732
524
 
733
- // Mark this request as being handled by a module
734
- (req as any).__moduleBasePath = basePath;
735
- (req as any).__moduleRouter = router;
736
-
737
- // Continue to next middleware (including auth) first
738
- next();
739
- } else {
740
- next();
741
- }
742
- });
743
-
744
- this.logger.info(`Router mounted for ${basePath}`, 'Router');
745
- }
746
-
747
- private finalModuleHandlerSetup = false;
748
-
749
- // Setup final module handler that runs after all user middleware
750
- setupFinalModuleHandler(): void {
751
- // Prevent duplicate setup
752
- if (this.finalModuleHandlerSetup) {
753
- this.logger.debug('Final module handler already set up, skipping', 'ModuleSystem');
754
- return;
755
- }
756
- this.finalModuleHandlerSetup = true;
757
-
758
- this.logger.info(
759
- 'Setting up final module handler to run after user middleware',
760
- 'ModuleSystem'
761
- );
762
-
763
- this.httpServer.use(async (req: HttpRequest, res: HttpResponse, next: () => void) => {
764
- // Check if this request was marked for module handling
765
- const moduleBasePath = (req as any).__moduleBasePath;
766
- const moduleRouter = (req as any).__moduleRouter;
767
-
768
- if (moduleBasePath && moduleRouter && !res.headersSent) {
769
- this.logger.debug(`Final module handler processing: ${req.method} ${req.path}`, 'Router');
770
-
771
525
  try {
772
- const handled = await moduleRouter.handle(req, res, moduleBasePath);
773
- this.logger.debug(`Route handled by module: ${handled}`, 'Router');
526
+ const handled = await router.handle(req, res, basePath);
527
+ this.logger.debug(`Route handled: ${handled}`, 'Router');
774
528
 
775
529
  if (!handled) {
776
530
  next(); // Let other middleware handle it
777
531
  }
778
532
  // If handled, the router already sent the response, so don't call next()
779
533
  } catch (error) {
780
- this.logger.error('Module router error', 'Router', {
534
+ this.logger.error('Router error', 'Router', {
781
535
  error: error instanceof Error ? error.message : String(error),
782
536
  });
783
537
  if (!res.headersSent) {
@@ -788,6 +542,8 @@ export class Moro extends EventEmitter {
788
542
  next();
789
543
  }
790
544
  });
545
+
546
+ this.logger.info(`Router mounted for ${basePath}`, 'Router');
791
547
  }
792
548
 
793
549
  private async setupWebSocketHandlers(config: ModuleConfig): Promise<void> {