@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
@@ -3,9 +3,24 @@
3
3
  export interface ServerConfig {
4
4
  port: number;
5
5
  host: string;
6
- environment: 'development' | 'staging' | 'production';
7
6
  maxConnections: number;
8
7
  timeout: number;
8
+ bodySizeLimit: string;
9
+ requestTracking: {
10
+ enabled: boolean;
11
+ };
12
+ requestLogging: {
13
+ enabled: boolean;
14
+ };
15
+ errorBoundary: {
16
+ enabled: boolean;
17
+ };
18
+ useUWebSockets?: boolean; // Enable uWebSockets for both HTTP and WebSocket
19
+ ssl?: {
20
+ key_file_name?: string;
21
+ cert_file_name?: string;
22
+ passphrase?: string;
23
+ };
9
24
  }
10
25
 
11
26
  export interface ServiceDiscoveryConfig {
@@ -19,7 +34,7 @@ export interface ServiceDiscoveryConfig {
19
34
 
20
35
  export interface DatabaseConfig {
21
36
  url?: string;
22
- redis: {
37
+ redis?: {
23
38
  url: string;
24
39
  maxRetries: number;
25
40
  retryDelay: number;
@@ -35,6 +50,28 @@ export interface DatabaseConfig {
35
50
  acquireTimeout: number;
36
51
  timeout: number;
37
52
  };
53
+ postgresql?: {
54
+ host: string;
55
+ port: number;
56
+ database?: string;
57
+ user?: string;
58
+ password?: string;
59
+ connectionLimit: number;
60
+ ssl?: boolean;
61
+ };
62
+ sqlite?: {
63
+ filename: string;
64
+ memory?: boolean;
65
+ verbose?: boolean;
66
+ };
67
+ mongodb?: {
68
+ url?: string;
69
+ host?: string;
70
+ port?: number;
71
+ database?: string;
72
+ username?: string;
73
+ password?: string;
74
+ };
38
75
  }
39
76
 
40
77
  export interface ModuleDefaultsConfig {
@@ -56,6 +93,18 @@ export interface ModuleDefaultsConfig {
56
93
  stripUnknown: boolean;
57
94
  abortEarly: boolean;
58
95
  };
96
+ autoDiscovery: {
97
+ enabled: boolean;
98
+ paths: string[];
99
+ patterns: string[];
100
+ recursive: boolean;
101
+ loadingStrategy: 'eager' | 'lazy' | 'conditional';
102
+ watchForChanges: boolean;
103
+ ignorePatterns: string[];
104
+ loadOrder: 'alphabetical' | 'dependency' | 'custom';
105
+ failOnError: boolean;
106
+ maxDepth: number;
107
+ };
59
108
  }
60
109
 
61
110
  export interface LoggingConfig {
@@ -141,6 +190,28 @@ export interface PerformanceConfig {
141
190
  clustering: {
142
191
  enabled: boolean;
143
192
  workers: number | 'auto';
193
+ memoryPerWorkerGB?: number;
194
+ };
195
+ }
196
+
197
+ export interface WebSocketConfig {
198
+ enabled: boolean;
199
+ adapter?: string | 'socket.io' | 'ws' | 'uws';
200
+ compression?: boolean;
201
+ customIdGenerator?: () => string;
202
+ options?: {
203
+ cors?: {
204
+ origin?: string | string[];
205
+ credentials?: boolean;
206
+ };
207
+ path?: string;
208
+ maxPayloadLength?: number;
209
+ idleTimeout?: number;
210
+ ssl?: {
211
+ key_file_name?: string;
212
+ cert_file_name?: string;
213
+ passphrase?: string;
214
+ };
144
215
  };
145
216
  }
146
217
 
@@ -154,4 +225,5 @@ export interface AppConfig {
154
225
  security: SecurityConfig;
155
226
  external: ExternalServicesConfig;
156
227
  performance: PerformanceConfig;
228
+ websocket: WebSocketConfig;
157
229
  }
package/src/types/core.ts CHANGED
@@ -1,56 +1,58 @@
1
1
  // Core Framework Types
2
- import { RuntimeConfig } from './runtime';
3
- import { LogLevel, LoggerOptions } from './logger';
2
+ import { RuntimeConfig } from './runtime.js';
3
+ import { LogLevel, LoggerOptions } from './logger.js';
4
+ import { AppConfig } from './config.js';
4
5
 
5
6
  export interface MoroOptions {
6
- autoDiscover?: boolean;
7
- modulesPath?: string;
7
+ autoDiscover?:
8
+ | boolean
9
+ | {
10
+ enabled?: boolean;
11
+ paths?: string[];
12
+ patterns?: string[];
13
+ recursive?: boolean;
14
+ loadingStrategy?: 'eager' | 'lazy' | 'conditional';
15
+ watchForChanges?: boolean;
16
+ ignorePatterns?: string[];
17
+ loadOrder?: 'alphabetical' | 'dependency' | 'custom';
18
+ failOnError?: boolean;
19
+ maxDepth?: number;
20
+ };
21
+ modulesPath?: string; // Deprecated: use autoDiscover.paths instead
8
22
  middleware?: any[];
9
- database?: any;
23
+
24
+ // Runtime configuration
25
+ runtime?: RuntimeConfig;
26
+
27
+ // HTTP/WebSocket options
28
+ http2?: boolean;
29
+ https?: {
30
+ key: string | Buffer;
31
+ cert: string | Buffer;
32
+ ca?: string | Buffer;
33
+ };
34
+ websocket?:
35
+ | {
36
+ enabled?: boolean;
37
+ adapter?: any;
38
+ compression?: boolean;
39
+ customIdGenerator?: () => string;
40
+ options?: any;
41
+ }
42
+ | false;
43
+
44
+ // Simplified config options (these map to the full config)
10
45
  cors?: boolean | object;
11
46
  compression?: boolean | object;
12
47
  helmet?: boolean | object;
13
- // Runtime configuration
14
- runtime?: RuntimeConfig;
15
- // Logger configuration
16
48
  logger?: LoggerOptions | boolean;
17
- // Module configuration
18
- modules?: {
19
- cache?: {
20
- enabled?: boolean;
21
- defaultTtl?: number;
22
- maxSize?: number;
23
- strategy?: 'lru' | 'lfu' | 'fifo';
24
- };
25
- rateLimit?: {
26
- enabled?: boolean;
27
- defaultRequests?: number;
28
- defaultWindow?: number;
29
- skipSuccessfulRequests?: boolean;
30
- skipFailedRequests?: boolean;
31
- };
32
- validation?: {
33
- enabled?: boolean;
34
- stripUnknown?: boolean;
35
- abortEarly?: boolean;
36
- };
37
- };
38
- // Performance configuration
39
- performance?: {
40
- clustering?: {
41
- enabled?: boolean;
42
- workers?: number | 'auto';
43
- };
44
- compression?: {
45
- enabled?: boolean;
46
- level?: number;
47
- threshold?: number;
48
- };
49
- circuitBreaker?: {
50
- enabled?: boolean;
51
- failureThreshold?: number;
52
- resetTimeout?: number;
53
- monitoringPeriod?: number;
54
- };
55
- };
49
+
50
+ // Direct config overrides (partial)
51
+ server?: Partial<AppConfig['server']>;
52
+ database?: Partial<AppConfig['database']>;
53
+ modules?: Partial<AppConfig['modules']>;
54
+ logging?: Partial<AppConfig['logging']>;
55
+ security?: Partial<AppConfig['security']>;
56
+ external?: Partial<AppConfig['external']>;
57
+ performance?: Partial<AppConfig['performance']>;
56
58
  }
@@ -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
 
package/src/types/http.ts CHANGED
@@ -22,9 +22,20 @@ export interface CookieOptions {
22
22
  sameSite?: 'strict' | 'lax' | 'none';
23
23
  domain?: string;
24
24
  path?: string;
25
+ // Security options
26
+ critical?: boolean; // Mark as critical for security (throws on late set)
27
+ throwOnLateSet?: boolean; // Force throw if headers already sent
25
28
  }
26
29
 
27
- export interface HttpResponse extends ServerResponse {
30
+ export interface ResponseState {
31
+ headersSent: boolean;
32
+ statusCode: number;
33
+ headers: Record<string, any>;
34
+ finished: boolean;
35
+ writable: boolean;
36
+ }
37
+
38
+ export interface MoroResponseMethods {
28
39
  json(data: any): void;
29
40
  status(code: number): HttpResponse;
30
41
  send(data: string | Buffer): void;
@@ -33,8 +44,19 @@ export interface HttpResponse extends ServerResponse {
33
44
  redirect(url: string, status?: number): void;
34
45
  sendFile(filePath: string): Promise<void>;
35
46
  render?(template: string, data?: any): Promise<void>;
47
+
48
+ // Header management utilities
49
+ hasHeader(name: string): boolean;
50
+ setBulkHeaders(headers: Record<string, string | number>): HttpResponse;
51
+ appendHeader(name: string, value: string | string[]): HttpResponse;
52
+
53
+ // Response state utilities
54
+ canSetHeaders(): boolean;
55
+ getResponseState(): ResponseState;
36
56
  }
37
57
 
58
+ export type HttpResponse = ServerResponse & MoroResponseMethods;
59
+
38
60
  export type HttpHandler = (req: HttpRequest, res: HttpResponse) => Promise<void> | void;
39
61
  export type Middleware = (
40
62
  req: HttpRequest,
@@ -30,6 +30,7 @@ export interface LoggerOptions {
30
30
  outputs?: LogOutput[];
31
31
  filters?: LogFilter[];
32
32
  maxEntries?: number;
33
+ maxBufferSize?: number;
33
34
  }
34
35
 
35
36
  export interface LogOutput {
@@ -60,11 +61,17 @@ export interface Logger {
60
61
 
61
62
  // Configuration
62
63
  setLevel(level: LogLevel): void;
64
+ getLevel(): LogLevel;
63
65
  addOutput(output: LogOutput): void;
64
66
  removeOutput(name: string): void;
65
67
  addFilter(filter: LogFilter): void;
66
68
  removeFilter(name: string): void;
67
69
 
70
+ // Cleanup
71
+ flush(): void;
72
+ flushBuffer(): void;
73
+ destroy(): void;
74
+
68
75
  // Metrics and history
69
76
  getHistory(count?: number): LogEntry[];
70
77
  getMetrics(): LogMetrics;
@@ -78,6 +85,7 @@ export interface LogMetrics {
78
85
  averageLogRate: number;
79
86
  errorRate: number;
80
87
  memoryUsage: number;
88
+ outputErrors?: Record<string, number>;
81
89
  }
82
90
 
83
91
  export interface ColorScheme {
@@ -90,4 +98,5 @@ export interface ColorScheme {
90
98
  context: string;
91
99
  metadata: string;
92
100
  performance: string;
101
+ reset: string;
93
102
  }
@@ -7,6 +7,11 @@ export interface ModuleRoute {
7
7
  cache?: { ttl: number; key?: string };
8
8
  rateLimit?: { requests: number; window: number };
9
9
  middleware?: string[];
10
+ auth?: {
11
+ roles?: string[];
12
+ permissions?: string[];
13
+ optional?: boolean;
14
+ };
10
15
  }
11
16
 
12
17
  export interface ModuleSocket {
@@ -57,6 +62,13 @@ export interface InternalRouteDefinition {
57
62
  validation?: any;
58
63
  cache?: CacheConfig;
59
64
  rateLimit?: RateLimitConfig;
65
+ auth?: {
66
+ roles?: string[];
67
+ permissions?: string[];
68
+ optional?: boolean;
69
+ };
70
+ // Allow additional properties for extensibility
71
+ [key: string]: any;
60
72
  }
61
73
 
62
74
  export interface WebSocketDefinition {
@@ -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"]
@@ -1,7 +0,0 @@
1
- import { AppConfig } from './schema';
2
- /**
3
- * Load and validate configuration from config files and environment variables
4
- * Priority: Environment Variables > Config File > Schema Defaults
5
- * @returns Validated and typed application configuration
6
- */
7
- export declare function loadConfig(): AppConfig;
@@ -1,269 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadConfig = loadConfig;
4
- // Configuration Loader - Environment Variable Mapping and Validation
5
- const schema_1 = require("./schema");
6
- const validation_1 = require("./validation");
7
- const logger_1 = require("../logger");
8
- const file_loader_1 = require("./file-loader");
9
- const logger = (0, logger_1.createFrameworkLogger)('Config');
10
- /**
11
- * Load and validate configuration from config files and environment variables
12
- * Priority: Environment Variables > Config File > Schema Defaults
13
- * @returns Validated and typed application configuration
14
- */
15
- function loadConfig() {
16
- logger.debug('Loading configuration with TypeScript validation');
17
- // First, try to load from config file and apply as environment variables
18
- try {
19
- const fileConfig = (0, file_loader_1.loadConfigFileSync)();
20
- if (fileConfig) {
21
- logger.debug('Applying config file values as environment variables');
22
- (0, file_loader_1.applyConfigAsEnvironmentVariables)(fileConfig);
23
- }
24
- }
25
- catch (error) {
26
- logger.warn('Config file loading failed, continuing with environment variables only:', String(error));
27
- }
28
- try {
29
- // Build configuration using robust validation functions
30
- const config = {
31
- server: {
32
- port: (0, validation_1.validatePort)((0, validation_1.coerceEnvValue)(process.env.PORT || process.env.MORO_PORT || '') ||
33
- schema_1.DEFAULT_CONFIG.server.port, 'server.port'),
34
- host: (0, validation_1.validateString)(process.env.HOST || process.env.MORO_HOST || schema_1.DEFAULT_CONFIG.server.host, 'server.host'),
35
- environment: (0, validation_1.validateEnum)(process.env.NODE_ENV || process.env.MORO_ENV || schema_1.DEFAULT_CONFIG.server.environment, ['development', 'staging', 'production'], 'server.environment'),
36
- maxConnections: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.MAX_CONNECTIONS || process.env.MORO_MAX_CONNECTIONS || '') ||
37
- schema_1.DEFAULT_CONFIG.server.maxConnections, 'server.maxConnections', { min: 1 }),
38
- timeout: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.REQUEST_TIMEOUT || process.env.MORO_TIMEOUT || '') ||
39
- schema_1.DEFAULT_CONFIG.server.timeout, 'server.timeout', { min: 1000 }),
40
- },
41
- serviceDiscovery: {
42
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.SERVICE_DISCOVERY_ENABLED || process.env.MORO_SERVICE_DISCOVERY || '') ?? schema_1.DEFAULT_CONFIG.serviceDiscovery.enabled, 'serviceDiscovery.enabled'),
43
- type: (0, validation_1.validateEnum)(process.env.DISCOVERY_TYPE ||
44
- process.env.MORO_DISCOVERY_TYPE ||
45
- schema_1.DEFAULT_CONFIG.serviceDiscovery.type, ['memory', 'consul', 'kubernetes'], 'serviceDiscovery.type'),
46
- consulUrl: (0, validation_1.validateUrl)(process.env.CONSUL_URL ||
47
- process.env.MORO_CONSUL_URL ||
48
- schema_1.DEFAULT_CONFIG.serviceDiscovery.consulUrl, 'serviceDiscovery.consulUrl'),
49
- kubernetesNamespace: (0, validation_1.validateString)(process.env.KUBERNETES_NAMESPACE ||
50
- process.env.MORO_KUBERNETES_NAMESPACE ||
51
- schema_1.DEFAULT_CONFIG.serviceDiscovery.kubernetesNamespace, 'serviceDiscovery.kubernetesNamespace'),
52
- healthCheckInterval: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.HEALTH_CHECK_INTERVAL || process.env.MORO_HEALTH_CHECK_INTERVAL || '') || schema_1.DEFAULT_CONFIG.serviceDiscovery.healthCheckInterval, 'serviceDiscovery.healthCheckInterval', { min: 1000 }),
53
- retryAttempts: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.RETRY_ATTEMPTS || process.env.MORO_RETRY_ATTEMPTS || '') ||
54
- schema_1.DEFAULT_CONFIG.serviceDiscovery.retryAttempts, 'serviceDiscovery.retryAttempts', { min: 0 }),
55
- },
56
- database: {
57
- url: (0, validation_1.validateOptional)(process.env.DATABASE_URL, validation_1.validateString, 'database.url'),
58
- redis: {
59
- url: (0, validation_1.validateString)(process.env.REDIS_URL ||
60
- process.env.MORO_REDIS_URL ||
61
- schema_1.DEFAULT_CONFIG.database.redis.url, 'database.redis.url'),
62
- maxRetries: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.REDIS_MAX_RETRIES || process.env.MORO_REDIS_RETRIES || '') ||
63
- schema_1.DEFAULT_CONFIG.database.redis.maxRetries, 'database.redis.maxRetries', { min: 0 }),
64
- retryDelay: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.REDIS_RETRY_DELAY || process.env.MORO_REDIS_DELAY || '') ||
65
- schema_1.DEFAULT_CONFIG.database.redis.retryDelay, 'database.redis.retryDelay', { min: 100 }),
66
- keyPrefix: (0, validation_1.validateString)(process.env.REDIS_KEY_PREFIX ||
67
- process.env.MORO_REDIS_PREFIX ||
68
- schema_1.DEFAULT_CONFIG.database.redis.keyPrefix, 'database.redis.keyPrefix'),
69
- },
70
- mysql: process.env.MYSQL_HOST
71
- ? {
72
- host: (0, validation_1.validateString)(process.env.MYSQL_HOST, 'database.mysql.host'),
73
- port: (0, validation_1.validatePort)(process.env.MYSQL_PORT || process.env.MORO_MYSQL_PORT || '3306', 'database.mysql.port'),
74
- database: (0, validation_1.validateOptional)(process.env.MYSQL_DATABASE || process.env.MORO_MYSQL_DB, validation_1.validateString, 'database.mysql.database'),
75
- username: (0, validation_1.validateOptional)(process.env.MYSQL_USERNAME || process.env.MORO_MYSQL_USER, validation_1.validateString, 'database.mysql.username'),
76
- password: (0, validation_1.validateOptional)(process.env.MYSQL_PASSWORD || process.env.MORO_MYSQL_PASS, validation_1.validateString, 'database.mysql.password'),
77
- connectionLimit: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.MYSQL_CONNECTION_LIMIT || process.env.MORO_MYSQL_CONNECTIONS || '') || 10, 'database.mysql.connectionLimit', { min: 1 }),
78
- acquireTimeout: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.MYSQL_ACQUIRE_TIMEOUT || process.env.MORO_MYSQL_ACQUIRE_TIMEOUT || '') || 60000, 'database.mysql.acquireTimeout', { min: 1000 }),
79
- timeout: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.MYSQL_TIMEOUT || process.env.MORO_MYSQL_TIMEOUT || '') ||
80
- 60000, 'database.mysql.timeout', { min: 1000 }),
81
- }
82
- : undefined,
83
- },
84
- modules: {
85
- cache: {
86
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.CACHE_ENABLED || process.env.MORO_CACHE_ENABLED || '') ??
87
- schema_1.DEFAULT_CONFIG.modules.cache.enabled, 'modules.cache.enabled'),
88
- defaultTtl: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.CACHE_TTL || process.env.MORO_CACHE_TTL || '') ||
89
- schema_1.DEFAULT_CONFIG.modules.cache.defaultTtl, 'modules.cache.defaultTtl', { min: 0 }),
90
- maxSize: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.CACHE_MAX_SIZE || process.env.MORO_CACHE_MAX_SIZE || '') ||
91
- schema_1.DEFAULT_CONFIG.modules.cache.maxSize, 'modules.cache.maxSize', { min: 1 }),
92
- strategy: (0, validation_1.validateEnum)(process.env.CACHE_STRATEGY ||
93
- process.env.MORO_CACHE_STRATEGY ||
94
- schema_1.DEFAULT_CONFIG.modules.cache.strategy, ['lru', 'lfu', 'fifo'], 'modules.cache.strategy'),
95
- },
96
- rateLimit: {
97
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.RATE_LIMIT_ENABLED || process.env.MORO_RATE_LIMIT_ENABLED || '') ?? schema_1.DEFAULT_CONFIG.modules.rateLimit.enabled, 'modules.rateLimit.enabled'),
98
- defaultRequests: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.RATE_LIMIT_REQUESTS || process.env.MORO_RATE_LIMIT_REQUESTS || '') || schema_1.DEFAULT_CONFIG.modules.rateLimit.defaultRequests, 'modules.rateLimit.defaultRequests', { min: 1 }),
99
- defaultWindow: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.RATE_LIMIT_WINDOW || process.env.MORO_RATE_LIMIT_WINDOW || '') || schema_1.DEFAULT_CONFIG.modules.rateLimit.defaultWindow, 'modules.rateLimit.defaultWindow', { min: 1000 }),
100
- skipSuccessfulRequests: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.RATE_LIMIT_SKIP_SUCCESS || process.env.MORO_RATE_LIMIT_SKIP_SUCCESS || '') ?? schema_1.DEFAULT_CONFIG.modules.rateLimit.skipSuccessfulRequests, 'modules.rateLimit.skipSuccessfulRequests'),
101
- skipFailedRequests: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.RATE_LIMIT_SKIP_FAILED || process.env.MORO_RATE_LIMIT_SKIP_FAILED || '') ?? schema_1.DEFAULT_CONFIG.modules.rateLimit.skipFailedRequests, 'modules.rateLimit.skipFailedRequests'),
102
- },
103
- validation: {
104
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.VALIDATION_ENABLED || process.env.MORO_VALIDATION_ENABLED || '') ?? schema_1.DEFAULT_CONFIG.modules.validation.enabled, 'modules.validation.enabled'),
105
- stripUnknown: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.VALIDATION_STRIP_UNKNOWN ||
106
- process.env.MORO_VALIDATION_STRIP_UNKNOWN ||
107
- '') ?? schema_1.DEFAULT_CONFIG.modules.validation.stripUnknown, 'modules.validation.stripUnknown'),
108
- abortEarly: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.VALIDATION_ABORT_EARLY || process.env.MORO_VALIDATION_ABORT_EARLY || '') ?? schema_1.DEFAULT_CONFIG.modules.validation.abortEarly, 'modules.validation.abortEarly'),
109
- },
110
- },
111
- logging: {
112
- level: (0, validation_1.validateEnum)(process.env.LOG_LEVEL || process.env.MORO_LOG_LEVEL || schema_1.DEFAULT_CONFIG.logging.level, ['debug', 'info', 'warn', 'error', 'fatal'], 'logging.level'),
113
- format: (0, validation_1.validateEnum)(process.env.LOG_FORMAT || process.env.MORO_LOG_FORMAT || schema_1.DEFAULT_CONFIG.logging.format, ['pretty', 'json', 'compact'], 'logging.format'),
114
- enableColors: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.LOG_COLORS || process.env.MORO_LOG_COLORS || '') ??
115
- schema_1.DEFAULT_CONFIG.logging.enableColors, 'logging.enableColors'),
116
- enableTimestamp: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.LOG_TIMESTAMP || process.env.MORO_LOG_TIMESTAMP || '') ??
117
- schema_1.DEFAULT_CONFIG.logging.enableTimestamp, 'logging.enableTimestamp'),
118
- enableContext: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.LOG_CONTEXT || process.env.MORO_LOG_CONTEXT || '') ??
119
- schema_1.DEFAULT_CONFIG.logging.enableContext, 'logging.enableContext'),
120
- outputs: {
121
- console: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.LOG_CONSOLE || process.env.MORO_LOG_CONSOLE || '') ??
122
- schema_1.DEFAULT_CONFIG.logging.outputs.console, 'logging.outputs.console'),
123
- file: {
124
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.LOG_FILE_ENABLED || process.env.MORO_LOG_FILE_ENABLED || '') ?? schema_1.DEFAULT_CONFIG.logging.outputs.file.enabled, 'logging.outputs.file.enabled'),
125
- path: (0, validation_1.validateString)(process.env.LOG_FILE_PATH ||
126
- process.env.MORO_LOG_FILE_PATH ||
127
- schema_1.DEFAULT_CONFIG.logging.outputs.file.path, 'logging.outputs.file.path'),
128
- maxSize: (0, validation_1.validateString)(process.env.LOG_FILE_MAX_SIZE ||
129
- process.env.MORO_LOG_FILE_MAX_SIZE ||
130
- schema_1.DEFAULT_CONFIG.logging.outputs.file.maxSize, 'logging.outputs.file.maxSize'),
131
- maxFiles: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.LOG_FILE_MAX_FILES || process.env.MORO_LOG_FILE_MAX_FILES || '') || schema_1.DEFAULT_CONFIG.logging.outputs.file.maxFiles, 'logging.outputs.file.maxFiles', { min: 1 }),
132
- },
133
- webhook: {
134
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.LOG_WEBHOOK_ENABLED || process.env.MORO_LOG_WEBHOOK_ENABLED || '') ?? schema_1.DEFAULT_CONFIG.logging.outputs.webhook.enabled, 'logging.outputs.webhook.enabled'),
135
- url: (0, validation_1.validateOptional)(process.env.LOG_WEBHOOK_URL || process.env.MORO_LOG_WEBHOOK_URL, validation_1.validateUrl, 'logging.outputs.webhook.url'),
136
- headers: schema_1.DEFAULT_CONFIG.logging.outputs.webhook.headers,
137
- },
138
- },
139
- },
140
- security: {
141
- cors: {
142
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.CORS_ENABLED || process.env.MORO_CORS_ENABLED || '') ??
143
- schema_1.DEFAULT_CONFIG.security.cors.enabled, 'security.cors.enabled'),
144
- origin: process.env.CORS_ORIGIN ||
145
- process.env.MORO_CORS_ORIGIN ||
146
- schema_1.DEFAULT_CONFIG.security.cors.origin,
147
- methods: (0, validation_1.validateStringArray)(process.env.CORS_METHODS ||
148
- process.env.MORO_CORS_METHODS ||
149
- schema_1.DEFAULT_CONFIG.security.cors.methods, 'security.cors.methods'),
150
- allowedHeaders: (0, validation_1.validateStringArray)(process.env.CORS_HEADERS ||
151
- process.env.MORO_CORS_HEADERS ||
152
- schema_1.DEFAULT_CONFIG.security.cors.allowedHeaders, 'security.cors.allowedHeaders'),
153
- credentials: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.CORS_CREDENTIALS || process.env.MORO_CORS_CREDENTIALS || '') ?? schema_1.DEFAULT_CONFIG.security.cors.credentials, 'security.cors.credentials'),
154
- },
155
- helmet: {
156
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.HELMET_ENABLED || process.env.MORO_HELMET_ENABLED || '') ??
157
- schema_1.DEFAULT_CONFIG.security.helmet.enabled, 'security.helmet.enabled'),
158
- contentSecurityPolicy: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.HELMET_CSP || process.env.MORO_HELMET_CSP || '') ??
159
- schema_1.DEFAULT_CONFIG.security.helmet.contentSecurityPolicy, 'security.helmet.contentSecurityPolicy'),
160
- hsts: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.HELMET_HSTS || process.env.MORO_HELMET_HSTS || '') ??
161
- schema_1.DEFAULT_CONFIG.security.helmet.hsts, 'security.helmet.hsts'),
162
- noSniff: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.HELMET_NO_SNIFF || process.env.MORO_HELMET_NO_SNIFF || '') ??
163
- schema_1.DEFAULT_CONFIG.security.helmet.noSniff, 'security.helmet.noSniff'),
164
- frameguard: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.HELMET_FRAMEGUARD || process.env.MORO_HELMET_FRAMEGUARD || '') ?? schema_1.DEFAULT_CONFIG.security.helmet.frameguard, 'security.helmet.frameguard'),
165
- },
166
- rateLimit: {
167
- global: {
168
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.GLOBAL_RATE_LIMIT_ENABLED ||
169
- process.env.MORO_GLOBAL_RATE_LIMIT_ENABLED ||
170
- '') ?? schema_1.DEFAULT_CONFIG.security.rateLimit.global.enabled, 'security.rateLimit.global.enabled'),
171
- requests: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.GLOBAL_RATE_LIMIT_REQUESTS ||
172
- process.env.MORO_GLOBAL_RATE_LIMIT_REQUESTS ||
173
- '') || schema_1.DEFAULT_CONFIG.security.rateLimit.global.requests, 'security.rateLimit.global.requests', { min: 1 }),
174
- window: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.GLOBAL_RATE_LIMIT_WINDOW ||
175
- process.env.MORO_GLOBAL_RATE_LIMIT_WINDOW ||
176
- '') || schema_1.DEFAULT_CONFIG.security.rateLimit.global.window, 'security.rateLimit.global.window', { min: 1000 }),
177
- },
178
- },
179
- },
180
- external: {
181
- stripe: {
182
- secretKey: (0, validation_1.validateOptional)(process.env.STRIPE_SECRET_KEY, validation_1.validateString, 'external.stripe.secretKey'),
183
- publishableKey: (0, validation_1.validateOptional)(process.env.STRIPE_PUBLISHABLE_KEY, validation_1.validateString, 'external.stripe.publishableKey'),
184
- webhookSecret: (0, validation_1.validateOptional)(process.env.STRIPE_WEBHOOK_SECRET, validation_1.validateString, 'external.stripe.webhookSecret'),
185
- apiVersion: (0, validation_1.validateString)(process.env.STRIPE_API_VERSION ||
186
- schema_1.DEFAULT_CONFIG.external.stripe?.apiVersion ||
187
- '2023-10-16', 'external.stripe.apiVersion'),
188
- },
189
- paypal: {
190
- clientId: (0, validation_1.validateOptional)(process.env.PAYPAL_CLIENT_ID, validation_1.validateString, 'external.paypal.clientId'),
191
- clientSecret: (0, validation_1.validateOptional)(process.env.PAYPAL_CLIENT_SECRET, validation_1.validateString, 'external.paypal.clientSecret'),
192
- webhookId: (0, validation_1.validateOptional)(process.env.PAYPAL_WEBHOOK_ID, validation_1.validateString, 'external.paypal.webhookId'),
193
- environment: (0, validation_1.validateEnum)(process.env.PAYPAL_ENVIRONMENT ||
194
- schema_1.DEFAULT_CONFIG.external.paypal?.environment ||
195
- 'sandbox', ['sandbox', 'production'], 'external.paypal.environment'),
196
- },
197
- smtp: {
198
- host: (0, validation_1.validateOptional)(process.env.SMTP_HOST, validation_1.validateString, 'external.smtp.host'),
199
- port: (0, validation_1.validatePort)(process.env.SMTP_PORT || (schema_1.DEFAULT_CONFIG.external.smtp?.port || 587).toString(), 'external.smtp.port'),
200
- secure: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.SMTP_SECURE || '') ??
201
- (schema_1.DEFAULT_CONFIG.external.smtp?.secure || false), 'external.smtp.secure'),
202
- username: (0, validation_1.validateOptional)(process.env.SMTP_USERNAME, validation_1.validateString, 'external.smtp.username'),
203
- password: (0, validation_1.validateOptional)(process.env.SMTP_PASSWORD, validation_1.validateString, 'external.smtp.password'),
204
- },
205
- },
206
- performance: {
207
- compression: {
208
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.COMPRESSION_ENABLED || process.env.MORO_COMPRESSION_ENABLED || '') ?? schema_1.DEFAULT_CONFIG.performance.compression.enabled, 'performance.compression.enabled'),
209
- level: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.COMPRESSION_LEVEL || process.env.MORO_COMPRESSION_LEVEL || '') || schema_1.DEFAULT_CONFIG.performance.compression.level, 'performance.compression.level', { min: 1, max: 9 }),
210
- threshold: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.COMPRESSION_THRESHOLD || process.env.MORO_COMPRESSION_THRESHOLD || '') || schema_1.DEFAULT_CONFIG.performance.compression.threshold, 'performance.compression.threshold', { min: 0 }),
211
- },
212
- circuitBreaker: {
213
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.CIRCUIT_BREAKER_ENABLED || process.env.MORO_CIRCUIT_BREAKER_ENABLED || '') ?? schema_1.DEFAULT_CONFIG.performance.circuitBreaker.enabled, 'performance.circuitBreaker.enabled'),
214
- failureThreshold: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.CIRCUIT_BREAKER_THRESHOLD ||
215
- process.env.MORO_CIRCUIT_BREAKER_THRESHOLD ||
216
- '') || schema_1.DEFAULT_CONFIG.performance.circuitBreaker.failureThreshold, 'performance.circuitBreaker.failureThreshold', { min: 1 }),
217
- resetTimeout: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.CIRCUIT_BREAKER_RESET || process.env.MORO_CIRCUIT_BREAKER_RESET || '') || schema_1.DEFAULT_CONFIG.performance.circuitBreaker.resetTimeout, 'performance.circuitBreaker.resetTimeout', { min: 1000 }),
218
- monitoringPeriod: (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.CIRCUIT_BREAKER_MONITOR || process.env.MORO_CIRCUIT_BREAKER_MONITOR || '') || schema_1.DEFAULT_CONFIG.performance.circuitBreaker.monitoringPeriod, 'performance.circuitBreaker.monitoringPeriod', { min: 1000 }),
219
- },
220
- clustering: {
221
- enabled: (0, validation_1.validateBoolean)((0, validation_1.coerceEnvValue)(process.env.CLUSTERING_ENABLED || process.env.MORO_CLUSTERING_ENABLED || '') ?? schema_1.DEFAULT_CONFIG.performance.clustering.enabled, 'performance.clustering.enabled'),
222
- workers: process.env.CLUSTER_WORKERS === 'auto' || process.env.MORO_CLUSTER_WORKERS === 'auto'
223
- ? 'auto'
224
- : (0, validation_1.validateNumber)((0, validation_1.coerceEnvValue)(process.env.CLUSTER_WORKERS || process.env.MORO_CLUSTER_WORKERS || '') || schema_1.DEFAULT_CONFIG.performance.clustering.workers, 'performance.clustering.workers', { min: 1 }),
225
- },
226
- },
227
- };
228
- logger.info('Configuration loaded and validated successfully with TypeScript');
229
- logger.debug('Configuration summary:', JSON.stringify({
230
- server: { port: config.server.port, environment: config.server.environment },
231
- serviceDiscovery: {
232
- enabled: config.serviceDiscovery.enabled,
233
- type: config.serviceDiscovery.type,
234
- },
235
- modules: {
236
- cache: config.modules.cache.enabled,
237
- rateLimit: config.modules.rateLimit.enabled,
238
- validation: config.modules.validation.enabled,
239
- },
240
- }));
241
- return config;
242
- }
243
- catch (error) {
244
- logger.error('❌ Configuration validation failed');
245
- if (error instanceof validation_1.ConfigValidationError) {
246
- logger.error(`Configuration error in '${error.field}': ${error.message}`);
247
- logger.error(` Value: ${JSON.stringify(error.value)}`);
248
- // Provide helpful hints
249
- if (error.field.includes('port')) {
250
- logger.error(' Hint: Ports must be numbers between 1 and 65535');
251
- }
252
- if (error.field.includes('url')) {
253
- logger.error(' Hint: URLs must include protocol (http:// or https://)');
254
- }
255
- if (error.field.includes('environment')) {
256
- logger.error(' Hint: NODE_ENV must be one of: development, staging, production');
257
- }
258
- }
259
- else {
260
- logger.error('Unexpected configuration error:', String(error));
261
- }
262
- logger.error('\nConfiguration Help:');
263
- logger.error(' - Use MORO_* prefixed environment variables for framework-specific config');
264
- logger.error(' - Check .env.example for available configuration options');
265
- logger.error(' - See documentation for detailed configuration guide');
266
- process.exit(1);
267
- }
268
- }
269
- //# sourceMappingURL=loader.js.map