@morojs/moro 1.6.1 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/README.md +74 -256
  2. package/dist/core/auth/morojs-adapter.js +20 -20
  3. package/dist/core/auth/morojs-adapter.js.map +1 -1
  4. package/dist/core/config/config-manager.d.ts +44 -0
  5. package/dist/core/config/config-manager.js +104 -0
  6. package/dist/core/config/config-manager.js.map +1 -0
  7. package/dist/core/config/config-sources.d.ts +21 -0
  8. package/dist/core/config/config-sources.js +503 -0
  9. package/dist/core/config/config-sources.js.map +1 -0
  10. package/dist/core/config/config-validator.d.ts +21 -0
  11. package/dist/core/config/config-validator.js +791 -0
  12. package/dist/core/config/config-validator.js.map +1 -0
  13. package/dist/core/config/file-loader.d.ts +1 -6
  14. package/dist/core/config/file-loader.js +21 -249
  15. package/dist/core/config/file-loader.js.map +1 -1
  16. package/dist/core/config/index.d.ts +41 -12
  17. package/dist/core/config/index.js +65 -54
  18. package/dist/core/config/index.js.map +1 -1
  19. package/dist/core/config/schema.d.ts +2 -2
  20. package/dist/core/config/schema.js +55 -44
  21. package/dist/core/config/schema.js.map +1 -1
  22. package/dist/core/config/utils.d.ts +10 -3
  23. package/dist/core/config/utils.js +31 -58
  24. package/dist/core/config/utils.js.map +1 -1
  25. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  26. package/dist/core/database/adapters/drizzle.js +18 -11
  27. package/dist/core/database/adapters/drizzle.js.map +1 -1
  28. package/dist/core/database/adapters/index.d.ts +7 -7
  29. package/dist/core/database/adapters/index.js +19 -29
  30. package/dist/core/database/adapters/index.js.map +1 -1
  31. package/dist/core/database/adapters/mongodb.d.ts +13 -1
  32. package/dist/core/database/adapters/mongodb.js +46 -10
  33. package/dist/core/database/adapters/mongodb.js.map +1 -1
  34. package/dist/core/database/adapters/mysql.d.ts +14 -1
  35. package/dist/core/database/adapters/mysql.js +19 -9
  36. package/dist/core/database/adapters/mysql.js.map +1 -1
  37. package/dist/core/database/adapters/postgresql.d.ts +12 -2
  38. package/dist/core/database/adapters/postgresql.js +19 -9
  39. package/dist/core/database/adapters/postgresql.js.map +1 -1
  40. package/dist/core/database/adapters/redis.d.ts +12 -1
  41. package/dist/core/database/adapters/redis.js +48 -13
  42. package/dist/core/database/adapters/redis.js.map +1 -1
  43. package/dist/core/database/adapters/sqlite.d.ts +3 -1
  44. package/dist/core/database/adapters/sqlite.js +19 -8
  45. package/dist/core/database/adapters/sqlite.js.map +1 -1
  46. package/dist/core/database/index.d.ts +2 -2
  47. package/dist/core/database/index.js +2 -18
  48. package/dist/core/database/index.js.map +1 -1
  49. package/dist/core/docs/index.d.ts +9 -9
  50. package/dist/core/docs/index.js +14 -35
  51. package/dist/core/docs/index.js.map +1 -1
  52. package/dist/core/docs/openapi-generator.d.ts +2 -2
  53. package/dist/core/docs/openapi-generator.js +11 -16
  54. package/dist/core/docs/openapi-generator.js.map +1 -1
  55. package/dist/core/docs/schema-to-openapi.d.ts +2 -2
  56. package/dist/core/docs/schema-to-openapi.js +5 -11
  57. package/dist/core/docs/schema-to-openapi.js.map +1 -1
  58. package/dist/core/docs/simple-docs.d.ts +1 -1
  59. package/dist/core/docs/simple-docs.js +4 -9
  60. package/dist/core/docs/simple-docs.js.map +1 -1
  61. package/dist/core/docs/swagger-ui.d.ts +2 -2
  62. package/dist/core/docs/swagger-ui.js +26 -29
  63. package/dist/core/docs/swagger-ui.js.map +1 -1
  64. package/dist/core/docs/zod-to-openapi.js +31 -28
  65. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  66. package/dist/core/events/event-bus.d.ts +1 -1
  67. package/dist/core/events/event-bus.js +7 -11
  68. package/dist/core/events/event-bus.js.map +1 -1
  69. package/dist/core/events/index.d.ts +2 -2
  70. package/dist/core/events/index.js +1 -5
  71. package/dist/core/events/index.js.map +1 -1
  72. package/dist/core/framework.d.ts +20 -13
  73. package/dist/core/framework.js +285 -102
  74. package/dist/core/framework.js.map +1 -1
  75. package/dist/core/http/http-server.d.ts +59 -7
  76. package/dist/core/http/http-server.js +190 -176
  77. package/dist/core/http/http-server.js.map +1 -1
  78. package/dist/core/http/index.d.ts +4 -3
  79. package/dist/core/http/index.js +3 -8
  80. package/dist/core/http/index.js.map +1 -1
  81. package/dist/core/http/uws-http-server.d.ts +46 -0
  82. package/dist/core/http/uws-http-server.js +523 -0
  83. package/dist/core/http/uws-http-server.js.map +1 -0
  84. package/dist/core/logger/filters.d.ts +1 -1
  85. package/dist/core/logger/filters.js +20 -23
  86. package/dist/core/logger/filters.js.map +1 -1
  87. package/dist/core/logger/index.d.ts +3 -3
  88. package/dist/core/logger/index.js +2 -24
  89. package/dist/core/logger/index.js.map +1 -1
  90. package/dist/core/logger/logger.d.ts +30 -14
  91. package/dist/core/logger/logger.js +398 -223
  92. package/dist/core/logger/logger.js.map +1 -1
  93. package/dist/core/logger/outputs.d.ts +1 -1
  94. package/dist/core/logger/outputs.js +8 -17
  95. package/dist/core/logger/outputs.js.map +1 -1
  96. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  97. package/dist/core/middleware/built-in/adapters/cache/file.js +10 -47
  98. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  99. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  100. package/dist/core/middleware/built-in/adapters/cache/index.js +10 -17
  101. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  102. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  103. package/dist/core/middleware/built-in/adapters/cache/memory.js +3 -7
  104. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  105. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +3 -1
  106. package/dist/core/middleware/built-in/adapters/cache/redis.js +11 -9
  107. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  108. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  109. package/dist/core/middleware/built-in/adapters/cdn/azure.js +3 -7
  110. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  111. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  112. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +3 -7
  113. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  114. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +3 -1
  115. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +12 -10
  116. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  117. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  118. package/dist/core/middleware/built-in/adapters/cdn/index.js +10 -17
  119. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -1
  120. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  121. package/dist/core/middleware/built-in/adapters/index.js +4 -23
  122. package/dist/core/middleware/built-in/adapters/index.js.map +1 -1
  123. package/dist/core/middleware/built-in/auth-helpers.js +11 -22
  124. package/dist/core/middleware/built-in/auth-helpers.js.map +1 -1
  125. package/dist/core/middleware/built-in/auth-providers.d.ts +1 -1
  126. package/dist/core/middleware/built-in/auth-providers.js +4 -9
  127. package/dist/core/middleware/built-in/auth-providers.js.map +1 -1
  128. package/dist/core/middleware/built-in/auth.d.ts +2 -2
  129. package/dist/core/middleware/built-in/auth.js +93 -26
  130. package/dist/core/middleware/built-in/auth.js.map +1 -1
  131. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  132. package/dist/core/middleware/built-in/cache.js +11 -12
  133. package/dist/core/middleware/built-in/cache.js.map +1 -1
  134. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  135. package/dist/core/middleware/built-in/cdn.js +5 -9
  136. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  137. package/dist/core/middleware/built-in/cookie.d.ts +1 -1
  138. package/dist/core/middleware/built-in/cookie.js +3 -7
  139. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  140. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  141. package/dist/core/middleware/built-in/cors.js +3 -7
  142. package/dist/core/middleware/built-in/cors.js.map +1 -1
  143. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  144. package/dist/core/middleware/built-in/csp.js +5 -8
  145. package/dist/core/middleware/built-in/csp.js.map +1 -1
  146. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  147. package/dist/core/middleware/built-in/csrf.js +5 -8
  148. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  149. package/dist/core/middleware/built-in/error-tracker.js +3 -7
  150. package/dist/core/middleware/built-in/error-tracker.js.map +1 -1
  151. package/dist/core/middleware/built-in/index.d.ts +28 -27
  152. package/dist/core/middleware/built-in/index.js +48 -78
  153. package/dist/core/middleware/built-in/index.js.map +1 -1
  154. package/dist/core/middleware/built-in/jwt-helpers.d.ts +118 -0
  155. package/dist/core/middleware/built-in/jwt-helpers.js +218 -0
  156. package/dist/core/middleware/built-in/jwt-helpers.js.map +1 -0
  157. package/dist/core/middleware/built-in/performance-monitor.js +3 -7
  158. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -1
  159. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  160. package/dist/core/middleware/built-in/rate-limit.js +3 -7
  161. package/dist/core/middleware/built-in/rate-limit.js.map +1 -1
  162. package/dist/core/middleware/built-in/request-logger.js +5 -8
  163. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  164. package/dist/core/middleware/built-in/session.d.ts +2 -2
  165. package/dist/core/middleware/built-in/session.js +11 -15
  166. package/dist/core/middleware/built-in/session.js.map +1 -1
  167. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  168. package/dist/core/middleware/built-in/sse.js +12 -14
  169. package/dist/core/middleware/built-in/sse.js.map +1 -1
  170. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  171. package/dist/core/middleware/built-in/validation.js +3 -7
  172. package/dist/core/middleware/built-in/validation.js.map +1 -1
  173. package/dist/core/middleware/index.d.ts +4 -4
  174. package/dist/core/middleware/index.js +8 -28
  175. package/dist/core/middleware/index.js.map +1 -1
  176. package/dist/core/modules/auto-discovery.d.ts +19 -2
  177. package/dist/core/modules/auto-discovery.js +391 -74
  178. package/dist/core/modules/auto-discovery.js.map +1 -1
  179. package/dist/core/modules/index.d.ts +2 -2
  180. package/dist/core/modules/index.js +2 -9
  181. package/dist/core/modules/index.js.map +1 -1
  182. package/dist/core/modules/modules.d.ts +3 -3
  183. package/dist/core/modules/modules.js +23 -54
  184. package/dist/core/modules/modules.js.map +1 -1
  185. package/dist/core/networking/adapters/index.d.ts +4 -3
  186. package/dist/core/networking/adapters/index.js +3 -7
  187. package/dist/core/networking/adapters/index.js.map +1 -1
  188. package/dist/core/networking/adapters/socketio-adapter.d.ts +1 -1
  189. package/dist/core/networking/adapters/socketio-adapter.js +5 -40
  190. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  191. package/dist/core/networking/adapters/uws-adapter.d.ts +44 -0
  192. package/dist/core/networking/adapters/uws-adapter.js +513 -0
  193. package/dist/core/networking/adapters/uws-adapter.js.map +1 -0
  194. package/dist/core/networking/adapters/ws-adapter.d.ts +2 -2
  195. package/dist/core/networking/adapters/ws-adapter.js +8 -43
  196. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  197. package/dist/core/networking/index.d.ts +3 -2
  198. package/dist/core/networking/index.js +2 -7
  199. package/dist/core/networking/index.js.map +1 -1
  200. package/dist/core/networking/service-discovery.js +8 -12
  201. package/dist/core/networking/service-discovery.js.map +1 -1
  202. package/dist/core/networking/websocket-adapter.js +1 -2
  203. package/dist/core/networking/websocket-adapter.js.map +1 -1
  204. package/dist/core/networking/websocket-manager.d.ts +3 -3
  205. package/dist/core/networking/websocket-manager.js +9 -11
  206. package/dist/core/networking/websocket-manager.js.map +1 -1
  207. package/dist/core/pooling/object-pool-manager.d.ts +140 -0
  208. package/dist/core/pooling/object-pool-manager.js +502 -0
  209. package/dist/core/pooling/object-pool-manager.js.map +1 -0
  210. package/dist/core/routing/app-integration.d.ts +14 -12
  211. package/dist/core/routing/app-integration.js +49 -85
  212. package/dist/core/routing/app-integration.js.map +1 -1
  213. package/dist/core/routing/index.d.ts +17 -11
  214. package/dist/core/routing/index.js +48 -237
  215. package/dist/core/routing/index.js.map +1 -1
  216. package/dist/core/routing/path-matcher.d.ts +67 -0
  217. package/dist/core/routing/path-matcher.js +182 -0
  218. package/dist/core/routing/path-matcher.js.map +1 -0
  219. package/dist/core/routing/router.d.ts +38 -0
  220. package/dist/core/routing/router.js +68 -0
  221. package/dist/core/routing/router.js.map +1 -0
  222. package/dist/core/routing/unified-router.d.ts +148 -0
  223. package/dist/core/routing/unified-router.js +684 -0
  224. package/dist/core/routing/unified-router.js.map +1 -0
  225. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  226. package/dist/core/runtime/aws-lambda-adapter.js +2 -6
  227. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  228. package/dist/core/runtime/base-adapter.d.ts +2 -2
  229. package/dist/core/runtime/base-adapter.js +3 -7
  230. package/dist/core/runtime/base-adapter.js.map +1 -1
  231. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  232. package/dist/core/runtime/cloudflare-workers-adapter.js +2 -6
  233. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  234. package/dist/core/runtime/index.d.ts +12 -12
  235. package/dist/core/runtime/index.js +22 -35
  236. package/dist/core/runtime/index.js.map +1 -1
  237. package/dist/core/runtime/node-adapter.d.ts +4 -4
  238. package/dist/core/runtime/node-adapter.js +18 -49
  239. package/dist/core/runtime/node-adapter.js.map +1 -1
  240. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  241. package/dist/core/runtime/vercel-edge-adapter.js +2 -6
  242. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  243. package/dist/core/utilities/circuit-breaker.js +1 -5
  244. package/dist/core/utilities/circuit-breaker.js.map +1 -1
  245. package/dist/core/utilities/container.js +12 -22
  246. package/dist/core/utilities/container.js.map +1 -1
  247. package/dist/core/utilities/hooks.d.ts +2 -2
  248. package/dist/core/utilities/hooks.js +7 -12
  249. package/dist/core/utilities/hooks.js.map +1 -1
  250. package/dist/core/utilities/index.d.ts +5 -4
  251. package/dist/core/utilities/index.js +5 -19
  252. package/dist/core/utilities/index.js.map +1 -1
  253. package/dist/core/utilities/package-utils.d.ts +38 -0
  254. package/dist/core/utilities/package-utils.js +57 -0
  255. package/dist/core/utilities/package-utils.js.map +1 -0
  256. package/dist/core/validation/adapters.d.ts +1 -1
  257. package/dist/core/validation/adapters.js +15 -26
  258. package/dist/core/validation/adapters.js.map +1 -1
  259. package/dist/core/validation/index.d.ts +6 -4
  260. package/dist/core/validation/index.js +57 -28
  261. package/dist/core/validation/index.js.map +1 -1
  262. package/dist/core/validation/schema-interface.js +3 -9
  263. package/dist/core/validation/schema-interface.js.map +1 -1
  264. package/dist/index.d.ts +51 -52
  265. package/dist/index.js +23 -132
  266. package/dist/index.js.map +1 -1
  267. package/dist/moro.d.ts +70 -16
  268. package/dist/moro.js +658 -271
  269. package/dist/moro.js.map +1 -1
  270. package/dist/types/auth.js +3 -9
  271. package/dist/types/auth.js.map +1 -1
  272. package/dist/types/cache.js +1 -2
  273. package/dist/types/cdn.js +1 -2
  274. package/dist/types/config.d.ts +73 -2
  275. package/dist/types/config.js +1 -2
  276. package/dist/types/config.js.map +1 -1
  277. package/dist/types/core.d.ts +36 -42
  278. package/dist/types/core.js +1 -2
  279. package/dist/types/database.js +1 -2
  280. package/dist/types/discovery.js +1 -2
  281. package/dist/types/events.js +1 -2
  282. package/dist/types/hooks.d.ts +1 -1
  283. package/dist/types/hooks.js +1 -2
  284. package/dist/types/http.d.ts +16 -1
  285. package/dist/types/http.js +1 -2
  286. package/dist/types/logger.d.ts +7 -0
  287. package/dist/types/logger.js +1 -2
  288. package/dist/types/module.d.ts +11 -0
  289. package/dist/types/module.js +1 -2
  290. package/dist/types/runtime.d.ts +1 -1
  291. package/dist/types/runtime.js +1 -2
  292. package/dist/types/session.js +1 -2
  293. package/jest.config.mjs +41 -0
  294. package/package.json +19 -52
  295. package/src/core/auth/morojs-adapter.ts +18 -13
  296. package/src/core/config/config-manager.ts +133 -0
  297. package/src/core/config/config-sources.ts +600 -0
  298. package/src/core/config/config-validator.ts +1116 -0
  299. package/src/core/config/file-loader.ts +16 -273
  300. package/src/core/config/index.ts +83 -34
  301. package/src/core/config/schema.ts +47 -33
  302. package/src/core/config/utils.ts +24 -31
  303. package/src/core/database/README.md +26 -16
  304. package/src/core/database/adapters/drizzle.ts +18 -6
  305. package/src/core/database/adapters/index.ts +13 -13
  306. package/src/core/database/adapters/mongodb.ts +53 -5
  307. package/src/core/database/adapters/mysql.ts +32 -4
  308. package/src/core/database/adapters/postgresql.ts +30 -5
  309. package/src/core/database/adapters/redis.ts +61 -8
  310. package/src/core/database/adapters/sqlite.ts +19 -3
  311. package/src/core/database/index.ts +2 -2
  312. package/src/core/docs/index.ts +8 -8
  313. package/src/core/docs/openapi-generator.ts +4 -4
  314. package/src/core/docs/schema-to-openapi.ts +3 -6
  315. package/src/core/docs/simple-docs.ts +2 -2
  316. package/src/core/docs/swagger-ui.ts +19 -16
  317. package/src/core/docs/zod-to-openapi.ts +34 -34
  318. package/src/core/events/event-bus.ts +3 -3
  319. package/src/core/events/index.ts +2 -2
  320. package/src/core/framework.ts +320 -71
  321. package/src/core/http/http-server.ts +203 -143
  322. package/src/core/http/index.ts +4 -3
  323. package/src/core/http/uws-http-server.ts +591 -0
  324. package/src/core/logger/filters.ts +13 -5
  325. package/src/core/logger/index.ts +4 -3
  326. package/src/core/logger/logger.ts +435 -216
  327. package/src/core/logger/outputs.ts +1 -3
  328. package/src/core/middleware/built-in/adapters/cache/file.ts +3 -3
  329. package/src/core/middleware/built-in/adapters/cache/index.ts +7 -7
  330. package/src/core/middleware/built-in/adapters/cache/memory.ts +2 -2
  331. package/src/core/middleware/built-in/adapters/cache/redis.ts +18 -4
  332. package/src/core/middleware/built-in/adapters/cdn/azure.ts +2 -2
  333. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +2 -2
  334. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +16 -5
  335. package/src/core/middleware/built-in/adapters/cdn/index.ts +7 -7
  336. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  337. package/src/core/middleware/built-in/auth-helpers.ts +1 -1
  338. package/src/core/middleware/built-in/auth-providers.ts +1 -1
  339. package/src/core/middleware/built-in/auth.ts +102 -21
  340. package/src/core/middleware/built-in/cache.ts +8 -6
  341. package/src/core/middleware/built-in/cdn.ts +4 -4
  342. package/src/core/middleware/built-in/cookie.ts +2 -2
  343. package/src/core/middleware/built-in/cors.ts +2 -2
  344. package/src/core/middleware/built-in/csp.ts +3 -3
  345. package/src/core/middleware/built-in/csrf.ts +3 -3
  346. package/src/core/middleware/built-in/error-tracker.ts +1 -1
  347. package/src/core/middleware/built-in/index.ts +38 -30
  348. package/src/core/middleware/built-in/jwt-helpers.ts +243 -0
  349. package/src/core/middleware/built-in/performance-monitor.ts +1 -1
  350. package/src/core/middleware/built-in/rate-limit.ts +2 -2
  351. package/src/core/middleware/built-in/request-logger.ts +3 -1
  352. package/src/core/middleware/built-in/session.ts +7 -8
  353. package/src/core/middleware/built-in/sse.ts +11 -9
  354. package/src/core/middleware/built-in/validation.ts +2 -2
  355. package/src/core/middleware/index.ts +6 -6
  356. package/src/core/modules/auto-discovery.ts +478 -15
  357. package/src/core/modules/index.ts +2 -2
  358. package/src/core/modules/modules.ts +23 -12
  359. package/src/core/networking/adapters/index.ts +4 -3
  360. package/src/core/networking/adapters/socketio-adapter.ts +5 -3
  361. package/src/core/networking/adapters/uws-adapter.ts +619 -0
  362. package/src/core/networking/adapters/ws-adapter.ts +8 -9
  363. package/src/core/networking/index.ts +3 -2
  364. package/src/core/networking/service-discovery.ts +6 -7
  365. package/src/core/networking/websocket-manager.ts +7 -7
  366. package/src/core/pooling/object-pool-manager.ts +630 -0
  367. package/src/core/routing/app-integration.ts +60 -112
  368. package/src/core/routing/index.ts +66 -293
  369. package/src/core/routing/path-matcher.ts +222 -0
  370. package/src/core/routing/router.ts +97 -0
  371. package/src/core/routing/unified-router.ts +870 -0
  372. package/src/core/runtime/aws-lambda-adapter.ts +3 -3
  373. package/src/core/runtime/base-adapter.ts +2 -2
  374. package/src/core/runtime/cloudflare-workers-adapter.ts +3 -3
  375. package/src/core/runtime/index.ts +13 -13
  376. package/src/core/runtime/node-adapter.ts +16 -10
  377. package/src/core/runtime/vercel-edge-adapter.ts +3 -3
  378. package/src/core/utilities/hooks.ts +3 -3
  379. package/src/core/utilities/index.ts +5 -4
  380. package/src/core/utilities/package-utils.ts +59 -0
  381. package/src/core/validation/adapters.ts +1 -1
  382. package/src/core/validation/index.ts +68 -16
  383. package/src/index.ts +73 -66
  384. package/src/moro.ts +784 -253
  385. package/src/types/config.ts +74 -2
  386. package/src/types/core.ts +49 -47
  387. package/src/types/hooks.ts +1 -1
  388. package/src/types/http.ts +23 -1
  389. package/src/types/logger.ts +9 -0
  390. package/src/types/module.ts +12 -0
  391. package/src/types/runtime.ts +1 -1
  392. package/tsconfig.json +4 -2
  393. package/dist/core/config/loader.d.ts +0 -7
  394. package/dist/core/config/loader.js +0 -269
  395. package/dist/core/config/loader.js.map +0 -1
  396. package/dist/core/config/validation.d.ts +0 -17
  397. package/dist/core/config/validation.js +0 -131
  398. package/dist/core/config/validation.js.map +0 -1
  399. package/dist/core/http/router.d.ts +0 -14
  400. package/dist/core/http/router.js +0 -109
  401. package/dist/core/http/router.js.map +0 -1
  402. package/src/core/config/loader.ts +0 -633
  403. package/src/core/config/validation.ts +0 -140
  404. package/src/core/http/router.ts +0 -141
@@ -0,0 +1,684 @@
1
+ // Unified Router - Consolidates Intelligent Router and Core Router
2
+ // Combines best features from both systems with zero breaking changes
3
+ import { PathMatcher } from './path-matcher.js';
4
+ import { ObjectPoolManager } from '../pooling/object-pool-manager.js';
5
+ import { createFrameworkLogger } from '../logger/index.js';
6
+ const logger = createFrameworkLogger('UnifiedRouter');
7
+ // ===== Route Builder (Chainable API) =====
8
+ export class RouteBuilder {
9
+ schema;
10
+ router;
11
+ constructor(method, path, router) {
12
+ this.schema = {
13
+ method,
14
+ path,
15
+ middleware: {},
16
+ };
17
+ this.router = router;
18
+ }
19
+ // Validation methods
20
+ validate(config) {
21
+ this.schema.validation = { ...this.schema.validation, ...config };
22
+ return this;
23
+ }
24
+ body(schema) {
25
+ if (!this.schema.validation)
26
+ this.schema.validation = {};
27
+ this.schema.validation.body = schema;
28
+ return this;
29
+ }
30
+ query(schema) {
31
+ if (!this.schema.validation)
32
+ this.schema.validation = {};
33
+ this.schema.validation.query = schema;
34
+ return this;
35
+ }
36
+ params(schema) {
37
+ if (!this.schema.validation)
38
+ this.schema.validation = {};
39
+ this.schema.validation.params = schema;
40
+ return this;
41
+ }
42
+ headers(schema) {
43
+ if (!this.schema.validation)
44
+ this.schema.validation = {};
45
+ this.schema.validation.headers = schema;
46
+ return this;
47
+ }
48
+ // Security methods
49
+ auth(config) {
50
+ this.schema.auth = config;
51
+ return this;
52
+ }
53
+ rateLimit(config) {
54
+ this.schema.rateLimit = config;
55
+ return this;
56
+ }
57
+ // Caching
58
+ cache(config) {
59
+ this.schema.cache = config;
60
+ return this;
61
+ }
62
+ // Custom middleware
63
+ before(...middleware) {
64
+ if (!this.schema.middleware)
65
+ this.schema.middleware = {};
66
+ const phases = this.schema.middleware;
67
+ phases.before = [...(phases.before || []), ...middleware];
68
+ return this;
69
+ }
70
+ after(...middleware) {
71
+ if (!this.schema.middleware)
72
+ this.schema.middleware = {};
73
+ const phases = this.schema.middleware;
74
+ phases.after = [...(phases.after || []), ...middleware];
75
+ return this;
76
+ }
77
+ transform(...middleware) {
78
+ if (!this.schema.middleware)
79
+ this.schema.middleware = {};
80
+ const phases = this.schema.middleware;
81
+ phases.transform = [...(phases.transform || []), ...middleware];
82
+ return this;
83
+ }
84
+ use(...middleware) {
85
+ return this.after(...middleware);
86
+ }
87
+ // Metadata
88
+ describe(description) {
89
+ this.schema.description = description;
90
+ return this;
91
+ }
92
+ tag(...tags) {
93
+ this.schema.tags = [...(this.schema.tags || []), ...tags];
94
+ return this;
95
+ }
96
+ // Terminal method
97
+ handler(handler) {
98
+ if (!handler) {
99
+ throw new Error('Handler is required');
100
+ }
101
+ const completeSchema = {
102
+ ...this.schema,
103
+ handler,
104
+ };
105
+ this.router.registerRoute(completeSchema);
106
+ }
107
+ }
108
+ // ===== Unified Router =====
109
+ export class UnifiedRouter {
110
+ static instance = null;
111
+ poolManager = ObjectPoolManager.getInstance();
112
+ // Route storage optimized for different access patterns
113
+ staticRoutes = new Map(); // O(1) lookup: "GET:/api/users"
114
+ dynamicRoutesBySegments = new Map(); // Grouped by segment count
115
+ fastPathRoutes = new Set(); // Routes with no middleware
116
+ allRoutes = []; // For iteration/inspection
117
+ // Statistics
118
+ stats = {
119
+ totalRoutes: 0,
120
+ staticRoutes: 0,
121
+ dynamicRoutes: 0,
122
+ fastPathRoutes: 0,
123
+ requestCount: 0,
124
+ fastPathHits: 0,
125
+ staticHits: 0,
126
+ dynamicHits: 0,
127
+ cacheHits: 0,
128
+ };
129
+ constructor() {
130
+ logger.debug('UnifiedRouter initialized', 'Initialization');
131
+ }
132
+ /**
133
+ * Get singleton instance (optional - can still create new instances)
134
+ */
135
+ static getInstance() {
136
+ if (!this.instance) {
137
+ this.instance = new UnifiedRouter();
138
+ logger.info(`UnifiedRouter initialized (PID: ${process.pid})`, 'Router');
139
+ }
140
+ return this.instance;
141
+ }
142
+ /**
143
+ * Reset singleton (useful for testing)
144
+ */
145
+ static reset() {
146
+ if (this.instance) {
147
+ this.instance.clearAllRoutes();
148
+ }
149
+ this.instance = null;
150
+ }
151
+ /**
152
+ * Clear all routes (useful for testing)
153
+ */
154
+ clearAllRoutes() {
155
+ this.staticRoutes.clear();
156
+ this.dynamicRoutesBySegments.clear();
157
+ this.fastPathRoutes.clear();
158
+ this.allRoutes = [];
159
+ this.stats = {
160
+ totalRoutes: 0,
161
+ staticRoutes: 0,
162
+ dynamicRoutes: 0,
163
+ fastPathRoutes: 0,
164
+ requestCount: 0,
165
+ fastPathHits: 0,
166
+ staticHits: 0,
167
+ dynamicHits: 0,
168
+ cacheHits: 0,
169
+ };
170
+ logger.debug('UnifiedRouter routes cleared', 'Reset');
171
+ }
172
+ // ===== Route Registration =====
173
+ /**
174
+ * Register a route (internal method)
175
+ */
176
+ registerRoute(schema) {
177
+ // Compile path pattern
178
+ const compiledPath = PathMatcher.compile(schema.path);
179
+ // Determine if this is a fast-path route
180
+ const isFastPath = this.isFastPathRoute(schema);
181
+ // Determine execution order
182
+ const executionOrder = this.buildExecutionOrder(schema);
183
+ const route = {
184
+ schema,
185
+ compiledPath,
186
+ isFastPath,
187
+ executionOrder,
188
+ };
189
+ // Store in appropriate structures
190
+ if (compiledPath.isStatic) {
191
+ const key = `${schema.method}:${schema.path}`;
192
+ this.staticRoutes.set(key, route);
193
+ this.stats.staticRoutes++;
194
+ }
195
+ else {
196
+ // Group by segment count for faster matching
197
+ const segmentCount = compiledPath.segments;
198
+ if (!this.dynamicRoutesBySegments.has(segmentCount)) {
199
+ this.dynamicRoutesBySegments.set(segmentCount, []);
200
+ }
201
+ this.dynamicRoutesBySegments.get(segmentCount).push(route);
202
+ this.stats.dynamicRoutes++;
203
+ }
204
+ if (isFastPath) {
205
+ this.fastPathRoutes.add(route);
206
+ this.stats.fastPathRoutes++;
207
+ }
208
+ this.allRoutes.push(route);
209
+ this.stats.totalRoutes++;
210
+ logger.info(`Registered route: ${schema.method} ${schema.path} (PID: ${process.pid}, total: ${this.stats.totalRoutes})`, 'Registration', {
211
+ isStatic: compiledPath.isStatic,
212
+ isFastPath,
213
+ segments: compiledPath.segments,
214
+ });
215
+ }
216
+ /**
217
+ * Chainable API methods
218
+ */
219
+ get(path) {
220
+ return new RouteBuilder('GET', path, this);
221
+ }
222
+ post(path) {
223
+ return new RouteBuilder('POST', path, this);
224
+ }
225
+ put(path) {
226
+ return new RouteBuilder('PUT', path, this);
227
+ }
228
+ delete(path) {
229
+ return new RouteBuilder('DELETE', path, this);
230
+ }
231
+ patch(path) {
232
+ return new RouteBuilder('PATCH', path, this);
233
+ }
234
+ head(path) {
235
+ return new RouteBuilder('HEAD', path, this);
236
+ }
237
+ options(path) {
238
+ return new RouteBuilder('OPTIONS', path, this);
239
+ }
240
+ /**
241
+ * Schema-first route registration
242
+ */
243
+ route(schema) {
244
+ this.registerRoute(schema);
245
+ }
246
+ /**
247
+ * Direct API (for backward compatibility)
248
+ */
249
+ addRoute(method, path, handler, middleware = []) {
250
+ this.registerRoute({
251
+ method,
252
+ path,
253
+ handler,
254
+ middleware,
255
+ });
256
+ }
257
+ // ===== Route Matching =====
258
+ /**
259
+ * Find a matching route for the request
260
+ * Returns boolean (sync) for fast-path routes, Promise<boolean> for others
261
+ */
262
+ handleRequest(req, res) {
263
+ // PERFORMANCE: Only increment stats counter, not individual metrics in hot path
264
+ this.stats.requestCount++;
265
+ const method = req.method?.toUpperCase();
266
+ const path = req.path;
267
+ // Phase 1: No middleware, auth, validation, or rate limiting
268
+ // Optimized for synchronous execution when possible
269
+ if (this.fastPathRoutes.size > 0) {
270
+ for (const route of this.fastPathRoutes) {
271
+ if (route.schema.method === method) {
272
+ // Inline parameter extraction for speed (avoid function call overhead)
273
+ if (route.compiledPath.isStatic) {
274
+ if (route.compiledPath.path === path) {
275
+ // Static route match
276
+ req.params = {};
277
+ try {
278
+ const result = route.schema.handler(req, res);
279
+ // Check if result is a promise (optimized check)
280
+ if (result && typeof result.then === 'function') {
281
+ // Async handler - return promise
282
+ return result
283
+ .then(actualResult => {
284
+ if (actualResult !== undefined && !res.headersSent) {
285
+ res.json(actualResult);
286
+ }
287
+ return true;
288
+ })
289
+ .catch(() => {
290
+ if (!res.headersSent) {
291
+ res.status(500).json({ error: 'Internal server error' });
292
+ }
293
+ return true;
294
+ });
295
+ }
296
+ else {
297
+ // Sync handler - handle synchronously (fastest path!)
298
+ if (result !== undefined && !res.headersSent) {
299
+ res.json(result);
300
+ }
301
+ return true;
302
+ }
303
+ }
304
+ catch (error) {
305
+ if (!res.headersSent) {
306
+ res.status(500).json({ error: 'Internal server error' });
307
+ }
308
+ return true;
309
+ }
310
+ }
311
+ }
312
+ else {
313
+ // Dynamic route - use regex matching
314
+ const pattern = route.compiledPath.pattern;
315
+ if (pattern) {
316
+ const matches = path.match(pattern);
317
+ if (matches) {
318
+ // Extract params inline (avoid function call)
319
+ const params = {};
320
+ const paramNames = route.compiledPath.paramNames;
321
+ for (let i = 0; i < paramNames.length; i++) {
322
+ params[paramNames[i]] = matches[i + 1];
323
+ }
324
+ req.params = params;
325
+ try {
326
+ const result = route.schema.handler(req, res);
327
+ if (result && typeof result.then === 'function') {
328
+ return result
329
+ .then(actualResult => {
330
+ if (actualResult !== undefined && !res.headersSent) {
331
+ res.json(actualResult);
332
+ }
333
+ return true;
334
+ })
335
+ .catch(() => {
336
+ if (!res.headersSent) {
337
+ res.status(500).json({ error: 'Internal server error' });
338
+ }
339
+ return true;
340
+ });
341
+ }
342
+ else {
343
+ if (result !== undefined && !res.headersSent) {
344
+ res.json(result);
345
+ }
346
+ return true;
347
+ }
348
+ }
349
+ catch (error) {
350
+ if (!res.headersSent) {
351
+ res.status(500).json({ error: 'Internal server error' });
352
+ }
353
+ return true;
354
+ }
355
+ }
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+ // Phase 2 & 3: Non-fast-path routes (async)
362
+ return (async () => {
363
+ // Phase 2: O(1) static route lookup
364
+ const staticKey = `${method}:${path}`;
365
+ // Check pool manager cache
366
+ const cachedRoute = this.poolManager.getCachedRoute(staticKey);
367
+ if (cachedRoute) {
368
+ await this.executeRoute(cachedRoute, req, res, { params: {} });
369
+ return true;
370
+ }
371
+ const staticRoute = this.staticRoutes.get(staticKey);
372
+ if (staticRoute) {
373
+ this.poolManager.cacheRoute(staticKey, staticRoute);
374
+ req.params = {};
375
+ await this.executeRoute(staticRoute, req, res, { params: {} });
376
+ return true;
377
+ }
378
+ // Phase 3: Segment-based dynamic route matching
379
+ const segments = path.split('/').filter(s => s.length > 0);
380
+ const segmentCount = segments.length;
381
+ const candidates = this.dynamicRoutesBySegments.get(segmentCount) || [];
382
+ for (const route of candidates) {
383
+ if (route.schema.method === method) {
384
+ const matchResult = PathMatcher.match(route.compiledPath, path);
385
+ if (matchResult) {
386
+ this.poolManager.cacheRoute(staticKey, route);
387
+ await this.executeRoute(route, req, res, matchResult);
388
+ return true;
389
+ }
390
+ }
391
+ }
392
+ // No route found
393
+ return false;
394
+ })();
395
+ }
396
+ // ===== Route Execution =====
397
+ async executeRoute(route, req, res, matchResult) {
398
+ // Set params from pool
399
+ req.params = this.poolManager.acquireParams();
400
+ Object.assign(req.params, matchResult.params);
401
+ try {
402
+ // Execute middleware phases in order
403
+ for (const phase of route.executionOrder) {
404
+ if (res.headersSent)
405
+ break;
406
+ await this.executePhase(phase, route, req, res);
407
+ }
408
+ // Execute handler
409
+ if (!res.headersSent) {
410
+ const result = await route.schema.handler(req, res);
411
+ if (result !== undefined && !res.headersSent) {
412
+ await res.json(result);
413
+ }
414
+ }
415
+ }
416
+ catch (error) {
417
+ logger.error('Route execution error', 'Execution', {
418
+ error: error instanceof Error ? error.message : String(error),
419
+ route: `${route.schema.method} ${route.schema.path}`,
420
+ });
421
+ if (!res.headersSent) {
422
+ res.status(500).json({
423
+ success: false,
424
+ error: 'Internal server error',
425
+ requestId: req.requestId,
426
+ });
427
+ }
428
+ }
429
+ finally {
430
+ // Release params back to pool
431
+ if (req.params) {
432
+ this.poolManager.releaseParams(req.params);
433
+ }
434
+ }
435
+ }
436
+ async executePhase(phase, route, req, res) {
437
+ const schema = route.schema;
438
+ const middleware = schema.middleware;
439
+ switch (phase) {
440
+ case 'before':
441
+ if (middleware && 'before' in middleware && Array.isArray(middleware.before)) {
442
+ for (const mw of middleware.before) {
443
+ await this.executeMiddleware(mw, req, res);
444
+ if (res.headersSent)
445
+ return;
446
+ }
447
+ }
448
+ break;
449
+ case 'rateLimit':
450
+ if (schema.rateLimit) {
451
+ await this.executeRateLimit(req, res, schema.rateLimit);
452
+ }
453
+ break;
454
+ case 'auth':
455
+ if (schema.auth) {
456
+ await this.executeAuth(req, res, schema.auth);
457
+ }
458
+ break;
459
+ case 'validation':
460
+ if (schema.validation) {
461
+ await this.executeValidation(req, res, schema.validation);
462
+ }
463
+ break;
464
+ case 'transform':
465
+ if (middleware && 'transform' in middleware && Array.isArray(middleware.transform)) {
466
+ for (const mw of middleware.transform) {
467
+ await this.executeMiddleware(mw, req, res);
468
+ if (res.headersSent)
469
+ return;
470
+ }
471
+ }
472
+ break;
473
+ case 'cache':
474
+ if (schema.cache) {
475
+ await this.executeCache(req, res, schema.cache);
476
+ }
477
+ break;
478
+ case 'after':
479
+ if (middleware && 'after' in middleware && Array.isArray(middleware.after)) {
480
+ for (const mw of middleware.after) {
481
+ await this.executeMiddleware(mw, req, res);
482
+ if (res.headersSent)
483
+ return;
484
+ }
485
+ }
486
+ break;
487
+ case 'middleware':
488
+ // Handle array-style middleware (backward compatibility)
489
+ if (middleware && Array.isArray(middleware)) {
490
+ for (const mw of middleware) {
491
+ await this.executeMiddleware(mw, req, res);
492
+ if (res.headersSent)
493
+ return;
494
+ }
495
+ }
496
+ break;
497
+ }
498
+ }
499
+ async executeMiddleware(middleware, req, res) {
500
+ return new Promise((resolve, reject) => {
501
+ let resolved = false;
502
+ const next = () => {
503
+ if (!resolved) {
504
+ resolved = true;
505
+ resolve();
506
+ }
507
+ };
508
+ try {
509
+ const result = middleware(req, res, next);
510
+ if (result instanceof Promise) {
511
+ result.then(() => !resolved && next()).catch(reject);
512
+ }
513
+ else if (!resolved) {
514
+ next();
515
+ }
516
+ }
517
+ catch (error) {
518
+ if (!resolved) {
519
+ resolved = true;
520
+ reject(error);
521
+ }
522
+ }
523
+ });
524
+ }
525
+ async executeRateLimit(_req, _res, _config) {
526
+ // Rate limiting implementation placeholder
527
+ // TODO: Implement actual rate limiting logic
528
+ }
529
+ async executeAuth(req, res, config) {
530
+ const auth = req.auth;
531
+ if (!auth) {
532
+ res.status(500).json({
533
+ success: false,
534
+ error: 'Authentication middleware not configured',
535
+ });
536
+ return;
537
+ }
538
+ if (!config.optional && !auth.isAuthenticated) {
539
+ res.status(401).json({
540
+ success: false,
541
+ error: 'Authentication required',
542
+ });
543
+ return;
544
+ }
545
+ if (auth.isAuthenticated && config.roles) {
546
+ const userRoles = auth.user?.roles || [];
547
+ const hasRole = config.roles.some(role => userRoles.includes(role));
548
+ if (!hasRole) {
549
+ res.status(403).json({
550
+ success: false,
551
+ error: 'Insufficient permissions',
552
+ message: `Required roles: ${config.roles.join(', ')}`,
553
+ });
554
+ return;
555
+ }
556
+ }
557
+ if (auth.isAuthenticated && config.permissions) {
558
+ const userPermissions = auth.user?.permissions || [];
559
+ const hasPermission = config.permissions.every(permission => userPermissions.includes(permission));
560
+ if (!hasPermission) {
561
+ res.status(403).json({
562
+ success: false,
563
+ error: 'Insufficient permissions',
564
+ message: `Required permissions: ${config.permissions.join(', ')}`,
565
+ });
566
+ return;
567
+ }
568
+ }
569
+ }
570
+ async executeValidation(req, res, config) {
571
+ try {
572
+ if (config.body && req.body !== undefined) {
573
+ req.validatedBody = await config.body.parseAsync(req.body);
574
+ req.body = req.validatedBody;
575
+ }
576
+ if (config.query && req.query !== undefined) {
577
+ req.validatedQuery = await config.query.parseAsync(req.query);
578
+ req.query = req.validatedQuery;
579
+ }
580
+ if (config.params && req.params !== undefined) {
581
+ req.validatedParams = await config.params.parseAsync(req.params);
582
+ req.params = req.validatedParams;
583
+ }
584
+ if (config.headers && req.headers !== undefined) {
585
+ req.validatedHeaders = await config.headers.parseAsync(req.headers);
586
+ }
587
+ }
588
+ catch (error) {
589
+ const field = error.field || 'unknown';
590
+ if (error.issues) {
591
+ res.status(400).json({
592
+ success: false,
593
+ error: `Validation failed for ${field}`,
594
+ details: error.issues.map((issue) => ({
595
+ field: issue.path.length > 0 ? issue.path.join('.') : field,
596
+ message: issue.message,
597
+ code: issue.code,
598
+ })),
599
+ requestId: req.requestId,
600
+ });
601
+ }
602
+ else {
603
+ res.status(400).json({
604
+ success: false,
605
+ error: `Validation failed for ${field}`,
606
+ requestId: req.requestId,
607
+ });
608
+ }
609
+ }
610
+ }
611
+ async executeCache(_req, _res, _config) {
612
+ // Cache implementation placeholder
613
+ // TODO: Implement actual caching logic
614
+ }
615
+ // ===== Helper Methods =====
616
+ isFastPathRoute(schema) {
617
+ const middleware = schema.middleware;
618
+ const hasMiddleware = (middleware && Array.isArray(middleware) && middleware.length > 0) ||
619
+ (middleware &&
620
+ typeof middleware === 'object' &&
621
+ (middleware.before?.length ||
622
+ middleware.after?.length ||
623
+ middleware.transform?.length));
624
+ return (!schema.auth && !schema.validation && !schema.rateLimit && !schema.cache && !hasMiddleware);
625
+ }
626
+ buildExecutionOrder(schema) {
627
+ const order = [];
628
+ const middleware = schema.middleware;
629
+ // Phase-based middleware
630
+ if (middleware && 'before' in middleware && middleware.before?.length) {
631
+ order.push('before');
632
+ }
633
+ if (schema.rateLimit)
634
+ order.push('rateLimit');
635
+ if (schema.auth)
636
+ order.push('auth');
637
+ if (schema.validation)
638
+ order.push('validation');
639
+ if (middleware && 'transform' in middleware && middleware.transform?.length) {
640
+ order.push('transform');
641
+ }
642
+ if (schema.cache)
643
+ order.push('cache');
644
+ if (middleware && 'after' in middleware && middleware.after?.length) {
645
+ order.push('after');
646
+ }
647
+ // Array-style middleware (backward compatibility)
648
+ if (middleware && Array.isArray(middleware) && middleware.length > 0) {
649
+ order.push('middleware');
650
+ }
651
+ return order;
652
+ }
653
+ // ===== Inspection Methods =====
654
+ getAllRoutes() {
655
+ return this.allRoutes.map(r => r.schema);
656
+ }
657
+ getRouteCount() {
658
+ return this.stats.totalRoutes;
659
+ }
660
+ getStats() {
661
+ return {
662
+ ...this.stats,
663
+ poolManager: this.poolManager.getPerformanceSummary(),
664
+ pathMatcher: PathMatcher.getStats(),
665
+ };
666
+ }
667
+ logPerformanceStats() {
668
+ const stats = this.getStats();
669
+ logger.info('UnifiedRouter Performance', 'Stats', {
670
+ totalRoutes: stats.totalRoutes,
671
+ staticRoutes: stats.staticRoutes,
672
+ dynamicRoutes: stats.dynamicRoutes,
673
+ fastPathRoutes: stats.fastPathRoutes,
674
+ requests: stats.requestCount,
675
+ poolManager: {
676
+ routeCacheHitRate: stats.poolManager.routeCacheHitRate.toFixed(1) + '%',
677
+ responseCacheHitRate: stats.poolManager.responseCacheHitRate.toFixed(1) + '%',
678
+ paramPoolUtilization: stats.poolManager.paramPoolUtilization.toFixed(1) + '%',
679
+ totalMemoryKB: stats.poolManager.totalMemoryKB.toFixed(1) + ' KB',
680
+ },
681
+ });
682
+ }
683
+ }
684
+ //# sourceMappingURL=unified-router.js.map