@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
@@ -1,11 +1,16 @@
1
1
  // Configuration File Loader - Load moro.config.js/ts files
2
2
  import { existsSync } from 'fs';
3
3
  import { join } from 'path';
4
- import { AppConfig } from './schema';
5
- import { createFrameworkLogger } from '../logger';
4
+ import { createRequire } from 'module';
5
+ import { AppConfig } from './schema.js';
6
+ import { createFrameworkLogger } from '../logger/index.js';
6
7
 
7
8
  const logger = createFrameworkLogger('ConfigFile');
8
9
 
10
+ // Create require function for ESM to enable synchronous config loading
11
+ // Use process.cwd() as base since we're loading with absolute paths anyway
12
+ const moduleRequire = createRequire(join(process.cwd(), 'index.js'));
13
+
9
14
  /**
10
15
  * Supported configuration file names in order of preference
11
16
  */
@@ -23,55 +28,26 @@ export function loadConfigFileSync(cwd: string = process.cwd()): Partial<AppConf
23
28
  logger.debug('No configuration file found');
24
29
  return null;
25
30
  }
26
- // Handle TypeScript files by trying dynamic import (works with tsx/ts-node runtimes)
27
- if (configFile.endsWith('.ts')) {
28
- logger.debug('Found TypeScript config file, attempting to load with dynamic import');
29
- try {
30
- // When running under tsx/ts-node, dynamic imports work synchronously for TypeScript
31
- // We can use require() with the current environment that already has TypeScript support
32
- const config = require(configFile);
33
- const configData = config.default || config;
34
-
35
- if (!configData || typeof configData !== 'object') {
36
- logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
37
- return null;
38
- }
39
-
40
- logger.info(`TypeScript configuration loaded from: ${configFile}`);
41
- return configData;
42
- } catch (error) {
43
- logger.debug(
44
- 'TypeScript config loading failed in sync mode, this is expected if not running with tsx/ts-node'
45
- );
46
- logger.debug('Error details:', String(error));
47
- return null;
48
- }
49
- }
50
-
51
- // Only .js files use the standard synchronous loading
52
- if (!configFile.endsWith('.js')) {
53
- logger.debug(
54
- 'Found config file with unsupported extension. Only .js and .ts files are supported.'
55
- );
56
- return null;
57
- }
58
31
 
59
32
  logger.debug(`Loading configuration from: ${configFile}`);
60
33
 
61
34
  try {
62
- // Clear module cache to ensure fresh load
63
- delete require.cache[require.resolve(configFile)];
35
+ // Use createRequire to enable synchronous loading in ESM
36
+ // Clear the require cache to ensure fresh config on each load
37
+ delete moduleRequire.cache[moduleRequire.resolve(configFile)];
64
38
 
65
- const config = require(configFile);
66
- const configData = config.default || config;
39
+ const configModule = moduleRequire(configFile);
67
40
 
68
- if (!configData || typeof configData !== 'object') {
41
+ // Handle ES module default export
42
+ const config = configModule.default || configModule;
43
+
44
+ if (!config || typeof config !== 'object') {
69
45
  logger.warn(`Configuration file ${configFile} did not export a valid configuration object`);
70
46
  return null;
71
47
  }
72
48
 
73
49
  logger.info(`Configuration loaded from: ${configFile}`);
74
- return configData;
50
+ return config;
75
51
  } catch (error) {
76
52
  logger.error(`Failed to load configuration file ${configFile}:`, String(error));
77
53
  logger.warn('Falling back to environment variable configuration');
@@ -172,236 +148,3 @@ async function setupTypeScriptLoader(): Promise<void> {
172
148
  // the TypeScript transpilation is already handled by those tools.
173
149
  logger.debug('TypeScript config loading delegated to runtime environment');
174
150
  }
175
-
176
- /**
177
- * Convert a configuration object to environment variable mappings
178
- * This function flattens the config object and sets corresponding environment variables
179
- */
180
- export function applyConfigAsEnvironmentVariables(config: Partial<AppConfig>): void {
181
- if (!config || typeof config !== 'object') {
182
- return;
183
- }
184
-
185
- // Apply server configuration
186
- if (config.server) {
187
- setEnvIfNotSet('PORT', config.server.port?.toString());
188
- setEnvIfNotSet('HOST', config.server.host);
189
- setEnvIfNotSet('NODE_ENV', config.server.environment);
190
- setEnvIfNotSet('MAX_CONNECTIONS', config.server.maxConnections?.toString());
191
- setEnvIfNotSet('REQUEST_TIMEOUT', config.server.timeout?.toString());
192
- }
193
-
194
- // Apply database configuration
195
- if (config.database) {
196
- setEnvIfNotSet('DATABASE_URL', config.database.url);
197
-
198
- if (config.database.redis) {
199
- setEnvIfNotSet('REDIS_URL', config.database.redis.url);
200
- setEnvIfNotSet('REDIS_MAX_RETRIES', config.database.redis.maxRetries?.toString());
201
- setEnvIfNotSet('REDIS_RETRY_DELAY', config.database.redis.retryDelay?.toString());
202
- setEnvIfNotSet('REDIS_KEY_PREFIX', config.database.redis.keyPrefix);
203
- }
204
-
205
- if (config.database.mysql) {
206
- setEnvIfNotSet('MYSQL_HOST', config.database.mysql.host);
207
- setEnvIfNotSet('MYSQL_PORT', config.database.mysql.port?.toString());
208
- setEnvIfNotSet('MYSQL_DATABASE', config.database.mysql.database);
209
- setEnvIfNotSet('MYSQL_USERNAME', config.database.mysql.username);
210
- setEnvIfNotSet('MYSQL_PASSWORD', config.database.mysql.password);
211
- setEnvIfNotSet('MYSQL_CONNECTION_LIMIT', config.database.mysql.connectionLimit?.toString());
212
- setEnvIfNotSet('MYSQL_ACQUIRE_TIMEOUT', config.database.mysql.acquireTimeout?.toString());
213
- setEnvIfNotSet('MYSQL_TIMEOUT', config.database.mysql.timeout?.toString());
214
- }
215
- }
216
-
217
- // Apply service discovery configuration
218
- if (config.serviceDiscovery) {
219
- setEnvIfNotSet('SERVICE_DISCOVERY_ENABLED', config.serviceDiscovery.enabled?.toString());
220
- setEnvIfNotSet('DISCOVERY_TYPE', config.serviceDiscovery.type);
221
- setEnvIfNotSet('CONSUL_URL', config.serviceDiscovery.consulUrl);
222
- setEnvIfNotSet('K8S_NAMESPACE', config.serviceDiscovery.kubernetesNamespace);
223
- setEnvIfNotSet(
224
- 'HEALTH_CHECK_INTERVAL',
225
- config.serviceDiscovery.healthCheckInterval?.toString()
226
- );
227
- setEnvIfNotSet('DISCOVERY_RETRY_ATTEMPTS', config.serviceDiscovery.retryAttempts?.toString());
228
- }
229
-
230
- // Apply logging configuration
231
- if (config.logging) {
232
- setEnvIfNotSet('LOG_LEVEL', config.logging.level);
233
- setEnvIfNotSet('LOG_FORMAT', config.logging.format);
234
- setEnvIfNotSet('LOG_COLORS', config.logging.enableColors?.toString());
235
- setEnvIfNotSet('LOG_TIMESTAMP', config.logging.enableTimestamp?.toString());
236
- setEnvIfNotSet('LOG_CONTEXT', config.logging.enableContext?.toString());
237
-
238
- if (config.logging.outputs) {
239
- setEnvIfNotSet('LOG_CONSOLE', config.logging.outputs.console?.toString());
240
-
241
- if (config.logging.outputs.file) {
242
- setEnvIfNotSet('LOG_FILE_ENABLED', config.logging.outputs.file.enabled?.toString());
243
- setEnvIfNotSet('LOG_FILE_PATH', config.logging.outputs.file.path);
244
- setEnvIfNotSet('LOG_FILE_MAX_SIZE', config.logging.outputs.file.maxSize);
245
- setEnvIfNotSet('LOG_FILE_MAX_FILES', config.logging.outputs.file.maxFiles?.toString());
246
- }
247
-
248
- if (config.logging.outputs.webhook) {
249
- setEnvIfNotSet('LOG_WEBHOOK_ENABLED', config.logging.outputs.webhook.enabled?.toString());
250
- setEnvIfNotSet('LOG_WEBHOOK_URL', config.logging.outputs.webhook.url);
251
- if (config.logging.outputs.webhook.headers) {
252
- setEnvIfNotSet(
253
- 'LOG_WEBHOOK_HEADERS',
254
- JSON.stringify(config.logging.outputs.webhook.headers)
255
- );
256
- }
257
- }
258
- }
259
- }
260
-
261
- // Apply module defaults
262
- if (config.modules) {
263
- if (config.modules.cache) {
264
- setEnvIfNotSet('CACHE_ENABLED', config.modules.cache.enabled?.toString());
265
- setEnvIfNotSet('DEFAULT_CACHE_TTL', config.modules.cache.defaultTtl?.toString());
266
- setEnvIfNotSet('CACHE_MAX_SIZE', config.modules.cache.maxSize?.toString());
267
- setEnvIfNotSet('CACHE_STRATEGY', config.modules.cache.strategy);
268
- }
269
-
270
- if (config.modules.rateLimit) {
271
- setEnvIfNotSet('RATE_LIMIT_ENABLED', config.modules.rateLimit.enabled?.toString());
272
- setEnvIfNotSet(
273
- 'DEFAULT_RATE_LIMIT_REQUESTS',
274
- config.modules.rateLimit.defaultRequests?.toString()
275
- );
276
- setEnvIfNotSet(
277
- 'DEFAULT_RATE_LIMIT_WINDOW',
278
- config.modules.rateLimit.defaultWindow?.toString()
279
- );
280
- setEnvIfNotSet(
281
- 'RATE_LIMIT_SKIP_SUCCESS',
282
- config.modules.rateLimit.skipSuccessfulRequests?.toString()
283
- );
284
- setEnvIfNotSet(
285
- 'RATE_LIMIT_SKIP_FAILED',
286
- config.modules.rateLimit.skipFailedRequests?.toString()
287
- );
288
- }
289
-
290
- if (config.modules.validation) {
291
- setEnvIfNotSet('VALIDATION_ENABLED', config.modules.validation.enabled?.toString());
292
- setEnvIfNotSet(
293
- 'VALIDATION_STRIP_UNKNOWN',
294
- config.modules.validation.stripUnknown?.toString()
295
- );
296
- setEnvIfNotSet('VALIDATION_ABORT_EARLY', config.modules.validation.abortEarly?.toString());
297
- }
298
- }
299
-
300
- // Apply security configuration
301
- if (config.security) {
302
- if (config.security.cors) {
303
- setEnvIfNotSet('CORS_ENABLED', config.security.cors.enabled?.toString());
304
- if (typeof config.security.cors.origin === 'string') {
305
- setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin);
306
- } else if (Array.isArray(config.security.cors.origin)) {
307
- setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin.join(','));
308
- } else if (typeof config.security.cors.origin === 'boolean') {
309
- setEnvIfNotSet('CORS_ORIGIN', config.security.cors.origin.toString());
310
- }
311
- setEnvIfNotSet('CORS_METHODS', config.security.cors.methods?.join(','));
312
- setEnvIfNotSet('CORS_HEADERS', config.security.cors.allowedHeaders?.join(','));
313
- setEnvIfNotSet('CORS_CREDENTIALS', config.security.cors.credentials?.toString());
314
- }
315
-
316
- if (config.security.helmet) {
317
- setEnvIfNotSet('HELMET_ENABLED', config.security.helmet.enabled?.toString());
318
- setEnvIfNotSet('HELMET_CSP', config.security.helmet.contentSecurityPolicy?.toString());
319
- setEnvIfNotSet('HELMET_HSTS', config.security.helmet.hsts?.toString());
320
- setEnvIfNotSet('HELMET_NO_SNIFF', config.security.helmet.noSniff?.toString());
321
- setEnvIfNotSet('HELMET_FRAMEGUARD', config.security.helmet.frameguard?.toString());
322
- }
323
-
324
- if (config.security.rateLimit?.global) {
325
- setEnvIfNotSet(
326
- 'GLOBAL_RATE_LIMIT_ENABLED',
327
- config.security.rateLimit.global.enabled?.toString()
328
- );
329
- setEnvIfNotSet(
330
- 'GLOBAL_RATE_LIMIT_REQUESTS',
331
- config.security.rateLimit.global.requests?.toString()
332
- );
333
- setEnvIfNotSet(
334
- 'GLOBAL_RATE_LIMIT_WINDOW',
335
- config.security.rateLimit.global.window?.toString()
336
- );
337
- }
338
- }
339
-
340
- // Apply external services configuration
341
- if (config.external) {
342
- if (config.external.stripe) {
343
- setEnvIfNotSet('STRIPE_SECRET_KEY', config.external.stripe.secretKey);
344
- setEnvIfNotSet('STRIPE_PUBLISHABLE_KEY', config.external.stripe.publishableKey);
345
- setEnvIfNotSet('STRIPE_WEBHOOK_SECRET', config.external.stripe.webhookSecret);
346
- setEnvIfNotSet('STRIPE_API_VERSION', config.external.stripe.apiVersion);
347
- }
348
-
349
- if (config.external.paypal) {
350
- setEnvIfNotSet('PAYPAL_CLIENT_ID', config.external.paypal.clientId);
351
- setEnvIfNotSet('PAYPAL_CLIENT_SECRET', config.external.paypal.clientSecret);
352
- setEnvIfNotSet('PAYPAL_WEBHOOK_ID', config.external.paypal.webhookId);
353
- setEnvIfNotSet('PAYPAL_ENVIRONMENT', config.external.paypal.environment);
354
- }
355
-
356
- if (config.external.smtp) {
357
- setEnvIfNotSet('SMTP_HOST', config.external.smtp.host);
358
- setEnvIfNotSet('SMTP_PORT', config.external.smtp.port?.toString());
359
- setEnvIfNotSet('SMTP_SECURE', config.external.smtp.secure?.toString());
360
- setEnvIfNotSet('SMTP_USERNAME', config.external.smtp.username);
361
- setEnvIfNotSet('SMTP_PASSWORD', config.external.smtp.password);
362
- }
363
- }
364
-
365
- // Apply performance configuration
366
- if (config.performance) {
367
- if (config.performance.compression) {
368
- setEnvIfNotSet('COMPRESSION_ENABLED', config.performance.compression.enabled?.toString());
369
- setEnvIfNotSet('COMPRESSION_LEVEL', config.performance.compression.level?.toString());
370
- setEnvIfNotSet('COMPRESSION_THRESHOLD', config.performance.compression.threshold?.toString());
371
- }
372
-
373
- if (config.performance.circuitBreaker) {
374
- setEnvIfNotSet(
375
- 'CIRCUIT_BREAKER_ENABLED',
376
- config.performance.circuitBreaker.enabled?.toString()
377
- );
378
- setEnvIfNotSet(
379
- 'CIRCUIT_BREAKER_THRESHOLD',
380
- config.performance.circuitBreaker.failureThreshold?.toString()
381
- );
382
- setEnvIfNotSet(
383
- 'CIRCUIT_BREAKER_RESET',
384
- config.performance.circuitBreaker.resetTimeout?.toString()
385
- );
386
- setEnvIfNotSet(
387
- 'CIRCUIT_BREAKER_MONITOR',
388
- config.performance.circuitBreaker.monitoringPeriod?.toString()
389
- );
390
- }
391
-
392
- if (config.performance.clustering) {
393
- setEnvIfNotSet('CLUSTERING_ENABLED', config.performance.clustering.enabled?.toString());
394
- setEnvIfNotSet('CLUSTER_WORKERS', config.performance.clustering.workers?.toString());
395
- }
396
- }
397
- }
398
-
399
- /**
400
- * Set environment variable only if it's not already set
401
- * This ensures environment variables take precedence over config file values
402
- */
403
- function setEnvIfNotSet(key: string, value: string | undefined): void {
404
- if (value !== undefined && process.env[key] === undefined) {
405
- process.env[key] = value;
406
- }
407
- }
@@ -1,60 +1,109 @@
1
- // Configuration System - Main Exports and Utilities
2
- export * from './schema';
3
- export * from './loader';
4
- export * from './utils';
5
- export * from './file-loader';
1
+ /**
2
+ * Configuration System - Immutable Config with createApp Override Support
3
+ *
4
+ * This is the main entry point for the MoroJS configuration system.
5
+ * It provides a clean, immutable configuration that is locked at createApp() time.
6
+ *
7
+ * Key Features:
8
+ * - Immutable configuration after initialization
9
+ * - Clear precedence: Env Vars > createApp Options > Config File > Defaults
10
+ * - Type-safe validation
11
+ * - Single source of truth
12
+ */
13
+
14
+ // Export types and core components
15
+ export * from './schema.js';
16
+ export * from './config-sources.js';
17
+ export * from './config-validator.js';
18
+ export * from './file-loader.js';
19
+
20
+ // Export specific functions from config-manager to avoid conflicts
21
+ export {
22
+ initializeAndLockConfig,
23
+ isConfigLocked,
24
+ resetConfigForTesting,
25
+ } from './config-manager.js';
26
+
27
+ // Export utilities for backward compatibility
28
+ export * from './utils.js';
6
29
 
7
- // Main configuration loading function
8
- import { loadConfig } from './loader';
9
- import type { AppConfig } from './schema';
10
- import { setConfig } from './utils';
30
+ import { MoroOptions } from '../../types/core.js';
31
+ import { AppConfig } from '../../types/config.js';
32
+ import { loadConfigFromAllSources } from './config-sources.js';
33
+ import {
34
+ initializeAndLockConfig,
35
+ getGlobalConfig as getConfig,
36
+ isConfigLocked,
37
+ resetConfigForTesting,
38
+ } from './config-manager.js';
39
+ import { createFrameworkLogger } from '../logger/index.js';
11
40
 
12
- // Global configuration instance
13
- let globalConfig: AppConfig | null = null;
41
+ const logger = createFrameworkLogger('ConfigSystem');
14
42
 
15
43
  /**
16
- * Initialize and load the global application configuration
17
- * This should be called once at application startup
44
+ * Initialize configuration system with createApp options
45
+ * This is the main entry point called by createApp()
46
+ *
47
+ * @param options - createApp options that can override config file and defaults
48
+ * @returns Immutable, validated configuration object
18
49
  */
19
- export function initializeConfig(): AppConfig {
20
- if (globalConfig) {
21
- return globalConfig;
50
+ export function initializeConfig(options?: MoroOptions): Readonly<AppConfig> {
51
+ if (isConfigLocked()) {
52
+ logger.debug('Configuration already locked, returning existing config');
53
+ return getConfig();
22
54
  }
23
55
 
24
- globalConfig = loadConfig();
56
+ logger.debug('Initializing configuration system');
25
57
 
26
- // Also set the config for utils functions
27
- setConfig(globalConfig);
58
+ // Load configuration from all sources with proper precedence
59
+ const config = loadConfigFromAllSources(options);
28
60
 
29
- return globalConfig;
61
+ // Lock the configuration to prevent further changes
62
+ initializeAndLockConfig(config);
63
+
64
+ logger.info(
65
+ `Configuration system initialized and locked: ${process.env.NODE_ENV || 'development'}:${config.server.port} (sources: env + file + options + defaults)`
66
+ );
67
+
68
+ return config;
69
+ }
70
+
71
+ /**
72
+ * Load configuration without locking (for testing and utilities)
73
+ * This maintains backward compatibility with existing code
74
+ */
75
+ export function loadConfig(): AppConfig {
76
+ return loadConfigFromAllSources();
77
+ }
78
+
79
+ /**
80
+ * Load configuration with createApp options (for testing and utilities)
81
+ * This maintains backward compatibility with existing code
82
+ */
83
+ export function loadConfigWithOptions(options: MoroOptions): AppConfig {
84
+ return loadConfigFromAllSources(options);
30
85
  }
31
86
 
32
87
  /**
33
88
  * Get the current global configuration
34
- * Throws if configuration hasn't been initialized
89
+ * Alias for getGlobalConfig() for backward compatibility
35
90
  */
36
- export function getGlobalConfig(): AppConfig {
37
- if (!globalConfig) {
38
- throw new Error('Configuration not initialized. Call initializeConfig() first.');
39
- }
40
- return globalConfig;
91
+ export function getGlobalConfig(): Readonly<AppConfig> {
92
+ return getConfig();
41
93
  }
42
94
 
43
95
  /**
44
- * Check if configuration has been initialized
96
+ * Check if configuration has been initialized and locked
97
+ * Alias for isConfigLocked() for backward compatibility
45
98
  */
46
99
  export function isConfigInitialized(): boolean {
47
- return globalConfig !== null;
100
+ return isConfigLocked();
48
101
  }
49
102
 
50
103
  /**
51
- * Reset the global configuration state (for testing purposes)
104
+ * Reset configuration state (for testing only)
52
105
  * @internal
53
106
  */
54
107
  export function resetConfig(): void {
55
- globalConfig = null;
56
-
57
- // Also reset the utils config (by setting it to null via direct access)
58
- const { setConfig } = require('./utils');
59
- setConfig(null as any);
108
+ resetConfigForTesting();
60
109
  }
@@ -1,15 +1,25 @@
1
1
  // Core Configuration Schema for Moro Framework
2
2
 
3
- import { AppConfig } from '../../types/config';
3
+ import { AppConfig } from '../../types/config.js';
4
4
 
5
- // Default configuration values
5
+ // Minimal default configuration - performance-focused, most things opt-in
6
6
  export const DEFAULT_CONFIG: AppConfig = {
7
7
  server: {
8
8
  port: 3001,
9
9
  host: 'localhost',
10
- environment: 'development',
11
10
  maxConnections: 1000,
12
11
  timeout: 30000,
12
+ bodySizeLimit: '10mb',
13
+ useUWebSockets: false, // Opt-in for high performance
14
+ requestTracking: {
15
+ enabled: true, // Enable by default for debugging
16
+ },
17
+ requestLogging: {
18
+ enabled: true, // Enable by default - logs requests independently
19
+ },
20
+ errorBoundary: {
21
+ enabled: true, // Always enabled for safety
22
+ },
13
23
  },
14
24
  serviceDiscovery: {
15
25
  enabled: false,
@@ -19,33 +29,38 @@ export const DEFAULT_CONFIG: AppConfig = {
19
29
  healthCheckInterval: 30000,
20
30
  retryAttempts: 3,
21
31
  },
22
- database: {
23
- redis: {
24
- url: 'redis://localhost:6379',
25
- maxRetries: 3,
26
- retryDelay: 1000,
27
- keyPrefix: 'moro:',
28
- },
29
- },
32
+ database: {},
30
33
  modules: {
31
34
  cache: {
32
- enabled: true,
35
+ enabled: false, // Opt-in for better performance
33
36
  defaultTtl: 300,
34
37
  maxSize: 1000,
35
38
  strategy: 'lru',
36
39
  },
37
40
  rateLimit: {
38
- enabled: true,
41
+ enabled: false, // Opt-in to avoid unnecessary overhead
39
42
  defaultRequests: 100,
40
43
  defaultWindow: 60000,
41
44
  skipSuccessfulRequests: false,
42
45
  skipFailedRequests: false,
43
46
  },
44
47
  validation: {
45
- enabled: true,
48
+ enabled: false,
46
49
  stripUnknown: true,
47
50
  abortEarly: false,
48
51
  },
52
+ autoDiscovery: {
53
+ enabled: true, // Enable by default for better DX
54
+ paths: ['./modules', './src/modules'],
55
+ patterns: ['**/*.module.{ts,js}', '**/index.{ts,js}', '**/*.config.{ts,js}'],
56
+ recursive: true,
57
+ loadingStrategy: 'eager',
58
+ watchForChanges: false, // Opt-in for development
59
+ ignorePatterns: ['**/*.test.{ts,js}', '**/*.spec.{ts,js}', '**/node_modules/**'],
60
+ loadOrder: 'dependency',
61
+ failOnError: false, // Graceful degradation
62
+ maxDepth: 5,
63
+ },
49
64
  },
50
65
  logging: {
51
66
  level: 'info',
@@ -69,14 +84,14 @@ export const DEFAULT_CONFIG: AppConfig = {
69
84
  },
70
85
  security: {
71
86
  cors: {
72
- enabled: true,
87
+ enabled: false, // Opt-in for better performance
73
88
  origin: '*',
74
89
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],
75
90
  allowedHeaders: ['Content-Type', 'Authorization'],
76
91
  credentials: false,
77
92
  },
78
93
  helmet: {
79
- enabled: true,
94
+ enabled: false, // Opt-in for better performance
80
95
  contentSecurityPolicy: true,
81
96
  hsts: true,
82
97
  noSniff: true,
@@ -90,26 +105,15 @@ export const DEFAULT_CONFIG: AppConfig = {
90
105
  },
91
106
  },
92
107
  },
93
- external: {
94
- stripe: {
95
- apiVersion: '2023-10-16',
96
- },
97
- paypal: {
98
- environment: 'sandbox',
99
- },
100
- smtp: {
101
- port: 587,
102
- secure: false,
103
- },
104
- },
108
+ external: {},
105
109
  performance: {
106
110
  compression: {
107
- enabled: true,
111
+ enabled: false, // Opt-in to avoid overhead
108
112
  level: 6,
109
113
  threshold: 1024,
110
114
  },
111
115
  circuitBreaker: {
112
- enabled: true,
116
+ enabled: false, // Opt-in to avoid overhead
113
117
  failureThreshold: 5,
114
118
  resetTimeout: 60000,
115
119
  monitoringPeriod: 10000,
@@ -117,13 +121,23 @@ export const DEFAULT_CONFIG: AppConfig = {
117
121
  clustering: {
118
122
  enabled: false,
119
123
  workers: 1,
124
+ memoryPerWorkerGB: undefined,
120
125
  },
121
126
  },
127
+ websocket: {
128
+ enabled: false, // Opt-in - user must explicitly enable WebSockets
129
+ },
122
130
  };
123
131
 
124
- // Simple compatibility export - just return the config as-is
132
+ // Schema validation is now handled by config-validator.ts
133
+ // This export is kept for backward compatibility only
134
+ // Note: For actual validation, use validateConfig() from config-validator.ts directly
125
135
  export const ConfigSchema = {
126
- parse: (data: any): AppConfig => data as AppConfig,
136
+ parse: (data: any): AppConfig => {
137
+ // Simple pass-through for backward compatibility
138
+ // Real validation happens in the config loading pipeline
139
+ return data as AppConfig;
140
+ },
127
141
  };
128
142
 
129
143
  // Re-export types for backward compatibility
@@ -137,7 +151,7 @@ export type {
137
151
  SecurityConfig,
138
152
  ExternalServicesConfig,
139
153
  PerformanceConfig,
140
- } from '../../types/config';
154
+ } from '../../types/config.js';
141
155
 
142
156
  // For backward compatibility with modules that expect schema objects
143
157
  export const ServerConfigSchema = { parse: (data: any) => data };