@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,814 +0,0 @@
1
- // Moro Logger - Beautiful, Fast, Feature-Rich
2
- import { performance } from 'perf_hooks';
3
- // import { format } from 'util'; // Not currently used
4
- import {
5
- LogLevel,
6
- LogEntry,
7
- LoggerOptions,
8
- Logger,
9
- LogOutput,
10
- LogFilter,
11
- LogMetrics,
12
- ColorScheme,
13
- } from '../../types/logger';
14
-
15
- export class MoroLogger implements Logger {
16
- private level: LogLevel = 'info';
17
- private options: LoggerOptions;
18
- private outputs: Map<string, LogOutput> = new Map();
19
- private filters: Map<string, LogFilter> = new Map();
20
- private history: LogEntry[] = [];
21
- private timers: Map<string, number> = new Map();
22
- private metrics: LogMetrics = {
23
- totalLogs: 0,
24
- logsByLevel: { debug: 0, info: 0, warn: 0, error: 0, fatal: 0 },
25
- logsByContext: {},
26
- averageLogRate: 0,
27
- errorRate: 0,
28
- memoryUsage: 0,
29
- };
30
- private startTime = Date.now();
31
- private contextPrefix?: string;
32
- private contextMetadata?: Record<string, any>;
33
- private parent?: MoroLogger; // Reference to parent logger for level inheritance
34
-
35
- // Performance optimizations
36
- private historyIndex = 0;
37
- private historySize = 0;
38
- private lastMemoryCheck = 0;
39
- private memoryCheckInterval = 5000; // 5 seconds
40
- private cachedTimestamp = '';
41
- private lastTimestamp = 0;
42
- private timestampCacheInterval = 100; // 100ms for better precision
43
-
44
- // Buffered output for micro-batching
45
- private outputBuffer: string[] = [];
46
- private bufferSize = 0;
47
- private maxBufferSize = 1024; // 1KB buffer
48
- private flushTimeout: NodeJS.Timeout | null = null;
49
- private flushInterval = 1; // 1ms micro-batching
50
-
51
- // High-performance output methods
52
-
53
- private static readonly LEVELS: Record<LogLevel, number> = {
54
- debug: 0,
55
- info: 1,
56
- warn: 2,
57
- error: 3,
58
- fatal: 4,
59
- };
60
-
61
- // Static pre-allocated strings for maximum performance
62
- private static readonly LEVEL_STRINGS: Record<LogLevel, string> = {
63
- debug: 'DEBUG',
64
- info: 'INFO',
65
- warn: 'WARN',
66
- error: 'ERROR',
67
- fatal: 'FATAL',
68
- };
69
-
70
- // Pre-allocated ANSI color codes
71
- private static readonly ANSI_COLORS = {
72
- reset: '\x1b[0m',
73
- bold: '\x1b[1m',
74
- dim: '\x1b[2m',
75
- red: '\x1b[31m',
76
- green: '\x1b[32m',
77
- yellow: '\x1b[33m',
78
- blue: '\x1b[34m',
79
- magenta: '\x1b[35m',
80
- cyan: '\x1b[36m',
81
- white: '\x1b[37m',
82
- gray: '\x1b[90m',
83
- };
84
-
85
- // Object pool for LogEntry reuse
86
- private static readonly ENTRY_POOL: LogEntry[] = [];
87
- private static readonly MAX_POOL_SIZE = 100;
88
- private static poolIndex = 0;
89
-
90
- // Object pool management
91
- private static getPooledEntry(): LogEntry {
92
- if (MoroLogger.poolIndex > 0) {
93
- return MoroLogger.ENTRY_POOL[--MoroLogger.poolIndex];
94
- }
95
- return {
96
- timestamp: new Date(),
97
- level: 'info',
98
- message: '',
99
- context: undefined,
100
- metadata: undefined,
101
- };
102
- }
103
-
104
- private static returnPooledEntry(entry: LogEntry): void {
105
- if (MoroLogger.poolIndex < MoroLogger.MAX_POOL_SIZE) {
106
- // Reset the entry
107
- entry.timestamp = new Date();
108
- entry.level = 'info';
109
- entry.message = '';
110
- entry.context = undefined;
111
- entry.metadata = undefined;
112
- MoroLogger.ENTRY_POOL[MoroLogger.poolIndex++] = entry;
113
- }
114
- }
115
-
116
- // String builder for efficient concatenation
117
- private static stringBuilder: string[] = [];
118
- private static stringBuilderIndex = 0;
119
-
120
- private static resetStringBuilder(): void {
121
- MoroLogger.stringBuilderIndex = 0;
122
- }
123
-
124
- private static appendToBuilder(str: string): void {
125
- if (MoroLogger.stringBuilderIndex < MoroLogger.stringBuilder.length) {
126
- MoroLogger.stringBuilder[MoroLogger.stringBuilderIndex++] = str;
127
- } else {
128
- MoroLogger.stringBuilder.push(str);
129
- MoroLogger.stringBuilderIndex++;
130
- }
131
- }
132
-
133
- private static buildString(): string {
134
- const result = MoroLogger.stringBuilder.slice(0, MoroLogger.stringBuilderIndex).join('');
135
- MoroLogger.resetStringBuilder();
136
- return result;
137
- }
138
-
139
- private static readonly COLORS: ColorScheme = {
140
- debug: '\x1b[36m', // Cyan
141
- info: '\x1b[32m', // Green
142
- warn: '\x1b[33m', // Yellow
143
- error: '\x1b[31m', // Red
144
- fatal: '\x1b[35m', // Magenta
145
- timestamp: '\x1b[90m', // Gray
146
- context: '\x1b[34m', // Blue
147
- metadata: '\x1b[37m', // White
148
- performance: '\x1b[36m', // Cyan
149
- };
150
-
151
- private static readonly RESET = '\x1b[0m';
152
- private static readonly BOLD = '\x1b[1m';
153
-
154
- constructor(options: LoggerOptions = {}) {
155
- this.options = {
156
- level: 'info',
157
- enableColors: true,
158
- enableTimestamp: true,
159
- enableContext: true,
160
- enableMetadata: true,
161
- enablePerformance: true,
162
- format: 'pretty',
163
- outputs: [],
164
- filters: [],
165
- maxEntries: 1000,
166
- ...options,
167
- };
168
-
169
- this.level = this.options.level || 'info';
170
-
171
- // Add default console output
172
- this.addOutput({
173
- name: 'console',
174
- write: this.writeToConsole.bind(this),
175
- format: this.options.format,
176
- });
177
-
178
- // Add custom outputs
179
- this.options.outputs?.forEach(output => this.addOutput(output));
180
- this.options.filters?.forEach(filter => this.addFilter(filter));
181
- }
182
-
183
- debug(message: string, context?: string, metadata?: Record<string, any>): void {
184
- this.log('debug', message, context, metadata);
185
- }
186
-
187
- info(message: string, context?: string, metadata?: Record<string, any>): void {
188
- this.log('info', message, context, metadata);
189
- }
190
-
191
- warn(message: string, context?: string, metadata?: Record<string, any>): void {
192
- this.log('warn', message, context, metadata);
193
- }
194
-
195
- error(message: string | Error, context?: string, metadata?: Record<string, any>): void {
196
- const msg = message instanceof Error ? message.message : message;
197
- const stack = message instanceof Error ? message.stack : undefined;
198
- this.log('error', msg, context, { ...metadata, stack });
199
- }
200
-
201
- fatal(message: string | Error, context?: string, metadata?: Record<string, any>): void {
202
- const msg = message instanceof Error ? message.message : message;
203
- const stack = message instanceof Error ? message.stack : undefined;
204
- this.log('fatal', msg, context, { ...metadata, stack });
205
- }
206
-
207
- time(label: string): void {
208
- this.timers.set(label, performance.now());
209
- }
210
-
211
- timeEnd(label: string, context?: string, metadata?: Record<string, any>): void {
212
- const startTime = this.timers.get(label);
213
- if (startTime !== undefined) {
214
- const duration = performance.now() - startTime;
215
- this.timers.delete(label);
216
-
217
- this.log('info', `Timer: ${label}`, context, {
218
- ...metadata,
219
- performance: { duration: Math.round(duration * 100) / 100 },
220
- });
221
- }
222
- }
223
-
224
- child(context: string, metadata?: Record<string, any>): Logger {
225
- const childLogger = new MoroLogger(this.options);
226
- childLogger.contextPrefix = this.contextPrefix ? `${this.contextPrefix}:${context}` : context;
227
- childLogger.contextMetadata = { ...this.contextMetadata, ...metadata };
228
- childLogger.outputs = this.outputs;
229
- childLogger.filters = this.filters;
230
-
231
- // Keep reference to parent for level inheritance
232
- (childLogger as any).parent = this;
233
-
234
- return childLogger;
235
- }
236
-
237
- setLevel(level: LogLevel): void {
238
- this.level = level;
239
- }
240
-
241
- addOutput(output: LogOutput): void {
242
- this.outputs.set(output.name, output);
243
- }
244
-
245
- removeOutput(name: string): void {
246
- this.outputs.delete(name);
247
- }
248
-
249
- addFilter(filter: LogFilter): void {
250
- this.filters.set(filter.name, filter);
251
- }
252
-
253
- removeFilter(name: string): void {
254
- this.filters.delete(name);
255
- }
256
-
257
- getHistory(count?: number): LogEntry[] {
258
- if (this.historySize === 0) return [];
259
-
260
- if (this.historySize < (this.options.maxEntries || 1000)) {
261
- // History not full yet, return all entries
262
- const entries = this.history.slice(0, this.historySize);
263
- return count ? entries.slice(-count) : entries;
264
- } else {
265
- // History is full, use circular buffer logic
266
- const entries: LogEntry[] = [];
267
- const maxEntries = this.options.maxEntries || 1000;
268
-
269
- for (let i = 0; i < maxEntries; i++) {
270
- const index = (this.historyIndex + i) % maxEntries;
271
- if (this.history[index]) {
272
- entries.push(this.history[index]);
273
- }
274
- }
275
-
276
- return count ? entries.slice(-count) : entries;
277
- }
278
- }
279
-
280
- // Cached timestamp formatting to avoid repeated string operations
281
- private getCachedTimestamp(timestamp: Date): string {
282
- const now = timestamp.getTime();
283
- if (now - this.lastTimestamp > this.timestampCacheInterval) {
284
- this.lastTimestamp = now;
285
- this.cachedTimestamp = timestamp.toISOString().replace('T', ' ').slice(0, 19);
286
- }
287
- return this.cachedTimestamp;
288
- }
289
-
290
- getMetrics(): LogMetrics {
291
- const now = Date.now();
292
- const uptime = (now - this.startTime) / 1000; // seconds
293
- const avgRate = uptime > 0 ? this.metrics.totalLogs / uptime : 0;
294
- const errorCount = this.metrics.logsByLevel.error + this.metrics.logsByLevel.fatal;
295
- const errorRate = this.metrics.totalLogs > 0 ? (errorCount / this.metrics.totalLogs) * 100 : 0;
296
-
297
- return {
298
- ...this.metrics,
299
- averageLogRate: Math.round(avgRate * 100) / 100,
300
- errorRate: Math.round(errorRate * 100) / 100,
301
- memoryUsage: process.memoryUsage().heapUsed / 1024 / 1024, // MB
302
- };
303
- }
304
-
305
- clear(): void {
306
- this.history = [];
307
- this.metrics = {
308
- totalLogs: 0,
309
- logsByLevel: { debug: 0, info: 0, warn: 0, error: 0, fatal: 0 },
310
- logsByContext: {},
311
- averageLogRate: 0,
312
- errorRate: 0,
313
- memoryUsage: 0,
314
- };
315
- }
316
-
317
- // Optimized logging method with aggressive level checking
318
- private log(
319
- level: LogLevel,
320
- message: string,
321
- context?: string,
322
- metadata?: Record<string, any>
323
- ): void {
324
- // AGGRESSIVE LEVEL CHECK - numeric comparison for maximum speed
325
- const levelNum = MoroLogger.LEVELS[level];
326
- const effectiveLevelNum = this.parent
327
- ? MoroLogger.LEVELS[this.parent.level]
328
- : MoroLogger.LEVELS[this.level];
329
-
330
- if (levelNum < effectiveLevelNum) {
331
- return; // Exit immediately if level is too low
332
- }
333
-
334
- // ULTRA-FAST PATH: Just message, no context, no metadata
335
- if (!metadata && !context && !this.contextPrefix && !this.contextMetadata) {
336
- const levelStr = MoroLogger.LEVEL_STRINGS[level];
337
- this.output(`${levelStr} ${message}\n`, level);
338
- return;
339
- }
340
-
341
- // FAST PATH: Message + context, no metadata
342
- if (!metadata && !this.contextMetadata) {
343
- const levelStr = MoroLogger.LEVEL_STRINGS[level];
344
- if (context) {
345
- this.output(`${levelStr} [${context}] ${message}\n`, level);
346
- } else {
347
- this.output(`${levelStr} ${message}\n`, level);
348
- }
349
- return;
350
- }
351
-
352
- // MEDIUM PATH: Message + context + simple metadata
353
- if (metadata && Object.keys(metadata).length <= 3 && !this.contextMetadata) {
354
- const levelStr = MoroLogger.LEVEL_STRINGS[level];
355
- const contextStr = context ? `[${context}] ` : '';
356
- const metaStr = this.stringify(metadata);
357
- this.output(`${levelStr} ${contextStr}${message} ${metaStr}\n`, level);
358
- return;
359
- }
360
-
361
- // FULL PATH: All features enabled
362
- this.fullLog(level, message, context, metadata);
363
- }
364
-
365
- // Full logging with all features using object pooling
366
- private fullLog(
367
- level: LogLevel,
368
- message: string,
369
- context?: string,
370
- metadata?: Record<string, any>
371
- ): void {
372
- // Get pooled entry to avoid allocation
373
- const entry = MoroLogger.getPooledEntry();
374
- const now = Date.now();
375
-
376
- entry.timestamp = new Date(now);
377
- entry.level = level;
378
- entry.message = message;
379
- entry.context = this.contextPrefix
380
- ? context
381
- ? `${this.contextPrefix}:${context}`
382
- : this.contextPrefix
383
- : context;
384
- entry.metadata = this.createMetadata(metadata);
385
- entry.performance = this.options.enablePerformance ? this.getPerformanceData(now) : undefined;
386
-
387
- // Apply filters with early return optimization
388
- if (this.filters.size > 0) {
389
- for (const filter of this.filters.values()) {
390
- if (!filter.filter(entry)) {
391
- return;
392
- }
393
- }
394
- }
395
-
396
- // Update metrics
397
- this.updateMetrics(entry);
398
-
399
- // Store in history with circular buffer optimization
400
- this.addToHistory(entry);
401
-
402
- // Write to outputs with batched processing
403
- this.writeToOutputs(entry, level);
404
-
405
- // Return entry to pool after a short delay to allow async operations
406
- setTimeout(() => MoroLogger.returnPooledEntry(entry), 0);
407
- }
408
-
409
- private updateMetrics(entry: LogEntry): void {
410
- this.metrics.totalLogs++;
411
- this.metrics.logsByLevel[entry.level]++;
412
-
413
- if (entry.context) {
414
- this.metrics.logsByContext[entry.context] =
415
- (this.metrics.logsByContext[entry.context] || 0) + 1;
416
- }
417
- }
418
-
419
- // Optimized metadata creation to avoid unnecessary object spreading
420
- private createMetadata(metadata?: Record<string, any>): Record<string, any> {
421
- if (!metadata && !this.contextMetadata) {
422
- return {};
423
- }
424
- if (!metadata) {
425
- return { ...this.contextMetadata };
426
- }
427
- if (!this.contextMetadata) {
428
- return { ...metadata };
429
- }
430
- return { ...this.contextMetadata, ...metadata };
431
- }
432
-
433
- // Optimized performance data with caching
434
- private getPerformanceData(now: number): { memory: number } | undefined {
435
- if (now - this.lastMemoryCheck > this.memoryCheckInterval) {
436
- this.lastMemoryCheck = now;
437
- this.metrics.memoryUsage = process.memoryUsage().heapUsed / 1024 / 1024;
438
- }
439
- return { memory: this.metrics.memoryUsage };
440
- }
441
-
442
- // Circular buffer implementation for history (O(1) instead of O(n))
443
- private addToHistory(entry: LogEntry): void {
444
- const maxEntries = this.options.maxEntries || 1000;
445
-
446
- if (this.historySize < maxEntries) {
447
- this.history[this.historySize] = entry;
448
- this.historySize++;
449
- } else {
450
- // Circular buffer: overwrite oldest entry
451
- this.history[this.historyIndex] = entry;
452
- this.historyIndex = (this.historyIndex + 1) % maxEntries;
453
- }
454
- }
455
-
456
- // Optimized output writing with batching
457
- private writeToOutputs(entry: LogEntry, level: LogLevel): void {
458
- if (this.outputs.size === 0) return;
459
-
460
- for (const output of this.outputs.values()) {
461
- if (!output.level || MoroLogger.LEVELS[level] >= MoroLogger.LEVELS[output.level]) {
462
- try {
463
- output.write(entry);
464
- } catch (error) {
465
- // Fallback to console.error for logger errors
466
- // eslint-disable-next-line no-console
467
- console.error('Logger output error:', error);
468
- }
469
- }
470
- }
471
- }
472
-
473
- private writeToConsole(entry: LogEntry): void {
474
- const format = this.options.format || 'pretty';
475
-
476
- if (format === 'json') {
477
- this.output(JSON.stringify(entry) + '\n', entry.level);
478
- return;
479
- }
480
-
481
- if (format === 'compact') {
482
- const level = entry.level.toUpperCase().padEnd(5);
483
- const context = entry.context ? `[${entry.context}] ` : '';
484
- this.output(`${level} ${context}${entry.message}\n`, entry.level);
485
- return;
486
- }
487
-
488
- // Pretty format (default)
489
- this.writePrettyLog(entry);
490
- }
491
-
492
- private writePrettyLog(entry: LogEntry): void {
493
- const colors = this.options.enableColors !== false;
494
- MoroLogger.resetStringBuilder();
495
-
496
- // Timestamp with caching optimization
497
- if (this.options.enableTimestamp !== false) {
498
- const timestamp = this.getCachedTimestamp(entry.timestamp);
499
- if (colors) {
500
- MoroLogger.appendToBuilder(MoroLogger.COLORS.timestamp);
501
- MoroLogger.appendToBuilder(timestamp);
502
- MoroLogger.appendToBuilder(MoroLogger.RESET);
503
- } else {
504
- MoroLogger.appendToBuilder(timestamp);
505
- }
506
- }
507
-
508
- // Level with color using pre-allocated strings
509
- const levelColor = colors ? MoroLogger.COLORS[entry.level] : '';
510
- const levelReset = colors ? MoroLogger.RESET : '';
511
- const levelText = MoroLogger.LEVEL_STRINGS[entry.level];
512
-
513
- // Add space after timestamp if present
514
- if (this.options.enableTimestamp !== false) {
515
- MoroLogger.appendToBuilder(' ');
516
- }
517
-
518
- if (colors) {
519
- MoroLogger.appendToBuilder(levelColor);
520
- MoroLogger.appendToBuilder(MoroLogger.BOLD);
521
- MoroLogger.appendToBuilder(levelText);
522
- MoroLogger.appendToBuilder(levelReset);
523
- } else {
524
- MoroLogger.appendToBuilder(levelText);
525
- }
526
-
527
- // Context
528
- if (entry.context && this.options.enableContext !== false) {
529
- const contextColor = colors ? MoroLogger.COLORS.context : '';
530
- MoroLogger.appendToBuilder(' '); // Space before context
531
- if (colors) {
532
- MoroLogger.appendToBuilder(contextColor);
533
- MoroLogger.appendToBuilder(`[${entry.context}]`);
534
- MoroLogger.appendToBuilder(levelReset);
535
- } else {
536
- MoroLogger.appendToBuilder(`[${entry.context}]`);
537
- }
538
- }
539
-
540
- // Message
541
- MoroLogger.appendToBuilder(' '); // Space before message
542
- MoroLogger.appendToBuilder(entry.message);
543
-
544
- // Performance info
545
- if (entry.performance && this.options.enablePerformance !== false) {
546
- const perfColor = colors ? MoroLogger.COLORS.performance : '';
547
- const perfParts: string[] = [];
548
-
549
- if (entry.performance.duration !== undefined) {
550
- perfParts.push(`${entry.performance.duration}ms`);
551
- }
552
- if (entry.performance.memory !== undefined) {
553
- perfParts.push(`${Math.round(entry.performance.memory)}MB`);
554
- }
555
-
556
- if (perfParts.length > 0) {
557
- MoroLogger.appendToBuilder(' '); // Space before performance info
558
- if (colors) {
559
- MoroLogger.appendToBuilder(perfColor);
560
- MoroLogger.appendToBuilder(`(${perfParts.join(', ')})`);
561
- MoroLogger.appendToBuilder(levelReset);
562
- } else {
563
- MoroLogger.appendToBuilder(`(${perfParts.join(', ')})`);
564
- }
565
- }
566
- }
567
-
568
- // Metadata with optimized JSON stringify
569
- if (
570
- entry.metadata &&
571
- Object.keys(entry.metadata).length > 0 &&
572
- this.options.enableMetadata !== false
573
- ) {
574
- const metaColor = colors ? MoroLogger.COLORS.metadata : '';
575
- const cleanMetadata = this.cleanMetadata(entry.metadata);
576
-
577
- if (Object.keys(cleanMetadata).length > 0) {
578
- if (colors) {
579
- MoroLogger.appendToBuilder(metaColor);
580
- MoroLogger.appendToBuilder(this.stringify(cleanMetadata));
581
- MoroLogger.appendToBuilder(levelReset);
582
- } else {
583
- MoroLogger.appendToBuilder(this.stringify(cleanMetadata));
584
- }
585
- }
586
- }
587
-
588
- // Output main log line with high-performance method
589
- const finalMessage = MoroLogger.buildString();
590
- this.output(finalMessage + '\n', entry.level);
591
-
592
- // Stack trace for errors
593
- if (entry.metadata?.stack && (entry.level === 'error' || entry.level === 'fatal')) {
594
- const stackColor = colors ? MoroLogger.COLORS.error : '';
595
- this.output(`${stackColor}${entry.metadata.stack}${levelReset}\n`, entry.level);
596
- }
597
- }
598
-
599
- // Optimized metadata cleaning to avoid unnecessary object operations
600
- private cleanMetadata(metadata: Record<string, any>): Record<string, any> {
601
- const clean: Record<string, any> = {};
602
- for (const [key, value] of Object.entries(metadata)) {
603
- if (key !== 'stack') {
604
- clean[key] = value;
605
- }
606
- }
607
- return clean;
608
- }
609
-
610
- // Fast JSON stringify with error handling
611
- private stringify(obj: any): string {
612
- try {
613
- return JSON.stringify(obj);
614
- } catch {
615
- return '[Circular Reference]';
616
- }
617
- }
618
-
619
- // High-performance output with micro-batching
620
- private output(message: string, level: LogLevel = 'info'): void {
621
- // Add to buffer
622
- this.outputBuffer.push(message);
623
- this.bufferSize += message.length;
624
-
625
- // Flush immediately if buffer is full or for errors
626
- if (this.bufferSize >= this.maxBufferSize || level === 'error' || level === 'fatal') {
627
- this.flushBuffer();
628
- } else {
629
- // Schedule flush with micro-batching
630
- this.scheduleFlush();
631
- }
632
- }
633
-
634
- private scheduleFlush(): void {
635
- if (this.flushTimeout) return; // Already scheduled
636
-
637
- this.flushTimeout = setTimeout(() => {
638
- this.flushBuffer();
639
- this.flushTimeout = null;
640
- }, this.flushInterval);
641
- }
642
-
643
- private flushBuffer(): void {
644
- if (this.outputBuffer.length === 0) return;
645
-
646
- try {
647
- // Group by stream type for efficiency
648
- const stdoutMessages: string[] = [];
649
- const stderrMessages: string[] = [];
650
-
651
- for (const message of this.outputBuffer) {
652
- // Determine stream based on message content (simple heuristic)
653
- if (message.includes('ERROR') || message.includes('FATAL')) {
654
- stderrMessages.push(message);
655
- } else {
656
- stdoutMessages.push(message);
657
- }
658
- }
659
-
660
- // Write to streams
661
- if (stdoutMessages.length > 0) {
662
- process.stdout.write(stdoutMessages.join(''));
663
- }
664
- if (stderrMessages.length > 0) {
665
- process.stderr.write(stderrMessages.join(''));
666
- }
667
- } catch {
668
- // Fallback to console methods if stream write fails
669
- for (const message of this.outputBuffer) {
670
- if (message.includes('ERROR') || message.includes('FATAL')) {
671
- // eslint-disable-next-line no-console
672
- console.error(message.trim());
673
- } else {
674
- // eslint-disable-next-line no-console
675
- console.log(message.trim());
676
- }
677
- }
678
- }
679
-
680
- // Reset buffer
681
- this.outputBuffer.length = 0;
682
- this.bufferSize = 0;
683
- }
684
-
685
- // Force flush streams (useful for shutdown)
686
- public flush(): void {
687
- // Clear any pending flush timeout
688
- if (this.flushTimeout) {
689
- clearTimeout(this.flushTimeout);
690
- this.flushTimeout = null;
691
- }
692
-
693
- // Flush any remaining buffer
694
- this.flushBuffer();
695
-
696
- try {
697
- // Force flush streams
698
- if (process.stdout.writable) {
699
- process.stdout.end();
700
- }
701
- if (process.stderr.writable) {
702
- process.stderr.end();
703
- }
704
- } catch {
705
- // Ignore flush errors
706
- }
707
- }
708
-
709
- // Cleanup method to clear all timeouts and handles
710
- public cleanup(): void {
711
- // Clear any pending flush timeout
712
- if (this.flushTimeout) {
713
- clearTimeout(this.flushTimeout);
714
- this.flushTimeout = null;
715
- }
716
-
717
- // Flush any remaining output
718
- this.flushBuffer();
719
- }
720
- }
721
-
722
- // Global logger instance
723
- const initialLogLevel =
724
- process.env.LOG_LEVEL ||
725
- process.env.MORO_LOG_LEVEL ||
726
- (process.env.NODE_ENV === 'production' ? 'warn' : 'debug');
727
-
728
- export const logger = new MoroLogger({
729
- level: initialLogLevel as LogLevel,
730
- enableColors: !process.env.NO_COLOR,
731
- format: (process.env.LOG_FORMAT as any) || 'pretty',
732
- });
733
-
734
- // Add cleanup handlers for Jest and other test runners
735
- if (typeof process !== 'undefined') {
736
- // Cleanup on process exit
737
- process.on('beforeExit', () => {
738
- logger.cleanup();
739
- });
740
-
741
- process.on('SIGINT', () => {
742
- logger.cleanup();
743
- process.exit(0);
744
- });
745
-
746
- process.on('SIGTERM', () => {
747
- logger.cleanup();
748
- process.exit(0);
749
- });
750
-
751
- // For Jest and other test runners - cleanup on uncaught exceptions
752
- process.on('uncaughtException', () => {
753
- logger.cleanup();
754
- });
755
-
756
- process.on('unhandledRejection', () => {
757
- logger.cleanup();
758
- });
759
- }
760
-
761
- /**
762
- * Configure the global logger with new settings
763
- * This allows runtime configuration of the logger
764
- */
765
- export function configureGlobalLogger(options: Partial<LoggerOptions>): void {
766
- if (options.level) {
767
- logger.setLevel(options.level);
768
- }
769
- // Additional configuration options can be added here as needed
770
- // For now, focusing on level which is the most critical
771
- }
772
-
773
- /**
774
- * Apply logging configuration from the config system and/or createApp options
775
- */
776
- export function applyLoggingConfiguration(
777
- configLogging?: any,
778
- appOptions?: Partial<LoggerOptions> | boolean
779
- ): void {
780
- // First apply config system settings (from environment variables)
781
- if (configLogging?.level) {
782
- configureGlobalLogger({ level: configLogging.level });
783
- }
784
-
785
- // Then apply createApp options (these take precedence)
786
- if (appOptions !== undefined) {
787
- if (appOptions === false) {
788
- // Disable logging by setting to fatal level
789
- configureGlobalLogger({ level: 'fatal' });
790
- } else if (typeof appOptions === 'object') {
791
- configureGlobalLogger(appOptions);
792
- }
793
- }
794
- }
795
-
796
- // Framework-specific logger
797
- export const createFrameworkLogger = (context: string) => {
798
- return logger.child('Moro', { framework: 'moro', context });
799
- };
800
-
801
- // Graceful shutdown handler to flush any pending logs
802
- process.on('SIGINT', () => {
803
- logger.flush();
804
- process.exit(0);
805
- });
806
-
807
- process.on('SIGTERM', () => {
808
- logger.flush();
809
- process.exit(0);
810
- });
811
-
812
- process.on('beforeExit', () => {
813
- logger.flush();
814
- });