@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
package/src/moro.ts CHANGED
@@ -1,35 +1,31 @@
1
1
  // Moro Framework - Modern TypeScript API Framework
2
2
  // Built for developers who demand performance, elegance, and zero compromises
3
3
  // Event-driven • Modular • Enterprise-ready • Developer-first
4
- import { Moro as MoroCore } from "./core/framework";
5
- import { HttpRequest, HttpResponse, middleware } from "./core/http";
6
- import { ModuleConfig, InternalRouteDefinition } from "./types/module";
7
- import { MoroOptions } from "./types/core";
8
- import { MoroEventBus } from "./core/events";
4
+ import { Moro as MoroCore } from './core/framework';
5
+ import { HttpRequest, HttpResponse, middleware } from './core/http';
6
+ import { ModuleConfig, InternalRouteDefinition } from './types/module';
7
+ import { MoroOptions } from './types/core';
8
+ import { MoroEventBus } from './core/events';
9
9
  import {
10
10
  createFrameworkLogger,
11
11
  logger as globalLogger,
12
12
  applyLoggingConfiguration,
13
- } from "./core/logger";
14
- import { IntelligentRoutingManager } from "./core/routing/app-integration";
15
- import { RouteBuilder, RouteSchema, CompiledRoute } from "./core/routing";
16
- import { AppDocumentationManager, DocsConfig } from "./core/docs";
17
- import { readdirSync, statSync } from "fs";
18
- import { join } from "path";
19
- import { EventEmitter } from "events";
13
+ } from './core/logger';
14
+ import { IntelligentRoutingManager } from './core/routing/app-integration';
15
+ import { RouteBuilder, RouteSchema, CompiledRoute } from './core/routing';
16
+ import { AppDocumentationManager, DocsConfig } from './core/docs';
17
+ import { readdirSync, statSync } from 'fs';
18
+ import { join } from 'path';
19
+ import { EventEmitter } from 'events';
20
20
  // Configuration System Integration
21
- import {
22
- initializeConfig,
23
- getGlobalConfig,
24
- type AppConfig,
25
- } from "./core/config";
21
+ import { initializeConfig, getGlobalConfig, type AppConfig } from './core/config';
26
22
  // Runtime System Integration
27
23
  import {
28
24
  RuntimeAdapter,
29
25
  RuntimeType,
30
26
  createRuntimeAdapter,
31
27
  NodeRuntimeAdapter,
32
- } from "./core/runtime";
28
+ } from './core/runtime';
33
29
 
34
30
  export class Moro extends EventEmitter {
35
31
  private coreFramework: MoroCore;
@@ -40,7 +36,7 @@ export class Moro extends EventEmitter {
40
36
  // Enterprise event system integration
41
37
  private eventBus: MoroEventBus;
42
38
  // Application logger
43
- private logger = createFrameworkLogger("App");
39
+ private logger = createFrameworkLogger('App');
44
40
  // Intelligent routing system
45
41
  private intelligentRouting = new IntelligentRoutingManager();
46
42
  // Documentation system
@@ -70,18 +66,14 @@ export class Moro extends EventEmitter {
70
66
  }
71
67
 
72
68
  this.logger.info(
73
- `Configuration system initialized: ${this.config.server.environment}:${this.config.server.port}`,
69
+ `Configuration system initialized: ${this.config.server.environment}:${this.config.server.port}`
74
70
  );
75
71
 
76
72
  // Initialize runtime system
77
- this.runtimeType = options.runtime?.type || "node";
78
- this.runtimeAdapter =
79
- options.runtime?.adapter || createRuntimeAdapter(this.runtimeType);
73
+ this.runtimeType = options.runtime?.type || 'node';
74
+ this.runtimeAdapter = options.runtime?.adapter || createRuntimeAdapter(this.runtimeType);
80
75
 
81
- this.logger.info(
82
- `Runtime system initialized: ${this.runtimeType}`,
83
- "Runtime",
84
- );
76
+ this.logger.info(`Runtime system initialized: ${this.runtimeType}`, 'Runtime');
85
77
 
86
78
  this.coreFramework = new MoroCore();
87
79
 
@@ -96,11 +88,11 @@ export class Moro extends EventEmitter {
96
88
 
97
89
  // Auto-discover modules if enabled
98
90
  if (options.autoDiscover !== false) {
99
- this.autoDiscoverModules(options.modulesPath || "./modules");
91
+ this.autoDiscoverModules(options.modulesPath || './modules');
100
92
  }
101
93
 
102
94
  // Emit initialization event through enterprise event bus
103
- this.eventBus.emit("framework:initialized", {
95
+ this.eventBus.emit('framework:initialized', {
104
96
  options,
105
97
  config: this.config,
106
98
  runtime: this.runtimeType,
@@ -142,95 +134,75 @@ export class Moro extends EventEmitter {
142
134
  // Intelligent route methods - chainable with automatic middleware ordering
143
135
  // Overloads for better TypeScript inference
144
136
  get(path: string): RouteBuilder;
145
- get(
146
- path: string,
147
- handler: (req: HttpRequest, res: HttpResponse) => any,
148
- options?: any,
149
- ): this;
137
+ get(path: string, handler: (req: HttpRequest, res: HttpResponse) => any, options?: any): this;
150
138
  get(
151
139
  path: string,
152
140
  handler?: (req: HttpRequest, res: HttpResponse) => any,
153
- options?: any,
141
+ options?: any
154
142
  ): RouteBuilder | this {
155
143
  if (handler) {
156
144
  // Direct route registration
157
- return this.addRoute("GET", path, handler, options);
145
+ return this.addRoute('GET', path, handler, options);
158
146
  }
159
147
  // Chainable route builder
160
148
  return this.intelligentRouting.get(path);
161
149
  }
162
150
 
163
151
  post(path: string): RouteBuilder;
164
- post(
165
- path: string,
166
- handler: (req: HttpRequest, res: HttpResponse) => any,
167
- options?: any,
168
- ): this;
152
+ post(path: string, handler: (req: HttpRequest, res: HttpResponse) => any, options?: any): this;
169
153
  post(
170
154
  path: string,
171
155
  handler?: (req: HttpRequest, res: HttpResponse) => any,
172
- options?: any,
156
+ options?: any
173
157
  ): RouteBuilder | this {
174
158
  if (handler) {
175
159
  // Direct route registration
176
- return this.addRoute("POST", path, handler, options);
160
+ return this.addRoute('POST', path, handler, options);
177
161
  }
178
162
  // Chainable route builder
179
163
  return this.intelligentRouting.post(path);
180
164
  }
181
165
 
182
166
  put(path: string): RouteBuilder;
183
- put(
184
- path: string,
185
- handler: (req: HttpRequest, res: HttpResponse) => any,
186
- options?: any,
187
- ): this;
167
+ put(path: string, handler: (req: HttpRequest, res: HttpResponse) => any, options?: any): this;
188
168
  put(
189
169
  path: string,
190
170
  handler?: (req: HttpRequest, res: HttpResponse) => any,
191
- options?: any,
171
+ options?: any
192
172
  ): RouteBuilder | this {
193
173
  if (handler) {
194
174
  // Direct route registration
195
- return this.addRoute("PUT", path, handler, options);
175
+ return this.addRoute('PUT', path, handler, options);
196
176
  }
197
177
  // Chainable route builder
198
178
  return this.intelligentRouting.put(path);
199
179
  }
200
180
 
201
181
  delete(path: string): RouteBuilder;
202
- delete(
203
- path: string,
204
- handler: (req: HttpRequest, res: HttpResponse) => any,
205
- options?: any,
206
- ): this;
182
+ delete(path: string, handler: (req: HttpRequest, res: HttpResponse) => any, options?: any): this;
207
183
  delete(
208
184
  path: string,
209
185
  handler?: (req: HttpRequest, res: HttpResponse) => any,
210
- options?: any,
186
+ options?: any
211
187
  ): RouteBuilder | this {
212
188
  if (handler) {
213
189
  // Direct route registration
214
- return this.addRoute("DELETE", path, handler, options);
190
+ return this.addRoute('DELETE', path, handler, options);
215
191
  }
216
192
  // Chainable route builder
217
193
  return this.intelligentRouting.delete(path);
218
194
  }
219
195
 
220
196
  patch(path: string): RouteBuilder;
221
- patch(
222
- path: string,
223
- handler: (req: HttpRequest, res: HttpResponse) => any,
224
- options?: any,
225
- ): this;
197
+ patch(path: string, handler: (req: HttpRequest, res: HttpResponse) => any, options?: any): this;
226
198
  patch(
227
199
  path: string,
228
200
  handler?: (req: HttpRequest, res: HttpResponse) => any,
229
- options?: any,
201
+ options?: any
230
202
  ): RouteBuilder | this {
231
203
  if (handler) {
232
204
  // Direct route registration
233
- return this.addRoute("PATCH", path, handler, options);
205
+ return this.addRoute('PATCH', path, handler, options);
234
206
  }
235
207
  // Chainable route builder
236
208
  return this.intelligentRouting.patch(path);
@@ -245,11 +217,8 @@ export class Moro extends EventEmitter {
245
217
  enableDocs(config: DocsConfig): void {
246
218
  this.documentation.enableDocs(config, this.intelligentRouting);
247
219
 
248
- this.logger.info(
249
- `API Documentation enabled at ${config.basePath || "/docs"}`,
250
- "Documentation",
251
- );
252
- this.eventBus.emit("docs:enabled", { config });
220
+ this.logger.info(`API Documentation enabled at ${config.basePath || '/docs'}`, 'Documentation');
221
+ this.eventBus.emit('docs:enabled', { config });
253
222
  }
254
223
 
255
224
  // Get OpenAPI specification
@@ -275,39 +244,33 @@ export class Moro extends EventEmitter {
275
244
  // Universal middleware system - seamlessly handles standard and advanced middleware
276
245
  async use(middlewareOrFunction: any, config?: any) {
277
246
  // Standard middleware integration (req, res, next pattern)
278
- if (
279
- typeof middlewareOrFunction === "function" &&
280
- middlewareOrFunction.length >= 3
281
- ) {
247
+ if (typeof middlewareOrFunction === 'function' && middlewareOrFunction.length >= 3) {
282
248
  this.coreFramework.addMiddleware(middlewareOrFunction);
283
- this.eventBus.emit("middleware:registered", {
284
- type: "standard",
249
+ this.eventBus.emit('middleware:registered', {
250
+ type: 'standard',
285
251
  middleware: middlewareOrFunction,
286
252
  });
287
253
  return this;
288
254
  }
289
255
 
290
256
  // Function-style middleware execution
291
- if (
292
- typeof middlewareOrFunction === "function" &&
293
- middlewareOrFunction.length <= 1
294
- ) {
257
+ if (typeof middlewareOrFunction === 'function' && middlewareOrFunction.length <= 1) {
295
258
  await middlewareOrFunction(this);
296
- this.eventBus.emit("middleware:executed", {
297
- type: "function",
259
+ this.eventBus.emit('middleware:executed', {
260
+ type: 'function',
298
261
  middleware: middlewareOrFunction,
299
262
  });
300
263
  return this;
301
264
  }
302
265
 
303
266
  // Advanced middleware pipeline integration
304
- this.eventBus.emit("middleware:advanced", {
267
+ this.eventBus.emit('middleware:advanced', {
305
268
  middleware: middlewareOrFunction,
306
269
  config,
307
270
  });
308
271
  this.logger.debug(
309
- "Advanced middleware integration - enhanced capabilities loading...",
310
- "Middleware",
272
+ 'Advanced middleware integration - enhanced capabilities loading...',
273
+ 'Middleware'
311
274
  );
312
275
  return this;
313
276
  }
@@ -319,25 +282,24 @@ export class Moro extends EventEmitter {
319
282
 
320
283
  // Module loading with events
321
284
  async loadModule(moduleOrPath: ModuleConfig | string) {
322
- this.eventBus.emit("module:loading", {
323
- moduleId:
324
- typeof moduleOrPath === "string" ? moduleOrPath : moduleOrPath.name,
285
+ this.eventBus.emit('module:loading', {
286
+ moduleId: typeof moduleOrPath === 'string' ? moduleOrPath : moduleOrPath.name,
325
287
  });
326
288
 
327
- if (typeof moduleOrPath === "string") {
289
+ if (typeof moduleOrPath === 'string') {
328
290
  const module = await this.importModule(moduleOrPath);
329
291
  await this.coreFramework.loadModule(module);
330
292
  this.loadedModules.add(moduleOrPath);
331
- this.eventBus.emit("module:loaded", {
293
+ this.eventBus.emit('module:loaded', {
332
294
  moduleId: module.name,
333
- version: module.version || "1.0.0",
295
+ version: module.version || '1.0.0',
334
296
  });
335
297
  } else {
336
298
  await this.coreFramework.loadModule(moduleOrPath);
337
299
  this.loadedModules.add(moduleOrPath.name);
338
- this.eventBus.emit("module:loaded", {
300
+ this.eventBus.emit('module:loaded', {
339
301
  moduleId: moduleOrPath.name,
340
- version: moduleOrPath.version || "1.0.0",
302
+ version: moduleOrPath.version || '1.0.0',
341
303
  });
342
304
  }
343
305
  return this;
@@ -345,9 +307,9 @@ export class Moro extends EventEmitter {
345
307
 
346
308
  // Database helper with events
347
309
  database(adapter: any) {
348
- this.eventBus.emit("database:connected", {
310
+ this.eventBus.emit('database:connected', {
349
311
  adapter: adapter.constructor.name,
350
- config: "hidden",
312
+ config: 'hidden',
351
313
  });
352
314
  this.coreFramework.registerDatabase(adapter);
353
315
  return this;
@@ -355,35 +317,35 @@ export class Moro extends EventEmitter {
355
317
 
356
318
  // WebSocket helper with events
357
319
  websocket(namespace: string, handlers: Record<string, Function>) {
358
- this.emit("websocket:registering", { namespace, handlers });
320
+ this.emit('websocket:registering', { namespace, handlers });
359
321
 
360
322
  const io = this.coreFramework.getIOServer();
361
323
  const ns = io.of(namespace);
362
324
 
363
325
  Object.entries(handlers).forEach(([event, handler]) => {
364
- ns.on("connection", (socket) => {
365
- this.emit("websocket:connection", { namespace, event, socket });
326
+ ns.on('connection', socket => {
327
+ this.emit('websocket:connection', { namespace, event, socket });
366
328
 
367
329
  socket.on(event, (data, callback) => {
368
- this.emit("websocket:event", { namespace, event, data });
330
+ this.emit('websocket:event', { namespace, event, data });
369
331
 
370
332
  Promise.resolve(handler(socket, data))
371
- .then((result) => {
372
- this.emit("websocket:response", { namespace, event, result });
333
+ .then(result => {
334
+ this.emit('websocket:response', { namespace, event, result });
373
335
  if (callback) callback(result);
374
336
  else if (result) socket.emit(`${event}:response`, result);
375
337
  })
376
- .catch((error) => {
377
- this.emit("websocket:error", { namespace, event, error });
338
+ .catch(error => {
339
+ this.emit('websocket:error', { namespace, event, error });
378
340
  const errorResponse = { success: false, error: error.message };
379
341
  if (callback) callback(errorResponse);
380
- else socket.emit("error", errorResponse);
342
+ else socket.emit('error', errorResponse);
381
343
  });
382
344
  });
383
345
  });
384
346
  });
385
347
 
386
- this.emit("websocket:registered", { namespace, handlers });
348
+ this.emit('websocket:registered', { namespace, handlers });
387
349
  return this;
388
350
  }
389
351
 
@@ -392,41 +354,38 @@ export class Moro extends EventEmitter {
392
354
  listen(port: number, host: string, callback?: () => void): void;
393
355
  listen(port: number, host?: string | (() => void), callback?: () => void) {
394
356
  // Only available for Node.js runtime
395
- if (this.runtimeType !== "node") {
357
+ if (this.runtimeType !== 'node') {
396
358
  throw new Error(
397
- `listen() is only available for Node.js runtime. Current runtime: ${this.runtimeType}. Use getHandler() for other runtimes.`,
359
+ `listen() is only available for Node.js runtime. Current runtime: ${this.runtimeType}. Use getHandler() for other runtimes.`
398
360
  );
399
361
  }
400
362
 
401
363
  // Handle overloaded parameters (port, callback) or (port, host, callback)
402
- if (typeof host === "function") {
364
+ if (typeof host === 'function') {
403
365
  callback = host;
404
366
  host = undefined;
405
367
  }
406
- this.eventBus.emit("server:starting", { port, runtime: this.runtimeType });
368
+ this.eventBus.emit('server:starting', { port, runtime: this.runtimeType });
407
369
 
408
370
  // Add documentation middleware first (if enabled)
409
371
  try {
410
372
  const docsMiddleware = this.documentation.getDocsMiddleware();
411
373
  this.coreFramework.addMiddleware(docsMiddleware);
412
- this.logger.debug("Documentation middleware added", "Documentation");
374
+ this.logger.debug('Documentation middleware added', 'Documentation');
413
375
  } catch (error) {
414
376
  // Documentation not enabled, that's fine
415
- this.logger.debug("Documentation not enabled", "Documentation");
377
+ this.logger.debug('Documentation not enabled', 'Documentation');
416
378
  }
417
379
 
418
380
  // Add intelligent routing middleware to handle chainable routes
419
381
  this.coreFramework.addMiddleware(
420
382
  async (req: HttpRequest, res: HttpResponse, next: () => void) => {
421
383
  // Try intelligent routing first
422
- const handled = await this.intelligentRouting.handleIntelligentRoute(
423
- req,
424
- res,
425
- );
384
+ const handled = await this.intelligentRouting.handleIntelligentRoute(req, res);
426
385
  if (!handled) {
427
386
  next(); // Fall back to direct routes
428
387
  }
429
- },
388
+ }
430
389
  );
431
390
 
432
391
  // Register direct routes with the HTTP server
@@ -435,31 +394,25 @@ export class Moro extends EventEmitter {
435
394
  }
436
395
 
437
396
  const actualCallback = () => {
438
- const displayHost = host || "localhost";
439
- this.logger.info("Moro Server Started", "Server");
440
- this.logger.info(`Runtime: ${this.runtimeType}`, "Server");
441
- this.logger.info(`HTTP API: http://${displayHost}:${port}`, "Server");
442
- this.logger.info(`WebSocket: ws://${displayHost}:${port}`, "Server");
443
- this.logger.info(
444
- "Native Node.js HTTP Zero Dependencies • Maximum Performance",
445
- "Server",
446
- );
447
- this.logger.info("Learn more at https://morojs.com", "Server");
397
+ const displayHost = host || 'localhost';
398
+ this.logger.info('Moro Server Started', 'Server');
399
+ this.logger.info(`Runtime: ${this.runtimeType}`, 'Server');
400
+ this.logger.info(`HTTP API: http://${displayHost}:${port}`, 'Server');
401
+ this.logger.info(`WebSocket: ws://${displayHost}:${port}`, 'Server');
402
+ this.logger.info('Native Node.js HTTP • Zero Dependencies • Maximum Performance', 'Server');
403
+ this.logger.info('Learn more at https://morojs.com', 'Server');
448
404
 
449
405
  // Log intelligent routes info
450
406
  const intelligentRoutes = this.intelligentRouting.getIntelligentRoutes();
451
407
  if (intelligentRoutes.length > 0) {
452
- this.logger.info(
453
- `Intelligent Routes: ${intelligentRoutes.length} registered`,
454
- "Server",
455
- );
408
+ this.logger.info(`Intelligent Routes: ${intelligentRoutes.length} registered`, 'Server');
456
409
  }
457
410
 
458
- this.eventBus.emit("server:started", { port, runtime: this.runtimeType });
411
+ this.eventBus.emit('server:started', { port, runtime: this.runtimeType });
459
412
  if (callback) callback();
460
413
  };
461
414
 
462
- if (host && typeof host === "string") {
415
+ if (host && typeof host === 'string') {
463
416
  this.coreFramework.listen(port, host, actualCallback);
464
417
  } else {
465
418
  this.coreFramework.listen(port, actualCallback);
@@ -480,10 +433,7 @@ export class Moro extends EventEmitter {
480
433
  }
481
434
 
482
435
  // Try intelligent routing first
483
- const handled = await this.intelligentRouting.handleIntelligentRoute(
484
- req,
485
- res,
486
- );
436
+ const handled = await this.intelligentRouting.handleIntelligentRoute(req, res);
487
437
  if (handled) return;
488
438
 
489
439
  // Handle direct routes
@@ -501,7 +451,7 @@ export class Moro extends EventEmitter {
501
451
  // Find matching route
502
452
  const route = this.findMatchingRoute(req.method!, req.path);
503
453
  if (!route) {
504
- (res as any).status(404).json({ success: false, error: "Not found" });
454
+ (res as any).status(404).json({ success: false, error: 'Not found' });
505
455
  return;
506
456
  }
507
457
 
@@ -518,9 +468,7 @@ export class Moro extends EventEmitter {
518
468
  // Get handler function
519
469
  const handler = this.routeHandlers[route.handler];
520
470
  if (!handler) {
521
- (res as any)
522
- .status(500)
523
- .json({ success: false, error: "Handler not found" });
471
+ (res as any).status(500).json({ success: false, error: 'Handler not found' });
524
472
  return;
525
473
  }
526
474
 
@@ -533,9 +481,9 @@ export class Moro extends EventEmitter {
533
481
  if (error.issues) {
534
482
  (res as any).status(400).json({
535
483
  success: false,
536
- error: "Validation failed",
484
+ error: 'Validation failed',
537
485
  details: error.issues.map((issue: any) => ({
538
- field: issue.path.length > 0 ? issue.path.join(".") : "body",
486
+ field: issue.path.length > 0 ? issue.path.join('.') : 'body',
539
487
  message: issue.message,
540
488
  code: issue.code,
541
489
  })),
@@ -548,13 +496,13 @@ export class Moro extends EventEmitter {
548
496
 
549
497
  // Execute rate limiting if present
550
498
  if (route.rateLimit) {
551
- const clientId = req.ip || "unknown";
499
+ const clientId = req.ip || 'unknown';
552
500
  const key = `${route.method}:${route.path}:${clientId}`;
553
501
 
554
502
  if (!this.checkRateLimit(key, route.rateLimit)) {
555
503
  (res as any).status(429).json({
556
504
  success: false,
557
- error: "Rate limit exceeded",
505
+ error: 'Rate limit exceeded',
558
506
  retryAfter: Math.ceil(route.rateLimit.window / 1000),
559
507
  });
560
508
  return;
@@ -570,8 +518,7 @@ export class Moro extends EventEmitter {
570
518
  if (!(res as any).headersSent) {
571
519
  (res as any).status(500).json({
572
520
  success: false,
573
- error:
574
- error instanceof Error ? error.message : "Internal server error",
521
+ error: error instanceof Error ? error.message : 'Internal server error',
575
522
  });
576
523
  }
577
524
  }
@@ -597,12 +544,10 @@ export class Moro extends EventEmitter {
597
544
  // Convert path to regex (simplified version)
598
545
  private pathToRegex(path: string): { pattern: RegExp; paramNames: string[] } {
599
546
  const paramNames: string[] = [];
600
- const regexPath = path
601
- .replace(/\//g, "\\/")
602
- .replace(/:([^/]+)/g, (match, paramName) => {
603
- paramNames.push(paramName);
604
- return "([^/]+)";
605
- });
547
+ const regexPath = path.replace(/\//g, '\\/').replace(/:([^/]+)/g, (match, paramName) => {
548
+ paramNames.push(paramName);
549
+ return '([^/]+)';
550
+ });
606
551
 
607
552
  return {
608
553
  pattern: new RegExp(`^${regexPath}$`),
@@ -621,12 +566,7 @@ export class Moro extends EventEmitter {
621
566
  }
622
567
 
623
568
  // Private methods
624
- private addRoute(
625
- method: string,
626
- path: string,
627
- handler: Function,
628
- options: any = {},
629
- ) {
569
+ private addRoute(method: string, path: string, handler: Function, options: any = {}) {
630
570
  const handlerName = `handler_${this.routes.length}`;
631
571
 
632
572
  this.routes.push({
@@ -669,10 +609,9 @@ export class Moro extends EventEmitter {
669
609
  if (error.issues) {
670
610
  res.status(400).json({
671
611
  success: false,
672
- error: "Validation failed",
612
+ error: 'Validation failed',
673
613
  details: error.issues.map((issue: any) => ({
674
- field:
675
- issue.path.length > 0 ? issue.path.join(".") : "body",
614
+ field: issue.path.length > 0 ? issue.path.join('.') : 'body',
676
615
  message: issue.message,
677
616
  code: issue.code,
678
617
  })),
@@ -685,14 +624,13 @@ export class Moro extends EventEmitter {
685
624
 
686
625
  // Rate limiting middleware
687
626
  if (route.rateLimit) {
688
- const clientId =
689
- req.ip || req.connection.remoteAddress || "unknown";
627
+ const clientId = req.ip || req.connection.remoteAddress || 'unknown';
690
628
  const key = `${route.method}:${route.path}:${clientId}`;
691
629
 
692
630
  if (!this.checkRateLimit(key, route.rateLimit)) {
693
631
  res.status(429).json({
694
632
  success: false,
695
- error: "Rate limit exceeded",
633
+ error: 'Rate limit exceeded',
696
634
  retryAfter: Math.ceil(route.rateLimit.window / 1000),
697
635
  });
698
636
  return;
@@ -708,10 +646,7 @@ export class Moro extends EventEmitter {
708
646
  if (!res.headersSent) {
709
647
  res.status(500).json({
710
648
  success: false,
711
- error:
712
- error instanceof Error
713
- ? error.message
714
- : "Internal server error",
649
+ error: error instanceof Error ? error.message : 'Internal server error',
715
650
  });
716
651
  }
717
652
  }
@@ -726,15 +661,9 @@ export class Moro extends EventEmitter {
726
661
  }
727
662
 
728
663
  // Simple rate limiting for direct routes
729
- private rateLimitStore = new Map<
730
- string,
731
- { count: number; resetTime: number }
732
- >();
733
-
734
- private checkRateLimit(
735
- key: string,
736
- config: { requests: number; window: number },
737
- ): boolean {
664
+ private rateLimitStore = new Map<string, { count: number; resetTime: number }>();
665
+
666
+ private checkRateLimit(key: string, config: { requests: number; window: number }): boolean {
738
667
  const now = Date.now();
739
668
  const bucket = this.rateLimitStore.get(key);
740
669
 
@@ -758,7 +687,7 @@ export class Moro extends EventEmitter {
758
687
  private setupDefaultMiddleware(options: MoroOptions) {
759
688
  // CORS
760
689
  if (options.cors !== false) {
761
- const corsOptions = typeof options.cors === "object" ? options.cors : {};
690
+ const corsOptions = typeof options.cors === 'object' ? options.cors : {};
762
691
  this.use(middleware.cors(corsOptions));
763
692
  }
764
693
 
@@ -769,13 +698,12 @@ export class Moro extends EventEmitter {
769
698
 
770
699
  // Compression
771
700
  if (options.compression !== false) {
772
- const compressionOptions =
773
- typeof options.compression === "object" ? options.compression : {};
701
+ const compressionOptions = typeof options.compression === 'object' ? options.compression : {};
774
702
  this.use(middleware.compression(compressionOptions));
775
703
  }
776
704
 
777
705
  // Body size limiting
778
- this.use(middleware.bodySize({ limit: "10mb" }));
706
+ this.use(middleware.bodySize({ limit: '10mb' }));
779
707
  }
780
708
 
781
709
  private autoDiscoverModules(modulesPath: string) {
@@ -783,14 +711,14 @@ export class Moro extends EventEmitter {
783
711
  if (!statSync(modulesPath).isDirectory()) return;
784
712
 
785
713
  const items = readdirSync(modulesPath);
786
- items.forEach((item) => {
714
+ items.forEach(item => {
787
715
  const fullPath = join(modulesPath, item);
788
716
  if (statSync(fullPath).isDirectory()) {
789
- const indexPath = join(fullPath, "index.ts");
717
+ const indexPath = join(fullPath, 'index.ts');
790
718
  try {
791
719
  statSync(indexPath);
792
720
  // Module directory found, will be loaded later
793
- this.logger.debug(`Discovered module: ${item}`, "ModuleDiscovery");
721
+ this.logger.debug(`Discovered module: ${item}`, 'ModuleDiscovery');
794
722
  } catch {
795
723
  // No index.ts, skip
796
724
  }
@@ -813,30 +741,30 @@ export function createApp(options?: MoroOptions): Moro {
813
741
  }
814
742
 
815
743
  // Runtime-specific convenience functions
816
- export function createAppNode(options?: Omit<MoroOptions, "runtime">): Moro {
744
+ export function createAppNode(options?: Omit<MoroOptions, 'runtime'>): Moro {
817
745
  return new Moro({
818
746
  ...options,
819
- runtime: { type: "node" },
747
+ runtime: { type: 'node' },
820
748
  });
821
749
  }
822
750
 
823
- export function createAppEdge(options?: Omit<MoroOptions, "runtime">): Moro {
751
+ export function createAppEdge(options?: Omit<MoroOptions, 'runtime'>): Moro {
824
752
  return new Moro({
825
753
  ...options,
826
- runtime: { type: "vercel-edge" },
754
+ runtime: { type: 'vercel-edge' },
827
755
  });
828
756
  }
829
757
 
830
- export function createAppLambda(options?: Omit<MoroOptions, "runtime">): Moro {
758
+ export function createAppLambda(options?: Omit<MoroOptions, 'runtime'>): Moro {
831
759
  return new Moro({
832
760
  ...options,
833
- runtime: { type: "aws-lambda" },
761
+ runtime: { type: 'aws-lambda' },
834
762
  });
835
763
  }
836
764
 
837
- export function createAppWorker(options?: Omit<MoroOptions, "runtime">): Moro {
765
+ export function createAppWorker(options?: Omit<MoroOptions, 'runtime'>): Moro {
838
766
  return new Moro({
839
767
  ...options,
840
- runtime: { type: "cloudflare-workers" },
768
+ runtime: { type: 'cloudflare-workers' },
841
769
  });
842
770
  }