@morojs/moro 1.6.2 → 1.6.3

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 (366) hide show
  1. package/dist/core/http/http-server.js +12 -9
  2. package/dist/core/http/http-server.js.map +1 -1
  3. package/dist/core/http/uws-http-server.js +1 -1
  4. package/dist/core/http/uws-http-server.js.map +1 -1
  5. package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
  6. package/dist/core/middleware/built-in/auth/core.js +358 -0
  7. package/dist/core/middleware/built-in/auth/core.js.map +1 -0
  8. package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
  9. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
  10. package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
  11. package/dist/core/middleware/built-in/auth/hook.js +99 -0
  12. package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
  13. package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
  14. package/dist/core/middleware/built-in/auth/index.js +15 -0
  15. package/dist/core/middleware/built-in/auth/index.js.map +1 -0
  16. package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
  17. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
  18. package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
  19. package/dist/core/middleware/built-in/auth/middleware.js +71 -0
  20. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
  21. package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
  22. package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
  23. package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
  24. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
  25. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
  26. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
  27. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
  28. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
  29. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
  30. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
  31. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
  32. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
  33. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
  34. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
  35. package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
  36. package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
  37. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
  38. package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
  39. package/dist/core/middleware/built-in/cache/core.js +87 -0
  40. package/dist/core/middleware/built-in/cache/core.js.map +1 -0
  41. package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
  42. package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
  43. package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
  44. package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
  45. package/dist/core/middleware/built-in/cache/index.js +9 -0
  46. package/dist/core/middleware/built-in/cache/index.js.map +1 -0
  47. package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
  48. package/dist/core/middleware/built-in/cache/middleware.js +44 -0
  49. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
  50. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
  51. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
  52. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
  53. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
  54. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
  55. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
  56. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
  57. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
  58. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
  59. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
  60. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
  61. package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
  62. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
  63. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
  64. package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
  65. package/dist/core/middleware/built-in/cdn/core.js +144 -0
  66. package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
  67. package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
  68. package/dist/core/middleware/built-in/cdn/hook.js +70 -0
  69. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
  70. package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
  71. package/dist/core/middleware/built-in/cdn/index.js +11 -0
  72. package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
  73. package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
  74. package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
  75. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
  76. package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
  77. package/dist/core/middleware/built-in/cookie/core.js +83 -0
  78. package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
  79. package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
  80. package/dist/core/middleware/built-in/cookie/hook.js +47 -0
  81. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
  82. package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
  83. package/dist/core/middleware/built-in/cookie/index.js +9 -0
  84. package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
  85. package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
  86. package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
  87. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
  88. package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
  89. package/dist/core/middleware/built-in/cors/core.js +51 -0
  90. package/dist/core/middleware/built-in/cors/core.js.map +1 -0
  91. package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
  92. package/dist/core/middleware/built-in/cors/hook.js +37 -0
  93. package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
  94. package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
  95. package/dist/core/middleware/built-in/cors/index.js +9 -0
  96. package/dist/core/middleware/built-in/cors/index.js.map +1 -0
  97. package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
  98. package/dist/core/middleware/built-in/cors/middleware.js +22 -0
  99. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
  100. package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
  101. package/dist/core/middleware/built-in/csp/core.js +88 -0
  102. package/dist/core/middleware/built-in/csp/core.js.map +1 -0
  103. package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
  104. package/dist/core/middleware/built-in/csp/hook.js +47 -0
  105. package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
  106. package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
  107. package/dist/core/middleware/built-in/csp/index.js +9 -0
  108. package/dist/core/middleware/built-in/csp/index.js.map +1 -0
  109. package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
  110. package/dist/core/middleware/built-in/csp/middleware.js +29 -0
  111. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
  112. package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
  113. package/dist/core/middleware/built-in/csrf/core.js +69 -0
  114. package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
  115. package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
  116. package/dist/core/middleware/built-in/csrf/hook.js +45 -0
  117. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
  118. package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
  119. package/dist/core/middleware/built-in/csrf/index.js +9 -0
  120. package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
  121. package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
  122. package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
  123. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
  124. package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
  125. package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
  126. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
  127. package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
  128. package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
  129. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
  130. package/dist/core/middleware/built-in/index.d.ts +25 -59
  131. package/dist/core/middleware/built-in/index.js +31 -31
  132. package/dist/core/middleware/built-in/index.js.map +1 -1
  133. package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
  134. package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
  135. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
  136. package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
  137. package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
  138. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
  139. package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
  140. package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
  141. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
  142. package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
  143. package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
  144. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
  145. package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
  146. package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
  147. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
  148. package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
  149. package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
  150. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
  151. package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
  152. package/dist/core/middleware/built-in/request-logger/index.js +4 -0
  153. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
  154. package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
  155. package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
  156. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
  157. package/dist/core/middleware/built-in/session/core.d.ts +73 -0
  158. package/dist/core/middleware/built-in/session/core.js +227 -0
  159. package/dist/core/middleware/built-in/session/core.js.map +1 -0
  160. package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
  161. package/dist/core/middleware/built-in/session/hook.js +53 -0
  162. package/dist/core/middleware/built-in/session/hook.js.map +1 -0
  163. package/dist/core/middleware/built-in/session/index.d.ts +3 -0
  164. package/dist/core/middleware/built-in/session/index.js +9 -0
  165. package/dist/core/middleware/built-in/session/index.js.map +1 -0
  166. package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
  167. package/dist/core/middleware/built-in/session/middleware.js +38 -0
  168. package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
  169. package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
  170. package/dist/core/middleware/built-in/sse/core.js +117 -0
  171. package/dist/core/middleware/built-in/sse/core.js.map +1 -0
  172. package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
  173. package/dist/core/middleware/built-in/sse/hook.js +60 -0
  174. package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
  175. package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
  176. package/dist/core/middleware/built-in/sse/index.js +9 -0
  177. package/dist/core/middleware/built-in/sse/index.js.map +1 -0
  178. package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
  179. package/dist/core/middleware/built-in/sse/middleware.js +43 -0
  180. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
  181. package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
  182. package/dist/core/middleware/built-in/validation/core.js +93 -0
  183. package/dist/core/middleware/built-in/validation/core.js.map +1 -0
  184. package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
  185. package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
  186. package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
  187. package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
  188. package/dist/core/middleware/built-in/validation/index.js +9 -0
  189. package/dist/core/middleware/built-in/validation/index.js.map +1 -0
  190. package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
  191. package/dist/core/middleware/built-in/validation/middleware.js +27 -0
  192. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
  193. package/dist/core/middleware/index.js +6 -0
  194. package/dist/core/middleware/index.js.map +1 -1
  195. package/dist/core/routing/unified-router.d.ts +4 -20
  196. package/dist/core/routing/unified-router.js +61 -106
  197. package/dist/core/routing/unified-router.js.map +1 -1
  198. package/dist/index.d.ts +3 -2
  199. package/dist/index.js +3 -2
  200. package/dist/index.js.map +1 -1
  201. package/dist/moro.js +12 -18
  202. package/dist/moro.js.map +1 -1
  203. package/dist/types/hooks.d.ts +3 -0
  204. package/package.json +2 -6
  205. package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
  206. package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
  207. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
  208. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
  209. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
  210. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
  211. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
  212. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
  213. package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
  214. package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
  215. package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
  216. package/dist/core/middleware/built-in/auth.d.ts +0 -30
  217. package/dist/core/middleware/built-in/auth.js +0 -348
  218. package/dist/core/middleware/built-in/auth.js.map +0 -1
  219. package/dist/core/middleware/built-in/cache.d.ts +0 -3
  220. package/dist/core/middleware/built-in/cache.js.map +0 -1
  221. package/dist/core/middleware/built-in/cdn.d.ts +0 -3
  222. package/dist/core/middleware/built-in/cdn.js +0 -109
  223. package/dist/core/middleware/built-in/cdn.js.map +0 -1
  224. package/dist/core/middleware/built-in/cookie.d.ts +0 -14
  225. package/dist/core/middleware/built-in/cookie.js +0 -64
  226. package/dist/core/middleware/built-in/cookie.js.map +0 -1
  227. package/dist/core/middleware/built-in/cors.d.ts +0 -2
  228. package/dist/core/middleware/built-in/cors.js +0 -25
  229. package/dist/core/middleware/built-in/cors.js.map +0 -1
  230. package/dist/core/middleware/built-in/csp.d.ts +0 -22
  231. package/dist/core/middleware/built-in/csp.js +0 -68
  232. package/dist/core/middleware/built-in/csp.js.map +0 -1
  233. package/dist/core/middleware/built-in/csrf.d.ts +0 -9
  234. package/dist/core/middleware/built-in/csrf.js +0 -60
  235. package/dist/core/middleware/built-in/csrf.js.map +0 -1
  236. package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
  237. package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
  238. package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
  239. package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
  240. package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
  241. package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
  242. package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
  243. package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
  244. package/dist/core/middleware/built-in/request-logger.js.map +0 -1
  245. package/dist/core/middleware/built-in/session.d.ts +0 -41
  246. package/dist/core/middleware/built-in/session.js +0 -205
  247. package/dist/core/middleware/built-in/session.js.map +0 -1
  248. package/dist/core/middleware/built-in/sse.d.ts +0 -6
  249. package/dist/core/middleware/built-in/sse.js +0 -69
  250. package/dist/core/middleware/built-in/sse.js.map +0 -1
  251. package/dist/core/middleware/built-in/validation.d.ts +0 -2
  252. package/dist/core/middleware/built-in/validation.js.map +0 -1
  253. package/jest.config.mjs +0 -41
  254. package/src/core/auth/README.md +0 -339
  255. package/src/core/auth/morojs-adapter.ts +0 -415
  256. package/src/core/config/config-manager.ts +0 -133
  257. package/src/core/config/config-sources.ts +0 -600
  258. package/src/core/config/config-validator.ts +0 -1116
  259. package/src/core/config/file-loader.ts +0 -150
  260. package/src/core/config/index.ts +0 -109
  261. package/src/core/config/schema.ts +0 -164
  262. package/src/core/config/utils.ts +0 -244
  263. package/src/core/database/README.md +0 -238
  264. package/src/core/database/adapters/drizzle.ts +0 -415
  265. package/src/core/database/adapters/index.ts +0 -42
  266. package/src/core/database/adapters/mongodb.ts +0 -317
  267. package/src/core/database/adapters/mysql.ts +0 -235
  268. package/src/core/database/adapters/postgresql.ts +0 -226
  269. package/src/core/database/adapters/redis.ts +0 -379
  270. package/src/core/database/adapters/sqlite.ts +0 -263
  271. package/src/core/database/index.ts +0 -3
  272. package/src/core/docs/index.ts +0 -231
  273. package/src/core/docs/openapi-generator.ts +0 -576
  274. package/src/core/docs/schema-to-openapi.ts +0 -145
  275. package/src/core/docs/simple-docs.ts +0 -295
  276. package/src/core/docs/swagger-ui.ts +0 -354
  277. package/src/core/docs/zod-to-openapi.ts +0 -532
  278. package/src/core/events/event-bus.ts +0 -231
  279. package/src/core/events/index.ts +0 -12
  280. package/src/core/framework.ts +0 -885
  281. package/src/core/http/http-server.ts +0 -1847
  282. package/src/core/http/index.ts +0 -7
  283. package/src/core/http/uws-http-server.ts +0 -591
  284. package/src/core/logger/filters.ts +0 -153
  285. package/src/core/logger/index.ts +0 -21
  286. package/src/core/logger/logger.ts +0 -1033
  287. package/src/core/logger/outputs.ts +0 -132
  288. package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
  289. package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
  290. package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
  291. package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
  292. package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
  293. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
  294. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
  295. package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
  296. package/src/core/middleware/built-in/auth-helpers.ts +0 -401
  297. package/src/core/middleware/built-in/auth-providers.ts +0 -480
  298. package/src/core/middleware/built-in/auth.ts +0 -410
  299. package/src/core/middleware/built-in/cache.ts +0 -213
  300. package/src/core/middleware/built-in/cdn.ts +0 -124
  301. package/src/core/middleware/built-in/cookie.ts +0 -85
  302. package/src/core/middleware/built-in/cors.ts +0 -38
  303. package/src/core/middleware/built-in/csp.ts +0 -101
  304. package/src/core/middleware/built-in/csrf.ts +0 -82
  305. package/src/core/middleware/built-in/error-tracker.ts +0 -16
  306. package/src/core/middleware/built-in/index.ts +0 -87
  307. package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
  308. package/src/core/middleware/built-in/performance-monitor.ts +0 -25
  309. package/src/core/middleware/built-in/rate-limit.ts +0 -60
  310. package/src/core/middleware/built-in/request-logger.ts +0 -16
  311. package/src/core/middleware/built-in/session.ts +0 -287
  312. package/src/core/middleware/built-in/sse.ts +0 -88
  313. package/src/core/middleware/built-in/validation.ts +0 -33
  314. package/src/core/middleware/index.ts +0 -177
  315. package/src/core/modules/auto-discovery.ts +0 -726
  316. package/src/core/modules/index.ts +0 -3
  317. package/src/core/modules/modules.ts +0 -135
  318. package/src/core/networking/adapters/index.ts +0 -17
  319. package/src/core/networking/adapters/socketio-adapter.ts +0 -254
  320. package/src/core/networking/adapters/uws-adapter.ts +0 -619
  321. package/src/core/networking/adapters/ws-adapter.ts +0 -429
  322. package/src/core/networking/index.ts +0 -4
  323. package/src/core/networking/service-discovery.ts +0 -303
  324. package/src/core/networking/websocket-adapter.ts +0 -217
  325. package/src/core/networking/websocket-manager.ts +0 -308
  326. package/src/core/pooling/object-pool-manager.ts +0 -630
  327. package/src/core/routing/app-integration.ts +0 -164
  328. package/src/core/routing/index.ts +0 -261
  329. package/src/core/routing/path-matcher.ts +0 -222
  330. package/src/core/routing/router.ts +0 -97
  331. package/src/core/routing/unified-router.ts +0 -870
  332. package/src/core/runtime/aws-lambda-adapter.ts +0 -147
  333. package/src/core/runtime/base-adapter.ts +0 -130
  334. package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
  335. package/src/core/runtime/index.ts +0 -62
  336. package/src/core/runtime/node-adapter.ts +0 -202
  337. package/src/core/runtime/vercel-edge-adapter.ts +0 -114
  338. package/src/core/utilities/circuit-breaker.ts +0 -46
  339. package/src/core/utilities/container.ts +0 -736
  340. package/src/core/utilities/hooks.ts +0 -142
  341. package/src/core/utilities/index.ts +0 -17
  342. package/src/core/utilities/package-utils.ts +0 -59
  343. package/src/core/validation/adapters.ts +0 -147
  344. package/src/core/validation/index.ts +0 -258
  345. package/src/core/validation/schema-interface.ts +0 -100
  346. package/src/index.ts +0 -233
  347. package/src/moro.ts +0 -1728
  348. package/src/types/auth.ts +0 -440
  349. package/src/types/cache.ts +0 -38
  350. package/src/types/cdn.ts +0 -22
  351. package/src/types/config.ts +0 -229
  352. package/src/types/core.ts +0 -58
  353. package/src/types/database.ts +0 -32
  354. package/src/types/discovery.ts +0 -7
  355. package/src/types/events.ts +0 -82
  356. package/src/types/hooks.ts +0 -47
  357. package/src/types/http.ts +0 -89
  358. package/src/types/logger.ts +0 -102
  359. package/src/types/module.ts +0 -99
  360. package/src/types/runtime.ts +0 -76
  361. package/src/types/session.ts +0 -89
  362. package/tsconfig.json +0 -23
  363. /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
  364. /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
  365. /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
  366. /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
@@ -1,600 +0,0 @@
1
- /**
2
- * Configuration Sources - Load from Environment, Files, and Options
3
- *
4
- * This module handles loading configuration from different sources with clear precedence:
5
- * Environment Variables > createApp Options > Config File > Schema Defaults
6
- */
7
-
8
- import { AppConfig } from '../../types/config.js';
9
- import { MoroOptions } from '../../types/core.js';
10
- import { DEFAULT_CONFIG } from './schema.js';
11
- import { loadConfigFileSync } from './file-loader.js';
12
- import { createFrameworkLogger } from '../logger/index.js';
13
- import { validateConfig } from './config-validator.js';
14
-
15
- const logger = createFrameworkLogger('ConfigSources');
16
-
17
- /**
18
- * Configuration source metadata for debugging
19
- */
20
- export interface ConfigSourceInfo {
21
- source: 'environment' | 'createApp' | 'configFile' | 'default';
22
- path: string;
23
- value: any;
24
- }
25
-
26
- /**
27
- * Load configuration from all sources with proper precedence
28
- * Returns a validated, complete configuration object
29
- */
30
- export function loadConfigFromAllSources(createAppOptions?: MoroOptions): AppConfig {
31
- logger.debug('Loading configuration from all sources');
32
-
33
- // 1. Start with schema defaults
34
- let config = JSON.parse(JSON.stringify(DEFAULT_CONFIG)) as AppConfig;
35
- const sourceMap = new Map<string, ConfigSourceInfo>();
36
-
37
- // Track default values
38
- trackConfigSource(config, sourceMap, 'default', 'schema');
39
-
40
- // 2. Load and merge config file (if exists)
41
- try {
42
- const fileConfig = loadConfigFileSync();
43
- if (fileConfig) {
44
- config = deepMerge(config, fileConfig);
45
- trackConfigSource(fileConfig, sourceMap, 'configFile', 'moro.config.js/ts');
46
- logger.debug('Config file loaded and merged');
47
- }
48
- } catch (error) {
49
- logger.warn('Config file loading failed, continuing without it:', String(error));
50
- }
51
-
52
- // 3. Load and merge environment variables
53
- const envConfig = loadEnvironmentConfig();
54
- config = deepMerge(config, envConfig);
55
- trackConfigSource(envConfig, sourceMap, 'environment', 'process.env');
56
-
57
- // 4. Load and merge createApp options (highest precedence)
58
- if (createAppOptions) {
59
- const normalizedOptions = normalizeCreateAppOptions(createAppOptions);
60
- config = deepMerge(config, normalizedOptions);
61
- trackConfigSource(normalizedOptions, sourceMap, 'createApp', 'createApp()');
62
- logger.debug('createApp options merged');
63
- }
64
-
65
- // 5. Validate the final configuration
66
- const validatedConfig = validateConfig(config);
67
-
68
- // Log configuration sources for debugging
69
- logConfigurationSources(sourceMap);
70
-
71
- return validatedConfig;
72
- }
73
-
74
- /**
75
- * Load configuration from environment variables
76
- * Handles both standard and MORO_ prefixed variables
77
- */
78
- function loadEnvironmentConfig(): Partial<AppConfig> {
79
- const config: Partial<AppConfig> = {};
80
-
81
- // Server configuration
82
- if (process.env.PORT || process.env.MORO_PORT) {
83
- if (!config.server) config.server = {} as any;
84
- config.server!.port = parseInt(process.env.PORT || process.env.MORO_PORT || '3001', 10);
85
- }
86
-
87
- if (process.env.HOST || process.env.MORO_HOST) {
88
- if (!config.server) config.server = {} as any;
89
- config.server!.host = process.env.HOST || process.env.MORO_HOST || 'localhost';
90
- }
91
-
92
- if (process.env.MAX_CONNECTIONS || process.env.MORO_MAX_CONNECTIONS) {
93
- if (!config.server) config.server = {} as any;
94
- config.server!.maxConnections = parseInt(
95
- process.env.MAX_CONNECTIONS || process.env.MORO_MAX_CONNECTIONS || '1000',
96
- 10
97
- );
98
- }
99
-
100
- if (process.env.REQUEST_TIMEOUT || process.env.MORO_TIMEOUT) {
101
- if (!config.server) config.server = {} as any;
102
- config.server!.timeout = parseInt(
103
- process.env.REQUEST_TIMEOUT || process.env.MORO_TIMEOUT || '30000',
104
- 10
105
- );
106
- }
107
-
108
- // Database configuration
109
- if (process.env.DATABASE_URL || process.env.MORO_DATABASE_URL) {
110
- if (!config.database) config.database = {} as any;
111
- config.database!.url = process.env.DATABASE_URL || process.env.MORO_DATABASE_URL;
112
- }
113
-
114
- // Redis configuration
115
- if (process.env.REDIS_URL || process.env.MORO_REDIS_URL) {
116
- if (!config.database) config.database = {} as any;
117
- if (!config.database!.redis) config.database!.redis = {} as any;
118
- config.database!.redis!.url =
119
- process.env.REDIS_URL || process.env.MORO_REDIS_URL || 'redis://localhost:6379';
120
- config.database!.redis!.maxRetries = parseInt(
121
- process.env.REDIS_MAX_RETRIES || process.env.MORO_REDIS_MAX_RETRIES || '3',
122
- 10
123
- );
124
- config.database!.redis!.retryDelay = parseInt(
125
- process.env.REDIS_RETRY_DELAY || process.env.MORO_REDIS_RETRY_DELAY || '1000',
126
- 10
127
- );
128
- config.database!.redis!.keyPrefix =
129
- process.env.REDIS_KEY_PREFIX || process.env.MORO_REDIS_KEY_PREFIX || 'moro:';
130
- }
131
-
132
- // MySQL configuration - only include if MYSQL_HOST is set
133
- if (process.env.MYSQL_HOST || process.env.MORO_MYSQL_HOST) {
134
- if (!config.database) config.database = {} as any;
135
- config.database!.mysql = {
136
- host: process.env.MYSQL_HOST || process.env.MORO_MYSQL_HOST || 'localhost',
137
- port: parseInt(process.env.MYSQL_PORT || process.env.MORO_MYSQL_PORT || '3306', 10),
138
- database: process.env.MYSQL_DATABASE || process.env.MORO_MYSQL_DB,
139
- username: process.env.MYSQL_USERNAME || process.env.MORO_MYSQL_USER,
140
- password: process.env.MYSQL_PASSWORD || process.env.MORO_MYSQL_PASS,
141
- connectionLimit: parseInt(
142
- process.env.MYSQL_CONNECTION_LIMIT || process.env.MORO_MYSQL_CONNECTIONS || '10',
143
- 10
144
- ),
145
- acquireTimeout: parseInt(
146
- process.env.MYSQL_ACQUIRE_TIMEOUT || process.env.MORO_MYSQL_ACQUIRE || '60000',
147
- 10
148
- ),
149
- timeout: parseInt(process.env.MYSQL_TIMEOUT || process.env.MORO_MYSQL_TIMEOUT || '60000', 10),
150
- } as any;
151
- }
152
-
153
- // Logging configuration
154
- if (process.env.LOG_LEVEL || process.env.MORO_LOG_LEVEL) {
155
- const level = process.env.LOG_LEVEL || process.env.MORO_LOG_LEVEL;
156
- if (
157
- level === 'debug' ||
158
- level === 'info' ||
159
- level === 'warn' ||
160
- level === 'error' ||
161
- level === 'fatal'
162
- ) {
163
- if (!config.logging) config.logging = {} as any;
164
- config.logging!.level = level;
165
- }
166
- }
167
-
168
- // External services - only include if configured
169
- const externalConfig: Partial<AppConfig['external']> = {};
170
-
171
- // Stripe
172
- if (process.env.STRIPE_SECRET_KEY || process.env.MORO_STRIPE_SECRET) {
173
- externalConfig.stripe = {
174
- secretKey: process.env.STRIPE_SECRET_KEY || process.env.MORO_STRIPE_SECRET,
175
- publishableKey: process.env.STRIPE_PUBLISHABLE_KEY || process.env.MORO_STRIPE_PUBLIC,
176
- webhookSecret: process.env.STRIPE_WEBHOOK_SECRET || process.env.MORO_STRIPE_WEBHOOK,
177
- apiVersion: process.env.STRIPE_API_VERSION || process.env.MORO_STRIPE_VERSION || '2023-10-16',
178
- };
179
- }
180
-
181
- // PayPal
182
- if (process.env.PAYPAL_CLIENT_ID || process.env.MORO_PAYPAL_CLIENT) {
183
- externalConfig.paypal = {
184
- clientId: process.env.PAYPAL_CLIENT_ID || process.env.MORO_PAYPAL_CLIENT,
185
- clientSecret: process.env.PAYPAL_CLIENT_SECRET || process.env.MORO_PAYPAL_SECRET,
186
- webhookId: process.env.PAYPAL_WEBHOOK_ID || process.env.MORO_PAYPAL_WEBHOOK,
187
- environment:
188
- (process.env.PAYPAL_ENVIRONMENT || process.env.MORO_PAYPAL_ENV) === 'production'
189
- ? 'production'
190
- : 'sandbox',
191
- };
192
- }
193
-
194
- // SMTP
195
- if (process.env.SMTP_HOST || process.env.MORO_SMTP_HOST) {
196
- externalConfig.smtp = {
197
- host: process.env.SMTP_HOST || process.env.MORO_SMTP_HOST,
198
- port: parseInt(process.env.SMTP_PORT || process.env.MORO_SMTP_PORT || '587', 10),
199
- secure: (process.env.SMTP_SECURE || 'false').toLowerCase() === 'true',
200
- username: process.env.SMTP_USERNAME || process.env.MORO_SMTP_USER,
201
- password: process.env.SMTP_PASSWORD || process.env.MORO_SMTP_PASS,
202
- };
203
- }
204
-
205
- if (Object.keys(externalConfig).length > 0) {
206
- config.external = externalConfig;
207
- }
208
-
209
- // Module configuration
210
- const moduleEnvVars = [
211
- // Cache
212
- 'CACHE_ENABLED',
213
- 'MORO_CACHE_ENABLED',
214
- 'DEFAULT_CACHE_TTL',
215
- 'MORO_CACHE_TTL',
216
- 'CACHE_MAX_SIZE',
217
- 'MORO_CACHE_SIZE',
218
- 'CACHE_STRATEGY',
219
- 'MORO_CACHE_STRATEGY',
220
- // Rate Limit
221
- 'RATE_LIMIT_ENABLED',
222
- 'MORO_RATE_LIMIT_ENABLED',
223
- 'DEFAULT_RATE_LIMIT_REQUESTS',
224
- 'MORO_RATE_LIMIT_REQUESTS',
225
- 'DEFAULT_RATE_LIMIT_WINDOW',
226
- 'MORO_RATE_LIMIT_WINDOW',
227
- // Validation
228
- 'VALIDATION_ENABLED',
229
- 'MORO_VALIDATION_ENABLED',
230
- // Auto-Discovery
231
- 'AUTO_DISCOVERY_ENABLED',
232
- 'MORO_AUTO_DISCOVERY_ENABLED',
233
- 'AUTO_DISCOVERY_PATHS',
234
- 'MORO_AUTO_DISCOVERY_PATHS',
235
- 'AUTO_DISCOVERY_PATTERNS',
236
- 'MORO_AUTO_DISCOVERY_PATTERNS',
237
- 'AUTO_DISCOVERY_LOADING_STRATEGY',
238
- 'MORO_AUTO_DISCOVERY_LOADING_STRATEGY',
239
- 'AUTO_DISCOVERY_WATCH_FOR_CHANGES',
240
- 'MORO_AUTO_DISCOVERY_WATCH_FOR_CHANGES',
241
- 'AUTO_DISCOVERY_LOAD_ORDER',
242
- 'MORO_AUTO_DISCOVERY_LOAD_ORDER',
243
- 'AUTO_DISCOVERY_FAIL_ON_ERROR',
244
- 'MORO_AUTO_DISCOVERY_FAIL_ON_ERROR',
245
- 'AUTO_DISCOVERY_MAX_DEPTH',
246
- 'MORO_AUTO_DISCOVERY_MAX_DEPTH',
247
- ];
248
-
249
- if (moduleEnvVars.some(envVar => process.env[envVar])) {
250
- if (!config.modules) config.modules = {} as any;
251
-
252
- // Cache configuration
253
- if (process.env.CACHE_ENABLED || process.env.MORO_CACHE_ENABLED) {
254
- if (!config.modules!.cache) config.modules!.cache = {} as any;
255
- config.modules!.cache!.enabled =
256
- (process.env.CACHE_ENABLED || process.env.MORO_CACHE_ENABLED) === 'true';
257
- }
258
- if (process.env.DEFAULT_CACHE_TTL || process.env.MORO_CACHE_TTL) {
259
- if (!config.modules!.cache) config.modules!.cache = {} as any;
260
- config.modules!.cache!.defaultTtl = parseInt(
261
- process.env.DEFAULT_CACHE_TTL || process.env.MORO_CACHE_TTL || '300',
262
- 10
263
- );
264
- }
265
- if (process.env.CACHE_MAX_SIZE || process.env.MORO_CACHE_SIZE) {
266
- if (!config.modules!.cache) config.modules!.cache = {} as any;
267
- config.modules!.cache!.maxSize = parseInt(
268
- process.env.CACHE_MAX_SIZE || process.env.MORO_CACHE_SIZE || '1000',
269
- 10
270
- );
271
- }
272
- if (process.env.CACHE_STRATEGY || process.env.MORO_CACHE_STRATEGY) {
273
- if (!config.modules!.cache) config.modules!.cache = {} as any;
274
- const strategy = process.env.CACHE_STRATEGY || process.env.MORO_CACHE_STRATEGY;
275
- if (['lru', 'lfu', 'fifo'].includes(strategy || '')) {
276
- config.modules!.cache!.strategy = strategy as 'lru' | 'lfu' | 'fifo';
277
- }
278
- }
279
-
280
- // Rate limit configuration
281
- if (process.env.RATE_LIMIT_ENABLED || process.env.MORO_RATE_LIMIT_ENABLED) {
282
- if (!config.modules!.rateLimit) config.modules!.rateLimit = {} as any;
283
- config.modules!.rateLimit!.enabled =
284
- (process.env.RATE_LIMIT_ENABLED || process.env.MORO_RATE_LIMIT_ENABLED) === 'true';
285
- }
286
- if (process.env.DEFAULT_RATE_LIMIT_REQUESTS || process.env.MORO_RATE_LIMIT_REQUESTS) {
287
- if (!config.modules!.rateLimit) config.modules!.rateLimit = {} as any;
288
- config.modules!.rateLimit!.defaultRequests = parseInt(
289
- process.env.DEFAULT_RATE_LIMIT_REQUESTS || process.env.MORO_RATE_LIMIT_REQUESTS || '100',
290
- 10
291
- );
292
- }
293
- if (process.env.DEFAULT_RATE_LIMIT_WINDOW || process.env.MORO_RATE_LIMIT_WINDOW) {
294
- if (!config.modules!.rateLimit) config.modules!.rateLimit = {} as any;
295
- config.modules!.rateLimit!.defaultWindow = parseInt(
296
- process.env.DEFAULT_RATE_LIMIT_WINDOW || process.env.MORO_RATE_LIMIT_WINDOW || '60000',
297
- 10
298
- );
299
- }
300
-
301
- // Validation configuration
302
- if (process.env.VALIDATION_ENABLED || process.env.MORO_VALIDATION_ENABLED) {
303
- if (!config.modules!.validation) config.modules!.validation = {} as any;
304
- config.modules!.validation!.enabled =
305
- (process.env.VALIDATION_ENABLED || process.env.MORO_VALIDATION_ENABLED) === 'true';
306
- }
307
-
308
- // Auto-Discovery configuration
309
- if (process.env.AUTO_DISCOVERY_ENABLED || process.env.MORO_AUTO_DISCOVERY_ENABLED) {
310
- if (!config.modules!.autoDiscovery) config.modules!.autoDiscovery = {} as any;
311
- config.modules!.autoDiscovery!.enabled =
312
- (process.env.AUTO_DISCOVERY_ENABLED || process.env.MORO_AUTO_DISCOVERY_ENABLED) === 'true';
313
- }
314
- if (process.env.AUTO_DISCOVERY_PATHS || process.env.MORO_AUTO_DISCOVERY_PATHS) {
315
- if (!config.modules!.autoDiscovery) config.modules!.autoDiscovery = {} as any;
316
- const paths = (
317
- process.env.AUTO_DISCOVERY_PATHS ||
318
- process.env.MORO_AUTO_DISCOVERY_PATHS ||
319
- ''
320
- )
321
- .split(',')
322
- .map(p => p.trim())
323
- .filter(Boolean);
324
- if (paths.length > 0) {
325
- config.modules!.autoDiscovery!.paths = paths;
326
- }
327
- }
328
- if (process.env.AUTO_DISCOVERY_PATTERNS || process.env.MORO_AUTO_DISCOVERY_PATTERNS) {
329
- if (!config.modules!.autoDiscovery) config.modules!.autoDiscovery = {} as any;
330
- const patterns = (
331
- process.env.AUTO_DISCOVERY_PATTERNS ||
332
- process.env.MORO_AUTO_DISCOVERY_PATTERNS ||
333
- ''
334
- )
335
- .split(',')
336
- .map(p => p.trim())
337
- .filter(Boolean);
338
- if (patterns.length > 0) {
339
- config.modules!.autoDiscovery!.patterns = patterns;
340
- }
341
- }
342
- if (
343
- process.env.AUTO_DISCOVERY_LOADING_STRATEGY ||
344
- process.env.MORO_AUTO_DISCOVERY_LOADING_STRATEGY
345
- ) {
346
- if (!config.modules!.autoDiscovery) config.modules!.autoDiscovery = {} as any;
347
- const strategy =
348
- process.env.AUTO_DISCOVERY_LOADING_STRATEGY ||
349
- process.env.MORO_AUTO_DISCOVERY_LOADING_STRATEGY;
350
- if (['eager', 'lazy', 'conditional'].includes(strategy || '')) {
351
- config.modules!.autoDiscovery!.loadingStrategy = strategy as
352
- | 'eager'
353
- | 'lazy'
354
- | 'conditional';
355
- }
356
- }
357
- if (
358
- process.env.AUTO_DISCOVERY_WATCH_FOR_CHANGES ||
359
- process.env.MORO_AUTO_DISCOVERY_WATCH_FOR_CHANGES
360
- ) {
361
- if (!config.modules!.autoDiscovery) config.modules!.autoDiscovery = {} as any;
362
- config.modules!.autoDiscovery!.watchForChanges =
363
- (process.env.AUTO_DISCOVERY_WATCH_FOR_CHANGES ||
364
- process.env.MORO_AUTO_DISCOVERY_WATCH_FOR_CHANGES) === 'true';
365
- }
366
- if (process.env.AUTO_DISCOVERY_LOAD_ORDER || process.env.MORO_AUTO_DISCOVERY_LOAD_ORDER) {
367
- if (!config.modules!.autoDiscovery) config.modules!.autoDiscovery = {} as any;
368
- const loadOrder =
369
- process.env.AUTO_DISCOVERY_LOAD_ORDER || process.env.MORO_AUTO_DISCOVERY_LOAD_ORDER;
370
- if (['alphabetical', 'dependency', 'custom'].includes(loadOrder || '')) {
371
- config.modules!.autoDiscovery!.loadOrder = loadOrder as
372
- | 'alphabetical'
373
- | 'dependency'
374
- | 'custom';
375
- }
376
- }
377
- if (process.env.AUTO_DISCOVERY_FAIL_ON_ERROR || process.env.MORO_AUTO_DISCOVERY_FAIL_ON_ERROR) {
378
- if (!config.modules!.autoDiscovery) config.modules!.autoDiscovery = {} as any;
379
- config.modules!.autoDiscovery!.failOnError =
380
- (process.env.AUTO_DISCOVERY_FAIL_ON_ERROR ||
381
- process.env.MORO_AUTO_DISCOVERY_FAIL_ON_ERROR) === 'true';
382
- }
383
- if (process.env.AUTO_DISCOVERY_MAX_DEPTH || process.env.MORO_AUTO_DISCOVERY_MAX_DEPTH) {
384
- if (!config.modules!.autoDiscovery) config.modules!.autoDiscovery = {} as any;
385
- config.modules!.autoDiscovery!.maxDepth = parseInt(
386
- process.env.AUTO_DISCOVERY_MAX_DEPTH || process.env.MORO_AUTO_DISCOVERY_MAX_DEPTH || '5',
387
- 10
388
- );
389
- }
390
- }
391
-
392
- return config;
393
- }
394
-
395
- /**
396
- * Normalize createApp options to match AppConfig structure
397
- * This handles the flexible createApp API while converting to structured config
398
- */
399
- function normalizeCreateAppOptions(options: MoroOptions): Partial<AppConfig> {
400
- const config: Partial<AppConfig> = {};
401
-
402
- // Direct config section overrides - merge with existing config
403
- if (options.server) {
404
- config.server = { ...config.server, ...options.server } as any;
405
- }
406
- if (options.database) {
407
- config.database = { ...config.database, ...options.database } as any;
408
- }
409
- if (options.modules) {
410
- config.modules = { ...config.modules, ...options.modules } as any;
411
- }
412
-
413
- // Handle autoDiscover option (maps to modules.autoDiscovery)
414
- if (options.autoDiscover !== undefined) {
415
- const autoDiscoveryConfig =
416
- typeof options.autoDiscover === 'boolean'
417
- ? { enabled: options.autoDiscover }
418
- : options.autoDiscover;
419
-
420
- config.modules = {
421
- ...config.modules,
422
- autoDiscovery: {
423
- ...DEFAULT_CONFIG.modules.autoDiscovery,
424
- ...autoDiscoveryConfig,
425
- },
426
- } as any;
427
- }
428
-
429
- // Handle legacy modulesPath option (maps to modules.autoDiscovery.paths)
430
- if (options.modulesPath) {
431
- config.modules = {
432
- ...config.modules,
433
- autoDiscovery: {
434
- ...DEFAULT_CONFIG.modules.autoDiscovery,
435
- ...(config.modules as any)?.autoDiscovery,
436
- enabled: true,
437
- paths: [options.modulesPath],
438
- },
439
- } as any;
440
- }
441
- // Handle both 'logger' and 'logging' options (logger is an alias)
442
- if (options.logging) {
443
- config.logging = { ...config.logging, ...options.logging } as any;
444
- }
445
- if ((options as any).logger) {
446
- config.logging = { ...config.logging, ...(options as any).logger } as any;
447
- }
448
- if (options.security) {
449
- config.security = { ...config.security, ...options.security } as any;
450
- }
451
- if (options.external) {
452
- config.external = { ...config.external, ...options.external } as any;
453
- }
454
- if (options.performance) {
455
- config.performance = { ...config.performance, ...options.performance } as any;
456
- }
457
-
458
- // Handle shorthand boolean/object options
459
- if (options.cors !== undefined) {
460
- config.security = {
461
- ...config.security,
462
- cors:
463
- typeof options.cors === 'boolean'
464
- ? { ...DEFAULT_CONFIG.security.cors, enabled: options.cors }
465
- : { ...DEFAULT_CONFIG.security.cors, ...options.cors },
466
- } as any;
467
- }
468
-
469
- if (options.compression !== undefined) {
470
- config.performance = {
471
- ...config.performance,
472
- compression:
473
- typeof options.compression === 'boolean'
474
- ? { ...DEFAULT_CONFIG.performance.compression, enabled: options.compression }
475
- : { ...DEFAULT_CONFIG.performance.compression, ...options.compression },
476
- } as any;
477
- }
478
-
479
- if (options.helmet !== undefined) {
480
- config.security = {
481
- ...config.security,
482
- helmet:
483
- typeof options.helmet === 'boolean'
484
- ? { ...DEFAULT_CONFIG.security.helmet, enabled: options.helmet }
485
- : { ...DEFAULT_CONFIG.security.helmet, ...options.helmet },
486
- } as any;
487
- }
488
-
489
- return config;
490
- }
491
-
492
- /**
493
- * Check if a config field contains sensitive information
494
- */
495
- function isSensitiveField(path: string): boolean {
496
- const sensitivePatterns = [
497
- 'password',
498
- 'secret',
499
- 'key',
500
- 'token',
501
- 'auth',
502
- 'stripe',
503
- 'paypal',
504
- 'smtp.password',
505
- 'smtp.username',
506
- 'database.url',
507
- 'redis.url',
508
- 'mysql.password',
509
- ];
510
-
511
- return sensitivePatterns.some(pattern => path.toLowerCase().includes(pattern.toLowerCase()));
512
- }
513
-
514
- /**
515
- * Deep merge two configuration objects
516
- * Later object properties override earlier ones
517
- */
518
- function deepMerge<T>(target: T, source: Partial<T>): T {
519
- const result = { ...target };
520
-
521
- for (const key in source) {
522
- const sourceValue = source[key];
523
- const targetValue = result[key];
524
-
525
- if (
526
- sourceValue &&
527
- typeof sourceValue === 'object' &&
528
- !Array.isArray(sourceValue) &&
529
- targetValue &&
530
- typeof targetValue === 'object' &&
531
- !Array.isArray(targetValue)
532
- ) {
533
- (result as any)[key] = deepMerge(targetValue, sourceValue);
534
- } else if (sourceValue !== undefined) {
535
- (result as any)[key] = sourceValue;
536
- }
537
- }
538
-
539
- return result;
540
- }
541
-
542
- /**
543
- * Track configuration sources for debugging
544
- */
545
- function trackConfigSource(
546
- config: any,
547
- sourceMap: Map<string, ConfigSourceInfo>,
548
- source: ConfigSourceInfo['source'],
549
- path: string
550
- ): void {
551
- function traverse(obj: any, currentPath: string): void {
552
- for (const key in obj) {
553
- const value = obj[key];
554
- const fullPath = currentPath ? `${currentPath}.${key}` : key;
555
-
556
- if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
557
- traverse(value, fullPath);
558
- } else {
559
- sourceMap.set(fullPath, { source, path, value });
560
- }
561
- }
562
- }
563
-
564
- traverse(config, '');
565
- }
566
-
567
- /**
568
- * Log configuration sources for debugging
569
- */
570
- function logConfigurationSources(sourceMap: Map<string, ConfigSourceInfo>): void {
571
- const allSources = Array.from(sourceMap.entries()).sort(([a], [b]) => a.localeCompare(b));
572
- const nonDefaultSources = allSources.filter(([_, info]) => info.source !== 'default');
573
-
574
- if (process.env.NODE_ENV === 'production') {
575
- // In production, only show non-default values with sensitive data obfuscated
576
- if (nonDefaultSources.length > 0) {
577
- logger.debug(`Configuration overrides loaded (${nonDefaultSources.length} total)`);
578
-
579
- nonDefaultSources.forEach(([path, info]) => {
580
- const valueStr = isSensitiveField(path)
581
- ? '***'
582
- : typeof info.value === 'object'
583
- ? JSON.stringify(info.value)
584
- : String(info.value);
585
- logger.debug(` ${path}: ${valueStr} (from ${info.source})`);
586
- });
587
- } else {
588
- logger.debug('Using default configuration (no overrides)');
589
- }
590
- } else {
591
- // In development, show all sources for debugging
592
- logger.debug(`Configuration sources loaded (${allSources.length} total)`);
593
-
594
- allSources.forEach(([path, info]) => {
595
- const valueStr =
596
- typeof info.value === 'object' ? JSON.stringify(info.value) : String(info.value);
597
- logger.debug(` ${path}: ${valueStr} (from ${info.source})`);
598
- });
599
- }
600
- }