@morojs/moro 1.0.0 → 1.0.1

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 (284) hide show
  1. package/README.md +1 -1
  2. package/dist/core/config/index.d.ts +5 -5
  3. package/dist/core/config/index.js +1 -1
  4. package/dist/core/config/index.js.map +1 -1
  5. package/dist/core/config/loader.d.ts +1 -1
  6. package/dist/core/config/loader.js +58 -82
  7. package/dist/core/config/loader.js.map +1 -1
  8. package/dist/core/config/schema.d.ts +1 -1
  9. package/dist/core/config/schema.js +52 -111
  10. package/dist/core/config/schema.js.map +1 -1
  11. package/dist/core/config/utils.d.ts +2 -2
  12. package/dist/core/config/utils.js +18 -18
  13. package/dist/core/config/utils.js.map +1 -1
  14. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  15. package/dist/core/database/adapters/drizzle.js +39 -55
  16. package/dist/core/database/adapters/drizzle.js.map +1 -1
  17. package/dist/core/database/adapters/index.d.ts +7 -7
  18. package/dist/core/database/adapters/index.js +11 -11
  19. package/dist/core/database/adapters/index.js.map +1 -1
  20. package/dist/core/database/adapters/mongodb.d.ts +1 -1
  21. package/dist/core/database/adapters/mongodb.js +19 -23
  22. package/dist/core/database/adapters/mongodb.js.map +1 -1
  23. package/dist/core/database/adapters/mysql.d.ts +1 -1
  24. package/dist/core/database/adapters/mysql.js +31 -27
  25. package/dist/core/database/adapters/mysql.js.map +1 -1
  26. package/dist/core/database/adapters/postgresql.d.ts +1 -1
  27. package/dist/core/database/adapters/postgresql.js +27 -35
  28. package/dist/core/database/adapters/postgresql.js.map +1 -1
  29. package/dist/core/database/adapters/redis.d.ts +1 -1
  30. package/dist/core/database/adapters/redis.js +24 -24
  31. package/dist/core/database/adapters/redis.js.map +1 -1
  32. package/dist/core/database/adapters/sqlite.d.ts +1 -1
  33. package/dist/core/database/adapters/sqlite.js +36 -36
  34. package/dist/core/database/adapters/sqlite.js.map +1 -1
  35. package/dist/core/database/index.d.ts +2 -2
  36. package/dist/core/docs/index.d.ts +7 -7
  37. package/dist/core/docs/index.js +13 -15
  38. package/dist/core/docs/index.js.map +1 -1
  39. package/dist/core/docs/openapi-generator.d.ts +5 -5
  40. package/dist/core/docs/openapi-generator.js +93 -94
  41. package/dist/core/docs/openapi-generator.js.map +1 -1
  42. package/dist/core/docs/simple-docs.d.ts +1 -1
  43. package/dist/core/docs/simple-docs.js +25 -28
  44. package/dist/core/docs/simple-docs.js.map +1 -1
  45. package/dist/core/docs/swagger-ui.d.ts +2 -2
  46. package/dist/core/docs/swagger-ui.js +46 -51
  47. package/dist/core/docs/swagger-ui.js.map +1 -1
  48. package/dist/core/docs/zod-to-openapi.d.ts +1 -1
  49. package/dist/core/docs/zod-to-openapi.js +115 -125
  50. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  51. package/dist/core/events/event-bus.d.ts +1 -1
  52. package/dist/core/events/event-bus.js +15 -21
  53. package/dist/core/events/event-bus.js.map +1 -1
  54. package/dist/core/events/index.d.ts +2 -2
  55. package/dist/core/framework.d.ts +5 -5
  56. package/dist/core/framework.js +55 -60
  57. package/dist/core/framework.js.map +1 -1
  58. package/dist/core/http/http-server.d.ts +2 -2
  59. package/dist/core/http/http-server.js +228 -261
  60. package/dist/core/http/http-server.js.map +1 -1
  61. package/dist/core/http/index.d.ts +3 -3
  62. package/dist/core/http/router.d.ts +1 -1
  63. package/dist/core/http/router.js +15 -17
  64. package/dist/core/http/router.js.map +1 -1
  65. package/dist/core/logger/filters.d.ts +1 -1
  66. package/dist/core/logger/filters.js +16 -16
  67. package/dist/core/logger/filters.js.map +1 -1
  68. package/dist/core/logger/index.d.ts +3 -3
  69. package/dist/core/logger/logger.d.ts +1 -1
  70. package/dist/core/logger/logger.js +48 -59
  71. package/dist/core/logger/logger.js.map +1 -1
  72. package/dist/core/logger/outputs.d.ts +4 -4
  73. package/dist/core/logger/outputs.js +16 -20
  74. package/dist/core/logger/outputs.js.map +1 -1
  75. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  76. package/dist/core/middleware/built-in/adapters/cache/file.js +19 -19
  77. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  78. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  79. package/dist/core/middleware/built-in/adapters/cache/index.js +3 -3
  80. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  81. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  82. package/dist/core/middleware/built-in/adapters/cache/memory.js +5 -5
  83. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  84. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +1 -1
  85. package/dist/core/middleware/built-in/adapters/cache/redis.js +18 -18
  86. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  87. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  88. package/dist/core/middleware/built-in/adapters/cdn/azure.js +8 -8
  89. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  90. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  91. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +14 -14
  92. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  93. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +1 -1
  94. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +13 -15
  95. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  96. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  97. package/dist/core/middleware/built-in/adapters/cdn/index.js +3 -3
  98. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  99. package/dist/core/middleware/built-in/auth.d.ts +1 -1
  100. package/dist/core/middleware/built-in/auth.js +14 -14
  101. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  102. package/dist/core/middleware/built-in/cache.js +43 -45
  103. package/dist/core/middleware/built-in/cache.js.map +1 -1
  104. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  105. package/dist/core/middleware/built-in/cdn.js +27 -29
  106. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  107. package/dist/core/middleware/built-in/cookie.d.ts +2 -2
  108. package/dist/core/middleware/built-in/cookie.js +17 -17
  109. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  110. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  111. package/dist/core/middleware/built-in/cors.js +13 -13
  112. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  113. package/dist/core/middleware/built-in/csp.js +22 -25
  114. package/dist/core/middleware/built-in/csp.js.map +1 -1
  115. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  116. package/dist/core/middleware/built-in/csrf.js +21 -24
  117. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  118. package/dist/core/middleware/built-in/error-tracker.js +2 -2
  119. package/dist/core/middleware/built-in/index.d.ts +14 -14
  120. package/dist/core/middleware/built-in/performance-monitor.js +2 -2
  121. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  122. package/dist/core/middleware/built-in/rate-limit.js +12 -12
  123. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  124. package/dist/core/middleware/built-in/session.d.ts +5 -5
  125. package/dist/core/middleware/built-in/session.js +35 -38
  126. package/dist/core/middleware/built-in/session.js.map +1 -1
  127. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  128. package/dist/core/middleware/built-in/sse.js +20 -22
  129. package/dist/core/middleware/built-in/sse.js.map +1 -1
  130. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  131. package/dist/core/middleware/built-in/validation.js +13 -13
  132. package/dist/core/middleware/index.d.ts +5 -5
  133. package/dist/core/middleware/index.js +16 -16
  134. package/dist/core/middleware/index.js.map +1 -1
  135. package/dist/core/modules/auto-discovery.d.ts +2 -2
  136. package/dist/core/modules/auto-discovery.js +12 -13
  137. package/dist/core/modules/auto-discovery.js.map +1 -1
  138. package/dist/core/modules/index.d.ts +2 -2
  139. package/dist/core/modules/index.js.map +1 -1
  140. package/dist/core/modules/modules.d.ts +3 -3
  141. package/dist/core/modules/modules.js +3 -6
  142. package/dist/core/modules/modules.js.map +1 -1
  143. package/dist/core/networking/index.d.ts +2 -2
  144. package/dist/core/networking/index.js.map +1 -1
  145. package/dist/core/networking/service-discovery.d.ts +2 -2
  146. package/dist/core/networking/service-discovery.js +27 -27
  147. package/dist/core/networking/service-discovery.js.map +1 -1
  148. package/dist/core/networking/websocket-manager.d.ts +3 -3
  149. package/dist/core/networking/websocket-manager.js +15 -16
  150. package/dist/core/networking/websocket-manager.js.map +1 -1
  151. package/dist/core/routing/app-integration.d.ts +2 -2
  152. package/dist/core/routing/app-integration.js +13 -13
  153. package/dist/core/routing/app-integration.js.map +1 -1
  154. package/dist/core/routing/index.d.ts +3 -3
  155. package/dist/core/routing/index.js +43 -52
  156. package/dist/core/routing/index.js.map +1 -1
  157. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  158. package/dist/core/runtime/aws-lambda-adapter.js +14 -16
  159. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  160. package/dist/core/runtime/base-adapter.d.ts +2 -2
  161. package/dist/core/runtime/base-adapter.js +11 -12
  162. package/dist/core/runtime/base-adapter.js.map +1 -1
  163. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  164. package/dist/core/runtime/cloudflare-workers-adapter.js +20 -21
  165. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  166. package/dist/core/runtime/index.d.ts +9 -9
  167. package/dist/core/runtime/index.js +4 -4
  168. package/dist/core/runtime/index.js.map +1 -1
  169. package/dist/core/runtime/node-adapter.d.ts +5 -5
  170. package/dist/core/runtime/node-adapter.js +35 -35
  171. package/dist/core/runtime/node-adapter.js.map +1 -1
  172. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  173. package/dist/core/runtime/vercel-edge-adapter.js +12 -15
  174. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  175. package/dist/core/utilities/circuit-breaker.js +6 -6
  176. package/dist/core/utilities/container.d.ts +1 -1
  177. package/dist/core/utilities/container.js +17 -22
  178. package/dist/core/utilities/container.js.map +1 -1
  179. package/dist/core/utilities/hooks.d.ts +3 -3
  180. package/dist/core/utilities/hooks.js +11 -11
  181. package/dist/core/utilities/hooks.js.map +1 -1
  182. package/dist/core/utilities/index.d.ts +4 -4
  183. package/dist/core/validation/index.d.ts +3 -3
  184. package/dist/core/validation/index.js +15 -15
  185. package/dist/core/validation/index.js.map +1 -1
  186. package/dist/index.d.ts +31 -30
  187. package/dist/index.js +28 -1
  188. package/dist/index.js.map +1 -1
  189. package/dist/moro.d.ts +14 -14
  190. package/dist/moro.js +79 -88
  191. package/dist/moro.js.map +1 -1
  192. package/dist/types/cache.d.ts +1 -1
  193. package/dist/types/core.d.ts +2 -2
  194. package/dist/types/events.d.ts +19 -19
  195. package/dist/types/hooks.d.ts +1 -1
  196. package/dist/types/http.d.ts +2 -2
  197. package/dist/types/logger.d.ts +3 -3
  198. package/dist/types/module.d.ts +2 -2
  199. package/dist/types/runtime.d.ts +2 -2
  200. package/dist/types/session.d.ts +4 -4
  201. package/package.json +180 -164
  202. package/src/core/config/index.ts +7 -9
  203. package/src/core/config/loader.ts +86 -158
  204. package/src/core/config/schema.ts +59 -122
  205. package/src/core/config/utils.ts +27 -45
  206. package/src/core/database/adapters/drizzle.ts +53 -75
  207. package/src/core/database/adapters/index.ts +26 -29
  208. package/src/core/database/adapters/mongodb.ts +31 -54
  209. package/src/core/database/adapters/mysql.ts +40 -50
  210. package/src/core/database/adapters/postgresql.ts +32 -42
  211. package/src/core/database/adapters/redis.ts +31 -36
  212. package/src/core/database/adapters/sqlite.ts +43 -51
  213. package/src/core/database/index.ts +2 -2
  214. package/src/core/docs/index.ts +25 -39
  215. package/src/core/docs/openapi-generator.ts +104 -117
  216. package/src/core/docs/simple-docs.ts +29 -39
  217. package/src/core/docs/swagger-ui.ts +57 -76
  218. package/src/core/docs/zod-to-openapi.ts +121 -153
  219. package/src/core/events/event-bus.ts +22 -45
  220. package/src/core/events/index.ts +2 -2
  221. package/src/core/framework.ts +119 -197
  222. package/src/core/http/http-server.ts +260 -360
  223. package/src/core/http/index.ts +3 -8
  224. package/src/core/http/router.ts +19 -31
  225. package/src/core/logger/filters.ts +19 -22
  226. package/src/core/logger/index.ts +3 -3
  227. package/src/core/logger/logger.ts +59 -100
  228. package/src/core/logger/outputs.ts +23 -27
  229. package/src/core/middleware/built-in/adapters/cache/file.ts +21 -23
  230. package/src/core/middleware/built-in/adapters/cache/index.ts +11 -14
  231. package/src/core/middleware/built-in/adapters/cache/memory.ts +7 -7
  232. package/src/core/middleware/built-in/adapters/cache/redis.ts +21 -24
  233. package/src/core/middleware/built-in/adapters/cdn/azure.ts +10 -18
  234. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +19 -36
  235. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +17 -26
  236. package/src/core/middleware/built-in/adapters/cdn/index.ts +10 -10
  237. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  238. package/src/core/middleware/built-in/auth.ts +16 -16
  239. package/src/core/middleware/built-in/cache.ts +50 -67
  240. package/src/core/middleware/built-in/cdn.ts +34 -61
  241. package/src/core/middleware/built-in/cookie.ts +23 -28
  242. package/src/core/middleware/built-in/cors.ts +17 -17
  243. package/src/core/middleware/built-in/csp.ts +25 -31
  244. package/src/core/middleware/built-in/csrf.ts +24 -29
  245. package/src/core/middleware/built-in/error-tracker.ts +3 -3
  246. package/src/core/middleware/built-in/index.ts +28 -28
  247. package/src/core/middleware/built-in/performance-monitor.ts +4 -4
  248. package/src/core/middleware/built-in/rate-limit.ts +15 -15
  249. package/src/core/middleware/built-in/request-logger.ts +1 -3
  250. package/src/core/middleware/built-in/session.ts +47 -70
  251. package/src/core/middleware/built-in/sse.ts +23 -28
  252. package/src/core/middleware/built-in/validation.ts +15 -15
  253. package/src/core/middleware/index.ts +26 -37
  254. package/src/core/modules/auto-discovery.ts +21 -31
  255. package/src/core/modules/index.ts +2 -5
  256. package/src/core/modules/modules.ts +11 -20
  257. package/src/core/networking/index.ts +2 -6
  258. package/src/core/networking/service-discovery.ts +41 -61
  259. package/src/core/networking/websocket-manager.ts +27 -36
  260. package/src/core/routing/app-integration.ts +19 -32
  261. package/src/core/routing/index.ts +57 -88
  262. package/src/core/runtime/aws-lambda-adapter.ts +20 -30
  263. package/src/core/runtime/base-adapter.ts +17 -27
  264. package/src/core/runtime/cloudflare-workers-adapter.ts +28 -42
  265. package/src/core/runtime/index.ts +21 -33
  266. package/src/core/runtime/node-adapter.ts +59 -73
  267. package/src/core/runtime/vercel-edge-adapter.ts +18 -29
  268. package/src/core/utilities/circuit-breaker.ts +7 -7
  269. package/src/core/utilities/container.ts +52 -89
  270. package/src/core/utilities/hooks.ts +17 -23
  271. package/src/core/utilities/index.ts +4 -4
  272. package/src/core/validation/index.ts +25 -51
  273. package/src/index.ts +58 -60
  274. package/src/moro.ts +119 -191
  275. package/src/types/cache.ts +1 -1
  276. package/src/types/core.ts +2 -2
  277. package/src/types/database.ts +2 -10
  278. package/src/types/events.ts +23 -31
  279. package/src/types/hooks.ts +1 -1
  280. package/src/types/http.ts +5 -8
  281. package/src/types/logger.ts +7 -23
  282. package/src/types/module.ts +2 -2
  283. package/src/types/runtime.ts +6 -21
  284. package/src/types/session.ts +4 -4
@@ -8,11 +8,11 @@ import {
8
8
  createRoute,
9
9
  defineRoute,
10
10
  HttpMethod,
11
- } from "./index";
12
- import { HttpRequest, HttpResponse } from "../http";
13
- import { createFrameworkLogger } from "../logger";
11
+ } from './index';
12
+ import { HttpRequest, HttpResponse } from '../http';
13
+ import { createFrameworkLogger } from '../logger';
14
14
 
15
- const logger = createFrameworkLogger("AppIntegration");
15
+ const logger = createFrameworkLogger('AppIntegration');
16
16
 
17
17
  // Extended app interface with intelligent routing
18
18
  export interface IntelligentApp {
@@ -32,12 +32,7 @@ export interface IntelligentApp {
32
32
  register(route: CompiledRoute): void;
33
33
 
34
34
  // Direct route method (deprecated)
35
- directRoute(
36
- method: string,
37
- path: string,
38
- handler: Function,
39
- options?: any,
40
- ): void;
35
+ directRoute(method: string, path: string, handler: Function, options?: any): void;
41
36
  }
42
37
 
43
38
  // Route registry for managing compiled routes
@@ -63,7 +58,7 @@ export class RouteRegistry {
63
58
  paramNames,
64
59
  });
65
60
 
66
- logger.debug(`Registered route: ${key}`, "RouteRegistry", {
61
+ logger.debug(`Registered route: ${key}`, 'RouteRegistry', {
67
62
  path: route.schema.path,
68
63
  hasValidation: !!route.schema.validation,
69
64
  hasAuth: !!route.schema.auth,
@@ -105,10 +100,10 @@ export class RouteRegistry {
105
100
 
106
101
  // Convert path parameters like :id to regex groups
107
102
  const regexPath = path
108
- .replace(/\//g, "\\/") // Escape forward slashes
103
+ .replace(/\//g, '\\/') // Escape forward slashes
109
104
  .replace(/:([^/]+)/g, (match, paramName) => {
110
105
  paramNames.push(paramName);
111
- return "([^/]+)"; // Match parameter value
106
+ return '([^/]+)'; // Match parameter value
112
107
  });
113
108
 
114
109
  return {
@@ -124,31 +119,31 @@ export class IntelligentRoutingManager implements IntelligentApp {
124
119
 
125
120
  // Chainable route methods
126
121
  get(path: string): RouteBuilder {
127
- return this.createChainableRoute("GET", path);
122
+ return this.createChainableRoute('GET', path);
128
123
  }
129
124
 
130
125
  post(path: string): RouteBuilder {
131
- return this.createChainableRoute("POST", path);
126
+ return this.createChainableRoute('POST', path);
132
127
  }
133
128
 
134
129
  put(path: string): RouteBuilder {
135
- return this.createChainableRoute("PUT", path);
130
+ return this.createChainableRoute('PUT', path);
136
131
  }
137
132
 
138
133
  delete(path: string): RouteBuilder {
139
- return this.createChainableRoute("DELETE", path);
134
+ return this.createChainableRoute('DELETE', path);
140
135
  }
141
136
 
142
137
  patch(path: string): RouteBuilder {
143
- return this.createChainableRoute("PATCH", path);
138
+ return this.createChainableRoute('PATCH', path);
144
139
  }
145
140
 
146
141
  head(path: string): RouteBuilder {
147
- return this.createChainableRoute("HEAD", path);
142
+ return this.createChainableRoute('HEAD', path);
148
143
  }
149
144
 
150
145
  options(path: string): RouteBuilder {
151
- return this.createChainableRoute("OPTIONS", path);
146
+ return this.createChainableRoute('OPTIONS', path);
152
147
  }
153
148
 
154
149
  // Schema-first route method
@@ -164,10 +159,7 @@ export class IntelligentRoutingManager implements IntelligentApp {
164
159
  }
165
160
 
166
161
  // Handle incoming requests with intelligent routing
167
- async handleIntelligentRoute(
168
- req: HttpRequest,
169
- res: HttpResponse,
170
- ): Promise<boolean> {
162
+ async handleIntelligentRoute(req: HttpRequest, res: HttpResponse): Promise<boolean> {
171
163
  return await this.routeRegistry.handleRequest(req, res);
172
164
  }
173
165
 
@@ -177,16 +169,11 @@ export class IntelligentRoutingManager implements IntelligentApp {
177
169
  }
178
170
 
179
171
  // Direct route method (deprecated)
180
- directRoute(
181
- method: string,
182
- path: string,
183
- handler: Function,
184
- options?: any,
185
- ): void {
186
- logger.warn("Using deprecated direct route method", "DirectRoute", {
172
+ directRoute(method: string, path: string, handler: Function, options?: any): void {
173
+ logger.warn('Using deprecated direct route method', 'DirectRoute', {
187
174
  method,
188
175
  path,
189
- suggestion: "Use chainable or schema-first API instead",
176
+ suggestion: 'Use chainable or schema-first API instead',
190
177
  });
191
178
 
192
179
  // Convert direct options to new schema format
@@ -1,29 +1,19 @@
1
1
  // Intelligent Routing System for Moro Framework
2
2
  // Schema-first with automatic middleware ordering and chainable API
3
3
 
4
- import { z, ZodSchema } from "zod";
5
- import { HttpRequest, HttpResponse } from "../http";
6
- import { createFrameworkLogger } from "../logger";
4
+ import { z, ZodSchema } from 'zod';
5
+ import { HttpRequest, HttpResponse } from '../http';
6
+ import { createFrameworkLogger } from '../logger';
7
7
 
8
- const logger = createFrameworkLogger("IntelligentRouting");
8
+ const logger = createFrameworkLogger('IntelligentRouting');
9
9
 
10
10
  // Core types
11
- export type HttpMethod =
12
- | "GET"
13
- | "POST"
14
- | "PUT"
15
- | "DELETE"
16
- | "PATCH"
17
- | "HEAD"
18
- | "OPTIONS";
19
- export type RouteHandler<T = any> = (
20
- req: HttpRequest,
21
- res: HttpResponse,
22
- ) => T | Promise<T>;
11
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
12
+ export type RouteHandler<T = any> = (req: HttpRequest, res: HttpResponse) => T | Promise<T>;
23
13
  export type Middleware = (
24
14
  req: HttpRequest,
25
15
  res: HttpResponse,
26
- next: () => void,
16
+ next: () => void
27
17
  ) => void | Promise<void>;
28
18
 
29
19
  // Configuration interfaces
@@ -81,16 +71,16 @@ export interface RouteSchema {
81
71
 
82
72
  // Execution phases in optimal order
83
73
  export const EXECUTION_PHASES = [
84
- "security", // CORS, Helmet (framework-managed)
85
- "parsing", // Body/query parsing (framework-managed)
86
- "rateLimit", // Rate limiting (early protection)
87
- "before", // Custom pre-processing middleware
88
- "auth", // Authentication/authorization
89
- "validation", // Request validation
90
- "transform", // Data transformation middleware
91
- "cache", // Caching logic
92
- "after", // Custom post-processing middleware
93
- "handler", // Route handler (always last)
74
+ 'security', // CORS, Helmet (framework-managed)
75
+ 'parsing', // Body/query parsing (framework-managed)
76
+ 'rateLimit', // Rate limiting (early protection)
77
+ 'before', // Custom pre-processing middleware
78
+ 'auth', // Authentication/authorization
79
+ 'validation', // Request validation
80
+ 'transform', // Data transformation middleware
81
+ 'cache', // Caching logic
82
+ 'after', // Custom post-processing middleware
83
+ 'handler', // Route handler (always last)
94
84
  ] as const;
95
85
 
96
86
  export type ExecutionPhase = (typeof EXECUTION_PHASES)[number];
@@ -202,28 +192,19 @@ export class IntelligentRouteBuilder implements RouteBuilder {
202
192
  // Custom middleware
203
193
  before(...middleware: Middleware[]): RouteBuilder {
204
194
  if (!this.schema.middleware) this.schema.middleware = {};
205
- this.schema.middleware.before = [
206
- ...(this.schema.middleware.before || []),
207
- ...middleware,
208
- ];
195
+ this.schema.middleware.before = [...(this.schema.middleware.before || []), ...middleware];
209
196
  return this;
210
197
  }
211
198
 
212
199
  after(...middleware: Middleware[]): RouteBuilder {
213
200
  if (!this.schema.middleware) this.schema.middleware = {};
214
- this.schema.middleware.after = [
215
- ...(this.schema.middleware.after || []),
216
- ...middleware,
217
- ];
201
+ this.schema.middleware.after = [...(this.schema.middleware.after || []), ...middleware];
218
202
  return this;
219
203
  }
220
204
 
221
205
  transform(...middleware: Middleware[]): RouteBuilder {
222
206
  if (!this.schema.middleware) this.schema.middleware = {};
223
- this.schema.middleware.transform = [
224
- ...(this.schema.middleware.transform || []),
225
- ...middleware,
226
- ];
207
+ this.schema.middleware.transform = [...(this.schema.middleware.transform || []), ...middleware];
227
208
  return this;
228
209
  }
229
210
 
@@ -245,7 +226,7 @@ export class IntelligentRouteBuilder implements RouteBuilder {
245
226
  // Terminal method - compiles the route
246
227
  handler<T>(handler: RouteHandler<T>): CompiledRoute {
247
228
  if (!handler) {
248
- throw new Error("Handler is required");
229
+ throw new Error('Handler is required');
249
230
  }
250
231
 
251
232
  const completeSchema: RouteSchema = {
@@ -255,7 +236,7 @@ export class IntelligentRouteBuilder implements RouteBuilder {
255
236
 
256
237
  logger.debug(
257
238
  `Compiled route: ${completeSchema.method} ${completeSchema.path}`,
258
- "RouteCompilation",
239
+ 'RouteCompilation',
259
240
  {
260
241
  hasValidation: !!completeSchema.validation,
261
242
  hasAuth: !!completeSchema.auth,
@@ -266,7 +247,7 @@ export class IntelligentRouteBuilder implements RouteBuilder {
266
247
  after: completeSchema.middleware?.after?.length || 0,
267
248
  transform: completeSchema.middleware?.transform?.length || 0,
268
249
  },
269
- },
250
+ }
270
251
  );
271
252
 
272
253
  return new ExecutableRoute(completeSchema);
@@ -282,20 +263,20 @@ export class ExecutableRoute implements CompiledRoute {
282
263
 
283
264
  try {
284
265
  // Execute middleware in intelligent order
285
- await this.executePhase("before", validatedReq, res);
286
- await this.executePhase("rateLimit", validatedReq, res);
287
- await this.executePhase("auth", validatedReq, res);
288
- await this.executePhase("validation", validatedReq, res);
289
- await this.executePhase("transform", validatedReq, res);
290
- await this.executePhase("cache", validatedReq, res);
291
- await this.executePhase("after", validatedReq, res);
266
+ await this.executePhase('before', validatedReq, res);
267
+ await this.executePhase('rateLimit', validatedReq, res);
268
+ await this.executePhase('auth', validatedReq, res);
269
+ await this.executePhase('validation', validatedReq, res);
270
+ await this.executePhase('transform', validatedReq, res);
271
+ await this.executePhase('cache', validatedReq, res);
272
+ await this.executePhase('after', validatedReq, res);
292
273
 
293
274
  // Execute handler last
294
275
  if (!res.headersSent) {
295
- await this.executePhase("handler", validatedReq, res);
276
+ await this.executePhase('handler', validatedReq, res);
296
277
  }
297
278
  } catch (error) {
298
- logger.error("Route execution error", "RouteExecution", {
279
+ logger.error('Route execution error', 'RouteExecution', {
299
280
  error: error instanceof Error ? error.message : String(error),
300
281
  route: `${this.schema.method} ${this.schema.path}`,
301
282
  requestId: req.requestId,
@@ -304,7 +285,7 @@ export class ExecutableRoute implements CompiledRoute {
304
285
  if (!res.headersSent) {
305
286
  res.status(500).json({
306
287
  success: false,
307
- error: "Internal server error",
288
+ error: 'Internal server error',
308
289
  requestId: req.requestId,
309
290
  });
310
291
  }
@@ -314,10 +295,10 @@ export class ExecutableRoute implements CompiledRoute {
314
295
  private async executePhase(
315
296
  phase: ExecutionPhase,
316
297
  req: ValidatedRequest,
317
- res: HttpResponse,
298
+ res: HttpResponse
318
299
  ): Promise<void> {
319
300
  switch (phase) {
320
- case "before":
301
+ case 'before':
321
302
  if (this.schema.middleware?.before) {
322
303
  for (const middleware of this.schema.middleware.before) {
323
304
  await this.executeMiddleware(middleware, req, res);
@@ -325,25 +306,25 @@ export class ExecutableRoute implements CompiledRoute {
325
306
  }
326
307
  break;
327
308
 
328
- case "rateLimit":
309
+ case 'rateLimit':
329
310
  if (this.schema.rateLimit) {
330
311
  await this.executeRateLimit(req, res);
331
312
  }
332
313
  break;
333
314
 
334
- case "auth":
315
+ case 'auth':
335
316
  if (this.schema.auth) {
336
317
  await this.executeAuth(req, res);
337
318
  }
338
319
  break;
339
320
 
340
- case "validation":
321
+ case 'validation':
341
322
  if (this.schema.validation) {
342
323
  await this.executeValidation(req, res);
343
324
  }
344
325
  break;
345
326
 
346
- case "transform":
327
+ case 'transform':
347
328
  if (this.schema.middleware?.transform) {
348
329
  for (const middleware of this.schema.middleware.transform) {
349
330
  await this.executeMiddleware(middleware, req, res);
@@ -351,13 +332,13 @@ export class ExecutableRoute implements CompiledRoute {
351
332
  }
352
333
  break;
353
334
 
354
- case "cache":
335
+ case 'cache':
355
336
  if (this.schema.cache) {
356
337
  await this.executeCache(req, res);
357
338
  }
358
339
  break;
359
340
 
360
- case "after":
341
+ case 'after':
361
342
  if (this.schema.middleware?.after) {
362
343
  for (const middleware of this.schema.middleware.after) {
363
344
  await this.executeMiddleware(middleware, req, res);
@@ -365,7 +346,7 @@ export class ExecutableRoute implements CompiledRoute {
365
346
  }
366
347
  break;
367
348
 
368
- case "handler": {
349
+ case 'handler': {
369
350
  const result = await this.schema.handler(req, res);
370
351
  if (result !== undefined && !res.headersSent) {
371
352
  res.json(result);
@@ -378,7 +359,7 @@ export class ExecutableRoute implements CompiledRoute {
378
359
  private async executeMiddleware(
379
360
  middleware: Middleware,
380
361
  req: HttpRequest,
381
- res: HttpResponse,
362
+ res: HttpResponse
382
363
  ): Promise<void> {
383
364
  return new Promise((resolve, reject) => {
384
365
  try {
@@ -393,31 +374,22 @@ export class ExecutableRoute implements CompiledRoute {
393
374
  });
394
375
  }
395
376
 
396
- private async executeRateLimit(
397
- req: HttpRequest,
398
- res: HttpResponse,
399
- ): Promise<void> {
377
+ private async executeRateLimit(req: HttpRequest, res: HttpResponse): Promise<void> {
400
378
  // Rate limiting implementation will be added
401
- logger.debug("Rate limit check", "RateLimit", {
379
+ logger.debug('Rate limit check', 'RateLimit', {
402
380
  config: this.schema.rateLimit,
403
381
  ip: req.ip,
404
382
  });
405
383
  }
406
384
 
407
- private async executeAuth(
408
- req: ValidatedRequest,
409
- res: HttpResponse,
410
- ): Promise<void> {
385
+ private async executeAuth(req: ValidatedRequest, res: HttpResponse): Promise<void> {
411
386
  // Authentication implementation will be added
412
- logger.debug("Auth check", "Auth", {
387
+ logger.debug('Auth check', 'Auth', {
413
388
  config: this.schema.auth,
414
389
  });
415
390
  }
416
391
 
417
- private async executeValidation(
418
- req: ValidatedRequest,
419
- res: HttpResponse,
420
- ): Promise<void> {
392
+ private async executeValidation(req: ValidatedRequest, res: HttpResponse): Promise<void> {
421
393
  if (!this.schema.validation) return;
422
394
 
423
395
  const { body, query, params, headers } = this.schema.validation;
@@ -428,7 +400,7 @@ export class ExecutableRoute implements CompiledRoute {
428
400
  req.validatedBody = await body.parseAsync(req.body);
429
401
  req.body = req.validatedBody; // Update original for compatibility
430
402
  } catch (error: any) {
431
- this.sendValidationError(res, error, "body", req.requestId);
403
+ this.sendValidationError(res, error, 'body', req.requestId);
432
404
  return;
433
405
  }
434
406
  }
@@ -439,7 +411,7 @@ export class ExecutableRoute implements CompiledRoute {
439
411
  req.validatedQuery = await query.parseAsync(req.query);
440
412
  req.query = req.validatedQuery; // Update original for compatibility
441
413
  } catch (error: any) {
442
- this.sendValidationError(res, error, "query", req.requestId);
414
+ this.sendValidationError(res, error, 'query', req.requestId);
443
415
  return;
444
416
  }
445
417
  }
@@ -450,7 +422,7 @@ export class ExecutableRoute implements CompiledRoute {
450
422
  req.validatedParams = await params.parseAsync(req.params);
451
423
  req.params = req.validatedParams; // Update original for compatibility
452
424
  } catch (error: any) {
453
- this.sendValidationError(res, error, "params", req.requestId);
425
+ this.sendValidationError(res, error, 'params', req.requestId);
454
426
  return;
455
427
  }
456
428
  }
@@ -460,12 +432,12 @@ export class ExecutableRoute implements CompiledRoute {
460
432
  try {
461
433
  req.validatedHeaders = await headers.parseAsync(req.headers);
462
434
  } catch (error: any) {
463
- this.sendValidationError(res, error, "headers", req.requestId);
435
+ this.sendValidationError(res, error, 'headers', req.requestId);
464
436
  return;
465
437
  }
466
438
  }
467
439
 
468
- logger.debug("Validation passed", "Validation", {
440
+ logger.debug('Validation passed', 'Validation', {
469
441
  route: `${this.schema.method} ${this.schema.path}`,
470
442
  validatedFields: Object.keys(this.schema.validation),
471
443
  });
@@ -475,14 +447,14 @@ export class ExecutableRoute implements CompiledRoute {
475
447
  res: HttpResponse,
476
448
  error: any,
477
449
  field: string,
478
- requestId?: string,
450
+ requestId?: string
479
451
  ): void {
480
452
  if (error.issues) {
481
453
  res.status(400).json({
482
454
  success: false,
483
455
  error: `Validation failed for ${field}`,
484
456
  details: error.issues.map((issue: any) => ({
485
- field: issue.path.length > 0 ? issue.path.join(".") : field,
457
+ field: issue.path.length > 0 ? issue.path.join('.') : field,
486
458
  message: issue.message,
487
459
  code: issue.code,
488
460
  })),
@@ -497,12 +469,9 @@ export class ExecutableRoute implements CompiledRoute {
497
469
  }
498
470
  }
499
471
 
500
- private async executeCache(
501
- req: HttpRequest,
502
- res: HttpResponse,
503
- ): Promise<void> {
472
+ private async executeCache(req: HttpRequest, res: HttpResponse): Promise<void> {
504
473
  // Caching implementation will be added
505
- logger.debug("Cache check", "Cache", {
474
+ logger.debug('Cache check', 'Cache', {
506
475
  config: this.schema.cache,
507
476
  });
508
477
  }
@@ -1,7 +1,7 @@
1
1
  // AWS Lambda runtime adapter
2
- import { BaseRuntimeAdapter } from "./base-adapter";
3
- import { HttpRequest, HttpResponse } from "../../types/http";
4
- import { RuntimeHttpResponse } from "../../types/runtime";
2
+ import { BaseRuntimeAdapter } from './base-adapter';
3
+ import { HttpRequest, HttpResponse } from '../../types/http';
4
+ import { RuntimeHttpResponse } from '../../types/runtime';
5
5
 
6
6
  export interface LambdaEvent {
7
7
  httpMethod: string;
@@ -40,12 +40,9 @@ export interface LambdaResponse {
40
40
  }
41
41
 
42
42
  export class AWSLambdaAdapter extends BaseRuntimeAdapter {
43
- readonly type = "aws-lambda" as const;
43
+ readonly type = 'aws-lambda' as const;
44
44
 
45
- async adaptRequest(
46
- event: LambdaEvent,
47
- context: LambdaContext,
48
- ): Promise<HttpRequest> {
45
+ async adaptRequest(event: LambdaEvent, context: LambdaContext): Promise<HttpRequest> {
49
46
  const { pathname, query } = this.parseUrl(event.path);
50
47
 
51
48
  // Merge query parameters from event
@@ -57,12 +54,9 @@ export class AWSLambdaAdapter extends BaseRuntimeAdapter {
57
54
  // Parse body
58
55
  let body: any;
59
56
  if (event.body) {
60
- const contentType =
61
- event.headers?.["content-type"] ||
62
- event.headers?.["Content-Type"] ||
63
- "";
57
+ const contentType = event.headers?.['content-type'] || event.headers?.['Content-Type'] || '';
64
58
  if (event.isBase64Encoded) {
65
- body = Buffer.from(event.body, "base64").toString();
59
+ body = Buffer.from(event.body, 'base64').toString();
66
60
  } else {
67
61
  body = event.body;
68
62
  }
@@ -76,19 +70,17 @@ export class AWSLambdaAdapter extends BaseRuntimeAdapter {
76
70
  query: mergedQuery,
77
71
  body,
78
72
  headers: event.headers || {},
79
- ip: event.requestContext?.identity?.sourceIp || "unknown",
73
+ ip: event.requestContext?.identity?.sourceIp || 'unknown',
80
74
  params: event.pathParameters || {},
81
75
  requestId: context.awsRequestId,
82
- cookies: this.parseCookies(event.headers?.cookie || ""),
76
+ cookies: this.parseCookies(event.headers?.cookie || ''),
83
77
  files: {},
84
78
  } as Partial<HttpRequest>;
85
79
 
86
80
  return this.enhanceRequest(baseRequest);
87
81
  }
88
82
 
89
- async adaptResponse(
90
- moroResponse: HttpResponse | RuntimeHttpResponse,
91
- ): Promise<LambdaResponse> {
83
+ async adaptResponse(moroResponse: HttpResponse | RuntimeHttpResponse): Promise<LambdaResponse> {
92
84
  const runtimeResponse = moroResponse as RuntimeHttpResponse;
93
85
 
94
86
  let body = runtimeResponse.body;
@@ -96,11 +88,11 @@ export class AWSLambdaAdapter extends BaseRuntimeAdapter {
96
88
  const headers = runtimeResponse.headers || {};
97
89
 
98
90
  // Convert body to string
99
- if (typeof body === "object" && body !== null) {
91
+ if (typeof body === 'object' && body !== null) {
100
92
  body = JSON.stringify(body);
101
- headers["Content-Type"] = "application/json";
93
+ headers['Content-Type'] = 'application/json';
102
94
  } else if (body === null || body === undefined) {
103
- body = "";
95
+ body = '';
104
96
  } else {
105
97
  body = String(body);
106
98
  }
@@ -113,9 +105,7 @@ export class AWSLambdaAdapter extends BaseRuntimeAdapter {
113
105
  };
114
106
  }
115
107
 
116
- createServer(
117
- handler: (req: HttpRequest, res: HttpResponse) => Promise<void>,
118
- ) {
108
+ createServer(handler: (req: HttpRequest, res: HttpResponse) => Promise<void>) {
119
109
  // Return a Lambda-compatible handler function
120
110
  return async (event: LambdaEvent, context: LambdaContext) => {
121
111
  try {
@@ -128,11 +118,11 @@ export class AWSLambdaAdapter extends BaseRuntimeAdapter {
128
118
  } catch (error) {
129
119
  return {
130
120
  statusCode: 500,
131
- headers: { "Content-Type": "application/json" },
121
+ headers: { 'Content-Type': 'application/json' },
132
122
  body: JSON.stringify({
133
123
  success: false,
134
- error: "Internal server error",
135
- message: error instanceof Error ? error.message : "Unknown error",
124
+ error: 'Internal server error',
125
+ message: error instanceof Error ? error.message : 'Unknown error',
136
126
  }),
137
127
  };
138
128
  }
@@ -145,10 +135,10 @@ export class AWSLambdaAdapter extends BaseRuntimeAdapter {
145
135
  private parseCookies(cookieHeader: string): Record<string, string> {
146
136
  const cookies: Record<string, string> = {};
147
137
  if (cookieHeader) {
148
- cookieHeader.split(";").forEach((cookie) => {
149
- const [name, ...rest] = cookie.trim().split("=");
138
+ cookieHeader.split(';').forEach(cookie => {
139
+ const [name, ...rest] = cookie.trim().split('=');
150
140
  if (name && rest.length > 0) {
151
- cookies[name] = rest.join("=");
141
+ cookies[name] = rest.join('=');
152
142
  }
153
143
  });
154
144
  }