@morojs/moro 1.6.1 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/README.md +74 -256
  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/config-manager.d.ts +44 -0
  5. package/dist/core/config/config-manager.js +104 -0
  6. package/dist/core/config/config-manager.js.map +1 -0
  7. package/dist/core/config/config-sources.d.ts +21 -0
  8. package/dist/core/config/config-sources.js +503 -0
  9. package/dist/core/config/config-sources.js.map +1 -0
  10. package/dist/core/config/config-validator.d.ts +21 -0
  11. package/dist/core/config/config-validator.js +791 -0
  12. package/dist/core/config/config-validator.js.map +1 -0
  13. package/dist/core/config/file-loader.d.ts +1 -6
  14. package/dist/core/config/file-loader.js +21 -249
  15. package/dist/core/config/file-loader.js.map +1 -1
  16. package/dist/core/config/index.d.ts +41 -12
  17. package/dist/core/config/index.js +65 -54
  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 +55 -44
  21. package/dist/core/config/schema.js.map +1 -1
  22. package/dist/core/config/utils.d.ts +10 -3
  23. package/dist/core/config/utils.js +31 -58
  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 +13 -1
  32. package/dist/core/database/adapters/mongodb.js +46 -10
  33. package/dist/core/database/adapters/mongodb.js.map +1 -1
  34. package/dist/core/database/adapters/mysql.d.ts +14 -1
  35. package/dist/core/database/adapters/mysql.js +19 -9
  36. package/dist/core/database/adapters/mysql.js.map +1 -1
  37. package/dist/core/database/adapters/postgresql.d.ts +12 -2
  38. package/dist/core/database/adapters/postgresql.js +19 -9
  39. package/dist/core/database/adapters/postgresql.js.map +1 -1
  40. package/dist/core/database/adapters/redis.d.ts +12 -1
  41. package/dist/core/database/adapters/redis.js +48 -13
  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 +7 -11
  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 +20 -13
  73. package/dist/core/framework.js +285 -102
  74. package/dist/core/framework.js.map +1 -1
  75. package/dist/core/http/http-server.d.ts +59 -7
  76. package/dist/core/http/http-server.js +190 -176
  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/uws-http-server.d.ts +46 -0
  82. package/dist/core/http/uws-http-server.js +523 -0
  83. package/dist/core/http/uws-http-server.js.map +1 -0
  84. package/dist/core/logger/filters.d.ts +1 -1
  85. package/dist/core/logger/filters.js +20 -23
  86. package/dist/core/logger/filters.js.map +1 -1
  87. package/dist/core/logger/index.d.ts +3 -3
  88. package/dist/core/logger/index.js +2 -24
  89. package/dist/core/logger/index.js.map +1 -1
  90. package/dist/core/logger/logger.d.ts +30 -14
  91. package/dist/core/logger/logger.js +398 -223
  92. package/dist/core/logger/logger.js.map +1 -1
  93. package/dist/core/logger/outputs.d.ts +1 -1
  94. package/dist/core/logger/outputs.js +8 -17
  95. package/dist/core/logger/outputs.js.map +1 -1
  96. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  97. package/dist/core/middleware/built-in/adapters/cache/file.js +10 -47
  98. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  99. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  100. package/dist/core/middleware/built-in/adapters/cache/index.js +10 -17
  101. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  102. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  103. package/dist/core/middleware/built-in/adapters/cache/memory.js +3 -7
  104. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  105. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +3 -1
  106. package/dist/core/middleware/built-in/adapters/cache/redis.js +11 -9
  107. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  108. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  109. package/dist/core/middleware/built-in/adapters/cdn/azure.js +3 -7
  110. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  111. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  112. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +3 -7
  113. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  114. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +3 -1
  115. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +12 -10
  116. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  117. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  118. package/dist/core/middleware/built-in/adapters/cdn/index.js +10 -17
  119. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
  120. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  121. package/dist/core/middleware/built-in/adapters/index.js +4 -23
  122. package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
  123. package/dist/core/middleware/built-in/auth-helpers.js +11 -22
  124. package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
  125. package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
  126. package/dist/core/middleware/built-in/auth-providers.js +4 -9
  127. package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
  128. package/dist/core/middleware/built-in/auth.d.ts +2 -2
  129. package/dist/core/middleware/built-in/auth.js +93 -26
  130. package/dist/core/middleware/built-in/auth.js.map +1 -1
  131. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  132. package/dist/core/middleware/built-in/cache.js +11 -12
  133. package/dist/core/middleware/built-in/cache.js.map +1 -1
  134. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  135. package/dist/core/middleware/built-in/cdn.js +5 -9
  136. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  137. package/dist/core/middleware/built-in/cookie.d.ts +1 -1
  138. package/dist/core/middleware/built-in/cookie.js +3 -7
  139. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  140. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  141. package/dist/core/middleware/built-in/cors.js +3 -7
  142. package/dist/core/middleware/built-in/cors.js.map +1 -1
  143. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  144. package/dist/core/middleware/built-in/csp.js +5 -8
  145. package/dist/core/middleware/built-in/csp.js.map +1 -1
  146. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  147. package/dist/core/middleware/built-in/csrf.js +5 -8
  148. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  149. package/dist/core/middleware/built-in/error-tracker.js +3 -7
  150. package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
  151. package/dist/core/middleware/built-in/index.d.ts +28 -27
  152. package/dist/core/middleware/built-in/index.js +48 -78
  153. package/dist/core/middleware/built-in/index.js.map +1 -1
  154. package/dist/core/middleware/built-in/jwt-helpers.d.ts +118 -0
  155. package/dist/core/middleware/built-in/jwt-helpers.js +218 -0
  156. package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -0
  157. package/dist/core/middleware/built-in/performance-monitor.js +3 -7
  158. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
  159. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  160. package/dist/core/middleware/built-in/rate-limit.js +3 -7
  161. package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
  162. package/dist/core/middleware/built-in/request-logger.js +5 -8
  163. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  164. package/dist/core/middleware/built-in/session.d.ts +2 -2
  165. package/dist/core/middleware/built-in/session.js +11 -15
  166. package/dist/core/middleware/built-in/session.js.map +1 -1
  167. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  168. package/dist/core/middleware/built-in/sse.js +12 -14
  169. package/dist/core/middleware/built-in/sse.js.map +1 -1
  170. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  171. package/dist/core/middleware/built-in/validation.js +3 -7
  172. package/dist/core/middleware/built-in/validation.js.map +1 -1
  173. package/dist/core/middleware/index.d.ts +4 -4
  174. package/dist/core/middleware/index.js +8 -28
  175. package/dist/core/middleware/index.js.map +1 -1
  176. package/dist/core/modules/auto-discovery.d.ts +19 -2
  177. package/dist/core/modules/auto-discovery.js +391 -74
  178. package/dist/core/modules/auto-discovery.js.map +1 -1
  179. package/dist/core/modules/index.d.ts +2 -2
  180. package/dist/core/modules/index.js +2 -9
  181. package/dist/core/modules/index.js.map +1 -1
  182. package/dist/core/modules/modules.d.ts +3 -3
  183. package/dist/core/modules/modules.js +23 -54
  184. package/dist/core/modules/modules.js.map +1 -1
  185. package/dist/core/networking/adapters/index.d.ts +4 -3
  186. package/dist/core/networking/adapters/index.js +3 -7
  187. package/dist/core/networking/adapters/index.js.map +1 -1
  188. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
  189. package/dist/core/networking/adapters/socketio-adapter.js +5 -40
  190. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  191. package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
  192. package/dist/core/networking/adapters/uws-adapter.js +513 -0
  193. package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
  194. package/dist/core/networking/adapters/ws-adapter.d.ts +2 -2
  195. package/dist/core/networking/adapters/ws-adapter.js +8 -43
  196. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  197. package/dist/core/networking/index.d.ts +3 -2
  198. package/dist/core/networking/index.js +2 -7
  199. package/dist/core/networking/index.js.map +1 -1
  200. package/dist/core/networking/service-discovery.js +8 -12
  201. package/dist/core/networking/service-discovery.js.map +1 -1
  202. package/dist/core/networking/websocket-adapter.js +1 -2
  203. package/dist/core/networking/websocket-adapter.js.map +1 -1
  204. package/dist/core/networking/websocket-manager.d.ts +3 -3
  205. package/dist/core/networking/websocket-manager.js +9 -11
  206. package/dist/core/networking/websocket-manager.js.map +1 -1
  207. package/dist/core/pooling/object-pool-manager.d.ts +140 -0
  208. package/dist/core/pooling/object-pool-manager.js +502 -0
  209. package/dist/core/pooling/object-pool-manager.js.map +1 -0
  210. package/dist/core/routing/app-integration.d.ts +14 -12
  211. package/dist/core/routing/app-integration.js +49 -85
  212. package/dist/core/routing/app-integration.js.map +1 -1
  213. package/dist/core/routing/index.d.ts +17 -11
  214. package/dist/core/routing/index.js +48 -237
  215. package/dist/core/routing/index.js.map +1 -1
  216. package/dist/core/routing/path-matcher.d.ts +67 -0
  217. package/dist/core/routing/path-matcher.js +182 -0
  218. package/dist/core/routing/path-matcher.js.map +1 -0
  219. package/dist/core/routing/router.d.ts +38 -0
  220. package/dist/core/routing/router.js +68 -0
  221. package/dist/core/routing/router.js.map +1 -0
  222. package/dist/core/routing/unified-router.d.ts +148 -0
  223. package/dist/core/routing/unified-router.js +684 -0
  224. package/dist/core/routing/unified-router.js.map +1 -0
  225. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  226. package/dist/core/runtime/aws-lambda-adapter.js +2 -6
  227. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  228. package/dist/core/runtime/base-adapter.d.ts +2 -2
  229. package/dist/core/runtime/base-adapter.js +3 -7
  230. package/dist/core/runtime/base-adapter.js.map +1 -1
  231. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  232. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
  233. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  234. package/dist/core/runtime/index.d.ts +12 -12
  235. package/dist/core/runtime/index.js +22 -35
  236. package/dist/core/runtime/index.js.map +1 -1
  237. package/dist/core/runtime/node-adapter.d.ts +4 -4
  238. package/dist/core/runtime/node-adapter.js +18 -49
  239. package/dist/core/runtime/node-adapter.js.map +1 -1
  240. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  241. package/dist/core/runtime/vercel-edge-adapter.js +2 -6
  242. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  243. package/dist/core/utilities/circuit-breaker.js +1 -5
  244. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  245. package/dist/core/utilities/container.js +12 -22
  246. package/dist/core/utilities/container.js.map +1 -1
  247. package/dist/core/utilities/hooks.d.ts +2 -2
  248. package/dist/core/utilities/hooks.js +7 -12
  249. package/dist/core/utilities/hooks.js.map +1 -1
  250. package/dist/core/utilities/index.d.ts +5 -4
  251. package/dist/core/utilities/index.js +5 -19
  252. package/dist/core/utilities/index.js.map +1 -1
  253. package/dist/core/utilities/package-utils.d.ts +38 -0
  254. package/dist/core/utilities/package-utils.js +57 -0
  255. package/dist/core/utilities/package-utils.js.map +1 -0
  256. package/dist/core/validation/adapters.d.ts +1 -1
  257. package/dist/core/validation/adapters.js +15 -26
  258. package/dist/core/validation/adapters.js.map +1 -1
  259. package/dist/core/validation/index.d.ts +6 -4
  260. package/dist/core/validation/index.js +57 -28
  261. package/dist/core/validation/index.js.map +1 -1
  262. package/dist/core/validation/schema-interface.js +3 -9
  263. package/dist/core/validation/schema-interface.js.map +1 -1
  264. package/dist/index.d.ts +51 -52
  265. package/dist/index.js +23 -132
  266. package/dist/index.js.map +1 -1
  267. package/dist/moro.d.ts +70 -16
  268. package/dist/moro.js +658 -271
  269. package/dist/moro.js.map +1 -1
  270. package/dist/types/auth.js +3 -9
  271. package/dist/types/auth.js.map +1 -1
  272. package/dist/types/cache.js +1 -2
  273. package/dist/types/cdn.js +1 -2
  274. package/dist/types/config.d.ts +73 -2
  275. package/dist/types/config.js +1 -2
  276. package/dist/types/config.js.map +1 -1
  277. package/dist/types/core.d.ts +36 -42
  278. package/dist/types/core.js +1 -2
  279. package/dist/types/database.js +1 -2
  280. package/dist/types/discovery.js +1 -2
  281. package/dist/types/events.js +1 -2
  282. package/dist/types/hooks.d.ts +1 -1
  283. package/dist/types/hooks.js +1 -2
  284. package/dist/types/http.d.ts +16 -1
  285. package/dist/types/http.js +1 -2
  286. package/dist/types/logger.d.ts +7 -0
  287. package/dist/types/logger.js +1 -2
  288. package/dist/types/module.d.ts +11 -0
  289. package/dist/types/module.js +1 -2
  290. package/dist/types/runtime.d.ts +1 -1
  291. package/dist/types/runtime.js +1 -2
  292. package/dist/types/session.js +1 -2
  293. package/jest.config.mjs +41 -0
  294. package/package.json +19 -52
  295. package/src/core/auth/morojs-adapter.ts +18 -13
  296. package/src/core/config/config-manager.ts +133 -0
  297. package/src/core/config/config-sources.ts +600 -0
  298. package/src/core/config/config-validator.ts +1116 -0
  299. package/src/core/config/file-loader.ts +16 -273
  300. package/src/core/config/index.ts +83 -34
  301. package/src/core/config/schema.ts +47 -33
  302. package/src/core/config/utils.ts +24 -31
  303. package/src/core/database/README.md +26 -16
  304. package/src/core/database/adapters/drizzle.ts +18 -6
  305. package/src/core/database/adapters/index.ts +13 -13
  306. package/src/core/database/adapters/mongodb.ts +53 -5
  307. package/src/core/database/adapters/mysql.ts +32 -4
  308. package/src/core/database/adapters/postgresql.ts +30 -5
  309. package/src/core/database/adapters/redis.ts +61 -8
  310. package/src/core/database/adapters/sqlite.ts +19 -3
  311. package/src/core/database/index.ts +2 -2
  312. package/src/core/docs/index.ts +8 -8
  313. package/src/core/docs/openapi-generator.ts +4 -4
  314. package/src/core/docs/schema-to-openapi.ts +3 -6
  315. package/src/core/docs/simple-docs.ts +2 -2
  316. package/src/core/docs/swagger-ui.ts +19 -16
  317. package/src/core/docs/zod-to-openapi.ts +34 -34
  318. package/src/core/events/event-bus.ts +3 -3
  319. package/src/core/events/index.ts +2 -2
  320. package/src/core/framework.ts +320 -71
  321. package/src/core/http/http-server.ts +203 -143
  322. package/src/core/http/index.ts +4 -3
  323. package/src/core/http/uws-http-server.ts +591 -0
  324. package/src/core/logger/filters.ts +13 -5
  325. package/src/core/logger/index.ts +4 -3
  326. package/src/core/logger/logger.ts +435 -216
  327. package/src/core/logger/outputs.ts +1 -3
  328. package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
  329. package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
  330. package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
  331. package/src/core/middleware/built-in/adapters/cache/redis.ts +18 -4
  332. package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
  333. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
  334. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +16 -5
  335. package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
  336. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  337. package/src/core/middleware/built-in/auth-helpers.ts +1 -1
  338. package/src/core/middleware/built-in/auth-providers.ts +1 -1
  339. package/src/core/middleware/built-in/auth.ts +102 -21
  340. package/src/core/middleware/built-in/cache.ts +8 -6
  341. package/src/core/middleware/built-in/cdn.ts +4 -4
  342. package/src/core/middleware/built-in/cookie.ts +2 -2
  343. package/src/core/middleware/built-in/cors.ts +2 -2
  344. package/src/core/middleware/built-in/csp.ts +3 -3
  345. package/src/core/middleware/built-in/csrf.ts +3 -3
  346. package/src/core/middleware/built-in/error-tracker.ts +1 -1
  347. package/src/core/middleware/built-in/index.ts +38 -30
  348. package/src/core/middleware/built-in/jwt-helpers.ts +243 -0
  349. package/src/core/middleware/built-in/performance-monitor.ts +1 -1
  350. package/src/core/middleware/built-in/rate-limit.ts +2 -2
  351. package/src/core/middleware/built-in/request-logger.ts +3 -1
  352. package/src/core/middleware/built-in/session.ts +7 -8
  353. package/src/core/middleware/built-in/sse.ts +11 -9
  354. package/src/core/middleware/built-in/validation.ts +2 -2
  355. package/src/core/middleware/index.ts +6 -6
  356. package/src/core/modules/auto-discovery.ts +478 -15
  357. package/src/core/modules/index.ts +2 -2
  358. package/src/core/modules/modules.ts +23 -12
  359. package/src/core/networking/adapters/index.ts +4 -3
  360. package/src/core/networking/adapters/socketio-adapter.ts +5 -3
  361. package/src/core/networking/adapters/uws-adapter.ts +619 -0
  362. package/src/core/networking/adapters/ws-adapter.ts +8 -9
  363. package/src/core/networking/index.ts +3 -2
  364. package/src/core/networking/service-discovery.ts +6 -7
  365. package/src/core/networking/websocket-manager.ts +7 -7
  366. package/src/core/pooling/object-pool-manager.ts +630 -0
  367. package/src/core/routing/app-integration.ts +60 -112
  368. package/src/core/routing/index.ts +66 -293
  369. package/src/core/routing/path-matcher.ts +222 -0
  370. package/src/core/routing/router.ts +97 -0
  371. package/src/core/routing/unified-router.ts +870 -0
  372. package/src/core/runtime/aws-lambda-adapter.ts +3 -3
  373. package/src/core/runtime/base-adapter.ts +2 -2
  374. package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
  375. package/src/core/runtime/index.ts +13 -13
  376. package/src/core/runtime/node-adapter.ts +16 -10
  377. package/src/core/runtime/vercel-edge-adapter.ts +3 -3
  378. package/src/core/utilities/hooks.ts +3 -3
  379. package/src/core/utilities/index.ts +5 -4
  380. package/src/core/utilities/package-utils.ts +59 -0
  381. package/src/core/validation/adapters.ts +1 -1
  382. package/src/core/validation/index.ts +68 -16
  383. package/src/index.ts +73 -66
  384. package/src/moro.ts +784 -253
  385. package/src/types/config.ts +74 -2
  386. package/src/types/core.ts +49 -47
  387. package/src/types/hooks.ts +1 -1
  388. package/src/types/http.ts +23 -1
  389. package/src/types/logger.ts +9 -0
  390. package/src/types/module.ts +12 -0
  391. package/src/types/runtime.ts +1 -1
  392. package/tsconfig.json +4 -2
  393. package/dist/core/config/loader.d.ts +0 -7
  394. package/dist/core/config/loader.js +0 -269
  395. package/dist/core/config/loader.js.map +0 -1
  396. package/dist/core/config/validation.d.ts +0 -17
  397. package/dist/core/config/validation.js +0 -131
  398. package/dist/core/config/validation.js.map +0 -1
  399. package/dist/core/http/router.d.ts +0 -14
  400. package/dist/core/http/router.js +0 -109
  401. package/dist/core/http/router.js.map +0 -1
  402. package/src/core/config/loader.ts +0 -633
  403. package/src/core/config/validation.ts +0 -140
  404. package/src/core/http/router.ts +0 -141
@@ -0,0 +1,41 @@
1
+ export default {
2
+ preset: 'ts-jest/presets/default-esm',
3
+ testEnvironment: 'node',
4
+ extensionsToTreatAsEsm: ['.ts'],
5
+ moduleNameMapper: {
6
+ '^(\\.{1,2}/.*)\\.js$': '$1',
7
+ },
8
+ transform: {
9
+ '^.+\\.ts$': [
10
+ 'ts-jest',
11
+ {
12
+ useESM: true,
13
+ tsconfig: {
14
+ module: 'ESNext',
15
+ moduleResolution: 'NodeNext',
16
+ target: 'ES2022',
17
+ esModuleInterop: true,
18
+ isolatedModules: true,
19
+ },
20
+ },
21
+ ],
22
+ },
23
+ roots: ['<rootDir>/src', '<rootDir>/tests'],
24
+ testMatch: ['**/tests/**/*.test.ts', '**/src/**/*.test.ts'],
25
+ collectCoverageFrom: [
26
+ 'src/**/*.ts',
27
+ '!src/**/*.d.ts',
28
+ '!src/**/*.test.ts',
29
+ '!src/**/index.ts',
30
+ ],
31
+ coverageDirectory: 'coverage',
32
+ coverageReporters: ['text', 'lcov', 'html'],
33
+ setupFilesAfterEnv: ['<rootDir>/tests/setup.ts'],
34
+ testTimeout: 15000,
35
+ maxWorkers: 1,
36
+ forceExit: false,
37
+ detectOpenHandles: true,
38
+ openHandlesTimeout: 1000,
39
+ moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
40
+ };
41
+
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@morojs/moro",
3
- "version": "1.6.1",
4
- "description": "High-performance Node.js framework with intelligent routing, automatic middleware ordering, enterprise authentication (Auth.js), type-safe Zod validation, and functional architecture",
3
+ "version": "1.6.2",
4
+ "description": "High-performance Node.js framework with intelligent routing, automatic middleware ordering, enterprise authentication (Auth.js), type-safe validation, and functional architecture",
5
+ "type": "module",
5
6
  "main": "dist/index.js",
6
7
  "types": "dist/index.d.ts",
7
8
  "exports": {
8
9
  ".": {
9
10
  "development": "./src/index.ts",
10
11
  "import": "./dist/index.js",
11
- "require": "./dist/index.js",
12
12
  "types": "./dist/index.d.ts"
13
13
  }
14
14
  },
@@ -29,20 +29,22 @@
29
29
  "test:ci": "jest --coverage --watchAll=false --ci --forceExit",
30
30
  "test:force": "jest --forceExit",
31
31
  "test:all": "npm run test:unit && npm run test:integration && npm run test:e2e",
32
+ "test:dist": "npm run build && node scripts/validate-dist.mjs",
33
+ "test:package": "npm run build && node scripts/validate-package.mjs",
32
34
  "lint": "eslint src --ext .ts",
33
35
  "lint:fix": "eslint src --ext .ts --fix",
34
- "format": "prettier --write \"src/**/*.ts\"",
35
- "format:check": "prettier --check \"src/**/*.ts\"",
36
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
37
+ "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
36
38
  "lint-staged": "lint-staged",
37
39
  "docs:build": "typedoc --out docs-html src/index.ts",
38
40
  "docs:serve": "http-server docs-html -p 8080",
39
41
  "docs:json": "typedoc --json docs-json/api.json src/index.ts",
40
42
  "docs:markdown": "typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts",
41
43
  "docs:all": "npm run docs:build && npm run docs:json && npm run docs:markdown",
42
- "prerelease": "node scripts/release.js",
43
- "prerelease:patch": "node scripts/release.js patch",
44
- "prerelease:minor": "node scripts/release.js minor",
45
- "prerelease:major": "node scripts/release.js major"
44
+ "prerelease": "npm run build && npm test && npm run test:package && node scripts/release.js",
45
+ "prerelease:patch": "npm run build && npm test && npm run test:package && node scripts/release.js patch",
46
+ "prerelease:minor": "npm run build && npm test && npm run test:package && node scripts/release.js minor",
47
+ "prerelease:major": "npm run build && npm test && npm run test:package && node scripts/release.js major"
46
48
  },
47
49
  "keywords": [
48
50
  "nodejs",
@@ -89,8 +91,9 @@
89
91
  "pg": "^8.16.3",
90
92
  "socket.io": "^4.8.1",
91
93
  "swagger-ui-dist": "^5.28.1",
94
+ "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.52.0",
92
95
  "ws": "^8.18.0",
93
- "yup": "^1.0.0"
96
+ "yup": "^1.7.1"
94
97
  },
95
98
  "peerDependenciesMeta": {
96
99
  "@auth/core": {
@@ -120,6 +123,9 @@
120
123
  "socket.io": {
121
124
  "optional": true
122
125
  },
126
+ "uWebSockets.js": {
127
+ "optional": true
128
+ },
123
129
  "ws": {
124
130
  "optional": true
125
131
  },
@@ -165,6 +171,7 @@
165
171
  "typedoc-plugin-markdown": "^4.8.1",
166
172
  "typedoc-theme-hierarchy": "^6.0.0",
167
173
  "typescript": "^5.9.2",
174
+ "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.52.0",
168
175
  "ws": "^8.18.3",
169
176
  "zod": "^4.1.8"
170
177
  },
@@ -174,49 +181,9 @@
174
181
  "README.md",
175
182
  "LICENSE",
176
183
  "API.md",
177
- "tsconfig.json"
184
+ "tsconfig.json",
185
+ "jest.config.mjs"
178
186
  ],
179
- "jest": {
180
- "preset": "ts-jest",
181
- "testEnvironment": "node",
182
- "roots": [
183
- "<rootDir>/src",
184
- "<rootDir>/tests"
185
- ],
186
- "testMatch": [
187
- "**/tests/**/*.test.ts",
188
- "**/src/**/*.test.ts"
189
- ],
190
- "transform": {
191
- "^.+\\.ts$": [
192
- "ts-jest",
193
- {}
194
- ]
195
- },
196
- "collectCoverageFrom": [
197
- "src/**/*.ts",
198
- "!src/**/*.d.ts",
199
- "!src/**/*.test.ts",
200
- "!src/**/index.ts"
201
- ],
202
- "coverageDirectory": "coverage",
203
- "coverageReporters": [
204
- "text",
205
- "lcov",
206
- "html"
207
- ],
208
- "setupFilesAfterEnv": [
209
- "<rootDir>/tests/setup.ts"
210
- ],
211
- "testTimeout": 15000,
212
- "maxWorkers": 1,
213
- "forceExit": false,
214
- "detectOpenHandles": true,
215
- "openHandlesTimeout": 1000,
216
- "extensionsToTreatAsEsm": [
217
- ".ts"
218
- ]
219
- },
220
187
  "lint-staged": {
221
188
  "src/**/*.ts": [
222
189
  "prettier --write",
@@ -8,7 +8,9 @@
8
8
  * @see https://github.com/nextauthjs/next-auth/tree/main/packages
9
9
  */
10
10
 
11
- import { logger } from '../logger';
11
+ import { createFrameworkLogger } from '../logger/index.js';
12
+
13
+ const logger = createFrameworkLogger('AuthAdapter');
12
14
 
13
15
  // Mock Auth.js types until we have the actual package
14
16
  // These would come from @auth/core in a real implementation
@@ -249,7 +251,7 @@ export async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
249
251
  basePath,
250
252
  raw: (code: any, ...message: any[]) => {
251
253
  if (config.morojs?.debug) {
252
- logger.debug(`[MoroJS Auth] ${code}:`, 'AuthAdapter', { code, message });
254
+ logger.debug(`[MoroJS Auth] ${code}:`, 'AuthAdapter', { message });
253
255
  }
254
256
  },
255
257
  });
@@ -263,7 +265,7 @@ export async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
263
265
  // Convert Web API response to MoroJS response
264
266
  await fromWebResponse(finalResponse, res);
265
267
  } catch (error) {
266
- logger.error('[MoroJS Auth] Error:', 'AuthAdapter', {
268
+ logger.error('[MoroJS Auth] Error', 'AuthAdapter', {
267
269
  error: error instanceof Error ? error.message : String(error),
268
270
  });
269
271
  // Robust error handling - check if response methods exist
@@ -312,7 +314,7 @@ export async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
312
314
  return null;
313
315
  } catch (error) {
314
316
  if (config.morojs?.debug) {
315
- logger.error('[MoroJS Auth] Session error:', 'AuthAdapter', {
317
+ logger.error('[MoroJS Auth] Session error', 'AuthAdapter', {
316
318
  error: error instanceof Error ? error.message : String(error),
317
319
  });
318
320
  }
@@ -328,18 +330,21 @@ export async function MoroJSAuth(config: MoroJSAuthConfig): Promise<{
328
330
  * This creates a MoroJS-compatible middleware for authentication
329
331
  */
330
332
  export function createAuthMiddleware(config: MoroJSAuthConfig) {
331
- logger.info('🏭 createAuthMiddleware called - creating middleware function', 'AuthAdapter');
333
+ logger.info('createAuthMiddleware called - creating middleware function', 'AuthAdapter');
332
334
  // Return a function that MoroJS can call directly
333
335
  return async (app: any) => {
334
- logger.info('🔧 Installing Auth.js middleware...', 'AuthAdapter');
335
- logger.info(`📦 App object received: ${typeof app} ${app.constructor.name}`, 'AuthAdapter');
336
+ logger.info('Installing Auth.js middleware...', 'AuthAdapter');
337
+ logger.debug('App object received', 'AuthAdapter', {
338
+ appType: typeof app,
339
+ appConstructor: app.constructor.name,
340
+ });
336
341
 
337
342
  // Get the hooks from the app's middleware system
338
343
  const hooks =
339
344
  (app as any).coreFramework?.middlewareManager?.hooks || (app as any).middlewareManager?.hooks;
340
345
 
341
346
  if (!hooks) {
342
- logger.error('Could not access MoroJS hooks system', 'AuthAdapter');
347
+ logger.error('Could not access MoroJS hooks system', 'AuthAdapter');
343
348
  return;
344
349
  }
345
350
 
@@ -350,9 +355,9 @@ export function createAuthMiddleware(config: MoroJSAuthConfig) {
350
355
 
351
356
  // Register request hook
352
357
  hooks.before('request', async (context: any) => {
353
- logger.debug('🔒 Native adapter hook starting...', 'AuthAdapter');
358
+ logger.debug('Native adapter hook starting', 'AuthAdapter');
354
359
  const req = context.request;
355
- logger.debug(`📝 Request path: ${req.path || req.url}`, 'AuthAdapter');
360
+ logger.debug('Request path', 'AuthAdapter', { path: req.path || req.url });
356
361
 
357
362
  try {
358
363
  // Just add auth object to request - don't touch response
@@ -389,16 +394,16 @@ export function createAuthMiddleware(config: MoroJSAuthConfig) {
389
394
  return { url: signOutUrl };
390
395
  },
391
396
  };
392
- logger.debug('Native adapter hook completed successfully', 'AuthAdapter');
397
+ logger.debug('Native adapter hook completed successfully', 'AuthAdapter');
393
398
  } catch (error) {
394
- logger.error('Error in native adapter hook:', 'AuthAdapter', {
399
+ logger.error('Error in native adapter hook', 'AuthAdapter', {
395
400
  error: error instanceof Error ? error.message : String(error),
396
401
  });
397
402
  throw error;
398
403
  }
399
404
  });
400
405
 
401
- logger.info('Auth.js middleware installed successfully!', 'AuthAdapter');
406
+ logger.info('Auth.js middleware installed successfully!', 'AuthAdapter');
402
407
  };
403
408
  }
404
409
 
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Configuration Manager - Immutable Single Source of Truth
3
+ *
4
+ * This module provides centralized, immutable configuration state management.
5
+ * Configuration is locked at createApp() initialization and cannot be changed afterward.
6
+ *
7
+ * Precedence: Environment Variables > createApp Options > Config File > Defaults
8
+ */
9
+
10
+ import { AppConfig } from '../../types/config.js';
11
+ import { createFrameworkLogger } from '../logger/index.js';
12
+
13
+ const logger = createFrameworkLogger('ConfigManager');
14
+
15
+ /**
16
+ * Global configuration state - immutable after initialization
17
+ */
18
+ let globalConfig: Readonly<AppConfig> | null = null;
19
+ let isLocked = false;
20
+
21
+ /**
22
+ * Initialize and lock global configuration state
23
+ * This should only be called once during createApp() initialization
24
+ */
25
+ export function initializeAndLockConfig(config: AppConfig): void {
26
+ if (isLocked) {
27
+ throw new Error(
28
+ 'Configuration is already locked and cannot be changed. ' +
29
+ 'Configuration can only be set once during createApp() initialization.'
30
+ );
31
+ }
32
+
33
+ // Deep freeze the configuration to make it truly immutable
34
+ globalConfig = deepFreeze(config);
35
+ isLocked = true;
36
+
37
+ logger.info(
38
+ `Configuration locked and initialized: ${process.env.NODE_ENV || 'development'}:${config.server.port}`
39
+ );
40
+ }
41
+
42
+ /**
43
+ * Get the current global configuration
44
+ * Throws if configuration hasn't been initialized
45
+ */
46
+ export function getGlobalConfig(): Readonly<AppConfig> {
47
+ if (!globalConfig || !isLocked) {
48
+ throw new Error(
49
+ 'Configuration not initialized. Call createApp() to initialize the configuration system.'
50
+ );
51
+ }
52
+ return globalConfig;
53
+ }
54
+
55
+ /**
56
+ * Check if configuration has been initialized and locked
57
+ */
58
+ export function isConfigLocked(): boolean {
59
+ return isLocked && globalConfig !== null;
60
+ }
61
+
62
+ /**
63
+ * Reset configuration state (for testing only)
64
+ * @internal - This should only be used in tests
65
+ */
66
+ export function resetConfigForTesting(): void {
67
+ if (
68
+ process.env.NODE_ENV !== 'test' &&
69
+ !process.env.MORO_ALLOW_CONFIG_RESET &&
70
+ !process.env.JEST_WORKER_ID
71
+ ) {
72
+ throw new Error(
73
+ 'Configuration reset is only allowed in test environments. ' +
74
+ 'Set MORO_ALLOW_CONFIG_RESET=true to override this check.'
75
+ );
76
+ }
77
+
78
+ globalConfig = null;
79
+ isLocked = false;
80
+ logger.debug('Configuration state reset for testing');
81
+ }
82
+
83
+ /**
84
+ * Deep freeze an object to make it truly immutable
85
+ * This prevents any accidental mutations to the configuration
86
+ */
87
+ function deepFreeze<T>(obj: T): Readonly<T> {
88
+ // Get property names
89
+ const propNames = Object.getOwnPropertyNames(obj);
90
+
91
+ // Freeze properties before freezing self
92
+ for (const name of propNames) {
93
+ const value = (obj as any)[name];
94
+
95
+ if (value && typeof value === 'object') {
96
+ deepFreeze(value);
97
+ }
98
+ }
99
+
100
+ return Object.freeze(obj);
101
+ }
102
+
103
+ /**
104
+ * Get a specific configuration value using dot notation
105
+ * This provides a safe way to access nested config values
106
+ *
107
+ * @example
108
+ * getConfigValue('server.port') // Returns the server port
109
+ * getConfigValue('database.redis.url') // Returns the Redis URL
110
+ */
111
+ export function getConfigValue<T = any>(path: string): T | undefined {
112
+ const config = getGlobalConfig();
113
+
114
+ return path.split('.').reduce((obj: any, key: string) => {
115
+ return obj && obj[key] !== undefined ? obj[key] : undefined;
116
+ }, config);
117
+ }
118
+
119
+ /**
120
+ * Utility functions for common environment checks
121
+ * These now read NODE_ENV directly for consistency with Node.js ecosystem
122
+ */
123
+ export function isDevelopment(): boolean {
124
+ return process.env.NODE_ENV === 'development';
125
+ }
126
+
127
+ export function isProduction(): boolean {
128
+ return process.env.NODE_ENV === 'production';
129
+ }
130
+
131
+ export function isStaging(): boolean {
132
+ return process.env.NODE_ENV === 'staging';
133
+ }