@morojs/moro 1.6.2 → 1.6.4

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,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
- }