@morojs/moro 1.6.2 → 1.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/dist/core/http/http-server.js +12 -9
  2. package/dist/core/http/http-server.js.map +1 -1
  3. package/dist/core/http/uws-http-server.js +1 -1
  4. package/dist/core/http/uws-http-server.js.map +1 -1
  5. package/dist/core/middleware/built-in/auth/core.d.ts +78 -0
  6. package/dist/core/middleware/built-in/auth/core.js +358 -0
  7. package/dist/core/middleware/built-in/auth/core.js.map +1 -0
  8. package/dist/core/middleware/built-in/{auth-helpers.js → auth/helpers.js} +1 -1
  9. package/dist/core/middleware/built-in/auth/helpers.js.map +1 -0
  10. package/dist/core/middleware/built-in/auth/hook.d.ts +30 -0
  11. package/dist/core/middleware/built-in/auth/hook.js +99 -0
  12. package/dist/core/middleware/built-in/auth/hook.js.map +1 -0
  13. package/dist/core/middleware/built-in/auth/index.d.ts +7 -0
  14. package/dist/core/middleware/built-in/auth/index.js +15 -0
  15. package/dist/core/middleware/built-in/auth/index.js.map +1 -0
  16. package/dist/core/middleware/built-in/{jwt-helpers.js → auth/jwt-helpers.js} +1 -1
  17. package/dist/core/middleware/built-in/auth/jwt-helpers.js.map +1 -0
  18. package/dist/core/middleware/built-in/auth/middleware.d.ts +23 -0
  19. package/dist/core/middleware/built-in/auth/middleware.js +71 -0
  20. package/dist/core/middleware/built-in/auth/middleware.js.map +1 -0
  21. package/dist/core/middleware/built-in/{auth-providers.d.ts → auth/providers.d.ts} +1 -1
  22. package/dist/core/middleware/built-in/{auth-providers.js → auth/providers.js} +1 -1
  23. package/dist/core/middleware/built-in/auth/providers.js.map +1 -0
  24. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.d.ts +1 -1
  25. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/file.js +1 -1
  26. package/dist/core/middleware/built-in/cache/adapters/cache/file.js.map +1 -0
  27. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.d.ts +1 -1
  28. package/dist/core/middleware/built-in/cache/adapters/cache/index.js.map +1 -0
  29. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.d.ts +1 -1
  30. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/memory.js +1 -1
  31. package/dist/core/middleware/built-in/cache/adapters/cache/memory.js.map +1 -0
  32. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.d.ts +1 -1
  33. package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/redis.js +2 -2
  34. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -0
  35. package/dist/core/middleware/built-in/{adapters → cache/adapters}/index.d.ts +0 -2
  36. package/{src/core/middleware/built-in/adapters/index.ts → dist/core/middleware/built-in/cache/adapters/index.js} +1 -3
  37. package/dist/core/middleware/built-in/cache/adapters/index.js.map +1 -0
  38. package/dist/core/middleware/built-in/cache/core.d.ts +37 -0
  39. package/dist/core/middleware/built-in/cache/core.js +87 -0
  40. package/dist/core/middleware/built-in/cache/core.js.map +1 -0
  41. package/dist/core/middleware/built-in/cache/hook.d.ts +20 -0
  42. package/dist/core/middleware/built-in/{cache.js → cache/hook.js} +22 -5
  43. package/dist/core/middleware/built-in/cache/hook.js.map +1 -0
  44. package/dist/core/middleware/built-in/cache/index.d.ts +3 -0
  45. package/dist/core/middleware/built-in/cache/index.js +9 -0
  46. package/dist/core/middleware/built-in/cache/index.js.map +1 -0
  47. package/dist/core/middleware/built-in/cache/middleware.d.ts +17 -0
  48. package/dist/core/middleware/built-in/cache/middleware.js +44 -0
  49. package/dist/core/middleware/built-in/cache/middleware.js.map +1 -0
  50. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.d.ts +1 -1
  51. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/azure.js +1 -1
  52. package/dist/core/middleware/built-in/cdn/adapters/cdn/azure.js.map +1 -0
  53. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.d.ts +1 -1
  54. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudflare.js +1 -1
  55. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudflare.js.map +1 -0
  56. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.d.ts +1 -1
  57. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/cloudfront.js +2 -2
  58. package/dist/core/middleware/built-in/cdn/adapters/cdn/cloudfront.js.map +1 -0
  59. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.d.ts +1 -1
  60. package/dist/core/middleware/built-in/cdn/adapters/cdn/index.js.map +1 -0
  61. package/dist/core/middleware/built-in/cdn/adapters/index.d.ts +2 -0
  62. package/dist/core/middleware/built-in/{adapters → cdn/adapters}/index.js +0 -2
  63. package/dist/core/middleware/built-in/cdn/adapters/index.js.map +1 -0
  64. package/dist/core/middleware/built-in/cdn/core.d.ts +43 -0
  65. package/dist/core/middleware/built-in/cdn/core.js +144 -0
  66. package/dist/core/middleware/built-in/cdn/core.js.map +1 -0
  67. package/dist/core/middleware/built-in/cdn/hook.d.ts +22 -0
  68. package/dist/core/middleware/built-in/cdn/hook.js +70 -0
  69. package/dist/core/middleware/built-in/cdn/hook.js.map +1 -0
  70. package/dist/core/middleware/built-in/cdn/index.d.ts +5 -0
  71. package/dist/core/middleware/built-in/cdn/index.js +11 -0
  72. package/dist/core/middleware/built-in/cdn/index.js.map +1 -0
  73. package/dist/core/middleware/built-in/cdn/middleware.d.ts +21 -0
  74. package/dist/core/middleware/built-in/cdn/middleware.js +52 -0
  75. package/dist/core/middleware/built-in/cdn/middleware.js.map +1 -0
  76. package/dist/core/middleware/built-in/cookie/core.d.ts +37 -0
  77. package/dist/core/middleware/built-in/cookie/core.js +83 -0
  78. package/dist/core/middleware/built-in/cookie/core.js.map +1 -0
  79. package/dist/core/middleware/built-in/cookie/hook.d.ts +20 -0
  80. package/dist/core/middleware/built-in/cookie/hook.js +47 -0
  81. package/dist/core/middleware/built-in/cookie/hook.js.map +1 -0
  82. package/dist/core/middleware/built-in/cookie/index.d.ts +3 -0
  83. package/dist/core/middleware/built-in/cookie/index.js +9 -0
  84. package/dist/core/middleware/built-in/cookie/index.js.map +1 -0
  85. package/dist/core/middleware/built-in/cookie/middleware.d.ts +17 -0
  86. package/dist/core/middleware/built-in/cookie/middleware.js +36 -0
  87. package/dist/core/middleware/built-in/cookie/middleware.js.map +1 -0
  88. package/dist/core/middleware/built-in/cors/core.d.ts +23 -0
  89. package/dist/core/middleware/built-in/cors/core.js +51 -0
  90. package/dist/core/middleware/built-in/cors/core.js.map +1 -0
  91. package/dist/core/middleware/built-in/cors/hook.d.ts +17 -0
  92. package/dist/core/middleware/built-in/cors/hook.js +37 -0
  93. package/dist/core/middleware/built-in/cors/hook.js.map +1 -0
  94. package/dist/core/middleware/built-in/cors/index.d.ts +3 -0
  95. package/dist/core/middleware/built-in/cors/index.js +9 -0
  96. package/dist/core/middleware/built-in/cors/index.js.map +1 -0
  97. package/dist/core/middleware/built-in/cors/middleware.d.ts +16 -0
  98. package/dist/core/middleware/built-in/cors/middleware.js +22 -0
  99. package/dist/core/middleware/built-in/cors/middleware.js.map +1 -0
  100. package/dist/core/middleware/built-in/csp/core.d.ts +45 -0
  101. package/dist/core/middleware/built-in/csp/core.js +88 -0
  102. package/dist/core/middleware/built-in/csp/core.js.map +1 -0
  103. package/dist/core/middleware/built-in/csp/hook.d.ts +22 -0
  104. package/dist/core/middleware/built-in/csp/hook.js +47 -0
  105. package/dist/core/middleware/built-in/csp/hook.js.map +1 -0
  106. package/dist/core/middleware/built-in/csp/index.d.ts +3 -0
  107. package/dist/core/middleware/built-in/csp/index.js +9 -0
  108. package/dist/core/middleware/built-in/csp/index.js.map +1 -0
  109. package/dist/core/middleware/built-in/csp/middleware.d.ts +19 -0
  110. package/dist/core/middleware/built-in/csp/middleware.js +29 -0
  111. package/dist/core/middleware/built-in/csp/middleware.js.map +1 -0
  112. package/dist/core/middleware/built-in/csrf/core.d.ts +28 -0
  113. package/dist/core/middleware/built-in/csrf/core.js +69 -0
  114. package/dist/core/middleware/built-in/csrf/core.js.map +1 -0
  115. package/dist/core/middleware/built-in/csrf/hook.d.ts +17 -0
  116. package/dist/core/middleware/built-in/csrf/hook.js +45 -0
  117. package/dist/core/middleware/built-in/csrf/hook.js.map +1 -0
  118. package/dist/core/middleware/built-in/csrf/index.d.ts +3 -0
  119. package/dist/core/middleware/built-in/csrf/index.js +9 -0
  120. package/dist/core/middleware/built-in/csrf/index.js.map +1 -0
  121. package/dist/core/middleware/built-in/csrf/middleware.d.ts +16 -0
  122. package/dist/core/middleware/built-in/csrf/middleware.js +34 -0
  123. package/dist/core/middleware/built-in/csrf/middleware.js.map +1 -0
  124. package/dist/core/middleware/built-in/error-tracker/index.d.ts +1 -0
  125. package/dist/core/middleware/built-in/error-tracker/index.js +4 -0
  126. package/dist/core/middleware/built-in/error-tracker/index.js.map +1 -0
  127. package/dist/core/middleware/built-in/error-tracker/middleware.d.ts +12 -0
  128. package/dist/core/middleware/built-in/{error-tracker.js → error-tracker/middleware.js} +14 -3
  129. package/dist/core/middleware/built-in/error-tracker/middleware.js.map +1 -0
  130. package/dist/core/middleware/built-in/index.d.ts +25 -59
  131. package/dist/core/middleware/built-in/index.js +31 -31
  132. package/dist/core/middleware/built-in/index.js.map +1 -1
  133. package/dist/core/middleware/built-in/performance-monitor/index.d.ts +1 -0
  134. package/dist/core/middleware/built-in/performance-monitor/index.js +4 -0
  135. package/dist/core/middleware/built-in/performance-monitor/index.js.map +1 -0
  136. package/dist/core/middleware/built-in/performance-monitor/middleware.d.ts +12 -0
  137. package/dist/core/middleware/built-in/{performance-monitor.js → performance-monitor/middleware.js} +14 -3
  138. package/dist/core/middleware/built-in/performance-monitor/middleware.js.map +1 -0
  139. package/dist/core/middleware/built-in/rate-limit/core.d.ts +33 -0
  140. package/dist/core/middleware/built-in/rate-limit/core.js +86 -0
  141. package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -0
  142. package/dist/core/middleware/built-in/rate-limit/hook.d.ts +20 -0
  143. package/dist/core/middleware/built-in/{rate-limit.js → rate-limit/hook.js} +22 -16
  144. package/dist/core/middleware/built-in/rate-limit/hook.js.map +1 -0
  145. package/dist/core/middleware/built-in/rate-limit/index.d.ts +3 -0
  146. package/dist/core/middleware/built-in/rate-limit/index.js +9 -0
  147. package/dist/core/middleware/built-in/rate-limit/index.js.map +1 -0
  148. package/dist/core/middleware/built-in/rate-limit/middleware.d.ts +16 -0
  149. package/dist/core/middleware/built-in/rate-limit/middleware.js +35 -0
  150. package/dist/core/middleware/built-in/rate-limit/middleware.js.map +1 -0
  151. package/dist/core/middleware/built-in/request-logger/index.d.ts +1 -0
  152. package/dist/core/middleware/built-in/request-logger/index.js +4 -0
  153. package/dist/core/middleware/built-in/request-logger/index.js.map +1 -0
  154. package/dist/core/middleware/built-in/request-logger/middleware.d.ts +12 -0
  155. package/dist/core/middleware/built-in/{request-logger.js → request-logger/middleware.js} +14 -3
  156. package/dist/core/middleware/built-in/request-logger/middleware.js.map +1 -0
  157. package/dist/core/middleware/built-in/session/core.d.ts +73 -0
  158. package/dist/core/middleware/built-in/session/core.js +227 -0
  159. package/dist/core/middleware/built-in/session/core.js.map +1 -0
  160. package/dist/core/middleware/built-in/session/hook.d.ts +17 -0
  161. package/dist/core/middleware/built-in/session/hook.js +53 -0
  162. package/dist/core/middleware/built-in/session/hook.js.map +1 -0
  163. package/dist/core/middleware/built-in/session/index.d.ts +3 -0
  164. package/dist/core/middleware/built-in/session/index.js +9 -0
  165. package/dist/core/middleware/built-in/session/index.js.map +1 -0
  166. package/dist/core/middleware/built-in/session/middleware.d.ts +17 -0
  167. package/dist/core/middleware/built-in/session/middleware.js +38 -0
  168. package/dist/core/middleware/built-in/session/middleware.js.map +1 -0
  169. package/dist/core/middleware/built-in/sse/core.d.ts +44 -0
  170. package/dist/core/middleware/built-in/sse/core.js +117 -0
  171. package/dist/core/middleware/built-in/sse/core.js.map +1 -0
  172. package/dist/core/middleware/built-in/sse/hook.d.ts +18 -0
  173. package/dist/core/middleware/built-in/sse/hook.js +60 -0
  174. package/dist/core/middleware/built-in/sse/hook.js.map +1 -0
  175. package/dist/core/middleware/built-in/sse/index.d.ts +3 -0
  176. package/dist/core/middleware/built-in/sse/index.js +9 -0
  177. package/dist/core/middleware/built-in/sse/index.js.map +1 -0
  178. package/dist/core/middleware/built-in/sse/middleware.d.ts +18 -0
  179. package/dist/core/middleware/built-in/sse/middleware.js +43 -0
  180. package/dist/core/middleware/built-in/sse/middleware.js.map +1 -0
  181. package/dist/core/middleware/built-in/validation/core.d.ts +23 -0
  182. package/dist/core/middleware/built-in/validation/core.js +93 -0
  183. package/dist/core/middleware/built-in/validation/core.js.map +1 -0
  184. package/dist/core/middleware/built-in/validation/hook.d.ts +13 -0
  185. package/dist/core/middleware/built-in/{validation.js → validation/hook.js} +14 -3
  186. package/dist/core/middleware/built-in/validation/hook.js.map +1 -0
  187. package/dist/core/middleware/built-in/validation/index.d.ts +3 -0
  188. package/dist/core/middleware/built-in/validation/index.js +9 -0
  189. package/dist/core/middleware/built-in/validation/index.js.map +1 -0
  190. package/dist/core/middleware/built-in/validation/middleware.d.ts +16 -0
  191. package/dist/core/middleware/built-in/validation/middleware.js +27 -0
  192. package/dist/core/middleware/built-in/validation/middleware.js.map +1 -0
  193. package/dist/core/middleware/index.js +6 -0
  194. package/dist/core/middleware/index.js.map +1 -1
  195. package/dist/core/routing/unified-router.d.ts +4 -20
  196. package/dist/core/routing/unified-router.js +61 -106
  197. package/dist/core/routing/unified-router.js.map +1 -1
  198. package/dist/index.d.ts +3 -2
  199. package/dist/index.js +3 -2
  200. package/dist/index.js.map +1 -1
  201. package/dist/moro.js +12 -18
  202. package/dist/moro.js.map +1 -1
  203. package/dist/types/hooks.d.ts +3 -0
  204. package/package.json +2 -6
  205. package/dist/core/middleware/built-in/adapters/cache/file.js.map +0 -1
  206. package/dist/core/middleware/built-in/adapters/cache/index.js.map +0 -1
  207. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +0 -1
  208. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +0 -1
  209. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +0 -1
  210. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +0 -1
  211. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +0 -1
  212. package/dist/core/middleware/built-in/adapters/cdn/index.js.map +0 -1
  213. package/dist/core/middleware/built-in/adapters/index.js.map +0 -1
  214. package/dist/core/middleware/built-in/auth-helpers.js.map +0 -1
  215. package/dist/core/middleware/built-in/auth-providers.js.map +0 -1
  216. package/dist/core/middleware/built-in/auth.d.ts +0 -30
  217. package/dist/core/middleware/built-in/auth.js +0 -348
  218. package/dist/core/middleware/built-in/auth.js.map +0 -1
  219. package/dist/core/middleware/built-in/cache.d.ts +0 -3
  220. package/dist/core/middleware/built-in/cache.js.map +0 -1
  221. package/dist/core/middleware/built-in/cdn.d.ts +0 -3
  222. package/dist/core/middleware/built-in/cdn.js +0 -109
  223. package/dist/core/middleware/built-in/cdn.js.map +0 -1
  224. package/dist/core/middleware/built-in/cookie.d.ts +0 -14
  225. package/dist/core/middleware/built-in/cookie.js +0 -64
  226. package/dist/core/middleware/built-in/cookie.js.map +0 -1
  227. package/dist/core/middleware/built-in/cors.d.ts +0 -2
  228. package/dist/core/middleware/built-in/cors.js +0 -25
  229. package/dist/core/middleware/built-in/cors.js.map +0 -1
  230. package/dist/core/middleware/built-in/csp.d.ts +0 -22
  231. package/dist/core/middleware/built-in/csp.js +0 -68
  232. package/dist/core/middleware/built-in/csp.js.map +0 -1
  233. package/dist/core/middleware/built-in/csrf.d.ts +0 -9
  234. package/dist/core/middleware/built-in/csrf.js +0 -60
  235. package/dist/core/middleware/built-in/csrf.js.map +0 -1
  236. package/dist/core/middleware/built-in/error-tracker.d.ts +0 -1
  237. package/dist/core/middleware/built-in/error-tracker.js.map +0 -1
  238. package/dist/core/middleware/built-in/jwt-helpers.js.map +0 -1
  239. package/dist/core/middleware/built-in/performance-monitor.d.ts +0 -1
  240. package/dist/core/middleware/built-in/performance-monitor.js.map +0 -1
  241. package/dist/core/middleware/built-in/rate-limit.d.ts +0 -6
  242. package/dist/core/middleware/built-in/rate-limit.js.map +0 -1
  243. package/dist/core/middleware/built-in/request-logger.d.ts +0 -1
  244. package/dist/core/middleware/built-in/request-logger.js.map +0 -1
  245. package/dist/core/middleware/built-in/session.d.ts +0 -41
  246. package/dist/core/middleware/built-in/session.js +0 -205
  247. package/dist/core/middleware/built-in/session.js.map +0 -1
  248. package/dist/core/middleware/built-in/sse.d.ts +0 -6
  249. package/dist/core/middleware/built-in/sse.js +0 -69
  250. package/dist/core/middleware/built-in/sse.js.map +0 -1
  251. package/dist/core/middleware/built-in/validation.d.ts +0 -2
  252. package/dist/core/middleware/built-in/validation.js.map +0 -1
  253. package/jest.config.mjs +0 -41
  254. package/src/core/auth/README.md +0 -339
  255. package/src/core/auth/morojs-adapter.ts +0 -415
  256. package/src/core/config/config-manager.ts +0 -133
  257. package/src/core/config/config-sources.ts +0 -600
  258. package/src/core/config/config-validator.ts +0 -1116
  259. package/src/core/config/file-loader.ts +0 -150
  260. package/src/core/config/index.ts +0 -109
  261. package/src/core/config/schema.ts +0 -164
  262. package/src/core/config/utils.ts +0 -244
  263. package/src/core/database/README.md +0 -238
  264. package/src/core/database/adapters/drizzle.ts +0 -415
  265. package/src/core/database/adapters/index.ts +0 -42
  266. package/src/core/database/adapters/mongodb.ts +0 -317
  267. package/src/core/database/adapters/mysql.ts +0 -235
  268. package/src/core/database/adapters/postgresql.ts +0 -226
  269. package/src/core/database/adapters/redis.ts +0 -379
  270. package/src/core/database/adapters/sqlite.ts +0 -263
  271. package/src/core/database/index.ts +0 -3
  272. package/src/core/docs/index.ts +0 -231
  273. package/src/core/docs/openapi-generator.ts +0 -576
  274. package/src/core/docs/schema-to-openapi.ts +0 -145
  275. package/src/core/docs/simple-docs.ts +0 -295
  276. package/src/core/docs/swagger-ui.ts +0 -354
  277. package/src/core/docs/zod-to-openapi.ts +0 -532
  278. package/src/core/events/event-bus.ts +0 -231
  279. package/src/core/events/index.ts +0 -12
  280. package/src/core/framework.ts +0 -885
  281. package/src/core/http/http-server.ts +0 -1847
  282. package/src/core/http/index.ts +0 -7
  283. package/src/core/http/uws-http-server.ts +0 -591
  284. package/src/core/logger/filters.ts +0 -153
  285. package/src/core/logger/index.ts +0 -21
  286. package/src/core/logger/logger.ts +0 -1033
  287. package/src/core/logger/outputs.ts +0 -132
  288. package/src/core/middleware/built-in/adapters/cache/file.ts +0 -104
  289. package/src/core/middleware/built-in/adapters/cache/index.ts +0 -23
  290. package/src/core/middleware/built-in/adapters/cache/memory.ts +0 -73
  291. package/src/core/middleware/built-in/adapters/cache/redis.ts +0 -114
  292. package/src/core/middleware/built-in/adapters/cdn/azure.ts +0 -60
  293. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +0 -83
  294. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +0 -94
  295. package/src/core/middleware/built-in/adapters/cdn/index.ts +0 -23
  296. package/src/core/middleware/built-in/auth-helpers.ts +0 -401
  297. package/src/core/middleware/built-in/auth-providers.ts +0 -480
  298. package/src/core/middleware/built-in/auth.ts +0 -410
  299. package/src/core/middleware/built-in/cache.ts +0 -213
  300. package/src/core/middleware/built-in/cdn.ts +0 -124
  301. package/src/core/middleware/built-in/cookie.ts +0 -85
  302. package/src/core/middleware/built-in/cors.ts +0 -38
  303. package/src/core/middleware/built-in/csp.ts +0 -101
  304. package/src/core/middleware/built-in/csrf.ts +0 -82
  305. package/src/core/middleware/built-in/error-tracker.ts +0 -16
  306. package/src/core/middleware/built-in/index.ts +0 -87
  307. package/src/core/middleware/built-in/jwt-helpers.ts +0 -243
  308. package/src/core/middleware/built-in/performance-monitor.ts +0 -25
  309. package/src/core/middleware/built-in/rate-limit.ts +0 -60
  310. package/src/core/middleware/built-in/request-logger.ts +0 -16
  311. package/src/core/middleware/built-in/session.ts +0 -287
  312. package/src/core/middleware/built-in/sse.ts +0 -88
  313. package/src/core/middleware/built-in/validation.ts +0 -33
  314. package/src/core/middleware/index.ts +0 -177
  315. package/src/core/modules/auto-discovery.ts +0 -726
  316. package/src/core/modules/index.ts +0 -3
  317. package/src/core/modules/modules.ts +0 -135
  318. package/src/core/networking/adapters/index.ts +0 -17
  319. package/src/core/networking/adapters/socketio-adapter.ts +0 -254
  320. package/src/core/networking/adapters/uws-adapter.ts +0 -619
  321. package/src/core/networking/adapters/ws-adapter.ts +0 -429
  322. package/src/core/networking/index.ts +0 -4
  323. package/src/core/networking/service-discovery.ts +0 -303
  324. package/src/core/networking/websocket-adapter.ts +0 -217
  325. package/src/core/networking/websocket-manager.ts +0 -308
  326. package/src/core/pooling/object-pool-manager.ts +0 -630
  327. package/src/core/routing/app-integration.ts +0 -164
  328. package/src/core/routing/index.ts +0 -261
  329. package/src/core/routing/path-matcher.ts +0 -222
  330. package/src/core/routing/router.ts +0 -97
  331. package/src/core/routing/unified-router.ts +0 -870
  332. package/src/core/runtime/aws-lambda-adapter.ts +0 -147
  333. package/src/core/runtime/base-adapter.ts +0 -130
  334. package/src/core/runtime/cloudflare-workers-adapter.ts +0 -152
  335. package/src/core/runtime/index.ts +0 -62
  336. package/src/core/runtime/node-adapter.ts +0 -202
  337. package/src/core/runtime/vercel-edge-adapter.ts +0 -114
  338. package/src/core/utilities/circuit-breaker.ts +0 -46
  339. package/src/core/utilities/container.ts +0 -736
  340. package/src/core/utilities/hooks.ts +0 -142
  341. package/src/core/utilities/index.ts +0 -17
  342. package/src/core/utilities/package-utils.ts +0 -59
  343. package/src/core/validation/adapters.ts +0 -147
  344. package/src/core/validation/index.ts +0 -258
  345. package/src/core/validation/schema-interface.ts +0 -100
  346. package/src/index.ts +0 -233
  347. package/src/moro.ts +0 -1728
  348. package/src/types/auth.ts +0 -440
  349. package/src/types/cache.ts +0 -38
  350. package/src/types/cdn.ts +0 -22
  351. package/src/types/config.ts +0 -229
  352. package/src/types/core.ts +0 -58
  353. package/src/types/database.ts +0 -32
  354. package/src/types/discovery.ts +0 -7
  355. package/src/types/events.ts +0 -82
  356. package/src/types/hooks.ts +0 -47
  357. package/src/types/http.ts +0 -89
  358. package/src/types/logger.ts +0 -102
  359. package/src/types/module.ts +0 -99
  360. package/src/types/runtime.ts +0 -76
  361. package/src/types/session.ts +0 -89
  362. package/tsconfig.json +0 -23
  363. /package/dist/core/middleware/built-in/{auth-helpers.d.ts → auth/helpers.d.ts} +0 -0
  364. /package/dist/core/middleware/built-in/{jwt-helpers.d.ts → auth/jwt-helpers.d.ts} +0 -0
  365. /package/dist/core/middleware/built-in/{adapters → cache/adapters}/cache/index.js +0 -0
  366. /package/dist/core/middleware/built-in/{adapters → cdn/adapters}/cdn/index.js +0 -0
@@ -1,147 +0,0 @@
1
- // AWS Lambda runtime adapter
2
- import { BaseRuntimeAdapter } from './base-adapter.js';
3
- import { HttpRequest, HttpResponse } from '../../types/http.js';
4
- import { RuntimeHttpResponse } from '../../types/runtime.js';
5
-
6
- export interface LambdaEvent {
7
- httpMethod: string;
8
- path: string;
9
- pathParameters?: Record<string, string> | null;
10
- queryStringParameters?: Record<string, string> | null;
11
- headers?: Record<string, string> | null;
12
- multiValueHeaders?: Record<string, string[]> | null;
13
- body?: string | null;
14
- isBase64Encoded?: boolean;
15
- requestContext?: {
16
- identity?: {
17
- sourceIp?: string;
18
- };
19
- };
20
- }
21
-
22
- export interface LambdaContext {
23
- requestId: string;
24
- functionName: string;
25
- functionVersion: string;
26
- invokedFunctionArn: string;
27
- memoryLimitInMB: string;
28
- awsRequestId: string;
29
- logGroupName: string;
30
- logStreamName: string;
31
- getRemainingTimeInMillis(): number;
32
- }
33
-
34
- export interface LambdaResponse {
35
- statusCode: number;
36
- headers?: Record<string, string>;
37
- multiValueHeaders?: Record<string, string[]>;
38
- body: string;
39
- isBase64Encoded?: boolean;
40
- }
41
-
42
- export class AWSLambdaAdapter extends BaseRuntimeAdapter {
43
- readonly type = 'aws-lambda' as const;
44
-
45
- async adaptRequest(event: LambdaEvent, context: LambdaContext): Promise<HttpRequest> {
46
- const { pathname, query } = this.parseUrl(event.path);
47
-
48
- // Merge query parameters from event
49
- const mergedQuery = {
50
- ...query,
51
- ...(event.queryStringParameters || {}),
52
- };
53
-
54
- // Parse body
55
- let body: any;
56
- if (event.body) {
57
- const contentType = event.headers?.['content-type'] || event.headers?.['Content-Type'] || '';
58
- if (event.isBase64Encoded) {
59
- body = Buffer.from(event.body, 'base64').toString();
60
- } else {
61
- body = event.body;
62
- }
63
- body = await this.parseBody(body, contentType);
64
- }
65
-
66
- const baseRequest = {
67
- method: event.httpMethod,
68
- url: event.path,
69
- path: pathname,
70
- query: mergedQuery,
71
- body,
72
- headers: event.headers || {},
73
- ip: event.requestContext?.identity?.sourceIp || 'unknown',
74
- params: event.pathParameters || {},
75
- requestId: context.awsRequestId,
76
- cookies: this.parseCookies(event.headers?.cookie || ''),
77
- files: {},
78
- } as Partial<HttpRequest>;
79
-
80
- return this.enhanceRequest(baseRequest);
81
- }
82
-
83
- async adaptResponse(moroResponse: HttpResponse | RuntimeHttpResponse): Promise<LambdaResponse> {
84
- const runtimeResponse = moroResponse as RuntimeHttpResponse;
85
-
86
- let body = runtimeResponse.body;
87
- const status = runtimeResponse.statusCode || 200;
88
- const headers = runtimeResponse.headers || {};
89
-
90
- // Convert body to string
91
- if (typeof body === 'object' && body !== null) {
92
- body = JSON.stringify(body);
93
- headers['Content-Type'] = 'application/json';
94
- } else if (body === null || body === undefined) {
95
- body = '';
96
- } else {
97
- body = String(body);
98
- }
99
-
100
- return {
101
- statusCode: status,
102
- headers,
103
- body,
104
- isBase64Encoded: false,
105
- };
106
- }
107
-
108
- createServer(handler: (req: HttpRequest, res: HttpResponse) => Promise<void>) {
109
- // Return a Lambda-compatible handler function
110
- return async (event: LambdaEvent, context: LambdaContext) => {
111
- try {
112
- const moroReq = await this.adaptRequest(event, context);
113
- const moroRes = this.createMockResponse();
114
-
115
- await handler(moroReq, moroRes as any);
116
-
117
- return await this.adaptResponse(moroRes);
118
- } catch (error) {
119
- return {
120
- statusCode: 500,
121
- headers: { 'Content-Type': 'application/json' },
122
- body: JSON.stringify({
123
- success: false,
124
- error: 'Internal server error',
125
- message: error instanceof Error ? error.message : 'Unknown error',
126
- }),
127
- };
128
- }
129
- };
130
- }
131
-
132
- // Lambda doesn't have a listen method - it's event-driven
133
- // listen method is optional in the interface
134
-
135
- private parseCookies(cookieHeader: string): Record<string, string> {
136
- const cookies: Record<string, string> = {};
137
- if (cookieHeader) {
138
- cookieHeader.split(';').forEach(cookie => {
139
- const [name, ...rest] = cookie.trim().split('=');
140
- if (name && rest.length > 0) {
141
- cookies[name] = rest.join('=');
142
- }
143
- });
144
- }
145
- return cookies;
146
- }
147
- }
@@ -1,130 +0,0 @@
1
- // Base runtime adapter with common functionality
2
- import { RuntimeAdapter, RuntimeType, RuntimeHttpResponse } from '../../types/runtime.js';
3
- import { HttpRequest, HttpResponse } from '../../types/http.js';
4
- import { randomBytes } from 'crypto';
5
-
6
- export abstract class BaseRuntimeAdapter implements RuntimeAdapter {
7
- abstract readonly type: RuntimeType;
8
-
9
- abstract adaptRequest(runtimeRequest: any, ...args: any[]): Promise<HttpRequest>;
10
- abstract adaptResponse(
11
- moroResponse: HttpResponse | RuntimeHttpResponse,
12
- runtimeRequest: any
13
- ): Promise<any>;
14
- abstract createServer(handler: (req: HttpRequest, res: HttpResponse) => Promise<void>): any;
15
-
16
- // Generate UUID without external dependency
17
- protected generateUUID(): string {
18
- return randomBytes(16)
19
- .toString('hex')
20
- .replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, '$1-$2-$3-$4-$5');
21
- }
22
-
23
- // Common request enhancement
24
- protected enhanceRequest(baseRequest: Partial<HttpRequest>): HttpRequest {
25
- const request = baseRequest as HttpRequest;
26
-
27
- // Add common properties
28
- request.requestId = request.requestId || this.generateUUID();
29
- request.ip = request.ip || 'unknown';
30
- request.params = request.params || {};
31
- request.query = request.query || {};
32
- request.cookies = request.cookies || {};
33
- request.files = request.files || {};
34
-
35
- return request;
36
- }
37
-
38
- // Common response enhancement
39
- protected createMockResponse(): RuntimeHttpResponse {
40
- const response: RuntimeHttpResponse = {
41
- statusCode: 200,
42
- headers: {},
43
- body: null,
44
- headersSent: false,
45
-
46
- status: function (code: number) {
47
- this.statusCode = code;
48
- return this;
49
- },
50
-
51
- json: function (data: any) {
52
- this.headers['Content-Type'] = 'application/json';
53
- this.body = JSON.stringify(data);
54
- this.headersSent = true;
55
- },
56
-
57
- send: function (data: string | Buffer) {
58
- this.body = data;
59
- this.headersSent = true;
60
- },
61
-
62
- cookie: function (name: string, value: string, options?: any) {
63
- // Simple cookie implementation
64
- const cookieString = `${name}=${value}`;
65
- this.headers['Set-Cookie'] = cookieString;
66
- return this;
67
- },
68
-
69
- clearCookie: function (name: string, options?: any) {
70
- this.headers['Set-Cookie'] = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`;
71
- return this;
72
- },
73
-
74
- redirect: function (url: string, status?: number) {
75
- this.statusCode = status || 302;
76
- this.headers['Location'] = url;
77
- this.headersSent = true;
78
- },
79
-
80
- sendFile: async function (filePath: string) {
81
- throw new Error('sendFile not implemented in this runtime');
82
- },
83
- };
84
-
85
- return response;
86
- }
87
-
88
- // Parse URL and query parameters
89
- protected parseUrl(url: string): {
90
- pathname: string;
91
- query: Record<string, string>;
92
- } {
93
- try {
94
- const urlObj = new URL(url, 'http://localhost');
95
- const query: Record<string, string> = {};
96
-
97
- urlObj.searchParams.forEach((value, key) => {
98
- query[key] = value;
99
- });
100
-
101
- return {
102
- pathname: urlObj.pathname,
103
- query,
104
- };
105
- } catch {
106
- return {
107
- pathname: url,
108
- query: {},
109
- };
110
- }
111
- }
112
-
113
- // Parse body based on content type
114
- protected async parseBody(body: any, contentType?: string): Promise<any> {
115
- if (!body) return undefined;
116
-
117
- if (typeof body === 'string') {
118
- if (contentType?.includes('application/json')) {
119
- try {
120
- return JSON.parse(body);
121
- } catch {
122
- return body;
123
- }
124
- }
125
- return body;
126
- }
127
-
128
- return body;
129
- }
130
- }
@@ -1,152 +0,0 @@
1
- // Cloudflare Workers runtime adapter
2
- import { BaseRuntimeAdapter } from './base-adapter.js';
3
- import { HttpRequest, HttpResponse } from '../../types/http.js';
4
- import { RuntimeHttpResponse } from '../../types/runtime.js';
5
-
6
- export interface WorkersEnv {
7
- [key: string]: any;
8
- }
9
-
10
- export interface WorkersContext {
11
- waitUntil(promise: Promise<any>): void;
12
- passThroughOnException(): void;
13
- }
14
-
15
- export class CloudflareWorkersAdapter extends BaseRuntimeAdapter {
16
- readonly type = 'cloudflare-workers' as const;
17
-
18
- async adaptRequest(request: Request, env: WorkersEnv, ctx: WorkersContext): Promise<HttpRequest> {
19
- const { pathname, query } = this.parseUrl(request.url);
20
-
21
- // Parse body for POST/PUT/PATCH requests
22
- let body: any;
23
- if (['POST', 'PUT', 'PATCH'].includes(request.method)) {
24
- const contentType = request.headers.get('content-type') || '';
25
- if (contentType.includes('application/json')) {
26
- try {
27
- body = await request.json();
28
- } catch {
29
- body = await request.text();
30
- }
31
- } else if (contentType.includes('application/x-www-form-urlencoded')) {
32
- body = await request.formData();
33
- // Convert FormData to object
34
- const formObject: Record<string, any> = {};
35
- body.forEach((value: any, key: string) => {
36
- formObject[key] = value;
37
- });
38
- body = formObject;
39
- } else {
40
- body = await request.text();
41
- }
42
- }
43
-
44
- // Convert Headers to plain object
45
- const headers: Record<string, string> = {};
46
- request.headers.forEach((value, key) => {
47
- headers[key] = value;
48
- });
49
-
50
- const baseRequest = {
51
- method: request.method,
52
- url: request.url,
53
- path: pathname,
54
- query,
55
- body,
56
- headers,
57
- ip: this.getClientIP(headers, request),
58
- params: {},
59
- requestId: '',
60
- cookies: this.parseCookies(headers.cookie || ''),
61
- files: {},
62
- // Add Workers-specific context
63
- env,
64
- ctx,
65
- } as Partial<HttpRequest>;
66
-
67
- return this.enhanceRequest(baseRequest);
68
- }
69
-
70
- async adaptResponse(moroResponse: HttpResponse | RuntimeHttpResponse): Promise<Response> {
71
- const runtimeResponse = moroResponse as RuntimeHttpResponse;
72
-
73
- // Handle different response states
74
- let body = runtimeResponse.body;
75
- let status = runtimeResponse.statusCode || 200;
76
- const headers = runtimeResponse.headers || {};
77
-
78
- // If it's a real HttpResponse, we need to extract the data differently
79
- if ('statusCode' in moroResponse && typeof moroResponse.statusCode === 'number') {
80
- status = moroResponse.statusCode;
81
- }
82
-
83
- // Convert headers to Headers object
84
- const responseHeaders = new Headers();
85
- Object.entries(headers).forEach(([key, value]) => {
86
- responseHeaders.set(key, value);
87
- });
88
-
89
- // Handle different body types
90
- if (typeof body === 'object' && body !== null) {
91
- body = JSON.stringify(body);
92
- responseHeaders.set('Content-Type', 'application/json');
93
- }
94
-
95
- return new Response(body, {
96
- status,
97
- headers: responseHeaders,
98
- });
99
- }
100
-
101
- createServer(handler: (req: HttpRequest, res: HttpResponse) => Promise<void>) {
102
- // Return a Cloudflare Workers-compatible handler function
103
- return async (request: Request, env: WorkersEnv, ctx: WorkersContext) => {
104
- try {
105
- const moroReq = await this.adaptRequest(request, env, ctx);
106
- const moroRes = this.createMockResponse();
107
-
108
- await handler(moroReq, moroRes as any);
109
-
110
- return await this.adaptResponse(moroRes);
111
- } catch (error) {
112
- return new Response(
113
- JSON.stringify({
114
- success: false,
115
- error: 'Internal server error',
116
- message: error instanceof Error ? error.message : 'Unknown error',
117
- }),
118
- {
119
- status: 500,
120
- headers: { 'Content-Type': 'application/json' },
121
- }
122
- );
123
- }
124
- };
125
- }
126
-
127
- // Cloudflare Workers doesn't have a listen method - it's handled by the platform
128
- // listen method is optional in the interface
129
-
130
- private getClientIP(headers: Record<string, string>, request: Request): string {
131
- // Cloudflare provides the real IP in CF-Connecting-IP header
132
- return (
133
- headers['cf-connecting-ip'] ||
134
- headers['x-forwarded-for']?.split(',')[0]?.trim() ||
135
- headers['x-real-ip'] ||
136
- 'unknown'
137
- );
138
- }
139
-
140
- private parseCookies(cookieHeader: string): Record<string, string> {
141
- const cookies: Record<string, string> = {};
142
- if (cookieHeader) {
143
- cookieHeader.split(';').forEach(cookie => {
144
- const [name, ...rest] = cookie.trim().split('=');
145
- if (name && rest.length > 0) {
146
- cookies[name] = rest.join('=');
147
- }
148
- });
149
- }
150
- return cookies;
151
- }
152
- }
@@ -1,62 +0,0 @@
1
- // Runtime adapters export
2
- export { BaseRuntimeAdapter } from './base-adapter.js';
3
- export { NodeRuntimeAdapter } from './node-adapter.js';
4
- export { VercelEdgeAdapter } from './vercel-edge-adapter.js';
5
- export { AWSLambdaAdapter } from './aws-lambda-adapter.js';
6
- export { CloudflareWorkersAdapter } from './cloudflare-workers-adapter.js';
7
-
8
- // Re-export types
9
- export type {
10
- RuntimeType,
11
- RuntimeAdapter,
12
- RuntimeConfig,
13
- RuntimeMoroOptions,
14
- RuntimeHttpResponse,
15
- } from '../../types/runtime.js';
16
-
17
- // Re-export specific runtime types
18
- export type { LambdaEvent, LambdaContext, LambdaResponse } from './aws-lambda-adapter.js';
19
- export type { WorkersEnv, WorkersContext } from './cloudflare-workers-adapter.js';
20
-
21
- // Runtime factory functions
22
- import { NodeRuntimeAdapter } from './node-adapter.js';
23
- import { VercelEdgeAdapter } from './vercel-edge-adapter.js';
24
- import { AWSLambdaAdapter } from './aws-lambda-adapter.js';
25
- import { CloudflareWorkersAdapter } from './cloudflare-workers-adapter.js';
26
- import { RuntimeType, RuntimeAdapter } from '../../types/runtime.js';
27
-
28
- export function createRuntimeAdapter(type: RuntimeType): RuntimeAdapter {
29
- switch (type) {
30
- case 'node':
31
- return new NodeRuntimeAdapter();
32
- case 'vercel-edge':
33
- return new VercelEdgeAdapter();
34
- case 'aws-lambda':
35
- return new AWSLambdaAdapter();
36
- case 'cloudflare-workers':
37
- return new CloudflareWorkersAdapter();
38
- default:
39
- throw new Error(`Unsupported runtime type: ${type}`);
40
- }
41
- }
42
-
43
- // Convenience functions for creating runtime-specific handlers
44
- export function createNodeHandler(handler: (req: any, res: any) => Promise<void>) {
45
- const adapter = new NodeRuntimeAdapter();
46
- return adapter.createServer(handler);
47
- }
48
-
49
- export function createEdgeHandler(handler: (req: any, res: any) => Promise<void>) {
50
- const adapter = new VercelEdgeAdapter();
51
- return adapter.createServer(handler);
52
- }
53
-
54
- export function createLambdaHandler(handler: (req: any, res: any) => Promise<void>) {
55
- const adapter = new AWSLambdaAdapter();
56
- return adapter.createServer(handler);
57
- }
58
-
59
- export function createWorkerHandler(handler: (req: any, res: any) => Promise<void>) {
60
- const adapter = new CloudflareWorkersAdapter();
61
- return adapter.createServer(handler);
62
- }
@@ -1,202 +0,0 @@
1
- // Node.js runtime adapter
2
- import { IncomingMessage, ServerResponse } from 'http';
3
- import { BaseRuntimeAdapter } from './base-adapter.js';
4
- import { HttpRequest, HttpResponse } from '../../types/http.js';
5
- import { RuntimeHttpResponse } from '../../types/runtime.js';
6
- import { MoroHttpServer } from '../http/http-server.js';
7
-
8
- export class NodeRuntimeAdapter extends BaseRuntimeAdapter {
9
- readonly type = 'node' as const;
10
-
11
- async adaptRequest(req: IncomingMessage): Promise<HttpRequest> {
12
- const { pathname, query } = this.parseUrl(req.url || '/');
13
-
14
- // Parse body for POST/PUT/PATCH requests
15
- let body: any;
16
- if (['POST', 'PUT', 'PATCH'].includes(req.method!)) {
17
- body = await this.parseRequestBody(req);
18
- }
19
-
20
- const baseRequest = {
21
- // Copy IncomingMessage properties we need
22
- method: req.method!,
23
- url: req.url!,
24
- headers: req.headers as Record<string, string>,
25
- httpVersion: req.httpVersion,
26
- httpVersionMajor: req.httpVersionMajor,
27
- httpVersionMinor: req.httpVersionMinor,
28
- socket: req.socket,
29
-
30
- // Add MoroJS-specific properties
31
- path: pathname,
32
- query,
33
- body,
34
- ip: this.getClientIP(req),
35
- params: {},
36
- requestId: '',
37
- cookies: {},
38
- files: {},
39
- } as Partial<HttpRequest>;
40
-
41
- return this.enhanceRequest(baseRequest);
42
- }
43
-
44
- async adaptResponse(
45
- moroResponse: HttpResponse | RuntimeHttpResponse,
46
- req: IncomingMessage
47
- ): Promise<ServerResponse> {
48
- // For Node.js, we typically work with the actual ServerResponse
49
- // This method is mainly for converting mock responses back to real ones
50
- return moroResponse as any;
51
- }
52
-
53
- createServer(handler: (req: HttpRequest, res: HttpResponse) => Promise<void>): MoroHttpServer {
54
- const httpServer = new MoroHttpServer();
55
-
56
- // Replace the default request handler with our runtime-aware handler
57
- const originalServer = httpServer.getServer();
58
- originalServer.removeAllListeners('request');
59
-
60
- originalServer.on('request', async (req: IncomingMessage, res: ServerResponse) => {
61
- try {
62
- const moroReq = await this.adaptRequest(req);
63
- const moroRes = this.enhanceResponse(res);
64
-
65
- await handler(moroReq, moroRes);
66
- } catch (error) {
67
- if (!res.headersSent) {
68
- res.statusCode = 500;
69
- res.setHeader('Content-Type', 'application/json');
70
- res.end(
71
- JSON.stringify({
72
- success: false,
73
- error: 'Internal server error',
74
- message: error instanceof Error ? error.message : 'Unknown error',
75
- })
76
- );
77
- }
78
- }
79
- });
80
-
81
- return httpServer;
82
- }
83
-
84
- listen(server: MoroHttpServer, port: number, host?: string, callback?: () => void): void {
85
- server.listen(port, host as any, callback);
86
- }
87
-
88
- // Helper methods
89
- private async parseRequestBody(req: IncomingMessage): Promise<any> {
90
- return new Promise((resolve, reject) => {
91
- let body = '';
92
- req.on('data', chunk => {
93
- body += chunk.toString();
94
- });
95
- req.on('end', () => {
96
- try {
97
- const contentType = req.headers['content-type'] || '';
98
- resolve(this.parseBody(body, contentType));
99
- } catch (error) {
100
- reject(error);
101
- }
102
- });
103
- req.on('error', reject);
104
- });
105
- }
106
-
107
- private getClientIP(req: IncomingMessage): string {
108
- const forwarded = req.headers['x-forwarded-for'] as string;
109
- if (forwarded) {
110
- return forwarded.split(',')[0].trim();
111
- }
112
- return req.socket.remoteAddress || 'unknown';
113
- }
114
-
115
- private enhanceResponse(res: ServerResponse): HttpResponse {
116
- const enhanced = res as any;
117
-
118
- // Add MoroJS response methods if they don't exist
119
- if (!enhanced.json) {
120
- enhanced.json = function (data: any) {
121
- this.setHeader('Content-Type', 'application/json');
122
- this.end(JSON.stringify(data));
123
- };
124
- }
125
-
126
- if (!enhanced.status) {
127
- enhanced.status = function (code: number) {
128
- this.statusCode = code;
129
- return this;
130
- };
131
- }
132
-
133
- if (!enhanced.send) {
134
- enhanced.send = function (data: string | Buffer) {
135
- this.end(data);
136
- };
137
- }
138
-
139
- if (!enhanced.cookie) {
140
- enhanced.cookie = function (name: string, value: string, options?: any) {
141
- if (!this.headersSent) {
142
- const cookieString = `${name}=${value}`;
143
- this.setHeader('Set-Cookie', cookieString);
144
- }
145
- return this;
146
- };
147
- }
148
-
149
- if (!enhanced.clearCookie) {
150
- enhanced.clearCookie = function (name: string, options?: any) {
151
- if (!this.headersSent) {
152
- this.setHeader('Set-Cookie', `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT`);
153
- }
154
- return this;
155
- };
156
- }
157
-
158
- if (!enhanced.redirect) {
159
- enhanced.redirect = function (url: string, status?: number) {
160
- if (!this.headersSent) {
161
- this.statusCode = status || 302;
162
- this.setHeader('Location', url);
163
- this.end();
164
- }
165
- };
166
- }
167
-
168
- if (!enhanced.sendFile) {
169
- enhanced.sendFile = async function (filePath: string) {
170
- const fs = await import('fs');
171
- const path = await import('path');
172
-
173
- try {
174
- const data = await fs.promises.readFile(filePath);
175
- const ext = path.extname(filePath);
176
-
177
- // Basic content type detection
178
- const contentTypes: Record<string, string> = {
179
- '.html': 'text/html',
180
- '.js': 'application/javascript',
181
- '.css': 'text/css',
182
- '.json': 'application/json',
183
- '.png': 'image/png',
184
- '.jpg': 'image/jpeg',
185
- '.jpeg': 'image/jpeg',
186
- '.gif': 'image/gif',
187
- '.svg': 'image/svg+xml',
188
- };
189
-
190
- const contentType = contentTypes[ext] || 'application/octet-stream';
191
- this.setHeader('Content-Type', contentType);
192
- this.end(data);
193
- } catch (error) {
194
- this.statusCode = 404;
195
- this.end('File not found');
196
- }
197
- };
198
- }
199
-
200
- return enhanced;
201
- }
202
- }