@morojs/moro 1.6.1 → 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 (575) 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 +202 -185
  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/auth/core.d.ts +78 -0
  97. package/dist/core/middleware/built-in/auth/core.js +358 -0
  98. package/dist/core/middleware/built-in/auth/core.js.map +1 -0
  99. package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +12 -23
  100. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
  101. package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
  102. package/dist/core/middleware/built-in/auth/hook.js +99 -0
  103. package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
  104. package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
  105. package/dist/core/middleware/built-in/auth/index.js +15 -0
  106. package/dist/core/middleware/built-in/auth/index.js.map +1 -0
  107. package/dist/core/middleware/built-in/auth/jwt-helpers.d.ts +118 -0
  108. package/dist/core/middleware/built-in/auth/jwt-helpers.js +218 -0
  109. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
  110. package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
  111. package/dist/core/middleware/built-in/auth/middleware.js +71 -0
  112. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
  113. package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
  114. package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +5 -10
  115. package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
  116. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
  117. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +10 -47
  118. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
  119. package/dist/core/middleware/built-in/cache/adapters/cache/index.d.ts +5 -0
  120. package/dist/core/middleware/built-in/cache/adapters/cache/index.js +21 -0
  121. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
  122. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
  123. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +3 -7
  124. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
  125. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +3 -1
  126. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +11 -9
  127. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
  128. package/dist/core/middleware/built-in/cache/adapters/index.d.ts +2 -0
  129. package/dist/core/middleware/built-in/cache/adapters/index.js +5 -0
  130. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
  131. package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
  132. package/dist/core/middleware/built-in/cache/core.js +87 -0
  133. package/dist/core/middleware/built-in/cache/core.js.map +1 -0
  134. package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
  135. package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +30 -14
  136. package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
  137. package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
  138. package/dist/core/middleware/built-in/cache/index.js +9 -0
  139. package/dist/core/middleware/built-in/cache/index.js.map +1 -0
  140. package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
  141. package/dist/core/middleware/built-in/cache/middleware.js +44 -0
  142. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
  143. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
  144. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +3 -7
  145. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
  146. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
  147. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +3 -7
  148. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
  149. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +3 -1
  150. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +12 -10
  151. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
  152. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.d.ts +5 -0
  153. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js +21 -0
  154. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
  155. package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
  156. package/dist/core/middleware/built-in/cdn/adapters/index.js +5 -0
  157. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
  158. package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
  159. package/dist/core/middleware/built-in/cdn/core.js +144 -0
  160. package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
  161. package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
  162. package/dist/core/middleware/built-in/cdn/hook.js +70 -0
  163. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
  164. package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
  165. package/dist/core/middleware/built-in/cdn/index.js +11 -0
  166. package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
  167. package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
  168. package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
  169. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
  170. package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
  171. package/dist/core/middleware/built-in/cookie/core.js +83 -0
  172. package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
  173. package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
  174. package/dist/core/middleware/built-in/cookie/hook.js +47 -0
  175. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
  176. package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
  177. package/dist/core/middleware/built-in/cookie/index.js +9 -0
  178. package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
  179. package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
  180. package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
  181. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
  182. package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
  183. package/dist/core/middleware/built-in/cors/core.js +51 -0
  184. package/dist/core/middleware/built-in/cors/core.js.map +1 -0
  185. package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
  186. package/dist/core/middleware/built-in/cors/hook.js +37 -0
  187. package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
  188. package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
  189. package/dist/core/middleware/built-in/cors/index.js +9 -0
  190. package/dist/core/middleware/built-in/cors/index.js.map +1 -0
  191. package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
  192. package/dist/core/middleware/built-in/cors/middleware.js +22 -0
  193. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
  194. package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
  195. package/dist/core/middleware/built-in/csp/core.js +88 -0
  196. package/dist/core/middleware/built-in/csp/core.js.map +1 -0
  197. package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
  198. package/dist/core/middleware/built-in/csp/hook.js +47 -0
  199. package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
  200. package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
  201. package/dist/core/middleware/built-in/csp/index.js +9 -0
  202. package/dist/core/middleware/built-in/csp/index.js.map +1 -0
  203. package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
  204. package/dist/core/middleware/built-in/csp/middleware.js +29 -0
  205. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
  206. package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
  207. package/dist/core/middleware/built-in/csrf/core.js +69 -0
  208. package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
  209. package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
  210. package/dist/core/middleware/built-in/csrf/hook.js +45 -0
  211. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
  212. package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
  213. package/dist/core/middleware/built-in/csrf/index.js +9 -0
  214. package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
  215. package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
  216. package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
  217. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
  218. package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
  219. package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
  220. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
  221. package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
  222. package/dist/core/middleware/built-in/error-tracker/middleware.js +26 -0
  223. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
  224. package/dist/core/middleware/built-in/index.d.ts +28 -61
  225. package/dist/core/middleware/built-in/index.js +48 -78
  226. package/dist/core/middleware/built-in/index.js.map +1 -1
  227. package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
  228. package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
  229. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
  230. package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
  231. package/dist/core/middleware/built-in/performance-monitor/middleware.js +29 -0
  232. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
  233. package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
  234. package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
  235. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
  236. package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
  237. package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +24 -22
  238. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
  239. package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
  240. package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
  241. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
  242. package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
  243. package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
  244. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
  245. package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
  246. package/dist/core/middleware/built-in/request-logger/index.js +4 -0
  247. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
  248. package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
  249. package/dist/core/middleware/built-in/request-logger/middleware.js +24 -0
  250. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
  251. package/dist/core/middleware/built-in/session/core.d.ts +73 -0
  252. package/dist/core/middleware/built-in/session/core.js +227 -0
  253. package/dist/core/middleware/built-in/session/core.js.map +1 -0
  254. package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
  255. package/dist/core/middleware/built-in/session/hook.js +53 -0
  256. package/dist/core/middleware/built-in/session/hook.js.map +1 -0
  257. package/dist/core/middleware/built-in/session/index.d.ts +3 -0
  258. package/dist/core/middleware/built-in/session/index.js +9 -0
  259. package/dist/core/middleware/built-in/session/index.js.map +1 -0
  260. package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
  261. package/dist/core/middleware/built-in/session/middleware.js +38 -0
  262. package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
  263. package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
  264. package/dist/core/middleware/built-in/sse/core.js +117 -0
  265. package/dist/core/middleware/built-in/sse/core.js.map +1 -0
  266. package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
  267. package/dist/core/middleware/built-in/sse/hook.js +60 -0
  268. package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
  269. package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
  270. package/dist/core/middleware/built-in/sse/index.js +9 -0
  271. package/dist/core/middleware/built-in/sse/index.js.map +1 -0
  272. package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
  273. package/dist/core/middleware/built-in/sse/middleware.js +43 -0
  274. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
  275. package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
  276. package/dist/core/middleware/built-in/validation/core.js +93 -0
  277. package/dist/core/middleware/built-in/validation/core.js.map +1 -0
  278. package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
  279. package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +16 -9
  280. package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
  281. package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
  282. package/dist/core/middleware/built-in/validation/index.js +9 -0
  283. package/dist/core/middleware/built-in/validation/index.js.map +1 -0
  284. package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
  285. package/dist/core/middleware/built-in/validation/middleware.js +27 -0
  286. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
  287. package/dist/core/middleware/index.d.ts +4 -4
  288. package/dist/core/middleware/index.js +14 -28
  289. package/dist/core/middleware/index.js.map +1 -1
  290. package/dist/core/modules/auto-discovery.d.ts +19 -2
  291. package/dist/core/modules/auto-discovery.js +391 -74
  292. package/dist/core/modules/auto-discovery.js.map +1 -1
  293. package/dist/core/modules/index.d.ts +2 -2
  294. package/dist/core/modules/index.js +2 -9
  295. package/dist/core/modules/index.js.map +1 -1
  296. package/dist/core/modules/modules.d.ts +3 -3
  297. package/dist/core/modules/modules.js +23 -54
  298. package/dist/core/modules/modules.js.map +1 -1
  299. package/dist/core/networking/adapters/index.d.ts +4 -3
  300. package/dist/core/networking/adapters/index.js +3 -7
  301. package/dist/core/networking/adapters/index.js.map +1 -1
  302. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
  303. package/dist/core/networking/adapters/socketio-adapter.js +5 -40
  304. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  305. package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
  306. package/dist/core/networking/adapters/uws-adapter.js +513 -0
  307. package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
  308. package/dist/core/networking/adapters/ws-adapter.d.ts +2 -2
  309. package/dist/core/networking/adapters/ws-adapter.js +8 -43
  310. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  311. package/dist/core/networking/index.d.ts +3 -2
  312. package/dist/core/networking/index.js +2 -7
  313. package/dist/core/networking/index.js.map +1 -1
  314. package/dist/core/networking/service-discovery.js +8 -12
  315. package/dist/core/networking/service-discovery.js.map +1 -1
  316. package/dist/core/networking/websocket-adapter.js +1 -2
  317. package/dist/core/networking/websocket-adapter.js.map +1 -1
  318. package/dist/core/networking/websocket-manager.d.ts +3 -3
  319. package/dist/core/networking/websocket-manager.js +9 -11
  320. package/dist/core/networking/websocket-manager.js.map +1 -1
  321. package/dist/core/pooling/object-pool-manager.d.ts +140 -0
  322. package/dist/core/pooling/object-pool-manager.js +502 -0
  323. package/dist/core/pooling/object-pool-manager.js.map +1 -0
  324. package/dist/core/routing/app-integration.d.ts +14 -12
  325. package/dist/core/routing/app-integration.js +49 -85
  326. package/dist/core/routing/app-integration.js.map +1 -1
  327. package/dist/core/routing/index.d.ts +17 -11
  328. package/dist/core/routing/index.js +48 -237
  329. package/dist/core/routing/index.js.map +1 -1
  330. package/dist/core/routing/path-matcher.d.ts +67 -0
  331. package/dist/core/routing/path-matcher.js +182 -0
  332. package/dist/core/routing/path-matcher.js.map +1 -0
  333. package/dist/core/routing/router.d.ts +38 -0
  334. package/dist/core/routing/router.js +68 -0
  335. package/dist/core/routing/router.js.map +1 -0
  336. package/dist/core/routing/unified-router.d.ts +132 -0
  337. package/dist/core/routing/unified-router.js +639 -0
  338. package/dist/core/routing/unified-router.js.map +1 -0
  339. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  340. package/dist/core/runtime/aws-lambda-adapter.js +2 -6
  341. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  342. package/dist/core/runtime/base-adapter.d.ts +2 -2
  343. package/dist/core/runtime/base-adapter.js +3 -7
  344. package/dist/core/runtime/base-adapter.js.map +1 -1
  345. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  346. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
  347. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  348. package/dist/core/runtime/index.d.ts +12 -12
  349. package/dist/core/runtime/index.js +22 -35
  350. package/dist/core/runtime/index.js.map +1 -1
  351. package/dist/core/runtime/node-adapter.d.ts +4 -4
  352. package/dist/core/runtime/node-adapter.js +18 -49
  353. package/dist/core/runtime/node-adapter.js.map +1 -1
  354. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  355. package/dist/core/runtime/vercel-edge-adapter.js +2 -6
  356. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  357. package/dist/core/utilities/circuit-breaker.js +1 -5
  358. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  359. package/dist/core/utilities/container.js +12 -22
  360. package/dist/core/utilities/container.js.map +1 -1
  361. package/dist/core/utilities/hooks.d.ts +2 -2
  362. package/dist/core/utilities/hooks.js +7 -12
  363. package/dist/core/utilities/hooks.js.map +1 -1
  364. package/dist/core/utilities/index.d.ts +5 -4
  365. package/dist/core/utilities/index.js +5 -19
  366. package/dist/core/utilities/index.js.map +1 -1
  367. package/dist/core/utilities/package-utils.d.ts +38 -0
  368. package/dist/core/utilities/package-utils.js +57 -0
  369. package/dist/core/utilities/package-utils.js.map +1 -0
  370. package/dist/core/validation/adapters.d.ts +1 -1
  371. package/dist/core/validation/adapters.js +15 -26
  372. package/dist/core/validation/adapters.js.map +1 -1
  373. package/dist/core/validation/index.d.ts +6 -4
  374. package/dist/core/validation/index.js +57 -28
  375. package/dist/core/validation/index.js.map +1 -1
  376. package/dist/core/validation/schema-interface.js +3 -9
  377. package/dist/core/validation/schema-interface.js.map +1 -1
  378. package/dist/index.d.ts +52 -52
  379. package/dist/index.js +24 -132
  380. package/dist/index.js.map +1 -1
  381. package/dist/moro.d.ts +70 -16
  382. package/dist/moro.js +650 -269
  383. package/dist/moro.js.map +1 -1
  384. package/dist/types/auth.js +3 -9
  385. package/dist/types/auth.js.map +1 -1
  386. package/dist/types/cache.js +1 -2
  387. package/dist/types/cdn.js +1 -2
  388. package/dist/types/config.d.ts +73 -2
  389. package/dist/types/config.js +1 -2
  390. package/dist/types/config.js.map +1 -1
  391. package/dist/types/core.d.ts +36 -42
  392. package/dist/types/core.js +1 -2
  393. package/dist/types/database.js +1 -2
  394. package/dist/types/discovery.js +1 -2
  395. package/dist/types/events.js +1 -2
  396. package/dist/types/hooks.d.ts +4 -1
  397. package/dist/types/hooks.js +1 -2
  398. package/dist/types/http.d.ts +16 -1
  399. package/dist/types/http.js +1 -2
  400. package/dist/types/logger.d.ts +7 -0
  401. package/dist/types/logger.js +1 -2
  402. package/dist/types/module.d.ts +11 -0
  403. package/dist/types/module.js +1 -2
  404. package/dist/types/runtime.d.ts +1 -1
  405. package/dist/types/runtime.js +1 -2
  406. package/dist/types/session.js +1 -2
  407. package/package.json +18 -55
  408. package/dist/core/config/loader.d.ts +0 -7
  409. package/dist/core/config/loader.js +0 -269
  410. package/dist/core/config/loader.js.map +0 -1
  411. package/dist/core/config/validation.d.ts +0 -17
  412. package/dist/core/config/validation.js +0 -131
  413. package/dist/core/config/validation.js.map +0 -1
  414. package/dist/core/http/router.d.ts +0 -14
  415. package/dist/core/http/router.js +0 -109
  416. package/dist/core/http/router.js.map +0 -1
  417. package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
  418. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +0 -5
  419. package/dist/core/middleware/built-in/adapters/cache/index.js +0 -28
  420. package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
  421. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
  422. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
  423. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
  424. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
  425. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
  426. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +0 -5
  427. package/dist/core/middleware/built-in/adapters/cdn/index.js +0 -28
  428. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
  429. package/dist/core/middleware/built-in/adapters/index.d.ts +0 -4
  430. package/dist/core/middleware/built-in/adapters/index.js +0 -26
  431. package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
  432. package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
  433. package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
  434. package/dist/core/middleware/built-in/auth.d.ts +0 -30
  435. package/dist/core/middleware/built-in/auth.js +0 -281
  436. package/dist/core/middleware/built-in/auth.js.map +0 -1
  437. package/dist/core/middleware/built-in/cache.d.ts +0 -3
  438. package/dist/core/middleware/built-in/cache.js.map +0 -1
  439. package/dist/core/middleware/built-in/cdn.d.ts +0 -3
  440. package/dist/core/middleware/built-in/cdn.js +0 -113
  441. package/dist/core/middleware/built-in/cdn.js.map +0 -1
  442. package/dist/core/middleware/built-in/cookie.d.ts +0 -14
  443. package/dist/core/middleware/built-in/cookie.js +0 -68
  444. package/dist/core/middleware/built-in/cookie.js.map +0 -1
  445. package/dist/core/middleware/built-in/cors.d.ts +0 -2
  446. package/dist/core/middleware/built-in/cors.js +0 -29
  447. package/dist/core/middleware/built-in/cors.js.map +0 -1
  448. package/dist/core/middleware/built-in/csp.d.ts +0 -22
  449. package/dist/core/middleware/built-in/csp.js +0 -71
  450. package/dist/core/middleware/built-in/csp.js.map +0 -1
  451. package/dist/core/middleware/built-in/csrf.d.ts +0 -9
  452. package/dist/core/middleware/built-in/csrf.js +0 -63
  453. package/dist/core/middleware/built-in/csrf.js.map +0 -1
  454. package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
  455. package/dist/core/middleware/built-in/error-tracker.js +0 -19
  456. package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
  457. package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
  458. package/dist/core/middleware/built-in/performance-monitor.js +0 -22
  459. package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
  460. package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
  461. package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
  462. package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
  463. package/dist/core/middleware/built-in/request-logger.js +0 -16
  464. package/dist/core/middleware/built-in/request-logger.js.map +0 -1
  465. package/dist/core/middleware/built-in/session.d.ts +0 -41
  466. package/dist/core/middleware/built-in/session.js +0 -209
  467. package/dist/core/middleware/built-in/session.js.map +0 -1
  468. package/dist/core/middleware/built-in/sse.d.ts +0 -6
  469. package/dist/core/middleware/built-in/sse.js +0 -71
  470. package/dist/core/middleware/built-in/sse.js.map +0 -1
  471. package/dist/core/middleware/built-in/validation.d.ts +0 -2
  472. package/dist/core/middleware/built-in/validation.js.map +0 -1
  473. package/src/core/auth/README.md +0 -339
  474. package/src/core/auth/morojs-adapter.ts +0 -410
  475. package/src/core/config/file-loader.ts +0 -407
  476. package/src/core/config/index.ts +0 -60
  477. package/src/core/config/loader.ts +0 -633
  478. package/src/core/config/schema.ts +0 -150
  479. package/src/core/config/utils.ts +0 -251
  480. package/src/core/config/validation.ts +0 -140
  481. package/src/core/database/README.md +0 -228
  482. package/src/core/database/adapters/drizzle.ts +0 -403
  483. package/src/core/database/adapters/index.ts +0 -42
  484. package/src/core/database/adapters/mongodb.ts +0 -269
  485. package/src/core/database/adapters/mysql.ts +0 -207
  486. package/src/core/database/adapters/postgresql.ts +0 -201
  487. package/src/core/database/adapters/redis.ts +0 -326
  488. package/src/core/database/adapters/sqlite.ts +0 -247
  489. package/src/core/database/index.ts +0 -3
  490. package/src/core/docs/index.ts +0 -231
  491. package/src/core/docs/openapi-generator.ts +0 -576
  492. package/src/core/docs/schema-to-openapi.ts +0 -148
  493. package/src/core/docs/simple-docs.ts +0 -295
  494. package/src/core/docs/swagger-ui.ts +0 -351
  495. package/src/core/docs/zod-to-openapi.ts +0 -532
  496. package/src/core/events/event-bus.ts +0 -231
  497. package/src/core/events/index.ts +0 -12
  498. package/src/core/framework.ts +0 -636
  499. package/src/core/http/http-server.ts +0 -1787
  500. package/src/core/http/index.ts +0 -6
  501. package/src/core/http/router.ts +0 -141
  502. package/src/core/logger/filters.ts +0 -145
  503. package/src/core/logger/index.ts +0 -20
  504. package/src/core/logger/logger.ts +0 -814
  505. package/src/core/logger/outputs.ts +0 -134
  506. package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
  507. package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
  508. package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
  509. package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -100
  510. package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
  511. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
  512. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -83
  513. package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
  514. package/src/core/middleware/built-in/adapters/index.ts +0 -7
  515. package/src/core/middleware/built-in/auth-helpers.ts +0 -401
  516. package/src/core/middleware/built-in/auth-providers.ts +0 -480
  517. package/src/core/middleware/built-in/auth.ts +0 -329
  518. package/src/core/middleware/built-in/cache.ts +0 -211
  519. package/src/core/middleware/built-in/cdn.ts +0 -124
  520. package/src/core/middleware/built-in/cookie.ts +0 -85
  521. package/src/core/middleware/built-in/cors.ts +0 -38
  522. package/src/core/middleware/built-in/csp.ts +0 -101
  523. package/src/core/middleware/built-in/csrf.ts +0 -82
  524. package/src/core/middleware/built-in/error-tracker.ts +0 -16
  525. package/src/core/middleware/built-in/index.ts +0 -79
  526. package/src/core/middleware/built-in/performance-monitor.ts +0 -25
  527. package/src/core/middleware/built-in/rate-limit.ts +0 -60
  528. package/src/core/middleware/built-in/request-logger.ts +0 -14
  529. package/src/core/middleware/built-in/session.ts +0 -288
  530. package/src/core/middleware/built-in/sse.ts +0 -86
  531. package/src/core/middleware/built-in/validation.ts +0 -33
  532. package/src/core/middleware/index.ts +0 -177
  533. package/src/core/modules/auto-discovery.ts +0 -263
  534. package/src/core/modules/index.ts +0 -3
  535. package/src/core/modules/modules.ts +0 -124
  536. package/src/core/networking/adapters/index.ts +0 -16
  537. package/src/core/networking/adapters/socketio-adapter.ts +0 -252
  538. package/src/core/networking/adapters/ws-adapter.ts +0 -430
  539. package/src/core/networking/index.ts +0 -3
  540. package/src/core/networking/service-discovery.ts +0 -304
  541. package/src/core/networking/websocket-adapter.ts +0 -217
  542. package/src/core/networking/websocket-manager.ts +0 -308
  543. package/src/core/routing/app-integration.ts +0 -216
  544. package/src/core/routing/index.ts +0 -488
  545. package/src/core/runtime/aws-lambda-adapter.ts +0 -147
  546. package/src/core/runtime/base-adapter.ts +0 -130
  547. package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
  548. package/src/core/runtime/index.ts +0 -62
  549. package/src/core/runtime/node-adapter.ts +0 -196
  550. package/src/core/runtime/vercel-edge-adapter.ts +0 -114
  551. package/src/core/utilities/circuit-breaker.ts +0 -46
  552. package/src/core/utilities/container.ts +0 -736
  553. package/src/core/utilities/hooks.ts +0 -142
  554. package/src/core/utilities/index.ts +0 -16
  555. package/src/core/validation/adapters.ts +0 -147
  556. package/src/core/validation/index.ts +0 -206
  557. package/src/core/validation/schema-interface.ts +0 -100
  558. package/src/index.ts +0 -226
  559. package/src/moro.ts +0 -1197
  560. package/src/types/auth.ts +0 -440
  561. package/src/types/cache.ts +0 -38
  562. package/src/types/cdn.ts +0 -22
  563. package/src/types/config.ts +0 -157
  564. package/src/types/core.ts +0 -56
  565. package/src/types/database.ts +0 -32
  566. package/src/types/discovery.ts +0 -7
  567. package/src/types/events.ts +0 -82
  568. package/src/types/hooks.ts +0 -47
  569. package/src/types/http.ts +0 -67
  570. package/src/types/logger.ts +0 -93
  571. package/src/types/module.ts +0 -87
  572. package/src/types/runtime.ts +0 -76
  573. package/src/types/session.ts +0 -89
  574. package/tsconfig.json +0 -21
  575. /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
@@ -1,736 +0,0 @@
1
- // Enhanced Functional Dependency Injection Container
2
- import { EventEmitter } from 'events';
3
-
4
- // Service lifecycle states
5
- export enum ServiceLifecycle {
6
- UNINITIALIZED = 'uninitialized',
7
- INITIALIZING = 'initializing',
8
- INITIALIZED = 'initialized',
9
- DISPOSING = 'disposing',
10
- DISPOSED = 'disposed',
11
- ERROR = 'error',
12
- }
13
-
14
- // Service scopes
15
- export enum ServiceScope {
16
- SINGLETON = 'singleton', // One instance per container
17
- TRANSIENT = 'transient', // New instance every time
18
- REQUEST = 'request', // One instance per request context
19
- MODULE = 'module', // One instance per module
20
- }
21
-
22
- // Service metadata and configuration
23
- export interface ServiceMetadata {
24
- name: string;
25
- scope: ServiceScope;
26
- tags: string[];
27
- dependencies: string[];
28
- optional: string[];
29
- lifecycle?: {
30
- init?: () => Promise<void> | void;
31
- dispose?: () => Promise<void> | void;
32
- healthCheck?: () => Promise<boolean> | boolean;
33
- };
34
- fallback?: () => any;
35
- timeout?: number;
36
- }
37
-
38
- // Service definition with functional patterns
39
- export interface ServiceDefinition<T = any> {
40
- factory: ServiceFactory<T>;
41
- metadata: ServiceMetadata;
42
- interceptors: ServiceInterceptor[];
43
- decorators: ServiceDecorator<T>[];
44
- }
45
-
46
- // Functional factory type
47
- export type ServiceFactory<T> = (
48
- dependencies: Record<string, any>,
49
- context?: ServiceContext
50
- ) => T | Promise<T>;
51
-
52
- // Service interceptor for AOP patterns
53
- export type ServiceInterceptor = (
54
- serviceName: string,
55
- dependencies: Record<string, any>,
56
- context: ServiceContext,
57
- next: () => any
58
- ) => any | Promise<any>;
59
-
60
- // Service decorator for functional composition
61
- export type ServiceDecorator<T> = (instance: T, context: ServiceContext) => T | Promise<T>;
62
-
63
- // Service context for request-scoped services
64
- export interface ServiceContext {
65
- requestId?: string;
66
- moduleId?: string;
67
- metadata: Record<string, any>;
68
- timestamp: number;
69
- }
70
-
71
- // Service instance wrapper
72
- interface ServiceInstance<T = any> {
73
- value: T;
74
- metadata: ServiceMetadata;
75
- lifecycle: ServiceLifecycle;
76
- lastAccessed: number;
77
- accessCount: number;
78
- context?: ServiceContext;
79
- }
80
-
81
- // Higher-order functions for service composition
82
- export const withLogging =
83
- <T>(logger: any) =>
84
- (factory: ServiceFactory<T>): ServiceFactory<T> =>
85
- (deps, ctx) => {
86
- logger.debug(`Creating service with dependencies: ${Object.keys(deps).join(', ')}`);
87
- const start = Date.now();
88
- const result = factory(deps, ctx);
89
- logger.debug(`Service created in ${Date.now() - start}ms`);
90
- return result;
91
- };
92
-
93
- export const withCaching =
94
- <T>(ttl = 300000) =>
95
- (factory: ServiceFactory<T>): ServiceFactory<T> => {
96
- const cache = new Map<string, { value: T; expires: number }>();
97
- return async (deps, ctx) => {
98
- const key = `${ctx?.requestId || 'global'}_${JSON.stringify(deps)}`;
99
- const cached = cache.get(key);
100
- if (cached && cached.expires > Date.now()) {
101
- return cached.value;
102
- }
103
- const result = await factory(deps, ctx);
104
- cache.set(key, { value: result, expires: Date.now() + ttl });
105
- return result;
106
- };
107
- };
108
-
109
- export const withRetry =
110
- <T>(maxRetries = 3, delay = 1000) =>
111
- (factory: ServiceFactory<T>): ServiceFactory<T> =>
112
- async (deps, ctx) => {
113
- let lastError: Error | null = null;
114
- for (let i = 0; i <= maxRetries; i++) {
115
- try {
116
- return await factory(deps, ctx);
117
- } catch (error) {
118
- lastError = error as Error;
119
- if (i < maxRetries) {
120
- await new Promise(resolve => setTimeout(resolve, delay * Math.pow(2, i)));
121
- }
122
- }
123
- }
124
- throw lastError;
125
- };
126
-
127
- export const withTimeout =
128
- <T>(timeoutMs = 5000) =>
129
- (factory: ServiceFactory<T>): ServiceFactory<T> =>
130
- async (deps, ctx) => {
131
- return Promise.race([
132
- factory(deps, ctx),
133
- new Promise<never>((_, reject) =>
134
- setTimeout(
135
- () => reject(new Error(`Service creation timeout after ${timeoutMs}ms`)),
136
- timeoutMs
137
- )
138
- ),
139
- ]);
140
- };
141
-
142
- // Enhanced Functional Container
143
- export class FunctionalContainer extends EventEmitter {
144
- private services = new Map<string, ServiceDefinition>();
145
- private instances = new Map<string, ServiceInstance>();
146
- private requestScopes = new Map<string, Map<string, ServiceInstance>>();
147
- private moduleScopes = new Map<string, Map<string, ServiceInstance>>();
148
- private globalInterceptors: ServiceInterceptor[] = [];
149
- private cleanupInterval?: NodeJS.Timeout;
150
-
151
- constructor() {
152
- super();
153
- this.setupCleanup();
154
- }
155
-
156
- // Fluent registration API
157
- register<T>(name: string): ServiceRegistrationBuilder<T> {
158
- return new ServiceRegistrationBuilder<T>(this, name);
159
- }
160
-
161
- // Direct registration for simple cases
162
- singleton<T>(name: string, factory: ServiceFactory<T>): this {
163
- this.register<T>(name).singleton().factory(factory).build();
164
- return this;
165
- }
166
-
167
- transient<T>(name: string, factory: ServiceFactory<T>): this {
168
- this.register<T>(name).transient().factory(factory).build();
169
- return this;
170
- }
171
-
172
- // Functional service registration with HOFs
173
- compose<T>(
174
- name: string,
175
- ...compositionFns: Array<(factory: ServiceFactory<T>) => ServiceFactory<T>>
176
- ): ServiceRegistrationBuilder<T> {
177
- const builder = this.register<T>(name);
178
- return builder.compose(...compositionFns);
179
- }
180
-
181
- // Enhanced resolution with context
182
- async resolve<T>(name: string, context?: ServiceContext): Promise<T> {
183
- const service = this.services.get(name);
184
- if (!service) {
185
- throw new Error(`Service '${name}' not registered`);
186
- }
187
-
188
- const scopeKey = this.getScopeKey(name, service.metadata.scope, context);
189
- const instanceMap = this.getInstanceMap(service.metadata.scope, context);
190
-
191
- let instance = instanceMap.get(scopeKey);
192
-
193
- if (!instance || this.shouldRecreate(instance, service.metadata)) {
194
- instance = await this.createInstance(name, service, context);
195
- instanceMap.set(scopeKey, instance);
196
- }
197
-
198
- instance.lastAccessed = Date.now();
199
- instance.accessCount++;
200
-
201
- return instance.value;
202
- }
203
-
204
- // Synchronous resolution for non-async services
205
- resolveSync<T>(name: string, context?: ServiceContext): T {
206
- const service = this.services.get(name);
207
- if (!service) {
208
- throw new Error(`Service '${name}' not registered`);
209
- }
210
-
211
- const scopeKey = this.getScopeKey(name, service.metadata.scope, context);
212
- const instanceMap = this.getInstanceMap(service.metadata.scope, context);
213
-
214
- let instance = instanceMap.get(scopeKey);
215
-
216
- if (!instance || this.shouldRecreate(instance, service.metadata)) {
217
- const result = this.createInstanceSync(name, service, context);
218
- instance = {
219
- value: result,
220
- metadata: service.metadata,
221
- lifecycle: ServiceLifecycle.INITIALIZED,
222
- lastAccessed: Date.now(),
223
- accessCount: 1,
224
- context,
225
- };
226
- instanceMap.set(scopeKey, instance);
227
- }
228
-
229
- instance.lastAccessed = Date.now();
230
- instance.accessCount++;
231
-
232
- return instance.value;
233
- }
234
-
235
- // Add global interceptors
236
- addInterceptor(interceptor: ServiceInterceptor): this {
237
- this.globalInterceptors.push(interceptor);
238
- return this;
239
- }
240
-
241
- // Service health checks
242
- async healthCheck(): Promise<Record<string, boolean>> {
243
- const results: Record<string, boolean> = {};
244
-
245
- for (const [name, instance] of this.instances) {
246
- const service = this.services.get(name);
247
- if (service?.metadata.lifecycle?.healthCheck) {
248
- try {
249
- results[name] = await service.metadata.lifecycle.healthCheck();
250
- } catch {
251
- results[name] = false;
252
- }
253
- } else {
254
- results[name] = instance.lifecycle === ServiceLifecycle.INITIALIZED;
255
- }
256
- }
257
-
258
- return results;
259
- }
260
-
261
- // Clear request-scoped services
262
- clearRequestScope(requestId: string): void {
263
- const requestScope = this.requestScopes.get(requestId);
264
- if (requestScope) {
265
- requestScope.clear();
266
- this.requestScopes.delete(requestId);
267
- }
268
- }
269
-
270
- // Clear module-scoped services
271
- clearModuleScope(moduleId: string): void {
272
- const moduleScope = this.moduleScopes.get(moduleId);
273
- if (moduleScope) {
274
- moduleScope.clear();
275
- this.moduleScopes.delete(moduleId);
276
- }
277
- }
278
-
279
- // Service introspection
280
- getServiceInfo(): Record<string, any> {
281
- const info: Record<string, any> = {};
282
-
283
- for (const [name, service] of this.services) {
284
- const instance = this.instances.get(name);
285
- info[name] = {
286
- scope: service.metadata.scope,
287
- dependencies: service.metadata.dependencies,
288
- tags: service.metadata.tags,
289
- lifecycle: instance?.lifecycle || ServiceLifecycle.UNINITIALIZED,
290
- accessCount: instance?.accessCount || 0,
291
- lastAccessed: instance?.lastAccessed ? new Date(instance.lastAccessed).toISOString() : null,
292
- };
293
- }
294
-
295
- return info;
296
- }
297
-
298
- // Dispose all services
299
- async dispose(): Promise<void> {
300
- for (const [name, instance] of this.instances) {
301
- const service = this.services.get(name);
302
- if (
303
- service?.metadata.lifecycle?.dispose &&
304
- instance.lifecycle === ServiceLifecycle.INITIALIZED
305
- ) {
306
- try {
307
- instance.lifecycle = ServiceLifecycle.DISPOSING;
308
- await service.metadata.lifecycle.dispose();
309
- instance.lifecycle = ServiceLifecycle.DISPOSED;
310
- } catch (error) {
311
- instance.lifecycle = ServiceLifecycle.ERROR;
312
- this.emit('disposeError', { name, error });
313
- }
314
- }
315
- }
316
-
317
- this.instances.clear();
318
- this.requestScopes.clear();
319
- this.moduleScopes.clear();
320
- }
321
-
322
- // Internal implementation methods
323
- private async createInstance<T>(
324
- name: string,
325
- service: ServiceDefinition<T>,
326
- context?: ServiceContext
327
- ): Promise<ServiceInstance<T>> {
328
- const instance: ServiceInstance<T> = {
329
- value: undefined as any,
330
- metadata: service.metadata,
331
- lifecycle: ServiceLifecycle.INITIALIZING,
332
- lastAccessed: Date.now(),
333
- accessCount: 0,
334
- context,
335
- };
336
-
337
- try {
338
- // Resolve dependencies
339
- const dependencies = await this.resolveDependencies(service.metadata, context);
340
-
341
- // Apply interceptors
342
- const interceptedFactory = this.applyInterceptors(
343
- name,
344
- service.factory,
345
- dependencies,
346
- context
347
- );
348
-
349
- // Create instance
350
- instance.value = await interceptedFactory();
351
-
352
- // Apply decorators
353
- instance.value = await this.applyDecorators(instance.value, service.decorators, context);
354
-
355
- // Run initialization lifecycle
356
- if (service.metadata.lifecycle?.init) {
357
- await service.metadata.lifecycle.init();
358
- }
359
-
360
- instance.lifecycle = ServiceLifecycle.INITIALIZED;
361
- this.emit('serviceCreated', { name, instance });
362
- } catch (error) {
363
- instance.lifecycle = ServiceLifecycle.ERROR;
364
- this.emit('serviceError', { name, error });
365
-
366
- // Try fallback if available
367
- if (service.metadata.fallback) {
368
- instance.value = service.metadata.fallback();
369
- instance.lifecycle = ServiceLifecycle.INITIALIZED;
370
- } else {
371
- throw error;
372
- }
373
- }
374
-
375
- return instance;
376
- }
377
-
378
- private createInstanceSync<T>(
379
- name: string,
380
- service: ServiceDefinition<T>,
381
- context?: ServiceContext
382
- ): T {
383
- // Simplified sync version - no async dependencies or lifecycle
384
- const dependencies = this.resolveDependenciesSync(service.metadata, context);
385
- return service.factory(dependencies, context) as T;
386
- }
387
-
388
- private async resolveDependencies(
389
- metadata: ServiceMetadata,
390
- context?: ServiceContext
391
- ): Promise<Record<string, any>> {
392
- const dependencies: Record<string, any> = {};
393
-
394
- for (const dep of metadata.dependencies) {
395
- dependencies[dep] = await this.resolve(dep, context);
396
- }
397
-
398
- for (const optDep of metadata.optional) {
399
- try {
400
- dependencies[optDep] = await this.resolve(optDep, context);
401
- } catch {
402
- // Optional dependency - continue without it
403
- }
404
- }
405
-
406
- return dependencies;
407
- }
408
-
409
- private resolveDependenciesSync(
410
- metadata: ServiceMetadata,
411
- context?: ServiceContext
412
- ): Record<string, any> {
413
- const dependencies: Record<string, any> = {};
414
-
415
- for (const dep of metadata.dependencies) {
416
- dependencies[dep] = this.resolveSync(dep, context);
417
- }
418
-
419
- for (const optDep of metadata.optional) {
420
- try {
421
- dependencies[optDep] = this.resolveSync(optDep, context);
422
- } catch {
423
- // Optional dependency - continue without it
424
- }
425
- }
426
-
427
- return dependencies;
428
- }
429
-
430
- private applyInterceptors(
431
- name: string,
432
- factory: ServiceFactory<any>,
433
- dependencies: Record<string, any>,
434
- context?: ServiceContext
435
- ): () => any {
436
- return [...this.globalInterceptors].reduceRight(
437
- (next: () => any, interceptor: ServiceInterceptor) => () =>
438
- interceptor(name, dependencies, context || this.createDefaultContext(), next),
439
- () => factory(dependencies, context)
440
- );
441
- }
442
-
443
- private async applyDecorators<T>(
444
- instance: T,
445
- decorators: ServiceDecorator<T>[],
446
- context?: ServiceContext
447
- ): Promise<T> {
448
- let result = instance;
449
- for (const decorator of decorators) {
450
- result = await decorator(result, context || this.createDefaultContext());
451
- }
452
- return result;
453
- }
454
-
455
- private getScopeKey(serviceName: string, scope: ServiceScope, context?: ServiceContext): string {
456
- switch (scope) {
457
- case ServiceScope.REQUEST:
458
- return `${serviceName}:${context?.requestId || 'default-request'}`;
459
- case ServiceScope.MODULE:
460
- return `${serviceName}:${context?.moduleId || 'default-module'}`;
461
- default:
462
- return serviceName; // Each singleton service gets its own key
463
- }
464
- }
465
-
466
- private getInstanceMap(
467
- scope: ServiceScope,
468
- context?: ServiceContext
469
- ): Map<string, ServiceInstance> {
470
- switch (scope) {
471
- case ServiceScope.REQUEST: {
472
- const requestId = context?.requestId || 'default-request';
473
- if (!this.requestScopes.has(requestId)) {
474
- this.requestScopes.set(requestId, new Map());
475
- }
476
- return this.requestScopes.get(requestId)!;
477
- }
478
-
479
- case ServiceScope.MODULE: {
480
- const moduleId = context?.moduleId || 'default-module';
481
- if (!this.moduleScopes.has(moduleId)) {
482
- this.moduleScopes.set(moduleId, new Map());
483
- }
484
- return this.moduleScopes.get(moduleId)!;
485
- }
486
-
487
- default:
488
- return this.instances;
489
- }
490
- }
491
-
492
- private shouldRecreate(instance: ServiceInstance, metadata: ServiceMetadata): boolean {
493
- return (
494
- metadata.scope === ServiceScope.TRANSIENT ||
495
- instance.lifecycle === ServiceLifecycle.ERROR ||
496
- instance.lifecycle === ServiceLifecycle.DISPOSED
497
- );
498
- }
499
-
500
- private createDefaultContext(): ServiceContext {
501
- return {
502
- metadata: {},
503
- timestamp: Date.now(),
504
- };
505
- }
506
-
507
- private setupCleanup(): void {
508
- // Cleanup request scopes after timeout
509
- this.cleanupInterval = setInterval(
510
- () => {
511
- const now = Date.now();
512
- const timeout = 30 * 60 * 1000; // 30 minutes
513
-
514
- for (const [requestId, scope] of this.requestScopes) {
515
- const hasRecentActivity = Array.from(scope.values()).some(
516
- instance => now - instance.lastAccessed < timeout
517
- );
518
-
519
- if (!hasRecentActivity) {
520
- this.clearRequestScope(requestId);
521
- }
522
- }
523
- },
524
- 5 * 60 * 1000
525
- ); // Check every 5 minutes
526
-
527
- // Unref the interval so it doesn't keep the process alive during testing
528
- this.cleanupInterval.unref();
529
- }
530
-
531
- // Cleanup and destroy the container
532
- destroy(): void {
533
- if (this.cleanupInterval) {
534
- clearInterval(this.cleanupInterval);
535
- this.cleanupInterval = undefined;
536
- }
537
-
538
- // Clear all scopes
539
- this.requestScopes.clear();
540
- this.moduleScopes.clear();
541
- this.instances.clear();
542
- this.services.clear();
543
-
544
- this.emit('containerDestroyed');
545
- }
546
-
547
- // Internal registration method
548
- _registerService<T>(name: string, definition: ServiceDefinition<T>): this {
549
- this.services.set(name, definition);
550
- this.emit('serviceRegistered', { name, metadata: definition.metadata });
551
- return this;
552
- }
553
-
554
- // Check if service exists
555
- has(name: string): boolean {
556
- return this.services.has(name);
557
- }
558
- }
559
-
560
- // Fluent registration builder
561
- export class ServiceRegistrationBuilder<T> {
562
- private metadata: Partial<ServiceMetadata> = {
563
- scope: ServiceScope.SINGLETON,
564
- tags: [],
565
- dependencies: [],
566
- optional: [],
567
- };
568
- private _factory?: ServiceFactory<T>;
569
- private interceptors: ServiceInterceptor[] = [];
570
- private decorators: ServiceDecorator<T>[] = [];
571
-
572
- constructor(
573
- private container: FunctionalContainer,
574
- private name: string
575
- ) {}
576
-
577
- // Scope configuration
578
- singleton(): this {
579
- this.metadata.scope = ServiceScope.SINGLETON;
580
- return this;
581
- }
582
-
583
- transient(): this {
584
- this.metadata.scope = ServiceScope.TRANSIENT;
585
- return this;
586
- }
587
-
588
- requestScoped(): this {
589
- this.metadata.scope = ServiceScope.REQUEST;
590
- return this;
591
- }
592
-
593
- moduleScoped(): this {
594
- this.metadata.scope = ServiceScope.MODULE;
595
- return this;
596
- }
597
-
598
- // Dependencies
599
- dependsOn(...deps: string[]): this {
600
- this.metadata.dependencies = [...(this.metadata.dependencies || []), ...deps];
601
- return this;
602
- }
603
-
604
- optionalDependsOn(...deps: string[]): this {
605
- this.metadata.optional = [...(this.metadata.optional || []), ...deps];
606
- return this;
607
- }
608
-
609
- // Metadata
610
- tags(...tags: string[]): this {
611
- this.metadata.tags = [...(this.metadata.tags || []), ...tags];
612
- return this;
613
- }
614
-
615
- // Lifecycle
616
- onInit(initFn: () => Promise<void> | void): this {
617
- this.metadata.lifecycle = { ...this.metadata.lifecycle, init: initFn };
618
- return this;
619
- }
620
-
621
- onDispose(disposeFn: () => Promise<void> | void): this {
622
- this.metadata.lifecycle = {
623
- ...this.metadata.lifecycle,
624
- dispose: disposeFn,
625
- };
626
- return this;
627
- }
628
-
629
- healthCheck(healthFn: () => Promise<boolean> | boolean): this {
630
- this.metadata.lifecycle = {
631
- ...this.metadata.lifecycle,
632
- healthCheck: healthFn,
633
- };
634
- return this;
635
- }
636
-
637
- fallback(fallbackFn: () => T): this {
638
- this.metadata.fallback = fallbackFn;
639
- return this;
640
- }
641
-
642
- timeout(ms: number): this {
643
- this.metadata.timeout = ms;
644
- return this;
645
- }
646
-
647
- // Factory and composition
648
- factory(factory: ServiceFactory<T>): this {
649
- this._factory = factory;
650
- return this;
651
- }
652
-
653
- compose(...compositionFns: Array<(factory: ServiceFactory<T>) => ServiceFactory<T>>): this {
654
- if (!this._factory) {
655
- throw new Error('Factory must be set before composition');
656
- }
657
-
658
- this._factory = compositionFns.reduce((acc, fn) => fn(acc), this._factory);
659
- return this;
660
- }
661
-
662
- // Interceptors and decorators
663
- intercept(interceptor: ServiceInterceptor): this {
664
- this.interceptors.push(interceptor);
665
- return this;
666
- }
667
-
668
- decorate(decorator: ServiceDecorator<T>): this {
669
- this.decorators.push(decorator);
670
- return this;
671
- }
672
-
673
- // Build and register
674
- build(): FunctionalContainer {
675
- if (!this._factory) {
676
- throw new Error(`Factory not provided for service '${this.name}'`);
677
- }
678
-
679
- const definition: ServiceDefinition<T> = {
680
- factory: this._factory,
681
- metadata: {
682
- name: this.name,
683
- scope: this.metadata.scope!,
684
- tags: this.metadata.tags!,
685
- dependencies: this.metadata.dependencies!,
686
- optional: this.metadata.optional!,
687
- lifecycle: this.metadata.lifecycle,
688
- fallback: this.metadata.fallback,
689
- timeout: this.metadata.timeout,
690
- },
691
- interceptors: this.interceptors,
692
- decorators: this.decorators,
693
- };
694
-
695
- return this.container._registerService(this.name, definition);
696
- }
697
- }
698
-
699
- // Standard Container class
700
- export class Container {
701
- private functionalContainer = new FunctionalContainer();
702
- private resolutionCache = new Map<string, any>();
703
-
704
- register<T>(name: string, factory: () => T, singleton = false): void {
705
- this.functionalContainer
706
- .register<T>(name)
707
- .factory(() => factory())
708
- [singleton ? 'singleton' : 'transient']()
709
- .build();
710
- }
711
-
712
- resolve<T>(name: string): T {
713
- // Fast path for cached resolutions
714
- if (this.resolutionCache.has(name)) {
715
- return this.resolutionCache.get(name);
716
- }
717
-
718
- const resolved = this.functionalContainer.resolveSync<T>(name);
719
-
720
- // Cache result (limit cache size)
721
- if (this.resolutionCache.size < 50) {
722
- this.resolutionCache.set(name, resolved);
723
- }
724
-
725
- return resolved;
726
- }
727
-
728
- has(name: string): boolean {
729
- return this.functionalContainer.has(name);
730
- }
731
-
732
- // Expose enhanced container for migration
733
- getEnhanced(): FunctionalContainer {
734
- return this.functionalContainer;
735
- }
736
- }