@morojs/moro 1.0.0

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 (345) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/dist/core/config/index.d.ts +19 -0
  4. package/dist/core/config/index.js +59 -0
  5. package/dist/core/config/index.js.map +1 -0
  6. package/dist/core/config/loader.d.ts +6 -0
  7. package/dist/core/config/loader.js +288 -0
  8. package/dist/core/config/loader.js.map +1 -0
  9. package/dist/core/config/schema.d.ts +335 -0
  10. package/dist/core/config/schema.js +286 -0
  11. package/dist/core/config/schema.js.map +1 -0
  12. package/dist/core/config/utils.d.ts +50 -0
  13. package/dist/core/config/utils.js +185 -0
  14. package/dist/core/config/utils.js.map +1 -0
  15. package/dist/core/database/adapters/drizzle.d.ts +29 -0
  16. package/dist/core/database/adapters/drizzle.js +366 -0
  17. package/dist/core/database/adapters/drizzle.js.map +1 -0
  18. package/dist/core/database/adapters/index.d.ts +8 -0
  19. package/dist/core/database/adapters/index.js +48 -0
  20. package/dist/core/database/adapters/index.js.map +1 -0
  21. package/dist/core/database/adapters/mongodb.d.ts +35 -0
  22. package/dist/core/database/adapters/mongodb.js +215 -0
  23. package/dist/core/database/adapters/mongodb.js.map +1 -0
  24. package/dist/core/database/adapters/mysql.d.ts +23 -0
  25. package/dist/core/database/adapters/mysql.js +149 -0
  26. package/dist/core/database/adapters/mysql.js.map +1 -0
  27. package/dist/core/database/adapters/postgresql.d.ts +24 -0
  28. package/dist/core/database/adapters/postgresql.js +160 -0
  29. package/dist/core/database/adapters/postgresql.js.map +1 -0
  30. package/dist/core/database/adapters/redis.d.ts +50 -0
  31. package/dist/core/database/adapters/redis.js +266 -0
  32. package/dist/core/database/adapters/redis.js.map +1 -0
  33. package/dist/core/database/adapters/sqlite.d.ts +23 -0
  34. package/dist/core/database/adapters/sqlite.js +194 -0
  35. package/dist/core/database/adapters/sqlite.js.map +1 -0
  36. package/dist/core/database/index.d.ts +2 -0
  37. package/dist/core/database/index.js +20 -0
  38. package/dist/core/database/index.js.map +1 -0
  39. package/dist/core/docs/index.d.ts +63 -0
  40. package/dist/core/docs/index.js +170 -0
  41. package/dist/core/docs/index.js.map +1 -0
  42. package/dist/core/docs/openapi-generator.d.ts +124 -0
  43. package/dist/core/docs/openapi-generator.js +413 -0
  44. package/dist/core/docs/openapi-generator.js.map +1 -0
  45. package/dist/core/docs/simple-docs.d.ts +21 -0
  46. package/dist/core/docs/simple-docs.js +268 -0
  47. package/dist/core/docs/simple-docs.js.map +1 -0
  48. package/dist/core/docs/swagger-ui.d.ts +28 -0
  49. package/dist/core/docs/swagger-ui.js +317 -0
  50. package/dist/core/docs/swagger-ui.js.map +1 -0
  51. package/dist/core/docs/zod-to-openapi.d.ts +29 -0
  52. package/dist/core/docs/zod-to-openapi.js +414 -0
  53. package/dist/core/docs/zod-to-openapi.js.map +1 -0
  54. package/dist/core/events/event-bus.d.ts +27 -0
  55. package/dist/core/events/event-bus.js +193 -0
  56. package/dist/core/events/event-bus.js.map +1 -0
  57. package/dist/core/events/index.d.ts +2 -0
  58. package/dist/core/events/index.js +7 -0
  59. package/dist/core/events/index.js.map +1 -0
  60. package/dist/core/framework.d.ts +57 -0
  61. package/dist/core/framework.js +432 -0
  62. package/dist/core/framework.js.map +1 -0
  63. package/dist/core/http/http-server.d.ts +114 -0
  64. package/dist/core/http/http-server.js +1154 -0
  65. package/dist/core/http/http-server.js.map +1 -0
  66. package/dist/core/http/index.d.ts +3 -0
  67. package/dist/core/http/index.js +10 -0
  68. package/dist/core/http/index.js.map +1 -0
  69. package/dist/core/http/router.d.ts +14 -0
  70. package/dist/core/http/router.js +113 -0
  71. package/dist/core/http/router.js.map +1 -0
  72. package/dist/core/logger/filters.d.ts +9 -0
  73. package/dist/core/logger/filters.js +134 -0
  74. package/dist/core/logger/filters.js.map +1 -0
  75. package/dist/core/logger/index.d.ts +3 -0
  76. package/dist/core/logger/index.js +26 -0
  77. package/dist/core/logger/index.js.map +1 -0
  78. package/dist/core/logger/logger.d.ts +49 -0
  79. package/dist/core/logger/logger.js +332 -0
  80. package/dist/core/logger/logger.js.map +1 -0
  81. package/dist/core/logger/outputs.d.ts +42 -0
  82. package/dist/core/logger/outputs.js +110 -0
  83. package/dist/core/logger/outputs.js.map +1 -0
  84. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +15 -0
  85. package/dist/core/middleware/built-in/adapters/cache/file.js +128 -0
  86. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -0
  87. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +5 -0
  88. package/dist/core/middleware/built-in/adapters/cache/index.js +28 -0
  89. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -0
  90. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +11 -0
  91. package/dist/core/middleware/built-in/adapters/cache/memory.js +65 -0
  92. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -0
  93. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +17 -0
  94. package/dist/core/middleware/built-in/adapters/cache/redis.js +91 -0
  95. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -0
  96. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +21 -0
  97. package/dist/core/middleware/built-in/adapters/cdn/azure.js +40 -0
  98. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -0
  99. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +14 -0
  100. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +77 -0
  101. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -0
  102. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +15 -0
  103. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +73 -0
  104. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -0
  105. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +5 -0
  106. package/dist/core/middleware/built-in/adapters/cdn/index.js +28 -0
  107. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +1 -0
  108. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -0
  109. package/dist/core/middleware/built-in/adapters/index.js +26 -0
  110. package/dist/core/middleware/built-in/adapters/index.js.map +1 -0
  111. package/dist/core/middleware/built-in/auth.d.ts +2 -0
  112. package/dist/core/middleware/built-in/auth.js +38 -0
  113. package/dist/core/middleware/built-in/auth.js.map +1 -0
  114. package/dist/core/middleware/built-in/cache.d.ts +3 -0
  115. package/dist/core/middleware/built-in/cache.js +188 -0
  116. package/dist/core/middleware/built-in/cache.js.map +1 -0
  117. package/dist/core/middleware/built-in/cdn.d.ts +3 -0
  118. package/dist/core/middleware/built-in/cdn.js +115 -0
  119. package/dist/core/middleware/built-in/cdn.js.map +1 -0
  120. package/dist/core/middleware/built-in/cookie.d.ts +14 -0
  121. package/dist/core/middleware/built-in/cookie.js +68 -0
  122. package/dist/core/middleware/built-in/cookie.js.map +1 -0
  123. package/dist/core/middleware/built-in/cors.d.ts +2 -0
  124. package/dist/core/middleware/built-in/cors.js +29 -0
  125. package/dist/core/middleware/built-in/cors.js.map +1 -0
  126. package/dist/core/middleware/built-in/csp.d.ts +22 -0
  127. package/dist/core/middleware/built-in/csp.js +74 -0
  128. package/dist/core/middleware/built-in/csp.js.map +1 -0
  129. package/dist/core/middleware/built-in/csrf.d.ts +9 -0
  130. package/dist/core/middleware/built-in/csrf.js +66 -0
  131. package/dist/core/middleware/built-in/csrf.js.map +1 -0
  132. package/dist/core/middleware/built-in/error-tracker.d.ts +1 -0
  133. package/dist/core/middleware/built-in/error-tracker.js +19 -0
  134. package/dist/core/middleware/built-in/error-tracker.js.map +1 -0
  135. package/dist/core/middleware/built-in/index.d.ts +70 -0
  136. package/dist/core/middleware/built-in/index.js +70 -0
  137. package/dist/core/middleware/built-in/index.js.map +1 -0
  138. package/dist/core/middleware/built-in/performance-monitor.d.ts +1 -0
  139. package/dist/core/middleware/built-in/performance-monitor.js +22 -0
  140. package/dist/core/middleware/built-in/performance-monitor.js.map +1 -0
  141. package/dist/core/middleware/built-in/rate-limit.d.ts +6 -0
  142. package/dist/core/middleware/built-in/rate-limit.js +47 -0
  143. package/dist/core/middleware/built-in/rate-limit.js.map +1 -0
  144. package/dist/core/middleware/built-in/request-logger.d.ts +1 -0
  145. package/dist/core/middleware/built-in/request-logger.js +15 -0
  146. package/dist/core/middleware/built-in/request-logger.js.map +1 -0
  147. package/dist/core/middleware/built-in/session.d.ts +41 -0
  148. package/dist/core/middleware/built-in/session.js +209 -0
  149. package/dist/core/middleware/built-in/session.js.map +1 -0
  150. package/dist/core/middleware/built-in/sse.d.ts +6 -0
  151. package/dist/core/middleware/built-in/sse.js +73 -0
  152. package/dist/core/middleware/built-in/sse.js.map +1 -0
  153. package/dist/core/middleware/built-in/validation.d.ts +2 -0
  154. package/dist/core/middleware/built-in/validation.js +31 -0
  155. package/dist/core/middleware/built-in/validation.js.map +1 -0
  156. package/dist/core/middleware/index.d.ts +21 -0
  157. package/dist/core/middleware/index.js +152 -0
  158. package/dist/core/middleware/index.js.map +1 -0
  159. package/dist/core/modules/auto-discovery.d.ts +27 -0
  160. package/dist/core/modules/auto-discovery.js +255 -0
  161. package/dist/core/modules/auto-discovery.js.map +1 -0
  162. package/dist/core/modules/index.d.ts +2 -0
  163. package/dist/core/modules/index.js +11 -0
  164. package/dist/core/modules/index.js.map +1 -0
  165. package/dist/core/modules/modules.d.ts +10 -0
  166. package/dist/core/modules/modules.js +137 -0
  167. package/dist/core/modules/modules.js.map +1 -0
  168. package/dist/core/networking/index.d.ts +2 -0
  169. package/dist/core/networking/index.js +9 -0
  170. package/dist/core/networking/index.js.map +1 -0
  171. package/dist/core/networking/service-discovery.d.ts +38 -0
  172. package/dist/core/networking/service-discovery.js +233 -0
  173. package/dist/core/networking/service-discovery.js.map +1 -0
  174. package/dist/core/networking/websocket-manager.d.ts +27 -0
  175. package/dist/core/networking/websocket-manager.js +211 -0
  176. package/dist/core/networking/websocket-manager.js.map +1 -0
  177. package/dist/core/routing/app-integration.d.ts +42 -0
  178. package/dist/core/routing/app-integration.js +152 -0
  179. package/dist/core/routing/app-integration.js.map +1 -0
  180. package/dist/core/routing/index.d.ts +106 -0
  181. package/dist/core/routing/index.js +343 -0
  182. package/dist/core/routing/index.js.map +1 -0
  183. package/dist/core/runtime/aws-lambda-adapter.d.ts +43 -0
  184. package/dist/core/runtime/aws-lambda-adapter.js +108 -0
  185. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -0
  186. package/dist/core/runtime/base-adapter.d.ts +16 -0
  187. package/dist/core/runtime/base-adapter.js +105 -0
  188. package/dist/core/runtime/base-adapter.js.map +1 -0
  189. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +18 -0
  190. package/dist/core/runtime/cloudflare-workers-adapter.js +131 -0
  191. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -0
  192. package/dist/core/runtime/index.d.ts +14 -0
  193. package/dist/core/runtime/index.js +56 -0
  194. package/dist/core/runtime/index.js.map +1 -0
  195. package/dist/core/runtime/node-adapter.d.ts +15 -0
  196. package/dist/core/runtime/node-adapter.js +204 -0
  197. package/dist/core/runtime/node-adapter.js.map +1 -0
  198. package/dist/core/runtime/vercel-edge-adapter.d.ts +10 -0
  199. package/dist/core/runtime/vercel-edge-adapter.js +106 -0
  200. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -0
  201. package/dist/core/utilities/circuit-breaker.d.ts +14 -0
  202. package/dist/core/utilities/circuit-breaker.js +42 -0
  203. package/dist/core/utilities/circuit-breaker.js.map +1 -0
  204. package/dist/core/utilities/container.d.ts +116 -0
  205. package/dist/core/utilities/container.js +529 -0
  206. package/dist/core/utilities/container.js.map +1 -0
  207. package/dist/core/utilities/hooks.d.ts +24 -0
  208. package/dist/core/utilities/hooks.js +131 -0
  209. package/dist/core/utilities/hooks.js.map +1 -0
  210. package/dist/core/utilities/index.d.ts +4 -0
  211. package/dist/core/utilities/index.js +22 -0
  212. package/dist/core/utilities/index.js.map +1 -0
  213. package/dist/core/validation/index.d.ts +30 -0
  214. package/dist/core/validation/index.js +144 -0
  215. package/dist/core/validation/index.js.map +1 -0
  216. package/dist/index.d.ts +30 -0
  217. package/dist/index.js +72 -0
  218. package/dist/index.js.map +1 -0
  219. package/dist/moro.d.ts +82 -0
  220. package/dist/moro.js +679 -0
  221. package/dist/moro.js.map +1 -0
  222. package/dist/types/cache.d.ts +34 -0
  223. package/dist/types/cache.js +3 -0
  224. package/dist/types/cache.js.map +1 -0
  225. package/dist/types/cdn.d.ts +19 -0
  226. package/dist/types/cdn.js +3 -0
  227. package/dist/types/cdn.js.map +1 -0
  228. package/dist/types/core.d.ts +13 -0
  229. package/dist/types/core.js +3 -0
  230. package/dist/types/core.js.map +1 -0
  231. package/dist/types/database.d.ts +29 -0
  232. package/dist/types/database.js +3 -0
  233. package/dist/types/database.js.map +1 -0
  234. package/dist/types/discovery.d.ts +6 -0
  235. package/dist/types/discovery.js +3 -0
  236. package/dist/types/discovery.js.map +1 -0
  237. package/dist/types/events.d.ts +116 -0
  238. package/dist/types/events.js +3 -0
  239. package/dist/types/events.js.map +1 -0
  240. package/dist/types/hooks.d.ts +38 -0
  241. package/dist/types/hooks.js +3 -0
  242. package/dist/types/hooks.js.map +1 -0
  243. package/dist/types/http.d.ts +51 -0
  244. package/dist/types/http.js +3 -0
  245. package/dist/types/http.js.map +1 -0
  246. package/dist/types/logger.d.ts +77 -0
  247. package/dist/types/logger.js +3 -0
  248. package/dist/types/logger.js.map +1 -0
  249. package/dist/types/module.d.ts +91 -0
  250. package/dist/types/module.js +3 -0
  251. package/dist/types/module.js.map +1 -0
  252. package/dist/types/runtime.d.ts +48 -0
  253. package/dist/types/runtime.js +3 -0
  254. package/dist/types/runtime.js.map +1 -0
  255. package/dist/types/session.d.ts +66 -0
  256. package/dist/types/session.js +3 -0
  257. package/dist/types/session.js.map +1 -0
  258. package/package.json +176 -0
  259. package/src/core/config/index.ts +47 -0
  260. package/src/core/config/loader.ts +366 -0
  261. package/src/core/config/schema.ts +346 -0
  262. package/src/core/config/utils.ts +220 -0
  263. package/src/core/database/README.md +228 -0
  264. package/src/core/database/adapters/drizzle.ts +425 -0
  265. package/src/core/database/adapters/index.ts +45 -0
  266. package/src/core/database/adapters/mongodb.ts +292 -0
  267. package/src/core/database/adapters/mysql.ts +217 -0
  268. package/src/core/database/adapters/postgresql.ts +211 -0
  269. package/src/core/database/adapters/redis.ts +331 -0
  270. package/src/core/database/adapters/sqlite.ts +255 -0
  271. package/src/core/database/index.ts +3 -0
  272. package/src/core/docs/index.ts +245 -0
  273. package/src/core/docs/openapi-generator.ts +588 -0
  274. package/src/core/docs/simple-docs.ts +305 -0
  275. package/src/core/docs/swagger-ui.ts +370 -0
  276. package/src/core/docs/zod-to-openapi.ts +532 -0
  277. package/src/core/events/event-bus.ts +249 -0
  278. package/src/core/events/index.ts +12 -0
  279. package/src/core/framework.ts +621 -0
  280. package/src/core/http/http-server.ts +1421 -0
  281. package/src/core/http/index.ts +11 -0
  282. package/src/core/http/router.ts +153 -0
  283. package/src/core/logger/filters.ts +148 -0
  284. package/src/core/logger/index.ts +20 -0
  285. package/src/core/logger/logger.ts +434 -0
  286. package/src/core/logger/outputs.ts +136 -0
  287. package/src/core/middleware/built-in/adapters/cache/file.ts +106 -0
  288. package/src/core/middleware/built-in/adapters/cache/index.ts +26 -0
  289. package/src/core/middleware/built-in/adapters/cache/memory.ts +73 -0
  290. package/src/core/middleware/built-in/adapters/cache/redis.ts +103 -0
  291. package/src/core/middleware/built-in/adapters/cdn/azure.ts +68 -0
  292. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +100 -0
  293. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +92 -0
  294. package/src/core/middleware/built-in/adapters/cdn/index.ts +23 -0
  295. package/src/core/middleware/built-in/adapters/index.ts +7 -0
  296. package/src/core/middleware/built-in/auth.ts +39 -0
  297. package/src/core/middleware/built-in/cache.ts +228 -0
  298. package/src/core/middleware/built-in/cdn.ts +151 -0
  299. package/src/core/middleware/built-in/cookie.ts +90 -0
  300. package/src/core/middleware/built-in/cors.ts +38 -0
  301. package/src/core/middleware/built-in/csp.ts +107 -0
  302. package/src/core/middleware/built-in/csrf.ts +87 -0
  303. package/src/core/middleware/built-in/error-tracker.ts +16 -0
  304. package/src/core/middleware/built-in/index.ts +57 -0
  305. package/src/core/middleware/built-in/performance-monitor.ts +25 -0
  306. package/src/core/middleware/built-in/rate-limit.ts +60 -0
  307. package/src/core/middleware/built-in/request-logger.ts +14 -0
  308. package/src/core/middleware/built-in/session.ts +311 -0
  309. package/src/core/middleware/built-in/sse.ts +91 -0
  310. package/src/core/middleware/built-in/validation.ts +33 -0
  311. package/src/core/middleware/index.ts +188 -0
  312. package/src/core/modules/auto-discovery.ts +265 -0
  313. package/src/core/modules/index.ts +6 -0
  314. package/src/core/modules/modules.ts +125 -0
  315. package/src/core/networking/index.ts +7 -0
  316. package/src/core/networking/service-discovery.ts +309 -0
  317. package/src/core/networking/websocket-manager.ts +259 -0
  318. package/src/core/routing/app-integration.ts +229 -0
  319. package/src/core/routing/index.ts +519 -0
  320. package/src/core/runtime/aws-lambda-adapter.ts +157 -0
  321. package/src/core/runtime/base-adapter.ts +140 -0
  322. package/src/core/runtime/cloudflare-workers-adapter.ts +166 -0
  323. package/src/core/runtime/index.ts +74 -0
  324. package/src/core/runtime/node-adapter.ts +210 -0
  325. package/src/core/runtime/vercel-edge-adapter.ts +125 -0
  326. package/src/core/utilities/circuit-breaker.ts +46 -0
  327. package/src/core/utilities/container.ts +760 -0
  328. package/src/core/utilities/hooks.ts +148 -0
  329. package/src/core/utilities/index.ts +16 -0
  330. package/src/core/validation/index.ts +216 -0
  331. package/src/index.ts +120 -0
  332. package/src/moro.ts +842 -0
  333. package/src/types/cache.ts +38 -0
  334. package/src/types/cdn.ts +22 -0
  335. package/src/types/core.ts +17 -0
  336. package/src/types/database.ts +40 -0
  337. package/src/types/discovery.ts +7 -0
  338. package/src/types/events.ts +90 -0
  339. package/src/types/hooks.ts +47 -0
  340. package/src/types/http.ts +70 -0
  341. package/src/types/logger.ts +109 -0
  342. package/src/types/module.ts +87 -0
  343. package/src/types/runtime.ts +91 -0
  344. package/src/types/session.ts +89 -0
  345. package/tsconfig.json +21 -0
@@ -0,0 +1,11 @@
1
+ // HTTP System - Centralized Exports
2
+ export { MoroHttpServer, middleware } from "./http-server";
3
+ export { Router } from "./router";
4
+
5
+ // Type exports
6
+ export type {
7
+ HttpRequest,
8
+ HttpResponse,
9
+ HttpHandler,
10
+ Middleware,
11
+ } from "../../types/http";
@@ -0,0 +1,153 @@
1
+ // src/core/router.ts
2
+ import {
3
+ HttpRequest,
4
+ HttpResponse,
5
+ HttpHandler,
6
+ Middleware,
7
+ RouteDefinition,
8
+ } from "../../types/http";
9
+ import { createFrameworkLogger } from "../logger";
10
+
11
+ export class Router {
12
+ private routes: RouteDefinition[] = [];
13
+ private logger = createFrameworkLogger("Router");
14
+
15
+ get(path: string, ...handlers: (Middleware | HttpHandler)[]): void {
16
+ this.addRoute("GET", path, handlers);
17
+ }
18
+
19
+ post(path: string, ...handlers: (Middleware | HttpHandler)[]): void {
20
+ this.addRoute("POST", path, handlers);
21
+ }
22
+
23
+ put(path: string, ...handlers: (Middleware | HttpHandler)[]): void {
24
+ this.addRoute("PUT", path, handlers);
25
+ }
26
+
27
+ delete(path: string, ...handlers: (Middleware | HttpHandler)[]): void {
28
+ this.addRoute("DELETE", path, handlers);
29
+ }
30
+
31
+ patch(path: string, ...handlers: (Middleware | HttpHandler)[]): void {
32
+ this.addRoute("PATCH", path, handlers);
33
+ }
34
+
35
+ private addRoute(
36
+ method: string,
37
+ path: string,
38
+ handlers: (Middleware | HttpHandler)[],
39
+ ): void {
40
+ const { pattern, paramNames } = this.pathToRegex(path);
41
+ const handler = handlers.pop() as HttpHandler;
42
+ const middleware = handlers as Middleware[];
43
+
44
+ this.routes.push({
45
+ method,
46
+ path,
47
+ pattern,
48
+ paramNames,
49
+ handler,
50
+ middleware,
51
+ });
52
+ }
53
+
54
+ private pathToRegex(path: string): { pattern: RegExp; paramNames: string[] } {
55
+ const paramNames: string[] = [];
56
+
57
+ // Convert parameterized routes to regex
58
+ const regexPattern = path
59
+ .replace(/\/:([^/]+)/g, (match, paramName) => {
60
+ paramNames.push(paramName);
61
+ return "/([^/]+)";
62
+ })
63
+ .replace(/\//g, "\\/");
64
+
65
+ return {
66
+ pattern: new RegExp(`^${regexPattern}$`),
67
+ paramNames,
68
+ };
69
+ }
70
+
71
+ async handle(
72
+ req: HttpRequest,
73
+ res: HttpResponse,
74
+ basePath: string = "",
75
+ ): Promise<boolean> {
76
+ let path = req.path.startsWith(basePath)
77
+ ? req.path.substring(basePath.length)
78
+ : req.path;
79
+
80
+ // If removing basePath results in empty string, default to '/'
81
+ if (path === "" || path === undefined) {
82
+ path = "/";
83
+ }
84
+
85
+ this.logger.debug(
86
+ `Router processing: originalPath="${req.path}", basePath="${basePath}", processedPath="${path}"`,
87
+ "Processing",
88
+ );
89
+
90
+ const route = this.routes.find(
91
+ (r) => r.method === req.method && r.pattern.test(path),
92
+ );
93
+
94
+ this.logger.debug(
95
+ `Found route: ${!!route}${route ? ` ${route.method} ${route.path}` : " none"}`,
96
+ "RouteMatch",
97
+ );
98
+
99
+ if (!route) {
100
+ return false; // Route not found
101
+ }
102
+
103
+ // Extract path parameters
104
+ const matches = path.match(route.pattern);
105
+ if (matches) {
106
+ req.params = {};
107
+ route.paramNames.forEach((name, index) => {
108
+ req.params[name] = matches[index + 1];
109
+ });
110
+ }
111
+
112
+ // Execute middleware
113
+ for (const mw of route.middleware) {
114
+ await new Promise<void>((resolve, reject) => {
115
+ let nextCalled = false;
116
+
117
+ const next = () => {
118
+ if (nextCalled) return;
119
+ nextCalled = true;
120
+ resolve();
121
+ };
122
+
123
+ try {
124
+ const result = mw(req, res, next);
125
+
126
+ if (result instanceof Promise) {
127
+ result
128
+ .then(() => {
129
+ if (!nextCalled) next();
130
+ })
131
+ .catch(reject);
132
+ }
133
+ } catch (error) {
134
+ reject(error);
135
+ }
136
+ });
137
+ }
138
+
139
+ // Execute handler
140
+ const result = await route.handler(req, res);
141
+
142
+ // If handler returns data and response hasn't been sent, send it
143
+ if (result !== undefined && result !== null && !res.headersSent) {
144
+ res.json(result);
145
+ }
146
+
147
+ return true;
148
+ }
149
+
150
+ getRoutes(): RouteDefinition[] {
151
+ return [...this.routes];
152
+ }
153
+ }
@@ -0,0 +1,148 @@
1
+ // Advanced Logger Filters
2
+ import { LogEntry, LogFilter } from "../../types/logger";
3
+
4
+ // Level-based filter
5
+ export const levelFilter = (minLevel: string): LogFilter => ({
6
+ name: `level-${minLevel}`,
7
+ filter: (entry: LogEntry) => {
8
+ const levels = { debug: 0, info: 1, warn: 2, error: 3, fatal: 4 };
9
+ return levels[entry.level] >= levels[minLevel as keyof typeof levels];
10
+ },
11
+ });
12
+
13
+ // Context-based filter
14
+ export const contextFilter = (allowedContexts: string[]): LogFilter => ({
15
+ name: "context-filter",
16
+ filter: (entry: LogEntry) => {
17
+ if (!entry.context) return true;
18
+ return allowedContexts.some((ctx) => entry.context!.includes(ctx));
19
+ },
20
+ });
21
+
22
+ // Rate limiting filter
23
+ export const rateLimitFilter = (maxPerSecond: number): LogFilter => {
24
+ const timestamps: number[] = [];
25
+
26
+ return {
27
+ name: "rate-limit",
28
+ filter: (entry: LogEntry) => {
29
+ const now = Date.now();
30
+ const oneSecondAgo = now - 1000;
31
+
32
+ // Remove old timestamps
33
+ while (timestamps.length > 0 && timestamps[0] < oneSecondAgo) {
34
+ timestamps.shift();
35
+ }
36
+
37
+ // Check rate limit
38
+ if (timestamps.length >= maxPerSecond) {
39
+ return false;
40
+ }
41
+
42
+ timestamps.push(now);
43
+ return true;
44
+ },
45
+ };
46
+ };
47
+
48
+ // Sensitive data filter
49
+ export const sanitizeFilter = (
50
+ sensitiveKeys: string[] = ["password", "token", "key", "secret"],
51
+ ): LogFilter => ({
52
+ name: "sanitize",
53
+ filter: (entry: LogEntry) => {
54
+ if (entry.metadata) {
55
+ const sanitized = { ...entry.metadata };
56
+
57
+ for (const key of sensitiveKeys) {
58
+ if (sanitized[key]) {
59
+ sanitized[key] = "[REDACTED]";
60
+ }
61
+ }
62
+
63
+ entry.metadata = sanitized;
64
+ }
65
+
66
+ // Also sanitize message content
67
+ let sanitizedMessage = entry.message;
68
+ for (const key of sensitiveKeys) {
69
+ const regex = new RegExp(`(${key}["\\s]*[:=]["\\s]*)([^"\\s]+)`, "gi");
70
+ sanitizedMessage = sanitizedMessage.replace(regex, "$1[REDACTED]");
71
+ }
72
+ entry.message = sanitizedMessage;
73
+
74
+ return true;
75
+ },
76
+ });
77
+
78
+ // Performance filter - only log slow operations
79
+ export const performanceFilter = (minDuration: number): LogFilter => ({
80
+ name: "performance",
81
+ filter: (entry: LogEntry) => {
82
+ if (!entry.performance?.duration) return true;
83
+ return entry.performance.duration >= minDuration;
84
+ },
85
+ });
86
+
87
+ // Error aggregation filter - prevent spam
88
+ export const errorAggregationFilter = (
89
+ maxSameErrors: number = 5,
90
+ timeWindow: number = 60000,
91
+ ): LogFilter => {
92
+ const errorCounts = new Map<string, { count: number; firstSeen: number }>();
93
+
94
+ return {
95
+ name: "error-aggregation",
96
+ filter: (entry: LogEntry) => {
97
+ if (entry.level !== "error" && entry.level !== "fatal") return true;
98
+
99
+ const errorKey = `${entry.message}:${entry.context || ""}`;
100
+ const now = Date.now();
101
+ const existing = errorCounts.get(errorKey);
102
+
103
+ if (!existing) {
104
+ errorCounts.set(errorKey, { count: 1, firstSeen: now });
105
+ return true;
106
+ }
107
+
108
+ // Reset if outside time window
109
+ if (now - existing.firstSeen > timeWindow) {
110
+ errorCounts.set(errorKey, { count: 1, firstSeen: now });
111
+ return true;
112
+ }
113
+
114
+ // Check if we've exceeded the limit
115
+ if (existing.count >= maxSameErrors) {
116
+ return false;
117
+ }
118
+
119
+ existing.count++;
120
+ return true;
121
+ },
122
+ };
123
+ };
124
+
125
+ // Development vs Production filter
126
+ export const environmentFilter = (
127
+ environment: "development" | "production",
128
+ ): LogFilter => ({
129
+ name: `env-${environment}`,
130
+ filter: (entry: LogEntry) => {
131
+ if (environment === "production") {
132
+ // In production, filter out debug logs and sensitive development info
133
+ if (entry.level === "debug") return false;
134
+ if (entry.context?.includes("dev") || entry.context?.includes("test"))
135
+ return false;
136
+ }
137
+ return true;
138
+ },
139
+ });
140
+
141
+ // Module-specific filter
142
+ export const moduleFilter = (allowedModules: string[]): LogFilter => ({
143
+ name: "module-filter",
144
+ filter: (entry: LogEntry) => {
145
+ if (!entry.moduleId) return true;
146
+ return allowedModules.includes(entry.moduleId);
147
+ },
148
+ });
@@ -0,0 +1,20 @@
1
+ // Logger System - Main Exports
2
+ export {
3
+ MoroLogger,
4
+ logger,
5
+ createFrameworkLogger,
6
+ configureGlobalLogger,
7
+ applyLoggingConfiguration,
8
+ } from "./logger";
9
+ export * from "./filters";
10
+
11
+ export type {
12
+ LogLevel,
13
+ LogEntry,
14
+ LoggerOptions,
15
+ Logger,
16
+ LogOutput,
17
+ LogFilter,
18
+ LogMetrics,
19
+ ColorScheme,
20
+ } from "../../types/logger";